From 84ffb490545b397eb52e793ffb6eb03b2ea53679 Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Mon, 2 Oct 2023 12:49:46 -0400 Subject: [PATCH 001/256] ica: protobuf class files for genesis, params, and tx --- .../canine_chain/interchaintxs/genesis.proto | 10 + proto/canine_chain/interchaintxs/params.proto | 13 + proto/canine_chain/interchaintxs/tx.proto | 58 + x/interchaintxs/types/genesis.pb.go | 323 +++++ x/interchaintxs/types/params.pb.go | 307 ++++ x/interchaintxs/types/tx.pb.go | 1256 +++++++++++++++++ 6 files changed, 1967 insertions(+) create mode 100644 proto/canine_chain/interchaintxs/genesis.proto create mode 100644 proto/canine_chain/interchaintxs/params.proto create mode 100644 proto/canine_chain/interchaintxs/tx.proto create mode 100644 x/interchaintxs/types/genesis.pb.go create mode 100644 x/interchaintxs/types/params.pb.go create mode 100644 x/interchaintxs/types/tx.pb.go diff --git a/proto/canine_chain/interchaintxs/genesis.proto b/proto/canine_chain/interchaintxs/genesis.proto new file mode 100644 index 000000000..fc4114ff1 --- /dev/null +++ b/proto/canine_chain/interchaintxs/genesis.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; +package canine_chain.interchaintxs; + +import "gogoproto/gogo.proto"; +import "canine_chain/interchaintxs/params.proto"; + +option go_package = "github.com/jackalLabs/canine-chain/x/interchaintxs/types"; + +// GenesisState defines the interchaintxs module's genesis state. +message GenesisState { Params params = 1 [ (gogoproto.nullable) = false ]; } diff --git a/proto/canine_chain/interchaintxs/params.proto b/proto/canine_chain/interchaintxs/params.proto new file mode 100644 index 000000000..ca84c5a54 --- /dev/null +++ b/proto/canine_chain/interchaintxs/params.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; +package canine_chain.interchaintxs; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/jackalLabs/canine-chain/x/interchaintxs/types"; + +// Params defines the parameters for the module. +message Params { + option (gogoproto.goproto_stringer) = true; // set to true so class file doesn't complain that interface is not satisfied + // Defines maximum amount of messages to be passed in MsgSubmitTx + int64 msg_submit_tx_max_messages = 1; +} diff --git a/proto/canine_chain/interchaintxs/tx.proto b/proto/canine_chain/interchaintxs/tx.proto new file mode 100644 index 000000000..846f571d7 --- /dev/null +++ b/proto/canine_chain/interchaintxs/tx.proto @@ -0,0 +1,58 @@ +syntax = "proto3"; +package canine_chain.interchaintxs; + +option go_package = "github.com/jackalLabs/canine-chain/x/interchaintxs/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + + + +// Msg defines the Msg service. +service Msg { + rpc RegisterInterchainAccount(MsgRegisterInterchainAccount) + returns (MsgRegisterInterchainAccountResponse) {}; + rpc SubmitTx(MsgSubmitTx) returns (MsgSubmitTxResponse) {}; +} + +// MsgRegisterInterchainAccount is used to register an account on a remote zone. +message MsgRegisterInterchainAccount { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string from_address = 1; + string connection_id = 2 [ (gogoproto.moretags) = "yaml:\"connection_id\"" ]; + string interchain_account_id = 3 + [ (gogoproto.moretags) = "yaml:\"interchain_account_id\"" ]; +} + +// MsgRegisterInterchainAccountResponse is the response type for +// MsgRegisterInterchainAccount. +message MsgRegisterInterchainAccountResponse {} + +// MsgSubmitTx defines the payload for Msg/SubmitTx +message MsgSubmitTx { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string from_address = 1; + // interchain_account_id is supposed to be the unique identifier, e.g., + // lido/kava. This allows contracts to have more than one interchain accounts + // on remote zone This identifier will be a part of the portID that we'll + // claim our capability for. + string interchain_account_id = 2; + string connection_id = 3; + repeated google.protobuf.Any msgs = 4; + string memo = 5; + // timeout in seconds after which the packet times out + uint64 timeout = 6; + +} + +// MsgSubmitTxResponse defines the response for Msg/SubmitTx +message MsgSubmitTxResponse { + // channel's sequence_id for outgoing ibc packet. Unique per a channel. + uint64 sequence_id = 1; + // channel src channel on neutron side trasaction was submitted from + string channel = 2; +} diff --git a/x/interchaintxs/types/genesis.pb.go b/x/interchaintxs/types/genesis.pb.go new file mode 100644 index 000000000..b40f60d2a --- /dev/null +++ b/x/interchaintxs/types/genesis.pb.go @@ -0,0 +1,323 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: canine_chain/interchaintxs/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the interchaintxs module's genesis state. +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_16ed6830bcc9e010, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.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 *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "canine_chain.interchaintxs.GenesisState") +} + +func init() { + proto.RegisterFile("canine_chain/interchaintxs/genesis.proto", fileDescriptor_16ed6830bcc9e010) +} + +var fileDescriptor_16ed6830bcc9e010 = []byte{ + // 207 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x48, 0x4e, 0xcc, 0xcb, + 0xcc, 0x4b, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0xcc, 0xd3, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0x02, 0x33, + 0x4b, 0x2a, 0x8a, 0xf5, 0xd3, 0x53, 0xf3, 0x52, 0x8b, 0x33, 0x8b, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, + 0xf2, 0x85, 0xa4, 0x90, 0x55, 0xea, 0xa1, 0xa8, 0x94, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x2b, + 0xd3, 0x07, 0xb1, 0x20, 0x3a, 0xa4, 0xd4, 0xf1, 0x98, 0x5d, 0x90, 0x58, 0x94, 0x98, 0x0b, 0x35, + 0x5a, 0x29, 0x80, 0x8b, 0xc7, 0x1d, 0x62, 0x57, 0x70, 0x49, 0x62, 0x49, 0xaa, 0x90, 0x03, 0x17, + 0x1b, 0x44, 0x5e, 0x82, 0x51, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x49, 0x0f, 0xb7, 0xdd, 0x7a, 0x01, + 0x60, 0x95, 0x4e, 0x2c, 0x27, 0xee, 0xc9, 0x33, 0x04, 0x41, 0xf5, 0x39, 0x05, 0x9d, 0x78, 0x24, + 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, + 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x45, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, + 0x72, 0x7e, 0xae, 0x7e, 0x56, 0x62, 0x72, 0x76, 0x62, 0x8e, 0x4f, 0x62, 0x52, 0xb1, 0x3e, 0xc4, + 0x02, 0x5d, 0x88, 0x53, 0x2b, 0xd0, 0x1c, 0x5b, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x76, + 0xac, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xec, 0xd9, 0x78, 0x3d, 0x33, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) 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 *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) 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 ErrIntOverflowGenesis + } + 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: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/interchaintxs/types/params.pb.go b/x/interchaintxs/types/params.pb.go new file mode 100644 index 000000000..b41afb0ac --- /dev/null +++ b/x/interchaintxs/types/params.pb.go @@ -0,0 +1,307 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: canine_chain/interchaintxs/params.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the module. +type Params struct { + // Defines maximum amount of messages to be passed in MsgSubmitTx + MsgSubmitTxMaxMessages int64 `protobuf:"varint,1,opt,name=msg_submit_tx_max_messages,json=msgSubmitTxMaxMessages,proto3" json:"msg_submit_tx_max_messages,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_001cf9936676b1fd, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetMsgSubmitTxMaxMessages() int64 { + if m != nil { + return m.MsgSubmitTxMaxMessages + } + return 0 +} + +func init() { + proto.RegisterType((*Params)(nil), "canine_chain.interchaintxs.Params") +} + +func init() { + proto.RegisterFile("canine_chain/interchaintxs/params.proto", fileDescriptor_001cf9936676b1fd) +} + +var fileDescriptor_001cf9936676b1fd = []byte{ + // 218 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4f, 0x4e, 0xcc, 0xcb, + 0xcc, 0x4b, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0xcc, 0xd3, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0x02, 0x33, + 0x4b, 0x2a, 0x8a, 0xf5, 0x0b, 0x12, 0x8b, 0x12, 0x73, 0x8b, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, + 0x85, 0xa4, 0x90, 0x15, 0xea, 0xa1, 0x28, 0x94, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x2b, 0xd3, + 0x07, 0xb1, 0x20, 0x3a, 0x94, 0xbc, 0xb8, 0xd8, 0x02, 0xc0, 0x26, 0x08, 0x59, 0x71, 0x49, 0xe5, + 0x16, 0xa7, 0xc7, 0x17, 0x97, 0x26, 0xe5, 0x66, 0x96, 0xc4, 0x97, 0x54, 0xc4, 0xe7, 0x26, 0x56, + 0xc4, 0xe7, 0xa6, 0x16, 0x17, 0x27, 0xa6, 0xa7, 0x16, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x07, + 0x89, 0xe5, 0x16, 0xa7, 0x07, 0x83, 0x15, 0x84, 0x54, 0xf8, 0x26, 0x56, 0xf8, 0x42, 0x65, 0xad, + 0x58, 0x66, 0x2c, 0x90, 0x67, 0x74, 0x0a, 0x3a, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, + 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, + 0x86, 0x28, 0x8b, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xac, 0xc4, + 0xe4, 0xec, 0xc4, 0x1c, 0x9f, 0xc4, 0xa4, 0x62, 0x7d, 0x88, 0x6b, 0x75, 0x21, 0xde, 0xaa, 0x40, + 0xf3, 0x58, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0x99, 0xc6, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x9b, 0x38, 0xe8, 0x03, 0x01, 0x00, 0x00, +} + +func (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MsgSubmitTxMaxMessages != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MsgSubmitTxMaxMessages)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MsgSubmitTxMaxMessages != 0 { + n += 1 + sovParams(uint64(m.MsgSubmitTxMaxMessages)) + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) 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 ErrIntOverflowParams + } + 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: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MsgSubmitTxMaxMessages", wireType) + } + m.MsgSubmitTxMaxMessages = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MsgSubmitTxMaxMessages |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/interchaintxs/types/tx.pb.go b/x/interchaintxs/types/tx.pb.go new file mode 100644 index 000000000..3fa00aba3 --- /dev/null +++ b/x/interchaintxs/types/tx.pb.go @@ -0,0 +1,1256 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: canine_chain/interchaintxs/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + types "github.com/cosmos/cosmos-sdk/codec/types" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgRegisterInterchainAccount is used to register an account on a remote zone. +type MsgRegisterInterchainAccount struct { + FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` + InterchainAccountId string `protobuf:"bytes,3,opt,name=interchain_account_id,json=interchainAccountId,proto3" json:"interchain_account_id,omitempty" yaml:"interchain_account_id"` +} + +func (m *MsgRegisterInterchainAccount) Reset() { *m = MsgRegisterInterchainAccount{} } +func (m *MsgRegisterInterchainAccount) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterInterchainAccount) ProtoMessage() {} +func (*MsgRegisterInterchainAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_304a59451e844c03, []int{0} +} +func (m *MsgRegisterInterchainAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterInterchainAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterInterchainAccount.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 *MsgRegisterInterchainAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterInterchainAccount.Merge(m, src) +} +func (m *MsgRegisterInterchainAccount) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterInterchainAccount) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterInterchainAccount.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterInterchainAccount proto.InternalMessageInfo + +// MsgRegisterInterchainAccountResponse is the response type for +// MsgRegisterInterchainAccount. +type MsgRegisterInterchainAccountResponse struct { +} + +func (m *MsgRegisterInterchainAccountResponse) Reset() { *m = MsgRegisterInterchainAccountResponse{} } +func (m *MsgRegisterInterchainAccountResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterInterchainAccountResponse) ProtoMessage() {} +func (*MsgRegisterInterchainAccountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_304a59451e844c03, []int{1} +} +func (m *MsgRegisterInterchainAccountResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterInterchainAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterInterchainAccountResponse.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 *MsgRegisterInterchainAccountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterInterchainAccountResponse.Merge(m, src) +} +func (m *MsgRegisterInterchainAccountResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterInterchainAccountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterInterchainAccountResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterInterchainAccountResponse proto.InternalMessageInfo + +// MsgSubmitTx defines the payload for Msg/SubmitTx +type MsgSubmitTx struct { + FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` + // interchain_account_id is supposed to be the unique identifier, e.g., + // lido/kava. This allows contracts to have more than one interchain accounts + // on remote zone This identifier will be a part of the portID that we'll + // claim our capability for. + InterchainAccountId string `protobuf:"bytes,2,opt,name=interchain_account_id,json=interchainAccountId,proto3" json:"interchain_account_id,omitempty"` + ConnectionId string `protobuf:"bytes,3,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + Msgs []*types.Any `protobuf:"bytes,4,rep,name=msgs,proto3" json:"msgs,omitempty"` + Memo string `protobuf:"bytes,5,opt,name=memo,proto3" json:"memo,omitempty"` + // timeout in seconds after which the packet times out + Timeout uint64 `protobuf:"varint,6,opt,name=timeout,proto3" json:"timeout,omitempty"` +} + +func (m *MsgSubmitTx) Reset() { *m = MsgSubmitTx{} } +func (m *MsgSubmitTx) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitTx) ProtoMessage() {} +func (*MsgSubmitTx) Descriptor() ([]byte, []int) { + return fileDescriptor_304a59451e844c03, []int{2} +} +func (m *MsgSubmitTx) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSubmitTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSubmitTx.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 *MsgSubmitTx) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitTx.Merge(m, src) +} +func (m *MsgSubmitTx) XXX_Size() int { + return m.Size() +} +func (m *MsgSubmitTx) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitTx.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSubmitTx proto.InternalMessageInfo + +// MsgSubmitTxResponse defines the response for Msg/SubmitTx +type MsgSubmitTxResponse struct { + // channel's sequence_id for outgoing ibc packet. Unique per a channel. + SequenceId uint64 `protobuf:"varint,1,opt,name=sequence_id,json=sequenceId,proto3" json:"sequence_id,omitempty"` + // channel src channel on neutron side trasaction was submitted from + Channel string `protobuf:"bytes,2,opt,name=channel,proto3" json:"channel,omitempty"` +} + +func (m *MsgSubmitTxResponse) Reset() { *m = MsgSubmitTxResponse{} } +func (m *MsgSubmitTxResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitTxResponse) ProtoMessage() {} +func (*MsgSubmitTxResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_304a59451e844c03, []int{3} +} +func (m *MsgSubmitTxResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSubmitTxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSubmitTxResponse.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 *MsgSubmitTxResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitTxResponse.Merge(m, src) +} +func (m *MsgSubmitTxResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSubmitTxResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitTxResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSubmitTxResponse proto.InternalMessageInfo + +func (m *MsgSubmitTxResponse) GetSequenceId() uint64 { + if m != nil { + return m.SequenceId + } + return 0 +} + +func (m *MsgSubmitTxResponse) GetChannel() string { + if m != nil { + return m.Channel + } + return "" +} + +func init() { + proto.RegisterType((*MsgRegisterInterchainAccount)(nil), "canine_chain.interchaintxs.MsgRegisterInterchainAccount") + proto.RegisterType((*MsgRegisterInterchainAccountResponse)(nil), "canine_chain.interchaintxs.MsgRegisterInterchainAccountResponse") + proto.RegisterType((*MsgSubmitTx)(nil), "canine_chain.interchaintxs.MsgSubmitTx") + proto.RegisterType((*MsgSubmitTxResponse)(nil), "canine_chain.interchaintxs.MsgSubmitTxResponse") +} + +func init() { + proto.RegisterFile("canine_chain/interchaintxs/tx.proto", fileDescriptor_304a59451e844c03) +} + +var fileDescriptor_304a59451e844c03 = []byte{ + // 500 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x41, 0x6f, 0xd3, 0x30, + 0x14, 0x8e, 0xb7, 0x32, 0x86, 0x3b, 0x2e, 0x5e, 0x91, 0xb2, 0x68, 0x4a, 0x4a, 0x86, 0xa0, 0x17, + 0x12, 0xa9, 0x5c, 0xa6, 0x49, 0x48, 0x74, 0xb7, 0x4a, 0x54, 0x42, 0x61, 0x27, 0x2e, 0x95, 0xe3, + 0xb8, 0xae, 0xa1, 0xb1, 0x4b, 0xec, 0x48, 0xed, 0x3f, 0x80, 0x1b, 0x57, 0x6e, 0xfb, 0x39, 0x1c, + 0x77, 0xe4, 0x34, 0x4d, 0xed, 0x05, 0x89, 0xdb, 0x7e, 0x01, 0x8a, 0x43, 0xda, 0xae, 0x5a, 0xc7, + 0xc4, 0xcd, 0xef, 0xf9, 0x7b, 0xdf, 0x7b, 0xdf, 0xfb, 0x6c, 0x78, 0x44, 0xb0, 0xe0, 0x82, 0xf6, + 0xc9, 0x10, 0x73, 0x11, 0x72, 0xa1, 0x69, 0x66, 0x8e, 0x7a, 0xa2, 0x42, 0x3d, 0x09, 0xc6, 0x99, + 0xd4, 0x12, 0x39, 0xab, 0xa0, 0xe0, 0x06, 0xc8, 0x69, 0x30, 0xc9, 0xa4, 0x81, 0x85, 0xc5, 0xa9, + 0xac, 0x70, 0x0e, 0x98, 0x94, 0x6c, 0x44, 0x43, 0x13, 0xc5, 0xf9, 0x20, 0xc4, 0x62, 0x5a, 0x5e, + 0xf9, 0x57, 0x00, 0x1e, 0xf6, 0x14, 0x8b, 0x28, 0xe3, 0x4a, 0xd3, 0xac, 0xbb, 0x60, 0xeb, 0x10, + 0x22, 0x73, 0xa1, 0xd1, 0x53, 0xb8, 0x37, 0xc8, 0x64, 0xda, 0xc7, 0x49, 0x92, 0x51, 0xa5, 0x6c, + 0xd0, 0x04, 0xad, 0x47, 0x51, 0xbd, 0xc8, 0x75, 0xca, 0x14, 0x7a, 0x0d, 0x1f, 0x13, 0x29, 0x04, + 0x25, 0x9a, 0x4b, 0xd1, 0xe7, 0x89, 0xbd, 0x55, 0x60, 0x4e, 0xed, 0xeb, 0x4b, 0xaf, 0x31, 0xc5, + 0xe9, 0xe8, 0xc4, 0xbf, 0x71, 0xed, 0x47, 0x7b, 0xcb, 0xb8, 0x9b, 0xa0, 0x33, 0xf8, 0x64, 0x29, + 0xa2, 0x8f, 0xcb, 0xbe, 0x05, 0xcd, 0xb6, 0xa1, 0x69, 0x5e, 0x5f, 0x7a, 0x87, 0x25, 0xcd, 0xad, + 0x30, 0x3f, 0xda, 0xe7, 0xeb, 0x53, 0x77, 0x93, 0x93, 0xdd, 0x2f, 0xe7, 0x9e, 0xf5, 0xeb, 0xdc, + 0xb3, 0xfc, 0xe7, 0xf0, 0xd9, 0x5d, 0x0a, 0x23, 0xaa, 0xc6, 0x52, 0x28, 0xea, 0xff, 0x06, 0xb0, + 0xde, 0x53, 0xec, 0x7d, 0x1e, 0xa7, 0x5c, 0x9f, 0x4d, 0xee, 0xa3, 0xbc, 0xbd, 0x69, 0x74, 0xb3, + 0x81, 0x5b, 0x07, 0x43, 0x47, 0xeb, 0xdb, 0x32, 0x32, 0xd7, 0x76, 0xd2, 0x82, 0xb5, 0x54, 0x31, + 0x65, 0xd7, 0x9a, 0xdb, 0xad, 0x7a, 0xbb, 0x11, 0x94, 0x06, 0x06, 0x95, 0x81, 0x41, 0x47, 0x4c, + 0x23, 0x83, 0x40, 0x08, 0xd6, 0x52, 0x9a, 0x4a, 0xfb, 0x81, 0x61, 0x31, 0x67, 0x64, 0xc3, 0x87, + 0x9a, 0xa7, 0x54, 0xe6, 0xda, 0xde, 0x69, 0x82, 0x56, 0x2d, 0xaa, 0xc2, 0x95, 0xad, 0xbc, 0x83, + 0xfb, 0x2b, 0x62, 0xab, 0x25, 0x20, 0x0f, 0xd6, 0x15, 0xfd, 0x9c, 0x53, 0x41, 0x68, 0x31, 0x1b, + 0x30, 0xe5, 0xb0, 0x4a, 0x75, 0x93, 0x82, 0x9b, 0x0c, 0xb1, 0x10, 0x74, 0xf4, 0x57, 0x64, 0x15, + 0xb6, 0xbf, 0x6e, 0xc1, 0xed, 0x9e, 0x62, 0xe8, 0x3b, 0x80, 0x07, 0x9b, 0xdf, 0xd3, 0x71, 0xb0, + 0xf9, 0xf9, 0x06, 0x77, 0xf9, 0xe4, 0xbc, 0xf9, 0xdf, 0xca, 0x85, 0xc3, 0x16, 0x1a, 0xc0, 0xdd, + 0x85, 0xbf, 0x2f, 0xfe, 0xc1, 0x57, 0x01, 0x9d, 0xf0, 0x9e, 0xc0, 0x65, 0x9f, 0xd3, 0xe8, 0xc7, + 0xcc, 0x05, 0x17, 0x33, 0x17, 0x5c, 0xcd, 0x5c, 0xf0, 0x6d, 0xee, 0x5a, 0x17, 0x73, 0xd7, 0xfa, + 0x39, 0x77, 0xad, 0x0f, 0xc7, 0x8c, 0xeb, 0x61, 0x1e, 0x07, 0x44, 0xa6, 0xe1, 0x47, 0x4c, 0x3e, + 0xe1, 0xd1, 0x5b, 0x1c, 0xab, 0xb0, 0xec, 0xf0, 0xb2, 0xfc, 0xf8, 0x93, 0xf5, 0xaf, 0x3f, 0x1d, + 0x53, 0x15, 0xef, 0x18, 0xf7, 0x5f, 0xfd, 0x09, 0x00, 0x00, 0xff, 0xff, 0xc0, 0xe8, 0x3b, 0x93, + 0x25, 0x04, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + RegisterInterchainAccount(ctx context.Context, in *MsgRegisterInterchainAccount, opts ...grpc.CallOption) (*MsgRegisterInterchainAccountResponse, error) + SubmitTx(ctx context.Context, in *MsgSubmitTx, opts ...grpc.CallOption) (*MsgSubmitTxResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) RegisterInterchainAccount(ctx context.Context, in *MsgRegisterInterchainAccount, opts ...grpc.CallOption) (*MsgRegisterInterchainAccountResponse, error) { + out := new(MsgRegisterInterchainAccountResponse) + err := c.cc.Invoke(ctx, "/canine_chain.interchaintxs.Msg/RegisterInterchainAccount", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SubmitTx(ctx context.Context, in *MsgSubmitTx, opts ...grpc.CallOption) (*MsgSubmitTxResponse, error) { + out := new(MsgSubmitTxResponse) + err := c.cc.Invoke(ctx, "/canine_chain.interchaintxs.Msg/SubmitTx", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + RegisterInterchainAccount(context.Context, *MsgRegisterInterchainAccount) (*MsgRegisterInterchainAccountResponse, error) + SubmitTx(context.Context, *MsgSubmitTx) (*MsgSubmitTxResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) RegisterInterchainAccount(ctx context.Context, req *MsgRegisterInterchainAccount) (*MsgRegisterInterchainAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RegisterInterchainAccount not implemented") +} +func (*UnimplementedMsgServer) SubmitTx(ctx context.Context, req *MsgSubmitTx) (*MsgSubmitTxResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SubmitTx not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_RegisterInterchainAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRegisterInterchainAccount) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RegisterInterchainAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.interchaintxs.Msg/RegisterInterchainAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RegisterInterchainAccount(ctx, req.(*MsgRegisterInterchainAccount)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SubmitTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSubmitTx) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SubmitTx(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.interchaintxs.Msg/SubmitTx", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SubmitTx(ctx, req.(*MsgSubmitTx)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "canine_chain.interchaintxs.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "RegisterInterchainAccount", + Handler: _Msg_RegisterInterchainAccount_Handler, + }, + { + MethodName: "SubmitTx", + Handler: _Msg_SubmitTx_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "canine_chain/interchaintxs/tx.proto", +} + +func (m *MsgRegisterInterchainAccount) 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 *MsgRegisterInterchainAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterInterchainAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.InterchainAccountId) > 0 { + i -= len(m.InterchainAccountId) + copy(dAtA[i:], m.InterchainAccountId) + i = encodeVarintTx(dAtA, i, uint64(len(m.InterchainAccountId))) + i-- + dAtA[i] = 0x1a + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.FromAddress) > 0 { + i -= len(m.FromAddress) + copy(dAtA[i:], m.FromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRegisterInterchainAccountResponse) 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 *MsgRegisterInterchainAccountResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterInterchainAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgSubmitTx) 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 *MsgSubmitTx) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSubmitTx) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Timeout != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Timeout)) + i-- + dAtA[i] = 0x30 + } + if len(m.Memo) > 0 { + i -= len(m.Memo) + copy(dAtA[i:], m.Memo) + i = encodeVarintTx(dAtA, i, uint64(len(m.Memo))) + i-- + dAtA[i] = 0x2a + } + if len(m.Msgs) > 0 { + for iNdEx := len(m.Msgs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Msgs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x1a + } + if len(m.InterchainAccountId) > 0 { + i -= len(m.InterchainAccountId) + copy(dAtA[i:], m.InterchainAccountId) + i = encodeVarintTx(dAtA, i, uint64(len(m.InterchainAccountId))) + i-- + dAtA[i] = 0x12 + } + if len(m.FromAddress) > 0 { + i -= len(m.FromAddress) + copy(dAtA[i:], m.FromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSubmitTxResponse) 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 *MsgSubmitTxResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSubmitTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Channel) > 0 { + i -= len(m.Channel) + copy(dAtA[i:], m.Channel) + i = encodeVarintTx(dAtA, i, uint64(len(m.Channel))) + i-- + dAtA[i] = 0x12 + } + if m.SequenceId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.SequenceId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgRegisterInterchainAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.InterchainAccountId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRegisterInterchainAccountResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgSubmitTx) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.InterchainAccountId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Msgs) > 0 { + for _, e := range m.Msgs { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + l = len(m.Memo) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Timeout != 0 { + n += 1 + sovTx(uint64(m.Timeout)) + } + return n +} + +func (m *MsgSubmitTxResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SequenceId != 0 { + n += 1 + sovTx(uint64(m.SequenceId)) + } + l = len(m.Channel) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgRegisterInterchainAccount) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterInterchainAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterInterchainAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FromAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InterchainAccountId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.InterchainAccountId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRegisterInterchainAccountResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterInterchainAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterInterchainAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSubmitTx) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSubmitTx: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSubmitTx: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FromAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InterchainAccountId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.InterchainAccountId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Msgs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Msgs = append(m.Msgs, &types.Any{}) + if err := m.Msgs[len(m.Msgs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Memo", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Memo = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) + } + m.Timeout = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timeout |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSubmitTxResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSubmitTxResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSubmitTxResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SequenceId", wireType) + } + m.SequenceId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.SequenceId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Channel", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Channel = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) From 252507ff5605cc3986ffd3ccf8a4cff0855cd920 Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Mon, 2 Oct 2023 12:52:01 -0400 Subject: [PATCH 002/256] update script for generating protobuf class files --- scripts/protocgen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index 5fb335d27..6a4776080 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -5,7 +5,7 @@ set -euox pipefail go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos #2>/dev/null # Get cosmos sdk from github -go get github.com/cosmos/cosmos-sdk@v0.45.11 #2>/dev/null +go get github.com/cosmos/cosmos-sdk@v0.45.17 #2>/dev/null echo "Generating gogo proto code" cd proto From 8691c932eda190d701b17254658a4daf500f1ddf Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Mon, 2 Oct 2023 13:04:44 -0400 Subject: [PATCH 003/256] ica: store keys, error types, and ica owner type --- x/interchaintxs/types/errors.go | 19 ++++++++++++ x/interchaintxs/types/keys.go | 18 +++++++++++ x/interchaintxs/types/types.go | 55 +++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 x/interchaintxs/types/errors.go create mode 100644 x/interchaintxs/types/keys.go create mode 100644 x/interchaintxs/types/types.go diff --git a/x/interchaintxs/types/errors.go b/x/interchaintxs/types/errors.go new file mode 100644 index 000000000..fec162d9f --- /dev/null +++ b/x/interchaintxs/types/errors.go @@ -0,0 +1,19 @@ +package types + +import ( + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +// x/interchaintxs module sentinel errors +var ( + ErrInvalidICAOwner = sdkerrors.Register(ModuleName, 1100, "invalid interchain account interchainAccountID") + ErrInvalidAccountAddress = sdkerrors.Register(ModuleName, 1101, "invalid account address") + ErrInterchainAccountNotFound = sdkerrors.Register(ModuleName, 1102, "interchain account not found") + ErrNotContract = sdkerrors.Register(ModuleName, 1103, "not a contract") + ErrEmptyInterchainAccountID = sdkerrors.Register(ModuleName, 1104, "empty interchain account id") + ErrEmptyConnectionID = sdkerrors.Register(ModuleName, 1105, "empty connection id") + ErrNoMessages = sdkerrors.Register(ModuleName, 1106, "no messages provided") + ErrInvalidTimeout = sdkerrors.Register(ModuleName, 1107, "invalid timeout") + ErrInvalidPayerFee = sdkerrors.Register(ModuleName, 1108, "invalid payer feerefunder") + ErrLongInterchainAccountID = sdkerrors.Register(ModuleName, 1109, "interchain account id is too long") +) diff --git a/x/interchaintxs/types/keys.go b/x/interchaintxs/types/keys.go new file mode 100644 index 000000000..9f0ce51cc --- /dev/null +++ b/x/interchaintxs/types/keys.go @@ -0,0 +1,18 @@ +package types + +const ( + // ModuleName defines the module name + ModuleName = "interchaintxs" + + // StoreKey defines the primary module store key + StoreKey = ModuleName + + // RouterKey is the message route for slashing + RouterKey = ModuleName + + // QuerierRoute defines the module's query routing key + QuerierRoute = ModuleName + + // MemStoreKey defines the in-memory store key + MemStoreKey = "mem_interchaintxs" +) diff --git a/x/interchaintxs/types/types.go b/x/interchaintxs/types/types.go new file mode 100644 index 000000000..4289764cb --- /dev/null +++ b/x/interchaintxs/types/types.go @@ -0,0 +1,55 @@ +package types + +import ( + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" +) + +const Delimiter = "." + +type ICAOwner struct { + contractAddress sdk.AccAddress + interchainAccountID string +} + +func (i ICAOwner) String() string { + return i.contractAddress.String() + Delimiter + i.interchainAccountID +} + +func NewICAOwner(contractAddressBech32, interchainAccountID string) (ICAOwner, error) { + sdkContractAddress, err := sdk.AccAddressFromBech32(contractAddressBech32) + if err != nil { + return ICAOwner{}, sdkerrors.Wrapf(ErrInvalidAccountAddress, "failed to decode address from bech32: %v", err) + } + + return ICAOwner{contractAddress: sdkContractAddress, interchainAccountID: interchainAccountID}, nil +} + +func NewICAOwnerFromAddress(address sdk.AccAddress, interchainAccountID string) ICAOwner { + return ICAOwner{contractAddress: address, interchainAccountID: interchainAccountID} +} + +func ICAOwnerFromPort(port string) (ICAOwner, error) { + splitOwner := strings.SplitN(strings.TrimPrefix(port, icatypes.PortPrefix), Delimiter, 2) + if len(splitOwner) < 2 { + return ICAOwner{}, sdkerrors.Wrap(ErrInvalidICAOwner, "invalid ICA interchainAccountID format") + } + + contractAddress, err := sdk.AccAddressFromBech32(splitOwner[0]) + if err != nil { + return ICAOwner{}, sdkerrors.Wrapf(ErrInvalidAccountAddress, "failed to decode address from bech32: %v", err) + } + + return ICAOwner{contractAddress: contractAddress, interchainAccountID: splitOwner[1]}, nil +} + +func (i ICAOwner) GetContract() sdk.AccAddress { + return i.contractAddress +} + +func (i ICAOwner) GetInterchainAccountID() string { + return i.interchainAccountID +} From 5257bea2eba2c01eae3f405b72109029c13086f8 Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Mon, 2 Oct 2023 14:56:00 -0400 Subject: [PATCH 004/256] ica: transaction validation --- x/interchaintxs/types/codec.go | 34 +++++++++ x/interchaintxs/types/tx.go | 125 +++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 x/interchaintxs/types/codec.go create mode 100644 x/interchaintxs/types/tx.go diff --git a/x/interchaintxs/types/codec.go b/x/interchaintxs/types/codec.go new file mode 100644 index 000000000..da2ae60cc --- /dev/null +++ b/x/interchaintxs/types/codec.go @@ -0,0 +1,34 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +func RegisterCodec(cdc *codec.LegacyAmino) { + cdc.RegisterConcrete(&MsgRegisterInterchainAccount{}, "/interchaintxs/MsgRegisterInterchainAccount", nil) + cdc.RegisterConcrete(&MsgSubmitTx{}, "/interchaintxs/MsgSubmitTx", nil) +} + +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgRegisterInterchainAccount{}, + &MsgSubmitTx{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} + +var ( + Amino = codec.NewLegacyAmino() + ModuleCdc = codec.NewAminoCodec(Amino) +) + +func init() { + RegisterCodec(Amino) + cryptocodec.RegisterCrypto(Amino) + Amino.Seal() +} diff --git a/x/interchaintxs/types/tx.go b/x/interchaintxs/types/tx.go new file mode 100644 index 000000000..da5e127ce --- /dev/null +++ b/x/interchaintxs/types/tx.go @@ -0,0 +1,125 @@ +package types + +import ( + "fmt" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/gogo/protobuf/proto" +) + +// const interchainAccountIDLimit = 47 +const interchainAccountIDLimit = 128 - + len("icacontroller-") - + len("jkl1unyuj8qnmygvzuex3dwmg9yzt9alhvyeat0uu0jedg2wj33efl5qmysp02") - // just a random contract address + len(".") + +var _ codectypes.UnpackInterfacesMessage = MsgSubmitTx{} + +func (msg *MsgRegisterInterchainAccount) ValidateBasic() error { + if len(msg.ConnectionId) == 0 { + return ErrEmptyConnectionID + } + + if _, err := sdk.AccAddressFromBech32(msg.FromAddress); err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "failed to parse FromAddress: %s", msg.FromAddress) + } + + if len(msg.InterchainAccountId) == 0 { + return ErrEmptyInterchainAccountID + } + + if len(msg.InterchainAccountId) > interchainAccountIDLimit { + return ErrLongInterchainAccountID + } + + return nil +} + +func (msg *MsgRegisterInterchainAccount) GetSigners() []sdk.AccAddress { + fromAddress, _ := sdk.AccAddressFromBech32(msg.FromAddress) + return []sdk.AccAddress{fromAddress} +} + +func (msg *MsgRegisterInterchainAccount) Route() string { + return RouterKey +} + +func (msg *MsgRegisterInterchainAccount) Type() string { + return "register-interchain-account" +} + +func (msg MsgRegisterInterchainAccount) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) +} + +//---------------------------------------------------------------- + +func (msg MsgSubmitTx) ValidateBasic() error { + if len(msg.ConnectionId) == 0 { + return ErrEmptyConnectionID + } + + if _, err := sdk.AccAddressFromBech32(msg.FromAddress); err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "failed to parse FromAddress: %s", msg.FromAddress) + } + + if len(msg.InterchainAccountId) == 0 { + return ErrEmptyInterchainAccountID + } + + if len(msg.Msgs) == 0 { + return ErrNoMessages + } + + if msg.Timeout <= 0 { + return sdkerrors.Wrapf(ErrInvalidTimeout, "timeout must be greater than zero") + } + + return nil +} + +func (msg MsgSubmitTx) GetSigners() []sdk.AccAddress { + fromAddress, _ := sdk.AccAddressFromBech32(msg.FromAddress) + return []sdk.AccAddress{fromAddress} +} + +func (msg MsgSubmitTx) Route() string { + return RouterKey +} + +func (msg MsgSubmitTx) Type() string { + return "submit-tx" +} + +func (msg MsgSubmitTx) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) +} + +// PackTxMsgAny marshals the sdk.Msg payload to a protobuf Any type +func PackTxMsgAny(sdkMsg sdk.Msg) (*codectypes.Any, error) { + msg, ok := sdkMsg.(proto.Message) + if !ok { + return nil, fmt.Errorf("can't proto marshal %T", sdkMsg) + } + + value, err := codectypes.NewAnyWithValue(msg) + if err != nil { + return nil, err + } + + return value, nil +} + +// implements UnpackInterfacesMessage.UnpackInterfaces (https://github.com/cosmos/cosmos-sdk/blob/d07d35f29e0a0824b489c552753e8798710ff5a8/codec/types/interface_registry.go#L60) +func (msg MsgSubmitTx) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + var sdkMsg sdk.Msg + for _, m := range msg.Msgs { + if err := unpacker.UnpackAny(m, &sdkMsg); err != nil { + return err + } + } + return nil +} From ea333df46d88f23ee3b491438fa676483837057d Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Mon, 2 Oct 2023 15:12:54 -0400 Subject: [PATCH 005/256] Stringer interface implemented in params.go instead of pb.go class file --- proto/canine_chain/interchaintxs/params.proto | 2 +- x/interchaintxs/types/params.go | 73 +++++++++++++++++++ x/interchaintxs/types/params.pb.go | 9 +-- 3 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 x/interchaintxs/types/params.go diff --git a/proto/canine_chain/interchaintxs/params.proto b/proto/canine_chain/interchaintxs/params.proto index ca84c5a54..cf2309adb 100644 --- a/proto/canine_chain/interchaintxs/params.proto +++ b/proto/canine_chain/interchaintxs/params.proto @@ -7,7 +7,7 @@ option go_package = "github.com/jackalLabs/canine-chain/x/interchaintxs/types"; // Params defines the parameters for the module. message Params { - option (gogoproto.goproto_stringer) = true; // set to true so class file doesn't complain that interface is not satisfied + option (gogoproto.goproto_stringer) = false; // Defines maximum amount of messages to be passed in MsgSubmitTx int64 msg_submit_tx_max_messages = 1; } diff --git a/x/interchaintxs/types/params.go b/x/interchaintxs/types/params.go new file mode 100644 index 000000000..9dc2c4f21 --- /dev/null +++ b/x/interchaintxs/types/params.go @@ -0,0 +1,73 @@ +package types + +import ( + "fmt" + + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "gopkg.in/yaml.v2" +) + +var _ paramtypes.ParamSet = (*Params)(nil) + +var ( + KeyMsgSubmitTxMaxMessages = []byte("MsgSubmitTxMaxMessages") + DefaultMsgSubmitTxMaxMessages = int64(16) +) + +// ParamKeyTable the param key table for launch module +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable( + paramtypes.NewParamSetPair( + KeyMsgSubmitTxMaxMessages, + DefaultMsgSubmitTxMaxMessages, + validateMsgSubmitTxMaxMessages, + ), + ) +} + +// NewParams creates a new Params instance +func NewParams(msgSubmitTxMaxMessages int64) Params { + return Params{ + MsgSubmitTxMaxMessages: msgSubmitTxMaxMessages, + } +} + +// DefaultParams returns a default set of parameters +func DefaultParams() Params { + return NewParams(DefaultMsgSubmitTxMaxMessages) +} + +// ParamSetPairs get the params.ParamSet +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair( + KeyMsgSubmitTxMaxMessages, + &p.MsgSubmitTxMaxMessages, + validateMsgSubmitTxMaxMessages, + ), + } +} + +// Validate validates the set of params +func (p Params) Validate() error { + return validateMsgSubmitTxMaxMessages(p.GetMsgSubmitTxMaxMessages()) +} + +// String implements the Stringer interface. +func (p Params) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} + +func validateMsgSubmitTxMaxMessages(i interface{}) error { + v, ok := i.(uint64) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v == 0 { + return fmt.Errorf("MsgSubmitTxMaxMessages must be greater than zero") + } + + return nil +} diff --git a/x/interchaintxs/types/params.pb.go b/x/interchaintxs/types/params.pb.go index b41afb0ac..30ff75429 100644 --- a/x/interchaintxs/types/params.pb.go +++ b/x/interchaintxs/types/params.pb.go @@ -29,9 +29,8 @@ type Params struct { MsgSubmitTxMaxMessages int64 `protobuf:"varint,1,opt,name=msg_submit_tx_max_messages,json=msgSubmitTxMaxMessages,proto3" json:"msg_submit_tx_max_messages,omitempty"` } -func (m *Params) Reset() { *m = Params{} } -func (m *Params) String() string { return proto.CompactTextString(m) } -func (*Params) ProtoMessage() {} +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { return fileDescriptor_001cf9936676b1fd, []int{0} } @@ -87,12 +86,12 @@ var fileDescriptor_001cf9936676b1fd = []byte{ 0x16, 0xa7, 0xc7, 0x17, 0x97, 0x26, 0xe5, 0x66, 0x96, 0xc4, 0x97, 0x54, 0xc4, 0xe7, 0x26, 0x56, 0xc4, 0xe7, 0xa6, 0x16, 0x17, 0x27, 0xa6, 0xa7, 0x16, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x07, 0x89, 0xe5, 0x16, 0xa7, 0x07, 0x83, 0x15, 0x84, 0x54, 0xf8, 0x26, 0x56, 0xf8, 0x42, 0x65, 0xad, - 0x58, 0x66, 0x2c, 0x90, 0x67, 0x74, 0x0a, 0x3a, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, + 0x58, 0x66, 0x2c, 0x90, 0x67, 0x70, 0x0a, 0x3a, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0x8b, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xac, 0xc4, 0xe4, 0xec, 0xc4, 0x1c, 0x9f, 0xc4, 0xa4, 0x62, 0x7d, 0x88, 0x6b, 0x75, 0x21, 0xde, 0xaa, 0x40, 0xf3, 0x58, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0x99, 0xc6, 0x80, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x9b, 0x38, 0xe8, 0x03, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x19, 0x81, 0xf6, 0xb9, 0x03, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { From c7998d422c00a0454be1728d00404fde0d7a0078 Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Tue, 3 Oct 2023 17:29:26 -0400 Subject: [PATCH 006/256] keeper constructor --- x/interchaintxs/genesis.go | 22 ++++++++ x/interchaintxs/keeper/keeper.go | 68 +++++++++++++++++++++++ x/interchaintxs/keeper/params.go | 19 +++++++ x/interchaintxs/types/expected_keepers.go | 41 ++++++++++++++ x/interchaintxs/types/genesis.go | 14 +++++ 5 files changed, 164 insertions(+) create mode 100644 x/interchaintxs/genesis.go create mode 100644 x/interchaintxs/keeper/keeper.go create mode 100644 x/interchaintxs/keeper/params.go create mode 100644 x/interchaintxs/types/expected_keepers.go create mode 100644 x/interchaintxs/types/genesis.go diff --git a/x/interchaintxs/genesis.go b/x/interchaintxs/genesis.go new file mode 100644 index 000000000..d2fa5a828 --- /dev/null +++ b/x/interchaintxs/genesis.go @@ -0,0 +1,22 @@ +package interchaintxs + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/keeper" + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +// InitGenesis initializes the capability module's state from a provided genesis +// state. +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { + k.SetParams(ctx, genState.Params) +} + +// ExportGenesis returns the capability module's exported genesis. +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { + genesis := types.DefaultGenesis() + genesis.Params = k.GetParams(ctx) + + return genesis +} diff --git a/x/interchaintxs/keeper/keeper.go b/x/interchaintxs/keeper/keeper.go new file mode 100644 index 000000000..8ab8a7332 --- /dev/null +++ b/x/interchaintxs/keeper/keeper.go @@ -0,0 +1,68 @@ +package keeper + +import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/tendermint/tendermint/libs/log" + + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +const ( + LabelSubmitTx = "submit_tx" + LabelHandleAcknowledgment = "handle_ack" + LabelLabelHandleChanOpenAck = "handle_chan_open_ack" + LabelRegisterInterchainAccount = "register_interchain_account" + LabelHandleTimeout = "handle_timeout" +) + +type ( + Keeper struct { + Codec codec.BinaryCodec + storeKey storetypes.StoreKey + memKey storetypes.StoreKey + paramstore paramtypes.Subspace + scopedKeeper types.ScopedKeeper + channelKeeper types.ChannelKeeper + icaControllerKeeper types.ICAControllerKeeper + } +) + +func NewKeeper( + cdc codec.BinaryCodec, + storeKey, + memKey storetypes.StoreKey, + paramstore paramtypes.Subspace, + channelKeeper types.ChannelKeeper, + icaControllerKeeper types.ICAControllerKeeper, + scopedKeeper types.ScopedKeeper, +) *Keeper { + // set KeyTable if it has not already been set + if !paramstore.HasKeyTable() { + paramstore = paramstore.WithKeyTable(types.ParamKeyTable()) + } + + return &Keeper{ + Codec: cdc, + storeKey: storeKey, + memKey: memKey, + paramstore: paramstore, + channelKeeper: channelKeeper, + icaControllerKeeper: icaControllerKeeper, + scopedKeeper: scopedKeeper, + } +} + +func (k *Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +// ClaimCapability claims the channel capability passed via the OnOpenChanInit callback +func (k *Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error { + return k.scopedKeeper.ClaimCapability(ctx, cap, name) +} diff --git a/x/interchaintxs/keeper/params.go b/x/interchaintxs/keeper/params.go new file mode 100644 index 000000000..14abafc69 --- /dev/null +++ b/x/interchaintxs/keeper/params.go @@ -0,0 +1,19 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +// GetParams get all parameters as types.Params +func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { + k.paramstore.GetParamSet(ctx, ¶ms) + + return params +} + +// SetParams set the params +func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { + k.paramstore.SetParamSet(ctx, ¶ms) +} diff --git a/x/interchaintxs/types/expected_keepers.go b/x/interchaintxs/types/expected_keepers.go new file mode 100644 index 000000000..89e3a0933 --- /dev/null +++ b/x/interchaintxs/types/expected_keepers.go @@ -0,0 +1,41 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" + channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v4/modules/core/exported" +) + +// AccountKeeper defines the expected account keeper used for simulations (noalias) +type AccountKeeper interface { + GetAccount(ctx sdk.Context, addr sdk.AccAddress) types.AccountI + // Methods imported from account should be defined here +} + +// BankKeeper defines the expected interface needed to retrieve account balances. +type BankKeeper interface { + SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins + // Methods imported from bank should be defined here +} + +type ICAControllerKeeper interface { + GetActiveChannelID(ctx sdk.Context, connectionID, portID string) (string, bool) + GetInterchainAccountAddress(ctx sdk.Context, connectionID, portID string) (string, bool) + RegisterInterchainAccount(ctx sdk.Context, connectionID, owner string, version string) error + SendTx(ctx sdk.Context, chanCap *capabilitytypes.Capability, connectionID, portID string, icaPacketData icatypes.InterchainAccountPacketData, timeoutTimestamp uint64) (uint64, error) +} + +type ScopedKeeper interface { + ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error + GetCapability(ctx sdk.Context, name string) (*capabilitytypes.Capability, bool) +} + +// ChannelKeeper defines the expected IBC channel keeper +type ChannelKeeper interface { + GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) + GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) + GetConnection(ctx sdk.Context, connectionID string) (ibcexported.ConnectionI, error) +} diff --git a/x/interchaintxs/types/genesis.go b/x/interchaintxs/types/genesis.go new file mode 100644 index 000000000..ffd96d1aa --- /dev/null +++ b/x/interchaintxs/types/genesis.go @@ -0,0 +1,14 @@ +package types + +// DefaultGenesis returns the default Capability genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + return gs.Params.Validate() +} From a61605eacbcaa35a12af73737534705cffca8b62 Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Tue, 3 Oct 2023 17:59:20 -0400 Subject: [PATCH 007/256] ica: msg server and the handler --- x/interchaintxs/handler.go | 32 ++++++ x/interchaintxs/keeper/msg_server.go | 164 +++++++++++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 x/interchaintxs/handler.go create mode 100644 x/interchaintxs/keeper/msg_server.go diff --git a/x/interchaintxs/handler.go b/x/interchaintxs/handler.go new file mode 100644 index 000000000..771555c04 --- /dev/null +++ b/x/interchaintxs/handler.go @@ -0,0 +1,32 @@ +package interchaintxs + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/keeper" + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +func NewHandler(k keeper.Keeper) sdk.Handler { + msgServer := keeper.NewMsgServerImpl(k) + + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + ctx = ctx.WithEventManager(sdk.NewEventManager()) + + switch msg := msg.(type) { + case *types.MsgRegisterInterchainAccount: + res, err := msgServer.RegisterInterchainAccount(sdk.WrapSDKContext(ctx), msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgSubmitTx: + res, err := msgServer.SubmitTx(sdk.WrapSDKContext(ctx), msg) + return sdk.WrapServiceResult(ctx, res, err) + + default: + errMsg := fmt.Sprintf("unrecognized %s message type: %T", types.ModuleName, msg) + return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg) + } + } +} diff --git a/x/interchaintxs/keeper/msg_server.go b/x/interchaintxs/keeper/msg_server.go new file mode 100644 index 000000000..b35bc2b34 --- /dev/null +++ b/x/interchaintxs/keeper/msg_server.go @@ -0,0 +1,164 @@ +package keeper + +import ( + "context" + "fmt" + "time" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + + "github.com/cosmos/cosmos-sdk/telemetry" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" + channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v4/modules/core/24-host" + + ictxtypes "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +type msgServer struct { + Keeper +} + +var _ ictxtypes.MsgServer = msgServer{} + +// NewMsgServerImpl returns an implementation of the MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) ictxtypes.MsgServer { + return &msgServer{Keeper: keeper} +} + +func (k Keeper) RegisterInterchainAccount(goCtx context.Context, msg *ictxtypes.MsgRegisterInterchainAccount) (*ictxtypes.MsgRegisterInterchainAccountResponse, error) { + defer telemetry.ModuleMeasureSince(ictxtypes.ModuleName, time.Now(), LabelRegisterInterchainAccount) + + ctx := sdk.UnwrapSDKContext(goCtx) + k.Logger(ctx).Debug("RegisterInterchainAccount", "connection_id", msg.ConnectionId, "from_address", msg.FromAddress, "interchain_account_id", msg.InterchainAccountId) + + senderAddr, err := sdk.AccAddressFromBech32(msg.FromAddress) + if err != nil { + k.Logger(ctx).Debug("RegisterInterchainAccount: failed to parse sender address", "from_address", msg.FromAddress) + return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "failed to parse address: %s", msg.FromAddress) + } + + icaOwner := ictxtypes.NewICAOwnerFromAddress(senderAddr, msg.InterchainAccountId) + + // FIXME: empty version string doesn't look good + if err := k.icaControllerKeeper.RegisterInterchainAccount(ctx, msg.ConnectionId, icaOwner.String(), ""); err != nil { + k.Logger(ctx).Debug("RegisterInterchainAccount: failed to create RegisterInterchainAccount:", "error", err, "owner", icaOwner.String(), "msg", &msg) + return nil, sdkerrors.Wrap(err, "failed to RegisterInterchainAccount") + } + + return &ictxtypes.MsgRegisterInterchainAccountResponse{}, nil +} + +func (k Keeper) SubmitTx(goCtx context.Context, msg *ictxtypes.MsgSubmitTx) (*ictxtypes.MsgSubmitTxResponse, error) { + defer telemetry.ModuleMeasureSince(ictxtypes.ModuleName, time.Now(), LabelSubmitTx) + + if msg == nil { + return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "nil msg is prohibited") + } + + if msg.Msgs == nil { + return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "empty Msgs field is prohibited") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + k.Logger(ctx).Debug("SubmitTx", "connection_id", msg.ConnectionId, "from_address", msg.FromAddress, "interchain_account_id", msg.InterchainAccountId) + + senderAddr, err := sdk.AccAddressFromBech32(msg.FromAddress) + if err != nil { + k.Logger(ctx).Debug("SubmitTx: failed to parse sender address", "from_address", msg.FromAddress) + return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "failed to parse address: %s", msg.FromAddress) + } + + params := k.GetParams(ctx) + if int64(len(msg.Msgs)) > params.GetMsgSubmitTxMaxMessages() { + k.Logger(ctx).Debug("SubmitTx: provided MsgSubmitTx contains more messages than allowed", + "msg", msg, + "has", len(msg.Msgs), + "max", params.GetMsgSubmitTxMaxMessages(), + ) + return nil, fmt.Errorf( + "MsgSubmitTx contains more messages than allowed, has=%d, max=%d", + len(msg.Msgs), + params.GetMsgSubmitTxMaxMessages(), + ) + } + + icaOwner := ictxtypes.NewICAOwnerFromAddress(senderAddr, msg.InterchainAccountId) + + portID, err := icatypes.NewControllerPortID(icaOwner.String()) + if err != nil { + k.Logger(ctx).Error("SubmitTx: failed to create NewControllerPortID:", "error", err, "owner", icaOwner) + return nil, sdkerrors.Wrap(err, "failed to create NewControllerPortID") + } + + channelID, found := k.icaControllerKeeper.GetActiveChannelID(ctx, msg.ConnectionId, portID) + if !found { + k.Logger(ctx).Debug("SubmitTx: failed to GetActiveChannelID", "connection_id", msg.ConnectionId, "port_id", portID) + return nil, sdkerrors.Wrapf(icatypes.ErrActiveChannelNotFound, "failed to GetActiveChannelID for port %s", portID) + } + + chanCap, found := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(portID, channelID)) + if !found { + k.Logger(ctx).Debug("SubmitTx: failed to GetCapability", "connection_id", msg.ConnectionId, "port_id", portID, "channel_id", channelID) + return nil, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "failed to GetCapability") + } + + data, err := SerializeCosmosTx(k.Codec, msg.Msgs) + if err != nil { + k.Logger(ctx).Debug("SubmitTx: failed to SerializeCosmosTx", "error", err, "connection_id", msg.ConnectionId, "port_id", portID, "channel_id", channelID) + return nil, sdkerrors.Wrap(err, "failed to SerializeCosmosTx") + } + + packetData := icatypes.InterchainAccountPacketData{ + Type: icatypes.EXECUTE_TX, + Data: data, + Memo: msg.Memo, + } + + sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, portID, channelID) + if !found { + return nil, sdkerrors.Wrapf( + channeltypes.ErrSequenceSendNotFound, + "source port: %s, source channel: %s", portID, channelID, + ) + } + + timeoutTimestamp := ctx.BlockTime().Add(time.Duration(msg.Timeout) * time.Second).UnixNano() + _, err = k.icaControllerKeeper.SendTx(ctx, chanCap, msg.ConnectionId, portID, packetData, uint64(timeoutTimestamp)) + if err != nil { + // usually we use DEBUG level for such errors, but in this case we have checked full input before running SendTX, so error here may be critical + k.Logger(ctx).Error("SubmitTx", "error", err, "connection_id", msg.ConnectionId, "port_id", portID, "channel_id", channelID) + return nil, sdkerrors.Wrap(err, "failed to SendTx") + } + + return &ictxtypes.MsgSubmitTxResponse{ + SequenceId: sequence, + Channel: channelID, + }, nil +} + +// SerializeCosmosTx serializes a slice of *types.Any messages using the CosmosTx type. The proto marshaled CosmosTx +// bytes are returned. This differs from icatypes.SerializeCosmosTx in that it does not serialize sdk.Msgs, but +// simply uses the already serialized values. +func SerializeCosmosTx(cdc codec.BinaryCodec, msgs []*codectypes.Any) (bz []byte, err error) { + // only ProtoCodec is supported + if _, ok := cdc.(*codec.ProtoCodec); !ok { + return nil, sdkerrors.Wrap(icatypes.ErrInvalidCodec, + "only ProtoCodec is supported for receiving messages on the host chain") + } + + cosmosTx := &icatypes.CosmosTx{ + Messages: msgs, + } + + bz, err = cdc.Marshal(cosmosTx) + if err != nil { + return nil, err + } + + return bz, nil +} From 9a5ecd0825991058877e6863c779e110e5d33eeb Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Tue, 3 Oct 2023 21:48:15 -0400 Subject: [PATCH 008/256] ica: stubs for acknowledging open chan and receiving packet --- x/interchaintxs/client/cli/query.go | 28 ++++ x/interchaintxs/client/cli/tx.go | 23 ++++ x/interchaintxs/ibc_module.go | 133 +++++++++++++++++++ x/interchaintxs/keeper/ibc_handlers.go | 71 ++++++++++ x/interchaintxs/module.go | 174 +++++++++++++++++++++++++ 5 files changed, 429 insertions(+) create mode 100644 x/interchaintxs/client/cli/query.go create mode 100644 x/interchaintxs/client/cli/tx.go create mode 100644 x/interchaintxs/ibc_module.go create mode 100644 x/interchaintxs/keeper/ibc_handlers.go create mode 100644 x/interchaintxs/module.go diff --git a/x/interchaintxs/client/cli/query.go b/x/interchaintxs/client/cli/query.go new file mode 100644 index 000000000..8b56ced30 --- /dev/null +++ b/x/interchaintxs/client/cli/query.go @@ -0,0 +1,28 @@ +package cli + +import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/spf13/cobra" + + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +// GetQueryCmd returns the cli query commands for this module +func GetQueryCmd(_ string) *cobra.Command { + // Group interchaintxs queries under a subcommand + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 1, + RunE: client.ValidateCmd, + } + + // TO DO: implement + // cmd.AddCommand(CmdQueryParams()) + // cmd.AddCommand(CmdInterchainAccountCmd()) + + return cmd +} diff --git a/x/interchaintxs/client/cli/tx.go b/x/interchaintxs/client/cli/tx.go new file mode 100644 index 000000000..52f676247 --- /dev/null +++ b/x/interchaintxs/client/cli/tx.go @@ -0,0 +1,23 @@ +package cli + +import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/spf13/cobra" + + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +// GetTxCmd returns the transaction commands for this module +func GetTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + return cmd +} diff --git a/x/interchaintxs/ibc_module.go b/x/interchaintxs/ibc_module.go new file mode 100644 index 000000000..a152e5ca4 --- /dev/null +++ b/x/interchaintxs/ibc_module.go @@ -0,0 +1,133 @@ +package interchaintxs + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v4/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v4/modules/core/exported" + + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/keeper" +) + +var _ porttypes.IBCModule = IBCModule{} + +// IBCModule implements the ICS26 interface for interchain accounts controller chains +type IBCModule struct { + keeper keeper.Keeper +} + +// NewIBCModule creates a new IBCModule given the keeper +func NewIBCModule(k keeper.Keeper) IBCModule { + return IBCModule{ + keeper: k, + } +} + +// OnChanOpenInit implements the IBCModule interface. We don't need to implement this handler. +func (im IBCModule) OnChanOpenInit( + ctx sdk.Context, + _ channeltypes.Order, + _ []string, + portID string, + channelID string, + chanCap *capabilitytypes.Capability, + _ channeltypes.Counterparty, + version string, +) (string, error) { + // FIXME: always returning plain version is probably a bad idea! + return version, im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)) +} + +// OnChanOpenTry implements the IBCModule interface. We don't need to implement this handler. +func (im IBCModule) OnChanOpenTry( + _ sdk.Context, + _ channeltypes.Order, + _ []string, + _, + _ string, + _ *capabilitytypes.Capability, + _ channeltypes.Counterparty, + _ string, +) (string, error) { + return "", nil +} + +// OnChanOpenAck implements the IBCModule interface. This handler is called after we create an +// account on a remote zone (because icaControllerKeeper.RegisterInterchainAccount opens a channel). +func (im IBCModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterPartyChannelID string, + counterpartyVersion string, +) error { + // TO DO + return im.keeper.HandleChanOpenAck(ctx, portID, channelID, counterPartyChannelID, counterpartyVersion) +} + +// OnChanOpenConfirm implements the IBCModule interface. We don't need to implement this handler. +func (im IBCModule) OnChanOpenConfirm( + _ sdk.Context, + _, + _ string, +) error { + return nil +} + +// TODO: +// OnChanCloseInit implements the IBCModule interface. Do we need this? + +func (im IBCModule) OnChanCloseInit( + _ sdk.Context, + _, + _ string, +) error { + return nil +} + +// OnChanCloseConfirm implements the IBCModule interface. We don't need to implement this handler. +func (im IBCModule) OnChanCloseConfirm( + _ sdk.Context, + _, + _ string, +) error { + return nil +} + +// OnRecvPacket implements the IBCModule interface. A successful acknowledgement +// is returned if the packet data is successfully decoded and the receiving application +// logic returns without error. + +// The connection to Jackal wasm bindings could be here +func (im IBCModule) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + return im.keeper.HandleOnRecvPacket(ctx, packet, relayer) +} + +// OnAcknowledgementPacket implements the IBCModule interface. +func (im IBCModule) OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + return nil + // TO DO: implement! + // return im.keeper.HandleAcknowledgement(ctx, packet, acknowledgement, relayer) +} + +// OnTimeoutPacket implements the IBCModule interface. +func (im IBCModule) OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error { + return nil + // TO DO: implement! + // return im.keeper.HandleTimeout(ctx, packet, relayer) +} diff --git a/x/interchaintxs/keeper/ibc_handlers.go b/x/interchaintxs/keeper/ibc_handlers.go new file mode 100644 index 000000000..a615cab8c --- /dev/null +++ b/x/interchaintxs/keeper/ibc_handlers.go @@ -0,0 +1,71 @@ +package keeper + +import ( + "time" + + "github.com/cosmos/cosmos-sdk/telemetry" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v4/modules/core/exported" + + "github.com/jackalLabs/canine-chain/v3/testutil" + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +func (k *Keeper) HandleOnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), LabelLabelHandleChanOpenAck) + + logger, logFile := testutil.CreateLogger() + + /* + Can we call the wasm keeper right here to interact with Jackal cosmwasm bindings? + We could marshal a cosmwasm msg object into raw bytes and decode it from the Data field. + Then we could call: func ICAOwnerFromPort(port string) (ICAOwner, error) + to make sure that only the owner of the ICA is making the contract call. + + First we need a working relayer. + */ + logger.Printf("The data is: %s\n", packet.Data) + + logFile.Close() + + // TODO: return an actual acknowledgement + return nil +} + +// For now we're just going to log the data about a successfully created channel. +// Not sure why Neutron used the cosmwasm sudo entry point for returning an acknowledgement +// Perhaps osmosis' acknowledgement design can fit in here + +// Notice that in the case of an ICA channel - it is not yet in OPEN state here +// the last step of channel opening(confirm) happens on the host chain. +func (k *Keeper) HandleChanOpenAck( + ctx sdk.Context, + portID, + channelID, + counterpartyChannelID, + counterpartyVersion string, +) error { + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), LabelLabelHandleChanOpenAck) + + logger, logFile := testutil.CreateLogger() + logger.Printf("HandleChanOpenAck, port_id: %s, channel_id: %s, counterparty_channel_id: %s, counterparty_version: %s\n", portID, channelID, counterpartyChannelID, counterpartyVersion) + + icaOwner, err := types.ICAOwnerFromPort(portID) + logger.Printf("The ica owner is: %s\n", icaOwner) + + if err != nil { + + logger.Printf("HandleChanOpenAck: failed to get ica owner from source port. error: %s\n", err) + return sdkerrors.Wrap(err, "failed to get ica owner from port") + } + + logFile.Close() + + return nil +} diff --git a/x/interchaintxs/module.go b/x/interchaintxs/module.go new file mode 100644 index 000000000..77d5fd4f8 --- /dev/null +++ b/x/interchaintxs/module.go @@ -0,0 +1,174 @@ +package interchaintxs + +import ( + "encoding/json" + "fmt" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + abci "github.com/tendermint/tendermint/abci/types" + + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/client/cli" + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/keeper" + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +var ( + _ module.AppModule = AppModule{} + _ module.AppModuleBasic = AppModuleBasic{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +// RegisterInterfaces registers the module's interface types +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterRESTRoutes registers the capability module's REST service handlers. +func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) { +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) { +} + +// GetTxCmd returns the capability module's root tx command. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.GetTxCmd() +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd(types.StoreKey) +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// Deprecated: Route returns the capability module's message routing key. +func (am AppModule) Route() sdk.Route { + return sdk.NewRoute(types.RouterKey, NewHandler(am.keeper)) +} + +// QuerierRoute returns the capability module's query routing key. +func (AppModule) QuerierRoute() string { return types.QuerierRoute } + +// LegacyQuerierHandler returns the capability module's Querier. +func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { + return nil +} + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + // TODO: scaffold the query service + // types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) +} + +// RegisterInvariants registers the capability module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the capability module's genesis initialization It returns +// no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + + InitGenesis(ctx, am.keeper, genState) + + return []abci.ValidatorUpdate{} +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := ExportGenesis(ctx, am.keeper) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion implements ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 2 } + +// BeginBlock executes all ABCI BeginBlock logic respective to the capability module. +func (am AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) {} + +// EndBlock executes all ABCI EndBlock logic respective to the capability module. It +// returns no validator updates. +func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { + return []abci.ValidatorUpdate{} +} From 36ac815fd70f002bc28eb565bc6df11d51ffe53a Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Wed, 4 Oct 2023 14:13:09 -0400 Subject: [PATCH 009/256] testing stubs. Default ica params not compatible with other modules --- .../interchaintxs/keeper/interchaintxs.go | 56 ++++++++++++++++++ testutil/interchaintxs/nullify/nullify.go | 57 +++++++++++++++++++ testutil/interchaintxs/sample/sample.go | 13 +++++ x/interchaintxs/keeper/ibc_handlers_test.go | 26 +++++++++ 4 files changed, 152 insertions(+) create mode 100644 testutil/interchaintxs/keeper/interchaintxs.go create mode 100644 testutil/interchaintxs/nullify/nullify.go create mode 100644 testutil/interchaintxs/sample/sample.go create mode 100644 x/interchaintxs/keeper/ibc_handlers_test.go diff --git a/testutil/interchaintxs/keeper/interchaintxs.go b/testutil/interchaintxs/keeper/interchaintxs.go new file mode 100644 index 000000000..6abcfe5cd --- /dev/null +++ b/testutil/interchaintxs/keeper/interchaintxs.go @@ -0,0 +1,56 @@ +package keeper + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/store" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + typesparams "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmdb "github.com/tendermint/tm-db" + + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/keeper" + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" +) + +func InterchainTxsKeeper(t testing.TB, icaControllerKeeper types.ICAControllerKeeper, channelKeeper types.ChannelKeeper, capabilityKeeper types.ScopedKeeper) (*keeper.Keeper, sdk.Context) { + storeKey := sdk.NewKVStoreKey(types.StoreKey) + memStoreKey := storetypes.NewMemoryStoreKey(types.MemStoreKey) + + db := tmdb.NewMemDB() + stateStore := store.NewCommitMultiStore(db) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + stateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + + paramsSubspace := typesparams.NewSubspace(cdc, + types.Amino, + storeKey, + memStoreKey, + "InterchainTxsParams", + ) + k := keeper.NewKeeper( + cdc, + storeKey, + memStoreKey, + paramsSubspace, + channelKeeper, + icaControllerKeeper, + capabilityKeeper, + ) + + ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) + + // Initialize params + k.SetParams(ctx, types.DefaultParams()) + + return k, ctx +} diff --git a/testutil/interchaintxs/nullify/nullify.go b/testutil/interchaintxs/nullify/nullify.go new file mode 100644 index 000000000..3b968c09c --- /dev/null +++ b/testutil/interchaintxs/nullify/nullify.go @@ -0,0 +1,57 @@ +// Package nullify provides methods to init nil values structs for test assertion. +package nullify + +import ( + "reflect" + "unsafe" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var ( + coinType = reflect.TypeOf(sdk.Coin{}) + coinsType = reflect.TypeOf(sdk.Coins{}) +) + +// Fill analyze all struct fields and slices with +// reflection and initialize the nil and empty slices, +// structs, and pointers. +func Fill(x interface{}) interface{} { + v := reflect.Indirect(reflect.ValueOf(x)) + switch v.Kind() { + case reflect.Slice: + for i := 0; i < v.Len(); i++ { + obj := v.Index(i) + objPt := reflect.NewAt(obj.Type(), unsafe.Pointer(obj.UnsafeAddr())).Interface() + objPt = Fill(objPt) + obj.Set(reflect.ValueOf(objPt)) + } + case reflect.Struct: + for i := 0; i < v.NumField(); i++ { + f := reflect.Indirect(v.Field(i)) + if !f.CanSet() { + continue + } + switch f.Kind() { + case reflect.Slice: + f.Set(reflect.MakeSlice(f.Type(), 0, 0)) + case reflect.Struct: + switch f.Type() { + case coinType: + coin := reflect.New(coinType).Interface() + s := reflect.ValueOf(coin).Elem() + f.Set(s) + case coinsType: + coins := reflect.New(coinsType).Interface() + s := reflect.ValueOf(coins).Elem() + f.Set(s) + default: + objPt := reflect.NewAt(f.Type(), unsafe.Pointer(f.UnsafeAddr())).Interface() + s := Fill(objPt) + f.Set(reflect.ValueOf(s)) + } + } + } + } + return reflect.Indirect(v).Interface() +} diff --git a/testutil/interchaintxs/sample/sample.go b/testutil/interchaintxs/sample/sample.go new file mode 100644 index 000000000..98f2153ed --- /dev/null +++ b/testutil/interchaintxs/sample/sample.go @@ -0,0 +1,13 @@ +package sample + +import ( + "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// AccAddress returns a sample account address +func AccAddress() string { + pk := ed25519.GenPrivKey().PubKey() + addr := pk.Address() + return sdk.AccAddress(addr).String() +} diff --git a/x/interchaintxs/keeper/ibc_handlers_test.go b/x/interchaintxs/keeper/ibc_handlers_test.go new file mode 100644 index 000000000..478e8980d --- /dev/null +++ b/x/interchaintxs/keeper/ibc_handlers_test.go @@ -0,0 +1,26 @@ +package keeper_test + +import ( + "fmt" + "testing" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/require" + + icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" + testutil "github.com/jackalLabs/canine-chain/v3/testutil" + testkeeper "github.com/jackalLabs/canine-chain/v3/testutil/interchaintxs/keeper" +) + +func TestHandleChanOpenAck(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + icak, ctx := testkeeper.InterchainTxsKeeper(t, nil, nil, nil) + testAddress, err := testutil.CreateTestAddresses("jkl", 1) + require.NoError(t, err) + + portID := icatypes.PortPrefix + testAddress[0] + ".ica0" + fmt.Println(icak) + fmt.Println(ctx) + fmt.Println(portID) +} From 6e207807935c6c7d96cbb53ffb7512c22e408f24 Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Wed, 4 Oct 2023 22:24:24 -0400 Subject: [PATCH 010/256] properly validate the params --- x/interchaintxs/types/params.go | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/x/interchaintxs/types/params.go b/x/interchaintxs/types/params.go index 9dc2c4f21..bed93ec65 100644 --- a/x/interchaintxs/types/params.go +++ b/x/interchaintxs/types/params.go @@ -1,7 +1,7 @@ package types import ( - "fmt" + fmt "fmt" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "gopkg.in/yaml.v2" @@ -9,42 +9,29 @@ import ( var _ paramtypes.ParamSet = (*Params)(nil) -var ( - KeyMsgSubmitTxMaxMessages = []byte("MsgSubmitTxMaxMessages") - DefaultMsgSubmitTxMaxMessages = int64(16) -) +var KeyMsgSubmitTxMaxMessages = []byte("MsgSubmitTxMaxMessages") // ParamKeyTable the param key table for launch module func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable( - paramtypes.NewParamSetPair( - KeyMsgSubmitTxMaxMessages, - DefaultMsgSubmitTxMaxMessages, - validateMsgSubmitTxMaxMessages, - ), - ) + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) } // NewParams creates a new Params instance -func NewParams(msgSubmitTxMaxMessages int64) Params { +func NewParams() Params { return Params{ - MsgSubmitTxMaxMessages: msgSubmitTxMaxMessages, + MsgSubmitTxMaxMessages: 16, } } // DefaultParams returns a default set of parameters func DefaultParams() Params { - return NewParams(DefaultMsgSubmitTxMaxMessages) + return NewParams() } // ParamSetPairs get the params.ParamSet func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair( - KeyMsgSubmitTxMaxMessages, - &p.MsgSubmitTxMaxMessages, - validateMsgSubmitTxMaxMessages, - ), + paramtypes.NewParamSetPair(KeyMsgSubmitTxMaxMessages, &p.MsgSubmitTxMaxMessages, validateMsgSubmitTxMaxMessages), } } @@ -60,7 +47,7 @@ func (p Params) String() string { } func validateMsgSubmitTxMaxMessages(i interface{}) error { - v, ok := i.(uint64) + v, ok := i.(int64) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } From 9dca08d68ecd6d97948e5001df1294554dc414ac Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Fri, 6 Oct 2023 00:15:19 -0400 Subject: [PATCH 011/256] ica: unit tests for opening channel and receiving packet --- x/interchaintxs/keeper/ibc_handlers_test.go | 62 +++++++++++++++++++-- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/x/interchaintxs/keeper/ibc_handlers_test.go b/x/interchaintxs/keeper/ibc_handlers_test.go index 478e8980d..ba1038fc4 100644 --- a/x/interchaintxs/keeper/ibc_handlers_test.go +++ b/x/interchaintxs/keeper/ibc_handlers_test.go @@ -10,17 +10,71 @@ import ( icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" testutil "github.com/jackalLabs/canine-chain/v3/testutil" testkeeper "github.com/jackalLabs/canine-chain/v3/testutil/interchaintxs/keeper" + + sdk "github.com/cosmos/cosmos-sdk/types" + + transfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" ) func TestHandleChanOpenAck(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() icak, ctx := testkeeper.InterchainTxsKeeper(t, nil, nil, nil) - testAddress, err := testutil.CreateTestAddresses("jkl", 1) + testAddress, err := testutil.CreateTestAddresses("cosmos", 1) require.NoError(t, err) portID := icatypes.PortPrefix + testAddress[0] + ".ica0" - fmt.Println(icak) - fmt.Println(ctx) - fmt.Println(portID) + contractAddress := sdk.MustAccAddressFromBech32(testAddress[0]) + channelID := "channel-0" + counterpartyChannelID := "channel-1" + + error := icak.HandleChanOpenAck(ctx, "", channelID, counterpartyChannelID, "1") + require.ErrorContains(t, error, "failed to get ica owner from port") + + error = icak.HandleChanOpenAck(ctx, portID, channelID, counterpartyChannelID, "1") + require.NoError(t, err) + + fmt.Println(contractAddress) + // NOTE: could we call the bindings contract directly and bypass the wasmbindings interface? +} + +func TestHandleOnRecvPacket(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + icak, ctx := testkeeper.InterchainTxsKeeper(t, nil, nil, nil) + testAddress, err := testutil.CreateTestAddresses("cosmos", 3) + require.NoError(t, err) + + sender := testAddress[0] + receiver := testAddress[1] + relayer := testAddress[2] + + packet := makeMockPacket(receiver, "placeholder memo", 0, sender) + + ack := icak.HandleOnRecvPacket(ctx, packet, sdk.AccAddress(relayer)) + fmt.Println(ack) +} + +// NOTE: Always make sure this resembles osmosis' mock packet +func makeMockPacket(receiver, memo string, prevSequence uint64, sender string) channeltypes.Packet { + packetData := transfertypes.FungibleTokenPacketData{ + Denom: sdk.DefaultBondDenom, + Amount: "1", + Sender: sender, + Receiver: receiver, + Memo: memo, // attempted removing memo but packet still won't send. Nil pointer de-reference error remains the same. + } + + return channeltypes.NewPacket( + packetData.GetBytes(), + prevSequence+1, + icatypes.PortPrefix+sender+".ica0", + "channel-0", + icatypes.PortID+sender+".ica1", + "channel-1", + clienttypes.NewHeight(0, 100), + 0, + ) } From 73a551ae1eaeabe65ccbbe17aa9145bc8e109284 Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 6 Oct 2023 13:24:44 -0400 Subject: [PATCH 012/256] universal file format --- proto/canine_chain/storage/active_deals.proto | 21 + proto/canine_chain/storage/tx.proto | 2 +- x/storage/handler.go | 2 +- x/storage/keeper/msg_server_postproof.go | 2 +- x/storage/keeper/msg_server_proofs_test.go | 2 +- x/storage/types/active_deals.pb.go | 1403 ++++++++++++++--- x/storage/types/codec.go | 2 +- x/storage/types/file_deal.go | 94 ++ x/storage/types/file_deal_test.go | 87 + x/storage/types/tx.pb.go | 152 +- x/storage/types/ufid.go | 9 + 11 files changed, 1507 insertions(+), 269 deletions(-) create mode 100644 x/storage/types/file_deal.go create mode 100644 x/storage/types/file_deal_test.go create mode 100644 x/storage/types/ufid.go diff --git a/proto/canine_chain/storage/active_deals.proto b/proto/canine_chain/storage/active_deals.proto index d55be3724..ba963bafc 100644 --- a/proto/canine_chain/storage/active_deals.proto +++ b/proto/canine_chain/storage/active_deals.proto @@ -17,3 +17,24 @@ message ActiveDeals { string merkle = 11; string fid = 12; } + +message UFID { + bytes hash = 1; +} + +message UniversalFile { + UFID id = 1; + map proofs = 2; + int64 file_size = 3; + int64 start = 4; + int64 expires = 5; + string owner = 6; + int64 proof_interval = 7; + bytes merkle = 8; +} + +message FileProof { + string prover = 1; + int64 last_proven = 2; + int64 chunk_to_prove = 3; +} \ No newline at end of file diff --git a/proto/canine_chain/storage/tx.proto b/proto/canine_chain/storage/tx.proto index 194eb4dd3..6e3c08b67 100644 --- a/proto/canine_chain/storage/tx.proto +++ b/proto/canine_chain/storage/tx.proto @@ -6,7 +6,7 @@ option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; // Msg defines the Msg service. service Msg { rpc PostContract(MsgPostContract) returns (MsgPostContractResponse); - rpc Postproof(MsgPostproof) returns (MsgPostproofResponse); + rpc PostProof(MsgPostproof) returns (MsgPostproofResponse); rpc SignContract(MsgSignContract) returns (MsgSignContractResponse); rpc SetProviderIP(MsgSetProviderIP) returns (MsgSetProviderIPResponse); rpc SetProviderKeybase(MsgSetProviderKeybase) diff --git a/x/storage/handler.go b/x/storage/handler.go index aeb7d4b1d..f5a052612 100644 --- a/x/storage/handler.go +++ b/x/storage/handler.go @@ -21,7 +21,7 @@ func NewHandler(k keeper.Keeper) sdk.Handler { res, err := msgServer.PostContract(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) case *types.MsgPostproof: - res, err := msgServer.Postproof(sdk.WrapSDKContext(ctx), msg) + res, err := msgServer.PostProof(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) case *types.MsgSignContract: res, err := msgServer.SignContract(sdk.WrapSDKContext(ctx), msg) diff --git a/x/storage/keeper/msg_server_postproof.go b/x/storage/keeper/msg_server_postproof.go index 2a39d17ba..199c281b9 100644 --- a/x/storage/keeper/msg_server_postproof.go +++ b/x/storage/keeper/msg_server_postproof.go @@ -42,7 +42,7 @@ func VerifyDeal(merkle string, hashList string, num int64, item string) bool { return verified } -func (k msgServer) Postproof(goCtx context.Context, msg *types.MsgPostproof) (*types.MsgPostproofResponse, error) { +func (k msgServer) PostProof(goCtx context.Context, msg *types.MsgPostproof) (*types.MsgPostproofResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) meter := ctx.GasMeter() usedGas := meter.GasConsumed() diff --git a/x/storage/keeper/msg_server_proofs_test.go b/x/storage/keeper/msg_server_proofs_test.go index 0bfc83be1..108abc240 100644 --- a/x/storage/keeper/msg_server_proofs_test.go +++ b/x/storage/keeper/msg_server_proofs_test.go @@ -306,7 +306,7 @@ func (suite *KeeperTestSuite) TestPostProof() { tc := tcs suite.Run( tc.testName, func() { - res, err := msgSrvr.Postproof(context, &tc.msg) + res, err := msgSrvr.PostProof(context, &tc.msg) if tc.expErr { suite.Require().Equal(false, res.Success) } else { diff --git a/x/storage/types/active_deals.pb.go b/x/storage/types/active_deals.pb.go index 71771f032..b7e53f82c 100644 --- a/x/storage/types/active_deals.pb.go +++ b/x/storage/types/active_deals.pb.go @@ -154,8 +154,216 @@ func (m *ActiveDeals) GetFid() string { return "" } +type UFID struct { + Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` +} + +func (m *UFID) Reset() { *m = UFID{} } +func (m *UFID) String() string { return proto.CompactTextString(m) } +func (*UFID) ProtoMessage() {} +func (*UFID) Descriptor() ([]byte, []int) { + return fileDescriptor_71fa39f1fdaaaa6d, []int{1} +} +func (m *UFID) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UFID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_UFID.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 *UFID) XXX_Merge(src proto.Message) { + xxx_messageInfo_UFID.Merge(m, src) +} +func (m *UFID) XXX_Size() int { + return m.Size() +} +func (m *UFID) XXX_DiscardUnknown() { + xxx_messageInfo_UFID.DiscardUnknown(m) +} + +var xxx_messageInfo_UFID proto.InternalMessageInfo + +func (m *UFID) GetHash() []byte { + if m != nil { + return m.Hash + } + return nil +} + +type UniversalFile struct { + Id *UFID `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Proofs map[string]*FileProof `protobuf:"bytes,2,rep,name=proofs,proto3" json:"proofs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + FileSize int64 `protobuf:"varint,3,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"` + Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` + Expires int64 `protobuf:"varint,5,opt,name=expires,proto3" json:"expires,omitempty"` + Owner string `protobuf:"bytes,6,opt,name=owner,proto3" json:"owner,omitempty"` + ProofInterval int64 `protobuf:"varint,7,opt,name=proof_interval,json=proofInterval,proto3" json:"proof_interval,omitempty"` + Merkle []byte `protobuf:"bytes,8,opt,name=merkle,proto3" json:"merkle,omitempty"` +} + +func (m *UniversalFile) Reset() { *m = UniversalFile{} } +func (m *UniversalFile) String() string { return proto.CompactTextString(m) } +func (*UniversalFile) ProtoMessage() {} +func (*UniversalFile) Descriptor() ([]byte, []int) { + return fileDescriptor_71fa39f1fdaaaa6d, []int{2} +} +func (m *UniversalFile) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UniversalFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_UniversalFile.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 *UniversalFile) XXX_Merge(src proto.Message) { + xxx_messageInfo_UniversalFile.Merge(m, src) +} +func (m *UniversalFile) XXX_Size() int { + return m.Size() +} +func (m *UniversalFile) XXX_DiscardUnknown() { + xxx_messageInfo_UniversalFile.DiscardUnknown(m) +} + +var xxx_messageInfo_UniversalFile proto.InternalMessageInfo + +func (m *UniversalFile) GetId() *UFID { + if m != nil { + return m.Id + } + return nil +} + +func (m *UniversalFile) GetProofs() map[string]*FileProof { + if m != nil { + return m.Proofs + } + return nil +} + +func (m *UniversalFile) GetFileSize() int64 { + if m != nil { + return m.FileSize + } + return 0 +} + +func (m *UniversalFile) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *UniversalFile) GetExpires() int64 { + if m != nil { + return m.Expires + } + return 0 +} + +func (m *UniversalFile) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *UniversalFile) GetProofInterval() int64 { + if m != nil { + return m.ProofInterval + } + return 0 +} + +func (m *UniversalFile) GetMerkle() []byte { + if m != nil { + return m.Merkle + } + return nil +} + +type FileProof struct { + Prover string `protobuf:"bytes,1,opt,name=prover,proto3" json:"prover,omitempty"` + LastProven int64 `protobuf:"varint,2,opt,name=last_proven,json=lastProven,proto3" json:"last_proven,omitempty"` + ChunkToProve int64 `protobuf:"varint,3,opt,name=chunk_to_prove,json=chunkToProve,proto3" json:"chunk_to_prove,omitempty"` +} + +func (m *FileProof) Reset() { *m = FileProof{} } +func (m *FileProof) String() string { return proto.CompactTextString(m) } +func (*FileProof) ProtoMessage() {} +func (*FileProof) Descriptor() ([]byte, []int) { + return fileDescriptor_71fa39f1fdaaaa6d, []int{3} +} +func (m *FileProof) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FileProof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_FileProof.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 *FileProof) XXX_Merge(src proto.Message) { + xxx_messageInfo_FileProof.Merge(m, src) +} +func (m *FileProof) XXX_Size() int { + return m.Size() +} +func (m *FileProof) XXX_DiscardUnknown() { + xxx_messageInfo_FileProof.DiscardUnknown(m) +} + +var xxx_messageInfo_FileProof proto.InternalMessageInfo + +func (m *FileProof) GetProver() string { + if m != nil { + return m.Prover + } + return "" +} + +func (m *FileProof) GetLastProven() int64 { + if m != nil { + return m.LastProven + } + return 0 +} + +func (m *FileProof) GetChunkToProve() int64 { + if m != nil { + return m.ChunkToProve + } + return 0 +} + func init() { proto.RegisterType((*ActiveDeals)(nil), "canine_chain.storage.ActiveDeals") + proto.RegisterType((*UFID)(nil), "canine_chain.storage.UFID") + proto.RegisterType((*UniversalFile)(nil), "canine_chain.storage.UniversalFile") + proto.RegisterMapType((map[string]*FileProof)(nil), "canine_chain.storage.UniversalFile.ProofsEntry") + proto.RegisterType((*FileProof)(nil), "canine_chain.storage.FileProof") } func init() { @@ -163,28 +371,43 @@ func init() { } var fileDescriptor_71fa39f1fdaaaa6d = []byte{ - // 326 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0xcf, 0x4a, 0x03, 0x31, - 0x18, 0xc4, 0xbb, 0xad, 0xf6, 0x4f, 0x5a, 0x41, 0x82, 0x48, 0xf0, 0x10, 0xa4, 0x08, 0x7a, 0xb1, - 0x0b, 0xfa, 0x04, 0x8a, 0xc7, 0x9e, 0x3c, 0x7a, 0x29, 0xd9, 0xe4, 0xdb, 0xf6, 0xb3, 0xdb, 0xcd, - 0x92, 0xc4, 0xa2, 0x3e, 0x85, 0x8f, 0xe5, 0xb1, 0x47, 0x2f, 0x82, 0xb4, 0x2f, 0x22, 0x49, 0xda, - 0xb2, 0xbd, 0xed, 0xcc, 0xfc, 0x3e, 0x36, 0xcc, 0x90, 0x6b, 0x29, 0x4a, 0x2c, 0x61, 0x22, 0x67, - 0x02, 0xcb, 0xd4, 0x3a, 0x6d, 0xc4, 0x14, 0x52, 0x21, 0x1d, 0x2e, 0x61, 0xa2, 0x40, 0x14, 0x76, - 0x54, 0x19, 0xed, 0x34, 0x3d, 0xab, 0x83, 0xa3, 0x2d, 0x38, 0xfc, 0x6d, 0x92, 0xfe, 0x43, 0x80, - 0x9f, 0x3c, 0x4b, 0x4f, 0x49, 0x4b, 0xa2, 0x62, 0xc9, 0x65, 0x72, 0xd3, 0x7b, 0xf6, 0x9f, 0xf4, - 0x9c, 0xb4, 0x2d, 0x4e, 0x4b, 0x00, 0xd6, 0x0c, 0xe6, 0x56, 0xd1, 0x0b, 0xd2, 0xad, 0x8c, 0x5e, - 0xa2, 0x02, 0xc3, 0x5a, 0x21, 0xd9, 0x6b, 0xca, 0x09, 0xb1, 0x4e, 0x18, 0x97, 0x15, 0x5a, 0xce, - 0xd9, 0x51, 0x48, 0x6b, 0x8e, 0xbf, 0x85, 0x52, 0xc5, 0xf4, 0x38, 0xde, 0xee, 0xb4, 0xcf, 0x72, - 0x2c, 0xc0, 0xe2, 0x27, 0xb0, 0x76, 0xcc, 0x76, 0x9a, 0x5e, 0x91, 0x93, 0xca, 0x68, 0x9d, 0x2f, - 0xc1, 0x60, 0x8e, 0xa0, 0x58, 0x27, 0x00, 0x87, 0x26, 0x1d, 0x92, 0x41, 0x30, 0xec, 0x02, 0xad, - 0x05, 0xc5, 0xba, 0x01, 0x3a, 0xf0, 0x3c, 0x13, 0x7e, 0xe7, 0xb4, 0x7f, 0x34, 0xb0, 0x5e, 0x64, - 0xea, 0x1e, 0x65, 0xa4, 0x23, 0x0d, 0x08, 0xa7, 0x0d, 0x23, 0x21, 0xde, 0x49, 0xdf, 0xc9, 0x02, - 0xcc, 0xbc, 0x00, 0xd6, 0x8f, 0x9d, 0x44, 0xe5, 0xdb, 0xcb, 0x51, 0xb1, 0x41, 0x6c, 0x2f, 0x47, - 0xf5, 0x38, 0xfe, 0x5e, 0xf3, 0x64, 0xb5, 0xe6, 0xc9, 0xdf, 0x9a, 0x27, 0x5f, 0x1b, 0xde, 0x58, - 0x6d, 0x78, 0xe3, 0x67, 0xc3, 0x1b, 0x2f, 0x77, 0x53, 0x74, 0xb3, 0xb7, 0x6c, 0x24, 0xf5, 0x22, - 0x7d, 0x15, 0x72, 0x2e, 0x8a, 0xb1, 0xc8, 0x6c, 0x1a, 0x57, 0xba, 0x8d, 0x73, 0xbe, 0xef, 0x07, - 0x75, 0x1f, 0x15, 0xd8, 0xac, 0x1d, 0xa6, 0xbc, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x74, - 0x98, 0x75, 0xf5, 0x01, 0x00, 0x00, + // 575 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0x41, 0x6b, 0xdb, 0x3e, + 0x18, 0xc6, 0x9b, 0xb8, 0x4d, 0x9b, 0xd7, 0x69, 0xf9, 0x23, 0xca, 0x1f, 0x91, 0x81, 0x5b, 0x42, + 0xc7, 0xca, 0x60, 0x09, 0x64, 0x0c, 0xc6, 0x6e, 0x1b, 0x5d, 0x47, 0xa1, 0x87, 0xe2, 0xad, 0x97, + 0x5e, 0x8c, 0x62, 0xbf, 0x69, 0x54, 0xbb, 0x56, 0x90, 0x54, 0xaf, 0xd9, 0x71, 0x9f, 0x60, 0x1f, + 0x6b, 0xc7, 0x1e, 0x77, 0x19, 0x8c, 0xf6, 0x8b, 0x0c, 0xbd, 0x72, 0x82, 0x0b, 0xdd, 0xcd, 0xcf, + 0xf3, 0x3e, 0xb2, 0xe4, 0xdf, 0x63, 0xc1, 0x8b, 0x54, 0x94, 0xb2, 0xc4, 0x24, 0x9d, 0x09, 0x59, + 0x8e, 0x8c, 0x55, 0x5a, 0x5c, 0xe2, 0x48, 0xa4, 0x56, 0x56, 0x98, 0x64, 0x28, 0x0a, 0x33, 0x9c, + 0x6b, 0x65, 0x15, 0xdb, 0x6d, 0x06, 0x87, 0x75, 0x70, 0xf0, 0xbb, 0x0d, 0xe1, 0x7b, 0x0a, 0x1f, + 0xb9, 0x2c, 0xfb, 0x0f, 0x82, 0x54, 0x66, 0xbc, 0xb5, 0xdf, 0x3a, 0xec, 0xc6, 0xee, 0x91, 0xfd, + 0x0f, 0x1d, 0x23, 0x2f, 0x4b, 0x44, 0xde, 0x26, 0xb3, 0x56, 0xac, 0x0f, 0x5b, 0x73, 0xad, 0x2a, + 0x99, 0xa1, 0xe6, 0x01, 0x4d, 0x56, 0x9a, 0x45, 0x00, 0xc6, 0x0a, 0x6d, 0x27, 0x85, 0x4a, 0x73, + 0xbe, 0x4e, 0xd3, 0x86, 0xe3, 0xd6, 0x62, 0x99, 0xf9, 0xe9, 0x86, 0x5f, 0xbb, 0xd4, 0x6e, 0x36, + 0x95, 0x05, 0x1a, 0xf9, 0x0d, 0x79, 0xc7, 0xcf, 0x96, 0x9a, 0x1d, 0xc0, 0xf6, 0x5c, 0x2b, 0x35, + 0xad, 0x50, 0xcb, 0xa9, 0xc4, 0x8c, 0x6f, 0x52, 0xe0, 0xb1, 0xc9, 0x06, 0xd0, 0x23, 0xc3, 0x5c, + 0x4b, 0x63, 0x30, 0xe3, 0x5b, 0x14, 0x7a, 0xe4, 0xb9, 0x0c, 0x6d, 0x67, 0x95, 0x3b, 0x34, 0xf2, + 0xae, 0xcf, 0x34, 0x3d, 0xc6, 0x61, 0x33, 0xd5, 0x28, 0xac, 0xd2, 0x1c, 0x68, 0xbc, 0x94, 0x8e, + 0xc9, 0x35, 0xea, 0xbc, 0x40, 0x1e, 0x7a, 0x26, 0x5e, 0x39, 0x7a, 0x53, 0x99, 0xf1, 0x9e, 0xa7, + 0x37, 0x95, 0xd9, 0xa0, 0x0f, 0xeb, 0xe7, 0xc7, 0x27, 0x47, 0x8c, 0xc1, 0xfa, 0x4c, 0x98, 0x19, + 0x81, 0xed, 0xc5, 0xf4, 0x3c, 0xf8, 0x1e, 0xc0, 0xf6, 0x79, 0x29, 0x2b, 0xd4, 0x46, 0x14, 0xc7, + 0xb2, 0x40, 0xf6, 0x12, 0xda, 0x35, 0xfc, 0x70, 0xdc, 0x1f, 0x3e, 0x55, 0xd8, 0xd0, 0xbd, 0x2d, + 0x6e, 0xcb, 0x8c, 0x7d, 0x82, 0x8e, 0xff, 0x22, 0xde, 0xde, 0x0f, 0x0e, 0xc3, 0xf1, 0xe8, 0x1f, + 0xf9, 0xe6, 0x06, 0xc3, 0x33, 0x5a, 0xf1, 0xb1, 0xb4, 0x7a, 0x11, 0xd7, 0xcb, 0xd9, 0x33, 0xe8, + 0x3a, 0xc0, 0x09, 0x11, 0x77, 0x4d, 0x06, 0x9e, 0xf8, 0x67, 0x47, 0x7c, 0x17, 0x36, 0xa8, 0x37, + 0x2a, 0x31, 0x88, 0xbd, 0x70, 0x64, 0xf0, 0x76, 0x2e, 0x35, 0x1a, 0xaa, 0x2f, 0x88, 0x97, 0xd2, + 0xe5, 0xd5, 0xd7, 0x12, 0x75, 0x5d, 0x9d, 0x17, 0xec, 0x39, 0xec, 0xd0, 0x66, 0x89, 0x2c, 0x2d, + 0xea, 0x4a, 0x14, 0x54, 0x5c, 0x50, 0x17, 0x77, 0x52, 0x9b, 0x0d, 0xac, 0x5b, 0x84, 0xa9, 0x56, + 0xfd, 0x0b, 0x08, 0x1b, 0x07, 0x77, 0x94, 0x73, 0x5c, 0x2c, 0xff, 0xd1, 0x1c, 0x17, 0xec, 0x0d, + 0x6c, 0x54, 0xa2, 0xb8, 0xf1, 0xbf, 0x68, 0x38, 0xde, 0x7b, 0x1a, 0x85, 0x23, 0x40, 0xef, 0x89, + 0x7d, 0xfa, 0x5d, 0xfb, 0x6d, 0x6b, 0x70, 0x05, 0xdd, 0x95, 0xef, 0x0e, 0x40, 0xd5, 0xeb, 0xfa, + 0xe5, 0xb5, 0x62, 0x7b, 0x10, 0x16, 0xc2, 0xd8, 0x84, 0x64, 0x49, 0xbb, 0x04, 0x31, 0x38, 0xeb, + 0x8c, 0x1c, 0x76, 0x00, 0x3b, 0xe9, 0xec, 0xa6, 0xcc, 0x13, 0xab, 0x7c, 0xa8, 0x06, 0xd9, 0x23, + 0xf7, 0x8b, 0xa2, 0xd8, 0x87, 0xd3, 0x9f, 0xf7, 0x51, 0xeb, 0xee, 0x3e, 0x6a, 0xfd, 0xb9, 0x8f, + 0x5a, 0x3f, 0x1e, 0xa2, 0xb5, 0xbb, 0x87, 0x68, 0xed, 0xd7, 0x43, 0xb4, 0x76, 0x31, 0xbe, 0x94, + 0x76, 0x76, 0x33, 0x19, 0xa6, 0xea, 0x7a, 0x74, 0x25, 0xd2, 0x5c, 0x14, 0xa7, 0x62, 0x62, 0x46, + 0xfe, 0x33, 0x5e, 0xf9, 0xbb, 0x7d, 0xbb, 0xba, 0xdd, 0x76, 0x31, 0x47, 0x33, 0xe9, 0xd0, 0xbd, + 0x7e, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0x96, 0x48, 0x04, 0xdd, 0x02, 0x04, 0x00, 0x00, } func (m *ActiveDeals) Marshal() (dAtA []byte, err error) { @@ -294,6 +517,171 @@ func (m *ActiveDeals) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *UFID) 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 *UFID) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UFID) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Hash) > 0 { + i -= len(m.Hash) + copy(dAtA[i:], m.Hash) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Hash))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *UniversalFile) 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 *UniversalFile) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UniversalFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x42 + } + if m.ProofInterval != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.ProofInterval)) + i-- + dAtA[i] = 0x38 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x32 + } + if m.Expires != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.Expires)) + i-- + dAtA[i] = 0x28 + } + if m.Start != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x20 + } + if m.FileSize != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.FileSize)) + i-- + dAtA[i] = 0x18 + } + if len(m.Proofs) > 0 { + for k := range m.Proofs { + v := m.Proofs[k] + baseI := i + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintActiveDeals(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(k) + copy(dAtA[i:], k) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(k))) + i-- + dAtA[i] = 0xa + i = encodeVarintActiveDeals(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + if m.Id != nil { + { + size, err := m.Id.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintActiveDeals(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *FileProof) 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 *FileProof) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FileProof) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ChunkToProve != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.ChunkToProve)) + i-- + dAtA[i] = 0x18 + } + if m.LastProven != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.LastProven)) + i-- + dAtA[i] = 0x10 + } + if len(m.Prover) > 0 { + i -= len(m.Prover) + copy(dAtA[i:], m.Prover) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Prover))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintActiveDeals(dAtA []byte, offset int, v uint64) int { offset -= sovActiveDeals(v) base := offset @@ -359,16 +747,612 @@ func (m *ActiveDeals) Size() (n int) { if l > 0 { n += 1 + l + sovActiveDeals(uint64(l)) } - return n -} + return n +} + +func (m *UFID) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Hash) + if l > 0 { + n += 1 + l + sovActiveDeals(uint64(l)) + } + return n +} + +func (m *UniversalFile) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Id != nil { + l = m.Id.Size() + n += 1 + l + sovActiveDeals(uint64(l)) + } + if len(m.Proofs) > 0 { + for k, v := range m.Proofs { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovActiveDeals(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovActiveDeals(uint64(len(k))) + l + n += mapEntrySize + 1 + sovActiveDeals(uint64(mapEntrySize)) + } + } + if m.FileSize != 0 { + n += 1 + sovActiveDeals(uint64(m.FileSize)) + } + if m.Start != 0 { + n += 1 + sovActiveDeals(uint64(m.Start)) + } + if m.Expires != 0 { + n += 1 + sovActiveDeals(uint64(m.Expires)) + } + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovActiveDeals(uint64(l)) + } + if m.ProofInterval != 0 { + n += 1 + sovActiveDeals(uint64(m.ProofInterval)) + } + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovActiveDeals(uint64(l)) + } + return n +} + +func (m *FileProof) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Prover) + if l > 0 { + n += 1 + l + sovActiveDeals(uint64(l)) + } + if m.LastProven != 0 { + n += 1 + sovActiveDeals(uint64(m.LastProven)) + } + if m.ChunkToProve != 0 { + n += 1 + sovActiveDeals(uint64(m.ChunkToProve)) + } + return n +} + +func sovActiveDeals(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozActiveDeals(x uint64) (n int) { + return sovActiveDeals(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ActiveDeals) 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 ErrIntOverflowActiveDeals + } + 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: ActiveDeals: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ActiveDeals: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Cid = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signee", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signee = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Provider = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Startblock", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Startblock = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Endblock", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Endblock = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filesize", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Filesize = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proofverified", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Proofverified = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proofsmissed", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Proofsmissed = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Blocktoprove", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Blocktoprove = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Fid = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipActiveDeals(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthActiveDeals + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UFID) 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 ErrIntOverflowActiveDeals + } + 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: UFID: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UFID: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hash = append(m.Hash[:0], dAtA[iNdEx:postIndex]...) + if m.Hash == nil { + m.Hash = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipActiveDeals(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthActiveDeals + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } -func sovActiveDeals(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozActiveDeals(x uint64) (n int) { - return sovActiveDeals(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil } -func (m *ActiveDeals) Unmarshal(dAtA []byte) error { +func (m *UniversalFile) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -391,17 +1375,17 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ActiveDeals: wiretype end group for non-group") + return fmt.Errorf("proto: UniversalFile: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ActiveDeals: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: UniversalFile: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -411,29 +1395,33 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthActiveDeals } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthActiveDeals } if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + if m.Id == nil { + m.Id = &UFID{} + } + if err := m.Id.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signee", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Proofs", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -443,29 +1431,126 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthActiveDeals } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthActiveDeals } if postIndex > l { return io.ErrUnexpectedEOF } - m.Signee = string(dAtA[iNdEx:postIndex]) + if m.Proofs == nil { + m.Proofs = make(map[string]*FileProof) + } + var mapkey string + var mapvalue *FileProof + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthActiveDeals + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthActiveDeals + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthActiveDeals + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &FileProof{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipActiveDeals(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthActiveDeals + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Proofs[mapkey] = mapvalue iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FileSize", wireType) } - var stringLen uint64 + m.FileSize = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -475,29 +1560,16 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.FileSize |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthActiveDeals - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthActiveDeals - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Provider = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Startblock", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) } - var stringLen uint64 + m.Start = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -507,29 +1579,16 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.Start |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthActiveDeals - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthActiveDeals - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Startblock = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Endblock", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Expires", wireType) } - var stringLen uint64 + m.Expires = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -539,27 +1598,14 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.Expires |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthActiveDeals - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthActiveDeals - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Endblock = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filesize", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -587,13 +1633,13 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Filesize = string(dAtA[iNdEx:postIndex]) + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proofverified", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofInterval", wireType) } - var stringLen uint64 + m.ProofInterval = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -603,29 +1649,16 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.ProofInterval |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthActiveDeals - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthActiveDeals - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Proofverified = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proofsmissed", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -635,59 +1668,79 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { return ErrInvalidLengthActiveDeals } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthActiveDeals } if postIndex > l { return io.ErrUnexpectedEOF } - m.Proofsmissed = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Blocktoprove", wireType) + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowActiveDeals - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipActiveDeals(dAtA[iNdEx:]) + if err != nil { + return err } - intStringLen := int(stringLen) - if intStringLen < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthActiveDeals } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthActiveDeals + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF } - if postIndex > l { + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FileProof) 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 ErrIntOverflowActiveDeals + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.Blocktoprove = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 10: + 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: FileProof: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FileProof: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Prover", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -715,13 +1768,13 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Creator = string(dAtA[iNdEx:postIndex]) + m.Prover = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastProven", wireType) } - var stringLen uint64 + m.LastProven = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -731,29 +1784,16 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.LastProven |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthActiveDeals - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthActiveDeals - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Merkle = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ChunkToProve", wireType) } - var stringLen uint64 + m.ChunkToProve = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -763,24 +1803,11 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.ChunkToProve |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthActiveDeals - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthActiveDeals - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Fid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipActiveDeals(dAtA[iNdEx:]) diff --git a/x/storage/types/codec.go b/x/storage/types/codec.go index fc47ef938..0f34053af 100644 --- a/x/storage/types/codec.go +++ b/x/storage/types/codec.go @@ -10,7 +10,7 @@ import ( func RegisterCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgPostContract{}, "storage/PostContract", nil) - cdc.RegisterConcrete(&MsgPostproof{}, "storage/Postproof", nil) + cdc.RegisterConcrete(&MsgPostproof{}, "storage/PostProof", nil) cdc.RegisterConcrete(&MsgSignContract{}, "storage/SignContract", nil) cdc.RegisterConcrete(&MsgSetProviderIP{}, "storage/SetProviderIp", nil) cdc.RegisterConcrete(&MsgSetProviderTotalspace{}, "storage/SetProviderTotalspace", nil) diff --git a/x/storage/types/file_deal.go b/x/storage/types/file_deal.go new file mode 100644 index 000000000..0adc8cd97 --- /dev/null +++ b/x/storage/types/file_deal.go @@ -0,0 +1,94 @@ +package types + +import ( + "crypto/sha256" + "encoding/json" + "fmt" + "io" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerror "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/tendermint/tendermint/libs/rand" + "github.com/wealdtech/go-merkletree" + "github.com/wealdtech/go-merkletree/sha3" +) + +// VerifyProof checks whether a proof is valid against a file +func (f *UniversalFile) VerifyProof(proofData []byte, chunk int64, item string) bool { + h := sha256.New() + _, err := io.WriteString(h, fmt.Sprintf("%d%s", chunk, item)) + if err != nil { + return false + } + hashName := h.Sum(nil) + + var proof merkletree.Proof // unmarshal proof + err = json.Unmarshal(proofData, &proof) + if err != nil { + return false + } + + verified, err := merkletree.VerifyProofUsing(hashName, false, &proof, [][]byte{f.Merkle}, sha3.New512()) + if err != nil { + return false + } + + return verified +} + +// ResetChunk picks a new chunk to prove for a file +func (f *UniversalFile) ResetChunk(ctx sdk.Context, prover string, chunkSize int64) error { + proof := f.Proofs[prover] + if proof == nil { + return sdkerror.ErrKeyNotFound + } + + pieces := f.FileSize / chunkSize + d := f.FileSize % chunkSize + if d == 0 { // handle edge case where there is exactly full chunks with no extra bits + pieces-- + } + var newChunk int64 + if pieces > 0 { // if there is more than one piece we pick a random to prove + + r := rand.NewRand() + r.Seed(ctx.BlockHeight() + int64(ctx.BlockGasMeter().GasConsumed())) + newChunk = r.Int63n(pieces) + } + + proof.ChunkToProve = newChunk + + return nil +} + +// SetProven sets the proofs proven status to true and updates the proof window & picks a new chunk to verify +func (f *UniversalFile) SetProven(ctx sdk.Context, prover string, chunkSize int64) error { + proof := f.Proofs[prover] + if proof == nil { + return sdkerror.ErrKeyNotFound + } + + proof.LastProven = ctx.BlockHeight() + err := f.ResetChunk(ctx, prover, chunkSize) + if err != nil { + return err + } + + return nil +} + +// Prove checks the validity of a proof and updates the proof window & picks a new chunk to verify +func (f *UniversalFile) Prove(ctx sdk.Context, prover string, proofData []byte, chunk int64, item string, chunkSize int64) error { + valid := f.VerifyProof(proofData, chunk, item) + + if !valid { + return ErrCannotVerifyProof + } + + err := f.SetProven(ctx, prover, chunkSize) + if err != nil { + return err + } + + return nil +} diff --git a/x/storage/types/file_deal_test.go b/x/storage/types/file_deal_test.go new file mode 100644 index 000000000..5d3c65775 --- /dev/null +++ b/x/storage/types/file_deal_test.go @@ -0,0 +1,87 @@ +package types_test + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "strconv" + "strings" + "testing" + + "github.com/jackalLabs/canine-chain/v3/x/storage/types" + "github.com/stretchr/testify/require" + "github.com/wealdtech/go-merkletree" + "github.com/wealdtech/go-merkletree/sha3" +) + +// copied from the provider code, we should probably make this an import for the providers +func GenerateMerkleProof(tree merkletree.MerkleTree, index int, item []byte) (bool, *merkletree.Proof, error) { + h := sha256.New() + _, err := io.WriteString(h, fmt.Sprintf("%d%x", index, item)) + if err != nil { + panic(err) + } + + proof, err := tree.GenerateProof(h.Sum(nil), 0) + if err != nil { + panic(err) + } + + valid, err := merkletree.VerifyProofUsing(h.Sum(nil), false, proof, [][]byte{tree.Root()}, sha3.New512()) + if err != nil { + panic(err) + } + return valid, proof, nil +} + +func TestFileProof(t *testing.T) { + i := []byte("Hello world!") + + var hashBuilder strings.Builder + hashBuilder.WriteString(strconv.FormatInt(0, 10)) + hashBuilder.WriteString(hex.EncodeToString(i)) + + hash := sha256.New() + _, err := io.WriteString(hash, hashBuilder.String()) + require.NoError(t, err) + + data := make([][]byte, 1) + + hashName := hash.Sum(nil) + data[0] = hashName + + tree, err := merkletree.NewUsing(data, sha3.New512(), false) + require.NoError(t, err) + + f := &types.UniversalFile{ + Id: nil, + Proofs: make(map[string]*types.FileProof), + FileSize: 1, + Start: 0, + Expires: 0, + Owner: "", + ProofInterval: 0, + Merkle: tree.Root(), + } + + verified, proof, err := GenerateMerkleProof(*tree, 0, i) + require.NoError(t, err) + + jproof, err := json.Marshal(*proof) + require.NoError(t, err) + + require.Equal(t, true, verified) + + item := fmt.Sprintf("%x", i) + proofData := jproof + + var chunk int64 + + validProof := f.VerifyProof(proofData, chunk, item) + require.Equal(t, true, validProof) + + validProof = f.VerifyProof(proofData, chunk+1, item) + require.Equal(t, false, validProof) +} diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index ef02e1030..fbc457ca2 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -1845,78 +1845,78 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/tx.proto", fileDescriptor_2194ba0b2c3d6a97) } var fileDescriptor_2194ba0b2c3d6a97 = []byte{ - // 1122 bytes of a gzipped FileDescriptorProto + // 1126 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4d, 0x6f, 0x1b, 0x45, 0x18, 0xce, 0xc6, 0xcd, 0xd7, 0x8b, 0x13, 0xd2, 0x6d, 0xd2, 0x3a, 0xdb, 0xc6, 0x29, 0x5b, 0x41, 0x4b, 0xab, 0xda, 0x22, 0x95, 0xe8, 0x05, 0x09, 0x25, 0x41, 0xa0, 0xd2, 0x1a, 0x82, 0x53, 0x24, 0x04, 0x88, 0x68, 0xbc, 0x3b, 0x5e, 0x6f, 0x62, 0xef, 0x2c, 0x33, 0xe3, 0x50, 0x73, 0x00, 0x09, 0x4e, 0xdc, 0xf8, 0x0b, 0x1c, 0xf8, 0x2f, 0x1c, 0x7b, 0xe4, 0x88, 0x92, 0x9f, 0xc1, 0x05, 0xed, - 0xec, 0xec, 0xec, 0x87, 0x77, 0x37, 0xeb, 0x0a, 0x21, 0x6e, 0x7e, 0x67, 0x9e, 0x79, 0x9e, 0xf7, + 0xec, 0xec, 0xec, 0x87, 0x77, 0x37, 0xeb, 0x0a, 0x21, 0x6e, 0x9e, 0x77, 0x9e, 0x79, 0x9e, 0xf7, 0x63, 0x3c, 0xef, 0xab, 0x85, 0x6d, 0x0b, 0x79, 0xae, 0x87, 0x8f, 0xad, 0x01, 0x72, 0xbd, 0x36, 0xe3, 0x84, 0x22, 0x07, 0xb7, 0xf9, 0x8b, 0x96, 0x4f, 0x09, 0x27, 0xfa, 0x46, 0x72, 0xbb, 0x25, 0xb7, 0xcd, 0x5f, 0x34, 0x78, 0xbd, 0xc3, 0x9c, 0x43, 0xc2, 0xf8, 0x01, 0xf1, 0x38, 0x45, 0x16, - 0xd7, 0x1b, 0xb0, 0x64, 0x51, 0x8c, 0x38, 0xa1, 0x0d, 0xed, 0xb6, 0x76, 0x6f, 0xa5, 0x1b, 0x99, - 0xfa, 0x75, 0x58, 0x1c, 0x61, 0x7a, 0x3a, 0xc4, 0x8d, 0x79, 0xb1, 0x21, 0xad, 0x60, 0x9d, 0xb9, - 0x8e, 0x87, 0x71, 0xa3, 0x16, 0xae, 0x87, 0x96, 0x6e, 0xc0, 0x72, 0xdf, 0x1d, 0x62, 0xe6, 0x7e, - 0x8f, 0x1b, 0x57, 0xc4, 0x8e, 0xb2, 0xf5, 0x75, 0xa8, 0xf5, 0x5d, 0xbb, 0xb1, 0x20, 0x96, 0x83, - 0x9f, 0xe6, 0x16, 0xdc, 0xc8, 0xb8, 0xd2, 0xc5, 0xcc, 0x27, 0x1e, 0xc3, 0xe6, 0x09, 0xd4, 0xe5, - 0x96, 0x4f, 0x09, 0xe9, 0x97, 0xb8, 0xa8, 0xc3, 0x15, 0x97, 0xe3, 0x91, 0x74, 0x50, 0xfc, 0x0e, - 0xdc, 0x18, 0x20, 0x36, 0x18, 0xba, 0x8c, 0x4b, 0x07, 0x95, 0x1d, 0xb8, 0x61, 0xb9, 0xb6, 0xf4, - 0x2e, 0xf8, 0x69, 0x3e, 0x87, 0x8d, 0xa4, 0x56, 0xe4, 0x43, 0xa0, 0xc9, 0xc6, 0x96, 0x85, 0x19, - 0x13, 0x9a, 0xcb, 0xdd, 0xc8, 0xd4, 0x4d, 0xa8, 0x63, 0x4a, 0x09, 0xed, 0x60, 0xc6, 0x90, 0x13, - 0x25, 0x27, 0xb5, 0x66, 0x7e, 0x21, 0xf2, 0x7c, 0xe4, 0x3a, 0x5e, 0x85, 0x3c, 0x4b, 0xa7, 0xe6, - 0x95, 0x53, 0xfa, 0x16, 0x2c, 0xfb, 0x68, 0x72, 0x4c, 0x3c, 0x2b, 0xcc, 0xf1, 0x72, 0x77, 0xc9, - 0x47, 0x93, 0x4f, 0x3d, 0x0b, 0xcb, 0xb4, 0x25, 0x99, 0x55, 0xda, 0xde, 0x83, 0xf5, 0x60, 0x0b, - 0xf3, 0x43, 0x4a, 0xce, 0x5c, 0x1b, 0xd3, 0x27, 0x87, 0x25, 0xaa, 0x6b, 0x30, 0xef, 0xfa, 0x52, - 0x74, 0xde, 0xf5, 0x4d, 0x03, 0x1a, 0xd9, 0xd3, 0x8a, 0xf9, 0x29, 0x6c, 0xa6, 0xf7, 0x9e, 0xe2, - 0x49, 0x0f, 0x85, 0x59, 0x2a, 0xa0, 0x6f, 0xc0, 0xd2, 0x69, 0x08, 0x92, 0x1a, 0x91, 0x69, 0xee, - 0xc0, 0x76, 0x2e, 0x99, 0x52, 0xfb, 0x38, 0xeb, 0xc9, 0x73, 0xc2, 0xd1, 0x90, 0xf9, 0xc8, 0x2a, - 0x13, 0xdc, 0x80, 0x05, 0x01, 0x91, 0x72, 0xa1, 0x61, 0x9a, 0x70, 0xbb, 0x88, 0x4b, 0xe9, 0x7d, - 0x02, 0xab, 0x1d, 0xe6, 0xec, 0xd9, 0xf6, 0xc1, 0x10, 0xb9, 0x23, 0x4c, 0x4b, 0x44, 0xee, 0xc0, - 0xaa, 0x15, 0x80, 0x8e, 0x91, 0x6d, 0xd3, 0xe0, 0x6e, 0xc8, 0xe2, 0x8b, 0xc5, 0xbd, 0x70, 0xcd, - 0xbc, 0x21, 0xb2, 0x15, 0xf3, 0x29, 0xa1, 0xcf, 0x44, 0x81, 0xba, 0x78, 0x44, 0xce, 0xf0, 0xbf, - 0xa4, 0x15, 0x56, 0x2d, 0x45, 0xa9, 0xe4, 0xc6, 0xe2, 0x12, 0x3e, 0xf1, 0x5c, 0x15, 0x7c, 0xf5, - 0xeb, 0x90, 0xac, 0x5f, 0x2d, 0x55, 0x3f, 0xbd, 0x09, 0xc0, 0x55, 0x12, 0xe5, 0x5f, 0x29, 0xb1, - 0x22, 0x6f, 0x68, 0x52, 0x56, 0x79, 0xd4, 0x86, 0x6b, 0x41, 0x35, 0x06, 0x63, 0x6e, 0x93, 0xef, - 0xbc, 0xcb, 0xbd, 0x32, 0xb7, 0xe1, 0x66, 0xce, 0x01, 0xc5, 0xf7, 0x3e, 0x5c, 0xed, 0x30, 0xe7, - 0x00, 0x79, 0x16, 0x1e, 0xbe, 0xca, 0x1f, 0xcd, 0xbc, 0x09, 0x5b, 0x53, 0x04, 0x8a, 0xfd, 0x37, - 0x4d, 0x5c, 0x8c, 0xfd, 0xf1, 0xe4, 0x28, 0x7c, 0x3f, 0x4b, 0xa8, 0x77, 0xe0, 0xb5, 0x3e, 0xa1, - 0x99, 0x52, 0x41, 0x9f, 0x50, 0x59, 0xa8, 0xe0, 0x55, 0xb2, 0xc7, 0x14, 0x71, 0x97, 0x78, 0xd1, - 0xab, 0x14, 0xd9, 0xc1, 0xd5, 0xed, 0x4d, 0x38, 0x66, 0x32, 0x99, 0xa1, 0x11, 0xd4, 0xdf, 0x47, - 0x93, 0x11, 0xf6, 0xf8, 0xb1, 0x8d, 0x3d, 0x32, 0x92, 0x8f, 0x67, 0x5d, 0x2e, 0x7e, 0x10, 0xac, - 0xc9, 0xbb, 0x16, 0xbb, 0xa8, 0x9c, 0xff, 0x5a, 0xf8, 0x2e, 0xae, 0xc4, 0x11, 0xa7, 0x68, 0x32, - 0xd3, 0xfb, 0x93, 0x89, 0xa6, 0x96, 0x8d, 0x46, 0xca, 0xc6, 0xec, 0x4a, 0xf6, 0x77, 0x4d, 0x94, - 0xe4, 0x73, 0xdf, 0xa1, 0xc8, 0xc6, 0xff, 0xdf, 0xbc, 0x85, 0x85, 0x4f, 0xbb, 0xa9, 0x82, 0xf8, - 0x48, 0x6c, 0x76, 0xf1, 0xb7, 0x63, 0xcc, 0xf8, 0x1e, 0xe7, 0x98, 0x71, 0x21, 0xf8, 0x21, 0xa1, - 0xa3, 0x99, 0xae, 0xd7, 0xcf, 0x1a, 0xbc, 0x51, 0xc8, 0xa4, 0x5a, 0xcd, 0x2d, 0x58, 0xf1, 0xe5, - 0xcd, 0x0e, 0x9a, 0x4d, 0xed, 0xde, 0x4a, 0x37, 0x5e, 0x48, 0x36, 0xa2, 0xf9, 0x74, 0x23, 0xda, - 0x80, 0x05, 0xd1, 0x74, 0x64, 0x5e, 0x42, 0x23, 0xa7, 0xc5, 0x3d, 0x86, 0x95, 0xe0, 0x3d, 0x12, - 0xea, 0x33, 0xb9, 0x7f, 0x4d, 0xd4, 0x32, 0x3c, 0xa8, 0x92, 0xb3, 0x2f, 0x1a, 0xa6, 0x0c, 0xa9, - 0x8b, 0x7d, 0x42, 0xf9, 0xcc, 0x79, 0xf9, 0x01, 0x6e, 0xe5, 0x71, 0xfc, 0xc7, 0x19, 0x09, 0x85, - 0x5f, 0x21, 0x23, 0xe1, 0xc1, 0xc8, 0xdb, 0xdd, 0xbf, 0xd7, 0xa0, 0xd6, 0x61, 0x8e, 0x6e, 0x43, - 0x3d, 0x35, 0x59, 0xbd, 0xd9, 0xca, 0x1b, 0xc2, 0x5a, 0x99, 0xa9, 0xc7, 0x78, 0x58, 0x09, 0xa6, - 0x72, 0xf3, 0x15, 0xac, 0xc4, 0x93, 0x91, 0x59, 0x7a, 0x56, 0x60, 0x8c, 0xfb, 0x97, 0x63, 0x14, - 0xb9, 0x0d, 0xf5, 0xd4, 0xd0, 0x52, 0x1c, 0x42, 0x12, 0x56, 0x12, 0x42, 0xde, 0xa0, 0xa2, 0x3b, - 0xb0, 0x9a, 0x9e, 0x52, 0xde, 0x2a, 0x3e, 0x9f, 0xc4, 0x19, 0xad, 0x6a, 0x38, 0x25, 0x74, 0x06, - 0x7a, 0xce, 0xd0, 0xf2, 0xa0, 0x0a, 0x8b, 0x04, 0x1b, 0x8f, 0x66, 0x00, 0x2b, 0xdd, 0x1f, 0x61, - 0x33, 0x7f, 0x7c, 0xa9, 0x14, 0x40, 0x8c, 0x37, 0xde, 0x9d, 0x0d, 0x9f, 0xac, 0x63, 0xaa, 0xef, - 0x17, 0xd7, 0x31, 0x09, 0x2b, 0xa9, 0x63, 0x5e, 0x3b, 0xd7, 0x7d, 0x58, 0x9f, 0xea, 0xe5, 0x6f, - 0x17, 0x7b, 0x9c, 0x81, 0x1a, 0xef, 0x54, 0x86, 0x2a, 0xc5, 0x13, 0x58, 0xcb, 0x74, 0xfb, 0xbb, - 0x85, 0x24, 0x69, 0xa0, 0xd1, 0xae, 0x08, 0x54, 0x5a, 0xdf, 0x00, 0x24, 0x5a, 0xff, 0x9d, 0xc2, - 0xe3, 0x31, 0xc8, 0x78, 0x50, 0x01, 0x94, 0xe4, 0x4f, 0xb4, 0xe7, 0x62, 0xfe, 0x18, 0x54, 0xc2, - 0x3f, 0xdd, 0x8a, 0x83, 0x5c, 0x65, 0xda, 0x70, 0x71, 0xae, 0xd2, 0xc0, 0x92, 0x5c, 0xe5, 0x77, - 0x4c, 0xbd, 0x0f, 0xfa, 0x9e, 0x6d, 0x47, 0xe5, 0x8a, 0x66, 0xdb, 0xe2, 0x98, 0xe2, 0xe1, 0xb8, - 0x24, 0xa6, 0xe9, 0x09, 0x5a, 0x27, 0xb0, 0x19, 0xce, 0xba, 0x59, 0xa9, 0xe2, 0x17, 0x24, 0x35, - 0x1b, 0x97, 0xbc, 0x20, 0xb9, 0x33, 0xb4, 0xfe, 0x93, 0x06, 0xd7, 0x0b, 0x06, 0x81, 0x76, 0x09, - 0x55, 0xde, 0x01, 0xe3, 0xf1, 0x8c, 0x07, 0x94, 0x13, 0x5d, 0x58, 0x94, 0xdd, 0x7b, 0xa7, 0x38, - 0x59, 0x02, 0x60, 0xdc, 0xbd, 0x04, 0xa0, 0x38, 0x19, 0x5c, 0x9d, 0xee, 0xe1, 0xf7, 0x2f, 0xf3, - 0x30, 0xc6, 0x1a, 0xbb, 0xd5, 0xb1, 0xc9, 0x40, 0x64, 0xd3, 0xdd, 0x29, 0x39, 0x1d, 0x00, 0x4a, - 0x02, 0x49, 0x77, 0xdf, 0xfd, 0x67, 0x7f, 0x9c, 0x37, 0xb5, 0x97, 0xe7, 0x4d, 0xed, 0xaf, 0xf3, - 0xa6, 0xf6, 0xeb, 0x45, 0x73, 0xee, 0xe5, 0x45, 0x73, 0xee, 0xcf, 0x8b, 0xe6, 0xdc, 0x97, 0xbb, - 0x8e, 0xcb, 0x07, 0xe3, 0x5e, 0xcb, 0x22, 0xa3, 0xf6, 0x09, 0xb2, 0x4e, 0xd1, 0xf0, 0x19, 0xea, - 0xb1, 0x76, 0xc8, 0xfb, 0x30, 0xfc, 0x70, 0xf2, 0x22, 0xfe, 0x74, 0x32, 0xf1, 0x31, 0xeb, 0x2d, - 0x8a, 0xcf, 0x27, 0x8f, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xf6, 0xe0, 0x25, 0x52, 0x5f, 0x11, - 0x00, 0x00, + 0xd7, 0x1b, 0xb0, 0x64, 0x51, 0x8c, 0x38, 0xa1, 0x0d, 0xed, 0xb6, 0x76, 0x6f, 0xa5, 0x1b, 0x2d, + 0xf5, 0xeb, 0xb0, 0x38, 0xc2, 0xf4, 0x74, 0x88, 0x1b, 0xf3, 0x62, 0x43, 0xae, 0x02, 0x3b, 0x73, + 0x1d, 0x0f, 0xe3, 0x46, 0x2d, 0xb4, 0x87, 0x2b, 0xdd, 0x80, 0xe5, 0xbe, 0x3b, 0xc4, 0xcc, 0xfd, + 0x1e, 0x37, 0xae, 0x88, 0x1d, 0xb5, 0xd6, 0xd7, 0xa1, 0xd6, 0x77, 0xed, 0xc6, 0x82, 0x30, 0x07, + 0x3f, 0xcd, 0x2d, 0xb8, 0x91, 0x71, 0xa5, 0x8b, 0x99, 0x4f, 0x3c, 0x86, 0xcd, 0x13, 0xa8, 0xcb, + 0x2d, 0x9f, 0x12, 0xd2, 0x2f, 0x71, 0x51, 0x87, 0x2b, 0x2e, 0xc7, 0x23, 0xe9, 0xa0, 0xf8, 0x1d, + 0xb8, 0x31, 0x40, 0x6c, 0x30, 0x74, 0x19, 0x97, 0x0e, 0xaa, 0x75, 0xe0, 0x86, 0xe5, 0xda, 0xd2, + 0xbb, 0xe0, 0xa7, 0xf9, 0x1c, 0x36, 0x92, 0x5a, 0x91, 0x0f, 0x81, 0x26, 0x1b, 0x5b, 0x16, 0x66, + 0x4c, 0x68, 0x2e, 0x77, 0xa3, 0xa5, 0x6e, 0x42, 0x1d, 0x53, 0x4a, 0x68, 0x07, 0x33, 0x86, 0x9c, + 0x28, 0x39, 0x29, 0x9b, 0xf9, 0x85, 0xc8, 0xf3, 0x91, 0xeb, 0x78, 0x15, 0xf2, 0x2c, 0x9d, 0x9a, + 0x57, 0x4e, 0xe9, 0x5b, 0xb0, 0xec, 0xa3, 0xc9, 0x31, 0xf1, 0xac, 0x30, 0xc7, 0xcb, 0xdd, 0x25, + 0x1f, 0x4d, 0x3e, 0xf5, 0x2c, 0x2c, 0xd3, 0x96, 0x64, 0x56, 0x69, 0x7b, 0x0f, 0xd6, 0x83, 0x2d, + 0xcc, 0x0f, 0x29, 0x39, 0x73, 0x6d, 0x4c, 0x9f, 0x1c, 0x96, 0xa8, 0xae, 0xc1, 0xbc, 0xeb, 0x4b, + 0xd1, 0x79, 0xd7, 0x37, 0x0d, 0x68, 0x64, 0x4f, 0x2b, 0xe6, 0xa7, 0xb0, 0x99, 0xde, 0x7b, 0x8a, + 0x27, 0x3d, 0x14, 0x66, 0xa9, 0x80, 0xbe, 0x01, 0x4b, 0xa7, 0x21, 0x48, 0x6a, 0x44, 0x4b, 0x73, + 0x07, 0xb6, 0x73, 0xc9, 0x94, 0xda, 0xc7, 0x59, 0x4f, 0x9e, 0x13, 0x8e, 0x86, 0xcc, 0x47, 0x56, + 0x99, 0xe0, 0x06, 0x2c, 0x08, 0x88, 0x94, 0x0b, 0x17, 0xa6, 0x09, 0xb7, 0x8b, 0xb8, 0x94, 0xde, + 0x27, 0xb0, 0xda, 0x61, 0xce, 0x9e, 0x6d, 0x1f, 0x0c, 0x91, 0x3b, 0xc2, 0xb4, 0x44, 0xe4, 0x0e, + 0xac, 0x5a, 0x01, 0xe8, 0x18, 0xd9, 0x36, 0x0d, 0xee, 0x86, 0x2c, 0xbe, 0x30, 0xee, 0x85, 0x36, + 0xf3, 0x86, 0xc8, 0x56, 0xcc, 0xa7, 0x84, 0x3e, 0x13, 0x05, 0xea, 0xe2, 0x11, 0x39, 0xc3, 0xff, + 0x92, 0x56, 0x58, 0xb5, 0x14, 0xa5, 0x92, 0x1b, 0x8b, 0x4b, 0xf8, 0xc4, 0x73, 0x55, 0xf0, 0xd5, + 0xaf, 0x43, 0xb2, 0x7e, 0xb5, 0x54, 0xfd, 0xf4, 0x26, 0x00, 0x57, 0x49, 0x94, 0x7f, 0xa5, 0x84, + 0x45, 0xde, 0xd0, 0xa4, 0xac, 0xf2, 0xa8, 0x0d, 0xd7, 0x82, 0x6a, 0x0c, 0xc6, 0xdc, 0x26, 0xdf, + 0x79, 0x97, 0x7b, 0x65, 0x6e, 0xc3, 0xcd, 0x9c, 0x03, 0x8a, 0xef, 0x7d, 0xb8, 0xda, 0x61, 0xce, + 0x01, 0xf2, 0x2c, 0x3c, 0x7c, 0x95, 0x3f, 0x9a, 0x79, 0x13, 0xb6, 0xa6, 0x08, 0x14, 0xfb, 0x6f, + 0x9a, 0xb8, 0x18, 0xfb, 0xe3, 0xc9, 0x51, 0xf8, 0x7e, 0x96, 0x50, 0xef, 0xc0, 0x6b, 0x7d, 0x42, + 0x33, 0xa5, 0x82, 0x3e, 0xa1, 0xb2, 0x50, 0xc1, 0xab, 0x64, 0x8f, 0x29, 0xe2, 0x2e, 0xf1, 0xa2, + 0x57, 0x29, 0x5a, 0x07, 0x57, 0xb7, 0x37, 0xe1, 0x98, 0xc9, 0x64, 0x86, 0x8b, 0xa0, 0xfe, 0x3e, + 0x9a, 0x8c, 0xb0, 0xc7, 0x8f, 0x6d, 0xec, 0x91, 0x91, 0x7c, 0x3c, 0xeb, 0xd2, 0xf8, 0x41, 0x60, + 0x93, 0x77, 0x2d, 0x76, 0x51, 0x39, 0xff, 0xb5, 0xf0, 0x5d, 0x5c, 0x89, 0x23, 0x4e, 0xd1, 0x64, + 0xa6, 0xf7, 0x27, 0x13, 0x4d, 0x2d, 0x1b, 0x8d, 0x94, 0x8d, 0xd9, 0x95, 0xec, 0xef, 0x9a, 0x28, + 0xc9, 0xe7, 0xbe, 0x43, 0x91, 0x8d, 0xff, 0xbf, 0x79, 0x0b, 0x0b, 0x9f, 0x76, 0x53, 0x05, 0xf1, + 0x91, 0xd8, 0xec, 0xe2, 0x6f, 0xc7, 0x98, 0xf1, 0x3d, 0xce, 0x31, 0xe3, 0x42, 0xf0, 0x43, 0x42, + 0x47, 0x33, 0x5d, 0xaf, 0x9f, 0x35, 0x78, 0xa3, 0x90, 0x49, 0xb5, 0x9a, 0x5b, 0xb0, 0xe2, 0xcb, + 0x9b, 0x1d, 0x34, 0x9b, 0xda, 0xbd, 0x95, 0x6e, 0x6c, 0x48, 0x36, 0xa2, 0xf9, 0x74, 0x23, 0xda, + 0x80, 0x05, 0xd1, 0x74, 0x64, 0x5e, 0xc2, 0x45, 0x4e, 0x8b, 0x7b, 0x0c, 0x2b, 0xc1, 0x7b, 0x24, + 0xd4, 0x67, 0x72, 0xff, 0x9a, 0xa8, 0x65, 0x78, 0x50, 0x25, 0x67, 0x5f, 0x34, 0x4c, 0x19, 0x52, + 0x17, 0xfb, 0x84, 0xf2, 0x99, 0xf3, 0xf2, 0x03, 0xdc, 0xca, 0xe3, 0xf8, 0x8f, 0x33, 0x12, 0x0a, + 0xbf, 0x42, 0x46, 0xc2, 0x83, 0x91, 0xb7, 0xbb, 0x7f, 0xaf, 0x41, 0xad, 0xc3, 0x1c, 0xdd, 0x86, + 0x7a, 0x6a, 0xb2, 0x7a, 0xb3, 0x95, 0x37, 0x84, 0xb5, 0x32, 0x53, 0x8f, 0xf1, 0xb0, 0x12, 0x4c, + 0xe5, 0xe6, 0x2b, 0x58, 0x09, 0xec, 0x87, 0x62, 0x32, 0x32, 0x4b, 0xcf, 0x8a, 0x89, 0xc6, 0xb8, + 0x7f, 0x39, 0x46, 0x91, 0xdb, 0x50, 0x4f, 0x0d, 0x2d, 0xc5, 0x21, 0x24, 0x61, 0x25, 0x21, 0xe4, + 0x0d, 0x2a, 0xba, 0x03, 0xab, 0xe9, 0x29, 0xe5, 0xad, 0xe2, 0xf3, 0x49, 0x9c, 0xd1, 0xaa, 0x86, + 0x53, 0x42, 0x67, 0xa0, 0xe7, 0x0c, 0x2d, 0x0f, 0xaa, 0xb0, 0x48, 0xb0, 0xf1, 0x68, 0x06, 0xb0, + 0xd2, 0xfd, 0x11, 0x36, 0xf3, 0xc7, 0x97, 0x4a, 0x01, 0xc4, 0x78, 0xe3, 0xdd, 0xd9, 0xf0, 0xc9, + 0x3a, 0xa6, 0xfa, 0x7e, 0x71, 0x1d, 0x93, 0xb0, 0x92, 0x3a, 0xe6, 0xb5, 0x73, 0xdd, 0x87, 0xf5, + 0xa9, 0x5e, 0xfe, 0x76, 0xb1, 0xc7, 0x19, 0xa8, 0xf1, 0x4e, 0x65, 0xa8, 0x52, 0x3c, 0x81, 0xb5, + 0x4c, 0xb7, 0xbf, 0x5b, 0x48, 0x92, 0x06, 0x1a, 0xed, 0x8a, 0x40, 0xa5, 0xf5, 0x0d, 0x40, 0xa2, + 0xf5, 0xdf, 0x29, 0x3c, 0x1e, 0x83, 0x8c, 0x07, 0x15, 0x40, 0x49, 0xfe, 0x44, 0x7b, 0x2e, 0xe6, + 0x8f, 0x41, 0x25, 0xfc, 0xd3, 0xad, 0x38, 0xc8, 0x55, 0xa6, 0x0d, 0x17, 0xe7, 0x2a, 0x0d, 0x2c, + 0xc9, 0x55, 0x7e, 0xc7, 0xd4, 0xfb, 0xa0, 0xef, 0xd9, 0x76, 0x54, 0xae, 0x68, 0xb6, 0x2d, 0x8e, + 0x29, 0x1e, 0x8e, 0x4b, 0x62, 0x9a, 0x9e, 0xa0, 0x75, 0x02, 0x9b, 0xe1, 0xac, 0x9b, 0x95, 0x2a, + 0x7e, 0x41, 0x52, 0xb3, 0x71, 0xc9, 0x0b, 0x92, 0x3b, 0x43, 0xeb, 0x3f, 0x69, 0x70, 0xbd, 0x60, + 0x10, 0x68, 0x97, 0x50, 0xe5, 0x1d, 0x30, 0x1e, 0xcf, 0x78, 0x40, 0x39, 0xd1, 0x85, 0x45, 0xd9, + 0xbd, 0x77, 0x8a, 0x93, 0x25, 0x00, 0xc6, 0xdd, 0x4b, 0x00, 0x8a, 0x93, 0xc1, 0xd5, 0xe9, 0x1e, + 0x7e, 0xff, 0x32, 0x0f, 0x63, 0xac, 0xb1, 0x5b, 0x1d, 0x9b, 0x0c, 0x44, 0x36, 0xdd, 0x9d, 0x92, + 0xd3, 0x01, 0xa0, 0x24, 0x90, 0x74, 0xf7, 0xdd, 0x7f, 0xf6, 0xc7, 0x79, 0x53, 0x7b, 0x79, 0xde, + 0xd4, 0xfe, 0x3a, 0x6f, 0x6a, 0xbf, 0x5e, 0x34, 0xe7, 0x5e, 0x5e, 0x34, 0xe7, 0xfe, 0xbc, 0x68, + 0xce, 0x7d, 0xb9, 0xeb, 0xb8, 0x7c, 0x30, 0xee, 0xb5, 0x2c, 0x32, 0x6a, 0x9f, 0x20, 0xeb, 0x14, + 0x0d, 0x9f, 0xa1, 0x1e, 0x6b, 0x87, 0xbc, 0x0f, 0xc3, 0x0f, 0x27, 0x2f, 0xe2, 0x4f, 0x27, 0x13, + 0x1f, 0xb3, 0xde, 0xa2, 0xf8, 0x7c, 0xf2, 0xe8, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x88, + 0xad, 0x0d, 0x5f, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1932,7 +1932,7 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { PostContract(ctx context.Context, in *MsgPostContract, opts ...grpc.CallOption) (*MsgPostContractResponse, error) - Postproof(ctx context.Context, in *MsgPostproof, opts ...grpc.CallOption) (*MsgPostproofResponse, error) + PostProof(ctx context.Context, in *MsgPostproof, opts ...grpc.CallOption) (*MsgPostproofResponse, error) SignContract(ctx context.Context, in *MsgSignContract, opts ...grpc.CallOption) (*MsgSignContractResponse, error) SetProviderIP(ctx context.Context, in *MsgSetProviderIP, opts ...grpc.CallOption) (*MsgSetProviderIPResponse, error) SetProviderKeybase(ctx context.Context, in *MsgSetProviderKeybase, opts ...grpc.CallOption) (*MsgSetProviderKeybaseResponse, error) @@ -1968,9 +1968,9 @@ func (c *msgClient) PostContract(ctx context.Context, in *MsgPostContract, opts return out, nil } -func (c *msgClient) Postproof(ctx context.Context, in *MsgPostproof, opts ...grpc.CallOption) (*MsgPostproofResponse, error) { +func (c *msgClient) PostProof(ctx context.Context, in *MsgPostproof, opts ...grpc.CallOption) (*MsgPostproofResponse, error) { out := new(MsgPostproofResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/Postproof", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/PostProof", in, out, opts...) if err != nil { return nil, err } @@ -2124,7 +2124,7 @@ func (c *msgClient) Report(ctx context.Context, in *MsgReport, opts ...grpc.Call // MsgServer is the server API for Msg service. type MsgServer interface { PostContract(context.Context, *MsgPostContract) (*MsgPostContractResponse, error) - Postproof(context.Context, *MsgPostproof) (*MsgPostproofResponse, error) + PostProof(context.Context, *MsgPostproof) (*MsgPostproofResponse, error) SignContract(context.Context, *MsgSignContract) (*MsgSignContractResponse, error) SetProviderIP(context.Context, *MsgSetProviderIP) (*MsgSetProviderIPResponse, error) SetProviderKeybase(context.Context, *MsgSetProviderKeybase) (*MsgSetProviderKeybaseResponse, error) @@ -2150,8 +2150,8 @@ type UnimplementedMsgServer struct { func (*UnimplementedMsgServer) PostContract(ctx context.Context, req *MsgPostContract) (*MsgPostContractResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PostContract not implemented") } -func (*UnimplementedMsgServer) Postproof(ctx context.Context, req *MsgPostproof) (*MsgPostproofResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Postproof not implemented") +func (*UnimplementedMsgServer) PostProof(ctx context.Context, req *MsgPostproof) (*MsgPostproofResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PostProof not implemented") } func (*UnimplementedMsgServer) SignContract(ctx context.Context, req *MsgSignContract) (*MsgSignContractResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SignContract not implemented") @@ -2224,20 +2224,20 @@ func _Msg_PostContract_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } -func _Msg_Postproof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Msg_PostProof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgPostproof) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MsgServer).Postproof(ctx, in) + return srv.(MsgServer).PostProof(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Msg/Postproof", + FullMethod: "/canine_chain.storage.Msg/PostProof", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).Postproof(ctx, req.(*MsgPostproof)) + return srv.(MsgServer).PostProof(ctx, req.(*MsgPostproof)) } return interceptor(ctx, in, info, handler) } @@ -2539,8 +2539,8 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ Handler: _Msg_PostContract_Handler, }, { - MethodName: "Postproof", - Handler: _Msg_Postproof_Handler, + MethodName: "PostProof", + Handler: _Msg_PostProof_Handler, }, { MethodName: "SignContract", diff --git a/x/storage/types/ufid.go b/x/storage/types/ufid.go new file mode 100644 index 000000000..bdcdd3280 --- /dev/null +++ b/x/storage/types/ufid.go @@ -0,0 +1,9 @@ +package types + +import "github.com/cosmos/cosmos-sdk/types/bech32" + +const UFidPrefix = "jkluf" + +func (u *UFID) ToString() (string, error) { + return bech32.ConvertAndEncode(UFidPrefix, u.GetHash()) +} From fd0c7befb3bfdbca9194e71daeed912d3e04235b Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 6 Oct 2023 15:47:08 -0400 Subject: [PATCH 013/256] added upgrade handler --- app/app.go | 3 ++ app/upgrades/v4/upgrades.go | 60 ++++++++++++++++++++++++++++++++++ x/storage/keeper/migrations.go | 5 +++ x/storage/legacy/v5/store.go | 14 ++++++++ x/storage/legacy/v5/types.go | 1 + x/storage/module.go | 6 +++- 6 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 app/upgrades/v4/upgrades.go create mode 100644 x/storage/legacy/v5/store.go create mode 100644 x/storage/legacy/v5/types.go diff --git a/app/app.go b/app/app.go index 16dd749b5..233782d38 100644 --- a/app/app.go +++ b/app/app.go @@ -8,6 +8,8 @@ import ( "path/filepath" "strings" + v4 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v4" + ibcfee "github.com/cosmos/ibc-go/v4/modules/apps/29-fee" ibc "github.com/cosmos/ibc-go/v4/modules/core" "github.com/jackalLabs/canine-chain/v3/app/upgrades/v3" @@ -1147,6 +1149,7 @@ func (app *JackalApp) registerMainnetUpgradeHandlers() { app.registerUpgrade(bouncybulldog.NewUpgrade(app.mm, app.configurator, app.OracleKeeper)) app.registerUpgrade(recovery.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) app.registerUpgrade(v3.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(v4.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) } // registerUpgrade registers the given upgrade to be supported by the app diff --git a/app/upgrades/v4/upgrades.go b/app/upgrades/v4/upgrades.go new file mode 100644 index 000000000..254e40b0b --- /dev/null +++ b/app/upgrades/v4/upgrades.go @@ -0,0 +1,60 @@ +package v4 + +import ( + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + "github.com/jackalLabs/canine-chain/v3/app/upgrades" + storagekeeper "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" + + storagemoduletypes "github.com/jackalLabs/canine-chain/v3/x/storage/types" +) + +var _ upgrades.Upgrade = &Upgrade{} + +// Upgrade represents the v4 upgrade +type Upgrade struct { + mm *module.Manager + configurator module.Configurator + sk storagekeeper.Keeper +} + +// NewUpgrade returns a new Upgrade instance +func NewUpgrade(mm *module.Manager, configurator module.Configurator, sk storagekeeper.Keeper) *Upgrade { + return &Upgrade{ + mm: mm, + configurator: configurator, + sk: sk, + } +} + +// Name implements upgrades.Upgrade +func (u *Upgrade) Name() string { + return "v4" +} + +// Handler implements upgrades.Upgrade +func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + ctx.Logger().Info("Now updating the Jackal Protocol to:") + ctx.Logger().Info("\n █████╗ ██████╗ █████╗ ██████╗██╗ █████╗ \n██╔══██╗██╔════╝██╔══██╗██╔════╝██║██╔══██╗\n███████║██║ ███████║██║ ██║███████║\n██╔══██║██║ ██╔══██║██║ ██║██╔══██║\n██║ ██║╚██████╗██║ ██║╚██████╗██║██║ ██║\n╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝╚═╝╚═╝ ╚═╝\n \n") + + fromVM[storagemoduletypes.ModuleName] = 5 + + newVM, err := u.mm.RunMigrations(ctx, u.configurator, fromVM) + if err != nil { + return newVM, err + } + + return newVM, err + } +} + +// StoreUpgrades implements upgrades.Upgrade +func (u *Upgrade) StoreUpgrades() *storetypes.StoreUpgrades { + return &storetypes.StoreUpgrades{ + Added: []string{}, + Deleted: []string{}, + } +} diff --git a/x/storage/keeper/migrations.go b/x/storage/keeper/migrations.go index de2a9763b..2f8d48390 100644 --- a/x/storage/keeper/migrations.go +++ b/x/storage/keeper/migrations.go @@ -43,3 +43,8 @@ func (m Migrator) Migrate3to4(ctx sdk.Context) error { func (m Migrator) Migrate4to5(ctx sdk.Context) error { return v4.MigrateStore(ctx, m.legacySubspace, &m.k.paramstore) } + +// Migrate5to6 migrates from version 5 to 6. +func (m Migrator) Migrate5to6(ctx sdk.Context) error { + return v4.MigrateStore(ctx, m.legacySubspace, &m.k.paramstore) +} diff --git a/x/storage/legacy/v5/store.go b/x/storage/legacy/v5/store.go new file mode 100644 index 000000000..91a48eab9 --- /dev/null +++ b/x/storage/legacy/v5/store.go @@ -0,0 +1,14 @@ +package v5 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/jackalLabs/canine-chain/v3/x/storage/exported" +) + +func MigrateStore(ctx sdk.Context, legacySubspace exported.Subspace, paramsSubspace *paramstypes.Subspace) error { + _ = ctx + _ = legacySubspace + _ = paramsSubspace + return nil +} diff --git a/x/storage/legacy/v5/types.go b/x/storage/legacy/v5/types.go new file mode 100644 index 000000000..985a54151 --- /dev/null +++ b/x/storage/legacy/v5/types.go @@ -0,0 +1 @@ +package v5 diff --git a/x/storage/module.go b/x/storage/module.go index 60b01a98e..0e311e55b 100644 --- a/x/storage/module.go +++ b/x/storage/module.go @@ -170,6 +170,10 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { if err != nil { panic(err) } + err = cfg.RegisterMigration(types.ModuleName, 5, m.Migrate5to6) + if err != nil { + panic(err) + } } // RegisterInvariants registers the capability module's invariants. @@ -194,7 +198,7 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw } // ConsensusVersion implements ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 5 } +func (AppModule) ConsensusVersion() uint64 { return 6 } // BeginBlock executes all ABCI BeginBlock logic respective to the capability module. func (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) { // Every x blocks we check for proven deals From 60b784aa0da2b2f0974aaad0c46856f7e305d8b3 Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 6 Oct 2023 15:52:11 -0400 Subject: [PATCH 014/256] changed text layout for the vibes --- app/upgrades/v4/upgrades.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/upgrades/v4/upgrades.go b/app/upgrades/v4/upgrades.go index 254e40b0b..760cadec3 100644 --- a/app/upgrades/v4/upgrades.go +++ b/app/upgrades/v4/upgrades.go @@ -37,8 +37,7 @@ func (u *Upgrade) Name() string { // Handler implements upgrades.Upgrade func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - ctx.Logger().Info("Now updating the Jackal Protocol to:") - ctx.Logger().Info("\n █████╗ ██████╗ █████╗ ██████╗██╗ █████╗ \n██╔══██╗██╔════╝██╔══██╗██╔════╝██║██╔══██╗\n███████║██║ ███████║██║ ██║███████║\n██╔══██║██║ ██╔══██║██║ ██║██╔══██║\n██║ ██║╚██████╗██║ ██║╚██████╗██║██║ ██║\n╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝╚═╝╚═╝ ╚═╝\n \n") + ctx.Logger().Info("\nNow updating the Jackal Protocol to:\n\n █████╗ ██████╗ █████╗ ██████╗██╗ █████╗ \n██╔══██╗██╔════╝██╔══██╗██╔════╝██║██╔══██╗\n███████║██║ ███████║██║ ██║███████║\n██╔══██║██║ ██╔══██║██║ ██║██╔══██║\n██║ ██║╚██████╗██║ ██║╚██████╗██║██║ ██║\n╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝╚═╝╚═╝ ╚═╝\n \n") fromVM[storagemoduletypes.ModuleName] = 5 From 48712cc18505dbaf5e364d15402fc96269a17f48 Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Fri, 6 Oct 2023 18:51:07 -0400 Subject: [PATCH 015/256] ica: wire module to app.go --- app/app.go | 58 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/app/app.go b/app/app.go index 16dd749b5..9470cd2d3 100644 --- a/app/app.go +++ b/app/app.go @@ -10,7 +10,7 @@ import ( ibcfee "github.com/cosmos/ibc-go/v4/modules/apps/29-fee" ibc "github.com/cosmos/ibc-go/v4/modules/core" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/v3" + v3 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v3" ibcfeekeeper "github.com/cosmos/ibc-go/v4/modules/apps/29-fee/keeper" "github.com/jackalLabs/canine-chain/v3/app/upgrades" @@ -91,6 +91,7 @@ import ( upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" ica "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts" + icacontroller "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/controller" icacontrollerkeeper "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/controller/keeper" icacontrollertypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/controller/types" icahost "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host" @@ -104,7 +105,7 @@ import ( ibcclient "github.com/cosmos/ibc-go/v4/modules/core/02-client" ibcclientclient "github.com/cosmos/ibc-go/v4/modules/core/02-client/client" ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types" + ibcporttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types" ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host" ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" @@ -123,6 +124,7 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmappparams "github.com/jackalLabs/canine-chain/v3/app/params" + interchaintxs "github.com/jackalLabs/canine-chain/v3/x/interchaintxs" mint "github.com/jackalLabs/canine-chain/v3/x/jklmint" mintkeeper "github.com/jackalLabs/canine-chain/v3/x/jklmint/keeper" minttypes "github.com/jackalLabs/canine-chain/v3/x/jklmint/types" @@ -147,6 +149,9 @@ import ( notificationsmodulekeeper "github.com/jackalLabs/canine-chain/v3/x/notifications/keeper" notificationsmoduletypes "github.com/jackalLabs/canine-chain/v3/x/notifications/types" + interchaintxskeeper "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/keeper" + interchaintxstypes "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" + /* dsigmodule "github.com/jackalLabs/canine-chain/x/dsig" @@ -257,6 +262,7 @@ var ( oraclemodule.AppModuleBasic{}, notificationsmodule.AppModuleBasic{}, ica.AppModuleBasic{}, + interchaintxs.AppModuleBasic{}, /* dsigmodule.AppModuleBasic{}, */ @@ -329,6 +335,7 @@ type JackalApp struct { scopedWasmKeeper capabilitykeeper.ScopedKeeper scopedICAControllerKeeper capabilitykeeper.ScopedKeeper scopedICAHostKeeper capabilitykeeper.ScopedKeeper + scopedInterTxKeeper capabilitykeeper.ScopedKeeper ICAControllerKeeper icacontrollerkeeper.Keeper ICAHostKeeper icahostkeeper.Keeper @@ -339,6 +346,8 @@ type JackalApp struct { FileTreeKeeper filetreemodulekeeper.Keeper NotificationsKeeper notificationsmodulekeeper.Keeper + InterchainTxsKeeper interchaintxskeeper.Keeper + /* DsigKeeper dsigmodulekeeper.Keeper @@ -434,6 +443,7 @@ func NewJackalApp( scopedICAControllerKeeper := app.capabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) scopedICAHostKeeper := app.capabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) scopedWasmKeeper := app.capabilityKeeper.ScopeToModule(wasm.ModuleName) + scopedInterTxKeeper := app.capabilityKeeper.ScopeToModule(interchaintxstypes.ModuleName) app.capabilityKeeper.Seal() // add keepers @@ -568,10 +578,16 @@ func NewJackalApp( app.ibcKeeper.ChannelKeeper, &app.ibcKeeper.PortKeeper, app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), ) - icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper) - // icaControllerIBCModule := icacontroller.NewIBCModule(app.ICAControllerKeeper, intergammIBCModule) - icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) + app.InterchainTxsKeeper = *interchaintxskeeper.NewKeeper( + appCodec, + keys[interchaintxstypes.StoreKey], + memKeys[interchaintxstypes.MemStoreKey], + app.getSubspace(interchaintxstypes.ModuleName), + app.ibcKeeper.ChannelKeeper, + app.ICAControllerKeeper, + scopedInterTxKeeper, + ) // create evidence keeper with router evidenceKeeper := evidencekeeper.NewKeeper( @@ -671,25 +687,41 @@ func NewJackalApp( ) notificationsModule := notificationsmodule.NewAppModule(appCodec, app.NotificationsKeeper, app.AccountKeeper, app.BankKeeper) + // NOTE: renamed porttypes to ibcporttypes will + // create merge conflicts with ibc-hooks branch. Need to resolve + // Create static IBC router, add app routes, then set and seal it - ibcRouter := porttypes.NewRouter() + ibcRouter := ibcporttypes.NewRouter() // The gov proposal types can be individually enabled if len(enabledProposals) != 0 { govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.wasmKeeper, enabledProposals)) } - var transferStack porttypes.IBCModule + var transferStack ibcporttypes.IBCModule transferStack = transfer.NewIBCModule(app.transferKeeper) transferStack = ibcfee.NewIBCMiddleware(transferStack, app.ibcFeeKeeper) - var wasmStack porttypes.IBCModule + var wasmStack ibcporttypes.IBCModule wasmStack = wasm.NewIBCHandler(app.wasmKeeper, app.ibcKeeper.ChannelKeeper, app.ibcFeeKeeper) wasmStack = ibcfee.NewIBCMiddleware(wasmStack, app.ibcFeeKeeper) + icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper) + + var icaControllerStack ibcporttypes.IBCModule + icaControllerStack = interchaintxs.NewIBCModule(app.InterchainTxsKeeper) + icaControllerStack = icacontroller.NewIBCMiddleware(icaControllerStack, app.ICAControllerKeeper) + + // icaControllerIBCModule := icacontroller.NewIBCModule(app.ICAControllerKeeper, intergammIBCModule) + icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) + interchainTxsModule := interchaintxs.NewAppModule(appCodec, app.InterchainTxsKeeper, app.AccountKeeper, app.BankKeeper) + + // NOTE: even though the chain builds successfully, this routing may still be problematic. ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack). AddRoute(wasm.ModuleName, wasmStack). - AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) + AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). + AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). + AddRoute(interchaintxstypes.ModuleName, icaControllerStack) app.ibcKeeper.SetRouter(ibcRouter) @@ -741,6 +773,7 @@ func NewJackalApp( oracleModule, notificationsModule, icaModule, + interchainTxsModule, /* dsigModule, @@ -781,6 +814,7 @@ func NewJackalApp( oraclemoduletypes.ModuleName, notificationsmoduletypes.ModuleName, wasm.ModuleName, + interchaintxstypes.ModuleName, /* dsigmoduletypes.ModuleName, @@ -818,6 +852,7 @@ func NewJackalApp( oraclemoduletypes.ModuleName, notificationsmoduletypes.ModuleName, wasm.ModuleName, + interchaintxstypes.ModuleName, /* dsigmoduletypes.ModuleName, @@ -862,6 +897,7 @@ func NewJackalApp( oraclemoduletypes.ModuleName, notificationsmoduletypes.ModuleName, wasm.ModuleName, + interchaintxstypes.ModuleName, /* dsigmoduletypes.ModuleName, @@ -897,6 +933,7 @@ func NewJackalApp( oraclemoduletypes.ModuleName, notificationsmoduletypes.ModuleName, wasm.ModuleName, + interchaintxstypes.ModuleName, ) // NOTE: The auth module must occur before everyone else. All other modules can be sorted @@ -929,6 +966,7 @@ func NewJackalApp( icatypes.ModuleName, crisistypes.ModuleName, + interchaintxstypes.ModuleName, ) // Uncomment if you want to set a custom migration order here. @@ -968,6 +1006,7 @@ func NewJackalApp( oracleModule, filetreeModule, notificationsModule, + // TODO: add interchainTxsModule ) app.sm.RegisterStoreDecoders() @@ -1210,6 +1249,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(filetreemoduletypes.ModuleName) paramsKeeper.Subspace(notificationsmoduletypes.ModuleName) paramsKeeper.Subspace(wasm.ModuleName) + paramsKeeper.Subspace(interchaintxstypes.ModuleName) return paramsKeeper } From e1518191d183ba6606647fb6ab49b9e931ecf192 Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Thu, 12 Oct 2023 14:22:53 -0400 Subject: [PATCH 016/256] ica: tx to create interchain account --- x/interchaintxs/client/cli/cli.go | 24 +++++++++++++++ x/interchaintxs/client/cli/tx.go | 50 +++++++++++++++++++++++++------ x/interchaintxs/types/msgs.go | 17 +++++++++++ 3 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 x/interchaintxs/client/cli/cli.go create mode 100644 x/interchaintxs/types/msgs.go diff --git a/x/interchaintxs/client/cli/cli.go b/x/interchaintxs/client/cli/cli.go new file mode 100644 index 000000000..ca9aa9784 --- /dev/null +++ b/x/interchaintxs/client/cli/cli.go @@ -0,0 +1,24 @@ +package cli + +import ( + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" +) + +// NewTxCmd creates and returns the tx command +func NewTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "controller", + Short: "IBC interchain accounts controller transaction subcommands", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + newRegisterInterchainAccountCmd(), + ) + + return cmd +} diff --git a/x/interchaintxs/client/cli/tx.go b/x/interchaintxs/client/cli/tx.go index 52f676247..995df5826 100644 --- a/x/interchaintxs/client/cli/tx.go +++ b/x/interchaintxs/client/cli/tx.go @@ -1,23 +1,55 @@ package cli import ( - "fmt" + "strings" - "github.com/cosmos/cosmos-sdk/client" "github.com/spf13/cobra" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/jackalLabs/canine-chain/v3/x/interchaintxs/types" ) -// GetTxCmd returns the transaction commands for this module -func GetTxCmd() *cobra.Command { +const ( + // The controller chain channel version + flagVersion = "version" + flagRelativePacketTimeout = "relative-packet-timeout" +) + +func newRegisterInterchainAccountCmd() *cobra.Command { cmd := &cobra.Command{ - Use: types.ModuleName, - Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), - DisableFlagParsing: true, - SuggestionsMinimumDistance: 2, - RunE: client.ValidateCmd, + Use: "register [connection-id]", + Short: "Register an interchain account on the provided connection.", + Long: strings.TrimSpace(`Register an account on the counterparty chain via the +connection id from the source chain. Connection identifier should be for the source chain +and the interchain account will be created on the counterparty chain. Callers are expected to +provide the appropriate application version string via {version} flag. Generates a new +port identifier using the provided owner string, binds to the port identifier and claims +the associated capability.`), + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + connectionID := args[0] + owner := clientCtx.GetFromAddress().String() + version, err := cmd.Flags().GetString(flagVersion) + if err != nil { + return err + } + + msg := types.NewMsgRegisterInterchainAccount(connectionID, owner, version) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, } + cmd.Flags().String(flagVersion, "", "Controller chain channel version") + flags.AddTxFlagsToCmd(cmd) + return cmd } diff --git a/x/interchaintxs/types/msgs.go b/x/interchaintxs/types/msgs.go new file mode 100644 index 000000000..977164bb6 --- /dev/null +++ b/x/interchaintxs/types/msgs.go @@ -0,0 +1,17 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var _ sdk.Msg = (*MsgRegisterInterchainAccount)(nil) // _ sdk.HasValidateBasic = (*MsgRegisterInterchainAccount)(nil) +// our version of the sdk doesn't have the above function + +// NewMsgRegisterInterchainAccount creates a new instance of MsgRegisterInterchainAccount +func NewMsgRegisterInterchainAccount(fromAddress, connectionID, interchainAccountID string) *MsgRegisterInterchainAccount { + return &MsgRegisterInterchainAccount{ + FromAddress: fromAddress, + ConnectionId: connectionID, + InterchainAccountId: interchainAccountID, + } +} From e9a0413478cfad9214045e7c0c76b5e835a8e392 Mon Sep 17 00:00:00 2001 From: BiPhan4 Date: Thu, 12 Oct 2023 18:14:01 -0400 Subject: [PATCH 017/256] ica: fix: GetTxCmd() --- x/interchaintxs/client/cli/cli.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/interchaintxs/client/cli/cli.go b/x/interchaintxs/client/cli/cli.go index ca9aa9784..32847f4be 100644 --- a/x/interchaintxs/client/cli/cli.go +++ b/x/interchaintxs/client/cli/cli.go @@ -7,7 +7,7 @@ import ( ) // NewTxCmd creates and returns the tx command -func NewTxCmd() *cobra.Command { +func GetTxCmd() *cobra.Command { cmd := &cobra.Command{ Use: "controller", Short: "IBC interchain accounts controller transaction subcommands", From 857ac410dd9b212d28bed8e9a531016543502387 Mon Sep 17 00:00:00 2001 From: marston Date: Sat, 14 Oct 2023 21:19:41 -0400 Subject: [PATCH 018/256] updating active deals --- app/app.go | 55 +------------------ app/upgrades.go | 54 ++++++++++++++++++ proto/canine_chain/storage/active_deals.proto | 6 +- 3 files changed, 59 insertions(+), 56 deletions(-) create mode 100644 app/upgrades.go diff --git a/app/app.go b/app/app.go index 233782d38..5b78a8ad7 100644 --- a/app/app.go +++ b/app/app.go @@ -8,25 +8,9 @@ import ( "path/filepath" "strings" - v4 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v4" - ibcfee "github.com/cosmos/ibc-go/v4/modules/apps/29-fee" - ibc "github.com/cosmos/ibc-go/v4/modules/core" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/v3" - ibcfeekeeper "github.com/cosmos/ibc-go/v4/modules/apps/29-fee/keeper" - "github.com/jackalLabs/canine-chain/v3/app/upgrades" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/recovery" - v121 "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/121" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/alpha11" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/alpha13" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/async" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/beta6" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/beta7" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/fixstrays" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/killdeals" - paramUpgrade "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/params" - + ibc "github.com/cosmos/ibc-go/v4/modules/core" "github.com/prometheus/client_golang/prometheus" "github.com/cosmos/cosmos-sdk/baseapp" @@ -157,8 +141,6 @@ import ( */ - "github.com/jackalLabs/canine-chain/v3/app/upgrades/bouncybulldog" - // unnamed import of statik for swagger UI support _ "github.com/cosmos/cosmos-sdk/client/docs/statik" @@ -1132,41 +1114,6 @@ func (app *JackalApp) RegisterTendermintService(clientCtx client.Context) { tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.InterfaceRegistry) } -func (app *JackalApp) registerTestnetUpgradeHandlers() { - app.registerUpgrade(alpha11.NewUpgrade(app.mm, app.configurator, app.OracleKeeper)) - app.registerUpgrade(alpha13.NewUpgrade(app.mm, app.configurator)) - app.registerUpgrade(killdeals.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(fixstrays.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(async.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(paramUpgrade.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(beta6.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(beta7.NewUpgrade(app.mm, app.configurator, app.NotificationsKeeper)) - app.registerUpgrade(v121.NewUpgrade(app.mm, app.configurator)) - app.registerUpgrade(recovery.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) -} - -func (app *JackalApp) registerMainnetUpgradeHandlers() { - app.registerUpgrade(bouncybulldog.NewUpgrade(app.mm, app.configurator, app.OracleKeeper)) - app.registerUpgrade(recovery.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(v3.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(v4.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) -} - -// registerUpgrade registers the given upgrade to be supported by the app -func (app *JackalApp) registerUpgrade(upgrade upgrades.Upgrade) { - app.upgradeKeeper.SetUpgradeHandler(upgrade.Name(), upgrade.Handler()) - - upgradeInfo, err := app.upgradeKeeper.ReadUpgradeInfoFromDisk() - if err != nil { - panic(err) - } - - if upgradeInfo.Name == upgrade.Name() && !app.upgradeKeeper.IsSkipHeight(upgradeInfo.Height) { - // Configure store loader that checks if version == upgradeHeight and applies store upgrades - app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, upgrade.StoreUpgrades())) - } -} - func (app *JackalApp) AppCodec() codec.Codec { return app.appCodec } diff --git a/app/upgrades.go b/app/upgrades.go new file mode 100644 index 000000000..2702e1831 --- /dev/null +++ b/app/upgrades.go @@ -0,0 +1,54 @@ +package app + +import ( + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + "github.com/jackalLabs/canine-chain/v3/app/upgrades" + "github.com/jackalLabs/canine-chain/v3/app/upgrades/bouncybulldog" + "github.com/jackalLabs/canine-chain/v3/app/upgrades/recovery" + v121 "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/121" + "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/alpha11" + "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/alpha13" + "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/async" + "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/beta6" + "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/beta7" + "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/fixstrays" + "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/killdeals" + paramUpgrade "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/params" + v3 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v3" + v4 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v4" +) + +func (app *JackalApp) registerTestnetUpgradeHandlers() { + app.registerUpgrade(alpha11.NewUpgrade(app.mm, app.configurator, app.OracleKeeper)) + app.registerUpgrade(alpha13.NewUpgrade(app.mm, app.configurator)) + app.registerUpgrade(killdeals.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(fixstrays.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(async.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(paramUpgrade.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(beta6.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(beta7.NewUpgrade(app.mm, app.configurator, app.NotificationsKeeper)) + app.registerUpgrade(v121.NewUpgrade(app.mm, app.configurator)) + app.registerUpgrade(recovery.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) +} + +func (app *JackalApp) registerMainnetUpgradeHandlers() { + app.registerUpgrade(bouncybulldog.NewUpgrade(app.mm, app.configurator, app.OracleKeeper)) + app.registerUpgrade(recovery.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(v3.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(v4.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) +} + +// registerUpgrade registers the given upgrade to be supported by the app +func (app *JackalApp) registerUpgrade(upgrade upgrades.Upgrade) { + app.upgradeKeeper.SetUpgradeHandler(upgrade.Name(), upgrade.Handler()) + + upgradeInfo, err := app.upgradeKeeper.ReadUpgradeInfoFromDisk() + if err != nil { + panic(err) + } + + if upgradeInfo.Name == upgrade.Name() && !app.upgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + // Configure store loader that checks if version == upgradeHeight and applies store upgrades + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, upgrade.StoreUpgrades())) + } +} diff --git a/proto/canine_chain/storage/active_deals.proto b/proto/canine_chain/storage/active_deals.proto index ba963bafc..2485706d1 100644 --- a/proto/canine_chain/storage/active_deals.proto +++ b/proto/canine_chain/storage/active_deals.proto @@ -31,10 +31,12 @@ message UniversalFile { string owner = 6; int64 proof_interval = 7; bytes merkle = 8; + int64 proof_type = 9; } message FileProof { string prover = 1; - int64 last_proven = 2; - int64 chunk_to_prove = 3; + UFID id = 2; + int64 last_proven = 3; + int64 chunk_to_prove = 4; } \ No newline at end of file From 0cf0980c677ba0da0e2522b8d8fc03d024553ae4 Mon Sep 17 00:00:00 2001 From: marston Date: Mon, 16 Oct 2023 09:02:06 -0400 Subject: [PATCH 019/256] proposed unified file structure --- proto/canine_chain/storage/active_deals.proto | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/proto/canine_chain/storage/active_deals.proto b/proto/canine_chain/storage/active_deals.proto index 2485706d1..78f34d58d 100644 --- a/proto/canine_chain/storage/active_deals.proto +++ b/proto/canine_chain/storage/active_deals.proto @@ -18,25 +18,24 @@ message ActiveDeals { string fid = 12; } -message UFID { - bytes hash = 1; -} - -message UniversalFile { - UFID id = 1; - map proofs = 2; - int64 file_size = 3; - int64 start = 4; - int64 expires = 5; - string owner = 6; - int64 proof_interval = 7; - bytes merkle = 8; - int64 proof_type = 9; +message UnifiedFile { + bytes merkle = 1; // The merkle root is unique to every file based on its contents. + string owner = 2; + int64 start = 3; // Marks the block height the file started on. + int64 expires = 4; // If not zero, the end block determines when a file should be deleted. + int64 file_size = 5; + int64 proof_interval = 6; // How many blocks between proofs. + int64 proof_type = 7; + repeated string proofs = 8; // A list of every file proof. + int64 max_proofs = 9; // How many provers this file can have. + string note = 10; // Misc string to store extra details. } message FileProof { string prover = 1; - UFID id = 2; - int64 last_proven = 3; - int64 chunk_to_prove = 4; + bytes merkle = 2; // Used to identify which deal this proof belongs to + string owner = 3; // '' + int64 start = 4; // '' + int64 last_proven = 5; + int64 chunk_to_prove = 6; } \ No newline at end of file From 9d30aa5ab03d3dca05d2e624b161745ce659c433 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Oct 2023 09:56:57 +0000 Subject: [PATCH 020/256] Bump actions/checkout from 4.1.0 to 4.1.1 Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.0 to 4.1.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4.1.0...v4.1.1) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- .github/workflows/canary.yml | 4 ++-- .github/workflows/cloc.yml | 2 +- .github/workflows/codeql-analizer.yml | 2 +- .github/workflows/cov.yml | 2 +- .github/workflows/golangci.yml | 2 +- .github/workflows/release.yml | 6 +++--- .github/workflows/test-full-app-sim.yml | 2 +- .github/workflows/test-import-export-sim.yml | 2 +- .github/workflows/test-unit.yml | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 433b2e73a..0f386d879 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - uses: actions/setup-go@v4 with: go-version: 1.20.2 # The Go version to download (if necessary) and use. diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 65dedb39c..1b4308a87 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -12,7 +12,7 @@ jobs: matrix: os: [ubuntu-20.04, macos-latest] steps: - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - uses: actions/setup-go@v4 with: go-version: 1.20.2 # The Go version to download (if necessary) and use. @@ -31,7 +31,7 @@ jobs: [build-cli] runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - uses: EndBug/latest-tag@latest with: # You can change the name of the tag with this input. diff --git a/.github/workflows/cloc.yml b/.github/workflows/cloc.yml index ed05f33f3..49a4a4bae 100644 --- a/.github/workflows/cloc.yml +++ b/.github/workflows/cloc.yml @@ -18,7 +18,7 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 # Runs djdefi/cloc-action - name: Count Lines of Code (cloc) diff --git a/.github/workflows/codeql-analizer.yml b/.github/workflows/codeql-analizer.yml index d2b6d3404..7f1beb1c1 100644 --- a/.github/workflows/codeql-analizer.yml +++ b/.github/workflows/codeql-analizer.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4.1.0 + uses: actions/checkout@v4.1.1 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/cov.yml b/.github/workflows/cov.yml index fe6a5bcfd..3c4f2f06f 100644 --- a/.github/workflows/cov.yml +++ b/.github/workflows/cov.yml @@ -18,7 +18,7 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - uses: actions/setup-go@v4 with: go-version: 1.20.2 # The Go version to download (if necessary) and use. diff --git a/.github/workflows/golangci.yml b/.github/workflows/golangci.yml index 605fa978b..dbfdfa09b 100644 --- a/.github/workflows/golangci.yml +++ b/.github/workflows/golangci.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/setup-go@v4 with: go-version: 1.20.2 - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - name: golangci-lint uses: golangci/golangci-lint-action@v3 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1053edc75..63a2bff76 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ jobs: matrix: os: [ubuntu-20.04, macos-latest] steps: - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - uses: actions/setup-go@v4 with: go-version: 1.20.2 # The Go version to download (if necessary) and use. @@ -34,7 +34,7 @@ jobs: # MacOS-ARM64-CLI: # runs-on: ubuntu-20.04 # steps: - # - uses: actions/checkout@v4.1.0 + # - uses: actions/checkout@v4.1.1 # - uses: actions/setup-go@v4 # with: # go-version: 1.19 # The Go version to download (if necessary) and use. @@ -57,7 +57,7 @@ jobs: [native-build-cli] runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - name: Get the version id: get_version run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\/v/} diff --git a/.github/workflows/test-full-app-sim.yml b/.github/workflows/test-full-app-sim.yml index 907a243da..18bb05602 100644 --- a/.github/workflows/test-full-app-sim.yml +++ b/.github/workflows/test-full-app-sim.yml @@ -10,7 +10,7 @@ jobs: name: Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - uses: actions/setup-go@v4 with: go-version: 1.20.2 # The Go version to download (if necessary) and use. diff --git a/.github/workflows/test-import-export-sim.yml b/.github/workflows/test-import-export-sim.yml index f38686d56..0df8a8144 100644 --- a/.github/workflows/test-import-export-sim.yml +++ b/.github/workflows/test-import-export-sim.yml @@ -10,7 +10,7 @@ jobs: name: Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - uses: actions/setup-go@v4 with: go-version: 1.20.2 # The Go version to download (if necessary) and use. diff --git a/.github/workflows/test-unit.yml b/.github/workflows/test-unit.yml index 7b4b3e363..820478c78 100644 --- a/.github/workflows/test-unit.yml +++ b/.github/workflows/test-unit.yml @@ -10,7 +10,7 @@ jobs: name: Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - uses: actions/setup-go@v4 with: go-version: 1.20.2 # The Go version to download (if necessary) and use. From 6d4f91d88e5794d80c69a53d1063bf01d067a29d Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 19 Oct 2023 13:51:09 -0400 Subject: [PATCH 021/256] completely moved proof message over to new system --- proto/canine_chain/storage/active_deals.proto | 2 +- proto/canine_chain/storage/contracts.proto | 2 +- proto/canine_chain/storage/fid_cid.proto | 2 +- proto/canine_chain/storage/genesis.proto | 19 +- proto/canine_chain/storage/query.proto | 100 +- proto/canine_chain/storage/tx.proto | 50 +- x/storage/keeper/active_deals.go | 26 +- x/storage/keeper/contract_test.go | 491 -- x/storage/keeper/files.go | 124 + x/storage/keeper/msg_server_contracts_test.go | 683 -- x/storage/keeper/msg_server_postproof.go | 78 +- x/storage/keeper/proofs.go | 97 + x/storage/types/active_deals.pb.go | 865 +- x/storage/types/contracts.pb.go | 103 +- x/storage/types/fid_cid.pb.go | 68 +- x/storage/types/file.go | 5 + x/storage/types/file_deal.go | 88 +- x/storage/types/file_deal_test.go | 16 +- x/storage/types/genesis.go | 49 +- x/storage/types/genesis.pb.go | 305 +- x/storage/types/genesis_test.go | 87 +- x/storage/types/key_active_deals.go | 23 - x/storage/types/key_files.go | 60 + x/storage/types/proof_loader.go | 15 + x/storage/types/query.pb.go | 7541 ++++++----------- x/storage/types/query.pb.gw.go | 630 +- x/storage/types/tx.pb.go | 1334 ++- x/storage/types/ufid.go | 9 - 28 files changed, 4166 insertions(+), 8706 deletions(-) delete mode 100644 x/storage/keeper/contract_test.go create mode 100644 x/storage/keeper/files.go delete mode 100644 x/storage/keeper/msg_server_contracts_test.go create mode 100644 x/storage/keeper/proofs.go create mode 100644 x/storage/types/file.go delete mode 100644 x/storage/types/key_active_deals.go create mode 100644 x/storage/types/key_files.go create mode 100644 x/storage/types/proof_loader.go delete mode 100644 x/storage/types/ufid.go diff --git a/proto/canine_chain/storage/active_deals.proto b/proto/canine_chain/storage/active_deals.proto index 78f34d58d..d8cae4245 100644 --- a/proto/canine_chain/storage/active_deals.proto +++ b/proto/canine_chain/storage/active_deals.proto @@ -3,7 +3,7 @@ package canine_chain.storage; option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; -message ActiveDeals { +message LegacyActiveDeals { string cid = 1; string signee = 2; string provider = 3; diff --git a/proto/canine_chain/storage/contracts.proto b/proto/canine_chain/storage/contracts.proto index 3a7091077..381a33b1e 100644 --- a/proto/canine_chain/storage/contracts.proto +++ b/proto/canine_chain/storage/contracts.proto @@ -3,7 +3,7 @@ package canine_chain.storage; option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; -message Contracts { +message LegacyContracts { string cid = 1; string priceamt = 2; string pricedenom = 3; diff --git a/proto/canine_chain/storage/fid_cid.proto b/proto/canine_chain/storage/fid_cid.proto index 92748cd49..508f692a6 100644 --- a/proto/canine_chain/storage/fid_cid.proto +++ b/proto/canine_chain/storage/fid_cid.proto @@ -3,7 +3,7 @@ package canine_chain.storage; option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; -message FidCid { +message LegacyFidCid { string fid = 1; string cids = 2; } diff --git a/proto/canine_chain/storage/genesis.proto b/proto/canine_chain/storage/genesis.proto index a36b43d3c..59eef2f1f 100644 --- a/proto/canine_chain/storage/genesis.proto +++ b/proto/canine_chain/storage/genesis.proto @@ -10,24 +10,19 @@ import "canine_chain/storage/strays.proto"; import "canine_chain/storage/fid_cid.proto"; import "canine_chain/storage/payment_info.proto"; -// this line is used by starport scaffolding # genesis/proto/import option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; // GenesisState defines the storage module's genesis state. message GenesisState { Params params = 1 [ (gogoproto.nullable) = false ]; - repeated Contracts contracts_list = 2 [ (gogoproto.nullable) = false ]; - repeated ActiveDeals active_deals_list = 3 [ (gogoproto.nullable) = false ]; - repeated Providers providers_list = 4 [ (gogoproto.nullable) = false ]; - repeated Strays strays_list = 6 [ (gogoproto.nullable) = false ]; - repeated FidCid fid_cid_list = 5 [ (gogoproto.nullable) = false ]; - repeated StoragePaymentInfo payment_info_list = 7 [ (gogoproto.nullable) = false ]; - repeated Collateral collateral_list = 8 [ (gogoproto.nullable) = false ]; - repeated ActiveProviders active_providers_list = 9 [ (gogoproto.nullable) = false ]; - repeated ReportForm report_forms = 10 [ (gogoproto.nullable) = false ]; - repeated AttestationForm attest_forms = 11 [ (gogoproto.nullable) = false ]; + repeated UnifiedFile file_list = 2 [ (gogoproto.nullable) = false ]; + repeated Providers providers_list = 3 [ (gogoproto.nullable) = false ]; + repeated StoragePaymentInfo payment_info_list = 4[ (gogoproto.nullable) = false ]; + repeated Collateral collateral_list = 5 [ (gogoproto.nullable) = false ]; + repeated ActiveProviders active_providers_list = 6 [ (gogoproto.nullable) = false ]; + repeated ReportForm report_forms = 7 [ (gogoproto.nullable) = false ]; + repeated AttestationForm attest_forms = 8 [ (gogoproto.nullable) = false ]; - // this line is used by starport scaffolding # genesis/proto/state } diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index a6e0504fb..6b23c72cd 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -22,29 +22,18 @@ service Query { rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { option (google.api.http).get = "/jackal-dao/canine-chain/storage/params"; } - // Queries a Contracts by index. - rpc Contracts(QueryContractRequest) returns (QueryContractResponse) { - option (google.api.http).get = - "/jackal-dao/canine-chain/storage/contracts/{cid}"; - } - // Queries a list of Contracts items. - rpc ContractsAll(QueryAllContractsRequest) - returns (QueryAllContractsResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/storage/contracts"; - } - - // Queries a ActiveDeals by index. - rpc ActiveDeals(QueryActiveDealRequest) returns (QueryActiveDealResponse) { + // Queries a File by index. + rpc File(QueryFileRequest) returns (QueryFileResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/active_deals/{cid}"; + "/jackal-dao/canine-chain/storage/files/{merkle}"; } - // Queries a list of ActiveDeals items. - rpc ActiveDealsAll(QueryAllActiveDealsRequest) - returns (QueryAllActiveDealsResponse) { + // Queries a list of File items. + rpc FilesAll(QueryAllFilesRequest) + returns (QueryAllFilesResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/active_deals"; + "/jackal-dao/canine-chain/storage/files"; } // Queries a Providers by index. @@ -101,17 +90,6 @@ service Query { "/jackal-dao/canine-chain/storage/find_file/{fid}"; } - // Queries a Strays by index. - rpc Strays(QueryStrayRequest) returns (QueryStrayResponse) { - option (google.api.http).get = - "/jackal-dao/canine-chain/storage/strays/{cid}"; - } - - // Queries a list of Strays items. - rpc StraysAll(QueryAllStraysRequest) returns (QueryAllStraysResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/storage/strays"; - } - // Queries a list of GetClientFreeSpace items. rpc GetClientFreeSpace(QueryClientFreeSpaceRequest) returns (QueryClientFreeSpaceResponse) { @@ -119,17 +97,6 @@ service Query { "/jackal-dao/canine-chain/storage/get_client_free_space/{address}"; } - // Queries a FidCid by index. - rpc FidCid(QueryFidCidRequest) returns (QueryFidCidResponse) { - option (google.api.http).get = - "/jackal-dao/canine-chain/storage/fid_cid/{fid}"; - } - - // Queries a list of FidCid items. - rpc FidCidAll(QueryAllFidCidRequest) returns (QueryAllFidCidResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/storage/fid_cid"; - } - // Queries a list of GetPayData items. rpc GetPayData(QueryPayDataRequest) returns (QueryPayDataResponse) { option (google.api.http).get = @@ -184,33 +151,19 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } -message QueryContractRequest { string cid = 1; } -message QueryContractResponse { - Contracts contracts = 1 [ (gogoproto.nullable) = false ]; -} +message QueryFileRequest { string merkle = 1; } -message QueryAllContractsRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllContractsResponse { - repeated Contracts contracts = 1 [ (gogoproto.nullable) = false ]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; +message QueryFileResponse { + UnifiedFile file = 1 [ (gogoproto.nullable) = false ]; } -message QueryActiveDealRequest { string cid = 1; } - -message QueryActiveDealResponse { - ActiveDeals active_deals = 1 [ (gogoproto.nullable) = false ]; -} - -message QueryAllActiveDealsRequest { +message QueryAllFilesRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; } -message QueryAllActiveDealsResponse { - repeated ActiveDeals active_deals = 1 [ (gogoproto.nullable) = false ]; +message QueryAllFilesResponse { + repeated UnifiedFile files = 1 [ (gogoproto.nullable) = false ]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } @@ -275,20 +228,6 @@ message QueryFindFileRequest { string fid = 1; } message QueryFindFileResponse { string provider_ips = 1; } -message QueryStrayRequest { string cid = 1; } - -message QueryStrayResponse { - Strays strays = 1 [ (gogoproto.nullable) = false ]; -} - -message QueryAllStraysRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllStraysResponse { - repeated Strays strays = 1 [ (gogoproto.nullable) = false ]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} message QueryClientFreeSpaceRequest { string address = 1; } @@ -296,18 +235,6 @@ message QueryClientFreeSpaceResponse { int64 bytesfree = 1; } message QueryFidCidRequest { string fid = 1; } -message QueryFidCidResponse { - FidCid fid_cid = 1 [ (gogoproto.nullable) = false ]; -} - -message QueryAllFidCidRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllFidCidResponse { - repeated FidCid fid_cid = 1 [ (gogoproto.nullable) = false ]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} message QueryPayDataRequest { string address = 1; } @@ -367,4 +294,3 @@ message QueryStorageStatsResponse { ]; uint64 activeUsers = 4; } -// this line is used by starport scaffolding # 3 diff --git a/proto/canine_chain/storage/tx.proto b/proto/canine_chain/storage/tx.proto index 6e3c08b67..54a75916f 100644 --- a/proto/canine_chain/storage/tx.proto +++ b/proto/canine_chain/storage/tx.proto @@ -5,9 +5,10 @@ option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; // Msg defines the Msg service. service Msg { - rpc PostContract(MsgPostContract) returns (MsgPostContractResponse); - rpc PostProof(MsgPostproof) returns (MsgPostproofResponse); - rpc SignContract(MsgSignContract) returns (MsgSignContractResponse); + rpc PostFile(MsgPostFile) returns (MsgPostFileResponse); + rpc PostProof(MsgPostProof) returns (MsgPostProofResponse); + rpc DeleteFile(MsgDeleteFile) returns (MsgDeleteFileResponse); + rpc SetProviderIP(MsgSetProviderIP) returns (MsgSetProviderIPResponse); rpc SetProviderKeybase(MsgSetProviderKeybase) returns (MsgSetProviderKeybaseResponse); @@ -15,50 +16,52 @@ service Msg { returns (MsgSetProviderTotalspaceResponse); rpc InitProvider(MsgInitProvider) returns (MsgInitProviderResponse); rpc ShutdownProvider(MsgShutdownProvider) returns (MsgShutdownProviderResponse); - rpc CancelContract(MsgCancelContract) returns (MsgCancelContractResponse); rpc BuyStorage(MsgBuyStorage) returns (MsgBuyStorageResponse); - rpc ClaimStray(MsgClaimStray) returns (MsgClaimStrayResponse); rpc UpgradeStorage(MsgUpgradeStorage) returns (MsgUpgradeStorageResponse); rpc AddProviderClaimer(MsgAddClaimer) returns (MsgAddClaimerResponse); rpc RemoveProviderClaimer(MsgRemoveClaimer) returns (MsgRemoveClaimerResponse); + rpc RequestAttestationForm(MsgRequestAttestationForm) returns (MsgRequestAttestationFormResponse); rpc Attest(MsgAttest) returns (MsgAttestResponse); rpc RequestReportForm(MsgRequestReportForm) returns (MsgRequestReportFormResponse); rpc Report(MsgReport) returns (MsgReportResponse); - - // this line is used by starport scaffolding # proto/tx/rpc } -message MsgPostContract { +message MsgPostFile { string creator = 1; - string merkle = 2; - string signee = 3; - string filesize = 4; - string fid = 5; + bytes merkle = 2; + int64 file_size = 3; + int64 proof_interval = 4; // How many blocks between proofs. + int64 proof_type = 5; + int64 max_proofs = 6; // How many provers this file can have. + string note = 7; // Misc string to store extra details. } -message MsgPostContractResponse {} +message MsgPostFileResponse {} -message MsgPostproof { +message MsgPostProof { string creator = 1; string item = 2; - string hashlist = 3; - string cid = 4; + bytes hash_list = 3; + bytes merkle = 4; + string owner = 5; + int64 start = 6; } -message MsgPostproofResponse { +message MsgPostProofResponse { bool success = 1; string errorMessage = 2; } -message MsgSignContract { +message MsgDeleteFile { string creator = 1; - string cid = 2; - bool pay_once = 3; + bytes merkle = 2; + int64 start = 3; } -message MsgSignContractResponse {} +message MsgDeleteFileResponse {} + message MsgSetProviderIP { @@ -113,12 +116,7 @@ message MsgShutdownProvider { message MsgShutdownProviderResponse {} -message MsgCancelContract { - string creator = 1; - string cid = 2; -} -message MsgCancelContractResponse {} message MsgBuyStorage { string creator = 1; diff --git a/x/storage/keeper/active_deals.go b/x/storage/keeper/active_deals.go index f5039d672..bc4578888 100644 --- a/x/storage/keeper/active_deals.go +++ b/x/storage/keeper/active_deals.go @@ -7,22 +7,22 @@ import ( ) // SetActiveDeals set a specific activeDeals in the store from its index -func (k Keeper) SetActiveDeals(ctx sdk.Context, activeDeals types.ActiveDeals) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ActiveDealsKeyPrefix)) +func (k Keeper) SetLegacyActiveDeals(ctx sdk.Context, activeDeals types.LegacyActiveDeals) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LegacyActiveDealsKeyPrefix)) b := k.cdc.MustMarshal(&activeDeals) - store.Set(types.ActiveDealsKey( + store.Set(types.LegacyActiveDealsKey( activeDeals.Cid, ), b) } // GetActiveDeals returns a activeDeals from its index -func (k Keeper) GetActiveDeals( +func (k Keeper) GetLegacyActiveDeals( ctx sdk.Context, cid string, -) (val types.ActiveDeals, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ActiveDealsKeyPrefix)) +) (val types.LegacyActiveDeals, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LegacyActiveDealsKeyPrefix)) - b := store.Get(types.ActiveDealsKey( + b := store.Get(types.LegacyActiveDealsKey( cid, )) if b == nil { @@ -34,25 +34,25 @@ func (k Keeper) GetActiveDeals( } // RemoveActiveDeals removes a activeDeals from the store -func (k Keeper) RemoveActiveDeals( +func (k Keeper) RemoveLegacyActiveDeals( ctx sdk.Context, cid string, ) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ActiveDealsKeyPrefix)) - store.Delete(types.ActiveDealsKey( + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LegacyActiveDealsKeyPrefix)) + store.Delete(types.LegacyActiveDealsKey( cid, )) } // GetAllActiveDeals returns all activeDeals -func (k Keeper) GetAllActiveDeals(ctx sdk.Context) (list []types.ActiveDeals) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ActiveDealsKeyPrefix)) +func (k Keeper) GetAllLegacyActiveDeals(ctx sdk.Context) (list []types.LegacyActiveDeals) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LegacyActiveDealsKeyPrefix)) iterator := sdk.KVStorePrefixIterator(store, []byte{}) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { - var val types.ActiveDeals + var val types.LegacyActiveDeals k.cdc.MustUnmarshal(iterator.Value(), &val) list = append(list, val) } diff --git a/x/storage/keeper/contract_test.go b/x/storage/keeper/contract_test.go deleted file mode 100644 index f99ecd1e3..000000000 --- a/x/storage/keeper/contract_test.go +++ /dev/null @@ -1,491 +0,0 @@ -package keeper_test - -import ( - testutil "github.com/jackalLabs/canine-chain/v3/testutil" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -// testing: contracts.go active_deals.go... -func (suite *KeeperTestSuite) TestSetContracts() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 2) - suite.Require().NoError(err) - - user := testAddresses[0] - provider := testAddresses[1] - - contract := types.Contracts{ - Cid: "549", - Merkle: "", - Signee: user, - Duration: "1000", - Filesize: "5000", - Fid: "5789", - Creator: provider, - } - - suite.storageKeeper.SetContracts(suite.ctx, contract) - suite.Require().NoError(err) - - contractRequest := types.QueryContractRequest{ - Cid: "549", - } - - res, err := suite.queryClient.Contracts(suite.ctx.Context(), &contractRequest) - suite.Require().NoError(err) - suite.Require().Equal(res.Contracts.Cid, contract.Cid) - suite.Require().Equal(res.Contracts.Signee, contract.Signee) -} - -func (suite *KeeperTestSuite) TestGetContracts() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 2) - suite.Require().NoError(err) - - user := testAddresses[0] - provider := testAddresses[1] - - contract := types.Contracts{ - Cid: "549", - Merkle: "", - Signee: user, - Duration: "1000", - Filesize: "5000", - Fid: "5789", - Creator: provider, - } - - suite.storageKeeper.SetContracts(suite.ctx, contract) - suite.Require().NoError(err) - - foundContract, found := suite.storageKeeper.GetContracts(suite.ctx, "549") - - suite.Require().NoError(err) - suite.Require().Equal(found, true) - suite.Require().Equal(foundContract.Cid, contract.Cid) - suite.Require().Equal(foundContract.Signee, contract.Signee) -} - -func (suite *KeeperTestSuite) TestGetAllContracts() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 3) - suite.Require().NoError(err) - - provider := testAddresses[0] - alice := testAddresses[1] - charlie := testAddresses[2] - - contract := types.Contracts{ - Cid: "549", - Merkle: "", - Signee: alice, - Duration: "1000", - Filesize: "5000", - Fid: "5789", - Creator: provider, - } - - suite.storageKeeper.SetContracts(suite.ctx, contract) - suite.Require().NoError(err) - - contract1 := types.Contracts{ - Cid: "649", - Merkle: "", - Signee: charlie, - Duration: "2000", - Filesize: "10000", - Fid: "4587", - Creator: provider, - } - - suite.storageKeeper.SetContracts(suite.ctx, contract1) - suite.Require().NoError(err) - - allContracts := suite.storageKeeper.GetAllContracts(suite.ctx) - aliceContract := allContracts[0] - charlieContract := allContracts[1] - - suite.Require().NoError(err) - suite.Require().Equal(aliceContract, contract) - suite.Require().Equal(charlieContract, contract1) -} - -func (suite *KeeperTestSuite) TestRemoveContracts() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 2) - suite.Require().NoError(err) - - user := testAddresses[0] - provider := testAddresses[1] - - contract := types.Contracts{ - Cid: "549", - Merkle: "", - Signee: user, - Duration: "1000", - Filesize: "5000", - Fid: "5789", - Creator: provider, - } - - suite.storageKeeper.SetContracts(suite.ctx, contract) - suite.Require().NoError(err) - - suite.storageKeeper.RemoveContracts(suite.ctx, "549") - - foundContract, found := suite.storageKeeper.GetContracts(suite.ctx, "549") - - ghostContract := types.Contracts{} - - suite.Require().NoError(err) - suite.Require().Equal(found, false) - suite.Require().Equal(foundContract, ghostContract) -} - -func (suite *KeeperTestSuite) TestSetActiveDeals() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 2) - suite.Require().NoError(err) - - user := testAddresses[0] - provider := testAddresses[1] - - deal := types.ActiveDeals{ - Cid: "549", - Signee: user, - Provider: provider, - Startblock: "100", - Endblock: "1000", - Filesize: "5000", - Proofverified: "true", - Proofsmissed: "0", - Blocktoprove: "150", - Creator: user, - Merkle: "", - Fid: "5789", - } - - suite.storageKeeper.SetActiveDeals(suite.ctx, deal) - suite.Require().NoError(err) - - dealRequest := types.QueryActiveDealRequest{ - Cid: "549", - } - - res, err := suite.queryClient.ActiveDeals(suite.ctx.Context(), &dealRequest) - suite.Require().NoError(err) - suite.Require().Equal(res.ActiveDeals.Cid, deal.Cid) - suite.Require().Equal(res.ActiveDeals.Signee, deal.Signee) -} - -func (suite *KeeperTestSuite) TestGetActiveDeals() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 2) - suite.Require().NoError(err) - - user := testAddresses[0] - provider := testAddresses[1] - - deal := types.ActiveDeals{ - Cid: "549", - Signee: user, - Provider: provider, - Startblock: "100", - Endblock: "1000", - Filesize: "5000", - Proofverified: "true", - Proofsmissed: "0", - Blocktoprove: "150", - Creator: user, - Merkle: "", - Fid: "5789", - } - - suite.storageKeeper.SetActiveDeals(suite.ctx, deal) - suite.Require().NoError(err) - - foundDeal, found := suite.storageKeeper.GetActiveDeals(suite.ctx, "549") - - suite.Require().NoError(err) - suite.Require().Equal(found, true) - suite.Require().Equal(foundDeal.Cid, deal.Cid) - suite.Require().Equal(foundDeal.Signee, deal.Signee) -} - -func (suite *KeeperTestSuite) TestGetAllActiveDeals() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 3) - suite.Require().NoError(err) - - provider := testAddresses[0] - alice := testAddresses[1] - charlie := testAddresses[2] - - deal := types.ActiveDeals{ - Cid: "549", - Signee: alice, - Provider: provider, - Startblock: "100", - Endblock: "1000", - Filesize: "5000", - Proofverified: "true", - Proofsmissed: "0", - Blocktoprove: "150", - Creator: alice, - Merkle: "", - Fid: "5789", - } - - suite.storageKeeper.SetActiveDeals(suite.ctx, deal) - suite.Require().NoError(err) - - deal1 := types.ActiveDeals{ - Cid: "1458", - Signee: charlie, - Provider: provider, - Startblock: "200", - Endblock: "2000", - Filesize: "10000", - Proofverified: "true", - Proofsmissed: "0", - Blocktoprove: "200", - Creator: charlie, - Merkle: "", - Fid: "4589", - } - - suite.storageKeeper.SetActiveDeals(suite.ctx, deal1) - suite.Require().NoError(err) - - allDeals := suite.storageKeeper.GetAllActiveDeals(suite.ctx) - aliceDeal := allDeals[1] - charleDeal := allDeals[0] - - suite.Require().NoError(err) - suite.Require().Equal(aliceDeal, deal) - suite.Require().Equal(charleDeal, deal1) -} - -func (suite *KeeperTestSuite) TestRemoveActiveDeals() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 2) - suite.Require().NoError(err) - - user := testAddresses[0] - provider := testAddresses[1] - - deal := types.ActiveDeals{ - Cid: "549", - Signee: user, - Provider: provider, - Startblock: "100", - Endblock: "1000", - Filesize: "5000", - Proofverified: "true", - Proofsmissed: "0", - Blocktoprove: "150", - Creator: user, - Merkle: "", - Fid: "5789", - } - - suite.storageKeeper.SetActiveDeals(suite.ctx, deal) - suite.Require().NoError(err) - - suite.storageKeeper.RemoveActiveDeals(suite.ctx, "549") - - foundDeal, found := suite.storageKeeper.GetActiveDeals(suite.ctx, "549") - - ghostDeal := types.ActiveDeals{} - - suite.Require().NoError(err) - suite.Require().Equal(found, false) - suite.Require().Equal(foundDeal, ghostDeal) -} - -func (suite *KeeperTestSuite) TestSetStrays() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 1) - suite.Require().NoError(err) - - user := testAddresses[0] - - stray := types.Strays{ - Cid: "549", - Fid: "5789", - Signee: user, - Filesize: "1000", - Merkle: "", - } - suite.storageKeeper.SetStrays(suite.ctx, stray) - suite.Require().NoError(err) - - strayRequest := types.QueryStrayRequest{ - Cid: "549", - } - - res, err := suite.queryClient.Strays(suite.ctx.Context(), &strayRequest) - suite.Require().NoError(err) - suite.Require().Equal(res.Strays.Cid, stray.Cid) - suite.Require().Equal(res.Strays.Fid, stray.Fid) -} - -func (suite *KeeperTestSuite) TestGetStrays() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 1) - suite.Require().NoError(err) - - user := testAddresses[0] - - stray := types.Strays{ - Cid: "549", - Fid: "5789", - Signee: user, - Filesize: "1000", - Merkle: "", - } - suite.storageKeeper.SetStrays(suite.ctx, stray) - suite.Require().NoError(err) - - foundStray, found := suite.storageKeeper.GetStrays(suite.ctx, "549") - - suite.Require().NoError(err) - suite.Require().Equal(found, true) - suite.Require().Equal(foundStray.Cid, stray.Cid) - suite.Require().Equal(foundStray.Fid, stray.Fid) -} - -func (suite *KeeperTestSuite) TestGetAllStrays() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 1) - suite.Require().NoError(err) - - user := testAddresses[0] - - stray := types.Strays{ - Cid: "549", - Fid: "5789", - Signee: user, - Filesize: "1000", - Merkle: "", - } - suite.storageKeeper.SetStrays(suite.ctx, stray) - suite.Require().NoError(err) - - stray1 := types.Strays{ - Cid: "649", - Fid: "5789", - Signee: user, - Filesize: "1000", - Merkle: "", - } - suite.storageKeeper.SetStrays(suite.ctx, stray1) - suite.Require().NoError(err) - - foundStrays := suite.storageKeeper.GetAllStrays(suite.ctx) - foundStayZero := foundStrays[0] - foundStayOne := foundStrays[1] - - suite.Require().NoError(err) - suite.Require().Equal(foundStayZero, stray) - suite.Require().Equal(foundStayOne, stray1) -} - -func (suite *KeeperTestSuite) TestRemoveStrays() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("jkl", 1) - suite.Require().NoError(err) - - user := testAddresses[0] - - stray := types.Strays{ - Cid: "549", - Fid: "5789", - Signee: user, - Filesize: "1000", - Merkle: "", - } - suite.storageKeeper.SetStrays(suite.ctx, stray) - suite.Require().NoError(err) - - suite.storageKeeper.RemoveStrays(suite.ctx, "549") - - foundStray, found := suite.storageKeeper.GetStrays(suite.ctx, "549") - ghostStray := types.Strays{} - - suite.Require().NoError(err) - suite.Require().Equal(found, false) - suite.Require().Equal(foundStray, ghostStray) -} - -func (suite *KeeperTestSuite) TestSetFidCid() { - suite.SetupSuite() - - FidCid := types.FidCid{Fid: "549", Cids: "['628', '629', '630']"} - - suite.storageKeeper.SetFidCid(suite.ctx, FidCid) - - FidCidRequest := types.QueryFidCidRequest{ - Fid: "549", - } - - res, err := suite.queryClient.FidCid(suite.ctx.Context(), &FidCidRequest) - suite.Require().NoError(err) - suite.Require().Equal(res.FidCid.Fid, FidCid.Fid) -} - -func (suite *KeeperTestSuite) TestGetFidCid() { - suite.SetupSuite() - - FidCid := types.FidCid{Fid: "549", Cids: "['628', '629', '630']"} - - suite.storageKeeper.SetFidCid(suite.ctx, FidCid) - - foundFidCid, found := suite.storageKeeper.GetFidCid(suite.ctx, "549") - - suite.Require().Equal(found, true) - suite.Require().Equal(foundFidCid.Fid, FidCid.Fid) -} - -func (suite *KeeperTestSuite) TestGetAllFidCid() { - suite.SetupSuite() - - FidCid := types.FidCid{Fid: "549", Cids: "['628', '629', '630']"} - - suite.storageKeeper.SetFidCid(suite.ctx, FidCid) - - FidCid1 := types.FidCid{Fid: "649", Cids: "['728', '729', '730']"} - - suite.storageKeeper.SetFidCid(suite.ctx, FidCid1) - - foundAllFidCid := suite.storageKeeper.GetAllFidCid(suite.ctx) - - suite.Require().Equal(foundAllFidCid[0], FidCid) - suite.Require().Equal(foundAllFidCid[1], FidCid1) -} - -func (suite *KeeperTestSuite) TestRemoveFidCid() { - suite.SetupSuite() - - FidCid := types.FidCid{Fid: "549", Cids: "['628', '629', '630']"} - suite.storageKeeper.SetFidCid(suite.ctx, FidCid) - - suite.storageKeeper.RemoveFidCid(suite.ctx, "549") - - foundFidCid, found := suite.storageKeeper.GetFidCid(suite.ctx, "549") - ghostFidCid := types.FidCid{} - suite.Require().Equal(found, false) - suite.Require().Equal(foundFidCid, ghostFidCid) -} diff --git a/x/storage/keeper/files.go b/x/storage/keeper/files.go new file mode 100644 index 000000000..47f0c79c5 --- /dev/null +++ b/x/storage/keeper/files.go @@ -0,0 +1,124 @@ +package keeper + +import ( + "github.com/cosmos/cosmos-sdk/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/jackalLabs/canine-chain/v3/x/storage/types" +) + +func (k Keeper) setFilePrimary(ctx sdk.Context, File types.UnifiedFile) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FilePrimaryKeyPrefix)) + b := k.cdc.MustMarshal(&File) + store.Set(types.FilesPrimaryKey( + File.Merkle, + File.Owner, + File.Start, + ), b) +} + +func (k Keeper) setFileSecondary(ctx sdk.Context, File types.UnifiedFile) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FileSecondaryKeyPrefix)) + b := k.cdc.MustMarshal(&File) + store.Set(types.FilesSecondaryKey( + File.Merkle, + File.Owner, + File.Start, + ), b) +} + +// SetFile set a specific File in the store from its index +func (k Keeper) SetFile(ctx sdk.Context, File types.UnifiedFile) { + k.setFilePrimary(ctx, File) + k.setFileSecondary(ctx, File) +} + +// GetFile returns a File from its index +func (k Keeper) GetFile( + ctx sdk.Context, + merkle []byte, + owner string, + start int64, +) (val types.UnifiedFile, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FilePrimaryKeyPrefix)) + + b := store.Get(types.FilesPrimaryKey( + merkle, owner, start, + )) + if b == nil { + return val, false + } + + k.cdc.MustUnmarshal(b, &val) + return val, true +} + +func (k Keeper) removeFilePrimary( + ctx sdk.Context, + merkle []byte, + owner string, + start int64, +) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FilePrimaryKeyPrefix)) + store.Delete(types.FilesPrimaryKey( + merkle, + owner, + start, + )) +} + +func (k Keeper) removeFileSecondary( + ctx sdk.Context, + merkle []byte, + owner string, + start int64, +) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FileSecondaryKeyPrefix)) + store.Delete(types.FilesSecondaryKey( + merkle, + owner, + start, + )) +} + +// RemoveFile removes a File from the store +func (k Keeper) RemoveFile( + ctx sdk.Context, + merkle []byte, + owner string, + start int64, +) { + k.removeFilePrimary(ctx, merkle, owner, start) + k.removeFileSecondary(ctx, merkle, owner, start) +} + +// GetAllFileByMerkle returns all File +func (k Keeper) GetAllFileByMerkle(ctx sdk.Context) (list []types.UnifiedFile) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FilePrimaryKeyPrefix)) + iterator := sdk.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.UnifiedFile + k.cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} + +// GetAllFileByOwner returns all File +func (k Keeper) GetAllFileByOwner(ctx sdk.Context) (list []types.UnifiedFile) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FileSecondaryKeyPrefix)) + iterator := sdk.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.UnifiedFile + k.cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} diff --git a/x/storage/keeper/msg_server_contracts_test.go b/x/storage/keeper/msg_server_contracts_test.go deleted file mode 100644 index 22f81718e..000000000 --- a/x/storage/keeper/msg_server_contracts_test.go +++ /dev/null @@ -1,683 +0,0 @@ -package keeper_test - -import ( - "crypto/sha256" - "encoding/json" - "fmt" - "io" - "time" - - sdk "github.com/cosmos/cosmos-sdk/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - testutil "github.com/jackalLabs/canine-chain/v3/testutil" - "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -const tst = "testownercid" - -func (suite *KeeperTestSuite) TestPostContracts() { - suite.SetupSuite() - msgSrvr, sKeeper, goCtx := setupMsgServer(suite) - - testAddresses, err := testutil.CreateTestAddresses("cosmos", 2) - suite.Require().NoError(err) - - creator := testAddresses[0] - buyer := testAddresses[1] - - cases := []struct { - name string - preRun func() *types.MsgPostContract - postRun func() - expResp types.MsgPostContractResponse - expErr bool - expErrMsg string - }{ - { - name: "provider_doesn't_exist", - preRun: func() *types.MsgPostContract { - return &types.MsgPostContract{ - Creator: creator, - Merkle: "1", - Signee: "1", - Filesize: "1", - Fid: "1", - } - }, - expErr: true, - expErrMsg: "can't find provider", - }, - - { - name: "invalid_provider_total_space_format", - preRun: func() *types.MsgPostContract { - // Set provider with invalid totalspace string - p := types.Providers{ - Address: creator, - Ip: "123.0.0.0", - Totalspace: "bad_content", - BurnedContracts: "", - Creator: creator, - } - sKeeper.SetProviders(suite.ctx, p) - _, found := sKeeper.GetProviders(suite.ctx, creator) - suite.Require().True(found) - return &types.MsgPostContract{ - Creator: creator, - Merkle: "1", - Signee: "1", - Filesize: "1", - Fid: "1", - } - }, - postRun: func() { - // fix the bad format for next tc - p, found := sKeeper.GetProviders(suite.ctx, creator) - suite.Require().True(found) - p.Totalspace = "100000" - sKeeper.SetProviders(suite.ctx, p) - }, - expErr: true, - expErrMsg: "error parsing total space", - }, - - { - name: "bad_filesize_format", - preRun: func() *types.MsgPostContract { - return &types.MsgPostContract{ - Creator: creator, - Merkle: "1", - Signee: "1", - Filesize: "bad_filesize", - Fid: "1", - } - }, - expErr: true, - expErrMsg: "error parsing file size", - }, - - { - name: "not_enough_provider_storage", - preRun: func() *types.MsgPostContract { - return &types.MsgPostContract{ - Creator: creator, - Merkle: "1", - Signee: "1", - Filesize: "1000001", - Fid: "1", - } - }, - expErr: true, - expErrMsg: "not enough space on provider", - }, - - { - name: "successful_post_contract", - preRun: func() *types.MsgPostContract { - suite.Require().NoError(err) - return &types.MsgPostContract{ - Creator: creator, - Merkle: "1", - Signee: buyer, - Filesize: "10000", - Fid: "123", - } - }, - expErr: false, - }, - - { - name: "cannot_duplicate_contract", - preRun: func() *types.MsgPostContract { - return &types.MsgPostContract{ - Creator: creator, - Merkle: "1", - Signee: buyer, - Filesize: "10000", - Fid: "123", - } - }, - expErr: true, - expErrMsg: "cannot post the same contract twice", - }, - } - - for _, tc := range cases { - suite.Run(tc.name, func() { - // preRun must be defined to get MsgPostContract - suite.Require().NotNil(tc.preRun) - c := tc.preRun() - _, err := msgSrvr.PostContract(goCtx, c) - if tc.expErr { - suite.Require().Error(err) - suite.Require().Contains(err.Error(), tc.expErrMsg) - } else { - suite.Require().NoError(err) - } - - if tc.postRun != nil { - tc.postRun() - } - }) - } -} - -func (suite *KeeperTestSuite) TestSignContract() { - suite.SetupSuite() - msgSrvr, sKeeper, goCtx := setupMsgServer(suite) - - testAddresses, err := testutil.CreateTestAddresses("cosmos", 2) - suite.Require().NoError(err) - - provider := testAddresses[0] - user := testAddresses[1] - coins, err := sdk.ParseCoinsNormalized("500000000ujkl") - suite.Require().NoError(err) - - address, err := sdk.AccAddressFromBech32(user) - suite.Require().NoError(err) - - err = suite.bankKeeper.SendCoinsFromModuleToAccount(suite.ctx, banktypes.ModuleName, address, coins) - suite.Require().NoError(err) - - cases := []struct { - name string - preRun func() *types.MsgSignContract - postRun func() - expResp types.MsgSignContractResponse - expErr bool - expErrMsg string - }{ - { - name: "contract_not_found", - preRun: func() *types.MsgSignContract { - return &types.MsgSignContract{ - Cid: "contract_that_doesn't_exist", - Creator: provider, - } - }, - expErr: true, - expErrMsg: "contract not found", - }, - - { - name: "invalid_permission_to_sign_contract", - preRun: func() *types.MsgSignContract { - // creating a test contract to sign - c := types.Contracts{ - Cid: "123", - Creator: provider, - Priceamt: "1", - Pricedenom: "ujkl", - Merkle: "1", - Signee: user, - Duration: "10000", - Filesize: "10000", - Fid: "123", - } - sKeeper.SetContracts(suite.ctx, c) - _, found := sKeeper.GetContracts(suite.ctx, c.Cid) - suite.Require().True(found) - return &types.MsgSignContract{ - Cid: c.Cid, - Creator: "invalid_creator", - } - }, - expErr: true, - expErrMsg: "you do not have permission to approve this contract", - }, - { - name: "not enough storage", - preRun: func() *types.MsgSignContract { - // create a test StoragePaymentInfo - spi := types.StoragePaymentInfo{ - SpaceAvailable: 200_000_000, - SpaceUsed: 200_000_000, - Address: user, - } - sKeeper.SetStoragePaymentInfo(suite.ctx, spi) - _, found := sKeeper.GetStoragePaymentInfo(suite.ctx, user) - suite.Require().True(found) - return &types.MsgSignContract{ - Cid: "123", - Creator: user, - } - }, - expErr: true, - expErrMsg: "not enough storage space", - postRun: func() { - sKeeper.RemoveStoragePaymentInfo(suite.ctx, user) - }, - }, - { - name: "expired storage subscription", - preRun: func() *types.MsgSignContract { - // create a test StoragePaymentInfo - spi := types.StoragePaymentInfo{ - SpaceAvailable: 200_000_000, - SpaceUsed: 0, - // set expiration date to yesterday - End: time.Now().AddDate(0, -1, 0), - Address: user, - } - sKeeper.SetStoragePaymentInfo(suite.ctx, spi) - _, found := sKeeper.GetStoragePaymentInfo(suite.ctx, user) - suite.Require().True(found) - return &types.MsgSignContract{ - Cid: "123", - Creator: user, - } - }, - expErr: true, - expErrMsg: "storage subscription has expired", - postRun: func() { - sKeeper.RemoveStoragePaymentInfo(suite.ctx, user) - }, - }, - { - name: "successful_contract_signed", - preRun: func() *types.MsgSignContract { - spi := types.StoragePaymentInfo{ - SpaceAvailable: 200_000_000, - SpaceUsed: 0, - End: time.Now().AddDate(0, 10, 0), - Address: user, - } - sKeeper.SetStoragePaymentInfo(suite.ctx, spi) - _, found := sKeeper.GetStoragePaymentInfo(suite.ctx, user) - suite.Require().True(found) - return &types.MsgSignContract{ - Cid: "123", - Creator: user, - } - }, - expErr: false, - }, - { - name: "pay_once", - preRun: func() *types.MsgSignContract { - // creating a test contract to sign - c := types.Contracts{ - Cid: "456", - Creator: provider, - Priceamt: "1", - Pricedenom: "ujkl", - Merkle: "1", - Signee: user, - Duration: "10000", - Filesize: "10000", - Fid: "123", - } - sKeeper.SetContracts(suite.ctx, c) - _, found := sKeeper.GetContracts(suite.ctx, c.Cid) - suite.Require().True(found) - return &types.MsgSignContract{ - Cid: "456", - Creator: user, - PayOnce: true, - } - }, - expErr: false, - }, - } - - for _, tc := range cases { - suite.Run(tc.name, func() { - // preRun must be defined to get MsgPostContract - suite.Require().NotNil(tc.preRun) - c := tc.preRun() - _, err := msgSrvr.SignContract(goCtx, c) - if tc.expErr { - suite.Require().Error(err) - suite.Require().Contains(err.Error(), tc.expErrMsg) - } else { - suite.Require().NoError(err) - } - - if tc.postRun != nil { - tc.postRun() - } - }) - } -} - -func (suite *KeeperTestSuite) TestCancelContract() { - suite.SetupSuite() - msgSrvr, sKeeper, goCtx := setupMsgServer(suite) - - testAddresses, err := testutil.CreateTestAddresses("cosmos", 1) - suite.Require().NoError(err) - user := testAddresses[0] - - suite.storageKeeper.SetStoragePaymentInfo(suite.ctx, types.StoragePaymentInfo{ - Start: time.Now(), - End: time.Now().AddDate(1, 0, 0), - SpaceAvailable: 1000000000, - SpaceUsed: 0, - Address: user, - }) - - cases := []struct { - name string - preRun func() *types.MsgCancelContract - postRun func() - expResp types.MsgCancelContractResponse - expErr bool - expErrMsg string - }{ - { - name: "active_deal_not_found", - preRun: func() *types.MsgCancelContract { - return &types.MsgCancelContract{ - Creator: user, - Cid: "foo", - } - }, - expErr: true, - expErrMsg: "cid does not exist", - }, - - { - name: "invalid_deal_owner", - preRun: func() *types.MsgCancelContract { - dcid := tst - h := sha256.New() - _, err := io.WriteString(h, dcid) - suite.Require().NoError(err) - hashName := h.Sum(nil) - - dcid, err = keeper.MakeCid(hashName) - suite.Require().NoError(err) - - d := types.ActiveDeals{ - Cid: dcid, - Signee: user, - Creator: user, - Filesize: "10", - } - sKeeper.SetActiveDeals(suite.ctx, d) - - for i := 0; i < 2; i++ { - h := sha256.New() - _, err := io.WriteString(h, fmt.Sprintf("%s%d", d.Cid, i)) - suite.Require().NoError(err) - hashName := h.Sum(nil) - - scid, err := keeper.MakeCid(hashName) - suite.Require().NoError(err) - - k := types.ActiveDeals{ - Cid: scid, - Signee: user, - Creator: user, - Filesize: "10", - } - sKeeper.SetActiveDeals(suite.ctx, k) - } - - _, found := sKeeper.GetActiveDeals(suite.ctx, d.Cid) - suite.Require().True(found) - return &types.MsgCancelContract{ - Creator: "foo", - Cid: d.Cid, - } - }, - expErr: true, - expErrMsg: fmt.Sprintf("cannot cancel a contract that isn't yours. foo is not %s: unauthorized", user), - }, - - { - name: "successfully_cancelled_contract", - preRun: func() *types.MsgCancelContract { - dcid := tst - h := sha256.New() - _, err := io.WriteString(h, dcid) - suite.Require().NoError(err) - hashName := h.Sum(nil) - - dcid, err = keeper.MakeCid(hashName) - suite.Require().NoError(err) - - cids := []string{dcid} - - d := types.ActiveDeals{ - Cid: dcid, - Creator: user, - Signee: user, - Fid: "jklf1j3p63s42w7ywaczlju626st55mzu5z39w2rx9x", - Filesize: "10", - } - sKeeper.SetActiveDeals(suite.ctx, d) - - b, err := json.Marshal(cids) - suite.Require().NoError(err) - - ftc := types.FidCid{ - Fid: "jklf1j3p63s42w7ywaczlju626st55mzu5z39w2rx9x", - Cids: string(b), - } - sKeeper.SetFidCid(suite.ctx, ftc) - - suite.Require().NoError(err) - - return &types.MsgCancelContract{ - Creator: user, - Cid: d.Cid, - } - }, - expErr: false, - }, - - { - name: "successfully_cancelled_contract_with_strays", - preRun: func() *types.MsgCancelContract { - dcid := tst - h := sha256.New() - _, err := io.WriteString(h, dcid) - suite.Require().NoError(err) - hashName := h.Sum(nil) - - dcid, err = keeper.MakeCid(hashName) - suite.Require().NoError(err) - - cids := []string{dcid} - - d := types.Strays{ - Cid: dcid, - Fid: "jklf1j3p63s42w7ywaczlju626st55mzu5z39w2rx9x", - Signee: user, - Filesize: "10", - } - sKeeper.SetStrays(suite.ctx, d) - - b, err := json.Marshal(cids) - suite.Require().NoError(err) - - ftc := types.FidCid{ - Fid: "jklf1j3p63s42w7ywaczlju626st55mzu5z39w2rx9x", - Cids: string(b), - } - sKeeper.SetFidCid(suite.ctx, ftc) - - suite.Require().NoError(err) - - return &types.MsgCancelContract{ - Creator: user, - Cid: d.Cid, - } - }, - expErr: false, - }, - } - - for _, tc := range cases { - suite.Run(tc.name, func() { - // preRun must be defined to get MsgPostContract - suite.Require().NotNil(tc.preRun) - c := tc.preRun() - _, err := msgSrvr.CancelContract(goCtx, c) - - if tc.expErr { - suite.Require().Error(err) - suite.Require().Contains(err.Error(), tc.expErrMsg) - } else { - suite.Require().NoError(err) - fidCid, found := suite.storageKeeper.GetFidCid(suite.ctx, "jklf1j3p63s42w7ywaczlju626st55mzu5z39w2rx9x") - suite.Require().True(found) - var cids []string - err := json.Unmarshal([]byte(fidCid.Cids), &cids) // getting all cids from the existing fid_cid - if err != nil { - suite.Require().NoError(err) - } - suite.Require().Equal(0, len(cids)) - } - - if tc.postRun != nil { - tc.postRun() - } - }) - } -} - -func (suite *KeeperTestSuite) TestClaimStray() { - suite.SetupSuite() - msgSrvr, sKeeper, goCtx := setupMsgServer(suite) - - testAddresses, err := testutil.CreateTestAddresses("cosmos", 10) - suite.Require().NoError(err) - - provider := testAddresses[0] - provider2 := testAddresses[1] - - cases := []struct { - name string - preRun func() *types.MsgClaimStray - postRun func() - expResp types.MsgClaimStrayResponse - expErr bool - expErrMsg string - }{ - { - name: "stray_not_found", - preRun: func() *types.MsgClaimStray { - return &types.MsgClaimStray{ - Creator: provider, - Cid: "foo", - ForAddress: provider, - } - }, - expErr: true, - expErrMsg: "stray contract either no longer is stray, or has been removed by the user", - }, - - { - name: "not_a_provider", - preRun: func() *types.MsgClaimStray { - s := types.Strays{ - Cid: "foo", - } - sKeeper.SetStrays(suite.ctx, s) - return &types.MsgClaimStray{ - Cid: s.Cid, - Creator: provider, - ForAddress: provider, - } - }, - expErr: true, - expErrMsg: "not a provider", - }, - - { - name: "cannot_claim_your_own_stray", - preRun: func() *types.MsgClaimStray { - s, found := sKeeper.GetStrays(suite.ctx, "foo") - suite.Require().True(found) - s.Fid = "some_fid" - sKeeper.SetStrays(suite.ctx, s) - p := types.Providers{ - Ip: "0.0.0.0", - Address: provider, - Creator: provider, - } - sKeeper.SetProviders(suite.ctx, p) - ad := types.ActiveDeals{ - Fid: s.Fid, - Provider: p.Address, - } - sKeeper.SetActiveDeals(suite.ctx, ad) - return &types.MsgClaimStray{ - Cid: s.Cid, - Creator: provider, - ForAddress: provider, - } - }, - expErr: true, - expErrMsg: "cannot claim a stray you own.", - }, - - { - name: "successfully_claimed_stray", - preRun: func() *types.MsgClaimStray { - p := types.Providers{ - Ip: "123.0.0.0", - Address: provider2, - Creator: provider2, - } - s := types.Strays{ - Cid: "foo", - } - sKeeper.SetStrays(suite.ctx, s) - sKeeper.SetProviders(suite.ctx, p) - return &types.MsgClaimStray{ - Cid: "foo", - Creator: provider2, - ForAddress: provider2, - } - }, - expErr: false, - }, - { - name: "successfully_claimed_stray_with_auth_claim", - - preRun: func() *types.MsgClaimStray { - p := types.Providers{ - Ip: "192.168.0.40", - Address: testAddresses[5], - Creator: testAddresses[5], - AuthClaimers: []string{testAddresses[6]}, - } - s := types.Strays{ - Cid: "quoz", - } - sKeeper.SetStrays(suite.ctx, s) - sKeeper.SetProviders(suite.ctx, p) - return &types.MsgClaimStray{ - Cid: "quoz", - Creator: testAddresses[6], - ForAddress: testAddresses[5], - } - }, - expErr: false, - }, - } - - for _, tc := range cases { - suite.Run(tc.name, func() { - // preRun must be defined to get MsgPostContract - suite.Require().NotNil(tc.preRun) - c := tc.preRun() - _, err := msgSrvr.ClaimStray(goCtx, c) - if tc.expErr { - suite.Require().Error(err) - suite.Require().Contains(err.Error(), tc.expErrMsg) - } else { - suite.Require().NoError(err) - } - - if tc.postRun != nil { - tc.postRun() - } - }) - } -} diff --git a/x/storage/keeper/msg_server_postproof.go b/x/storage/keeper/msg_server_postproof.go index 199c281b9..310b6c1a4 100644 --- a/x/storage/keeper/msg_server_postproof.go +++ b/x/storage/keeper/msg_server_postproof.go @@ -2,85 +2,37 @@ package keeper import ( "context" - "crypto/sha256" - "encoding/hex" - "encoding/json" "fmt" - "io" - "strings" - sdk "github.com/cosmos/cosmos-sdk/types" - merkletree "github.com/wealdtech/go-merkletree" - "github.com/wealdtech/go-merkletree/sha3" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func VerifyDeal(merkle string, hashList string, num int64, item string) bool { - h := sha256.New() - _, err := io.WriteString(h, fmt.Sprintf("%d%s", num, item)) - if err != nil { - return false - } - hashName := h.Sum(nil) - - var proof merkletree.Proof // unmarshal proof - err = json.Unmarshal([]byte(hashList), &proof) - if err != nil { - return false - } - - m, err := hex.DecodeString(merkle) - if err != nil { - return false - } - verified, err := merkletree.VerifyProofUsing(hashName, false, &proof, [][]byte{m}, sha3.New512()) - if err != nil { - return false - } - - return verified -} - -func (k msgServer) PostProof(goCtx context.Context, msg *types.MsgPostproof) (*types.MsgPostproofResponse, error) { +func (k msgServer) PostProof(goCtx context.Context, msg *types.MsgPostProof) (*types.MsgPostProofResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - meter := ctx.GasMeter() - usedGas := meter.GasConsumed() - hashes := strings.Split(msg.Hashlist, ",") + proofSize := k.GetParams(ctx).ChunkSize - contract, found := k.GetActiveDeals(ctx, msg.Cid) + file, found := k.GetFile(ctx, msg.Merkle, msg.Owner, msg.Start) if !found { - ctx.Logger().Debug("%s, %s\n", "Contract not found", msg.Cid) - return &types.MsgPostproofResponse{Success: false, ErrorMessage: fmt.Sprintf("contract not found: %s", msg.Cid)}, nil + s := fmt.Sprintf("contract not found: %x/%s/%d", msg.Merkle, msg.Owner, msg.Start) + ctx.Logger().Debug(s) + return &types.MsgPostProofResponse{Success: false, ErrorMessage: s}, nil } - ctx.Logger().Debug("Contract that was found: \n%v\n", contract) + prover := msg.Creator - nn, ok := sdk.NewIntFromString(contract.Blocktoprove) - if !ok { - return &types.MsgPostproofResponse{Success: false, ErrorMessage: "cannot parse block to prove"}, nil + proof, err := file.GetProver(ctx, k, prover) + if err != nil { + return &types.MsgPostProofResponse{Success: false, ErrorMessage: err.Error()}, nil } - num := nn.Int64() - - ctx.Logger().Debug("%v\n", hashes) - verified := VerifyDeal(contract.Merkle, msg.Hashlist, num, msg.Item) - - if !verified { + err = file.Prove(ctx, k, msg.Creator, msg.HashList, proof.ChunkToProve, msg.Item, proofSize) + if err != nil { ctx.Logger().Debug("%s\n", "Cannot verify") - return &types.MsgPostproofResponse{Success: false, ErrorMessage: "cannot verify proof"}, nil + return &types.MsgPostProofResponse{Success: false, ErrorMessage: err.Error()}, nil } - if contract.Proofverified == "true" { - meter.RefundGas(meter.GasConsumed()-usedGas, "successful proof refund") - return &types.MsgPostproofResponse{Success: false, ErrorMessage: "proof already verified"}, nil - } - - contract.Proofverified = "true" - k.SetActiveDeals(ctx, contract) - - meter.RefundGas(meter.GasConsumed()-usedGas, "successful proof refund") + k.SetFile(ctx, file) - return &types.MsgPostproofResponse{Success: true, ErrorMessage: ""}, nil + return &types.MsgPostProofResponse{Success: true, ErrorMessage: ""}, nil } diff --git a/x/storage/keeper/proofs.go b/x/storage/keeper/proofs.go new file mode 100644 index 000000000..f51a9101a --- /dev/null +++ b/x/storage/keeper/proofs.go @@ -0,0 +1,97 @@ +package keeper + +import ( + "github.com/cosmos/cosmos-sdk/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/jackalLabs/canine-chain/v3/x/storage/types" +) + +// SetProof set a specific proof in the store from its index +func (k Keeper) SetProof(ctx sdk.Context, Proof types.FileProof) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProofKeyPrefix)) + b := k.cdc.MustMarshal(&Proof) + store.Set(types.ProofKey( + Proof.Prover, + Proof.Merkle, + Proof.Owner, + Proof.Start, + ), b) +} + +// GetProof returns a Proof from its index +func (k Keeper) GetProof( + ctx sdk.Context, + prover string, + merkle []byte, + owner string, + start int64, +) (val types.FileProof, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProofKeyPrefix)) + + b := store.Get(types.ProofKey( + prover, + merkle, owner, start, + )) + if b == nil { + return val, false + } + + k.cdc.MustUnmarshal(b, &val) + return val, true +} + +// GetProofWithBuiltKey returns a Proof from its index using an already built key (for example from the internal file proof list) +func (k Keeper) GetProofWithBuiltKey( + ctx sdk.Context, + key []byte, +) (val types.FileProof, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProofKeyPrefix)) + + b := store.Get(key) + if b == nil { + return val, false + } + + k.cdc.MustUnmarshal(b, &val) + return val, true +} + +func (k Keeper) RemoveProof( + ctx sdk.Context, + prover string, + merkle []byte, + owner string, + start int64, +) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProofKeyPrefix)) + store.Delete(types.ProofKey( + prover, + merkle, + owner, + start, + )) +} + +func (k Keeper) RemoveProofWithBuiltKey( + ctx sdk.Context, + key []byte, +) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProofKeyPrefix)) + store.Delete(key) +} + +// GetAllProofs returns all File +func (k Keeper) GetAllProofs(ctx sdk.Context) (list []types.FileProof) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProofKeyPrefix)) + iterator := sdk.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.FileProof + k.cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} diff --git a/x/storage/types/active_deals.pb.go b/x/storage/types/active_deals.pb.go index b7e53f82c..a0a0e2dfa 100644 --- a/x/storage/types/active_deals.pb.go +++ b/x/storage/types/active_deals.pb.go @@ -22,7 +22,7 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type ActiveDeals struct { +type LegacyActiveDeals struct { Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` Signee string `protobuf:"bytes,2,opt,name=signee,proto3" json:"signee,omitempty"` Provider string `protobuf:"bytes,3,opt,name=provider,proto3" json:"provider,omitempty"` @@ -37,18 +37,18 @@ type ActiveDeals struct { Fid string `protobuf:"bytes,12,opt,name=fid,proto3" json:"fid,omitempty"` } -func (m *ActiveDeals) Reset() { *m = ActiveDeals{} } -func (m *ActiveDeals) String() string { return proto.CompactTextString(m) } -func (*ActiveDeals) ProtoMessage() {} -func (*ActiveDeals) Descriptor() ([]byte, []int) { +func (m *LegacyActiveDeals) Reset() { *m = LegacyActiveDeals{} } +func (m *LegacyActiveDeals) String() string { return proto.CompactTextString(m) } +func (*LegacyActiveDeals) ProtoMessage() {} +func (*LegacyActiveDeals) Descriptor() ([]byte, []int) { return fileDescriptor_71fa39f1fdaaaa6d, []int{0} } -func (m *ActiveDeals) XXX_Unmarshal(b []byte) error { +func (m *LegacyActiveDeals) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *ActiveDeals) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *LegacyActiveDeals) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_ActiveDeals.Marshal(b, m, deterministic) + return xxx_messageInfo_LegacyActiveDeals.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -58,118 +58,127 @@ func (m *ActiveDeals) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) return b[:n], nil } } -func (m *ActiveDeals) XXX_Merge(src proto.Message) { - xxx_messageInfo_ActiveDeals.Merge(m, src) +func (m *LegacyActiveDeals) XXX_Merge(src proto.Message) { + xxx_messageInfo_LegacyActiveDeals.Merge(m, src) } -func (m *ActiveDeals) XXX_Size() int { +func (m *LegacyActiveDeals) XXX_Size() int { return m.Size() } -func (m *ActiveDeals) XXX_DiscardUnknown() { - xxx_messageInfo_ActiveDeals.DiscardUnknown(m) +func (m *LegacyActiveDeals) XXX_DiscardUnknown() { + xxx_messageInfo_LegacyActiveDeals.DiscardUnknown(m) } -var xxx_messageInfo_ActiveDeals proto.InternalMessageInfo +var xxx_messageInfo_LegacyActiveDeals proto.InternalMessageInfo -func (m *ActiveDeals) GetCid() string { +func (m *LegacyActiveDeals) GetCid() string { if m != nil { return m.Cid } return "" } -func (m *ActiveDeals) GetSignee() string { +func (m *LegacyActiveDeals) GetSignee() string { if m != nil { return m.Signee } return "" } -func (m *ActiveDeals) GetProvider() string { +func (m *LegacyActiveDeals) GetProvider() string { if m != nil { return m.Provider } return "" } -func (m *ActiveDeals) GetStartblock() string { +func (m *LegacyActiveDeals) GetStartblock() string { if m != nil { return m.Startblock } return "" } -func (m *ActiveDeals) GetEndblock() string { +func (m *LegacyActiveDeals) GetEndblock() string { if m != nil { return m.Endblock } return "" } -func (m *ActiveDeals) GetFilesize() string { +func (m *LegacyActiveDeals) GetFilesize() string { if m != nil { return m.Filesize } return "" } -func (m *ActiveDeals) GetProofverified() string { +func (m *LegacyActiveDeals) GetProofverified() string { if m != nil { return m.Proofverified } return "" } -func (m *ActiveDeals) GetProofsmissed() string { +func (m *LegacyActiveDeals) GetProofsmissed() string { if m != nil { return m.Proofsmissed } return "" } -func (m *ActiveDeals) GetBlocktoprove() string { +func (m *LegacyActiveDeals) GetBlocktoprove() string { if m != nil { return m.Blocktoprove } return "" } -func (m *ActiveDeals) GetCreator() string { +func (m *LegacyActiveDeals) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *ActiveDeals) GetMerkle() string { +func (m *LegacyActiveDeals) GetMerkle() string { if m != nil { return m.Merkle } return "" } -func (m *ActiveDeals) GetFid() string { +func (m *LegacyActiveDeals) GetFid() string { if m != nil { return m.Fid } return "" } -type UFID struct { - Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` +type UnifiedFile struct { + Merkle []byte `protobuf:"bytes,1,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,3,opt,name=start,proto3" json:"start,omitempty"` + Expires int64 `protobuf:"varint,4,opt,name=expires,proto3" json:"expires,omitempty"` + FileSize int64 `protobuf:"varint,5,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"` + ProofInterval int64 `protobuf:"varint,6,opt,name=proof_interval,json=proofInterval,proto3" json:"proof_interval,omitempty"` + ProofType int64 `protobuf:"varint,7,opt,name=proof_type,json=proofType,proto3" json:"proof_type,omitempty"` + Proofs []string `protobuf:"bytes,8,rep,name=proofs,proto3" json:"proofs,omitempty"` + MaxProofs int64 `protobuf:"varint,9,opt,name=max_proofs,json=maxProofs,proto3" json:"max_proofs,omitempty"` + Note string `protobuf:"bytes,10,opt,name=note,proto3" json:"note,omitempty"` } -func (m *UFID) Reset() { *m = UFID{} } -func (m *UFID) String() string { return proto.CompactTextString(m) } -func (*UFID) ProtoMessage() {} -func (*UFID) Descriptor() ([]byte, []int) { +func (m *UnifiedFile) Reset() { *m = UnifiedFile{} } +func (m *UnifiedFile) String() string { return proto.CompactTextString(m) } +func (*UnifiedFile) ProtoMessage() {} +func (*UnifiedFile) Descriptor() ([]byte, []int) { return fileDescriptor_71fa39f1fdaaaa6d, []int{1} } -func (m *UFID) XXX_Unmarshal(b []byte) error { +func (m *UnifiedFile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *UFID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *UnifiedFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_UFID.Marshal(b, m, deterministic) + return xxx_messageInfo_UnifiedFile.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -179,136 +188,102 @@ func (m *UFID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } -func (m *UFID) XXX_Merge(src proto.Message) { - xxx_messageInfo_UFID.Merge(m, src) +func (m *UnifiedFile) XXX_Merge(src proto.Message) { + xxx_messageInfo_UnifiedFile.Merge(m, src) } -func (m *UFID) XXX_Size() int { +func (m *UnifiedFile) XXX_Size() int { return m.Size() } -func (m *UFID) XXX_DiscardUnknown() { - xxx_messageInfo_UFID.DiscardUnknown(m) +func (m *UnifiedFile) XXX_DiscardUnknown() { + xxx_messageInfo_UnifiedFile.DiscardUnknown(m) } -var xxx_messageInfo_UFID proto.InternalMessageInfo +var xxx_messageInfo_UnifiedFile proto.InternalMessageInfo -func (m *UFID) GetHash() []byte { +func (m *UnifiedFile) GetMerkle() []byte { if m != nil { - return m.Hash + return m.Merkle } return nil } -type UniversalFile struct { - Id *UFID `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Proofs map[string]*FileProof `protobuf:"bytes,2,rep,name=proofs,proto3" json:"proofs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - FileSize int64 `protobuf:"varint,3,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"` - Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` - Expires int64 `protobuf:"varint,5,opt,name=expires,proto3" json:"expires,omitempty"` - Owner string `protobuf:"bytes,6,opt,name=owner,proto3" json:"owner,omitempty"` - ProofInterval int64 `protobuf:"varint,7,opt,name=proof_interval,json=proofInterval,proto3" json:"proof_interval,omitempty"` - Merkle []byte `protobuf:"bytes,8,opt,name=merkle,proto3" json:"merkle,omitempty"` -} - -func (m *UniversalFile) Reset() { *m = UniversalFile{} } -func (m *UniversalFile) String() string { return proto.CompactTextString(m) } -func (*UniversalFile) ProtoMessage() {} -func (*UniversalFile) Descriptor() ([]byte, []int) { - return fileDescriptor_71fa39f1fdaaaa6d, []int{2} -} -func (m *UniversalFile) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *UniversalFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_UniversalFile.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 *UnifiedFile) GetOwner() string { + if m != nil { + return m.Owner } + return "" } -func (m *UniversalFile) XXX_Merge(src proto.Message) { - xxx_messageInfo_UniversalFile.Merge(m, src) -} -func (m *UniversalFile) XXX_Size() int { - return m.Size() -} -func (m *UniversalFile) XXX_DiscardUnknown() { - xxx_messageInfo_UniversalFile.DiscardUnknown(m) -} - -var xxx_messageInfo_UniversalFile proto.InternalMessageInfo -func (m *UniversalFile) GetId() *UFID { +func (m *UnifiedFile) GetStart() int64 { if m != nil { - return m.Id + return m.Start } - return nil + return 0 } -func (m *UniversalFile) GetProofs() map[string]*FileProof { +func (m *UnifiedFile) GetExpires() int64 { if m != nil { - return m.Proofs + return m.Expires } - return nil + return 0 } -func (m *UniversalFile) GetFileSize() int64 { +func (m *UnifiedFile) GetFileSize() int64 { if m != nil { return m.FileSize } return 0 } -func (m *UniversalFile) GetStart() int64 { +func (m *UnifiedFile) GetProofInterval() int64 { if m != nil { - return m.Start + return m.ProofInterval } return 0 } -func (m *UniversalFile) GetExpires() int64 { +func (m *UnifiedFile) GetProofType() int64 { if m != nil { - return m.Expires + return m.ProofType } return 0 } -func (m *UniversalFile) GetOwner() string { +func (m *UnifiedFile) GetProofs() []string { if m != nil { - return m.Owner + return m.Proofs } - return "" + return nil } -func (m *UniversalFile) GetProofInterval() int64 { +func (m *UnifiedFile) GetMaxProofs() int64 { if m != nil { - return m.ProofInterval + return m.MaxProofs } return 0 } -func (m *UniversalFile) GetMerkle() []byte { +func (m *UnifiedFile) GetNote() string { if m != nil { - return m.Merkle + return m.Note } - return nil + return "" } type FileProof struct { Prover string `protobuf:"bytes,1,opt,name=prover,proto3" json:"prover,omitempty"` - LastProven int64 `protobuf:"varint,2,opt,name=last_proven,json=lastProven,proto3" json:"last_proven,omitempty"` - ChunkToProve int64 `protobuf:"varint,3,opt,name=chunk_to_prove,json=chunkToProve,proto3" json:"chunk_to_prove,omitempty"` + Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` + LastProven int64 `protobuf:"varint,5,opt,name=last_proven,json=lastProven,proto3" json:"last_proven,omitempty"` + ChunkToProve int64 `protobuf:"varint,6,opt,name=chunk_to_prove,json=chunkToProve,proto3" json:"chunk_to_prove,omitempty"` } func (m *FileProof) Reset() { *m = FileProof{} } func (m *FileProof) String() string { return proto.CompactTextString(m) } func (*FileProof) ProtoMessage() {} func (*FileProof) Descriptor() ([]byte, []int) { - return fileDescriptor_71fa39f1fdaaaa6d, []int{3} + return fileDescriptor_71fa39f1fdaaaa6d, []int{2} } func (m *FileProof) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -344,6 +319,27 @@ func (m *FileProof) GetProver() string { return "" } +func (m *FileProof) GetMerkle() []byte { + if m != nil { + return m.Merkle + } + return nil +} + +func (m *FileProof) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *FileProof) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + func (m *FileProof) GetLastProven() int64 { if m != nil { return m.LastProven @@ -359,10 +355,8 @@ func (m *FileProof) GetChunkToProve() int64 { } func init() { - proto.RegisterType((*ActiveDeals)(nil), "canine_chain.storage.ActiveDeals") - proto.RegisterType((*UFID)(nil), "canine_chain.storage.UFID") - proto.RegisterType((*UniversalFile)(nil), "canine_chain.storage.UniversalFile") - proto.RegisterMapType((map[string]*FileProof)(nil), "canine_chain.storage.UniversalFile.ProofsEntry") + proto.RegisterType((*LegacyActiveDeals)(nil), "canine_chain.storage.LegacyActiveDeals") + proto.RegisterType((*UnifiedFile)(nil), "canine_chain.storage.UnifiedFile") proto.RegisterType((*FileProof)(nil), "canine_chain.storage.FileProof") } @@ -371,46 +365,43 @@ func init() { } var fileDescriptor_71fa39f1fdaaaa6d = []byte{ - // 575 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x93, 0x41, 0x6b, 0xdb, 0x3e, - 0x18, 0xc6, 0x9b, 0xb8, 0x4d, 0x9b, 0xd7, 0x69, 0xf9, 0x23, 0xca, 0x1f, 0x91, 0x81, 0x5b, 0x42, - 0xc7, 0xca, 0x60, 0x09, 0x64, 0x0c, 0xc6, 0x6e, 0x1b, 0x5d, 0x47, 0xa1, 0x87, 0xe2, 0xad, 0x97, - 0x5e, 0x8c, 0x62, 0xbf, 0x69, 0x54, 0xbb, 0x56, 0x90, 0x54, 0xaf, 0xd9, 0x71, 0x9f, 0x60, 0x1f, - 0x6b, 0xc7, 0x1e, 0x77, 0x19, 0x8c, 0xf6, 0x8b, 0x0c, 0xbd, 0x72, 0x82, 0x0b, 0xdd, 0xcd, 0xcf, - 0xf3, 0x3e, 0xb2, 0xe4, 0xdf, 0x63, 0xc1, 0x8b, 0x54, 0x94, 0xb2, 0xc4, 0x24, 0x9d, 0x09, 0x59, - 0x8e, 0x8c, 0x55, 0x5a, 0x5c, 0xe2, 0x48, 0xa4, 0x56, 0x56, 0x98, 0x64, 0x28, 0x0a, 0x33, 0x9c, - 0x6b, 0x65, 0x15, 0xdb, 0x6d, 0x06, 0x87, 0x75, 0x70, 0xf0, 0xbb, 0x0d, 0xe1, 0x7b, 0x0a, 0x1f, - 0xb9, 0x2c, 0xfb, 0x0f, 0x82, 0x54, 0x66, 0xbc, 0xb5, 0xdf, 0x3a, 0xec, 0xc6, 0xee, 0x91, 0xfd, - 0x0f, 0x1d, 0x23, 0x2f, 0x4b, 0x44, 0xde, 0x26, 0xb3, 0x56, 0xac, 0x0f, 0x5b, 0x73, 0xad, 0x2a, - 0x99, 0xa1, 0xe6, 0x01, 0x4d, 0x56, 0x9a, 0x45, 0x00, 0xc6, 0x0a, 0x6d, 0x27, 0x85, 0x4a, 0x73, - 0xbe, 0x4e, 0xd3, 0x86, 0xe3, 0xd6, 0x62, 0x99, 0xf9, 0xe9, 0x86, 0x5f, 0xbb, 0xd4, 0x6e, 0x36, - 0x95, 0x05, 0x1a, 0xf9, 0x0d, 0x79, 0xc7, 0xcf, 0x96, 0x9a, 0x1d, 0xc0, 0xf6, 0x5c, 0x2b, 0x35, - 0xad, 0x50, 0xcb, 0xa9, 0xc4, 0x8c, 0x6f, 0x52, 0xe0, 0xb1, 0xc9, 0x06, 0xd0, 0x23, 0xc3, 0x5c, - 0x4b, 0x63, 0x30, 0xe3, 0x5b, 0x14, 0x7a, 0xe4, 0xb9, 0x0c, 0x6d, 0x67, 0x95, 0x3b, 0x34, 0xf2, - 0xae, 0xcf, 0x34, 0x3d, 0xc6, 0x61, 0x33, 0xd5, 0x28, 0xac, 0xd2, 0x1c, 0x68, 0xbc, 0x94, 0x8e, - 0xc9, 0x35, 0xea, 0xbc, 0x40, 0x1e, 0x7a, 0x26, 0x5e, 0x39, 0x7a, 0x53, 0x99, 0xf1, 0x9e, 0xa7, - 0x37, 0x95, 0xd9, 0xa0, 0x0f, 0xeb, 0xe7, 0xc7, 0x27, 0x47, 0x8c, 0xc1, 0xfa, 0x4c, 0x98, 0x19, - 0x81, 0xed, 0xc5, 0xf4, 0x3c, 0xf8, 0x1e, 0xc0, 0xf6, 0x79, 0x29, 0x2b, 0xd4, 0x46, 0x14, 0xc7, - 0xb2, 0x40, 0xf6, 0x12, 0xda, 0x35, 0xfc, 0x70, 0xdc, 0x1f, 0x3e, 0x55, 0xd8, 0xd0, 0xbd, 0x2d, - 0x6e, 0xcb, 0x8c, 0x7d, 0x82, 0x8e, 0xff, 0x22, 0xde, 0xde, 0x0f, 0x0e, 0xc3, 0xf1, 0xe8, 0x1f, - 0xf9, 0xe6, 0x06, 0xc3, 0x33, 0x5a, 0xf1, 0xb1, 0xb4, 0x7a, 0x11, 0xd7, 0xcb, 0xd9, 0x33, 0xe8, - 0x3a, 0xc0, 0x09, 0x11, 0x77, 0x4d, 0x06, 0x9e, 0xf8, 0x67, 0x47, 0x7c, 0x17, 0x36, 0xa8, 0x37, - 0x2a, 0x31, 0x88, 0xbd, 0x70, 0x64, 0xf0, 0x76, 0x2e, 0x35, 0x1a, 0xaa, 0x2f, 0x88, 0x97, 0xd2, - 0xe5, 0xd5, 0xd7, 0x12, 0x75, 0x5d, 0x9d, 0x17, 0xec, 0x39, 0xec, 0xd0, 0x66, 0x89, 0x2c, 0x2d, - 0xea, 0x4a, 0x14, 0x54, 0x5c, 0x50, 0x17, 0x77, 0x52, 0x9b, 0x0d, 0xac, 0x5b, 0x84, 0xa9, 0x56, - 0xfd, 0x0b, 0x08, 0x1b, 0x07, 0x77, 0x94, 0x73, 0x5c, 0x2c, 0xff, 0xd1, 0x1c, 0x17, 0xec, 0x0d, - 0x6c, 0x54, 0xa2, 0xb8, 0xf1, 0xbf, 0x68, 0x38, 0xde, 0x7b, 0x1a, 0x85, 0x23, 0x40, 0xef, 0x89, - 0x7d, 0xfa, 0x5d, 0xfb, 0x6d, 0x6b, 0x70, 0x05, 0xdd, 0x95, 0xef, 0x0e, 0x40, 0xd5, 0xeb, 0xfa, - 0xe5, 0xb5, 0x62, 0x7b, 0x10, 0x16, 0xc2, 0xd8, 0x84, 0x64, 0x49, 0xbb, 0x04, 0x31, 0x38, 0xeb, - 0x8c, 0x1c, 0x76, 0x00, 0x3b, 0xe9, 0xec, 0xa6, 0xcc, 0x13, 0xab, 0x7c, 0xa8, 0x06, 0xd9, 0x23, - 0xf7, 0x8b, 0xa2, 0xd8, 0x87, 0xd3, 0x9f, 0xf7, 0x51, 0xeb, 0xee, 0x3e, 0x6a, 0xfd, 0xb9, 0x8f, - 0x5a, 0x3f, 0x1e, 0xa2, 0xb5, 0xbb, 0x87, 0x68, 0xed, 0xd7, 0x43, 0xb4, 0x76, 0x31, 0xbe, 0x94, - 0x76, 0x76, 0x33, 0x19, 0xa6, 0xea, 0x7a, 0x74, 0x25, 0xd2, 0x5c, 0x14, 0xa7, 0x62, 0x62, 0x46, - 0xfe, 0x33, 0x5e, 0xf9, 0xbb, 0x7d, 0xbb, 0xba, 0xdd, 0x76, 0x31, 0x47, 0x33, 0xe9, 0xd0, 0xbd, - 0x7e, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0x96, 0x48, 0x04, 0xdd, 0x02, 0x04, 0x00, 0x00, -} - -func (m *ActiveDeals) Marshal() (dAtA []byte, err error) { + // 527 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x93, 0xcf, 0x6e, 0xd3, 0x30, + 0x1c, 0xc7, 0x97, 0x66, 0xeb, 0x9a, 0x5f, 0xcb, 0x04, 0xd6, 0x84, 0x2c, 0x10, 0x61, 0xaa, 0x86, + 0xe0, 0x42, 0x2b, 0xc1, 0x13, 0x80, 0x10, 0x12, 0x52, 0x0f, 0x53, 0x19, 0x17, 0x2e, 0x91, 0x9b, + 0xfc, 0xda, 0x9a, 0xa6, 0x71, 0x64, 0x7b, 0xa5, 0xe5, 0x29, 0xb8, 0xf2, 0x12, 0x3c, 0x07, 0xc7, + 0x1d, 0x39, 0xa2, 0xf6, 0x45, 0x90, 0x7f, 0x76, 0xab, 0x4c, 0xda, 0x2d, 0xdf, 0x7f, 0xa9, 0xf3, + 0x51, 0x0d, 0x2f, 0x73, 0x51, 0xc9, 0x0a, 0xb3, 0x7c, 0x2e, 0x64, 0x35, 0x34, 0x56, 0x69, 0x31, + 0xc3, 0xa1, 0xc8, 0xad, 0x5c, 0x61, 0x56, 0xa0, 0x28, 0xcd, 0xa0, 0xd6, 0xca, 0x2a, 0x76, 0xde, + 0x2c, 0x0e, 0x42, 0xb1, 0xbf, 0x6b, 0xc1, 0xa3, 0x11, 0xce, 0x44, 0xbe, 0x79, 0x47, 0x93, 0x0f, + 0x6e, 0xc1, 0x1e, 0x42, 0x9c, 0xcb, 0x82, 0x47, 0x17, 0xd1, 0xab, 0x64, 0xec, 0x1e, 0xd9, 0x63, + 0x68, 0x1b, 0x39, 0xab, 0x10, 0x79, 0x8b, 0xcc, 0xa0, 0xd8, 0x13, 0xe8, 0xd4, 0x5a, 0xad, 0x64, + 0x81, 0x9a, 0xc7, 0x94, 0x1c, 0x34, 0x4b, 0x01, 0x8c, 0x15, 0xda, 0x4e, 0x4a, 0x95, 0x2f, 0xf8, + 0x31, 0xa5, 0x0d, 0xc7, 0x6d, 0xb1, 0x2a, 0x7c, 0x7a, 0xe2, 0xb7, 0x7b, 0xed, 0xb2, 0xa9, 0x2c, + 0xd1, 0xc8, 0x1f, 0xc8, 0xdb, 0x3e, 0xdb, 0x6b, 0x76, 0x09, 0x0f, 0x6a, 0xad, 0xd4, 0x74, 0x85, + 0x5a, 0x4e, 0x25, 0x16, 0xfc, 0x94, 0x0a, 0x77, 0x4d, 0xd6, 0x87, 0x1e, 0x19, 0x66, 0x29, 0x8d, + 0xc1, 0x82, 0x77, 0xa8, 0x74, 0xc7, 0x73, 0x1d, 0xfa, 0x39, 0xab, 0xdc, 0xa1, 0x91, 0x27, 0xbe, + 0xd3, 0xf4, 0x18, 0x87, 0xd3, 0x5c, 0xa3, 0xb0, 0x4a, 0x73, 0xa0, 0x78, 0x2f, 0x1d, 0x93, 0x25, + 0xea, 0x45, 0x89, 0xbc, 0xeb, 0x99, 0x78, 0xe5, 0xe8, 0x4d, 0x65, 0xc1, 0x7b, 0x9e, 0xde, 0x54, + 0x16, 0xfd, 0x5f, 0x2d, 0xe8, 0x7e, 0xa9, 0xe8, 0x5c, 0x1f, 0x65, 0x89, 0x8d, 0xa5, 0x43, 0xdc, + 0x3b, 0x2c, 0xcf, 0xe1, 0x44, 0x7d, 0xaf, 0x50, 0x07, 0xc8, 0x5e, 0x38, 0x97, 0xa8, 0x11, 0xe0, + 0x78, 0xec, 0x85, 0x3b, 0x17, 0xae, 0x6b, 0xa9, 0xd1, 0x10, 0xda, 0x78, 0xbc, 0x97, 0xec, 0x29, + 0x24, 0x8e, 0x55, 0x46, 0xf0, 0x4e, 0x28, 0x23, 0x78, 0x9f, 0x1d, 0xbc, 0x17, 0x70, 0x46, 0x08, + 0x32, 0x59, 0x59, 0xd4, 0x2b, 0x51, 0x12, 0xde, 0x38, 0xd0, 0xfb, 0x14, 0x4c, 0xf6, 0x0c, 0xc0, + 0xd7, 0xec, 0xa6, 0x46, 0x02, 0x1c, 0x8f, 0x13, 0x72, 0xae, 0x37, 0x35, 0x7d, 0x80, 0x07, 0xc9, + 0x3b, 0x17, 0xb1, 0xfb, 0x74, 0xaf, 0xdc, 0x6c, 0x29, 0xd6, 0x59, 0xc8, 0x12, 0x3f, 0x5b, 0x8a, + 0xf5, 0x95, 0x8f, 0x19, 0x1c, 0x57, 0xca, 0x62, 0x00, 0x49, 0xcf, 0xfd, 0xdf, 0x11, 0x24, 0x0e, + 0x0a, 0x55, 0xc2, 0x8b, 0x57, 0xa8, 0xc3, 0x9f, 0x2f, 0xa8, 0x06, 0xb1, 0xd6, 0xfd, 0xc4, 0xe2, + 0x7b, 0x89, 0x1d, 0x37, 0x89, 0x3d, 0x87, 0x6e, 0x29, 0x8c, 0xcd, 0xe8, 0x95, 0x55, 0x20, 0x03, + 0xce, 0xba, 0x22, 0x87, 0x5d, 0xc2, 0x59, 0x3e, 0xbf, 0xa9, 0x16, 0x99, 0x55, 0xbe, 0x14, 0xd8, + 0xf4, 0xc8, 0xbd, 0x56, 0x54, 0x7b, 0x3f, 0xfa, 0xb3, 0x4d, 0xa3, 0xdb, 0x6d, 0x1a, 0xfd, 0xdb, + 0xa6, 0xd1, 0xcf, 0x5d, 0x7a, 0x74, 0xbb, 0x4b, 0x8f, 0xfe, 0xee, 0xd2, 0xa3, 0xaf, 0x6f, 0x66, + 0xd2, 0xce, 0x6f, 0x26, 0x83, 0x5c, 0x2d, 0x87, 0xdf, 0x44, 0xbe, 0x10, 0xe5, 0x48, 0x4c, 0xcc, + 0xd0, 0x5f, 0xbc, 0xd7, 0xfe, 0x86, 0xae, 0x0f, 0x77, 0xd4, 0x91, 0x35, 0x93, 0x36, 0xdd, 0xce, + 0xb7, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x5f, 0xcb, 0xbd, 0xe7, 0xc8, 0x03, 0x00, 0x00, +} + +func (m *LegacyActiveDeals) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -420,12 +411,12 @@ func (m *ActiveDeals) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ActiveDeals) MarshalTo(dAtA []byte) (int, error) { +func (m *LegacyActiveDeals) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ActiveDeals) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *LegacyActiveDeals) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -517,7 +508,7 @@ func (m *ActiveDeals) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *UFID) Marshal() (dAtA []byte, err error) { +func (m *UnifiedFile) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -527,115 +518,73 @@ func (m *UFID) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *UFID) MarshalTo(dAtA []byte) (int, error) { +func (m *UnifiedFile) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *UFID) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *UnifiedFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Hash) > 0 { - i -= len(m.Hash) - copy(dAtA[i:], m.Hash) - i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Hash))) + if len(m.Note) > 0 { + i -= len(m.Note) + copy(dAtA[i:], m.Note) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Note))) i-- - dAtA[i] = 0xa + dAtA[i] = 0x52 } - return len(dAtA) - i, nil -} - -func (m *UniversalFile) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err + if m.MaxProofs != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.MaxProofs)) + i-- + dAtA[i] = 0x48 } - return dAtA[:n], nil -} - -func (m *UniversalFile) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UniversalFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Merkle) > 0 { - i -= len(m.Merkle) - copy(dAtA[i:], m.Merkle) - i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Merkle))) + if len(m.Proofs) > 0 { + for iNdEx := len(m.Proofs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Proofs[iNdEx]) + copy(dAtA[i:], m.Proofs[iNdEx]) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Proofs[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } + if m.ProofType != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.ProofType)) i-- - dAtA[i] = 0x42 + dAtA[i] = 0x38 } if m.ProofInterval != 0 { i = encodeVarintActiveDeals(dAtA, i, uint64(m.ProofInterval)) i-- - dAtA[i] = 0x38 + dAtA[i] = 0x30 } - if len(m.Owner) > 0 { - i -= len(m.Owner) - copy(dAtA[i:], m.Owner) - i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Owner))) + if m.FileSize != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.FileSize)) i-- - dAtA[i] = 0x32 + dAtA[i] = 0x28 } if m.Expires != 0 { i = encodeVarintActiveDeals(dAtA, i, uint64(m.Expires)) i-- - dAtA[i] = 0x28 + dAtA[i] = 0x20 } if m.Start != 0 { i = encodeVarintActiveDeals(dAtA, i, uint64(m.Start)) i-- - dAtA[i] = 0x20 - } - if m.FileSize != 0 { - i = encodeVarintActiveDeals(dAtA, i, uint64(m.FileSize)) - i-- dAtA[i] = 0x18 } - if len(m.Proofs) > 0 { - for k := range m.Proofs { - v := m.Proofs[k] - baseI := i - if v != nil { - { - size, err := v.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintActiveDeals(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintActiveDeals(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintActiveDeals(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x12 - } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x12 } - if m.Id != nil { - { - size, err := m.Id.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintActiveDeals(dAtA, i, uint64(size)) - } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Merkle))) i-- dAtA[i] = 0xa } @@ -665,12 +614,31 @@ func (m *FileProof) MarshalToSizedBuffer(dAtA []byte) (int, error) { if m.ChunkToProve != 0 { i = encodeVarintActiveDeals(dAtA, i, uint64(m.ChunkToProve)) i-- - dAtA[i] = 0x18 + dAtA[i] = 0x30 } if m.LastProven != 0 { i = encodeVarintActiveDeals(dAtA, i, uint64(m.LastProven)) i-- - dAtA[i] = 0x10 + dAtA[i] = 0x28 + } + if m.Start != 0 { + i = encodeVarintActiveDeals(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x20 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x1a + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintActiveDeals(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x12 } if len(m.Prover) > 0 { i -= len(m.Prover) @@ -693,7 +661,7 @@ func encodeVarintActiveDeals(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *ActiveDeals) Size() (n int) { +func (m *LegacyActiveDeals) Size() (n int) { if m == nil { return 0 } @@ -750,59 +718,45 @@ func (m *ActiveDeals) Size() (n int) { return n } -func (m *UFID) Size() (n int) { +func (m *UnifiedFile) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.Hash) + l = len(m.Merkle) if l > 0 { n += 1 + l + sovActiveDeals(uint64(l)) } - return n -} - -func (m *UniversalFile) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Id != nil { - l = m.Id.Size() + l = len(m.Owner) + if l > 0 { n += 1 + l + sovActiveDeals(uint64(l)) } - if len(m.Proofs) > 0 { - for k, v := range m.Proofs { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovActiveDeals(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovActiveDeals(uint64(len(k))) + l - n += mapEntrySize + 1 + sovActiveDeals(uint64(mapEntrySize)) - } - } - if m.FileSize != 0 { - n += 1 + sovActiveDeals(uint64(m.FileSize)) - } if m.Start != 0 { n += 1 + sovActiveDeals(uint64(m.Start)) } if m.Expires != 0 { n += 1 + sovActiveDeals(uint64(m.Expires)) } - l = len(m.Owner) - if l > 0 { - n += 1 + l + sovActiveDeals(uint64(l)) + if m.FileSize != 0 { + n += 1 + sovActiveDeals(uint64(m.FileSize)) } if m.ProofInterval != 0 { n += 1 + sovActiveDeals(uint64(m.ProofInterval)) } - l = len(m.Merkle) + if m.ProofType != 0 { + n += 1 + sovActiveDeals(uint64(m.ProofType)) + } + if len(m.Proofs) > 0 { + for _, s := range m.Proofs { + l = len(s) + n += 1 + l + sovActiveDeals(uint64(l)) + } + } + if m.MaxProofs != 0 { + n += 1 + sovActiveDeals(uint64(m.MaxProofs)) + } + l = len(m.Note) if l > 0 { n += 1 + l + sovActiveDeals(uint64(l)) } @@ -819,6 +773,17 @@ func (m *FileProof) Size() (n int) { if l > 0 { n += 1 + l + sovActiveDeals(uint64(l)) } + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovActiveDeals(uint64(l)) + } + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovActiveDeals(uint64(l)) + } + if m.Start != 0 { + n += 1 + sovActiveDeals(uint64(m.Start)) + } if m.LastProven != 0 { n += 1 + sovActiveDeals(uint64(m.LastProven)) } @@ -834,7 +799,7 @@ func sovActiveDeals(x uint64) (n int) { func sozActiveDeals(x uint64) (n int) { return sovActiveDeals(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *ActiveDeals) Unmarshal(dAtA []byte) error { +func (m *LegacyActiveDeals) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -857,10 +822,10 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ActiveDeals: wiretype end group for non-group") + return fmt.Errorf("proto: LegacyActiveDeals: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ActiveDeals: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: LegacyActiveDeals: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1268,7 +1233,7 @@ func (m *ActiveDeals) Unmarshal(dAtA []byte) error { } return nil } -func (m *UFID) Unmarshal(dAtA []byte) error { +func (m *UnifiedFile) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1291,15 +1256,15 @@ func (m *UFID) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: UFID: wiretype end group for non-group") + return fmt.Errorf("proto: UnifiedFile: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: UFID: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: UnifiedFile: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { @@ -1326,66 +1291,16 @@ func (m *UFID) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Hash = append(m.Hash[:0], dAtA[iNdEx:postIndex]...) - if m.Hash == nil { - m.Hash = []byte{} + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipActiveDeals(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthActiveDeals - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *UniversalFile) 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 ErrIntOverflowActiveDeals - } - 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: UniversalFile: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: UniversalFile: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -1395,33 +1310,29 @@ func (m *UniversalFile) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthActiveDeals } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthActiveDeals } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Id == nil { - m.Id = &UFID{} - } - if err := m.Id.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proofs", wireType) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) } - var msglen int + m.Start = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -1431,122 +1342,31 @@ func (m *UniversalFile) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Start |= int64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthActiveDeals - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthActiveDeals + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Expires", wireType) } - if postIndex > l { - return io.ErrUnexpectedEOF + m.Expires = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Expires |= int64(b&0x7F) << shift + if b < 0x80 { + break + } } - if m.Proofs == nil { - m.Proofs = make(map[string]*FileProof) - } - var mapkey string - var mapvalue *FileProof - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowActiveDeals - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowActiveDeals - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthActiveDeals - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthActiveDeals - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowActiveDeals - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthActiveDeals - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthActiveDeals - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &FileProof{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipActiveDeals(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthActiveDeals - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Proofs[mapkey] = mapvalue - iNdEx = postIndex - case 3: + case 5: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field FileSize", wireType) } @@ -1565,11 +1385,11 @@ func (m *UniversalFile) Unmarshal(dAtA []byte) error { break } } - case 4: + case 6: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProofInterval", wireType) } - m.Start = 0 + m.ProofInterval = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -1579,16 +1399,16 @@ func (m *UniversalFile) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Start |= int64(b&0x7F) << shift + m.ProofInterval |= int64(b&0x7F) << shift if b < 0x80 { break } } - case 5: + case 7: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Expires", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProofType", wireType) } - m.Expires = 0 + m.ProofType = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -1598,14 +1418,14 @@ func (m *UniversalFile) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Expires |= int64(b&0x7F) << shift + m.ProofType |= int64(b&0x7F) << shift if b < 0x80 { break } } - case 6: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Proofs", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1633,13 +1453,13 @@ func (m *UniversalFile) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Owner = string(dAtA[iNdEx:postIndex]) + m.Proofs = append(m.Proofs, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 7: + case 9: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofInterval", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MaxProofs", wireType) } - m.ProofInterval = 0 + m.MaxProofs = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -1649,16 +1469,16 @@ func (m *UniversalFile) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ProofInterval |= int64(b&0x7F) << shift + m.MaxProofs |= int64(b&0x7F) << shift if b < 0x80 { break } } - case 8: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Note", wireType) } - var byteLen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowActiveDeals @@ -1668,25 +1488,23 @@ func (m *UniversalFile) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthActiveDeals } - postIndex := iNdEx + byteLen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthActiveDeals } if postIndex > l { return io.ErrUnexpectedEOF } - m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) - if m.Merkle == nil { - m.Merkle = []byte{} - } + m.Note = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -1771,6 +1589,91 @@ func (m *FileProof) Unmarshal(dAtA []byte) error { m.Prover = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + 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 ErrInvalidLengthActiveDeals + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthActiveDeals + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowActiveDeals + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field LastProven", wireType) } @@ -1789,7 +1692,7 @@ func (m *FileProof) Unmarshal(dAtA []byte) error { break } } - case 3: + case 6: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field ChunkToProve", wireType) } diff --git a/x/storage/types/contracts.pb.go b/x/storage/types/contracts.pb.go index 32ea9e0c1..29dd6e3c4 100644 --- a/x/storage/types/contracts.pb.go +++ b/x/storage/types/contracts.pb.go @@ -22,7 +22,7 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type Contracts struct { +type LegacyContracts struct { Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` Priceamt string `protobuf:"bytes,2,opt,name=priceamt,proto3" json:"priceamt,omitempty"` Pricedenom string `protobuf:"bytes,3,opt,name=pricedenom,proto3" json:"pricedenom,omitempty"` @@ -35,18 +35,18 @@ type Contracts struct { Age int64 `protobuf:"varint,10,opt,name=age,proto3" json:"age,omitempty"` } -func (m *Contracts) Reset() { *m = Contracts{} } -func (m *Contracts) String() string { return proto.CompactTextString(m) } -func (*Contracts) ProtoMessage() {} -func (*Contracts) Descriptor() ([]byte, []int) { +func (m *LegacyContracts) Reset() { *m = LegacyContracts{} } +func (m *LegacyContracts) String() string { return proto.CompactTextString(m) } +func (*LegacyContracts) ProtoMessage() {} +func (*LegacyContracts) Descriptor() ([]byte, []int) { return fileDescriptor_69cb5e3b60cb0642, []int{0} } -func (m *Contracts) XXX_Unmarshal(b []byte) error { +func (m *LegacyContracts) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *Contracts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *LegacyContracts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_Contracts.Marshal(b, m, deterministic) + return xxx_messageInfo_LegacyContracts.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -56,82 +56,82 @@ func (m *Contracts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } -func (m *Contracts) XXX_Merge(src proto.Message) { - xxx_messageInfo_Contracts.Merge(m, src) +func (m *LegacyContracts) XXX_Merge(src proto.Message) { + xxx_messageInfo_LegacyContracts.Merge(m, src) } -func (m *Contracts) XXX_Size() int { +func (m *LegacyContracts) XXX_Size() int { return m.Size() } -func (m *Contracts) XXX_DiscardUnknown() { - xxx_messageInfo_Contracts.DiscardUnknown(m) +func (m *LegacyContracts) XXX_DiscardUnknown() { + xxx_messageInfo_LegacyContracts.DiscardUnknown(m) } -var xxx_messageInfo_Contracts proto.InternalMessageInfo +var xxx_messageInfo_LegacyContracts proto.InternalMessageInfo -func (m *Contracts) GetCid() string { +func (m *LegacyContracts) GetCid() string { if m != nil { return m.Cid } return "" } -func (m *Contracts) GetPriceamt() string { +func (m *LegacyContracts) GetPriceamt() string { if m != nil { return m.Priceamt } return "" } -func (m *Contracts) GetPricedenom() string { +func (m *LegacyContracts) GetPricedenom() string { if m != nil { return m.Pricedenom } return "" } -func (m *Contracts) GetCreator() string { +func (m *LegacyContracts) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *Contracts) GetMerkle() string { +func (m *LegacyContracts) GetMerkle() string { if m != nil { return m.Merkle } return "" } -func (m *Contracts) GetSignee() string { +func (m *LegacyContracts) GetSignee() string { if m != nil { return m.Signee } return "" } -func (m *Contracts) GetDuration() string { +func (m *LegacyContracts) GetDuration() string { if m != nil { return m.Duration } return "" } -func (m *Contracts) GetFilesize() string { +func (m *LegacyContracts) GetFilesize() string { if m != nil { return m.Filesize } return "" } -func (m *Contracts) GetFid() string { +func (m *LegacyContracts) GetFid() string { if m != nil { return m.Fid } return "" } -func (m *Contracts) GetAge() int64 { +func (m *LegacyContracts) GetAge() int64 { if m != nil { return m.Age } @@ -139,7 +139,7 @@ func (m *Contracts) GetAge() int64 { } func init() { - proto.RegisterType((*Contracts)(nil), "canine_chain.storage.Contracts") + proto.RegisterType((*LegacyContracts)(nil), "canine_chain.storage.LegacyContracts") } func init() { @@ -147,28 +147,29 @@ func init() { } var fileDescriptor_69cb5e3b60cb0642 = []byte{ - // 284 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0xb1, 0x4e, 0xc3, 0x30, - 0x18, 0x84, 0x6b, 0x0a, 0x69, 0xe3, 0x09, 0x59, 0x08, 0x59, 0x0c, 0x56, 0x85, 0x18, 0xba, 0x90, - 0x48, 0xf0, 0x06, 0xb0, 0x76, 0xea, 0xc8, 0x82, 0x1c, 0xe7, 0x4f, 0x6a, 0x9a, 0xd8, 0x91, 0xed, - 0x4a, 0xc0, 0x53, 0xf0, 0x58, 0x8c, 0x1d, 0x19, 0x51, 0xf2, 0x20, 0x20, 0xdb, 0x4d, 0xd5, 0xed, - 0xbe, 0xbb, 0x1b, 0xfe, 0xff, 0xf0, 0x9d, 0xe0, 0x4a, 0x2a, 0x78, 0x15, 0x1b, 0x2e, 0x55, 0x6e, - 0x9d, 0x36, 0xbc, 0x86, 0x5c, 0x68, 0xe5, 0x0c, 0x17, 0xce, 0x66, 0x9d, 0xd1, 0x4e, 0x93, 0xab, - 0xd3, 0x56, 0x76, 0x68, 0xdd, 0xfe, 0x21, 0x9c, 0x3e, 0x8f, 0x4d, 0x72, 0x89, 0xa7, 0x42, 0x96, - 0x14, 0x2d, 0xd0, 0x32, 0x5d, 0x7b, 0x49, 0x6e, 0xf0, 0xbc, 0x33, 0x52, 0x00, 0x6f, 0x1d, 0x3d, - 0x0b, 0xf6, 0x91, 0x09, 0xc3, 0x38, 0xe8, 0x12, 0x94, 0x6e, 0xe9, 0x34, 0xa4, 0x27, 0x0e, 0xa1, - 0x78, 0x26, 0x0c, 0x70, 0xa7, 0x0d, 0x3d, 0x0f, 0xe1, 0x88, 0xe4, 0x1a, 0x27, 0x2d, 0x98, 0x6d, - 0x03, 0xf4, 0x22, 0x04, 0x07, 0xf2, 0xbe, 0x95, 0xb5, 0x02, 0xa0, 0x49, 0xf4, 0x23, 0xf9, 0x2b, - 0xca, 0x9d, 0xe1, 0x4e, 0x6a, 0x45, 0x67, 0xf1, 0x8a, 0x91, 0x7d, 0x56, 0xc9, 0x06, 0xac, 0xfc, - 0x04, 0x3a, 0x8f, 0xd9, 0xc8, 0xfe, 0x9f, 0x4a, 0x96, 0x34, 0x8d, 0xff, 0x54, 0xb2, 0xf4, 0x0e, - 0xaf, 0x81, 0xe2, 0x05, 0x5a, 0x4e, 0xd7, 0x5e, 0x3e, 0xad, 0xbe, 0x7b, 0x86, 0xf6, 0x3d, 0x43, - 0xbf, 0x3d, 0x43, 0x5f, 0x03, 0x9b, 0xec, 0x07, 0x36, 0xf9, 0x19, 0xd8, 0xe4, 0xe5, 0xa1, 0x96, - 0x6e, 0xb3, 0x2b, 0x32, 0xa1, 0xdb, 0xfc, 0x8d, 0x8b, 0x2d, 0x6f, 0x56, 0xbc, 0xb0, 0x79, 0xdc, - 0xf1, 0x3e, 0xae, 0xfd, 0x7e, 0xdc, 0xdb, 0x7d, 0x74, 0x60, 0x8b, 0x24, 0x8c, 0xfd, 0xf8, 0x1f, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0x84, 0xb3, 0xd5, 0x94, 0x01, 0x00, 0x00, + // 291 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0xbf, 0x4e, 0xf3, 0x30, + 0x14, 0xc5, 0xeb, 0xf6, 0xfb, 0xfa, 0xc7, 0x0b, 0xc8, 0x42, 0xc8, 0x62, 0xb0, 0x2a, 0xc4, 0xd0, + 0x85, 0x46, 0x82, 0x37, 0x80, 0xb5, 0x53, 0x47, 0x16, 0x74, 0xeb, 0xdc, 0xa6, 0xa6, 0x89, 0x1d, + 0xd9, 0xae, 0x44, 0xd9, 0xd9, 0x79, 0x2c, 0xc6, 0x8e, 0x8c, 0x28, 0x79, 0x11, 0x64, 0xbb, 0xa9, + 0xba, 0x9d, 0xdf, 0x39, 0x67, 0xb8, 0xf7, 0xd0, 0x3b, 0x09, 0x5a, 0x69, 0x7c, 0x95, 0x1b, 0x50, + 0x3a, 0x73, 0xde, 0x58, 0x28, 0x30, 0x93, 0x46, 0x7b, 0x0b, 0xd2, 0xbb, 0x79, 0x6d, 0x8d, 0x37, + 0xec, 0xea, 0xbc, 0x35, 0x3f, 0xb6, 0x6e, 0x3f, 0xfb, 0xf4, 0x62, 0x81, 0x05, 0xc8, 0xfd, 0x73, + 0xd7, 0x67, 0x97, 0x74, 0x20, 0x55, 0xce, 0xc9, 0x94, 0xcc, 0x26, 0xcb, 0x20, 0xd9, 0x0d, 0x1d, + 0xd7, 0x56, 0x49, 0x84, 0xca, 0xf3, 0x7e, 0xb4, 0x4f, 0xcc, 0x04, 0xa5, 0x51, 0xe7, 0xa8, 0x4d, + 0xc5, 0x07, 0x31, 0x3d, 0x73, 0x18, 0xa7, 0x23, 0x69, 0x11, 0xbc, 0xb1, 0xfc, 0x5f, 0x0c, 0x3b, + 0x64, 0xd7, 0x74, 0x58, 0xa1, 0xdd, 0x96, 0xc8, 0xff, 0xc7, 0xe0, 0x48, 0xc1, 0x77, 0xaa, 0xd0, + 0x88, 0x7c, 0x98, 0xfc, 0x44, 0xe1, 0x8a, 0x7c, 0x67, 0xc1, 0x2b, 0xa3, 0xf9, 0x28, 0x5d, 0xd1, + 0x71, 0xc8, 0xd6, 0xaa, 0x44, 0xa7, 0x3e, 0x90, 0x8f, 0x53, 0xd6, 0x71, 0xf8, 0x67, 0xad, 0x72, + 0x3e, 0x49, 0xff, 0xac, 0x55, 0x1e, 0x1c, 0x28, 0x90, 0xd3, 0x29, 0x99, 0x0d, 0x96, 0x41, 0x3e, + 0x2d, 0xbe, 0x1b, 0x41, 0x0e, 0x8d, 0x20, 0xbf, 0x8d, 0x20, 0x5f, 0xad, 0xe8, 0x1d, 0x5a, 0xd1, + 0xfb, 0x69, 0x45, 0xef, 0xe5, 0xa1, 0x50, 0x7e, 0xb3, 0x5b, 0xcd, 0xa5, 0xa9, 0xb2, 0x37, 0x90, + 0x5b, 0x28, 0x17, 0xb0, 0x72, 0x59, 0x5a, 0xf3, 0x3e, 0x6d, 0xfe, 0x7e, 0x5a, 0xdd, 0xef, 0x6b, + 0x74, 0xab, 0x61, 0x9c, 0xfc, 0xf1, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x14, 0x14, 0x32, 0xb3, 0x9a, + 0x01, 0x00, 0x00, } -func (m *Contracts) Marshal() (dAtA []byte, err error) { +func (m *LegacyContracts) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -178,12 +179,12 @@ func (m *Contracts) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *Contracts) MarshalTo(dAtA []byte) (int, error) { +func (m *LegacyContracts) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Contracts) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *LegacyContracts) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -270,7 +271,7 @@ func encodeVarintContracts(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *Contracts) Size() (n int) { +func (m *LegacyContracts) Size() (n int) { if m == nil { return 0 } @@ -324,7 +325,7 @@ func sovContracts(x uint64) (n int) { func sozContracts(x uint64) (n int) { return sovContracts(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *Contracts) Unmarshal(dAtA []byte) error { +func (m *LegacyContracts) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -347,10 +348,10 @@ func (m *Contracts) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Contracts: wiretype end group for non-group") + return fmt.Errorf("proto: LegacyContracts: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Contracts: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: LegacyContracts: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/x/storage/types/fid_cid.pb.go b/x/storage/types/fid_cid.pb.go index 01bacbb9f..0b37b778a 100644 --- a/x/storage/types/fid_cid.pb.go +++ b/x/storage/types/fid_cid.pb.go @@ -22,23 +22,23 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type FidCid struct { +type LegacyFidCid struct { Fid string `protobuf:"bytes,1,opt,name=fid,proto3" json:"fid,omitempty"` Cids string `protobuf:"bytes,2,opt,name=cids,proto3" json:"cids,omitempty"` } -func (m *FidCid) Reset() { *m = FidCid{} } -func (m *FidCid) String() string { return proto.CompactTextString(m) } -func (*FidCid) ProtoMessage() {} -func (*FidCid) Descriptor() ([]byte, []int) { +func (m *LegacyFidCid) Reset() { *m = LegacyFidCid{} } +func (m *LegacyFidCid) String() string { return proto.CompactTextString(m) } +func (*LegacyFidCid) ProtoMessage() {} +func (*LegacyFidCid) Descriptor() ([]byte, []int) { return fileDescriptor_e2d91a93fd947ec8, []int{0} } -func (m *FidCid) XXX_Unmarshal(b []byte) error { +func (m *LegacyFidCid) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *FidCid) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *LegacyFidCid) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_FidCid.Marshal(b, m, deterministic) + return xxx_messageInfo_LegacyFidCid.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -48,26 +48,26 @@ func (m *FidCid) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } -func (m *FidCid) XXX_Merge(src proto.Message) { - xxx_messageInfo_FidCid.Merge(m, src) +func (m *LegacyFidCid) XXX_Merge(src proto.Message) { + xxx_messageInfo_LegacyFidCid.Merge(m, src) } -func (m *FidCid) XXX_Size() int { +func (m *LegacyFidCid) XXX_Size() int { return m.Size() } -func (m *FidCid) XXX_DiscardUnknown() { - xxx_messageInfo_FidCid.DiscardUnknown(m) +func (m *LegacyFidCid) XXX_DiscardUnknown() { + xxx_messageInfo_LegacyFidCid.DiscardUnknown(m) } -var xxx_messageInfo_FidCid proto.InternalMessageInfo +var xxx_messageInfo_LegacyFidCid proto.InternalMessageInfo -func (m *FidCid) GetFid() string { +func (m *LegacyFidCid) GetFid() string { if m != nil { return m.Fid } return "" } -func (m *FidCid) GetCids() string { +func (m *LegacyFidCid) GetCids() string { if m != nil { return m.Cids } @@ -75,7 +75,7 @@ func (m *FidCid) GetCids() string { } func init() { - proto.RegisterType((*FidCid)(nil), "canine_chain.storage.FidCid") + proto.RegisterType((*LegacyFidCid)(nil), "canine_chain.storage.LegacyFidCid") } func init() { @@ -83,22 +83,22 @@ func init() { } var fileDescriptor_e2d91a93fd947ec8 = []byte{ - // 177 bytes of a gzipped FileDescriptorProto + // 183 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4a, 0x4e, 0xcc, 0xcb, 0xcc, 0x4b, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0xcc, 0xd3, 0x2f, 0x2e, 0xc9, 0x2f, 0x4a, 0x4c, 0x4f, 0xd5, 0x4f, 0xcb, 0x4c, 0x89, 0x4f, 0xce, 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, - 0x41, 0x56, 0xa3, 0x07, 0x55, 0xa3, 0xa4, 0xc7, 0xc5, 0xe6, 0x96, 0x99, 0xe2, 0x9c, 0x99, 0x22, - 0x24, 0xc0, 0xc5, 0x9c, 0x96, 0x99, 0x22, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0x04, 0x62, 0x0a, - 0x09, 0x71, 0xb1, 0x24, 0x67, 0xa6, 0x14, 0x4b, 0x30, 0x81, 0x85, 0xc0, 0x6c, 0x27, 0x9f, 0x13, - 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, - 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4a, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, - 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0xcf, 0x4a, 0x4c, 0xce, 0x4e, 0xcc, 0xf1, 0x49, 0x4c, 0x2a, 0xd6, - 0x87, 0xd8, 0xaa, 0x0b, 0x71, 0x59, 0x05, 0xdc, 0x6d, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, - 0x60, 0xa7, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xa2, 0xff, 0xea, 0x63, 0xc0, 0x00, 0x00, - 0x00, + 0x41, 0x56, 0xa3, 0x07, 0x55, 0xa3, 0x64, 0xc2, 0xc5, 0xe3, 0x93, 0x9a, 0x9e, 0x98, 0x5c, 0xe9, + 0x96, 0x99, 0xe2, 0x9c, 0x99, 0x22, 0x24, 0xc0, 0xc5, 0x9c, 0x96, 0x99, 0x22, 0xc1, 0xa8, 0xc0, + 0xa8, 0xc1, 0x19, 0x04, 0x62, 0x0a, 0x09, 0x71, 0xb1, 0x24, 0x67, 0xa6, 0x14, 0x4b, 0x30, 0x81, + 0x85, 0xc0, 0x6c, 0x27, 0x9f, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, + 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, + 0x4a, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0xcf, 0x4a, 0x4c, 0xce, 0x4e, + 0xcc, 0xf1, 0x49, 0x4c, 0x2a, 0xd6, 0x87, 0xd8, 0xad, 0x0b, 0x71, 0x5f, 0x05, 0xdc, 0x85, 0x25, + 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0x07, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x27, + 0xfa, 0x1a, 0x41, 0xc6, 0x00, 0x00, 0x00, } -func (m *FidCid) Marshal() (dAtA []byte, err error) { +func (m *LegacyFidCid) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -108,12 +108,12 @@ func (m *FidCid) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *FidCid) MarshalTo(dAtA []byte) (int, error) { +func (m *LegacyFidCid) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *FidCid) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *LegacyFidCid) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -146,7 +146,7 @@ func encodeVarintFidCid(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *FidCid) Size() (n int) { +func (m *LegacyFidCid) Size() (n int) { if m == nil { return 0 } @@ -169,7 +169,7 @@ func sovFidCid(x uint64) (n int) { func sozFidCid(x uint64) (n int) { return sovFidCid(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *FidCid) Unmarshal(dAtA []byte) error { +func (m *LegacyFidCid) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -192,10 +192,10 @@ func (m *FidCid) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: FidCid: wiretype end group for non-group") + return fmt.Errorf("proto: LegacyFidCid: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: FidCid: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: LegacyFidCid: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/x/storage/types/file.go b/x/storage/types/file.go new file mode 100644 index 000000000..382dadfe0 --- /dev/null +++ b/x/storage/types/file.go @@ -0,0 +1,5 @@ +package types + +func (f *UnifiedFile) MakeProofKey(prover string) string { + return string(ProofKey(prover, f.Merkle, f.Owner, f.Start)) +} diff --git a/x/storage/types/file_deal.go b/x/storage/types/file_deal.go index 0adc8cd97..8791a8b3b 100644 --- a/x/storage/types/file_deal.go +++ b/x/storage/types/file_deal.go @@ -14,7 +14,7 @@ import ( ) // VerifyProof checks whether a proof is valid against a file -func (f *UniversalFile) VerifyProof(proofData []byte, chunk int64, item string) bool { +func (f *UnifiedFile) VerifyProof(proofData []byte, chunk int64, item string) bool { h := sha256.New() _, err := io.WriteString(h, fmt.Sprintf("%d%s", chunk, item)) if err != nil { @@ -36,11 +36,73 @@ func (f *UniversalFile) VerifyProof(proofData []byte, chunk int64, item string) return verified } -// ResetChunk picks a new chunk to prove for a file -func (f *UniversalFile) ResetChunk(ctx sdk.Context, prover string, chunkSize int64) error { - proof := f.Proofs[prover] +func (f *UnifiedFile) AddProver(ctx sdk.Context, k ProofLoader, prover string) bool { + if len(f.Proofs) >= int(f.MaxProofs) { + return false + } + + pk := f.MakeProofKey(prover) + + f.Proofs = append(f.Proofs, pk) + + p := FileProof{ + Prover: prover, + Merkle: f.Merkle, + Owner: f.Owner, + Start: f.Start, + LastProven: 0, + ChunkToProve: 0, + } + + k.SetProof(ctx, p) + + return true +} + +func (f *UnifiedFile) RemoveProver(ctx sdk.Context, k ProofLoader, prover string) { + if len(f.Proofs) == 0 { + return + } + + pk := f.MakeProofKey(prover) + + for i, proof := range f.Proofs { + if proof == pk { + front := f.Proofs[:i] + back := f.Proofs[i+1:] + + // nolint:all + f.Proofs = append(front, back...) + + k.RemoveProofWithBuiltKey(ctx, []byte(pk)) + return + } + } +} + +func (f *UnifiedFile) GetProver(ctx sdk.Context, k ProofLoader, prover string) (*FileProof, error) { + var proof *FileProof + for _, proofKey := range f.Proofs { + if proofKey == f.MakeProofKey(prover) { + p, found := k.GetProofWithBuiltKey(ctx, []byte(proofKey)) + if found { + break + } + proof = &p + } + } if proof == nil { - return sdkerror.ErrKeyNotFound + return nil, sdkerror.Wrapf(sdkerror.ErrKeyNotFound, "cannot find proof with prover %s on file %x/%s", prover, f.Merkle, f.Owner) + } + + return proof, nil +} + +// ResetChunk picks a new chunk to prove for a file +func (f *UnifiedFile) ResetChunk(ctx sdk.Context, k ProofLoader, prover string, chunkSize int64) error { + proof, err := f.GetProver(ctx, k, prover) + if err != nil { + return err } pieces := f.FileSize / chunkSize @@ -58,18 +120,20 @@ func (f *UniversalFile) ResetChunk(ctx sdk.Context, prover string, chunkSize int proof.ChunkToProve = newChunk + k.SetProof(ctx, *proof) + return nil } // SetProven sets the proofs proven status to true and updates the proof window & picks a new chunk to verify -func (f *UniversalFile) SetProven(ctx sdk.Context, prover string, chunkSize int64) error { - proof := f.Proofs[prover] - if proof == nil { - return sdkerror.ErrKeyNotFound +func (f *UnifiedFile) SetProven(ctx sdk.Context, k ProofLoader, prover string, chunkSize int64) error { + proof, err := f.GetProver(ctx, k, prover) + if err != nil { + return err } proof.LastProven = ctx.BlockHeight() - err := f.ResetChunk(ctx, prover, chunkSize) + err = f.ResetChunk(ctx, k, prover, chunkSize) if err != nil { return err } @@ -78,14 +142,14 @@ func (f *UniversalFile) SetProven(ctx sdk.Context, prover string, chunkSize int6 } // Prove checks the validity of a proof and updates the proof window & picks a new chunk to verify -func (f *UniversalFile) Prove(ctx sdk.Context, prover string, proofData []byte, chunk int64, item string, chunkSize int64) error { +func (f *UnifiedFile) Prove(ctx sdk.Context, k ProofLoader, prover string, proofData []byte, chunk int64, item string, chunkSize int64) error { valid := f.VerifyProof(proofData, chunk, item) if !valid { return ErrCannotVerifyProof } - err := f.SetProven(ctx, prover, chunkSize) + err := f.SetProven(ctx, k, prover, chunkSize) if err != nil { return err } diff --git a/x/storage/types/file_deal_test.go b/x/storage/types/file_deal_test.go index 5d3c65775..1274351ac 100644 --- a/x/storage/types/file_deal_test.go +++ b/x/storage/types/file_deal_test.go @@ -55,15 +55,17 @@ func TestFileProof(t *testing.T) { tree, err := merkletree.NewUsing(data, sha3.New512(), false) require.NoError(t, err) - f := &types.UniversalFile{ - Id: nil, - Proofs: make(map[string]*types.FileProof), - FileSize: 1, + f := &types.UnifiedFile{ + Merkle: tree.Root(), + Owner: "", Start: 0, Expires: 0, - Owner: "", - ProofInterval: 0, - Merkle: tree.Root(), + FileSize: 1, + ProofInterval: 10, + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: "", } verified, proof, err := GenerateMerkleProof(*tree, 0, i) diff --git a/x/storage/types/genesis.go b/x/storage/types/genesis.go index a99be1ac2..92287a05f 100644 --- a/x/storage/types/genesis.go +++ b/x/storage/types/genesis.go @@ -10,11 +10,8 @@ const DefaultIndex uint64 = 1 // DefaultGenesis returns the default Capability genesis state func DefaultGenesis() *GenesisState { return &GenesisState{ - ContractsList: []Contracts{}, - ActiveDealsList: []ActiveDeals{}, + FileList: []UnifiedFile{}, ProvidersList: []Providers{}, - StraysList: []Strays{}, - FidCidList: []FidCid{}, PaymentInfoList: []StoragePaymentInfo{}, // this line is used by starport scaffolding # genesis/types/default @@ -25,26 +22,15 @@ func DefaultGenesis() *GenesisState { // Validate performs basic genesis state validation returning an error upon any // failure. func (gs GenesisState) Validate() error { - // Check for duplicated index in contracts - contractsIndexMap := make(map[string]struct{}) + // Check for duplicated index in files + filesIndexMap := make(map[string]struct{}) - for _, elem := range gs.ContractsList { - index := string(ContractsKey(elem.Cid)) - if _, ok := contractsIndexMap[index]; ok { - return fmt.Errorf("duplicated index for contracts") - } - contractsIndexMap[index] = struct{}{} - } - - // Check for duplicated index in activeDeals - activeDealsIndexMap := make(map[string]struct{}) - - for _, elem := range gs.ActiveDealsList { - index := string(ActiveDealsKey(elem.Cid)) - if _, ok := activeDealsIndexMap[index]; ok { + for _, elem := range gs.FileList { + index := string(FilesPrimaryKey(elem.Merkle, elem.Owner, elem.Start)) + if _, ok := filesIndexMap[index]; ok { return fmt.Errorf("duplicated index for activeDeals") } - activeDealsIndexMap[index] = struct{}{} + filesIndexMap[index] = struct{}{} } // Check for duplicated index in providers providersIndexMap := make(map[string]struct{}) @@ -57,27 +43,6 @@ func (gs GenesisState) Validate() error { providersIndexMap[index] = struct{}{} } - // Check for duplicated index in strays - straysIndexMap := make(map[string]struct{}) - - for _, elem := range gs.StraysList { - index := string(StraysKey(elem.Cid)) - if _, ok := straysIndexMap[index]; ok { - return fmt.Errorf("duplicated index for strays") - } - straysIndexMap[index] = struct{}{} - } - // Check for duplicated index in fidCid - fidCidIndexMap := make(map[string]struct{}) - - for _, elem := range gs.FidCidList { - index := string(FidCidKey(elem.Fid)) - if _, ok := fidCidIndexMap[index]; ok { - return fmt.Errorf("duplicated index for fidCid") - } - fidCidIndexMap[index] = struct{}{} - } - // Check for duplicated index in fidCid payinfoIndexMap := make(map[string]struct{}) diff --git a/x/storage/types/genesis.pb.go b/x/storage/types/genesis.pb.go index bc66d780d..57382735b 100644 --- a/x/storage/types/genesis.pb.go +++ b/x/storage/types/genesis.pb.go @@ -26,16 +26,13 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the storage module's genesis state. type GenesisState struct { Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` - ContractsList []Contracts `protobuf:"bytes,2,rep,name=contracts_list,json=contractsList,proto3" json:"contracts_list"` - ActiveDealsList []ActiveDeals `protobuf:"bytes,3,rep,name=active_deals_list,json=activeDealsList,proto3" json:"active_deals_list"` - ProvidersList []Providers `protobuf:"bytes,4,rep,name=providers_list,json=providersList,proto3" json:"providers_list"` - StraysList []Strays `protobuf:"bytes,6,rep,name=strays_list,json=straysList,proto3" json:"strays_list"` - FidCidList []FidCid `protobuf:"bytes,5,rep,name=fid_cid_list,json=fidCidList,proto3" json:"fid_cid_list"` - PaymentInfoList []StoragePaymentInfo `protobuf:"bytes,7,rep,name=payment_info_list,json=paymentInfoList,proto3" json:"payment_info_list"` - CollateralList []Collateral `protobuf:"bytes,8,rep,name=collateral_list,json=collateralList,proto3" json:"collateral_list"` - ActiveProvidersList []ActiveProviders `protobuf:"bytes,9,rep,name=active_providers_list,json=activeProvidersList,proto3" json:"active_providers_list"` - ReportForms []ReportForm `protobuf:"bytes,10,rep,name=report_forms,json=reportForms,proto3" json:"report_forms"` - AttestForms []AttestationForm `protobuf:"bytes,11,rep,name=attest_forms,json=attestForms,proto3" json:"attest_forms"` + FileList []UnifiedFile `protobuf:"bytes,2,rep,name=file_list,json=fileList,proto3" json:"file_list"` + ProvidersList []Providers `protobuf:"bytes,3,rep,name=providers_list,json=providersList,proto3" json:"providers_list"` + PaymentInfoList []StoragePaymentInfo `protobuf:"bytes,4,rep,name=payment_info_list,json=paymentInfoList,proto3" json:"payment_info_list"` + CollateralList []Collateral `protobuf:"bytes,5,rep,name=collateral_list,json=collateralList,proto3" json:"collateral_list"` + ActiveProvidersList []ActiveProviders `protobuf:"bytes,6,rep,name=active_providers_list,json=activeProvidersList,proto3" json:"active_providers_list"` + ReportForms []ReportForm `protobuf:"bytes,7,rep,name=report_forms,json=reportForms,proto3" json:"report_forms"` + AttestForms []AttestationForm `protobuf:"bytes,8,rep,name=attest_forms,json=attestForms,proto3" json:"attest_forms"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -78,16 +75,9 @@ func (m *GenesisState) GetParams() Params { return Params{} } -func (m *GenesisState) GetContractsList() []Contracts { +func (m *GenesisState) GetFileList() []UnifiedFile { if m != nil { - return m.ContractsList - } - return nil -} - -func (m *GenesisState) GetActiveDealsList() []ActiveDeals { - if m != nil { - return m.ActiveDealsList + return m.FileList } return nil } @@ -99,20 +89,6 @@ func (m *GenesisState) GetProvidersList() []Providers { return nil } -func (m *GenesisState) GetStraysList() []Strays { - if m != nil { - return m.StraysList - } - return nil -} - -func (m *GenesisState) GetFidCidList() []FidCid { - if m != nil { - return m.FidCidList - } - return nil -} - func (m *GenesisState) GetPaymentInfoList() []StoragePaymentInfo { if m != nil { return m.PaymentInfoList @@ -157,40 +133,37 @@ func init() { } var fileDescriptor_a52da9fdb04c8b35 = []byte{ - // 515 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0xc1, 0x6e, 0xd3, 0x30, - 0x18, 0xc7, 0x1b, 0x36, 0x0a, 0x38, 0x65, 0xd3, 0xc2, 0x90, 0xaa, 0x0a, 0x65, 0xdd, 0x04, 0xa2, - 0x17, 0x12, 0xa9, 0xdc, 0xb8, 0xb1, 0x4e, 0x43, 0x93, 0x22, 0xa8, 0xd6, 0xdb, 0x2e, 0xd1, 0xd7, - 0xc4, 0xc9, 0x0c, 0x49, 0x1c, 0xd9, 0x66, 0xa2, 0x6f, 0xc1, 0x63, 0xed, 0xb8, 0x23, 0x27, 0x84, - 0xda, 0x07, 0xe0, 0x15, 0xd0, 0x3e, 0x3b, 0x69, 0x99, 0xd2, 0x9c, 0xda, 0x58, 0xbf, 0xef, 0xe7, - 0x4f, 0xff, 0xbf, 0x4c, 0x4e, 0x22, 0x28, 0x58, 0x41, 0xc3, 0xe8, 0x1a, 0x58, 0xe1, 0x4b, 0xc5, - 0x05, 0xa4, 0xd4, 0x4f, 0x69, 0x41, 0x25, 0x93, 0x5e, 0x29, 0xb8, 0xe2, 0xce, 0xe1, 0x26, 0xe3, - 0x19, 0x66, 0x70, 0x98, 0xf2, 0x94, 0x23, 0xe0, 0xdf, 0xff, 0xd3, 0xec, 0xe0, 0xb8, 0xd1, 0x57, - 0x82, 0x80, 0xdc, 0xe8, 0x06, 0xaf, 0x1b, 0x91, 0x88, 0x17, 0x4a, 0x40, 0xa4, 0x2a, 0xea, 0x6d, - 0x23, 0x05, 0x91, 0x62, 0x37, 0x34, 0x8c, 0x29, 0x64, 0xed, 0xba, 0x52, 0xf0, 0x1b, 0x16, 0x53, - 0x21, 0x5b, 0xf7, 0x92, 0x4a, 0xc0, 0xa2, 0x42, 0x9a, 0xa3, 0x48, 0x58, 0x1c, 0x46, 0x2c, 0x6e, - 0xdd, 0xaa, 0x84, 0x45, 0x4e, 0x0b, 0x15, 0xb2, 0x22, 0x31, 0x39, 0x9c, 0xfc, 0xed, 0x92, 0xde, - 0x27, 0x9d, 0xe2, 0x4c, 0x81, 0xa2, 0xce, 0x07, 0xd2, 0xd5, 0x29, 0xf4, 0xad, 0xa1, 0x35, 0xb2, - 0xc7, 0xaf, 0xbc, 0xa6, 0x54, 0xbd, 0x29, 0x32, 0xa7, 0xbb, 0xb7, 0xbf, 0x8f, 0x3a, 0x97, 0x66, - 0xc2, 0x09, 0xc8, 0x5e, 0x1d, 0x4f, 0x98, 0x31, 0xa9, 0xfa, 0x8f, 0x86, 0x3b, 0x23, 0x7b, 0x7c, - 0xd4, 0xec, 0x98, 0x54, 0xac, 0xd1, 0x3c, 0xaf, 0x87, 0x03, 0x26, 0x95, 0x33, 0x23, 0x07, 0x9b, - 0x31, 0x6a, 0xe1, 0x0e, 0x0a, 0x8f, 0x9b, 0x85, 0x1f, 0x11, 0x3f, 0xbb, 0xa7, 0x8d, 0x72, 0x1f, - 0xd6, 0x47, 0x28, 0x0d, 0xc8, 0x5e, 0x1d, 0xb9, 0x36, 0xee, 0xb6, 0xad, 0x38, 0xad, 0xd8, 0x6a, - 0xc5, 0x7a, 0x18, 0x6d, 0x13, 0x62, 0xeb, 0x6a, 0xb4, 0xaa, 0x8b, 0xaa, 0x2d, 0x89, 0xcd, 0x10, - 0x34, 0x1e, 0xa2, 0xc7, 0x50, 0x72, 0x46, 0x7a, 0xa6, 0x3c, 0x6d, 0x79, 0xdc, 0x66, 0x39, 0x67, - 0xf1, 0x84, 0xc5, 0x95, 0x25, 0xc1, 0x2f, 0xb4, 0x5c, 0x91, 0x83, 0xcd, 0x7a, 0xb5, 0xea, 0x09, - 0xaa, 0x46, 0xdb, 0x16, 0xc2, 0xdf, 0xa9, 0x9e, 0xba, 0x28, 0x12, 0x5e, 0x85, 0x56, 0xae, 0x8f, - 0xd0, 0xfd, 0x85, 0xec, 0x47, 0x3c, 0xcb, 0x40, 0x51, 0x01, 0x99, 0x36, 0x3f, 0x45, 0xf3, 0x70, - 0x5b, 0xb1, 0x15, 0x6c, 0x8c, 0x7b, 0xeb, 0x71, 0x14, 0x86, 0xe4, 0xa5, 0xa9, 0xf6, 0x41, 0x19, - 0xcf, 0x50, 0xfb, 0xa6, 0xad, 0xde, 0x87, 0x95, 0xbc, 0x80, 0xff, 0x8f, 0xf1, 0x82, 0x0b, 0xd2, - 0x13, 0xb4, 0xe4, 0x42, 0x85, 0x09, 0x17, 0xb9, 0xec, 0x93, 0xb6, 0x75, 0x2f, 0x91, 0x3c, 0xe7, - 0x22, 0x37, 0x4a, 0x5b, 0xd4, 0x27, 0xd2, 0xf9, 0x4c, 0x7a, 0xa0, 0x14, 0x95, 0x95, 0xca, 0x6e, - 0x5d, 0x11, 0x49, 0x50, 0x8c, 0x17, 0x9b, 0x3e, 0x2d, 0x40, 0xdf, 0x69, 0x70, 0xbb, 0x74, 0xad, - 0xbb, 0xa5, 0x6b, 0xfd, 0x59, 0xba, 0xd6, 0xcf, 0x95, 0xdb, 0xb9, 0x5b, 0xb9, 0x9d, 0x5f, 0x2b, - 0xb7, 0x73, 0x35, 0x4e, 0x99, 0xba, 0xfe, 0x3e, 0xf7, 0x22, 0x9e, 0xfb, 0x5f, 0x21, 0xfa, 0x06, - 0x59, 0x00, 0x73, 0xe9, 0xeb, 0x8b, 0xde, 0xe9, 0xa7, 0xfc, 0xa3, 0x7e, 0xcc, 0x6a, 0x51, 0x52, - 0x39, 0xef, 0xe2, 0x33, 0x7e, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x1d, 0x7c, 0x14, 0x20, - 0x05, 0x00, 0x00, + // 469 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x6f, 0xd3, 0x4c, + 0x10, 0x86, 0xe3, 0xaf, 0x6d, 0xbe, 0xb2, 0x09, 0xad, 0x30, 0x45, 0x8a, 0x22, 0xe4, 0xa6, 0x15, + 0x88, 0x5c, 0xb0, 0xa5, 0x70, 0xe3, 0x46, 0x41, 0x45, 0x95, 0x22, 0xa8, 0x5a, 0x71, 0xe9, 0xc5, + 0x9a, 0xac, 0xd7, 0xee, 0x82, 0xbd, 0x6b, 0xed, 0x0e, 0x15, 0xf9, 0x05, 0x5c, 0xf9, 0x59, 0x3d, + 0xf6, 0xc8, 0x09, 0xa1, 0xe4, 0x8f, 0xa0, 0xee, 0x6e, 0xdc, 0x50, 0x2d, 0x3e, 0x25, 0x1a, 0x3d, + 0xef, 0xb3, 0xe3, 0x57, 0x43, 0x0e, 0x29, 0x08, 0x2e, 0x58, 0x4a, 0x2f, 0x81, 0x8b, 0x44, 0xa3, + 0x54, 0x50, 0xb0, 0xa4, 0x60, 0x82, 0x69, 0xae, 0xe3, 0x5a, 0x49, 0x94, 0xe1, 0xde, 0x3a, 0x13, + 0x3b, 0x66, 0xb8, 0x57, 0xc8, 0x42, 0x1a, 0x20, 0xb9, 0xfd, 0x67, 0xd9, 0xe1, 0x81, 0xd7, 0x57, + 0x83, 0x82, 0xca, 0xe9, 0x86, 0xcf, 0xbc, 0x08, 0x95, 0x02, 0x15, 0x50, 0x5c, 0x51, 0x2f, 0xbc, + 0x14, 0x50, 0xe4, 0x57, 0x2c, 0xcd, 0x18, 0x94, 0xed, 0xba, 0x5a, 0xc9, 0x2b, 0x9e, 0x31, 0xa5, + 0x5b, 0xf7, 0xd2, 0xa8, 0x60, 0xbe, 0x42, 0xfc, 0x55, 0xe4, 0x3c, 0x4b, 0x29, 0xcf, 0x5a, 0xb7, + 0xaa, 0x61, 0x5e, 0x31, 0x81, 0x29, 0x17, 0xb9, 0xeb, 0xe1, 0xf0, 0xfb, 0x16, 0xe9, 0xbf, 0xb7, + 0x2d, 0x9e, 0x23, 0x20, 0x0b, 0x5f, 0x93, 0xae, 0x6d, 0x61, 0x10, 0x8c, 0x82, 0x71, 0x6f, 0xf2, + 0x34, 0xf6, 0xb5, 0x1a, 0x9f, 0x1a, 0xe6, 0x68, 0xf3, 0xfa, 0xd7, 0x7e, 0xe7, 0xcc, 0x25, 0xc2, + 0x77, 0xe4, 0x41, 0xce, 0x4b, 0x96, 0x96, 0x5c, 0xe3, 0xe0, 0xbf, 0xd1, 0xc6, 0xb8, 0x37, 0x39, + 0xf0, 0xc7, 0x3f, 0x09, 0x9e, 0x73, 0x96, 0x1d, 0xf3, 0x92, 0x39, 0xc7, 0xf6, 0x6d, 0x72, 0xca, + 0x35, 0x86, 0x53, 0xb2, 0xd3, 0xb4, 0x62, 0x55, 0x1b, 0x46, 0xb5, 0xff, 0x8f, 0x4d, 0x56, 0xac, + 0x13, 0x3d, 0x6c, 0xc2, 0xc6, 0x76, 0x41, 0x1e, 0xad, 0x7f, 0xb6, 0x15, 0x6e, 0x1a, 0xe1, 0xd8, + 0x2f, 0x3c, 0xb7, 0xbf, 0xa7, 0x36, 0x75, 0x22, 0x72, 0xe9, 0xcc, 0xbb, 0xf5, 0xdd, 0xc8, 0xb8, + 0x3f, 0x92, 0x5d, 0x2a, 0xcb, 0x12, 0x90, 0x29, 0x28, 0xad, 0x79, 0xcb, 0x98, 0x47, 0x7e, 0xf3, + 0xdb, 0x06, 0x76, 0xc6, 0x9d, 0xbb, 0xb8, 0x11, 0xa6, 0xe4, 0x89, 0xbb, 0x9c, 0x7b, 0x0d, 0x74, + 0x8d, 0xf6, 0xb9, 0x5f, 0xfb, 0xc6, 0x44, 0xee, 0xf7, 0xf0, 0x18, 0xfe, 0x1e, 0x9b, 0x07, 0x4e, + 0x48, 0x5f, 0xb1, 0x5a, 0x2a, 0x4c, 0x73, 0xa9, 0x2a, 0x3d, 0xf8, 0xbf, 0x6d, 0xdd, 0x33, 0x43, + 0x1e, 0x4b, 0x55, 0x39, 0x65, 0x4f, 0x35, 0x13, 0x1d, 0x7e, 0x20, 0x7d, 0x40, 0x64, 0x7a, 0xa5, + 0xda, 0x6e, 0x5d, 0xd1, 0x90, 0x80, 0x5c, 0x8a, 0x75, 0x9f, 0x15, 0x18, 0xdf, 0xd1, 0xf4, 0x7a, + 0x11, 0x05, 0x37, 0x8b, 0x28, 0xf8, 0xbd, 0x88, 0x82, 0x1f, 0xcb, 0xa8, 0x73, 0xb3, 0x8c, 0x3a, + 0x3f, 0x97, 0x51, 0xe7, 0x62, 0x52, 0x70, 0xbc, 0xfc, 0x3a, 0x8b, 0xa9, 0xac, 0x92, 0xcf, 0x40, + 0xbf, 0x40, 0x39, 0x85, 0x99, 0x4e, 0xec, 0x43, 0x2f, 0xed, 0x89, 0x7f, 0x6b, 0x8e, 0x1c, 0xe7, + 0x35, 0xd3, 0xb3, 0xae, 0x39, 0xef, 0x57, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x72, 0x7e, 0x95, + 0xad, 0x38, 0x04, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -224,7 +197,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x5a + dAtA[i] = 0x42 } } if len(m.ReportForms) > 0 { @@ -238,7 +211,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x52 + dAtA[i] = 0x3a } } if len(m.ActiveProvidersList) > 0 { @@ -252,7 +225,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x4a + dAtA[i] = 0x32 } } if len(m.CollateralList) > 0 { @@ -266,7 +239,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x42 + dAtA[i] = 0x2a } } if len(m.PaymentInfoList) > 0 { @@ -280,35 +253,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x3a - } - } - if len(m.StraysList) > 0 { - for iNdEx := len(m.StraysList) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.StraysList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - } - if len(m.FidCidList) > 0 { - for iNdEx := len(m.FidCidList) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.FidCidList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a + dAtA[i] = 0x22 } } if len(m.ProvidersList) > 0 { @@ -322,27 +267,13 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - } - } - if len(m.ActiveDealsList) > 0 { - for iNdEx := len(m.ActiveDealsList) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.ActiveDealsList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- dAtA[i] = 0x1a } } - if len(m.ContractsList) > 0 { - for iNdEx := len(m.ContractsList) - 1; iNdEx >= 0; iNdEx-- { + if len(m.FileList) > 0 { + for iNdEx := len(m.FileList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.ContractsList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.FileList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -385,14 +316,8 @@ func (m *GenesisState) Size() (n int) { _ = l l = m.Params.Size() n += 1 + l + sovGenesis(uint64(l)) - if len(m.ContractsList) > 0 { - for _, e := range m.ContractsList { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - if len(m.ActiveDealsList) > 0 { - for _, e := range m.ActiveDealsList { + if len(m.FileList) > 0 { + for _, e := range m.FileList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } @@ -403,18 +328,6 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.FidCidList) > 0 { - for _, e := range m.FidCidList { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - if len(m.StraysList) > 0 { - for _, e := range m.StraysList { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } if len(m.PaymentInfoList) > 0 { for _, e := range m.PaymentInfoList { l = e.Size() @@ -518,7 +431,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContractsList", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FileList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -545,46 +458,12 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ContractsList = append(m.ContractsList, Contracts{}) - if err := m.ContractsList[len(m.ContractsList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.FileList = append(m.FileList, UnifiedFile{}) + if err := m.FileList[len(m.FileList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ActiveDealsList", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ActiveDealsList = append(m.ActiveDealsList, ActiveDeals{}) - if err := m.ActiveDealsList[len(m.ActiveDealsList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProvidersList", wireType) } @@ -618,75 +497,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FidCidList", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.FidCidList = append(m.FidCidList, FidCid{}) - if err := m.FidCidList[len(m.FidCidList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StraysList", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.StraysList = append(m.StraysList, Strays{}) - if err := m.StraysList[len(m.StraysList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field PaymentInfoList", wireType) } @@ -720,7 +531,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 8: + case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field CollateralList", wireType) } @@ -754,7 +565,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 9: + case 6: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ActiveProvidersList", wireType) } @@ -788,7 +599,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 10: + case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ReportForms", wireType) } @@ -822,7 +633,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 11: + case 8: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field AttestForms", wireType) } diff --git a/x/storage/types/genesis_test.go b/x/storage/types/genesis_test.go index 96c0ec1d4..5be6514b6 100644 --- a/x/storage/types/genesis_test.go +++ b/x/storage/types/genesis_test.go @@ -21,20 +21,16 @@ func TestGenesisState_Validate(t *testing.T) { { desc: "valid genesis state", genState: &types.GenesisState{ - ContractsList: []types.Contracts{ + FileList: []types.UnifiedFile{ { - Cid: "0", + Merkle: []byte("0"), + Owner: "0", + Start: 0, }, { - Cid: "1", - }, - }, - ActiveDealsList: []types.ActiveDeals{ - { - Cid: "0", - }, - { - Cid: "1", + Merkle: []byte("1"), + Owner: "1", + Start: 0, }, }, ProvidersList: []types.Providers{ @@ -46,49 +42,24 @@ func TestGenesisState_Validate(t *testing.T) { }, }, - StraysList: []types.Strays{ - { - Cid: "0", - }, - { - Cid: "1", - }, - }, - FidCidList: []types.FidCid{ - { - Fid: "0", - }, - { - Fid: "1", - }, - }, // this line is used by starport scaffolding # types/genesis/validField }, valid: true, }, - { - desc: "duplicated contracts", - genState: &types.GenesisState{ - ContractsList: []types.Contracts{ - { - Cid: "0", - }, - { - Cid: "0", - }, - }, - }, - valid: false, - }, + { desc: "duplicated activeDeals", genState: &types.GenesisState{ - ActiveDealsList: []types.ActiveDeals{ + FileList: []types.UnifiedFile{ { - Cid: "0", + Merkle: []byte("0"), + Owner: "0", + Start: 0, }, { - Cid: "0", + Merkle: []byte("0"), + Owner: "0", + Start: 0, }, }, }, @@ -109,34 +80,6 @@ func TestGenesisState_Validate(t *testing.T) { valid: false, }, - { - desc: "duplicated strays", - genState: &types.GenesisState{ - StraysList: []types.Strays{ - { - Cid: "0", - }, - { - Cid: "0", - }, - }, - }, - valid: false, - }, - { - desc: "duplicated fidCid", - genState: &types.GenesisState{ - FidCidList: []types.FidCid{ - { - Fid: "0", - }, - { - Fid: "0", - }, - }, - }, - valid: false, - }, // this line is used by starport scaffolding # types/genesis/testcase } { t.Run(tc.desc, func(t *testing.T) { diff --git a/x/storage/types/key_active_deals.go b/x/storage/types/key_active_deals.go deleted file mode 100644 index 1c667ab7c..000000000 --- a/x/storage/types/key_active_deals.go +++ /dev/null @@ -1,23 +0,0 @@ -package types - -import "encoding/binary" - -var _ binary.ByteOrder - -const ( - // ActiveDealsKeyPrefix is the prefix to retrieve all ActiveDeals - ActiveDealsKeyPrefix = "ActiveDeals/value/" -) - -// ActiveDealsKey returns the store key to retrieve a ActiveDeals from the index fields -func ActiveDealsKey( - cid string, -) []byte { - var key []byte - - cidBytes := []byte(cid) - key = append(key, cidBytes...) - key = append(key, []byte("/")...) - - return key -} diff --git a/x/storage/types/key_files.go b/x/storage/types/key_files.go new file mode 100644 index 000000000..8b385e22e --- /dev/null +++ b/x/storage/types/key_files.go @@ -0,0 +1,60 @@ +package types + +import ( + "encoding/binary" + "fmt" +) + +var _ binary.ByteOrder + +const ( + FileSecondaryKeyPrefix = "FilesByOwner/value/" + FilePrimaryKeyPrefix = "FilesByMerkle/value/" + ProofKeyPrefix = "FileProof/value/" + + LegacyActiveDealsKeyPrefix = "ActiveDeals/value/" // OLD! DO NOT USE! + +) + +// FilesPrimaryKey returns the store key to retrieve a File from the index fields ordered by merkle +func FilesPrimaryKey( + merkle []byte, + owner string, + start int64, +) []byte { + return []byte(fmt.Sprintf("%x/%s/%d/", merkle, owner, start)) +} + +// FilesSecondaryKey returns the store key to retrieve a File from the index fields ordered by owner +func FilesSecondaryKey( + merkle []byte, + owner string, + start int64, +) []byte { + return []byte(fmt.Sprintf("%s/%x/%d/", owner, merkle, start)) +} + +// ProofKey returns the store key to retrieve a proof from the index fields ordered by owner +func ProofKey( + prover string, + merkle []byte, + owner string, + start int64, +) []byte { + return []byte(fmt.Sprintf("%s/%s/%x/%d/", prover, owner, merkle, start)) +} + +// LegacyActiveDealsKey returns the store key to retrieve a ActiveDeals from the index fields +// +// Deprecated: UnifiedFile replaced Active Deals as the correct data structure +func LegacyActiveDealsKey( + cid string, +) []byte { + var key []byte + + cidBytes := []byte(cid) + key = append(key, cidBytes...) + key = append(key, []byte("/")...) + + return key +} diff --git a/x/storage/types/proof_loader.go b/x/storage/types/proof_loader.go new file mode 100644 index 000000000..f5999912b --- /dev/null +++ b/x/storage/types/proof_loader.go @@ -0,0 +1,15 @@ +package types + +import sdk "github.com/cosmos/cosmos-sdk/types" + +type ProofLoader interface { + SetProof(ctx sdk.Context, Proof FileProof) + GetProofWithBuiltKey( + ctx sdk.Context, + key []byte, + ) (val FileProof, found bool) + RemoveProofWithBuiltKey( + ctx sdk.Context, + key []byte, + ) +} diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index 2e8f7e75c..a24d59640 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -114,22 +114,22 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -type QueryContractRequest struct { - Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` +type QueryFileRequest struct { + Merkle string `protobuf:"bytes,1,opt,name=merkle,proto3" json:"merkle,omitempty"` } -func (m *QueryContractRequest) Reset() { *m = QueryContractRequest{} } -func (m *QueryContractRequest) String() string { return proto.CompactTextString(m) } -func (*QueryContractRequest) ProtoMessage() {} -func (*QueryContractRequest) Descriptor() ([]byte, []int) { +func (m *QueryFileRequest) Reset() { *m = QueryFileRequest{} } +func (m *QueryFileRequest) String() string { return proto.CompactTextString(m) } +func (*QueryFileRequest) ProtoMessage() {} +func (*QueryFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{2} } -func (m *QueryContractRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFileRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryContractRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryContractRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFileRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -139,41 +139,41 @@ func (m *QueryContractRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryContractRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryContractRequest.Merge(m, src) +func (m *QueryFileRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFileRequest.Merge(m, src) } -func (m *QueryContractRequest) XXX_Size() int { +func (m *QueryFileRequest) XXX_Size() int { return m.Size() } -func (m *QueryContractRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryContractRequest.DiscardUnknown(m) +func (m *QueryFileRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFileRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryContractRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFileRequest proto.InternalMessageInfo -func (m *QueryContractRequest) GetCid() string { +func (m *QueryFileRequest) GetMerkle() string { if m != nil { - return m.Cid + return m.Merkle } return "" } -type QueryContractResponse struct { - Contracts Contracts `protobuf:"bytes,1,opt,name=contracts,proto3" json:"contracts"` +type QueryFileResponse struct { + File UnifiedFile `protobuf:"bytes,1,opt,name=file,proto3" json:"file"` } -func (m *QueryContractResponse) Reset() { *m = QueryContractResponse{} } -func (m *QueryContractResponse) String() string { return proto.CompactTextString(m) } -func (*QueryContractResponse) ProtoMessage() {} -func (*QueryContractResponse) Descriptor() ([]byte, []int) { +func (m *QueryFileResponse) Reset() { *m = QueryFileResponse{} } +func (m *QueryFileResponse) String() string { return proto.CompactTextString(m) } +func (*QueryFileResponse) ProtoMessage() {} +func (*QueryFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{3} } -func (m *QueryContractResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFileResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryContractResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFileResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -183,41 +183,41 @@ func (m *QueryContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byt return b[:n], nil } } -func (m *QueryContractResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryContractResponse.Merge(m, src) +func (m *QueryFileResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFileResponse.Merge(m, src) } -func (m *QueryContractResponse) XXX_Size() int { +func (m *QueryFileResponse) XXX_Size() int { return m.Size() } -func (m *QueryContractResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryContractResponse.DiscardUnknown(m) +func (m *QueryFileResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFileResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryContractResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryFileResponse proto.InternalMessageInfo -func (m *QueryContractResponse) GetContracts() Contracts { +func (m *QueryFileResponse) GetFile() UnifiedFile { if m != nil { - return m.Contracts + return m.File } - return Contracts{} + return UnifiedFile{} } -type QueryAllContractsRequest struct { +type QueryAllFilesRequest struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllContractsRequest) Reset() { *m = QueryAllContractsRequest{} } -func (m *QueryAllContractsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllContractsRequest) ProtoMessage() {} -func (*QueryAllContractsRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllFilesRequest) Reset() { *m = QueryAllFilesRequest{} } +func (m *QueryAllFilesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllFilesRequest) ProtoMessage() {} +func (*QueryAllFilesRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{4} } -func (m *QueryAllContractsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllFilesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllContractsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllContractsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllFilesRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -227,137 +227,42 @@ func (m *QueryAllContractsRequest) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *QueryAllContractsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllContractsRequest.Merge(m, src) +func (m *QueryAllFilesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllFilesRequest.Merge(m, src) } -func (m *QueryAllContractsRequest) XXX_Size() int { +func (m *QueryAllFilesRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllContractsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllContractsRequest.DiscardUnknown(m) +func (m *QueryAllFilesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllFilesRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllContractsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllFilesRequest proto.InternalMessageInfo -func (m *QueryAllContractsRequest) GetPagination() *query.PageRequest { +func (m *QueryAllFilesRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllContractsResponse struct { - Contracts []Contracts `protobuf:"bytes,1,rep,name=contracts,proto3" json:"contracts"` +type QueryAllFilesResponse struct { + Files []UnifiedFile `protobuf:"bytes,1,rep,name=files,proto3" json:"files"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllContractsResponse) Reset() { *m = QueryAllContractsResponse{} } -func (m *QueryAllContractsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllContractsResponse) ProtoMessage() {} -func (*QueryAllContractsResponse) Descriptor() ([]byte, []int) { +func (m *QueryAllFilesResponse) Reset() { *m = QueryAllFilesResponse{} } +func (m *QueryAllFilesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllFilesResponse) ProtoMessage() {} +func (*QueryAllFilesResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{5} } -func (m *QueryAllContractsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryAllContractsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryAllContractsResponse.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 *QueryAllContractsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllContractsResponse.Merge(m, src) -} -func (m *QueryAllContractsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryAllContractsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllContractsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryAllContractsResponse proto.InternalMessageInfo - -func (m *QueryAllContractsResponse) GetContracts() []Contracts { - if m != nil { - return m.Contracts - } - return nil -} - -func (m *QueryAllContractsResponse) GetPagination() *query.PageResponse { - if m != nil { - return m.Pagination - } - return nil -} - -type QueryActiveDealRequest struct { - Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` -} - -func (m *QueryActiveDealRequest) Reset() { *m = QueryActiveDealRequest{} } -func (m *QueryActiveDealRequest) String() string { return proto.CompactTextString(m) } -func (*QueryActiveDealRequest) ProtoMessage() {} -func (*QueryActiveDealRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{6} -} -func (m *QueryActiveDealRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryActiveDealRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryActiveDealRequest.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 *QueryActiveDealRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryActiveDealRequest.Merge(m, src) -} -func (m *QueryActiveDealRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryActiveDealRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryActiveDealRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryActiveDealRequest proto.InternalMessageInfo - -func (m *QueryActiveDealRequest) GetCid() string { - if m != nil { - return m.Cid - } - return "" -} - -type QueryActiveDealResponse struct { - ActiveDeals ActiveDeals `protobuf:"bytes,1,opt,name=active_deals,json=activeDeals,proto3" json:"active_deals"` -} - -func (m *QueryActiveDealResponse) Reset() { *m = QueryActiveDealResponse{} } -func (m *QueryActiveDealResponse) String() string { return proto.CompactTextString(m) } -func (*QueryActiveDealResponse) ProtoMessage() {} -func (*QueryActiveDealResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{7} -} -func (m *QueryActiveDealResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllFilesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryActiveDealResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllFilesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryActiveDealResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllFilesResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -367,115 +272,26 @@ func (m *QueryActiveDealResponse) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QueryActiveDealResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryActiveDealResponse.Merge(m, src) +func (m *QueryAllFilesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllFilesResponse.Merge(m, src) } -func (m *QueryActiveDealResponse) XXX_Size() int { +func (m *QueryAllFilesResponse) XXX_Size() int { return m.Size() } -func (m *QueryActiveDealResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryActiveDealResponse.DiscardUnknown(m) +func (m *QueryAllFilesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllFilesResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryActiveDealResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllFilesResponse proto.InternalMessageInfo -func (m *QueryActiveDealResponse) GetActiveDeals() ActiveDeals { +func (m *QueryAllFilesResponse) GetFiles() []UnifiedFile { if m != nil { - return m.ActiveDeals - } - return ActiveDeals{} -} - -type QueryAllActiveDealsRequest struct { - Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryAllActiveDealsRequest) Reset() { *m = QueryAllActiveDealsRequest{} } -func (m *QueryAllActiveDealsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllActiveDealsRequest) ProtoMessage() {} -func (*QueryAllActiveDealsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{8} -} -func (m *QueryAllActiveDealsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryAllActiveDealsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryAllActiveDealsRequest.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 *QueryAllActiveDealsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllActiveDealsRequest.Merge(m, src) -} -func (m *QueryAllActiveDealsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryAllActiveDealsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllActiveDealsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryAllActiveDealsRequest proto.InternalMessageInfo - -func (m *QueryAllActiveDealsRequest) GetPagination() *query.PageRequest { - if m != nil { - return m.Pagination - } - return nil -} - -type QueryAllActiveDealsResponse struct { - ActiveDeals []ActiveDeals `protobuf:"bytes,1,rep,name=active_deals,json=activeDeals,proto3" json:"active_deals"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryAllActiveDealsResponse) Reset() { *m = QueryAllActiveDealsResponse{} } -func (m *QueryAllActiveDealsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllActiveDealsResponse) ProtoMessage() {} -func (*QueryAllActiveDealsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{9} -} -func (m *QueryAllActiveDealsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryAllActiveDealsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryAllActiveDealsResponse.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 *QueryAllActiveDealsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllActiveDealsResponse.Merge(m, src) -} -func (m *QueryAllActiveDealsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryAllActiveDealsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllActiveDealsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryAllActiveDealsResponse proto.InternalMessageInfo - -func (m *QueryAllActiveDealsResponse) GetActiveDeals() []ActiveDeals { - if m != nil { - return m.ActiveDeals + return m.Files } return nil } -func (m *QueryAllActiveDealsResponse) GetPagination() *query.PageResponse { +func (m *QueryAllFilesResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } @@ -490,7 +306,7 @@ func (m *QueryProviderRequest) Reset() { *m = QueryProviderRequest{} } func (m *QueryProviderRequest) String() string { return proto.CompactTextString(m) } func (*QueryProviderRequest) ProtoMessage() {} func (*QueryProviderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{10} + return fileDescriptor_9fe03bff51a37284, []int{6} } func (m *QueryProviderRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -534,7 +350,7 @@ func (m *QueryProviderResponse) Reset() { *m = QueryProviderResponse{} } func (m *QueryProviderResponse) String() string { return proto.CompactTextString(m) } func (*QueryProviderResponse) ProtoMessage() {} func (*QueryProviderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{11} + return fileDescriptor_9fe03bff51a37284, []int{7} } func (m *QueryProviderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -578,7 +394,7 @@ func (m *QueryAllProvidersRequest) Reset() { *m = QueryAllProvidersReque func (m *QueryAllProvidersRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllProvidersRequest) ProtoMessage() {} func (*QueryAllProvidersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{12} + return fileDescriptor_9fe03bff51a37284, []int{8} } func (m *QueryAllProvidersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -623,7 +439,7 @@ func (m *QueryAllProvidersResponse) Reset() { *m = QueryAllProvidersResp func (m *QueryAllProvidersResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllProvidersResponse) ProtoMessage() {} func (*QueryAllProvidersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{13} + return fileDescriptor_9fe03bff51a37284, []int{9} } func (m *QueryAllProvidersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -674,7 +490,7 @@ func (m *QueryAttestationRequest) Reset() { *m = QueryAttestationRequest func (m *QueryAttestationRequest) String() string { return proto.CompactTextString(m) } func (*QueryAttestationRequest) ProtoMessage() {} func (*QueryAttestationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{14} + return fileDescriptor_9fe03bff51a37284, []int{10} } func (m *QueryAttestationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -718,7 +534,7 @@ func (m *QueryAttestationResponse) Reset() { *m = QueryAttestationRespon func (m *QueryAttestationResponse) String() string { return proto.CompactTextString(m) } func (*QueryAttestationResponse) ProtoMessage() {} func (*QueryAttestationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{15} + return fileDescriptor_9fe03bff51a37284, []int{11} } func (m *QueryAttestationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -762,7 +578,7 @@ func (m *QueryAllAttestationsRequest) Reset() { *m = QueryAllAttestation func (m *QueryAllAttestationsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllAttestationsRequest) ProtoMessage() {} func (*QueryAllAttestationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{16} + return fileDescriptor_9fe03bff51a37284, []int{12} } func (m *QueryAllAttestationsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -807,7 +623,7 @@ func (m *QueryAllAttestationsResponse) Reset() { *m = QueryAllAttestatio func (m *QueryAllAttestationsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllAttestationsResponse) ProtoMessage() {} func (*QueryAllAttestationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{17} + return fileDescriptor_9fe03bff51a37284, []int{13} } func (m *QueryAllAttestationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -858,7 +674,7 @@ func (m *QueryReportRequest) Reset() { *m = QueryReportRequest{} } func (m *QueryReportRequest) String() string { return proto.CompactTextString(m) } func (*QueryReportRequest) ProtoMessage() {} func (*QueryReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{18} + return fileDescriptor_9fe03bff51a37284, []int{14} } func (m *QueryReportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -902,7 +718,7 @@ func (m *QueryReportResponse) Reset() { *m = QueryReportResponse{} } func (m *QueryReportResponse) String() string { return proto.CompactTextString(m) } func (*QueryReportResponse) ProtoMessage() {} func (*QueryReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{19} + return fileDescriptor_9fe03bff51a37284, []int{15} } func (m *QueryReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -946,7 +762,7 @@ func (m *QueryAllReportRequest) Reset() { *m = QueryAllReportRequest{} } func (m *QueryAllReportRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllReportRequest) ProtoMessage() {} func (*QueryAllReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{20} + return fileDescriptor_9fe03bff51a37284, []int{16} } func (m *QueryAllReportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -991,7 +807,7 @@ func (m *QueryAllReportResponse) Reset() { *m = QueryAllReportResponse{} func (m *QueryAllReportResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllReportResponse) ProtoMessage() {} func (*QueryAllReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{21} + return fileDescriptor_9fe03bff51a37284, []int{17} } func (m *QueryAllReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1042,7 +858,7 @@ func (m *QueryFreespaceRequest) Reset() { *m = QueryFreespaceRequest{} } func (m *QueryFreespaceRequest) String() string { return proto.CompactTextString(m) } func (*QueryFreespaceRequest) ProtoMessage() {} func (*QueryFreespaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{22} + return fileDescriptor_9fe03bff51a37284, []int{18} } func (m *QueryFreespaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1086,7 +902,7 @@ func (m *QueryStoreCountRequest) Reset() { *m = QueryStoreCountRequest{} func (m *QueryStoreCountRequest) String() string { return proto.CompactTextString(m) } func (*QueryStoreCountRequest) ProtoMessage() {} func (*QueryStoreCountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{23} + return fileDescriptor_9fe03bff51a37284, []int{19} } func (m *QueryStoreCountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1130,7 +946,7 @@ func (m *QueryFreespaceResponse) Reset() { *m = QueryFreespaceResponse{} func (m *QueryFreespaceResponse) String() string { return proto.CompactTextString(m) } func (*QueryFreespaceResponse) ProtoMessage() {} func (*QueryFreespaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{24} + return fileDescriptor_9fe03bff51a37284, []int{20} } func (m *QueryFreespaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1174,7 +990,7 @@ func (m *QueryStoreCountResponse) Reset() { *m = QueryStoreCountResponse func (m *QueryStoreCountResponse) String() string { return proto.CompactTextString(m) } func (*QueryStoreCountResponse) ProtoMessage() {} func (*QueryStoreCountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{25} + return fileDescriptor_9fe03bff51a37284, []int{21} } func (m *QueryStoreCountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1218,7 +1034,7 @@ func (m *QueryFindFileRequest) Reset() { *m = QueryFindFileRequest{} } func (m *QueryFindFileRequest) String() string { return proto.CompactTextString(m) } func (*QueryFindFileRequest) ProtoMessage() {} func (*QueryFindFileRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{26} + return fileDescriptor_9fe03bff51a37284, []int{22} } func (m *QueryFindFileRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1262,7 +1078,7 @@ func (m *QueryFindFileResponse) Reset() { *m = QueryFindFileResponse{} } func (m *QueryFindFileResponse) String() string { return proto.CompactTextString(m) } func (*QueryFindFileResponse) ProtoMessage() {} func (*QueryFindFileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{27} + return fileDescriptor_9fe03bff51a37284, []int{23} } func (m *QueryFindFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1298,22 +1114,22 @@ func (m *QueryFindFileResponse) GetProviderIps() string { return "" } -type QueryStrayRequest struct { - Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` +type QueryClientFreeSpaceRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryStrayRequest) Reset() { *m = QueryStrayRequest{} } -func (m *QueryStrayRequest) String() string { return proto.CompactTextString(m) } -func (*QueryStrayRequest) ProtoMessage() {} -func (*QueryStrayRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{28} +func (m *QueryClientFreeSpaceRequest) Reset() { *m = QueryClientFreeSpaceRequest{} } +func (m *QueryClientFreeSpaceRequest) String() string { return proto.CompactTextString(m) } +func (*QueryClientFreeSpaceRequest) ProtoMessage() {} +func (*QueryClientFreeSpaceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{24} } -func (m *QueryStrayRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryClientFreeSpaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryStrayRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryClientFreeSpaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryStrayRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryClientFreeSpaceRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1323,41 +1139,41 @@ func (m *QueryStrayRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, e return b[:n], nil } } -func (m *QueryStrayRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryStrayRequest.Merge(m, src) +func (m *QueryClientFreeSpaceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClientFreeSpaceRequest.Merge(m, src) } -func (m *QueryStrayRequest) XXX_Size() int { +func (m *QueryClientFreeSpaceRequest) XXX_Size() int { return m.Size() } -func (m *QueryStrayRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryStrayRequest.DiscardUnknown(m) +func (m *QueryClientFreeSpaceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClientFreeSpaceRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryStrayRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryClientFreeSpaceRequest proto.InternalMessageInfo -func (m *QueryStrayRequest) GetCid() string { +func (m *QueryClientFreeSpaceRequest) GetAddress() string { if m != nil { - return m.Cid + return m.Address } return "" } -type QueryStrayResponse struct { - Strays Strays `protobuf:"bytes,1,opt,name=strays,proto3" json:"strays"` +type QueryClientFreeSpaceResponse struct { + Bytesfree int64 `protobuf:"varint,1,opt,name=bytesfree,proto3" json:"bytesfree,omitempty"` } -func (m *QueryStrayResponse) Reset() { *m = QueryStrayResponse{} } -func (m *QueryStrayResponse) String() string { return proto.CompactTextString(m) } -func (*QueryStrayResponse) ProtoMessage() {} -func (*QueryStrayResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{29} +func (m *QueryClientFreeSpaceResponse) Reset() { *m = QueryClientFreeSpaceResponse{} } +func (m *QueryClientFreeSpaceResponse) String() string { return proto.CompactTextString(m) } +func (*QueryClientFreeSpaceResponse) ProtoMessage() {} +func (*QueryClientFreeSpaceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{25} } -func (m *QueryStrayResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryClientFreeSpaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryStrayResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryClientFreeSpaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryStrayResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryClientFreeSpaceResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1367,41 +1183,41 @@ func (m *QueryStrayResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryStrayResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryStrayResponse.Merge(m, src) +func (m *QueryClientFreeSpaceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClientFreeSpaceResponse.Merge(m, src) } -func (m *QueryStrayResponse) XXX_Size() int { +func (m *QueryClientFreeSpaceResponse) XXX_Size() int { return m.Size() } -func (m *QueryStrayResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryStrayResponse.DiscardUnknown(m) +func (m *QueryClientFreeSpaceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClientFreeSpaceResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryStrayResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryClientFreeSpaceResponse proto.InternalMessageInfo -func (m *QueryStrayResponse) GetStrays() Strays { +func (m *QueryClientFreeSpaceResponse) GetBytesfree() int64 { if m != nil { - return m.Strays + return m.Bytesfree } - return Strays{} + return 0 } -type QueryAllStraysRequest struct { - Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryFidCidRequest struct { + Fid string `protobuf:"bytes,1,opt,name=fid,proto3" json:"fid,omitempty"` } -func (m *QueryAllStraysRequest) Reset() { *m = QueryAllStraysRequest{} } -func (m *QueryAllStraysRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllStraysRequest) ProtoMessage() {} -func (*QueryAllStraysRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{30} +func (m *QueryFidCidRequest) Reset() { *m = QueryFidCidRequest{} } +func (m *QueryFidCidRequest) String() string { return proto.CompactTextString(m) } +func (*QueryFidCidRequest) ProtoMessage() {} +func (*QueryFidCidRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{26} } -func (m *QueryAllStraysRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFidCidRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllStraysRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFidCidRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllStraysRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFidCidRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1411,42 +1227,41 @@ func (m *QueryAllStraysRequest) XXX_Marshal(b []byte, deterministic bool) ([]byt return b[:n], nil } } -func (m *QueryAllStraysRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllStraysRequest.Merge(m, src) +func (m *QueryFidCidRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFidCidRequest.Merge(m, src) } -func (m *QueryAllStraysRequest) XXX_Size() int { +func (m *QueryFidCidRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllStraysRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllStraysRequest.DiscardUnknown(m) +func (m *QueryFidCidRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFidCidRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllStraysRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFidCidRequest proto.InternalMessageInfo -func (m *QueryAllStraysRequest) GetPagination() *query.PageRequest { +func (m *QueryFidCidRequest) GetFid() string { if m != nil { - return m.Pagination + return m.Fid } - return nil + return "" } -type QueryAllStraysResponse struct { - Strays []Strays `protobuf:"bytes,1,rep,name=strays,proto3" json:"strays"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryPayDataRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryAllStraysResponse) Reset() { *m = QueryAllStraysResponse{} } -func (m *QueryAllStraysResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllStraysResponse) ProtoMessage() {} -func (*QueryAllStraysResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{31} +func (m *QueryPayDataRequest) Reset() { *m = QueryPayDataRequest{} } +func (m *QueryPayDataRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPayDataRequest) ProtoMessage() {} +func (*QueryPayDataRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{27} } -func (m *QueryAllStraysResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryPayDataRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllStraysResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryPayDataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllStraysResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryPayDataRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1456,48 +1271,42 @@ func (m *QueryAllStraysResponse) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryAllStraysResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllStraysResponse.Merge(m, src) +func (m *QueryPayDataRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPayDataRequest.Merge(m, src) } -func (m *QueryAllStraysResponse) XXX_Size() int { +func (m *QueryPayDataRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllStraysResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllStraysResponse.DiscardUnknown(m) +func (m *QueryPayDataRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPayDataRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllStraysResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryPayDataRequest proto.InternalMessageInfo -func (m *QueryAllStraysResponse) GetStrays() []Strays { +func (m *QueryPayDataRequest) GetAddress() string { if m != nil { - return m.Strays + return m.Address } - return nil + return "" } -func (m *QueryAllStraysResponse) GetPagination() *query.PageResponse { - if m != nil { - return m.Pagination - } - return nil +type QueryPayDataResponse struct { + TimeRemaining int64 `protobuf:"varint,1,opt,name=time_remaining,json=timeRemaining,proto3" json:"time_remaining,omitempty"` + Bytes int64 `protobuf:"varint,2,opt,name=bytes,proto3" json:"bytes,omitempty"` } -type QueryClientFreeSpaceRequest struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +func (m *QueryPayDataResponse) Reset() { *m = QueryPayDataResponse{} } +func (m *QueryPayDataResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPayDataResponse) ProtoMessage() {} +func (*QueryPayDataResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{28} } - -func (m *QueryClientFreeSpaceRequest) Reset() { *m = QueryClientFreeSpaceRequest{} } -func (m *QueryClientFreeSpaceRequest) String() string { return proto.CompactTextString(m) } -func (*QueryClientFreeSpaceRequest) ProtoMessage() {} -func (*QueryClientFreeSpaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{32} -} -func (m *QueryClientFreeSpaceRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryPayDataResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryClientFreeSpaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryPayDataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryClientFreeSpaceRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryPayDataResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1507,41 +1316,48 @@ func (m *QueryClientFreeSpaceRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryClientFreeSpaceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryClientFreeSpaceRequest.Merge(m, src) +func (m *QueryPayDataResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPayDataResponse.Merge(m, src) } -func (m *QueryClientFreeSpaceRequest) XXX_Size() int { +func (m *QueryPayDataResponse) XXX_Size() int { return m.Size() } -func (m *QueryClientFreeSpaceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryClientFreeSpaceRequest.DiscardUnknown(m) +func (m *QueryPayDataResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPayDataResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryClientFreeSpaceRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryPayDataResponse proto.InternalMessageInfo -func (m *QueryClientFreeSpaceRequest) GetAddress() string { +func (m *QueryPayDataResponse) GetTimeRemaining() int64 { if m != nil { - return m.Address + return m.TimeRemaining } - return "" + return 0 } -type QueryClientFreeSpaceResponse struct { - Bytesfree int64 `protobuf:"varint,1,opt,name=bytesfree,proto3" json:"bytesfree,omitempty"` +func (m *QueryPayDataResponse) GetBytes() int64 { + if m != nil { + return m.Bytes + } + return 0 } -func (m *QueryClientFreeSpaceResponse) Reset() { *m = QueryClientFreeSpaceResponse{} } -func (m *QueryClientFreeSpaceResponse) String() string { return proto.CompactTextString(m) } -func (*QueryClientFreeSpaceResponse) ProtoMessage() {} -func (*QueryClientFreeSpaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{33} +type QueryStoragePaymentInfoRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryClientFreeSpaceResponse) XXX_Unmarshal(b []byte) error { + +func (m *QueryStoragePaymentInfoRequest) Reset() { *m = QueryStoragePaymentInfoRequest{} } +func (m *QueryStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } +func (*QueryStoragePaymentInfoRequest) ProtoMessage() {} +func (*QueryStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{29} +} +func (m *QueryStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryClientFreeSpaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryClientFreeSpaceResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryStoragePaymentInfoRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1551,41 +1367,41 @@ func (m *QueryClientFreeSpaceResponse) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryClientFreeSpaceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryClientFreeSpaceResponse.Merge(m, src) +func (m *QueryStoragePaymentInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryStoragePaymentInfoRequest.Merge(m, src) } -func (m *QueryClientFreeSpaceResponse) XXX_Size() int { +func (m *QueryStoragePaymentInfoRequest) XXX_Size() int { return m.Size() } -func (m *QueryClientFreeSpaceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryClientFreeSpaceResponse.DiscardUnknown(m) +func (m *QueryStoragePaymentInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryStoragePaymentInfoRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryClientFreeSpaceResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryStoragePaymentInfoRequest proto.InternalMessageInfo -func (m *QueryClientFreeSpaceResponse) GetBytesfree() int64 { +func (m *QueryStoragePaymentInfoRequest) GetAddress() string { if m != nil { - return m.Bytesfree + return m.Address } - return 0 + return "" } -type QueryFidCidRequest struct { - Fid string `protobuf:"bytes,1,opt,name=fid,proto3" json:"fid,omitempty"` +type QueryStoragePaymentInfoResponse struct { + StoragePaymentInfo StoragePaymentInfo `protobuf:"bytes,1,opt,name=storage_payment_info,json=storagePaymentInfo,proto3" json:"storage_payment_info"` } -func (m *QueryFidCidRequest) Reset() { *m = QueryFidCidRequest{} } -func (m *QueryFidCidRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFidCidRequest) ProtoMessage() {} -func (*QueryFidCidRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{34} +func (m *QueryStoragePaymentInfoResponse) Reset() { *m = QueryStoragePaymentInfoResponse{} } +func (m *QueryStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } +func (*QueryStoragePaymentInfoResponse) ProtoMessage() {} +func (*QueryStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{30} } -func (m *QueryFidCidRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFidCidRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryStoragePaymentInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFidCidRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryStoragePaymentInfoResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1595,41 +1411,41 @@ func (m *QueryFidCidRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryFidCidRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFidCidRequest.Merge(m, src) +func (m *QueryStoragePaymentInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryStoragePaymentInfoResponse.Merge(m, src) } -func (m *QueryFidCidRequest) XXX_Size() int { +func (m *QueryStoragePaymentInfoResponse) XXX_Size() int { return m.Size() } -func (m *QueryFidCidRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFidCidRequest.DiscardUnknown(m) +func (m *QueryStoragePaymentInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryStoragePaymentInfoResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryFidCidRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryStoragePaymentInfoResponse proto.InternalMessageInfo -func (m *QueryFidCidRequest) GetFid() string { +func (m *QueryStoragePaymentInfoResponse) GetStoragePaymentInfo() StoragePaymentInfo { if m != nil { - return m.Fid + return m.StoragePaymentInfo } - return "" + return StoragePaymentInfo{} } -type QueryFidCidResponse struct { - FidCid FidCid `protobuf:"bytes,1,opt,name=fid_cid,json=fidCid,proto3" json:"fid_cid"` +type QueryAllStoragePaymentInfoRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryFidCidResponse) Reset() { *m = QueryFidCidResponse{} } -func (m *QueryFidCidResponse) String() string { return proto.CompactTextString(m) } -func (*QueryFidCidResponse) ProtoMessage() {} -func (*QueryFidCidResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{35} +func (m *QueryAllStoragePaymentInfoRequest) Reset() { *m = QueryAllStoragePaymentInfoRequest{} } +func (m *QueryAllStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllStoragePaymentInfoRequest) ProtoMessage() {} +func (*QueryAllStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{31} } -func (m *QueryFidCidResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFidCidResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFidCidResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllStoragePaymentInfoRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1639,41 +1455,42 @@ func (m *QueryFidCidResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryFidCidResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFidCidResponse.Merge(m, src) +func (m *QueryAllStoragePaymentInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllStoragePaymentInfoRequest.Merge(m, src) } -func (m *QueryFidCidResponse) XXX_Size() int { +func (m *QueryAllStoragePaymentInfoRequest) XXX_Size() int { return m.Size() } -func (m *QueryFidCidResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFidCidResponse.DiscardUnknown(m) +func (m *QueryAllStoragePaymentInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllStoragePaymentInfoRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryFidCidResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllStoragePaymentInfoRequest proto.InternalMessageInfo -func (m *QueryFidCidResponse) GetFidCid() FidCid { +func (m *QueryAllStoragePaymentInfoRequest) GetPagination() *query.PageRequest { if m != nil { - return m.FidCid + return m.Pagination } - return FidCid{} + return nil } -type QueryAllFidCidRequest struct { - Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryAllStoragePaymentInfoResponse struct { + StoragePaymentInfo []StoragePaymentInfo `protobuf:"bytes,1,rep,name=storage_payment_info,json=storagePaymentInfo,proto3" json:"storage_payment_info"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllFidCidRequest) Reset() { *m = QueryAllFidCidRequest{} } -func (m *QueryAllFidCidRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllFidCidRequest) ProtoMessage() {} -func (*QueryAllFidCidRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{36} +func (m *QueryAllStoragePaymentInfoResponse) Reset() { *m = QueryAllStoragePaymentInfoResponse{} } +func (m *QueryAllStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllStoragePaymentInfoResponse) ProtoMessage() {} +func (*QueryAllStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{32} } -func (m *QueryAllFidCidRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllFidCidRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllStoragePaymentInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllFidCidRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllStoragePaymentInfoResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1683,42 +1500,49 @@ func (m *QueryAllFidCidRequest) XXX_Marshal(b []byte, deterministic bool) ([]byt return b[:n], nil } } -func (m *QueryAllFidCidRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllFidCidRequest.Merge(m, src) +func (m *QueryAllStoragePaymentInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllStoragePaymentInfoResponse.Merge(m, src) } -func (m *QueryAllFidCidRequest) XXX_Size() int { +func (m *QueryAllStoragePaymentInfoResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllFidCidRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllFidCidRequest.DiscardUnknown(m) +func (m *QueryAllStoragePaymentInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllStoragePaymentInfoResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllFidCidRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllStoragePaymentInfoResponse proto.InternalMessageInfo + +func (m *QueryAllStoragePaymentInfoResponse) GetStoragePaymentInfo() []StoragePaymentInfo { + if m != nil { + return m.StoragePaymentInfo + } + return nil +} -func (m *QueryAllFidCidRequest) GetPagination() *query.PageRequest { +func (m *QueryAllStoragePaymentInfoResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } return nil } -type QueryAllFidCidResponse struct { - FidCid []FidCid `protobuf:"bytes,1,rep,name=fid_cid,json=fidCid,proto3" json:"fid_cid"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryFileUploadCheckRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Bytes int64 `protobuf:"varint,2,opt,name=bytes,proto3" json:"bytes,omitempty"` } -func (m *QueryAllFidCidResponse) Reset() { *m = QueryAllFidCidResponse{} } -func (m *QueryAllFidCidResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllFidCidResponse) ProtoMessage() {} -func (*QueryAllFidCidResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{37} +func (m *QueryFileUploadCheckRequest) Reset() { *m = QueryFileUploadCheckRequest{} } +func (m *QueryFileUploadCheckRequest) String() string { return proto.CompactTextString(m) } +func (*QueryFileUploadCheckRequest) ProtoMessage() {} +func (*QueryFileUploadCheckRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{33} } -func (m *QueryAllFidCidResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryFileUploadCheckRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllFidCidResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFileUploadCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllFidCidResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFileUploadCheckRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1728,48 +1552,48 @@ func (m *QueryAllFidCidResponse) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryAllFidCidResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllFidCidResponse.Merge(m, src) +func (m *QueryFileUploadCheckRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFileUploadCheckRequest.Merge(m, src) } -func (m *QueryAllFidCidResponse) XXX_Size() int { +func (m *QueryFileUploadCheckRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllFidCidResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllFidCidResponse.DiscardUnknown(m) +func (m *QueryFileUploadCheckRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFileUploadCheckRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllFidCidResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryFileUploadCheckRequest proto.InternalMessageInfo -func (m *QueryAllFidCidResponse) GetFidCid() []FidCid { +func (m *QueryFileUploadCheckRequest) GetAddress() string { if m != nil { - return m.FidCid + return m.Address } - return nil + return "" } -func (m *QueryAllFidCidResponse) GetPagination() *query.PageResponse { +func (m *QueryFileUploadCheckRequest) GetBytes() int64 { if m != nil { - return m.Pagination + return m.Bytes } - return nil + return 0 } -type QueryPayDataRequest struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +type QueryFileUploadCheckResponse struct { + Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` } -func (m *QueryPayDataRequest) Reset() { *m = QueryPayDataRequest{} } -func (m *QueryPayDataRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPayDataRequest) ProtoMessage() {} -func (*QueryPayDataRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{38} +func (m *QueryFileUploadCheckResponse) Reset() { *m = QueryFileUploadCheckResponse{} } +func (m *QueryFileUploadCheckResponse) String() string { return proto.CompactTextString(m) } +func (*QueryFileUploadCheckResponse) ProtoMessage() {} +func (*QueryFileUploadCheckResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{34} } -func (m *QueryPayDataRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFileUploadCheckResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryPayDataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFileUploadCheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryPayDataRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFileUploadCheckResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1779,42 +1603,42 @@ func (m *QueryPayDataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryPayDataRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPayDataRequest.Merge(m, src) +func (m *QueryFileUploadCheckResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFileUploadCheckResponse.Merge(m, src) } -func (m *QueryPayDataRequest) XXX_Size() int { +func (m *QueryFileUploadCheckResponse) XXX_Size() int { return m.Size() } -func (m *QueryPayDataRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPayDataRequest.DiscardUnknown(m) +func (m *QueryFileUploadCheckResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFileUploadCheckResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryPayDataRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFileUploadCheckResponse proto.InternalMessageInfo -func (m *QueryPayDataRequest) GetAddress() string { +func (m *QueryFileUploadCheckResponse) GetValid() bool { if m != nil { - return m.Address + return m.Valid } - return "" + return false } -type QueryPayDataResponse struct { - TimeRemaining int64 `protobuf:"varint,1,opt,name=time_remaining,json=timeRemaining,proto3" json:"time_remaining,omitempty"` - Bytes int64 `protobuf:"varint,2,opt,name=bytes,proto3" json:"bytes,omitempty"` +type QueryPriceCheckRequest struct { + Duration string `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` + Bytes int64 `protobuf:"varint,2,opt,name=bytes,proto3" json:"bytes,omitempty"` } -func (m *QueryPayDataResponse) Reset() { *m = QueryPayDataResponse{} } -func (m *QueryPayDataResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPayDataResponse) ProtoMessage() {} -func (*QueryPayDataResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{39} +func (m *QueryPriceCheckRequest) Reset() { *m = QueryPriceCheckRequest{} } +func (m *QueryPriceCheckRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPriceCheckRequest) ProtoMessage() {} +func (*QueryPriceCheckRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{35} } -func (m *QueryPayDataResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryPriceCheckRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryPayDataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryPriceCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryPayDataResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryPriceCheckRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1824,48 +1648,48 @@ func (m *QueryPayDataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryPayDataResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPayDataResponse.Merge(m, src) +func (m *QueryPriceCheckRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPriceCheckRequest.Merge(m, src) } -func (m *QueryPayDataResponse) XXX_Size() int { +func (m *QueryPriceCheckRequest) XXX_Size() int { return m.Size() } -func (m *QueryPayDataResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPayDataResponse.DiscardUnknown(m) +func (m *QueryPriceCheckRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPriceCheckRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryPayDataResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryPriceCheckRequest proto.InternalMessageInfo -func (m *QueryPayDataResponse) GetTimeRemaining() int64 { +func (m *QueryPriceCheckRequest) GetDuration() string { if m != nil { - return m.TimeRemaining + return m.Duration } - return 0 + return "" } -func (m *QueryPayDataResponse) GetBytes() int64 { +func (m *QueryPriceCheckRequest) GetBytes() int64 { if m != nil { return m.Bytes } return 0 } -type QueryStoragePaymentInfoRequest struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +type QueryPriceCheckResponse struct { + Price int64 `protobuf:"varint,1,opt,name=price,proto3" json:"price,omitempty"` } -func (m *QueryStoragePaymentInfoRequest) Reset() { *m = QueryStoragePaymentInfoRequest{} } -func (m *QueryStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } -func (*QueryStoragePaymentInfoRequest) ProtoMessage() {} -func (*QueryStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{40} +func (m *QueryPriceCheckResponse) Reset() { *m = QueryPriceCheckResponse{} } +func (m *QueryPriceCheckResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPriceCheckResponse) ProtoMessage() {} +func (*QueryPriceCheckResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{36} } -func (m *QueryStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryPriceCheckResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryPriceCheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryStoragePaymentInfoRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryPriceCheckResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1875,41 +1699,40 @@ func (m *QueryStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *QueryStoragePaymentInfoRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryStoragePaymentInfoRequest.Merge(m, src) +func (m *QueryPriceCheckResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPriceCheckResponse.Merge(m, src) } -func (m *QueryStoragePaymentInfoRequest) XXX_Size() int { +func (m *QueryPriceCheckResponse) XXX_Size() int { return m.Size() } -func (m *QueryStoragePaymentInfoRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryStoragePaymentInfoRequest.DiscardUnknown(m) +func (m *QueryPriceCheckResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPriceCheckResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryStoragePaymentInfoRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryPriceCheckResponse proto.InternalMessageInfo -func (m *QueryStoragePaymentInfoRequest) GetAddress() string { +func (m *QueryPriceCheckResponse) GetPrice() int64 { if m != nil { - return m.Address + return m.Price } - return "" + return 0 } -type QueryStoragePaymentInfoResponse struct { - StoragePaymentInfo StoragePaymentInfo `protobuf:"bytes,1,opt,name=storage_payment_info,json=storagePaymentInfo,proto3" json:"storage_payment_info"` +type QueryActiveProvidersRequest struct { } -func (m *QueryStoragePaymentInfoResponse) Reset() { *m = QueryStoragePaymentInfoResponse{} } -func (m *QueryStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } -func (*QueryStoragePaymentInfoResponse) ProtoMessage() {} -func (*QueryStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{41} +func (m *QueryActiveProvidersRequest) Reset() { *m = QueryActiveProvidersRequest{} } +func (m *QueryActiveProvidersRequest) String() string { return proto.CompactTextString(m) } +func (*QueryActiveProvidersRequest) ProtoMessage() {} +func (*QueryActiveProvidersRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{37} } -func (m *QueryStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryActiveProvidersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryStoragePaymentInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryActiveProvidersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryStoragePaymentInfoResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryActiveProvidersRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1919,41 +1742,34 @@ func (m *QueryStoragePaymentInfoResponse) XXX_Marshal(b []byte, deterministic bo return b[:n], nil } } -func (m *QueryStoragePaymentInfoResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryStoragePaymentInfoResponse.Merge(m, src) +func (m *QueryActiveProvidersRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryActiveProvidersRequest.Merge(m, src) } -func (m *QueryStoragePaymentInfoResponse) XXX_Size() int { +func (m *QueryActiveProvidersRequest) XXX_Size() int { return m.Size() } -func (m *QueryStoragePaymentInfoResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryStoragePaymentInfoResponse.DiscardUnknown(m) +func (m *QueryActiveProvidersRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryActiveProvidersRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryStoragePaymentInfoResponse proto.InternalMessageInfo - -func (m *QueryStoragePaymentInfoResponse) GetStoragePaymentInfo() StoragePaymentInfo { - if m != nil { - return m.StoragePaymentInfo - } - return StoragePaymentInfo{} -} +var xxx_messageInfo_QueryActiveProvidersRequest proto.InternalMessageInfo -type QueryAllStoragePaymentInfoRequest struct { - Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryActiveProvidersResponse struct { + Providers []ActiveProviders `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers"` } -func (m *QueryAllStoragePaymentInfoRequest) Reset() { *m = QueryAllStoragePaymentInfoRequest{} } -func (m *QueryAllStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllStoragePaymentInfoRequest) ProtoMessage() {} -func (*QueryAllStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{42} +func (m *QueryActiveProvidersResponse) Reset() { *m = QueryActiveProvidersResponse{} } +func (m *QueryActiveProvidersResponse) String() string { return proto.CompactTextString(m) } +func (*QueryActiveProvidersResponse) ProtoMessage() {} +func (*QueryActiveProvidersResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{38} } -func (m *QueryAllStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryActiveProvidersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryActiveProvidersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllStoragePaymentInfoRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryActiveProvidersResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1963,42 +1779,40 @@ func (m *QueryAllStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic return b[:n], nil } } -func (m *QueryAllStoragePaymentInfoRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllStoragePaymentInfoRequest.Merge(m, src) +func (m *QueryActiveProvidersResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryActiveProvidersResponse.Merge(m, src) } -func (m *QueryAllStoragePaymentInfoRequest) XXX_Size() int { +func (m *QueryActiveProvidersResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllStoragePaymentInfoRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllStoragePaymentInfoRequest.DiscardUnknown(m) +func (m *QueryActiveProvidersResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryActiveProvidersResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllStoragePaymentInfoRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryActiveProvidersResponse proto.InternalMessageInfo -func (m *QueryAllStoragePaymentInfoRequest) GetPagination() *query.PageRequest { +func (m *QueryActiveProvidersResponse) GetProviders() []ActiveProviders { if m != nil { - return m.Pagination + return m.Providers } return nil } -type QueryAllStoragePaymentInfoResponse struct { - StoragePaymentInfo []StoragePaymentInfo `protobuf:"bytes,1,rep,name=storage_payment_info,json=storagePaymentInfo,proto3" json:"storage_payment_info"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type QueryStorageStatsRequest struct { } -func (m *QueryAllStoragePaymentInfoResponse) Reset() { *m = QueryAllStoragePaymentInfoResponse{} } -func (m *QueryAllStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllStoragePaymentInfoResponse) ProtoMessage() {} -func (*QueryAllStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{43} +func (m *QueryStorageStatsRequest) Reset() { *m = QueryStorageStatsRequest{} } +func (m *QueryStorageStatsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryStorageStatsRequest) ProtoMessage() {} +func (*QueryStorageStatsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{39} } -func (m *QueryAllStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryStorageStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllStoragePaymentInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryStorageStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllStoragePaymentInfoResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryStorageStatsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -2008,49 +1822,37 @@ func (m *QueryAllStoragePaymentInfoResponse) XXX_Marshal(b []byte, deterministic return b[:n], nil } } -func (m *QueryAllStoragePaymentInfoResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllStoragePaymentInfoResponse.Merge(m, src) +func (m *QueryStorageStatsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryStorageStatsRequest.Merge(m, src) } -func (m *QueryAllStoragePaymentInfoResponse) XXX_Size() int { +func (m *QueryStorageStatsRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllStoragePaymentInfoResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllStoragePaymentInfoResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryAllStoragePaymentInfoResponse proto.InternalMessageInfo - -func (m *QueryAllStoragePaymentInfoResponse) GetStoragePaymentInfo() []StoragePaymentInfo { - if m != nil { - return m.StoragePaymentInfo - } - return nil +func (m *QueryStorageStatsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryStorageStatsRequest.DiscardUnknown(m) } -func (m *QueryAllStoragePaymentInfoResponse) GetPagination() *query.PageResponse { - if m != nil { - return m.Pagination - } - return nil -} +var xxx_messageInfo_QueryStorageStatsRequest proto.InternalMessageInfo -type QueryFileUploadCheckRequest struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Bytes int64 `protobuf:"varint,2,opt,name=bytes,proto3" json:"bytes,omitempty"` +type QueryStorageStatsResponse struct { + Purchased uint64 `protobuf:"varint,1,opt,name=purchased,proto3" json:"purchased,omitempty"` + Used uint64 `protobuf:"varint,2,opt,name=used,proto3" json:"used,omitempty"` + UsedRatio github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=usedRatio,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"usedRatio"` + ActiveUsers uint64 `protobuf:"varint,4,opt,name=activeUsers,proto3" json:"activeUsers,omitempty"` } -func (m *QueryFileUploadCheckRequest) Reset() { *m = QueryFileUploadCheckRequest{} } -func (m *QueryFileUploadCheckRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFileUploadCheckRequest) ProtoMessage() {} -func (*QueryFileUploadCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{44} +func (m *QueryStorageStatsResponse) Reset() { *m = QueryStorageStatsResponse{} } +func (m *QueryStorageStatsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryStorageStatsResponse) ProtoMessage() {} +func (*QueryStorageStatsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{40} } -func (m *QueryFileUploadCheckRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryStorageStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFileUploadCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryStorageStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFileUploadCheckRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryStorageStatsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -2060,1642 +1862,1372 @@ func (m *QueryFileUploadCheckRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryFileUploadCheckRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFileUploadCheckRequest.Merge(m, src) +func (m *QueryStorageStatsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryStorageStatsResponse.Merge(m, src) } -func (m *QueryFileUploadCheckRequest) XXX_Size() int { +func (m *QueryStorageStatsResponse) XXX_Size() int { return m.Size() } -func (m *QueryFileUploadCheckRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFileUploadCheckRequest.DiscardUnknown(m) +func (m *QueryStorageStatsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryStorageStatsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryFileUploadCheckRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryStorageStatsResponse proto.InternalMessageInfo -func (m *QueryFileUploadCheckRequest) GetAddress() string { +func (m *QueryStorageStatsResponse) GetPurchased() uint64 { if m != nil { - return m.Address + return m.Purchased } - return "" + return 0 } -func (m *QueryFileUploadCheckRequest) GetBytes() int64 { +func (m *QueryStorageStatsResponse) GetUsed() uint64 { if m != nil { - return m.Bytes + return m.Used } return 0 } -type QueryFileUploadCheckResponse struct { - Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (m *QueryFileUploadCheckResponse) Reset() { *m = QueryFileUploadCheckResponse{} } -func (m *QueryFileUploadCheckResponse) String() string { return proto.CompactTextString(m) } -func (*QueryFileUploadCheckResponse) ProtoMessage() {} -func (*QueryFileUploadCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{45} -} -func (m *QueryFileUploadCheckResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryFileUploadCheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryFileUploadCheckResponse.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 *QueryFileUploadCheckResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFileUploadCheckResponse.Merge(m, src) -} -func (m *QueryFileUploadCheckResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryFileUploadCheckResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFileUploadCheckResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryFileUploadCheckResponse proto.InternalMessageInfo - -func (m *QueryFileUploadCheckResponse) GetValid() bool { +func (m *QueryStorageStatsResponse) GetActiveUsers() uint64 { if m != nil { - return m.Valid + return m.ActiveUsers } - return false + return 0 } -type QueryPriceCheckRequest struct { - Duration string `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` - Bytes int64 `protobuf:"varint,2,opt,name=bytes,proto3" json:"bytes,omitempty"` +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.storage.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.storage.QueryParamsResponse") + proto.RegisterType((*QueryFileRequest)(nil), "canine_chain.storage.QueryFileRequest") + proto.RegisterType((*QueryFileResponse)(nil), "canine_chain.storage.QueryFileResponse") + proto.RegisterType((*QueryAllFilesRequest)(nil), "canine_chain.storage.QueryAllFilesRequest") + proto.RegisterType((*QueryAllFilesResponse)(nil), "canine_chain.storage.QueryAllFilesResponse") + proto.RegisterType((*QueryProviderRequest)(nil), "canine_chain.storage.QueryProviderRequest") + proto.RegisterType((*QueryProviderResponse)(nil), "canine_chain.storage.QueryProviderResponse") + proto.RegisterType((*QueryAllProvidersRequest)(nil), "canine_chain.storage.QueryAllProvidersRequest") + proto.RegisterType((*QueryAllProvidersResponse)(nil), "canine_chain.storage.QueryAllProvidersResponse") + proto.RegisterType((*QueryAttestationRequest)(nil), "canine_chain.storage.QueryAttestationRequest") + proto.RegisterType((*QueryAttestationResponse)(nil), "canine_chain.storage.QueryAttestationResponse") + proto.RegisterType((*QueryAllAttestationsRequest)(nil), "canine_chain.storage.QueryAllAttestationsRequest") + proto.RegisterType((*QueryAllAttestationsResponse)(nil), "canine_chain.storage.QueryAllAttestationsResponse") + proto.RegisterType((*QueryReportRequest)(nil), "canine_chain.storage.QueryReportRequest") + proto.RegisterType((*QueryReportResponse)(nil), "canine_chain.storage.QueryReportResponse") + proto.RegisterType((*QueryAllReportRequest)(nil), "canine_chain.storage.QueryAllReportRequest") + proto.RegisterType((*QueryAllReportResponse)(nil), "canine_chain.storage.QueryAllReportResponse") + proto.RegisterType((*QueryFreespaceRequest)(nil), "canine_chain.storage.QueryFreespaceRequest") + proto.RegisterType((*QueryStoreCountRequest)(nil), "canine_chain.storage.QueryStoreCountRequest") + proto.RegisterType((*QueryFreespaceResponse)(nil), "canine_chain.storage.QueryFreespaceResponse") + proto.RegisterType((*QueryStoreCountResponse)(nil), "canine_chain.storage.QueryStoreCountResponse") + proto.RegisterType((*QueryFindFileRequest)(nil), "canine_chain.storage.QueryFindFileRequest") + proto.RegisterType((*QueryFindFileResponse)(nil), "canine_chain.storage.QueryFindFileResponse") + proto.RegisterType((*QueryClientFreeSpaceRequest)(nil), "canine_chain.storage.QueryClientFreeSpaceRequest") + proto.RegisterType((*QueryClientFreeSpaceResponse)(nil), "canine_chain.storage.QueryClientFreeSpaceResponse") + proto.RegisterType((*QueryFidCidRequest)(nil), "canine_chain.storage.QueryFidCidRequest") + proto.RegisterType((*QueryPayDataRequest)(nil), "canine_chain.storage.QueryPayDataRequest") + proto.RegisterType((*QueryPayDataResponse)(nil), "canine_chain.storage.QueryPayDataResponse") + proto.RegisterType((*QueryStoragePaymentInfoRequest)(nil), "canine_chain.storage.QueryStoragePaymentInfoRequest") + proto.RegisterType((*QueryStoragePaymentInfoResponse)(nil), "canine_chain.storage.QueryStoragePaymentInfoResponse") + proto.RegisterType((*QueryAllStoragePaymentInfoRequest)(nil), "canine_chain.storage.QueryAllStoragePaymentInfoRequest") + proto.RegisterType((*QueryAllStoragePaymentInfoResponse)(nil), "canine_chain.storage.QueryAllStoragePaymentInfoResponse") + proto.RegisterType((*QueryFileUploadCheckRequest)(nil), "canine_chain.storage.QueryFileUploadCheckRequest") + proto.RegisterType((*QueryFileUploadCheckResponse)(nil), "canine_chain.storage.QueryFileUploadCheckResponse") + proto.RegisterType((*QueryPriceCheckRequest)(nil), "canine_chain.storage.QueryPriceCheckRequest") + proto.RegisterType((*QueryPriceCheckResponse)(nil), "canine_chain.storage.QueryPriceCheckResponse") + proto.RegisterType((*QueryActiveProvidersRequest)(nil), "canine_chain.storage.QueryActiveProvidersRequest") + proto.RegisterType((*QueryActiveProvidersResponse)(nil), "canine_chain.storage.QueryActiveProvidersResponse") + proto.RegisterType((*QueryStorageStatsRequest)(nil), "canine_chain.storage.QueryStorageStatsRequest") + proto.RegisterType((*QueryStorageStatsResponse)(nil), "canine_chain.storage.QueryStorageStatsResponse") } -func (m *QueryPriceCheckRequest) Reset() { *m = QueryPriceCheckRequest{} } -func (m *QueryPriceCheckRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPriceCheckRequest) ProtoMessage() {} -func (*QueryPriceCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{46} -} -func (m *QueryPriceCheckRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) +func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } + +var fileDescriptor_9fe03bff51a37284 = []byte{ + // 1796 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xcd, 0x6f, 0xdc, 0x54, + 0x10, 0x8f, 0xbb, 0x69, 0xda, 0x4c, 0x02, 0x2d, 0x8f, 0xb4, 0x84, 0x25, 0xe4, 0xc3, 0xa2, 0x49, + 0x9a, 0x36, 0x76, 0xb2, 0x4d, 0x9b, 0x36, 0x2d, 0xb4, 0x4d, 0xaa, 0x84, 0xa2, 0x56, 0xa4, 0x1b, + 0xe5, 0x82, 0x10, 0xcb, 0x8b, 0xfd, 0x76, 0x63, 0xb2, 0x6b, 0xbb, 0xb6, 0x37, 0x22, 0x8a, 0x72, + 0x81, 0x3b, 0xaa, 0x54, 0x09, 0x89, 0x03, 0x42, 0xa2, 0x45, 0xa8, 0x27, 0x24, 0xe0, 0xc0, 0x85, + 0x03, 0x48, 0x48, 0xbd, 0x51, 0xc1, 0x05, 0x71, 0xa8, 0x50, 0xcb, 0x1f, 0x82, 0xfc, 0x3c, 0x6f, + 0xed, 0xdd, 0xf5, 0xda, 0xbb, 0x68, 0x4f, 0x59, 0x3f, 0xcf, 0xc7, 0x6f, 0xe6, 0xcd, 0x8c, 0xe7, + 0xd7, 0xc2, 0xb8, 0x46, 0x4d, 0xc3, 0x64, 0x05, 0x6d, 0x9b, 0x1a, 0xa6, 0xea, 0x7a, 0x96, 0x43, + 0x4b, 0x4c, 0xbd, 0x5b, 0x65, 0xce, 0x9e, 0x62, 0x3b, 0x96, 0x67, 0x91, 0xa1, 0xa8, 0x84, 0x82, + 0x12, 0xd9, 0xa1, 0x92, 0x55, 0xb2, 0xb8, 0x80, 0xea, 0xff, 0x0a, 0x64, 0xb3, 0x23, 0x25, 0xcb, + 0x2a, 0x95, 0x99, 0x4a, 0x6d, 0x43, 0xa5, 0xa6, 0x69, 0x79, 0xd4, 0x33, 0x2c, 0xd3, 0xc5, 0xb7, + 0x33, 0x9a, 0xe5, 0x56, 0x2c, 0x57, 0xdd, 0xa2, 0x2e, 0xba, 0x50, 0x77, 0xe7, 0xb7, 0x98, 0x47, + 0xe7, 0x55, 0x9b, 0x96, 0x0c, 0x93, 0x0b, 0xa3, 0xec, 0x44, 0x2c, 0x2e, 0x9b, 0x3a, 0xb4, 0x22, + 0xcc, 0xbd, 0x11, 0x2b, 0xa2, 0x59, 0xa6, 0xe7, 0x50, 0xcd, 0x13, 0x52, 0x53, 0xb1, 0x52, 0x54, + 0xf3, 0x8c, 0x5d, 0x56, 0xd0, 0x19, 0x2d, 0x27, 0x9b, 0xb3, 0x1d, 0x6b, 0xd7, 0xd0, 0x99, 0xe3, + 0x26, 0xe2, 0x72, 0x3d, 0x87, 0xee, 0x09, 0x11, 0x39, 0x56, 0xa4, 0x68, 0xe8, 0x05, 0xcd, 0xd0, + 0x13, 0x51, 0xd9, 0x74, 0xaf, 0xc2, 0x4c, 0xaf, 0x60, 0x98, 0x45, 0xcc, 0xa8, 0x3c, 0x04, 0xe4, + 0x8e, 0x9f, 0xa9, 0x75, 0x1e, 0x79, 0x9e, 0xdd, 0xad, 0x32, 0xd7, 0x93, 0xef, 0xc0, 0xcb, 0x75, + 0xa7, 0xae, 0x6d, 0x99, 0x2e, 0x23, 0x4b, 0xd0, 0x17, 0x64, 0x68, 0x58, 0x1a, 0x97, 0xa6, 0x07, + 0x72, 0x23, 0x4a, 0xdc, 0xdd, 0x29, 0x81, 0xd6, 0x72, 0xef, 0xe3, 0xa7, 0x63, 0x3d, 0x79, 0xd4, + 0x90, 0x67, 0xe0, 0x38, 0x37, 0xb9, 0x6a, 0x94, 0x19, 0xba, 0x21, 0x27, 0xa1, 0xaf, 0xc2, 0x9c, + 0x9d, 0x32, 0xe3, 0xf6, 0xfa, 0xf3, 0xf8, 0x24, 0xaf, 0xc3, 0x4b, 0x11, 0x59, 0x74, 0x7e, 0x19, + 0x7a, 0x8b, 0x06, 0x8a, 0x0e, 0xe4, 0x26, 0xe2, 0x5d, 0x6f, 0x9a, 0x46, 0xd1, 0x60, 0xba, 0xaf, + 0x88, 0xfe, 0xb9, 0x92, 0xfc, 0x01, 0x0c, 0x71, 0x8b, 0xd7, 0xcb, 0x65, 0xff, 0x9d, 0x08, 0x94, + 0xac, 0x02, 0x84, 0xa5, 0x81, 0xa6, 0x27, 0x95, 0xa0, 0x8e, 0x14, 0xbf, 0x8e, 0x94, 0xa0, 0x54, + 0xb1, 0x8e, 0x94, 0x75, 0x5a, 0x12, 0xe8, 0xf3, 0x11, 0x4d, 0xf9, 0x2b, 0x09, 0x4e, 0x34, 0x38, + 0x40, 0xd8, 0x6f, 0xc2, 0x61, 0x1f, 0x81, 0x9f, 0xb2, 0x4c, 0x27, 0xb8, 0x03, 0x2d, 0xb2, 0x56, + 0x07, 0xf0, 0x10, 0x07, 0x38, 0x95, 0x0a, 0x30, 0xf0, 0x5d, 0x87, 0x70, 0x0e, 0x33, 0xb0, 0x8e, + 0x05, 0x27, 0x32, 0x30, 0x0c, 0x47, 0xa8, 0xae, 0x3b, 0xcc, 0x75, 0xf1, 0x12, 0xc4, 0xa3, 0xfc, + 0x3e, 0x86, 0x14, 0x6a, 0x60, 0x48, 0x2b, 0xd0, 0x5f, 0x2b, 0x5b, 0xcc, 0xd9, 0x58, 0x8b, 0x4a, + 0x10, 0x62, 0x18, 0x54, 0xa8, 0x27, 0x6f, 0xc1, 0xb0, 0x48, 0x58, 0x4d, 0xaa, 0xdb, 0xb7, 0xf2, + 0x48, 0x82, 0x57, 0x63, 0x9c, 0xc4, 0x87, 0x91, 0xf9, 0x3f, 0x61, 0x74, 0xef, 0x7e, 0xce, 0xc0, + 0x2b, 0x01, 0x54, 0xcf, 0x63, 0x6e, 0x30, 0xd7, 0x44, 0x3a, 0x8e, 0x43, 0x46, 0x33, 0x74, 0xbc, + 0x1e, 0xff, 0xa7, 0x6c, 0x88, 0xe4, 0x45, 0x85, 0x31, 0xac, 0xdb, 0x30, 0x40, 0xc3, 0x63, 0xcc, + 0xde, 0xa9, 0xf8, 0xc0, 0x22, 0xfa, 0xab, 0x96, 0x53, 0xc1, 0xf0, 0xa2, 0xfa, 0x32, 0x83, 0xd7, + 0x44, 0x0a, 0x23, 0xd2, 0x5d, 0xbf, 0xaa, 0x9f, 0x24, 0x18, 0x89, 0xf7, 0x83, 0x61, 0xbd, 0x0b, + 0x83, 0x11, 0x58, 0xe2, 0xc2, 0x3a, 0x8a, 0xab, 0xce, 0x40, 0xf7, 0x6e, 0x6e, 0x12, 0x47, 0x68, + 0x9e, 0xd9, 0x96, 0xe3, 0xb5, 0xbe, 0xb4, 0x4d, 0x1c, 0xaa, 0x42, 0x0e, 0x03, 0x7b, 0x0b, 0xfa, + 0x1c, 0x7e, 0x82, 0xd9, 0x1b, 0x8f, 0x0f, 0x29, 0xd0, 0x8a, 0x44, 0x83, 0x5a, 0x72, 0x21, 0x9c, + 0x3c, 0xf5, 0x08, 0xba, 0x75, 0x35, 0x0f, 0x24, 0x38, 0xd9, 0xe8, 0x01, 0xb1, 0x5f, 0x83, 0x23, + 0x01, 0x0a, 0x71, 0x1f, 0xed, 0x82, 0x17, 0x6a, 0xdd, 0xbb, 0x85, 0x79, 0x4c, 0xc3, 0xaa, 0xc3, + 0x98, 0x6b, 0x53, 0x8d, 0xa5, 0x0f, 0xb8, 0x1c, 0xc6, 0xb5, 0xe1, 0x59, 0x0e, 0x5b, 0xb1, 0xaa, + 0xa6, 0x97, 0xae, 0xa3, 0xa0, 0x4e, 0xc4, 0x0d, 0xe6, 0x62, 0x08, 0x0e, 0xf3, 0x03, 0xd4, 0x08, + 0x1e, 0x64, 0x15, 0xdb, 0x3a, 0xea, 0x23, 0x54, 0xd0, 0xfc, 0x03, 0xa1, 0xc0, 0x1f, 0xe4, 0x69, + 0x9c, 0xd3, 0xab, 0x86, 0xa9, 0x47, 0xbf, 0x95, 0xc7, 0x21, 0x53, 0x0c, 0xeb, 0xa9, 0x68, 0xe8, + 0xf2, 0x92, 0x88, 0xb8, 0x26, 0x89, 0x86, 0x27, 0x60, 0x50, 0x0c, 0xa8, 0x82, 0x61, 0x8b, 0x10, + 0x06, 0xc4, 0xd9, 0x4d, 0xdb, 0x95, 0x17, 0xb1, 0xab, 0x57, 0xca, 0x06, 0x33, 0x3d, 0x3f, 0x98, + 0x8d, 0xf6, 0x72, 0x76, 0x05, 0xdb, 0xb4, 0x49, 0x11, 0x7d, 0x8f, 0x40, 0xff, 0xd6, 0x9e, 0xc7, + 0xdc, 0xa2, 0xc3, 0x82, 0x4c, 0x64, 0xf2, 0xe1, 0x41, 0xad, 0x55, 0x56, 0x0d, 0x7d, 0xc5, 0xd0, + 0x5b, 0x87, 0xa6, 0xd6, 0xf6, 0x8f, 0xbd, 0x1b, 0xd4, 0xa3, 0xe9, 0xb0, 0x36, 0xc4, 0xd7, 0x4d, + 0x28, 0x20, 0x9c, 0x53, 0xf0, 0xa2, 0x67, 0x54, 0x58, 0xc1, 0x61, 0x15, 0x6a, 0x98, 0x86, 0x59, + 0x42, 0x4c, 0x2f, 0xf8, 0xa7, 0x79, 0x71, 0xe8, 0x5f, 0x05, 0x07, 0xc9, 0x0b, 0x30, 0x93, 0x0f, + 0x1e, 0xe4, 0x25, 0x18, 0xad, 0xdd, 0x1d, 0x2d, 0xb1, 0xf5, 0x60, 0x7b, 0xba, 0x69, 0x16, 0xad, + 0x74, 0x40, 0x9f, 0x4a, 0x30, 0xd6, 0x52, 0x19, 0xc1, 0x7d, 0x08, 0x43, 0xd8, 0x20, 0x85, 0xe8, + 0x66, 0x86, 0xad, 0x3a, 0x1d, 0xdf, 0x4a, 0xcd, 0xf6, 0xb0, 0xa5, 0x88, 0xdb, 0xf4, 0x46, 0xde, + 0x81, 0x09, 0xd1, 0xb9, 0xad, 0x83, 0xe8, 0xd6, 0x9c, 0xf8, 0x5d, 0x02, 0x39, 0xc9, 0x5b, 0x6a, + 0xd4, 0x99, 0xee, 0x44, 0xdd, 0xbd, 0x99, 0x72, 0x1b, 0xbb, 0xc4, 0xef, 0xae, 0x4d, 0xbb, 0x6c, + 0x51, 0x7d, 0x65, 0x9b, 0x69, 0x3b, 0xa9, 0xb7, 0xdf, 0xa2, 0x9e, 0x16, 0xb0, 0x77, 0x9a, 0xcc, + 0x85, 0x03, 0x61, 0x97, 0x96, 0xb1, 0x13, 0x8e, 0xe6, 0x83, 0x07, 0xf9, 0x1d, 0x9c, 0x38, 0xeb, + 0x8e, 0xa1, 0xb1, 0x3a, 0xff, 0x59, 0x38, 0xaa, 0x57, 0x9d, 0xf0, 0xda, 0xfa, 0xf3, 0xb5, 0xe7, + 0x16, 0x08, 0xc4, 0x34, 0x8a, 0xda, 0x0a, 0x9d, 0xdb, 0xfe, 0x29, 0x36, 0x48, 0xf0, 0x20, 0xbf, + 0x2e, 0xbe, 0xfe, 0x9c, 0xcf, 0x34, 0x2e, 0x6a, 0xb2, 0x21, 0x3e, 0xda, 0x8d, 0xaf, 0xd1, 0xe8, + 0xcd, 0xe6, 0x15, 0xab, 0xd5, 0x17, 0xbb, 0xde, 0x42, 0xf3, 0xbe, 0x98, 0xc5, 0x95, 0x07, 0x2b, + 0x61, 0xc3, 0xa3, 0x5e, 0x0d, 0xc6, 0xcf, 0x62, 0xcf, 0xab, 0x7f, 0x19, 0x8e, 0x24, 0xbb, 0xea, + 0x68, 0xdb, 0xd4, 0x65, 0x41, 0x6a, 0x7b, 0xf3, 0xe1, 0x01, 0x21, 0xd0, 0x5b, 0xf5, 0x5f, 0x1c, + 0xe2, 0x2f, 0xf8, 0x6f, 0x72, 0x0b, 0xfa, 0xfd, 0xbf, 0x79, 0x3f, 0x95, 0xc3, 0x99, 0x71, 0x69, + 0x7a, 0x70, 0x59, 0xf1, 0xf1, 0xfc, 0xfd, 0x74, 0x6c, 0xb2, 0x64, 0x78, 0xdb, 0xd5, 0x2d, 0x45, + 0xb3, 0x2a, 0x2a, 0xd2, 0xcd, 0xe0, 0xcf, 0xac, 0xab, 0xef, 0xa8, 0xde, 0x9e, 0xcd, 0x5c, 0xe5, + 0x06, 0xd3, 0xf2, 0xa1, 0x01, 0x32, 0x0e, 0x03, 0x01, 0x1d, 0xdc, 0x74, 0xfd, 0x34, 0xf4, 0x72, + 0x47, 0xd1, 0xa3, 0xdc, 0x1f, 0x59, 0x38, 0xcc, 0xf1, 0x93, 0xcf, 0x24, 0xe8, 0x0b, 0xe8, 0x13, + 0x69, 0xd1, 0x09, 0xcd, 0x6c, 0x2d, 0x7b, 0xba, 0x0d, 0xc9, 0x20, 0x17, 0xb2, 0xfa, 0xc9, 0x9f, + 0xff, 0xde, 0x3f, 0x74, 0x9a, 0x4c, 0xa9, 0x1f, 0x51, 0x6d, 0x87, 0x96, 0x67, 0x75, 0x6a, 0xa9, + 0x81, 0xf6, 0x6c, 0x1c, 0x15, 0x26, 0xf7, 0x24, 0xe8, 0xf5, 0xeb, 0x95, 0x4c, 0x26, 0x38, 0x89, + 0x7c, 0xa7, 0xb2, 0x53, 0xa9, 0x72, 0x08, 0x65, 0x91, 0x43, 0x99, 0x27, 0x6a, 0x2a, 0x14, 0xce, + 0x84, 0xd4, 0xfd, 0x80, 0x1c, 0x1e, 0x90, 0xfb, 0x12, 0x1c, 0xe5, 0x1c, 0xeb, 0x7a, 0xb9, 0x4c, + 0x66, 0x12, 0xdc, 0x35, 0x90, 0xbd, 0xec, 0x99, 0xb6, 0x64, 0x11, 0x9e, 0xc2, 0xe1, 0x4d, 0x93, + 0xc9, 0xf6, 0xe0, 0x91, 0xaf, 0x25, 0xe8, 0xaf, 0x95, 0x6f, 0x22, 0xac, 0x06, 0x06, 0x96, 0x08, + 0xab, 0x91, 0x7b, 0xc9, 0x57, 0x38, 0xac, 0x0b, 0x64, 0x21, 0xfd, 0x02, 0x05, 0x18, 0x75, 0x1f, + 0xc7, 0xd2, 0x01, 0x79, 0x20, 0xc1, 0x60, 0x0d, 0xa4, 0x9f, 0x3e, 0x25, 0x39, 0x25, 0x8d, 0x0d, + 0x9f, 0x55, 0xdb, 0x96, 0x47, 0xbc, 0x39, 0x8e, 0xf7, 0x2c, 0x99, 0x69, 0x1f, 0x2f, 0x79, 0x24, + 0xc1, 0x40, 0x64, 0x83, 0x27, 0xb3, 0x49, 0x4e, 0x9b, 0xe8, 0x52, 0x56, 0x69, 0x57, 0x1c, 0x21, + 0x5e, 0xe6, 0x10, 0xcf, 0x93, 0x73, 0xa9, 0x10, 0xa3, 0xfc, 0x41, 0xdd, 0xd7, 0x0c, 0xfd, 0x80, + 0x7c, 0x27, 0xc1, 0xb1, 0x28, 0x5f, 0xf1, 0x93, 0x3a, 0x9f, 0x9c, 0xa4, 0x18, 0x1a, 0x95, 0xcd, + 0x75, 0xa2, 0x82, 0xb8, 0xcf, 0x73, 0xdc, 0x2a, 0x99, 0xed, 0x08, 0x37, 0xf9, 0x5c, 0x82, 0x23, + 0x79, 0xdc, 0xbe, 0x93, 0x66, 0x4c, 0x1d, 0x99, 0x48, 0x9c, 0x31, 0xf5, 0xa4, 0x40, 0xbe, 0xc0, + 0x71, 0xcd, 0x11, 0x25, 0x15, 0x17, 0x92, 0x00, 0x4c, 0xe5, 0x17, 0x12, 0x00, 0x02, 0xf3, 0xb3, + 0x98, 0xd2, 0xad, 0xf5, 0xf0, 0xce, 0xb6, 0x27, 0x8c, 0x08, 0xe7, 0x38, 0xc2, 0x19, 0x32, 0xdd, + 0x2e, 0x42, 0xf2, 0x50, 0x82, 0xfe, 0xda, 0xca, 0x9f, 0x08, 0xad, 0x91, 0x7f, 0x24, 0x42, 0x6b, + 0x62, 0x11, 0x1d, 0xf4, 0x77, 0x51, 0xe8, 0x46, 0xfa, 0xfb, 0x1b, 0x09, 0x20, 0x64, 0x1a, 0x24, + 0xc9, 0x75, 0x13, 0xe9, 0xc9, 0xce, 0xb6, 0x29, 0x8d, 0x48, 0x97, 0x38, 0xd2, 0x05, 0x92, 0x4b, + 0x45, 0xea, 0xff, 0x35, 0xcc, 0x52, 0x04, 0xe7, 0x97, 0x7c, 0x84, 0x07, 0xb4, 0x25, 0x71, 0x56, + 0x36, 0xb0, 0xa0, 0xc4, 0x59, 0xd9, 0xc8, 0x83, 0xe4, 0x8b, 0x1c, 0x61, 0x8e, 0xcc, 0xb5, 0x31, + 0xc2, 0x4d, 0xbd, 0xe0, 0xcf, 0x71, 0x75, 0xbf, 0xe8, 0x97, 0xe2, 0x6f, 0x12, 0x90, 0x35, 0xe6, + 0x35, 0x90, 0x9c, 0xc4, 0xc6, 0x8e, 0x67, 0x52, 0x89, 0x8d, 0xdd, 0x82, 0x43, 0xc9, 0x6f, 0x73, + 0xdc, 0xcb, 0xe4, 0x5a, 0x2a, 0xee, 0x12, 0xf3, 0x0a, 0x1a, 0xb7, 0x52, 0xf0, 0xcb, 0xa1, 0xd0, + 0x58, 0x0f, 0x0f, 0x25, 0x80, 0x35, 0xe6, 0x21, 0x2b, 0x22, 0xc9, 0x8b, 0x42, 0x94, 0x6a, 0x65, + 0x67, 0xda, 0x11, 0x45, 0xbc, 0x57, 0x39, 0xde, 0x4b, 0x64, 0xb1, 0x2d, 0xbc, 0x36, 0xdd, 0x2b, + 0xe8, 0xd4, 0xa3, 0x11, 0x98, 0xbf, 0x4a, 0x40, 0x9a, 0x37, 0x7c, 0xb2, 0x90, 0x52, 0x90, 0xb1, + 0x74, 0x26, 0x7b, 0xbe, 0x43, 0xad, 0x8e, 0x83, 0x88, 0xb2, 0x96, 0x48, 0x10, 0xbf, 0x48, 0x70, + 0xa2, 0xd9, 0xbe, 0x3f, 0xc9, 0x16, 0x93, 0x87, 0x53, 0xeb, 0x50, 0x2e, 0x76, 0xae, 0xd8, 0xf1, + 0xb7, 0x21, 0x1a, 0x0d, 0xf9, 0x51, 0x82, 0x63, 0x0d, 0xec, 0x24, 0xb1, 0xe8, 0xe3, 0x89, 0x51, + 0x62, 0xd1, 0xb7, 0x20, 0x3f, 0x1d, 0x8c, 0x13, 0xbf, 0x4f, 0x0b, 0x55, 0x6e, 0xa2, 0xa0, 0x71, + 0x88, 0xdf, 0x4b, 0x00, 0x21, 0xa5, 0x49, 0x1c, 0x7b, 0x4d, 0x2c, 0x2a, 0x71, 0xec, 0x35, 0xf3, + 0x24, 0x79, 0x8d, 0xe3, 0xbc, 0x4e, 0xae, 0xb6, 0xb1, 0xd0, 0x18, 0x1a, 0x0b, 0x10, 0xaa, 0xfb, + 0x82, 0x98, 0x1d, 0xa8, 0xfb, 0x9c, 0x8a, 0x1d, 0x90, 0x1f, 0xfc, 0xcd, 0xa1, 0x9e, 0xf5, 0x24, + 0x6f, 0x0e, 0xb1, 0x14, 0x2c, 0x79, 0x73, 0x88, 0xa7, 0x65, 0xf2, 0x25, 0x1e, 0xc3, 0x39, 0x32, + 0x9f, 0xbe, 0x39, 0x04, 0xff, 0x8f, 0x15, 0xee, 0x66, 0xdf, 0x4a, 0x30, 0x18, 0x65, 0x59, 0x89, + 0x1b, 0x64, 0x0c, 0x57, 0x4b, 0xdc, 0x20, 0xe3, 0xe8, 0x5b, 0x07, 0xeb, 0x84, 0xf8, 0x67, 0x05, + 0x7f, 0xd5, 0x71, 0x97, 0x6f, 0x3d, 0x7e, 0x36, 0x2a, 0x3d, 0x79, 0x36, 0x2a, 0xfd, 0xf3, 0x6c, + 0x54, 0xba, 0xf7, 0x7c, 0xb4, 0xe7, 0xc9, 0xf3, 0xd1, 0x9e, 0xbf, 0x9e, 0x8f, 0xf6, 0xbc, 0x97, + 0x8b, 0x70, 0xb8, 0xc0, 0xe6, 0x2d, 0xba, 0xe5, 0xd6, 0xdb, 0xfc, 0xb8, 0x66, 0x95, 0x73, 0xba, + 0xad, 0x3e, 0xfe, 0xdf, 0x65, 0xe7, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x65, 0x54, 0x9e, + 0xd0, 0x1c, 0x00, 0x00, } -func (m *QueryPriceCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPriceCheckRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a File by index. + File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) + // Queries a list of File items. + FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) + // Queries a Providers by index. + Providers(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) + // Queries a list of Providers items. + ProvidersAll(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) + // Queries a Attestation by index. + Attestation(ctx context.Context, in *QueryAttestationRequest, opts ...grpc.CallOption) (*QueryAttestationResponse, error) + // Queries a list of Attestation items. + AttestationsAll(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) + // Queries a Report by index. + Reports(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) + // Queries a list of Attestation items. + ReportsAll(ctx context.Context, in *QueryAllReportRequest, opts ...grpc.CallOption) (*QueryAllReportResponse, error) + // Queries a list of Freespace items. + Freespace(ctx context.Context, in *QueryFreespaceRequest, opts ...grpc.CallOption) (*QueryFreespaceResponse, error) + // Queries a list of Freespace items. + StoreCount(ctx context.Context, in *QueryStoreCountRequest, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) + // Queries a list of FindFile items. + FindFile(ctx context.Context, in *QueryFindFileRequest, opts ...grpc.CallOption) (*QueryFindFileResponse, error) + // Queries a list of GetClientFreeSpace items. + GetClientFreeSpace(ctx context.Context, in *QueryClientFreeSpaceRequest, opts ...grpc.CallOption) (*QueryClientFreeSpaceResponse, error) + // Queries a list of GetPayData items. + GetPayData(ctx context.Context, in *QueryPayDataRequest, opts ...grpc.CallOption) (*QueryPayDataResponse, error) + // Queries a StoragePaymentInfo by address. + StoragePaymentInfo(ctx context.Context, in *QueryStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryStoragePaymentInfoResponse, error) + // Queries a list of StoragePaymentInfo items. + StoragePaymentInfoAll(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) + // Queries whether user can upload a file based on size + FileUploadCheck(ctx context.Context, in *QueryFileUploadCheckRequest, opts ...grpc.CallOption) (*QueryFileUploadCheckResponse, error) + // Queries whether user can upload a file based on size + PriceCheck(ctx context.Context, in *QueryPriceCheckRequest, opts ...grpc.CallOption) (*QueryPriceCheckResponse, error) + // Queries whether user can upload a file based on size + ActiveProviders(ctx context.Context, in *QueryActiveProvidersRequest, opts ...grpc.CallOption) (*QueryActiveProvidersResponse, error) + // Queries the storage space used and purchased + StorageStats(ctx context.Context, in *QueryStorageStatsRequest, opts ...grpc.CallOption) (*QueryStorageStatsResponse, error) } -func (m *QueryPriceCheckRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPriceCheckRequest.Merge(m, src) + +type queryClient struct { + cc grpc1.ClientConn } -func (m *QueryPriceCheckRequest) XXX_Size() int { - return m.Size() + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} } -func (m *QueryPriceCheckRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPriceCheckRequest.DiscardUnknown(m) + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -var xxx_messageInfo_QueryPriceCheckRequest proto.InternalMessageInfo +func (c *queryClient) File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) { + out := new(QueryFileResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/File", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} -func (m *QueryPriceCheckRequest) GetDuration() string { - if m != nil { - return m.Duration +func (c *queryClient) FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { + out := new(QueryAllFilesResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FilesAll", in, out, opts...) + if err != nil { + return nil, err } - return "" + return out, nil } -func (m *QueryPriceCheckRequest) GetBytes() int64 { - if m != nil { - return m.Bytes +func (c *queryClient) Providers(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) { + out := new(QueryProviderResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Providers", in, out, opts...) + if err != nil { + return nil, err } - return 0 + return out, nil } -type QueryPriceCheckResponse struct { - Price int64 `protobuf:"varint,1,opt,name=price,proto3" json:"price,omitempty"` +func (c *queryClient) ProvidersAll(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) { + out := new(QueryAllProvidersResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ProvidersAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryPriceCheckResponse) Reset() { *m = QueryPriceCheckResponse{} } -func (m *QueryPriceCheckResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPriceCheckResponse) ProtoMessage() {} -func (*QueryPriceCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{47} +func (c *queryClient) Attestation(ctx context.Context, in *QueryAttestationRequest, opts ...grpc.CallOption) (*QueryAttestationResponse, error) { + out := new(QueryAttestationResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Attestation", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryPriceCheckResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (c *queryClient) AttestationsAll(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) { + out := new(QueryAllAttestationsResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AttestationsAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryPriceCheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPriceCheckResponse.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 (c *queryClient) Reports(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) { + out := new(QueryReportResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Reports", in, out, opts...) + if err != nil { + return nil, err } + return out, nil } -func (m *QueryPriceCheckResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPriceCheckResponse.Merge(m, src) + +func (c *queryClient) ReportsAll(ctx context.Context, in *QueryAllReportRequest, opts ...grpc.CallOption) (*QueryAllReportResponse, error) { + out := new(QueryAllReportResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ReportsAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryPriceCheckResponse) XXX_Size() int { - return m.Size() + +func (c *queryClient) Freespace(ctx context.Context, in *QueryFreespaceRequest, opts ...grpc.CallOption) (*QueryFreespaceResponse, error) { + out := new(QueryFreespaceResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Freespace", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryPriceCheckResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPriceCheckResponse.DiscardUnknown(m) + +func (c *queryClient) StoreCount(ctx context.Context, in *QueryStoreCountRequest, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) { + out := new(QueryStoreCountResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StoreCount", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -var xxx_messageInfo_QueryPriceCheckResponse proto.InternalMessageInfo +func (c *queryClient) FindFile(ctx context.Context, in *QueryFindFileRequest, opts ...grpc.CallOption) (*QueryFindFileResponse, error) { + out := new(QueryFindFileResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FindFile", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} -func (m *QueryPriceCheckResponse) GetPrice() int64 { - if m != nil { - return m.Price +func (c *queryClient) GetClientFreeSpace(ctx context.Context, in *QueryClientFreeSpaceRequest, opts ...grpc.CallOption) (*QueryClientFreeSpaceResponse, error) { + out := new(QueryClientFreeSpaceResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/GetClientFreeSpace", in, out, opts...) + if err != nil { + return nil, err } - return 0 + return out, nil } -type QueryActiveProvidersRequest struct { +func (c *queryClient) GetPayData(ctx context.Context, in *QueryPayDataRequest, opts ...grpc.CallOption) (*QueryPayDataResponse, error) { + out := new(QueryPayDataResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/GetPayData", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryActiveProvidersRequest) Reset() { *m = QueryActiveProvidersRequest{} } -func (m *QueryActiveProvidersRequest) String() string { return proto.CompactTextString(m) } -func (*QueryActiveProvidersRequest) ProtoMessage() {} -func (*QueryActiveProvidersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{48} -} -func (m *QueryActiveProvidersRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) +func (c *queryClient) StoragePaymentInfo(ctx context.Context, in *QueryStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryStoragePaymentInfoResponse, error) { + out := new(QueryStoragePaymentInfoResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StoragePaymentInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryActiveProvidersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryActiveProvidersRequest.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 (c *queryClient) StoragePaymentInfoAll(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) { + out := new(QueryAllStoragePaymentInfoResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StoragePaymentInfoAll", in, out, opts...) + if err != nil { + return nil, err } + return out, nil } -func (m *QueryActiveProvidersRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryActiveProvidersRequest.Merge(m, src) + +func (c *queryClient) FileUploadCheck(ctx context.Context, in *QueryFileUploadCheckRequest, opts ...grpc.CallOption) (*QueryFileUploadCheckResponse, error) { + out := new(QueryFileUploadCheckResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FileUploadCheck", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryActiveProvidersRequest) XXX_Size() int { - return m.Size() + +func (c *queryClient) PriceCheck(ctx context.Context, in *QueryPriceCheckRequest, opts ...grpc.CallOption) (*QueryPriceCheckResponse, error) { + out := new(QueryPriceCheckResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/PriceCheck", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (m *QueryActiveProvidersRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryActiveProvidersRequest.DiscardUnknown(m) + +func (c *queryClient) ActiveProviders(ctx context.Context, in *QueryActiveProvidersRequest, opts ...grpc.CallOption) (*QueryActiveProvidersResponse, error) { + out := new(QueryActiveProvidersResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ActiveProviders", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -var xxx_messageInfo_QueryActiveProvidersRequest proto.InternalMessageInfo +func (c *queryClient) StorageStats(ctx context.Context, in *QueryStorageStatsRequest, opts ...grpc.CallOption) (*QueryStorageStatsResponse, error) { + out := new(QueryStorageStatsResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StorageStats", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} -type QueryActiveProvidersResponse struct { - Providers []ActiveProviders `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers"` +// QueryServer is the server API for Query service. +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a File by index. + File(context.Context, *QueryFileRequest) (*QueryFileResponse, error) + // Queries a list of File items. + FilesAll(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) + // Queries a Providers by index. + Providers(context.Context, *QueryProviderRequest) (*QueryProviderResponse, error) + // Queries a list of Providers items. + ProvidersAll(context.Context, *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) + // Queries a Attestation by index. + Attestation(context.Context, *QueryAttestationRequest) (*QueryAttestationResponse, error) + // Queries a list of Attestation items. + AttestationsAll(context.Context, *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) + // Queries a Report by index. + Reports(context.Context, *QueryReportRequest) (*QueryReportResponse, error) + // Queries a list of Attestation items. + ReportsAll(context.Context, *QueryAllReportRequest) (*QueryAllReportResponse, error) + // Queries a list of Freespace items. + Freespace(context.Context, *QueryFreespaceRequest) (*QueryFreespaceResponse, error) + // Queries a list of Freespace items. + StoreCount(context.Context, *QueryStoreCountRequest) (*QueryStoreCountResponse, error) + // Queries a list of FindFile items. + FindFile(context.Context, *QueryFindFileRequest) (*QueryFindFileResponse, error) + // Queries a list of GetClientFreeSpace items. + GetClientFreeSpace(context.Context, *QueryClientFreeSpaceRequest) (*QueryClientFreeSpaceResponse, error) + // Queries a list of GetPayData items. + GetPayData(context.Context, *QueryPayDataRequest) (*QueryPayDataResponse, error) + // Queries a StoragePaymentInfo by address. + StoragePaymentInfo(context.Context, *QueryStoragePaymentInfoRequest) (*QueryStoragePaymentInfoResponse, error) + // Queries a list of StoragePaymentInfo items. + StoragePaymentInfoAll(context.Context, *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) + // Queries whether user can upload a file based on size + FileUploadCheck(context.Context, *QueryFileUploadCheckRequest) (*QueryFileUploadCheckResponse, error) + // Queries whether user can upload a file based on size + PriceCheck(context.Context, *QueryPriceCheckRequest) (*QueryPriceCheckResponse, error) + // Queries whether user can upload a file based on size + ActiveProviders(context.Context, *QueryActiveProvidersRequest) (*QueryActiveProvidersResponse, error) + // Queries the storage space used and purchased + StorageStats(context.Context, *QueryStorageStatsRequest) (*QueryStorageStatsResponse, error) } -func (m *QueryActiveProvidersResponse) Reset() { *m = QueryActiveProvidersResponse{} } -func (m *QueryActiveProvidersResponse) String() string { return proto.CompactTextString(m) } -func (*QueryActiveProvidersResponse) ProtoMessage() {} -func (*QueryActiveProvidersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{49} +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { } -func (m *QueryActiveProvidersResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (m *QueryActiveProvidersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryActiveProvidersResponse.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 (*UnimplementedQueryServer) File(ctx context.Context, req *QueryFileRequest) (*QueryFileResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method File not implemented") } -func (m *QueryActiveProvidersResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryActiveProvidersResponse.Merge(m, src) +func (*UnimplementedQueryServer) FilesAll(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FilesAll not implemented") } -func (m *QueryActiveProvidersResponse) XXX_Size() int { - return m.Size() +func (*UnimplementedQueryServer) Providers(ctx context.Context, req *QueryProviderRequest) (*QueryProviderResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Providers not implemented") } -func (m *QueryActiveProvidersResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryActiveProvidersResponse.DiscardUnknown(m) +func (*UnimplementedQueryServer) ProvidersAll(ctx context.Context, req *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ProvidersAll not implemented") } - -var xxx_messageInfo_QueryActiveProvidersResponse proto.InternalMessageInfo - -func (m *QueryActiveProvidersResponse) GetProviders() []ActiveProviders { - if m != nil { - return m.Providers - } - return nil +func (*UnimplementedQueryServer) Attestation(ctx context.Context, req *QueryAttestationRequest) (*QueryAttestationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Attestation not implemented") } - -type QueryStorageStatsRequest struct { +func (*UnimplementedQueryServer) AttestationsAll(ctx context.Context, req *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AttestationsAll not implemented") } - -func (m *QueryStorageStatsRequest) Reset() { *m = QueryStorageStatsRequest{} } -func (m *QueryStorageStatsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryStorageStatsRequest) ProtoMessage() {} -func (*QueryStorageStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{50} +func (*UnimplementedQueryServer) Reports(ctx context.Context, req *QueryReportRequest) (*QueryReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Reports not implemented") } -func (m *QueryStorageStatsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) +func (*UnimplementedQueryServer) ReportsAll(ctx context.Context, req *QueryAllReportRequest) (*QueryAllReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ReportsAll not implemented") } -func (m *QueryStorageStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryStorageStatsRequest.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 (*UnimplementedQueryServer) Freespace(ctx context.Context, req *QueryFreespaceRequest) (*QueryFreespaceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Freespace not implemented") } -func (m *QueryStorageStatsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryStorageStatsRequest.Merge(m, src) +func (*UnimplementedQueryServer) StoreCount(ctx context.Context, req *QueryStoreCountRequest) (*QueryStoreCountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StoreCount not implemented") } -func (m *QueryStorageStatsRequest) XXX_Size() int { - return m.Size() +func (*UnimplementedQueryServer) FindFile(ctx context.Context, req *QueryFindFileRequest) (*QueryFindFileResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FindFile not implemented") } -func (m *QueryStorageStatsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryStorageStatsRequest.DiscardUnknown(m) +func (*UnimplementedQueryServer) GetClientFreeSpace(ctx context.Context, req *QueryClientFreeSpaceRequest) (*QueryClientFreeSpaceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetClientFreeSpace not implemented") } - -var xxx_messageInfo_QueryStorageStatsRequest proto.InternalMessageInfo - -type QueryStorageStatsResponse struct { - Purchased uint64 `protobuf:"varint,1,opt,name=purchased,proto3" json:"purchased,omitempty"` - Used uint64 `protobuf:"varint,2,opt,name=used,proto3" json:"used,omitempty"` - UsedRatio github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=usedRatio,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"usedRatio"` - ActiveUsers uint64 `protobuf:"varint,4,opt,name=activeUsers,proto3" json:"activeUsers,omitempty"` +func (*UnimplementedQueryServer) GetPayData(ctx context.Context, req *QueryPayDataRequest) (*QueryPayDataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPayData not implemented") } - -func (m *QueryStorageStatsResponse) Reset() { *m = QueryStorageStatsResponse{} } -func (m *QueryStorageStatsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryStorageStatsResponse) ProtoMessage() {} -func (*QueryStorageStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{51} +func (*UnimplementedQueryServer) StoragePaymentInfo(ctx context.Context, req *QueryStoragePaymentInfoRequest) (*QueryStoragePaymentInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StoragePaymentInfo not implemented") } -func (m *QueryStorageStatsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) +func (*UnimplementedQueryServer) StoragePaymentInfoAll(ctx context.Context, req *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StoragePaymentInfoAll not implemented") } -func (m *QueryStorageStatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryStorageStatsResponse.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 (*UnimplementedQueryServer) FileUploadCheck(ctx context.Context, req *QueryFileUploadCheckRequest) (*QueryFileUploadCheckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FileUploadCheck not implemented") } -func (m *QueryStorageStatsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryStorageStatsResponse.Merge(m, src) +func (*UnimplementedQueryServer) PriceCheck(ctx context.Context, req *QueryPriceCheckRequest) (*QueryPriceCheckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PriceCheck not implemented") } -func (m *QueryStorageStatsResponse) XXX_Size() int { - return m.Size() +func (*UnimplementedQueryServer) ActiveProviders(ctx context.Context, req *QueryActiveProvidersRequest) (*QueryActiveProvidersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ActiveProviders not implemented") } -func (m *QueryStorageStatsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryStorageStatsResponse.DiscardUnknown(m) +func (*UnimplementedQueryServer) StorageStats(ctx context.Context, req *QueryStorageStatsRequest) (*QueryStorageStatsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StorageStats not implemented") } -var xxx_messageInfo_QueryStorageStatsResponse proto.InternalMessageInfo - -func (m *QueryStorageStatsResponse) GetPurchased() uint64 { - if m != nil { - return m.Purchased - } - return 0 +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) } -func (m *QueryStorageStatsResponse) GetUsed() uint64 { - if m != nil { - return m.Used +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err } - return 0 -} - -func (m *QueryStorageStatsResponse) GetActiveUsers() uint64 { - if m != nil { - return m.ActiveUsers + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) } - return 0 -} - -func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.storage.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.storage.QueryParamsResponse") - proto.RegisterType((*QueryContractRequest)(nil), "canine_chain.storage.QueryContractRequest") - proto.RegisterType((*QueryContractResponse)(nil), "canine_chain.storage.QueryContractResponse") - proto.RegisterType((*QueryAllContractsRequest)(nil), "canine_chain.storage.QueryAllContractsRequest") - proto.RegisterType((*QueryAllContractsResponse)(nil), "canine_chain.storage.QueryAllContractsResponse") - proto.RegisterType((*QueryActiveDealRequest)(nil), "canine_chain.storage.QueryActiveDealRequest") - proto.RegisterType((*QueryActiveDealResponse)(nil), "canine_chain.storage.QueryActiveDealResponse") - proto.RegisterType((*QueryAllActiveDealsRequest)(nil), "canine_chain.storage.QueryAllActiveDealsRequest") - proto.RegisterType((*QueryAllActiveDealsResponse)(nil), "canine_chain.storage.QueryAllActiveDealsResponse") - proto.RegisterType((*QueryProviderRequest)(nil), "canine_chain.storage.QueryProviderRequest") - proto.RegisterType((*QueryProviderResponse)(nil), "canine_chain.storage.QueryProviderResponse") - proto.RegisterType((*QueryAllProvidersRequest)(nil), "canine_chain.storage.QueryAllProvidersRequest") - proto.RegisterType((*QueryAllProvidersResponse)(nil), "canine_chain.storage.QueryAllProvidersResponse") - proto.RegisterType((*QueryAttestationRequest)(nil), "canine_chain.storage.QueryAttestationRequest") - proto.RegisterType((*QueryAttestationResponse)(nil), "canine_chain.storage.QueryAttestationResponse") - proto.RegisterType((*QueryAllAttestationsRequest)(nil), "canine_chain.storage.QueryAllAttestationsRequest") - proto.RegisterType((*QueryAllAttestationsResponse)(nil), "canine_chain.storage.QueryAllAttestationsResponse") - proto.RegisterType((*QueryReportRequest)(nil), "canine_chain.storage.QueryReportRequest") - proto.RegisterType((*QueryReportResponse)(nil), "canine_chain.storage.QueryReportResponse") - proto.RegisterType((*QueryAllReportRequest)(nil), "canine_chain.storage.QueryAllReportRequest") - proto.RegisterType((*QueryAllReportResponse)(nil), "canine_chain.storage.QueryAllReportResponse") - proto.RegisterType((*QueryFreespaceRequest)(nil), "canine_chain.storage.QueryFreespaceRequest") - proto.RegisterType((*QueryStoreCountRequest)(nil), "canine_chain.storage.QueryStoreCountRequest") - proto.RegisterType((*QueryFreespaceResponse)(nil), "canine_chain.storage.QueryFreespaceResponse") - proto.RegisterType((*QueryStoreCountResponse)(nil), "canine_chain.storage.QueryStoreCountResponse") - proto.RegisterType((*QueryFindFileRequest)(nil), "canine_chain.storage.QueryFindFileRequest") - proto.RegisterType((*QueryFindFileResponse)(nil), "canine_chain.storage.QueryFindFileResponse") - proto.RegisterType((*QueryStrayRequest)(nil), "canine_chain.storage.QueryStrayRequest") - proto.RegisterType((*QueryStrayResponse)(nil), "canine_chain.storage.QueryStrayResponse") - proto.RegisterType((*QueryAllStraysRequest)(nil), "canine_chain.storage.QueryAllStraysRequest") - proto.RegisterType((*QueryAllStraysResponse)(nil), "canine_chain.storage.QueryAllStraysResponse") - proto.RegisterType((*QueryClientFreeSpaceRequest)(nil), "canine_chain.storage.QueryClientFreeSpaceRequest") - proto.RegisterType((*QueryClientFreeSpaceResponse)(nil), "canine_chain.storage.QueryClientFreeSpaceResponse") - proto.RegisterType((*QueryFidCidRequest)(nil), "canine_chain.storage.QueryFidCidRequest") - proto.RegisterType((*QueryFidCidResponse)(nil), "canine_chain.storage.QueryFidCidResponse") - proto.RegisterType((*QueryAllFidCidRequest)(nil), "canine_chain.storage.QueryAllFidCidRequest") - proto.RegisterType((*QueryAllFidCidResponse)(nil), "canine_chain.storage.QueryAllFidCidResponse") - proto.RegisterType((*QueryPayDataRequest)(nil), "canine_chain.storage.QueryPayDataRequest") - proto.RegisterType((*QueryPayDataResponse)(nil), "canine_chain.storage.QueryPayDataResponse") - proto.RegisterType((*QueryStoragePaymentInfoRequest)(nil), "canine_chain.storage.QueryStoragePaymentInfoRequest") - proto.RegisterType((*QueryStoragePaymentInfoResponse)(nil), "canine_chain.storage.QueryStoragePaymentInfoResponse") - proto.RegisterType((*QueryAllStoragePaymentInfoRequest)(nil), "canine_chain.storage.QueryAllStoragePaymentInfoRequest") - proto.RegisterType((*QueryAllStoragePaymentInfoResponse)(nil), "canine_chain.storage.QueryAllStoragePaymentInfoResponse") - proto.RegisterType((*QueryFileUploadCheckRequest)(nil), "canine_chain.storage.QueryFileUploadCheckRequest") - proto.RegisterType((*QueryFileUploadCheckResponse)(nil), "canine_chain.storage.QueryFileUploadCheckResponse") - proto.RegisterType((*QueryPriceCheckRequest)(nil), "canine_chain.storage.QueryPriceCheckRequest") - proto.RegisterType((*QueryPriceCheckResponse)(nil), "canine_chain.storage.QueryPriceCheckResponse") - proto.RegisterType((*QueryActiveProvidersRequest)(nil), "canine_chain.storage.QueryActiveProvidersRequest") - proto.RegisterType((*QueryActiveProvidersResponse)(nil), "canine_chain.storage.QueryActiveProvidersResponse") - proto.RegisterType((*QueryStorageStatsRequest)(nil), "canine_chain.storage.QueryStorageStatsRequest") - proto.RegisterType((*QueryStorageStatsResponse)(nil), "canine_chain.storage.QueryStorageStatsResponse") -} - -func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } - -var fileDescriptor_9fe03bff51a37284 = []byte{ - // 2037 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0xcd, 0x8f, 0x1c, 0x47, - 0x15, 0x77, 0x79, 0x9c, 0xb5, 0xe7, 0xed, 0x92, 0x40, 0xb1, 0x01, 0x33, 0x98, 0xf5, 0xba, 0x85, - 0xed, 0xcd, 0xda, 0x3b, 0xbd, 0xbb, 0xb6, 0xe3, 0xc4, 0x89, 0x48, 0xec, 0xb5, 0xd6, 0x38, 0x72, - 0xc4, 0x66, 0x2c, 0x5f, 0x10, 0xd2, 0x50, 0xdb, 0x5d, 0x33, 0x6e, 0x3c, 0xdb, 0x3d, 0xe9, 0xee, - 0x5d, 0xb1, 0x5a, 0xf9, 0x02, 0x77, 0x84, 0x40, 0x7c, 0x1d, 0x92, 0x03, 0x01, 0x45, 0x11, 0x48, - 0x48, 0x81, 0x03, 0x17, 0x0e, 0x20, 0x21, 0xe5, 0x46, 0x24, 0x2e, 0x88, 0x43, 0x84, 0x6c, 0xfe, - 0x10, 0xd4, 0x55, 0xaf, 0xba, 0xab, 0xa7, 0x7b, 0xaa, 0xbb, 0xad, 0xe1, 0xb4, 0x53, 0xd5, 0xef, - 0x55, 0xfd, 0xde, 0x67, 0x55, 0xfd, 0xb4, 0xb0, 0xec, 0x30, 0xdf, 0xf3, 0x79, 0xdf, 0x79, 0xc8, - 0x3c, 0xdf, 0x8e, 0xe2, 0x20, 0x64, 0x43, 0x6e, 0xbf, 0xbb, 0xcf, 0xc3, 0xc3, 0xee, 0x38, 0x0c, - 0xe2, 0x80, 0x2e, 0xea, 0x12, 0x5d, 0x94, 0xe8, 0x2c, 0x0e, 0x83, 0x61, 0x20, 0x04, 0xec, 0xe4, - 0x97, 0x94, 0xed, 0x9c, 0x19, 0x06, 0xc1, 0x70, 0xc4, 0x6d, 0x36, 0xf6, 0x6c, 0xe6, 0xfb, 0x41, - 0xcc, 0x62, 0x2f, 0xf0, 0x23, 0xfc, 0xba, 0xea, 0x04, 0xd1, 0x5e, 0x10, 0xd9, 0xbb, 0x2c, 0xc2, - 0x2d, 0xec, 0x83, 0x8d, 0x5d, 0x1e, 0xb3, 0x0d, 0x7b, 0xcc, 0x86, 0x9e, 0x2f, 0x84, 0x51, 0xf6, - 0x5c, 0x29, 0xae, 0x31, 0x0b, 0xd9, 0x9e, 0x5a, 0xee, 0xeb, 0xa5, 0x22, 0x4e, 0xe0, 0xc7, 0x21, - 0x73, 0x62, 0x25, 0x75, 0xb1, 0x54, 0x8a, 0x39, 0xb1, 0x77, 0xc0, 0xfb, 0x2e, 0x67, 0x23, 0xf3, - 0x72, 0xe3, 0x30, 0x38, 0xf0, 0x5c, 0x1e, 0x46, 0x46, 0x5c, 0x51, 0x1c, 0xb2, 0x43, 0x25, 0x62, - 0x95, 0x8a, 0x0c, 0x3c, 0xb7, 0xef, 0x78, 0xae, 0x11, 0xd5, 0x98, 0x1d, 0xee, 0x71, 0x3f, 0xee, - 0x7b, 0xfe, 0x00, 0x3d, 0x6a, 0x2d, 0x02, 0x7d, 0x27, 0xf1, 0xd4, 0x8e, 0xb0, 0xbc, 0xc7, 0xdf, - 0xdd, 0xe7, 0x51, 0x6c, 0xbd, 0x03, 0x5f, 0xcc, 0xcd, 0x46, 0xe3, 0xc0, 0x8f, 0x38, 0xbd, 0x01, - 0x73, 0xd2, 0x43, 0xa7, 0xc9, 0x32, 0x59, 0x99, 0xdf, 0x3c, 0xd3, 0x2d, 0x8b, 0x5d, 0x57, 0x6a, - 0xdd, 0x3a, 0xf1, 0xc9, 0x67, 0x67, 0x8f, 0xf5, 0x50, 0xc3, 0x5a, 0x81, 0x45, 0xb1, 0xe4, 0x16, - 0xfa, 0x0f, 0xb7, 0xa2, 0x9f, 0x87, 0x96, 0xe3, 0xb9, 0x62, 0xc1, 0x76, 0x2f, 0xf9, 0x69, 0x7d, - 0x07, 0x5e, 0x9c, 0x90, 0xc4, 0xed, 0xb7, 0xa0, 0x9d, 0x7a, 0x1f, 0x11, 0x9c, 0x2d, 0x47, 0xa0, - 0x54, 0x15, 0x88, 0x4c, 0xcf, 0xda, 0x85, 0xd3, 0x62, 0xf5, 0x9b, 0xa3, 0x51, 0x2a, 0xa5, 0xb0, - 0x6c, 0x03, 0x64, 0x89, 0x82, 0x3b, 0x5c, 0xe8, 0xca, 0xac, 0xea, 0x26, 0x59, 0xd5, 0x95, 0x89, - 0x8b, 0x59, 0xd5, 0xdd, 0x61, 0x43, 0x8e, 0xba, 0x3d, 0x4d, 0xd3, 0xfa, 0x88, 0xc0, 0x57, 0x4a, - 0x36, 0x29, 0x37, 0xa3, 0xf5, 0x2c, 0x66, 0xd0, 0x3b, 0x39, 0xa8, 0xc7, 0x05, 0xd4, 0x8b, 0x95, - 0x50, 0x25, 0x82, 0x1c, 0xd6, 0x55, 0xf8, 0x92, 0x84, 0x2a, 0x32, 0xf6, 0x36, 0x67, 0xa3, 0xe9, - 0x91, 0xe1, 0xf0, 0xe5, 0x82, 0x2c, 0x1a, 0xf5, 0x16, 0x2c, 0xe8, 0x39, 0x8f, 0xce, 0x3b, 0x57, - 0x6e, 0x57, 0xa6, 0xaf, 0x2c, 0x9b, 0x67, 0xd9, 0x94, 0xe5, 0x42, 0x47, 0x79, 0x4f, 0x93, 0x9c, - 0x75, 0x90, 0x3e, 0x26, 0xf0, 0xd5, 0xd2, 0x6d, 0xa6, 0x5a, 0xd4, 0x7a, 0x56, 0x8b, 0x66, 0x17, - 0xad, 0x75, 0xac, 0xa2, 0x1d, 0x6c, 0x1b, 0xca, 0x29, 0xa7, 0xe1, 0x24, 0x73, 0xdd, 0x90, 0x47, - 0x11, 0xc6, 0x4b, 0x0d, 0xd3, 0x6a, 0xca, 0x34, 0xb2, 0x34, 0x4c, 0x9b, 0x8f, 0xb9, 0x9a, 0x94, - 0x6a, 0x9a, 0x86, 0xa9, 0x9e, 0x5e, 0x4d, 0xa9, 0xd4, 0xff, 0xb3, 0x9a, 0xb4, 0x4d, 0xca, 0xcd, - 0x68, 0x3d, 0x8b, 0x19, 0xb3, 0x8b, 0xcf, 0x25, 0x55, 0x21, 0x71, 0xcc, 0x23, 0x79, 0x3a, 0x4d, - 0x2f, 0x27, 0x4f, 0x39, 0x4f, 0x17, 0x46, 0xb3, 0xde, 0x86, 0x79, 0x96, 0x4d, 0xa3, 0xf7, 0xce, - 0x4f, 0x49, 0xbe, 0x4c, 0x70, 0x3b, 0x08, 0xf7, 0xd2, 0x04, 0xcc, 0xa6, 0x2d, 0xae, 0xe5, 0x7a, - 0x36, 0x3d, 0xf3, 0x50, 0xfd, 0x99, 0xc0, 0x99, 0xf2, 0x7d, 0xd0, 0xac, 0x6f, 0xc1, 0x82, 0x06, - 0x4b, 0x05, 0xac, 0x91, 0x5d, 0xb9, 0x05, 0x66, 0x17, 0xb9, 0x0b, 0x78, 0x10, 0xf6, 0xf8, 0x38, - 0x08, 0x0d, 0xa7, 0xd3, 0x03, 0x3c, 0x1a, 0x95, 0x1c, 0x1a, 0xf6, 0x0d, 0x98, 0x0b, 0xc5, 0x0c, - 0x7a, 0x6f, 0xb9, 0xdc, 0x24, 0xa9, 0xa5, 0x59, 0x83, 0x5a, 0x56, 0x1f, 0xcb, 0xf4, 0xe6, 0x68, - 0x94, 0x47, 0x30, 0xab, 0xd0, 0x7c, 0x40, 0x54, 0xa3, 0xcf, 0x76, 0x40, 0xec, 0x6f, 0xc2, 0x49, - 0x89, 0x42, 0xc5, 0xa3, 0x2e, 0x78, 0xa5, 0x36, 0xbb, 0x28, 0x6c, 0xa0, 0x1b, 0xb6, 0x43, 0xce, - 0xa3, 0x31, 0x73, 0x78, 0x75, 0x83, 0xdb, 0x44, 0xbb, 0xee, 0xc7, 0x41, 0xc8, 0xb7, 0x82, 0x7d, - 0x3f, 0xae, 0xd6, 0xe9, 0xa2, 0x8e, 0xb6, 0x0d, 0xfa, 0x62, 0x11, 0x9e, 0x13, 0x13, 0xa8, 0x21, - 0x07, 0x96, 0x8d, 0x65, 0xad, 0xef, 0x91, 0x29, 0x38, 0xc9, 0x84, 0x52, 0x10, 0x83, 0xf4, 0xb6, - 0xb3, 0xed, 0xf9, 0xee, 0xb6, 0x37, 0xe2, 0x5a, 0x3e, 0x0d, 0xb2, 0x7c, 0x1a, 0x78, 0xae, 0x75, - 0x43, 0x59, 0x9c, 0x4a, 0xe2, 0xc2, 0xe7, 0x60, 0x41, 0x35, 0xa8, 0xbe, 0x37, 0x56, 0x26, 0xcc, - 0xab, 0xb9, 0xbb, 0xe3, 0xc8, 0x3a, 0x0f, 0x5f, 0x40, 0x58, 0x21, 0x3b, 0x9c, 0x9e, 0xb2, 0x3b, - 0x98, 0xda, 0x28, 0x96, 0x5d, 0xe6, 0xe4, 0xb5, 0xd2, 0x7c, 0x99, 0x13, 0x4a, 0xe9, 0x65, 0x4e, - 0x6a, 0xe8, 0xd9, 0x2a, 0xbf, 0xcf, 0x3a, 0x5b, 0xdf, 0xd3, 0xb2, 0x55, 0xed, 0x50, 0x82, 0xbb, - 0xd5, 0x0c, 0xf7, 0xec, 0xf2, 0xf4, 0x3a, 0xf6, 0xd3, 0xad, 0x91, 0xc7, 0xfd, 0x38, 0x49, 0xa3, - 0xfb, 0xf5, 0xb2, 0xf5, 0x75, 0x6c, 0x90, 0x05, 0x45, 0xb4, 0xee, 0x0c, 0xb4, 0x77, 0x0f, 0x63, - 0x1e, 0x0d, 0x42, 0x2e, 0x73, 0xb0, 0xd5, 0xcb, 0x26, 0xd2, 0x26, 0xb5, 0xed, 0xb9, 0x5b, 0x9e, - 0x3b, 0x3d, 0xa9, 0x7a, 0xd8, 0xa4, 0x94, 0x1c, 0x2e, 0xfe, 0x1a, 0x9c, 0xc4, 0x67, 0x82, 0x39, - 0xe6, 0x52, 0x4d, 0xf9, 0x6e, 0x20, 0x46, 0x7a, 0xcc, 0xf3, 0xdb, 0xcf, 0x2a, 0xe6, 0xef, 0x6b, - 0x31, 0x37, 0x01, 0x6f, 0x35, 0x03, 0x3e, 0xbb, 0xa0, 0xdb, 0xe9, 0xab, 0xe8, 0xf0, 0x36, 0x8b, - 0x59, 0x75, 0xb0, 0xef, 0xab, 0xdb, 0x9a, 0x52, 0x40, 0x73, 0xce, 0xc3, 0xf3, 0xb1, 0xb7, 0xc7, - 0xfb, 0x21, 0xdf, 0x63, 0x9e, 0xef, 0xf9, 0x43, 0x8c, 0xf4, 0xe7, 0x92, 0xd9, 0x9e, 0x9a, 0x4c, - 0x5a, 0x8b, 0x08, 0xbd, 0xc0, 0xdc, 0xea, 0xc9, 0x81, 0x75, 0x03, 0x96, 0xd2, 0x5e, 0xc4, 0x86, - 0x7c, 0x47, 0xbe, 0xe9, 0xee, 0xfa, 0x83, 0xa0, 0x1a, 0xd0, 0x0f, 0x09, 0x9c, 0x9d, 0xaa, 0x8c, - 0xe0, 0xbe, 0x0b, 0x8b, 0xe8, 0xce, 0xbe, 0xfe, 0x5e, 0xc4, 0xc0, 0xae, 0x4c, 0xab, 0xb6, 0xc9, - 0xf5, 0x30, 0x08, 0x34, 0x2a, 0x7c, 0xb1, 0x1e, 0xc1, 0xb9, 0xac, 0xb6, 0xa7, 0x19, 0x31, 0xab, - 0xac, 0xfa, 0x07, 0x01, 0xcb, 0xb4, 0x5b, 0xa5, 0xd5, 0xad, 0xd9, 0x58, 0x3d, 0xbb, 0x34, 0x7c, - 0x1b, 0x7b, 0x4f, 0x72, 0x5a, 0x3c, 0x18, 0x8f, 0x02, 0xe6, 0x6e, 0x3d, 0xe4, 0xce, 0xa3, 0xca, - 0xe8, 0x4f, 0xc9, 0xa7, 0xab, 0xd8, 0x91, 0x0a, 0xcb, 0x65, 0x07, 0xdc, 0x01, 0x1b, 0x61, 0xcb, - 0x38, 0xd5, 0x93, 0x03, 0xeb, 0x2d, 0xac, 0xd5, 0x9d, 0xd0, 0x73, 0x78, 0x6e, 0xff, 0x0e, 0x9c, - 0x72, 0xf7, 0xc3, 0x2c, 0x6c, 0xed, 0x5e, 0x3a, 0x9e, 0x82, 0x40, 0x9d, 0xae, 0xfa, 0x5a, 0xd9, - 0xe6, 0xe3, 0x64, 0x16, 0x0b, 0x44, 0x0e, 0xac, 0xaf, 0xa9, 0xdb, 0xac, 0x78, 0x62, 0x4d, 0x3e, - 0x3c, 0x2c, 0x4f, 0x5d, 0x42, 0x27, 0x3f, 0xe3, 0xa2, 0x77, 0x8b, 0x4f, 0x86, 0xf3, 0xa6, 0x67, - 0x9d, 0xe1, 0xfd, 0xd3, 0xc1, 0x2b, 0x3c, 0x66, 0xc2, 0xfd, 0x98, 0xa5, 0x6c, 0x82, 0xf5, 0x17, - 0xf5, 0x6e, 0xc9, 0x7f, 0xcc, 0x1a, 0xfd, 0x78, 0x3f, 0x74, 0x1e, 0xb2, 0x88, 0x4b, 0xd7, 0x9e, - 0xe8, 0x65, 0x13, 0x94, 0xc2, 0x89, 0xfd, 0xe4, 0xc3, 0x71, 0xf1, 0x41, 0xfc, 0xa6, 0xf7, 0xa0, - 0x9d, 0xfc, 0xed, 0x25, 0xae, 0x3c, 0xdd, 0x5a, 0x26, 0x2b, 0x0b, 0xb7, 0xba, 0x09, 0x9e, 0x7f, - 0x7f, 0x76, 0xf6, 0xc2, 0xd0, 0x8b, 0x1f, 0xee, 0xef, 0x76, 0x9d, 0x60, 0xcf, 0x46, 0x12, 0x4c, - 0xfe, 0x59, 0x8b, 0xdc, 0x47, 0x76, 0x7c, 0x38, 0xe6, 0x51, 0xf7, 0x36, 0x77, 0x7a, 0xd9, 0x02, - 0x74, 0x19, 0xf0, 0x85, 0xfa, 0x20, 0x4a, 0xdc, 0x70, 0x42, 0x6c, 0xa4, 0x4f, 0x6d, 0xfe, 0xce, - 0x82, 0xe7, 0x04, 0x7e, 0xfa, 0x23, 0x02, 0x73, 0x92, 0xd4, 0xa1, 0x53, 0x2a, 0xa1, 0xc8, 0x21, - 0x75, 0x5e, 0xaa, 0x21, 0x29, 0x7d, 0x61, 0xd9, 0x3f, 0xf8, 0xe7, 0x7f, 0x7f, 0x7a, 0xfc, 0x25, - 0x7a, 0xd1, 0xfe, 0x1e, 0x73, 0x1e, 0xb1, 0xd1, 0x9a, 0xcb, 0x02, 0x5b, 0x6a, 0xaf, 0x95, 0x11, - 0x74, 0xf4, 0x7d, 0x02, 0xed, 0x94, 0x1c, 0xa1, 0xab, 0x86, 0x9d, 0x26, 0xe8, 0xa6, 0xce, 0xa5, - 0x5a, 0xb2, 0x88, 0xeb, 0x15, 0x81, 0x6b, 0x93, 0xae, 0x57, 0xe2, 0x4a, 0x89, 0x19, 0xfb, 0xc8, - 0xf1, 0xdc, 0xc7, 0xf4, 0x03, 0x02, 0x0b, 0x29, 0xc0, 0x9b, 0xa3, 0x11, 0xed, 0x1a, 0xf6, 0x2d, - 0xa1, 0xa2, 0x3a, 0x76, 0x6d, 0x79, 0xc4, 0xba, 0x29, 0xb0, 0x5e, 0xa6, 0xab, 0xf5, 0xb1, 0xd2, - 0x0f, 0x09, 0xcc, 0x6b, 0xcc, 0x05, 0xbd, 0x6c, 0xda, 0x74, 0x92, 0x1f, 0xea, 0xac, 0xd5, 0x94, - 0x46, 0x80, 0xaf, 0x09, 0x80, 0xd7, 0xe8, 0x95, 0x4a, 0x80, 0x3a, 0xed, 0x82, 0xfe, 0xfc, 0x3d, - 0x81, 0xe7, 0x35, 0xa4, 0x89, 0x47, 0xd7, 0xcd, 0x1e, 0x2a, 0x32, 0x47, 0x9d, 0x8d, 0x06, 0x1a, - 0x08, 0xfa, 0x9a, 0x00, 0x6d, 0xd3, 0xb5, 0x46, 0xa0, 0xe9, 0xaf, 0x09, 0xb4, 0xd3, 0xae, 0x61, - 0xcc, 0xcf, 0x09, 0x22, 0xc7, 0x98, 0x9f, 0x93, 0x14, 0x8e, 0xf5, 0xba, 0x40, 0xf7, 0x32, 0xbd, - 0x5a, 0x5d, 0x37, 0x0a, 0x8c, 0x7d, 0x84, 0xa7, 0x81, 0xcc, 0xd1, 0x14, 0x64, 0x8d, 0x1c, 0x9d, - 0xec, 0xb3, 0x55, 0x39, 0x5a, 0x68, 0xbc, 0x0d, 0x72, 0x34, 0xa3, 0x66, 0x3e, 0x4a, 0x72, 0x34, - 0x7b, 0xf1, 0x53, 0x63, 0xd6, 0x15, 0x58, 0x97, 0x4e, 0xb7, 0xae, 0x78, 0xf3, 0x2c, 0xd5, 0x68, - 0x08, 0xcc, 0xd2, 0x3f, 0x10, 0x78, 0x41, 0xa7, 0x3d, 0x12, 0xa7, 0x56, 0x25, 0x5d, 0x91, 0x8d, - 0xe9, 0x6c, 0x36, 0x51, 0x69, 0x9e, 0xa8, 0x3a, 0x7d, 0xf2, 0x73, 0x02, 0x27, 0x7b, 0xf8, 0x88, - 0x37, 0xb5, 0xf6, 0x1c, 0x27, 0x61, 0x6c, 0xed, 0x79, 0x6e, 0xc1, 0x7a, 0x59, 0xe0, 0x5a, 0xa7, - 0xdd, 0x4a, 0x5c, 0xc8, 0x25, 0xa0, 0x2b, 0x7f, 0x45, 0x00, 0x10, 0x58, 0xe2, 0xc5, 0x4b, 0x66, - 0x97, 0xe4, 0xe1, 0x5d, 0xae, 0x27, 0x8c, 0x08, 0xd7, 0x05, 0xc2, 0x55, 0xba, 0x52, 0x17, 0x21, - 0xfd, 0x0d, 0x81, 0x76, 0xca, 0x1c, 0x18, 0xa1, 0x4d, 0xd2, 0x18, 0x46, 0x68, 0x05, 0x32, 0xa2, - 0x41, 0x7d, 0x0f, 0x94, 0xae, 0x56, 0xdf, 0xbf, 0x25, 0x00, 0x19, 0x61, 0x61, 0x6c, 0xee, 0x05, - 0xee, 0xc4, 0xd8, 0xdc, 0x8b, 0x2c, 0x88, 0x75, 0x43, 0x20, 0xbd, 0x4a, 0x37, 0x2b, 0x91, 0x26, - 0x7f, 0x3d, 0x7f, 0xa8, 0xe1, 0x7c, 0x8f, 0xc0, 0x29, 0xc5, 0x7e, 0x18, 0x7b, 0xe5, 0x04, 0x99, - 0x62, 0xec, 0x95, 0x93, 0x74, 0x4a, 0x83, 0xb3, 0x7c, 0xe0, 0xf9, 0x6e, 0x7f, 0xe0, 0x8d, 0xb8, - 0x7d, 0x34, 0x48, 0x52, 0xf1, 0x27, 0x04, 0xe6, 0x24, 0x9b, 0x40, 0x2f, 0x1a, 0xbd, 0x92, 0x91, - 0x30, 0x9d, 0x95, 0x6a, 0xc1, 0xc6, 0x85, 0x2b, 0x39, 0x0c, 0xac, 0x8f, 0x5f, 0x10, 0x68, 0x4b, - 0x50, 0x35, 0xca, 0x23, 0xc7, 0xd1, 0x54, 0x95, 0x47, 0x9e, 0x6e, 0x69, 0x70, 0x37, 0x43, 0x8e, - 0xe5, 0xef, 0x04, 0xe8, 0x1d, 0x1e, 0x4f, 0x10, 0x1c, 0xc6, 0x3e, 0x58, 0xce, 0xa2, 0x18, 0xfb, - 0xe0, 0x14, 0xfe, 0xc4, 0xfa, 0xa6, 0x80, 0x7b, 0x8b, 0xbe, 0x59, 0x09, 0x77, 0xc8, 0xe3, 0xbe, - 0x23, 0x56, 0xe9, 0x27, 0xd5, 0xd3, 0x9f, 0x2c, 0x9f, 0x9f, 0x11, 0x98, 0x93, 0x7c, 0x82, 0xb1, - 0x33, 0xe6, 0xb8, 0x10, 0x63, 0x67, 0xcc, 0x73, 0x1a, 0x0d, 0x3a, 0x23, 0x52, 0x1f, 0x98, 0x8e, - 0xbf, 0x4c, 0xba, 0x8f, 0x58, 0xaa, 0x46, 0xe4, 0xf3, 0xe8, 0x2e, 0xd7, 0x13, 0x6e, 0xdc, 0x18, - 0x11, 0x60, 0xd2, 0x18, 0xe1, 0x0e, 0x8f, 0x91, 0xee, 0xa0, 0xe6, 0x17, 0x80, 0xce, 0xa1, 0x74, - 0x56, 0xeb, 0x88, 0x22, 0xae, 0x37, 0x04, 0xae, 0x57, 0xe9, 0xf5, 0x5a, 0x21, 0x1e, 0xb3, 0xc3, - 0xbe, 0xcb, 0x62, 0xa6, 0x45, 0xf6, 0x6f, 0x04, 0x68, 0xf1, 0xe9, 0x4e, 0xaf, 0x56, 0xb4, 0xbc, - 0x52, 0x9e, 0xa2, 0x73, 0xad, 0xa1, 0x56, 0x63, 0x23, 0x74, 0x3a, 0x42, 0x33, 0xe2, 0xaf, 0x04, - 0x5e, 0x2c, 0xae, 0x9f, 0xa4, 0xc4, 0xf5, 0xaa, 0xfa, 0x9e, 0x66, 0xca, 0x2b, 0xcd, 0x15, 0x1b, - 0x37, 0x31, 0xdd, 0x1a, 0xfa, 0x27, 0x02, 0x2f, 0x4c, 0xd0, 0x0e, 0xc6, 0x3e, 0x51, 0xce, 0x78, - 0x18, 0xfb, 0xc4, 0x14, 0x56, 0xa3, 0xc1, 0x81, 0x95, 0x9c, 0x04, 0xfd, 0x7d, 0xb1, 0x44, 0xdf, - 0x11, 0x10, 0x3f, 0x26, 0x00, 0x19, 0x57, 0x61, 0x3c, 0x58, 0x0b, 0xf4, 0x88, 0xf1, 0x60, 0x2d, - 0x12, 0x20, 0xd6, 0x1d, 0x81, 0xf3, 0x26, 0x7d, 0xa3, 0xc6, 0x95, 0xd9, 0x73, 0xb8, 0x44, 0x68, - 0x1f, 0x29, 0xc6, 0xe5, 0xb1, 0x7d, 0x24, 0x38, 0x96, 0xc7, 0xf4, 0x8f, 0xc9, 0xdd, 0x34, 0x4f, - 0x67, 0x98, 0xef, 0xa6, 0xa5, 0xdc, 0x8a, 0xf9, 0x6e, 0x5a, 0xce, 0xb7, 0x58, 0xaf, 0x0a, 0x1b, - 0xae, 0xd0, 0x8d, 0xba, 0x8f, 0xa8, 0xec, 0xf6, 0xff, 0x21, 0x81, 0x05, 0x9d, 0x3e, 0x31, 0xbe, - 0x51, 0x4a, 0x48, 0x18, 0xe3, 0x1b, 0xa5, 0x8c, 0x97, 0x69, 0xd0, 0x96, 0x15, 0x5f, 0x98, 0x5c, - 0xa6, 0xa3, 0x5b, 0xf7, 0x3e, 0x79, 0xb2, 0x44, 0x3e, 0x7d, 0xb2, 0x44, 0xfe, 0xf3, 0x64, 0x89, - 0xfc, 0xf8, 0xe9, 0xd2, 0xb1, 0x4f, 0x9f, 0x2e, 0x1d, 0xfb, 0xd7, 0xd3, 0xa5, 0x63, 0xdf, 0xde, - 0xd4, 0xc8, 0x19, 0xb9, 0xe6, 0x3d, 0xb6, 0x1b, 0xe5, 0xd7, 0xfc, 0x7e, 0xba, 0xaa, 0x20, 0x6b, - 0x76, 0xe7, 0xc4, 0x7f, 0xe7, 0x5c, 0xf9, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x97, 0x20, - 0x27, 0x3f, 0x25, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// QueryClient is the client API for Query service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type QueryClient interface { - // Parameters queries the parameters of the module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) - // Queries a Contracts by index. - Contracts(ctx context.Context, in *QueryContractRequest, opts ...grpc.CallOption) (*QueryContractResponse, error) - // Queries a list of Contracts items. - ContractsAll(ctx context.Context, in *QueryAllContractsRequest, opts ...grpc.CallOption) (*QueryAllContractsResponse, error) - // Queries a ActiveDeals by index. - ActiveDeals(ctx context.Context, in *QueryActiveDealRequest, opts ...grpc.CallOption) (*QueryActiveDealResponse, error) - // Queries a list of ActiveDeals items. - ActiveDealsAll(ctx context.Context, in *QueryAllActiveDealsRequest, opts ...grpc.CallOption) (*QueryAllActiveDealsResponse, error) - // Queries a Providers by index. - Providers(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) - // Queries a list of Providers items. - ProvidersAll(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) - // Queries a Attestation by index. - Attestation(ctx context.Context, in *QueryAttestationRequest, opts ...grpc.CallOption) (*QueryAttestationResponse, error) - // Queries a list of Attestation items. - AttestationsAll(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) - // Queries a Report by index. - Reports(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) - // Queries a list of Attestation items. - ReportsAll(ctx context.Context, in *QueryAllReportRequest, opts ...grpc.CallOption) (*QueryAllReportResponse, error) - // Queries a list of Freespace items. - Freespace(ctx context.Context, in *QueryFreespaceRequest, opts ...grpc.CallOption) (*QueryFreespaceResponse, error) - // Queries a list of Freespace items. - StoreCount(ctx context.Context, in *QueryStoreCountRequest, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) - // Queries a list of FindFile items. - FindFile(ctx context.Context, in *QueryFindFileRequest, opts ...grpc.CallOption) (*QueryFindFileResponse, error) - // Queries a Strays by index. - Strays(ctx context.Context, in *QueryStrayRequest, opts ...grpc.CallOption) (*QueryStrayResponse, error) - // Queries a list of Strays items. - StraysAll(ctx context.Context, in *QueryAllStraysRequest, opts ...grpc.CallOption) (*QueryAllStraysResponse, error) - // Queries a list of GetClientFreeSpace items. - GetClientFreeSpace(ctx context.Context, in *QueryClientFreeSpaceRequest, opts ...grpc.CallOption) (*QueryClientFreeSpaceResponse, error) - // Queries a FidCid by index. - FidCid(ctx context.Context, in *QueryFidCidRequest, opts ...grpc.CallOption) (*QueryFidCidResponse, error) - // Queries a list of FidCid items. - FidCidAll(ctx context.Context, in *QueryAllFidCidRequest, opts ...grpc.CallOption) (*QueryAllFidCidResponse, error) - // Queries a list of GetPayData items. - GetPayData(ctx context.Context, in *QueryPayDataRequest, opts ...grpc.CallOption) (*QueryPayDataResponse, error) - // Queries a StoragePaymentInfo by address. - StoragePaymentInfo(ctx context.Context, in *QueryStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryStoragePaymentInfoResponse, error) - // Queries a list of StoragePaymentInfo items. - StoragePaymentInfoAll(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) - // Queries whether user can upload a file based on size - FileUploadCheck(ctx context.Context, in *QueryFileUploadCheckRequest, opts ...grpc.CallOption) (*QueryFileUploadCheckResponse, error) - // Queries whether user can upload a file based on size - PriceCheck(ctx context.Context, in *QueryPriceCheckRequest, opts ...grpc.CallOption) (*QueryPriceCheckResponse, error) - // Queries whether user can upload a file based on size - ActiveProviders(ctx context.Context, in *QueryActiveProvidersRequest, opts ...grpc.CallOption) (*QueryActiveProvidersResponse, error) - // Queries the storage space used and purchased - StorageStats(ctx context.Context, in *QueryStorageStatsRequest, opts ...grpc.CallOption) (*QueryStorageStatsResponse, error) -} - -type queryClient struct { - cc grpc1.ClientConn -} - -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { - out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Params", in, out, opts...) - if err != nil { +func _Query_File_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryFileRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).File(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/File", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).File(ctx, req.(*QueryFileRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) Contracts(ctx context.Context, in *QueryContractRequest, opts ...grpc.CallOption) (*QueryContractResponse, error) { - out := new(QueryContractResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Contracts", in, out, opts...) - if err != nil { +func _Query_FilesAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllFilesRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).FilesAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/FilesAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).FilesAll(ctx, req.(*QueryAllFilesRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) ContractsAll(ctx context.Context, in *QueryAllContractsRequest, opts ...grpc.CallOption) (*QueryAllContractsResponse, error) { - out := new(QueryAllContractsResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ContractsAll", in, out, opts...) - if err != nil { +func _Query_Providers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryProviderRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).Providers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/Providers", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Providers(ctx, req.(*QueryProviderRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) ActiveDeals(ctx context.Context, in *QueryActiveDealRequest, opts ...grpc.CallOption) (*QueryActiveDealResponse, error) { - out := new(QueryActiveDealResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ActiveDeals", in, out, opts...) - if err != nil { +func _Query_ProvidersAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllProvidersRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).ProvidersAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/ProvidersAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ProvidersAll(ctx, req.(*QueryAllProvidersRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) ActiveDealsAll(ctx context.Context, in *QueryAllActiveDealsRequest, opts ...grpc.CallOption) (*QueryAllActiveDealsResponse, error) { - out := new(QueryAllActiveDealsResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ActiveDealsAll", in, out, opts...) - if err != nil { +func _Query_Attestation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAttestationRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).Attestation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/Attestation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Attestation(ctx, req.(*QueryAttestationRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) Providers(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) { - out := new(QueryProviderResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Providers", in, out, opts...) - if err != nil { +func _Query_AttestationsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllAttestationsRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).AttestationsAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/AttestationsAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AttestationsAll(ctx, req.(*QueryAllAttestationsRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) ProvidersAll(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) { - out := new(QueryAllProvidersResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ProvidersAll", in, out, opts...) - if err != nil { +func _Query_Reports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryReportRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).Reports(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/Reports", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Reports(ctx, req.(*QueryReportRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) Attestation(ctx context.Context, in *QueryAttestationRequest, opts ...grpc.CallOption) (*QueryAttestationResponse, error) { - out := new(QueryAttestationResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Attestation", in, out, opts...) - if err != nil { +func _Query_ReportsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllReportRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).ReportsAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/ReportsAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ReportsAll(ctx, req.(*QueryAllReportRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) AttestationsAll(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) { - out := new(QueryAllAttestationsResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AttestationsAll", in, out, opts...) - if err != nil { +func _Query_Freespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryFreespaceRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil -} - -func (c *queryClient) Reports(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) { - out := new(QueryReportResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Reports", in, out, opts...) - if err != nil { - return nil, err + if interceptor == nil { + return srv.(QueryServer).Freespace(ctx, in) } - return out, nil -} - -func (c *queryClient) ReportsAll(ctx context.Context, in *QueryAllReportRequest, opts ...grpc.CallOption) (*QueryAllReportResponse, error) { - out := new(QueryAllReportResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ReportsAll", in, out, opts...) - if err != nil { - return nil, err + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/Freespace", } - return out, nil -} - -func (c *queryClient) Freespace(ctx context.Context, in *QueryFreespaceRequest, opts ...grpc.CallOption) (*QueryFreespaceResponse, error) { - out := new(QueryFreespaceResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Freespace", in, out, opts...) - if err != nil { - return nil, err + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Freespace(ctx, req.(*QueryFreespaceRequest)) } - return out, nil + return interceptor(ctx, in, info, handler) } -func (c *queryClient) StoreCount(ctx context.Context, in *QueryStoreCountRequest, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) { - out := new(QueryStoreCountResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StoreCount", in, out, opts...) - if err != nil { +func _Query_StoreCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryStoreCountRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil -} - -func (c *queryClient) FindFile(ctx context.Context, in *QueryFindFileRequest, opts ...grpc.CallOption) (*QueryFindFileResponse, error) { - out := new(QueryFindFileResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FindFile", in, out, opts...) - if err != nil { - return nil, err + if interceptor == nil { + return srv.(QueryServer).StoreCount(ctx, in) } - return out, nil -} - -func (c *queryClient) Strays(ctx context.Context, in *QueryStrayRequest, opts ...grpc.CallOption) (*QueryStrayResponse, error) { - out := new(QueryStrayResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Strays", in, out, opts...) - if err != nil { - return nil, err + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/StoreCount", } - return out, nil -} - -func (c *queryClient) StraysAll(ctx context.Context, in *QueryAllStraysRequest, opts ...grpc.CallOption) (*QueryAllStraysResponse, error) { - out := new(QueryAllStraysResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StraysAll", in, out, opts...) - if err != nil { - return nil, err + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).StoreCount(ctx, req.(*QueryStoreCountRequest)) } - return out, nil + return interceptor(ctx, in, info, handler) } -func (c *queryClient) GetClientFreeSpace(ctx context.Context, in *QueryClientFreeSpaceRequest, opts ...grpc.CallOption) (*QueryClientFreeSpaceResponse, error) { - out := new(QueryClientFreeSpaceResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/GetClientFreeSpace", in, out, opts...) - if err != nil { +func _Query_FindFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryFindFileRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil -} - -func (c *queryClient) FidCid(ctx context.Context, in *QueryFidCidRequest, opts ...grpc.CallOption) (*QueryFidCidResponse, error) { - out := new(QueryFidCidResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FidCid", in, out, opts...) - if err != nil { - return nil, err + if interceptor == nil { + return srv.(QueryServer).FindFile(ctx, in) } - return out, nil + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/FindFile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).FindFile(ctx, req.(*QueryFindFileRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) FidCidAll(ctx context.Context, in *QueryAllFidCidRequest, opts ...grpc.CallOption) (*QueryAllFidCidResponse, error) { - out := new(QueryAllFidCidResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FidCidAll", in, out, opts...) - if err != nil { +func _Query_GetClientFreeSpace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryClientFreeSpaceRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).GetClientFreeSpace(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/GetClientFreeSpace", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetClientFreeSpace(ctx, req.(*QueryClientFreeSpaceRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) GetPayData(ctx context.Context, in *QueryPayDataRequest, opts ...grpc.CallOption) (*QueryPayDataResponse, error) { - out := new(QueryPayDataResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/GetPayData", in, out, opts...) - if err != nil { +func _Query_GetPayData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPayDataRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).GetPayData(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/GetPayData", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).GetPayData(ctx, req.(*QueryPayDataRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) StoragePaymentInfo(ctx context.Context, in *QueryStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryStoragePaymentInfoResponse, error) { - out := new(QueryStoragePaymentInfoResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StoragePaymentInfo", in, out, opts...) - if err != nil { +func _Query_StoragePaymentInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryStoragePaymentInfoRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).StoragePaymentInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/StoragePaymentInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).StoragePaymentInfo(ctx, req.(*QueryStoragePaymentInfoRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) StoragePaymentInfoAll(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) { - out := new(QueryAllStoragePaymentInfoResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StoragePaymentInfoAll", in, out, opts...) - if err != nil { +func _Query_StoragePaymentInfoAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllStoragePaymentInfoRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).StoragePaymentInfoAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/StoragePaymentInfoAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).StoragePaymentInfoAll(ctx, req.(*QueryAllStoragePaymentInfoRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) FileUploadCheck(ctx context.Context, in *QueryFileUploadCheckRequest, opts ...grpc.CallOption) (*QueryFileUploadCheckResponse, error) { - out := new(QueryFileUploadCheckResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FileUploadCheck", in, out, opts...) - if err != nil { +func _Query_FileUploadCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryFileUploadCheckRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).FileUploadCheck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/FileUploadCheck", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).FileUploadCheck(ctx, req.(*QueryFileUploadCheckRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) PriceCheck(ctx context.Context, in *QueryPriceCheckRequest, opts ...grpc.CallOption) (*QueryPriceCheckResponse, error) { - out := new(QueryPriceCheckResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/PriceCheck", in, out, opts...) - if err != nil { +func _Query_PriceCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPriceCheckRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).PriceCheck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/PriceCheck", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PriceCheck(ctx, req.(*QueryPriceCheckRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) ActiveProviders(ctx context.Context, in *QueryActiveProvidersRequest, opts ...grpc.CallOption) (*QueryActiveProvidersResponse, error) { - out := new(QueryActiveProvidersResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ActiveProviders", in, out, opts...) - if err != nil { +func _Query_ActiveProviders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryActiveProvidersRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).ActiveProviders(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/ActiveProviders", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ActiveProviders(ctx, req.(*QueryActiveProvidersRequest)) + } + return interceptor(ctx, in, info, handler) } -func (c *queryClient) StorageStats(ctx context.Context, in *QueryStorageStatsRequest, opts ...grpc.CallOption) (*QueryStorageStatsResponse, error) { - out := new(QueryStorageStatsResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StorageStats", in, out, opts...) - if err != nil { +func _Query_StorageStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryStorageStatsRequest) + if err := dec(in); err != nil { return nil, err } - return out, nil + if interceptor == nil { + return srv.(QueryServer).StorageStats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/StorageStats", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).StorageStats(ctx, req.(*QueryStorageStatsRequest)) + } + return interceptor(ctx, in, info, handler) } -// QueryServer is the server API for Query service. -type QueryServer interface { - // Parameters queries the parameters of the module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) - // Queries a Contracts by index. - Contracts(context.Context, *QueryContractRequest) (*QueryContractResponse, error) - // Queries a list of Contracts items. - ContractsAll(context.Context, *QueryAllContractsRequest) (*QueryAllContractsResponse, error) - // Queries a ActiveDeals by index. - ActiveDeals(context.Context, *QueryActiveDealRequest) (*QueryActiveDealResponse, error) - // Queries a list of ActiveDeals items. - ActiveDealsAll(context.Context, *QueryAllActiveDealsRequest) (*QueryAllActiveDealsResponse, error) - // Queries a Providers by index. - Providers(context.Context, *QueryProviderRequest) (*QueryProviderResponse, error) - // Queries a list of Providers items. - ProvidersAll(context.Context, *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) - // Queries a Attestation by index. - Attestation(context.Context, *QueryAttestationRequest) (*QueryAttestationResponse, error) - // Queries a list of Attestation items. - AttestationsAll(context.Context, *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) - // Queries a Report by index. - Reports(context.Context, *QueryReportRequest) (*QueryReportResponse, error) - // Queries a list of Attestation items. - ReportsAll(context.Context, *QueryAllReportRequest) (*QueryAllReportResponse, error) - // Queries a list of Freespace items. - Freespace(context.Context, *QueryFreespaceRequest) (*QueryFreespaceResponse, error) - // Queries a list of Freespace items. - StoreCount(context.Context, *QueryStoreCountRequest) (*QueryStoreCountResponse, error) - // Queries a list of FindFile items. - FindFile(context.Context, *QueryFindFileRequest) (*QueryFindFileResponse, error) - // Queries a Strays by index. - Strays(context.Context, *QueryStrayRequest) (*QueryStrayResponse, error) - // Queries a list of Strays items. - StraysAll(context.Context, *QueryAllStraysRequest) (*QueryAllStraysResponse, error) - // Queries a list of GetClientFreeSpace items. - GetClientFreeSpace(context.Context, *QueryClientFreeSpaceRequest) (*QueryClientFreeSpaceResponse, error) - // Queries a FidCid by index. - FidCid(context.Context, *QueryFidCidRequest) (*QueryFidCidResponse, error) - // Queries a list of FidCid items. - FidCidAll(context.Context, *QueryAllFidCidRequest) (*QueryAllFidCidResponse, error) - // Queries a list of GetPayData items. - GetPayData(context.Context, *QueryPayDataRequest) (*QueryPayDataResponse, error) - // Queries a StoragePaymentInfo by address. - StoragePaymentInfo(context.Context, *QueryStoragePaymentInfoRequest) (*QueryStoragePaymentInfoResponse, error) - // Queries a list of StoragePaymentInfo items. - StoragePaymentInfoAll(context.Context, *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) - // Queries whether user can upload a file based on size - FileUploadCheck(context.Context, *QueryFileUploadCheckRequest) (*QueryFileUploadCheckResponse, error) - // Queries whether user can upload a file based on size - PriceCheck(context.Context, *QueryPriceCheckRequest) (*QueryPriceCheckResponse, error) - // Queries whether user can upload a file based on size - ActiveProviders(context.Context, *QueryActiveProvidersRequest) (*QueryActiveProvidersResponse, error) - // Queries the storage space used and purchased - StorageStats(context.Context, *QueryStorageStatsRequest) (*QueryStorageStatsResponse, error) +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "canine_chain.storage.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "File", + Handler: _Query_File_Handler, + }, + { + MethodName: "FilesAll", + Handler: _Query_FilesAll_Handler, + }, + { + MethodName: "Providers", + Handler: _Query_Providers_Handler, + }, + { + MethodName: "ProvidersAll", + Handler: _Query_ProvidersAll_Handler, + }, + { + MethodName: "Attestation", + Handler: _Query_Attestation_Handler, + }, + { + MethodName: "AttestationsAll", + Handler: _Query_AttestationsAll_Handler, + }, + { + MethodName: "Reports", + Handler: _Query_Reports_Handler, + }, + { + MethodName: "ReportsAll", + Handler: _Query_ReportsAll_Handler, + }, + { + MethodName: "Freespace", + Handler: _Query_Freespace_Handler, + }, + { + MethodName: "StoreCount", + Handler: _Query_StoreCount_Handler, + }, + { + MethodName: "FindFile", + Handler: _Query_FindFile_Handler, + }, + { + MethodName: "GetClientFreeSpace", + Handler: _Query_GetClientFreeSpace_Handler, + }, + { + MethodName: "GetPayData", + Handler: _Query_GetPayData_Handler, + }, + { + MethodName: "StoragePaymentInfo", + Handler: _Query_StoragePaymentInfo_Handler, + }, + { + MethodName: "StoragePaymentInfoAll", + Handler: _Query_StoragePaymentInfoAll_Handler, + }, + { + MethodName: "FileUploadCheck", + Handler: _Query_FileUploadCheck_Handler, + }, + { + MethodName: "PriceCheck", + Handler: _Query_PriceCheck_Handler, + }, + { + MethodName: "ActiveProviders", + Handler: _Query_ActiveProviders_Handler, + }, + { + MethodName: "StorageStats", + Handler: _Query_StorageStats_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "canine_chain/storage/query.proto", } -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { +func (m *QueryParamsRequest) 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 (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") -} -func (*UnimplementedQueryServer) Contracts(ctx context.Context, req *QueryContractRequest) (*QueryContractResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Contracts not implemented") -} -func (*UnimplementedQueryServer) ContractsAll(ctx context.Context, req *QueryAllContractsRequest) (*QueryAllContractsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ContractsAll not implemented") -} -func (*UnimplementedQueryServer) ActiveDeals(ctx context.Context, req *QueryActiveDealRequest) (*QueryActiveDealResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ActiveDeals not implemented") -} -func (*UnimplementedQueryServer) ActiveDealsAll(ctx context.Context, req *QueryAllActiveDealsRequest) (*QueryAllActiveDealsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ActiveDealsAll not implemented") -} -func (*UnimplementedQueryServer) Providers(ctx context.Context, req *QueryProviderRequest) (*QueryProviderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Providers not implemented") -} -func (*UnimplementedQueryServer) ProvidersAll(ctx context.Context, req *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProvidersAll not implemented") -} -func (*UnimplementedQueryServer) Attestation(ctx context.Context, req *QueryAttestationRequest) (*QueryAttestationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Attestation not implemented") -} -func (*UnimplementedQueryServer) AttestationsAll(ctx context.Context, req *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AttestationsAll not implemented") -} -func (*UnimplementedQueryServer) Reports(ctx context.Context, req *QueryReportRequest) (*QueryReportResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Reports not implemented") -} -func (*UnimplementedQueryServer) ReportsAll(ctx context.Context, req *QueryAllReportRequest) (*QueryAllReportResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReportsAll not implemented") -} -func (*UnimplementedQueryServer) Freespace(ctx context.Context, req *QueryFreespaceRequest) (*QueryFreespaceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Freespace not implemented") -} -func (*UnimplementedQueryServer) StoreCount(ctx context.Context, req *QueryStoreCountRequest) (*QueryStoreCountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method StoreCount not implemented") -} -func (*UnimplementedQueryServer) FindFile(ctx context.Context, req *QueryFindFileRequest) (*QueryFindFileResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FindFile not implemented") -} -func (*UnimplementedQueryServer) Strays(ctx context.Context, req *QueryStrayRequest) (*QueryStrayResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Strays not implemented") -} -func (*UnimplementedQueryServer) StraysAll(ctx context.Context, req *QueryAllStraysRequest) (*QueryAllStraysResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method StraysAll not implemented") -} -func (*UnimplementedQueryServer) GetClientFreeSpace(ctx context.Context, req *QueryClientFreeSpaceRequest) (*QueryClientFreeSpaceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetClientFreeSpace not implemented") -} -func (*UnimplementedQueryServer) FidCid(ctx context.Context, req *QueryFidCidRequest) (*QueryFidCidResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FidCid not implemented") -} -func (*UnimplementedQueryServer) FidCidAll(ctx context.Context, req *QueryAllFidCidRequest) (*QueryAllFidCidResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FidCidAll not implemented") -} -func (*UnimplementedQueryServer) GetPayData(ctx context.Context, req *QueryPayDataRequest) (*QueryPayDataResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPayData not implemented") -} -func (*UnimplementedQueryServer) StoragePaymentInfo(ctx context.Context, req *QueryStoragePaymentInfoRequest) (*QueryStoragePaymentInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method StoragePaymentInfo not implemented") -} -func (*UnimplementedQueryServer) StoragePaymentInfoAll(ctx context.Context, req *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method StoragePaymentInfoAll not implemented") -} -func (*UnimplementedQueryServer) FileUploadCheck(ctx context.Context, req *QueryFileUploadCheckRequest) (*QueryFileUploadCheckResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FileUploadCheck not implemented") -} -func (*UnimplementedQueryServer) PriceCheck(ctx context.Context, req *QueryPriceCheckRequest) (*QueryPriceCheckResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PriceCheck not implemented") -} -func (*UnimplementedQueryServer) ActiveProviders(ctx context.Context, req *QueryActiveProvidersRequest) (*QueryActiveProvidersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ActiveProviders not implemented") -} -func (*UnimplementedQueryServer) StorageStats(ctx context.Context, req *QueryStorageStatsRequest) (*QueryStorageStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method StorageStats not implemented") +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil } -func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) - if err := dec(in); err != nil { +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).Params(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/Params", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) - } - return interceptor(ctx, in, info, handler) + return dAtA[:n], nil } -func _Query_Contracts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryContractRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Contracts(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/Contracts", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Contracts(ctx, req.(*QueryContractRequest)) - } - return interceptor(ctx, in, info, handler) +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func _Query_ContractsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllContractsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).ContractsAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/ContractsAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ContractsAll(ctx, req.(*QueryAllContractsRequest)) +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } - return interceptor(ctx, in, info, handler) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func _Query_ActiveDeals_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryActiveDealRequest) - if err := dec(in); err != nil { +func (m *QueryFileRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).ActiveDeals(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/ActiveDeals", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ActiveDeals(ctx, req.(*QueryActiveDealRequest)) - } - return interceptor(ctx, in, info, handler) + return dAtA[:n], nil } -func _Query_ActiveDealsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllActiveDealsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).ActiveDealsAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/ActiveDealsAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ActiveDealsAll(ctx, req.(*QueryAllActiveDealsRequest)) - } - return interceptor(ctx, in, info, handler) +func (m *QueryFileRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func _Query_Providers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryProviderRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Providers(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/Providers", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Providers(ctx, req.(*QueryProviderRequest)) +func (m *QueryFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0xa } - return interceptor(ctx, in, info, handler) + return len(dAtA) - i, nil } -func _Query_ProvidersAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllProvidersRequest) - if err := dec(in); err != nil { +func (m *QueryFileResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).ProvidersAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/ProvidersAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ProvidersAll(ctx, req.(*QueryAllProvidersRequest)) - } - return interceptor(ctx, in, info, handler) + return dAtA[:n], nil } -func _Query_Attestation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAttestationRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Attestation(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/Attestation", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Attestation(ctx, req.(*QueryAttestationRequest)) - } - return interceptor(ctx, in, info, handler) +func (m *QueryFileResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func _Query_AttestationsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllAttestationsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).AttestationsAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/AttestationsAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AttestationsAll(ctx, req.(*QueryAllAttestationsRequest)) +func (m *QueryFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.File.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } - return interceptor(ctx, in, info, handler) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func _Query_Reports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryReportRequest) - if err := dec(in); err != nil { +func (m *QueryAllFilesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).Reports(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/Reports", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Reports(ctx, req.(*QueryReportRequest)) - } - return interceptor(ctx, in, info, handler) + return dAtA[:n], nil } -func _Query_ReportsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllReportRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).ReportsAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/ReportsAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ReportsAll(ctx, req.(*QueryAllReportRequest)) - } - return interceptor(ctx, in, info, handler) +func (m *QueryAllFilesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func _Query_Freespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFreespaceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Freespace(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/Freespace", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Freespace(ctx, req.(*QueryFreespaceRequest)) +func (m *QueryAllFilesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return interceptor(ctx, in, info, handler) + return len(dAtA) - i, nil } -func _Query_StoreCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryStoreCountRequest) - if err := dec(in); err != nil { +func (m *QueryAllFilesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).StoreCount(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/StoreCount", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).StoreCount(ctx, req.(*QueryStoreCountRequest)) - } - return interceptor(ctx, in, info, handler) + return dAtA[:n], nil } -func _Query_FindFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFindFileRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).FindFile(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/FindFile", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FindFile(ctx, req.(*QueryFindFileRequest)) - } - return interceptor(ctx, in, info, handler) +func (m *QueryAllFilesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func _Query_Strays_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryStrayRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Strays(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/Strays", +func (m *QueryAllFilesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Strays(ctx, req.(*QueryStrayRequest)) + if len(m.Files) > 0 { + for iNdEx := len(m.Files) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Files[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - return interceptor(ctx, in, info, handler) + return len(dAtA) - i, nil } -func _Query_StraysAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllStraysRequest) - if err := dec(in); err != nil { +func (m *QueryProviderRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).StraysAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/StraysAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).StraysAll(ctx, req.(*QueryAllStraysRequest)) - } - return interceptor(ctx, in, info, handler) + return dAtA[:n], nil } -func _Query_GetClientFreeSpace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryClientFreeSpaceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).GetClientFreeSpace(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/GetClientFreeSpace", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).GetClientFreeSpace(ctx, req.(*QueryClientFreeSpaceRequest)) - } - return interceptor(ctx, in, info, handler) +func (m *QueryProviderRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func _Query_FidCid_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFidCidRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).FidCid(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/FidCid", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FidCid(ctx, req.(*QueryFidCidRequest)) +func (m *QueryProviderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa } - return interceptor(ctx, in, info, handler) + return len(dAtA) - i, nil } -func _Query_FidCidAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllFidCidRequest) - if err := dec(in); err != nil { +func (m *QueryProviderResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).FidCidAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/FidCidAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FidCidAll(ctx, req.(*QueryAllFidCidRequest)) - } - return interceptor(ctx, in, info, handler) + return dAtA[:n], nil } -func _Query_GetPayData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPayDataRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).GetPayData(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/GetPayData", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).GetPayData(ctx, req.(*QueryPayDataRequest)) - } - return interceptor(ctx, in, info, handler) +func (m *QueryProviderResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func _Query_StoragePaymentInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryStoragePaymentInfoRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).StoragePaymentInfo(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/StoragePaymentInfo", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).StoragePaymentInfo(ctx, req.(*QueryStoragePaymentInfoRequest)) +func (m *QueryProviderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Providers.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } - return interceptor(ctx, in, info, handler) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } -func _Query_StoragePaymentInfoAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllStoragePaymentInfoRequest) - if err := dec(in); err != nil { +func (m *QueryAllProvidersRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).StoragePaymentInfoAll(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/StoragePaymentInfoAll", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).StoragePaymentInfoAll(ctx, req.(*QueryAllStoragePaymentInfoRequest)) - } - return interceptor(ctx, in, info, handler) + return dAtA[:n], nil } -func _Query_FileUploadCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFileUploadCheckRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).FileUploadCheck(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/FileUploadCheck", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FileUploadCheck(ctx, req.(*QueryFileUploadCheckRequest)) - } - return interceptor(ctx, in, info, handler) +func (m *QueryAllProvidersRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func _Query_PriceCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPriceCheckRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).PriceCheck(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/PriceCheck", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PriceCheck(ctx, req.(*QueryPriceCheckRequest)) +func (m *QueryAllProvidersRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa } - return interceptor(ctx, in, info, handler) + return len(dAtA) - i, nil } -func _Query_ActiveProviders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryActiveProvidersRequest) - if err := dec(in); err != nil { +func (m *QueryAllProvidersResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).ActiveProviders(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/ActiveProviders", + return dAtA[:n], nil +} + +func (m *QueryAllProvidersResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllProvidersResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ActiveProviders(ctx, req.(*QueryActiveProvidersRequest)) + if len(m.Providers) > 0 { + for iNdEx := len(m.Providers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Providers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } - return interceptor(ctx, in, info, handler) + return len(dAtA) - i, nil } -func _Query_StorageStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryStorageStatsRequest) - if err := dec(in); err != nil { +func (m *QueryAttestationRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { return nil, err } - if interceptor == nil { - return srv.(QueryServer).StorageStats(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Query/StorageStats", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).StorageStats(ctx, req.(*QueryStorageStatsRequest)) - } - return interceptor(ctx, in, info, handler) + return dAtA[:n], nil } -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "canine_chain.storage.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Params", - Handler: _Query_Params_Handler, - }, - { - MethodName: "Contracts", - Handler: _Query_Contracts_Handler, - }, - { - MethodName: "ContractsAll", - Handler: _Query_ContractsAll_Handler, - }, - { - MethodName: "ActiveDeals", - Handler: _Query_ActiveDeals_Handler, - }, - { - MethodName: "ActiveDealsAll", - Handler: _Query_ActiveDealsAll_Handler, - }, - { - MethodName: "Providers", - Handler: _Query_Providers_Handler, - }, - { - MethodName: "ProvidersAll", - Handler: _Query_ProvidersAll_Handler, - }, - { - MethodName: "Attestation", - Handler: _Query_Attestation_Handler, - }, - { - MethodName: "AttestationsAll", - Handler: _Query_AttestationsAll_Handler, - }, - { - MethodName: "Reports", - Handler: _Query_Reports_Handler, - }, - { - MethodName: "ReportsAll", - Handler: _Query_ReportsAll_Handler, - }, - { - MethodName: "Freespace", - Handler: _Query_Freespace_Handler, - }, - { - MethodName: "StoreCount", - Handler: _Query_StoreCount_Handler, - }, - { - MethodName: "FindFile", - Handler: _Query_FindFile_Handler, - }, - { - MethodName: "Strays", - Handler: _Query_Strays_Handler, - }, - { - MethodName: "StraysAll", - Handler: _Query_StraysAll_Handler, - }, - { - MethodName: "GetClientFreeSpace", - Handler: _Query_GetClientFreeSpace_Handler, - }, - { - MethodName: "FidCid", - Handler: _Query_FidCid_Handler, - }, - { - MethodName: "FidCidAll", - Handler: _Query_FidCidAll_Handler, - }, - { - MethodName: "GetPayData", - Handler: _Query_GetPayData_Handler, - }, - { - MethodName: "StoragePaymentInfo", - Handler: _Query_StoragePaymentInfo_Handler, - }, - { - MethodName: "StoragePaymentInfoAll", - Handler: _Query_StoragePaymentInfoAll_Handler, - }, - { - MethodName: "FileUploadCheck", - Handler: _Query_FileUploadCheck_Handler, - }, - { - MethodName: "PriceCheck", - Handler: _Query_PriceCheck_Handler, - }, - { - MethodName: "ActiveProviders", - Handler: _Query_ActiveProviders_Handler, - }, - { - MethodName: "StorageStats", - Handler: _Query_StorageStats_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "canine_chain/storage/query.proto", -} - -func (m *QueryParamsRequest) 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 *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *QueryParamsResponse) 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 *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryContractRequest) 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 *QueryContractRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAttestationRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryContractRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAttestationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3710,7 +3242,7 @@ func (m *QueryContractRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryContractResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAttestationResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3720,18 +3252,18 @@ func (m *QueryContractResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryContractResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAttestationResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAttestationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Contracts.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Attestation.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3743,7 +3275,7 @@ func (m *QueryContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllContractsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllAttestationsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3753,12 +3285,12 @@ func (m *QueryAllContractsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllContractsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllAttestationsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllContractsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllAttestationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3778,7 +3310,7 @@ func (m *QueryAllContractsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } -func (m *QueryAllContractsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllAttestationsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3788,12 +3320,12 @@ func (m *QueryAllContractsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllContractsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllAttestationsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllContractsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllAttestationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3810,10 +3342,10 @@ func (m *QueryAllContractsResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro i-- dAtA[i] = 0x12 } - if len(m.Contracts) > 0 { - for iNdEx := len(m.Contracts) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Attestations) > 0 { + for iNdEx := len(m.Attestations) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Contracts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Attestations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3827,7 +3359,7 @@ func (m *QueryAllContractsResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } -func (m *QueryActiveDealRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryReportRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3837,12 +3369,12 @@ func (m *QueryActiveDealRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryActiveDealRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryReportRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryActiveDealRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3857,7 +3389,7 @@ func (m *QueryActiveDealRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryActiveDealResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryReportResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3867,18 +3399,18 @@ func (m *QueryActiveDealResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryActiveDealResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryReportResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryActiveDealResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.ActiveDeals.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Report.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3890,7 +3422,7 @@ func (m *QueryActiveDealResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryAllActiveDealsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllReportRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3900,12 +3432,12 @@ func (m *QueryAllActiveDealsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllActiveDealsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllReportRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllActiveDealsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3925,7 +3457,7 @@ func (m *QueryAllActiveDealsRequest) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } -func (m *QueryAllActiveDealsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllReportResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3935,12 +3467,12 @@ func (m *QueryAllActiveDealsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllActiveDealsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllReportResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllActiveDealsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3957,10 +3489,10 @@ func (m *QueryAllActiveDealsResponse) MarshalToSizedBuffer(dAtA []byte) (int, er i-- dAtA[i] = 0x12 } - if len(m.ActiveDeals) > 0 { - for iNdEx := len(m.ActiveDeals) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Reports) > 0 { + for iNdEx := len(m.Reports) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.ActiveDeals[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Reports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3974,7 +3506,7 @@ func (m *QueryAllActiveDealsResponse) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *QueryProviderRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFreespaceRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3984,12 +3516,12 @@ func (m *QueryProviderRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryProviderRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFreespaceRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryProviderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFreespaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4004,7 +3536,7 @@ func (m *QueryProviderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryProviderResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryStoreCountRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4014,30 +3546,27 @@ func (m *QueryProviderResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryProviderResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStoreCountRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryProviderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStoreCountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.Providers.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryAllProvidersRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFreespaceResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4047,32 +3576,27 @@ func (m *QueryAllProvidersRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllProvidersRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFreespaceResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllProvidersRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFreespaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + if len(m.Space) > 0 { + i -= len(m.Space) + copy(dAtA[i:], m.Space) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Space))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAllProvidersResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryStoreCountResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4082,46 +3606,57 @@ func (m *QueryAllProvidersResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllProvidersResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStoreCountResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllProvidersResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStoreCountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + if len(m.Count) > 0 { + i -= len(m.Count) + copy(dAtA[i:], m.Count) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Count))) i-- - dAtA[i] = 0x12 + dAtA[i] = 0xa } - if len(m.Providers) > 0 { - for iNdEx := len(m.Providers) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Providers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + return len(dAtA) - i, nil +} + +func (m *QueryFindFileRequest) 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 *QueryFindFileRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryFindFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Fid) > 0 { + i -= len(m.Fid) + copy(dAtA[i:], m.Fid) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Fid))) + i-- + dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAttestationRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFindFileResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4131,27 +3666,27 @@ func (m *QueryAttestationRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAttestationRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFindFileResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAttestationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFindFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Cid))) + if len(m.ProviderIps) > 0 { + i -= len(m.ProviderIps) + copy(dAtA[i:], m.ProviderIps) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ProviderIps))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAttestationResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryClientFreeSpaceRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4161,30 +3696,27 @@ func (m *QueryAttestationResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAttestationResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryClientFreeSpaceRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAttestationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryClientFreeSpaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.Attestation.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryAllAttestationsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryClientFreeSpaceResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4194,32 +3726,55 @@ func (m *QueryAllAttestationsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllAttestationsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryClientFreeSpaceResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllAttestationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryClientFreeSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + if m.Bytesfree != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Bytesfree)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryFidCidRequest) 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 *QueryFidCidRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryFidCidRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Fid) > 0 { + i -= len(m.Fid) + copy(dAtA[i:], m.Fid) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Fid))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryAllAttestationsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryPayDataRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4229,46 +3784,60 @@ func (m *QueryAllAttestationsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllAttestationsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPayDataRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllAttestationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPayDataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) i-- - dAtA[i] = 0x12 + dAtA[i] = 0xa } - if len(m.Attestations) > 0 { - for iNdEx := len(m.Attestations) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Attestations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + return len(dAtA) - i, nil +} + +func (m *QueryPayDataResponse) 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 *QueryPayDataResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPayDataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Bytes != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Bytes)) + i-- + dAtA[i] = 0x10 + } + if m.TimeRemaining != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.TimeRemaining)) + i-- + dAtA[i] = 0x8 } return len(dAtA) - i, nil } -func (m *QueryReportRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryStoragePaymentInfoRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4278,27 +3847,27 @@ func (m *QueryReportRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryReportRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStoragePaymentInfoRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStoragePaymentInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Cid))) + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryReportResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryStoragePaymentInfoResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4308,18 +3877,18 @@ func (m *QueryReportResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryReportResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStoragePaymentInfoResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStoragePaymentInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Report.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.StoragePaymentInfo.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4331,7 +3900,7 @@ func (m *QueryReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllReportRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllStoragePaymentInfoRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4341,12 +3910,12 @@ func (m *QueryAllReportRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllReportRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllStoragePaymentInfoRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllStoragePaymentInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4366,7 +3935,7 @@ func (m *QueryAllReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllReportResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllStoragePaymentInfoResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4376,12 +3945,12 @@ func (m *QueryAllReportResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllReportResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllStoragePaymentInfoResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllStoragePaymentInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4398,10 +3967,10 @@ func (m *QueryAllReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x12 } - if len(m.Reports) > 0 { - for iNdEx := len(m.Reports) - 1; iNdEx >= 0; iNdEx-- { + if len(m.StoragePaymentInfo) > 0 { + for iNdEx := len(m.StoragePaymentInfo) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Reports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.StoragePaymentInfo[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4415,7 +3984,7 @@ func (m *QueryAllReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryFreespaceRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFileUploadCheckRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4425,16 +3994,21 @@ func (m *QueryFreespaceRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFreespaceRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFileUploadCheckRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFreespaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFileUploadCheckRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if m.Bytes != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Bytes)) + i-- + dAtA[i] = 0x10 + } if len(m.Address) > 0 { i -= len(m.Address) copy(dAtA[i:], m.Address) @@ -4445,7 +4019,7 @@ func (m *QueryFreespaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryStoreCountRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFileUploadCheckResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4455,27 +4029,30 @@ func (m *QueryStoreCountRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryStoreCountRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFileUploadCheckResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryStoreCountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFileUploadCheckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + if m.Valid { i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} + if m.Valid { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} -func (m *QueryFreespaceResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryPriceCheckRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4485,27 +4062,32 @@ func (m *QueryFreespaceResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFreespaceResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPriceCheckRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFreespaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPriceCheckRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Space) > 0 { - i -= len(m.Space) - copy(dAtA[i:], m.Space) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Space))) + if m.Bytes != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Bytes)) + i-- + dAtA[i] = 0x10 + } + if len(m.Duration) > 0 { + i -= len(m.Duration) + copy(dAtA[i:], m.Duration) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Duration))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryStoreCountResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryPriceCheckResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4515,27 +4097,25 @@ func (m *QueryStoreCountResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryStoreCountResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPriceCheckResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryStoreCountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPriceCheckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Count) > 0 { - i -= len(m.Count) - copy(dAtA[i:], m.Count) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Count))) + if m.Price != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Price)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 } return len(dAtA) - i, nil } -func (m *QueryFindFileRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryActiveProvidersRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4545,27 +4125,20 @@ func (m *QueryFindFileRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFindFileRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryActiveProvidersRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFindFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryActiveProvidersRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Fid) > 0 { - i -= len(m.Fid) - copy(dAtA[i:], m.Fid) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Fid))) - i-- - dAtA[i] = 0xa - } return len(dAtA) - i, nil } -func (m *QueryFindFileResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryActiveProvidersResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4575,27 +4148,34 @@ func (m *QueryFindFileResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFindFileResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryActiveProvidersResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFindFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryActiveProvidersResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.ProviderIps) > 0 { - i -= len(m.ProviderIps) - copy(dAtA[i:], m.ProviderIps) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProviderIps))) - i-- - dAtA[i] = 0xa + if len(m.Providers) > 0 { + for iNdEx := len(m.Providers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Providers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } return len(dAtA) - i, nil } -func (m *QueryStrayRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryStorageStatsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4605,27 +4185,20 @@ func (m *QueryStrayRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryStrayRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStorageStatsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryStrayRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStorageStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Cid))) - i-- - dAtA[i] = 0xa - } return len(dAtA) - i, nil } -func (m *QueryStrayResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryStorageStatsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4635,2556 +4208,615 @@ func (m *QueryStrayResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryStrayResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStorageStatsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryStrayResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStorageStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if m.ActiveUsers != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.ActiveUsers)) + i-- + dAtA[i] = 0x20 + } { - size, err := m.Strays.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { + size := m.UsedRatio.Size() + i -= size + if _, err := m.UsedRatio.MarshalTo(dAtA[i:]); err != nil { return 0, err } - i -= size i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa + dAtA[i] = 0x1a + if m.Used != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Used)) + i-- + dAtA[i] = 0x10 + } + if m.Purchased != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Purchased)) + i-- + dAtA[i] = 0x8 + } return len(dAtA) - i, nil } -func (m *QueryAllStraysRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ } - return dAtA[:n], nil + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n } -func (m *QueryAllStraysRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n } -func (m *QueryAllStraysRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryFileRequest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) } - return len(dAtA) - i, nil + return n } -func (m *QueryAllStraysResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryFileResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil + var l int + _ = l + l = m.File.Size() + n += 1 + l + sovQuery(uint64(l)) + return n } -func (m *QueryAllStraysResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryAllFilesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryAllStraysResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryAllFilesResponse) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if len(m.Files) > 0 { + for _, e := range m.Files { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) } - i-- - dAtA[i] = 0x12 } - if len(m.Strays) > 0 { - for iNdEx := len(m.Strays) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Strays[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } - return len(dAtA) - i, nil + return n } -func (m *QueryClientFreeSpaceRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryProviderRequest) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryClientFreeSpaceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryClientFreeSpaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryProviderResponse) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil + l = m.Providers.Size() + n += 1 + l + sovQuery(uint64(l)) + return n } -func (m *QueryClientFreeSpaceResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryAllProvidersRequest) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryClientFreeSpaceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryClientFreeSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l - if m.Bytesfree != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Bytesfree)) - i-- - dAtA[i] = 0x8 + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } - return len(dAtA) - i, nil + return n } -func (m *QueryFidCidRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryAllProvidersResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryFidCidRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryFidCidRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l - if len(m.Fid) > 0 { - i -= len(m.Fid) - copy(dAtA[i:], m.Fid) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Fid))) - i-- - dAtA[i] = 0xa + if len(m.Providers) > 0 { + for _, e := range m.Providers { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } } - return len(dAtA) - i, nil -} - -func (m *QueryFidCidResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } - return dAtA[:n], nil -} - -func (m *QueryFidCidResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return n } -func (m *QueryFidCidResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryAttestationRequest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - { - size, err := m.FidCid.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + l = len(m.Cid) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + return n } -func (m *QueryAllFidCidRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryAttestationResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryAllFidCidRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + var l int + _ = l + l = m.Attestation.Size() + n += 1 + l + sovQuery(uint64(l)) + return n } -func (m *QueryAllFidCidRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryAllAttestationsRequest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } - return len(dAtA) - i, nil + return n } -func (m *QueryAllFidCidResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryAllAttestationsResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryAllFidCidResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryAllFidCidResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if len(m.Attestations) > 0 { + for _, e := range m.Attestations { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) } - i-- - dAtA[i] = 0x12 } - if len(m.FidCid) > 0 { - for iNdEx := len(m.FidCid) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.FidCid[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } - return len(dAtA) - i, nil + return n } -func (m *QueryPayDataRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryReportRequest) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryPayDataRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPayDataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa + l = len(m.Cid) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) } - return len(dAtA) - i, nil + return n } -func (m *QueryPayDataResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryReportResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryPayDataResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + var l int + _ = l + l = m.Report.Size() + n += 1 + l + sovQuery(uint64(l)) + return n } -func (m *QueryPayDataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryAllReportRequest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.Bytes != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Bytes)) - i-- - dAtA[i] = 0x10 + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } - if m.TimeRemaining != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.TimeRemaining)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil + return n } -func (m *QueryStoragePaymentInfoRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryAllReportResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil + var l int + _ = l + if len(m.Reports) > 0 { + for _, e := range m.Reports { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryStoragePaymentInfoRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryFreespaceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryStoragePaymentInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryStoreCountRequest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) } - return len(dAtA) - i, nil + return n } -func (m *QueryStoragePaymentInfoResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryFreespaceResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil + var l int + _ = l + l = len(m.Space) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryStoragePaymentInfoResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryStoreCountResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Count) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryStoragePaymentInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryFindFileRequest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - { - size, err := m.StoragePaymentInfo.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + l = len(m.Fid) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil + return n } -func (m *QueryAllStoragePaymentInfoRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryFindFileResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil + var l int + _ = l + l = len(m.ProviderIps) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryAllStoragePaymentInfoRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryClientFreeSpaceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryAllStoragePaymentInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryClientFreeSpaceResponse) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + if m.Bytesfree != 0 { + n += 1 + sovQuery(uint64(m.Bytesfree)) } - return len(dAtA) - i, nil + return n } -func (m *QueryAllStoragePaymentInfoResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryFidCidRequest) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil + var l int + _ = l + l = len(m.Fid) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryAllStoragePaymentInfoResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryPayDataRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryAllStoragePaymentInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryPayDataResponse) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 + if m.TimeRemaining != 0 { + n += 1 + sovQuery(uint64(m.TimeRemaining)) } - if len(m.StoragePaymentInfo) > 0 { - for iNdEx := len(m.StoragePaymentInfo) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.StoragePaymentInfo[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } + if m.Bytes != 0 { + n += 1 + sovQuery(uint64(m.Bytes)) } - return len(dAtA) - i, nil + return n } -func (m *QueryFileUploadCheckRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryStoragePaymentInfoRequest) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryFileUploadCheckRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryFileUploadCheckRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l - if m.Bytes != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Bytes)) - i-- - dAtA[i] = 0x10 - } - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) } - return len(dAtA) - i, nil + return n } -func (m *QueryFileUploadCheckResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryStoragePaymentInfoResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil + var l int + _ = l + l = m.StoragePaymentInfo.Size() + n += 1 + l + sovQuery(uint64(l)) + return n } -func (m *QueryFileUploadCheckResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryAllStoragePaymentInfoRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n } -func (m *QueryFileUploadCheckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryAllStoragePaymentInfoResponse) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.Valid { - i-- - if m.Valid { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if len(m.StoragePaymentInfo) > 0 { + for _, e := range m.StoragePaymentInfo { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) } - i-- - dAtA[i] = 0x8 } - return len(dAtA) - i, nil -} - -func (m *QueryPriceCheckRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) } - return dAtA[:n], nil -} - -func (m *QueryPriceCheckRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) + return n } -func (m *QueryPriceCheckRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryFileUploadCheckRequest) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l - if m.Bytes != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Bytes)) - i-- - dAtA[i] = 0x10 + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) } - if len(m.Duration) > 0 { - i -= len(m.Duration) - copy(dAtA[i:], m.Duration) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Duration))) - i-- - dAtA[i] = 0xa + if m.Bytes != 0 { + n += 1 + sovQuery(uint64(m.Bytes)) } - return len(dAtA) - i, nil + return n } -func (m *QueryPriceCheckResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryFileUploadCheckResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil + var l int + _ = l + if m.Valid { + n += 2 + } + return n } -func (m *QueryPriceCheckResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func (m *QueryPriceCheckRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Duration) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Bytes != 0 { + n += 1 + sovQuery(uint64(m.Bytes)) + } + return n } -func (m *QueryPriceCheckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i +func (m *QueryPriceCheckResponse) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Price != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Price)) - i-- - dAtA[i] = 0x8 + n += 1 + sovQuery(uint64(m.Price)) } - return len(dAtA) - i, nil + return n } -func (m *QueryActiveProvidersRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryActiveProvidersRequest) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryActiveProvidersRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryActiveProvidersRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l - return len(dAtA) - i, nil + return n } -func (m *QueryActiveProvidersResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryActiveProvidersResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryActiveProvidersResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryActiveProvidersResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l if len(m.Providers) > 0 { - for iNdEx := len(m.Providers) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Providers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + for _, e := range m.Providers { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) } } - return len(dAtA) - i, nil + return n } -func (m *QueryStorageStatsRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryStorageStatsRequest) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryStorageStatsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryStorageStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l - return len(dAtA) - i, nil + return n } -func (m *QueryStorageStatsResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *QueryStorageStatsResponse) Size() (n int) { + if m == nil { + return 0 } - return dAtA[:n], nil -} - -func (m *QueryStorageStatsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryStorageStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i var l int _ = l - if m.ActiveUsers != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.ActiveUsers)) - i-- - dAtA[i] = 0x20 - } - { - size := m.UsedRatio.Size() - i -= size - if _, err := m.UsedRatio.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.Used != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Used)) - i-- - dAtA[i] = 0x10 - } if m.Purchased != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Purchased)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *QueryParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryContractRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryContractResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Contracts.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAllContractsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAllContractsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Contracts) > 0 { - for _, e := range m.Contracts { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryActiveDealRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryActiveDealResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ActiveDeals.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAllActiveDealsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAllActiveDealsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.ActiveDeals) > 0 { - for _, e := range m.ActiveDeals { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryProviderRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryProviderResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Providers.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAllProvidersRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAllProvidersResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Providers) > 0 { - for _, e := range m.Providers { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAttestationRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + n += 1 + sovQuery(uint64(m.Purchased)) } - return n -} - -func (m *QueryAttestationResponse) Size() (n int) { - if m == nil { - return 0 + if m.Used != 0 { + n += 1 + sovQuery(uint64(m.Used)) } - var l int - _ = l - l = m.Attestation.Size() + l = m.UsedRatio.Size() n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAllAttestationsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAllAttestationsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Attestations) > 0 { - for _, e := range m.Attestations { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryReportRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryReportResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Report.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAllReportRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAllReportResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Reports) > 0 { - for _, e := range m.Reports { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryFreespaceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryStoreCountRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryFreespaceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Space) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryStoreCountResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Count) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryFindFileRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Fid) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryFindFileResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ProviderIps) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryStrayRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryStrayResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Strays.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAllStraysRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAllStraysResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Strays) > 0 { - for _, e := range m.Strays { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryClientFreeSpaceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryClientFreeSpaceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Bytesfree != 0 { - n += 1 + sovQuery(uint64(m.Bytesfree)) - } - return n -} - -func (m *QueryFidCidRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Fid) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryFidCidResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.FidCid.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAllFidCidRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAllFidCidResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.FidCid) > 0 { - for _, e := range m.FidCid { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPayDataRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPayDataResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.TimeRemaining != 0 { - n += 1 + sovQuery(uint64(m.TimeRemaining)) - } - if m.Bytes != 0 { - n += 1 + sovQuery(uint64(m.Bytes)) - } - return n -} - -func (m *QueryStoragePaymentInfoRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryStoragePaymentInfoResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.StoragePaymentInfo.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAllStoragePaymentInfoRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAllStoragePaymentInfoResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.StoragePaymentInfo) > 0 { - for _, e := range m.StoragePaymentInfo { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryFileUploadCheckRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Bytes != 0 { - n += 1 + sovQuery(uint64(m.Bytes)) - } - return n -} - -func (m *QueryFileUploadCheckResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Valid { - n += 2 - } - return n -} - -func (m *QueryPriceCheckRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Duration) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Bytes != 0 { - n += 1 + sovQuery(uint64(m.Bytes)) - } - return n -} - -func (m *QueryPriceCheckResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Price != 0 { - n += 1 + sovQuery(uint64(m.Price)) - } - return n -} - -func (m *QueryActiveProvidersRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryActiveProvidersResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Providers) > 0 { - for _, e := range m.Providers { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryStorageStatsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryStorageStatsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Purchased != 0 { - n += 1 + sovQuery(uint64(m.Purchased)) - } - if m.Used != 0 { - n += 1 + sovQuery(uint64(m.Used)) - } - l = m.UsedRatio.Size() - n += 1 + l + sovQuery(uint64(l)) - if m.ActiveUsers != 0 { - n += 1 + sovQuery(uint64(m.ActiveUsers)) - } - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryContractRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryContractRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryContractRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryContractResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryContractResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryContractResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Contracts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Contracts.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryAllContractsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryAllContractsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllContractsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryAllContractsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryAllContractsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllContractsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Contracts", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Contracts = append(m.Contracts, Contracts{}) - if err := m.Contracts[len(m.Contracts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryActiveDealRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryActiveDealRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryActiveDealRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryActiveDealResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryActiveDealResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryActiveDealResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ActiveDeals", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ActiveDeals.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryAllActiveDealsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryAllActiveDealsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllActiveDealsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryAllActiveDealsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryAllActiveDealsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllActiveDealsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ActiveDeals", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ActiveDeals = append(m.ActiveDeals, ActiveDeals{}) - if err := m.ActiveDeals[len(m.ActiveDeals)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryProviderRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryProviderRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryProviderRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryProviderResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryProviderResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryProviderResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Providers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Providers.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF + if m.ActiveUsers != 0 { + n += 1 + sovQuery(uint64(m.ActiveUsers)) } - return nil + return n } -func (m *QueryAllProvidersRequest) Unmarshal(dAtA []byte) error { + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7207,48 +4839,12 @@ func (m *QueryAllProvidersRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllProvidersRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllProvidersRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -7270,7 +4866,7 @@ func (m *QueryAllProvidersRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllProvidersResponse) Unmarshal(dAtA []byte) error { +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7293,49 +4889,15 @@ func (m *QueryAllProvidersResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllProvidersResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllProvidersResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Providers", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Providers = append(m.Providers, Providers{}) - if err := m.Providers[len(m.Providers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7362,10 +4924,7 @@ func (m *QueryAllProvidersResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7390,7 +4949,7 @@ func (m *QueryAllProvidersResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAttestationRequest) Unmarshal(dAtA []byte) error { +func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7413,15 +4972,15 @@ func (m *QueryAttestationRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAttestationRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFileRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAttestationRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFileRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7449,7 +5008,7 @@ func (m *QueryAttestationRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Merkle = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -7472,7 +5031,7 @@ func (m *QueryAttestationRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAttestationResponse) Unmarshal(dAtA []byte) error { +func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7495,15 +5054,15 @@ func (m *QueryAttestationResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAttestationResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFileResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAttestationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Attestation", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field File", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7530,7 +5089,7 @@ func (m *QueryAttestationResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Attestation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.File.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7555,7 +5114,7 @@ func (m *QueryAttestationResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllAttestationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7578,10 +5137,10 @@ func (m *QueryAllAttestationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllAttestationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllFilesRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllAttestationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllFilesRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -7641,7 +5200,7 @@ func (m *QueryAllAttestationsRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllAttestationsResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllFilesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7664,15 +5223,15 @@ func (m *QueryAllAttestationsResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllAttestationsResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllFilesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllAttestationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllFilesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Attestations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Files", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7699,8 +5258,8 @@ func (m *QueryAllAttestationsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Attestations = append(m.Attestations, AttestationForm{}) - if err := m.Attestations[len(m.Attestations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Files = append(m.Files, UnifiedFile{}) + if err := m.Files[len(m.Files)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7761,7 +5320,7 @@ func (m *QueryAllAttestationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryReportRequest) Unmarshal(dAtA []byte) error { +func (m *QueryProviderRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7784,15 +5343,15 @@ func (m *QueryReportRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryReportRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryProviderRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryProviderRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7820,7 +5379,7 @@ func (m *QueryReportRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -7843,7 +5402,7 @@ func (m *QueryReportRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryReportResponse) Unmarshal(dAtA []byte) error { +func (m *QueryProviderResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7866,15 +5425,15 @@ func (m *QueryReportResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryReportResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryProviderResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryProviderResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Report", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Providers", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7901,7 +5460,7 @@ func (m *QueryReportResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Report.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Providers.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7926,7 +5485,7 @@ func (m *QueryReportResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllReportRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllProvidersRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7949,13 +5508,133 @@ func (m *QueryAllReportRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllReportRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllProvidersRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllProvidersRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllProvidersResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllProvidersResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllProvidersResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Providers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Providers = append(m.Providers, Providers{}) + if err := m.Providers[len(m.Providers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } @@ -7985,7 +5664,7 @@ func (m *QueryAllReportRequest) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Pagination == nil { - m.Pagination = &query.PageRequest{} + m.Pagination = &query.PageResponse{} } if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -8012,7 +5691,7 @@ func (m *QueryAllReportRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllReportResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAttestationRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8035,51 +5714,17 @@ func (m *QueryAllReportResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllReportResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAttestationRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAttestationRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reports", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Reports = append(m.Reports, ReportForm{}) - if err := m.Reports[len(m.Reports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8089,27 +5734,23 @@ func (m *QueryAllReportResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Cid = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -8132,7 +5773,7 @@ func (m *QueryAllReportResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFreespaceRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAttestationResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8155,17 +5796,17 @@ func (m *QueryFreespaceRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFreespaceRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAttestationResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFreespaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAttestationResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Attestation", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8175,23 +5816,24 @@ func (m *QueryFreespaceRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Address = string(dAtA[iNdEx:postIndex]) + if err := m.Attestation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -8214,7 +5856,7 @@ func (m *QueryFreespaceRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryStoreCountRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllAttestationsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8237,17 +5879,17 @@ func (m *QueryStoreCountRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryStoreCountRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllAttestationsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryStoreCountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllAttestationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8257,23 +5899,27 @@ func (m *QueryStoreCountRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Address = string(dAtA[iNdEx:postIndex]) + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -8296,7 +5942,7 @@ func (m *QueryStoreCountRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFreespaceResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllAttestationsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8319,17 +5965,17 @@ func (m *QueryFreespaceResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFreespaceResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllAttestationsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFreespaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllAttestationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Space", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Attestations", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8339,23 +5985,61 @@ func (m *QueryFreespaceResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Space = string(dAtA[iNdEx:postIndex]) + m.Attestations = append(m.Attestations, AttestationForm{}) + if err := m.Attestations[len(m.Attestations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -8378,7 +6062,7 @@ func (m *QueryFreespaceResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryStoreCountResponse) Unmarshal(dAtA []byte) error { +func (m *QueryReportRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8401,15 +6085,15 @@ func (m *QueryStoreCountResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryStoreCountResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryReportRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryStoreCountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -8437,7 +6121,7 @@ func (m *QueryStoreCountResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Count = string(dAtA[iNdEx:postIndex]) + m.Cid = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -8460,7 +6144,7 @@ func (m *QueryStoreCountResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFindFileRequest) Unmarshal(dAtA []byte) error { +func (m *QueryReportResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8483,17 +6167,17 @@ func (m *QueryFindFileRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFindFileRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryReportResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFindFileRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Report", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8503,23 +6187,24 @@ func (m *QueryFindFileRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Fid = string(dAtA[iNdEx:postIndex]) + if err := m.Report.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -8542,7 +6227,7 @@ func (m *QueryFindFileRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFindFileResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllReportRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8565,17 +6250,17 @@ func (m *QueryFindFileResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFindFileResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllReportRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFindFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProviderIps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8585,23 +6270,27 @@ func (m *QueryFindFileResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.ProviderIps = string(dAtA[iNdEx:postIndex]) + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -8624,7 +6313,7 @@ func (m *QueryFindFileResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryStrayRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllReportResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8647,17 +6336,51 @@ func (m *QueryStrayRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryStrayRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllReportResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryStrayRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Reports", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reports = append(m.Reports, ReportForm{}) + if err := m.Reports[len(m.Reports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8667,23 +6390,27 @@ func (m *QueryStrayRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -8706,7 +6433,7 @@ func (m *QueryStrayRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryStrayResponse) Unmarshal(dAtA []byte) error { +func (m *QueryFreespaceRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8729,17 +6456,17 @@ func (m *QueryStrayResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryStrayResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFreespaceRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryStrayResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFreespaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Strays", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8749,24 +6476,23 @@ func (m *QueryStrayResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Strays.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -8789,7 +6515,7 @@ func (m *QueryStrayResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllStraysRequest) Unmarshal(dAtA []byte) error { +func (m *QueryStoreCountRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8812,17 +6538,17 @@ func (m *QueryAllStraysRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllStraysRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryStoreCountRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllStraysRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryStoreCountRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8832,27 +6558,23 @@ func (m *QueryAllStraysRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -8875,7 +6597,7 @@ func (m *QueryAllStraysRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllStraysResponse) Unmarshal(dAtA []byte) error { +func (m *QueryFreespaceResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8898,51 +6620,17 @@ func (m *QueryAllStraysResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllStraysResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFreespaceResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllStraysResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFreespaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Strays", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Strays = append(m.Strays, Strays{}) - if err := m.Strays[len(m.Strays)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Space", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8952,27 +6640,23 @@ func (m *QueryAllStraysResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Space = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -8995,7 +6679,7 @@ func (m *QueryAllStraysResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryClientFreeSpaceRequest) Unmarshal(dAtA []byte) error { +func (m *QueryStoreCountResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9018,15 +6702,15 @@ func (m *QueryClientFreeSpaceRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryClientFreeSpaceRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryStoreCountResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryClientFreeSpaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryStoreCountResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -9054,7 +6738,7 @@ func (m *QueryClientFreeSpaceRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Address = string(dAtA[iNdEx:postIndex]) + m.Count = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -9077,7 +6761,7 @@ func (m *QueryClientFreeSpaceRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryClientFreeSpaceResponse) Unmarshal(dAtA []byte) error { +func (m *QueryFindFileRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9100,17 +6784,17 @@ func (m *QueryClientFreeSpaceResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryClientFreeSpaceResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFindFileRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryClientFreeSpaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFindFileRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Bytesfree", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) } - m.Bytesfree = 0 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -9120,11 +6804,24 @@ func (m *QueryClientFreeSpaceResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Bytesfree |= int64(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Fid = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -9146,7 +6843,7 @@ func (m *QueryClientFreeSpaceResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFidCidRequest) Unmarshal(dAtA []byte) error { +func (m *QueryFindFileResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9169,15 +6866,15 @@ func (m *QueryFidCidRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFidCidRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFindFileResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFidCidRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFindFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProviderIps", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -9205,7 +6902,7 @@ func (m *QueryFidCidRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Fid = string(dAtA[iNdEx:postIndex]) + m.ProviderIps = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -9228,7 +6925,7 @@ func (m *QueryFidCidRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFidCidResponse) Unmarshal(dAtA []byte) error { +func (m *QueryClientFreeSpaceRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9251,17 +6948,17 @@ func (m *QueryFidCidResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFidCidResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryClientFreeSpaceRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFidCidResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryClientFreeSpaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FidCid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -9271,24 +6968,23 @@ func (m *QueryFidCidResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.FidCid.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -9311,7 +7007,7 @@ func (m *QueryFidCidResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllFidCidRequest) Unmarshal(dAtA []byte) error { +func (m *QueryClientFreeSpaceResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9334,17 +7030,17 @@ func (m *QueryAllFidCidRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllFidCidRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryClientFreeSpaceResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllFidCidRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryClientFreeSpaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Bytesfree", wireType) } - var msglen int + m.Bytesfree = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -9354,28 +7050,11 @@ func (m *QueryAllFidCidRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Bytesfree |= int64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -9397,7 +7076,7 @@ func (m *QueryAllFidCidRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllFidCidResponse) Unmarshal(dAtA []byte) error { +func (m *QueryFidCidRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9420,51 +7099,17 @@ func (m *QueryAllFidCidResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllFidCidResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFidCidRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllFidCidResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFidCidRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FidCid", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.FidCid = append(m.FidCid, FidCid{}) - if err := m.FidCid[len(m.FidCid)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -9474,27 +7119,23 @@ func (m *QueryAllFidCidResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Fid = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/storage/types/query.pb.gw.go b/x/storage/types/query.pb.gw.go index 08fb55ecb..67fa23e94 100644 --- a/x/storage/types/query.pb.gw.go +++ b/x/storage/types/query.pb.gw.go @@ -51,8 +51,8 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } -func request_Query_Contracts_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryContractRequest +func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryFileRequest var metadata runtime.ServerMetadata var ( @@ -62,24 +62,24 @@ func request_Query_Contracts_0(ctx context.Context, marshaler runtime.Marshaler, _ = err ) - val, ok = pathParams["cid"] + val, ok = pathParams["merkle"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") } - protoReq.Cid, err = runtime.String(val) + protoReq.Merkle, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) } - msg, err := client.Contracts(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.File(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Contracts_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryContractRequest +func local_request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryFileRequest var metadata runtime.ServerMetadata var ( @@ -89,144 +89,54 @@ func local_request_Query_Contracts_0(ctx context.Context, marshaler runtime.Mars _ = err ) - val, ok = pathParams["cid"] + val, ok = pathParams["merkle"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") } - protoReq.Cid, err = runtime.String(val) + protoReq.Merkle, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) } - msg, err := server.Contracts(ctx, &protoReq) + msg, err := server.File(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_ContractsAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_FilesAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_ContractsAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllContractsRequest +func request_Query_FilesAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllFilesRequest 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_ContractsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_FilesAll_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ContractsAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.FilesAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ContractsAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllContractsRequest +func local_request_Query_FilesAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllFilesRequest 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_ContractsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_FilesAll_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ContractsAll(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_ActiveDeals_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryActiveDealRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["cid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") - } - - protoReq.Cid, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) - } - - msg, err := client.ActiveDeals(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_ActiveDeals_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryActiveDealRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["cid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") - } - - protoReq.Cid, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) - } - - msg, err := server.ActiveDeals(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_ActiveDealsAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Query_ActiveDealsAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllActiveDealsRequest - 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_ActiveDealsAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ActiveDealsAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_ActiveDealsAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllActiveDealsRequest - 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_ActiveDealsAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ActiveDealsAll(ctx, &protoReq) + msg, err := server.FilesAll(ctx, &protoReq) return msg, metadata, err } @@ -663,96 +573,6 @@ func local_request_Query_FindFile_0(ctx context.Context, marshaler runtime.Marsh } -func request_Query_Strays_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryStrayRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["cid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") - } - - protoReq.Cid, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) - } - - msg, err := client.Strays(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Strays_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryStrayRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["cid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") - } - - protoReq.Cid, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) - } - - msg, err := server.Strays(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_StraysAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Query_StraysAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllStraysRequest - 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_StraysAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.StraysAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_StraysAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllStraysRequest - 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_StraysAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.StraysAll(ctx, &protoReq) - return msg, metadata, err - -} - func request_Query_GetClientFreeSpace_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryClientFreeSpaceRequest var metadata runtime.ServerMetadata @@ -807,96 +627,6 @@ func local_request_Query_GetClientFreeSpace_0(ctx context.Context, marshaler run } -func request_Query_FidCid_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFidCidRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["fid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "fid") - } - - protoReq.Fid, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "fid", err) - } - - msg, err := client.FidCid(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_FidCid_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFidCidRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["fid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "fid") - } - - protoReq.Fid, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "fid", err) - } - - msg, err := server.FidCid(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_FidCidAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Query_FidCidAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllFidCidRequest - 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_FidCidAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.FidCidAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_FidCidAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllFidCidRequest - 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_FidCidAll_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.FidCidAll(ctx, &protoReq) - return msg, metadata, err - -} - func request_Query_GetPayData_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryPayDataRequest var metadata runtime.ServerMetadata @@ -1218,7 +948,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_Contracts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_File_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1229,7 +959,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Contracts_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_File_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 { @@ -1237,11 +967,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Contracts_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_File_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ContractsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_FilesAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1252,7 +982,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ContractsAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_FilesAll_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 { @@ -1260,53 +990,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ContractsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_ActiveDeals_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_ActiveDeals_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_ActiveDeals_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_ActiveDealsAll_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_ActiveDealsAll_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_ActiveDealsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_FilesAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1517,52 +1201,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_Strays_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_Strays_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_Strays_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_StraysAll_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_StraysAll_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_StraysAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_Query_GetClientFreeSpace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1586,52 +1224,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_FidCid_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_FidCid_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_FidCid_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_FidCidAll_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_FidCidAll_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_FidCidAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_Query_GetPayData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1854,47 +1446,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_Contracts_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_Contracts_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_Contracts_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_ContractsAll_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_ContractsAll_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_ContractsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_ActiveDeals_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_File_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) @@ -1903,18 +1455,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ActiveDeals_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_File_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_ActiveDeals_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_File_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ActiveDealsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_FilesAll_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) @@ -1923,14 +1475,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ActiveDealsAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_FilesAll_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_ActiveDealsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_FilesAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2114,46 +1666,6 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_Strays_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_Strays_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_Strays_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_StraysAll_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_StraysAll_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_StraysAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_Query_GetClientFreeSpace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2174,46 +1686,6 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_FidCid_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_FidCid_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_FidCid_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_FidCidAll_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_FidCidAll_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_FidCidAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_Query_GetPayData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2360,13 +1832,9 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Contracts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "contracts", "cid"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_ContractsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "contracts"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_ActiveDeals_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "active_deals", "cid"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_File_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "files", "merkle"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ActiveDealsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "active_deals"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_FilesAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "files"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_Providers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "providers", "address"}, "", runtime.AssumeColonVerbOpt(false))) @@ -2386,16 +1854,8 @@ var ( pattern_Query_FindFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "find_file", "fid"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Strays_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "strays", "cid"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_StraysAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "strays"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_GetClientFreeSpace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "get_client_free_space", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_FidCid_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "fid_cid", "fid"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_FidCidAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "fid_cid"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_GetPayData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "get_pay_data", "address"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_StoragePaymentInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "payment_info", "address"}, "", runtime.AssumeColonVerbOpt(false))) @@ -2414,13 +1874,9 @@ var ( var ( forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_Contracts_0 = runtime.ForwardResponseMessage - - forward_Query_ContractsAll_0 = runtime.ForwardResponseMessage + forward_Query_File_0 = runtime.ForwardResponseMessage - forward_Query_ActiveDeals_0 = runtime.ForwardResponseMessage - - forward_Query_ActiveDealsAll_0 = runtime.ForwardResponseMessage + forward_Query_FilesAll_0 = runtime.ForwardResponseMessage forward_Query_Providers_0 = runtime.ForwardResponseMessage @@ -2440,16 +1896,8 @@ var ( forward_Query_FindFile_0 = runtime.ForwardResponseMessage - forward_Query_Strays_0 = runtime.ForwardResponseMessage - - forward_Query_StraysAll_0 = runtime.ForwardResponseMessage - forward_Query_GetClientFreeSpace_0 = runtime.ForwardResponseMessage - forward_Query_FidCid_0 = runtime.ForwardResponseMessage - - forward_Query_FidCidAll_0 = runtime.ForwardResponseMessage - forward_Query_GetPayData_0 = runtime.ForwardResponseMessage forward_Query_StoragePaymentInfo_0 = runtime.ForwardResponseMessage diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index fbc457ca2..97d812806 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -27,26 +27,28 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type MsgPostContract struct { - Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Merkle string `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` - Signee string `protobuf:"bytes,3,opt,name=signee,proto3" json:"signee,omitempty"` - Filesize string `protobuf:"bytes,4,opt,name=filesize,proto3" json:"filesize,omitempty"` - Fid string `protobuf:"bytes,5,opt,name=fid,proto3" json:"fid,omitempty"` -} - -func (m *MsgPostContract) Reset() { *m = MsgPostContract{} } -func (m *MsgPostContract) String() string { return proto.CompactTextString(m) } -func (*MsgPostContract) ProtoMessage() {} -func (*MsgPostContract) Descriptor() ([]byte, []int) { +type MsgPostFile struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` + FileSize int64 `protobuf:"varint,3,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"` + ProofInterval int64 `protobuf:"varint,4,opt,name=proof_interval,json=proofInterval,proto3" json:"proof_interval,omitempty"` + ProofType int64 `protobuf:"varint,5,opt,name=proof_type,json=proofType,proto3" json:"proof_type,omitempty"` + MaxProofs int64 `protobuf:"varint,6,opt,name=max_proofs,json=maxProofs,proto3" json:"max_proofs,omitempty"` + Note string `protobuf:"bytes,7,opt,name=note,proto3" json:"note,omitempty"` +} + +func (m *MsgPostFile) Reset() { *m = MsgPostFile{} } +func (m *MsgPostFile) String() string { return proto.CompactTextString(m) } +func (*MsgPostFile) ProtoMessage() {} +func (*MsgPostFile) Descriptor() ([]byte, []int) { return fileDescriptor_2194ba0b2c3d6a97, []int{0} } -func (m *MsgPostContract) XXX_Unmarshal(b []byte) error { +func (m *MsgPostFile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgPostContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgPostFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgPostContract.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgPostFile.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -56,68 +58,82 @@ func (m *MsgPostContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, err return b[:n], nil } } -func (m *MsgPostContract) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgPostContract.Merge(m, src) +func (m *MsgPostFile) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPostFile.Merge(m, src) } -func (m *MsgPostContract) XXX_Size() int { +func (m *MsgPostFile) XXX_Size() int { return m.Size() } -func (m *MsgPostContract) XXX_DiscardUnknown() { - xxx_messageInfo_MsgPostContract.DiscardUnknown(m) +func (m *MsgPostFile) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPostFile.DiscardUnknown(m) } -var xxx_messageInfo_MsgPostContract proto.InternalMessageInfo +var xxx_messageInfo_MsgPostFile proto.InternalMessageInfo -func (m *MsgPostContract) GetCreator() string { +func (m *MsgPostFile) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *MsgPostContract) GetMerkle() string { +func (m *MsgPostFile) GetMerkle() []byte { if m != nil { return m.Merkle } - return "" + return nil } -func (m *MsgPostContract) GetSignee() string { +func (m *MsgPostFile) GetFileSize() int64 { if m != nil { - return m.Signee + return m.FileSize } - return "" + return 0 } -func (m *MsgPostContract) GetFilesize() string { +func (m *MsgPostFile) GetProofInterval() int64 { if m != nil { - return m.Filesize + return m.ProofInterval } - return "" + return 0 +} + +func (m *MsgPostFile) GetProofType() int64 { + if m != nil { + return m.ProofType + } + return 0 +} + +func (m *MsgPostFile) GetMaxProofs() int64 { + if m != nil { + return m.MaxProofs + } + return 0 } -func (m *MsgPostContract) GetFid() string { +func (m *MsgPostFile) GetNote() string { if m != nil { - return m.Fid + return m.Note } return "" } -type MsgPostContractResponse struct { +type MsgPostFileResponse struct { } -func (m *MsgPostContractResponse) Reset() { *m = MsgPostContractResponse{} } -func (m *MsgPostContractResponse) String() string { return proto.CompactTextString(m) } -func (*MsgPostContractResponse) ProtoMessage() {} -func (*MsgPostContractResponse) Descriptor() ([]byte, []int) { +func (m *MsgPostFileResponse) Reset() { *m = MsgPostFileResponse{} } +func (m *MsgPostFileResponse) String() string { return proto.CompactTextString(m) } +func (*MsgPostFileResponse) ProtoMessage() {} +func (*MsgPostFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor_2194ba0b2c3d6a97, []int{1} } -func (m *MsgPostContractResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgPostFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgPostContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgPostFileResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgPostContractResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgPostFileResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -127,37 +143,39 @@ func (m *MsgPostContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *MsgPostContractResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgPostContractResponse.Merge(m, src) +func (m *MsgPostFileResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPostFileResponse.Merge(m, src) } -func (m *MsgPostContractResponse) XXX_Size() int { +func (m *MsgPostFileResponse) XXX_Size() int { return m.Size() } -func (m *MsgPostContractResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgPostContractResponse.DiscardUnknown(m) +func (m *MsgPostFileResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPostFileResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgPostContractResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgPostFileResponse proto.InternalMessageInfo -type MsgPostproof struct { +type MsgPostProof struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Item string `protobuf:"bytes,2,opt,name=item,proto3" json:"item,omitempty"` - Hashlist string `protobuf:"bytes,3,opt,name=hashlist,proto3" json:"hashlist,omitempty"` - Cid string `protobuf:"bytes,4,opt,name=cid,proto3" json:"cid,omitempty"` + HashList []byte `protobuf:"bytes,3,opt,name=hash_list,json=hashList,proto3" json:"hash_list,omitempty"` + Merkle []byte `protobuf:"bytes,4,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,5,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,6,opt,name=start,proto3" json:"start,omitempty"` } -func (m *MsgPostproof) Reset() { *m = MsgPostproof{} } -func (m *MsgPostproof) String() string { return proto.CompactTextString(m) } -func (*MsgPostproof) ProtoMessage() {} -func (*MsgPostproof) Descriptor() ([]byte, []int) { +func (m *MsgPostProof) Reset() { *m = MsgPostProof{} } +func (m *MsgPostProof) String() string { return proto.CompactTextString(m) } +func (*MsgPostProof) ProtoMessage() {} +func (*MsgPostProof) Descriptor() ([]byte, []int) { return fileDescriptor_2194ba0b2c3d6a97, []int{2} } -func (m *MsgPostproof) XXX_Unmarshal(b []byte) error { +func (m *MsgPostProof) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgPostproof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgPostProof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgPostproof.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgPostProof.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -167,63 +185,77 @@ func (m *MsgPostproof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) return b[:n], nil } } -func (m *MsgPostproof) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgPostproof.Merge(m, src) +func (m *MsgPostProof) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPostProof.Merge(m, src) } -func (m *MsgPostproof) XXX_Size() int { +func (m *MsgPostProof) XXX_Size() int { return m.Size() } -func (m *MsgPostproof) XXX_DiscardUnknown() { - xxx_messageInfo_MsgPostproof.DiscardUnknown(m) +func (m *MsgPostProof) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPostProof.DiscardUnknown(m) } -var xxx_messageInfo_MsgPostproof proto.InternalMessageInfo +var xxx_messageInfo_MsgPostProof proto.InternalMessageInfo -func (m *MsgPostproof) GetCreator() string { +func (m *MsgPostProof) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *MsgPostproof) GetItem() string { +func (m *MsgPostProof) GetItem() string { if m != nil { return m.Item } return "" } -func (m *MsgPostproof) GetHashlist() string { +func (m *MsgPostProof) GetHashList() []byte { if m != nil { - return m.Hashlist + return m.HashList } - return "" + return nil } -func (m *MsgPostproof) GetCid() string { +func (m *MsgPostProof) GetMerkle() []byte { if m != nil { - return m.Cid + return m.Merkle + } + return nil +} + +func (m *MsgPostProof) GetOwner() string { + if m != nil { + return m.Owner } return "" } -type MsgPostproofResponse struct { +func (m *MsgPostProof) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +type MsgPostProofResponse struct { Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` ErrorMessage string `protobuf:"bytes,2,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` } -func (m *MsgPostproofResponse) Reset() { *m = MsgPostproofResponse{} } -func (m *MsgPostproofResponse) String() string { return proto.CompactTextString(m) } -func (*MsgPostproofResponse) ProtoMessage() {} -func (*MsgPostproofResponse) Descriptor() ([]byte, []int) { +func (m *MsgPostProofResponse) Reset() { *m = MsgPostProofResponse{} } +func (m *MsgPostProofResponse) String() string { return proto.CompactTextString(m) } +func (*MsgPostProofResponse) ProtoMessage() {} +func (*MsgPostProofResponse) Descriptor() ([]byte, []int) { return fileDescriptor_2194ba0b2c3d6a97, []int{3} } -func (m *MsgPostproofResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgPostProofResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgPostproofResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgPostProofResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgPostproofResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgPostProofResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -233,50 +265,50 @@ func (m *MsgPostproofResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *MsgPostproofResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgPostproofResponse.Merge(m, src) +func (m *MsgPostProofResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPostProofResponse.Merge(m, src) } -func (m *MsgPostproofResponse) XXX_Size() int { +func (m *MsgPostProofResponse) XXX_Size() int { return m.Size() } -func (m *MsgPostproofResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgPostproofResponse.DiscardUnknown(m) +func (m *MsgPostProofResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPostProofResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgPostproofResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgPostProofResponse proto.InternalMessageInfo -func (m *MsgPostproofResponse) GetSuccess() bool { +func (m *MsgPostProofResponse) GetSuccess() bool { if m != nil { return m.Success } return false } -func (m *MsgPostproofResponse) GetErrorMessage() string { +func (m *MsgPostProofResponse) GetErrorMessage() string { if m != nil { return m.ErrorMessage } return "" } -type MsgSignContract struct { +type MsgDeleteFile struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"` - PayOnce bool `protobuf:"varint,3,opt,name=pay_once,json=payOnce,proto3" json:"pay_once,omitempty"` + Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` + Start int64 `protobuf:"varint,3,opt,name=start,proto3" json:"start,omitempty"` } -func (m *MsgSignContract) Reset() { *m = MsgSignContract{} } -func (m *MsgSignContract) String() string { return proto.CompactTextString(m) } -func (*MsgSignContract) ProtoMessage() {} -func (*MsgSignContract) Descriptor() ([]byte, []int) { +func (m *MsgDeleteFile) Reset() { *m = MsgDeleteFile{} } +func (m *MsgDeleteFile) String() string { return proto.CompactTextString(m) } +func (*MsgDeleteFile) ProtoMessage() {} +func (*MsgDeleteFile) Descriptor() ([]byte, []int) { return fileDescriptor_2194ba0b2c3d6a97, []int{4} } -func (m *MsgSignContract) XXX_Unmarshal(b []byte) error { +func (m *MsgDeleteFile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgSignContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgDeleteFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgSignContract.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgDeleteFile.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -286,54 +318,54 @@ func (m *MsgSignContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, err return b[:n], nil } } -func (m *MsgSignContract) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSignContract.Merge(m, src) +func (m *MsgDeleteFile) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeleteFile.Merge(m, src) } -func (m *MsgSignContract) XXX_Size() int { +func (m *MsgDeleteFile) XXX_Size() int { return m.Size() } -func (m *MsgSignContract) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSignContract.DiscardUnknown(m) +func (m *MsgDeleteFile) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeleteFile.DiscardUnknown(m) } -var xxx_messageInfo_MsgSignContract proto.InternalMessageInfo +var xxx_messageInfo_MsgDeleteFile proto.InternalMessageInfo -func (m *MsgSignContract) GetCreator() string { +func (m *MsgDeleteFile) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *MsgSignContract) GetCid() string { +func (m *MsgDeleteFile) GetMerkle() []byte { if m != nil { - return m.Cid + return m.Merkle } - return "" + return nil } -func (m *MsgSignContract) GetPayOnce() bool { +func (m *MsgDeleteFile) GetStart() int64 { if m != nil { - return m.PayOnce + return m.Start } - return false + return 0 } -type MsgSignContractResponse struct { +type MsgDeleteFileResponse struct { } -func (m *MsgSignContractResponse) Reset() { *m = MsgSignContractResponse{} } -func (m *MsgSignContractResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSignContractResponse) ProtoMessage() {} -func (*MsgSignContractResponse) Descriptor() ([]byte, []int) { +func (m *MsgDeleteFileResponse) Reset() { *m = MsgDeleteFileResponse{} } +func (m *MsgDeleteFileResponse) String() string { return proto.CompactTextString(m) } +func (*MsgDeleteFileResponse) ProtoMessage() {} +func (*MsgDeleteFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor_2194ba0b2c3d6a97, []int{5} } -func (m *MsgSignContractResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgDeleteFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgSignContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgDeleteFileResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgSignContractResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgDeleteFileResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -343,17 +375,17 @@ func (m *MsgSignContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *MsgSignContractResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSignContractResponse.Merge(m, src) +func (m *MsgDeleteFileResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeleteFileResponse.Merge(m, src) } -func (m *MsgSignContractResponse) XXX_Size() int { +func (m *MsgDeleteFileResponse) XXX_Size() int { return m.Size() } -func (m *MsgSignContractResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSignContractResponse.DiscardUnknown(m) +func (m *MsgDeleteFileResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeleteFileResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgSignContractResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgDeleteFileResponse proto.InternalMessageInfo type MsgSetProviderIP struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` @@ -979,94 +1011,6 @@ func (m *MsgShutdownProviderResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgShutdownProviderResponse proto.InternalMessageInfo -type MsgCancelContract struct { - Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"` -} - -func (m *MsgCancelContract) Reset() { *m = MsgCancelContract{} } -func (m *MsgCancelContract) String() string { return proto.CompactTextString(m) } -func (*MsgCancelContract) ProtoMessage() {} -func (*MsgCancelContract) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{20} -} -func (m *MsgCancelContract) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgCancelContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgCancelContract.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 *MsgCancelContract) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgCancelContract.Merge(m, src) -} -func (m *MsgCancelContract) XXX_Size() int { - return m.Size() -} -func (m *MsgCancelContract) XXX_DiscardUnknown() { - xxx_messageInfo_MsgCancelContract.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgCancelContract proto.InternalMessageInfo - -func (m *MsgCancelContract) GetCreator() string { - if m != nil { - return m.Creator - } - return "" -} - -func (m *MsgCancelContract) GetCid() string { - if m != nil { - return m.Cid - } - return "" -} - -type MsgCancelContractResponse struct { -} - -func (m *MsgCancelContractResponse) Reset() { *m = MsgCancelContractResponse{} } -func (m *MsgCancelContractResponse) String() string { return proto.CompactTextString(m) } -func (*MsgCancelContractResponse) ProtoMessage() {} -func (*MsgCancelContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{21} -} -func (m *MsgCancelContractResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgCancelContractResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgCancelContractResponse.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 *MsgCancelContractResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgCancelContractResponse.Merge(m, src) -} -func (m *MsgCancelContractResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgCancelContractResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgCancelContractResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgCancelContractResponse proto.InternalMessageInfo - type MsgBuyStorage struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` ForAddress string `protobuf:"bytes,2,opt,name=for_address,json=forAddress,proto3" json:"for_address,omitempty"` @@ -1079,7 +1023,7 @@ func (m *MsgBuyStorage) Reset() { *m = MsgBuyStorage{} } func (m *MsgBuyStorage) String() string { return proto.CompactTextString(m) } func (*MsgBuyStorage) ProtoMessage() {} func (*MsgBuyStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{22} + return fileDescriptor_2194ba0b2c3d6a97, []int{20} } func (m *MsgBuyStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1150,7 +1094,7 @@ func (m *MsgBuyStorageResponse) Reset() { *m = MsgBuyStorageResponse{} } func (m *MsgBuyStorageResponse) String() string { return proto.CompactTextString(m) } func (*MsgBuyStorageResponse) ProtoMessage() {} func (*MsgBuyStorageResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{23} + return fileDescriptor_2194ba0b2c3d6a97, []int{21} } func (m *MsgBuyStorageResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1189,7 +1133,7 @@ func (m *MsgClaimStray) Reset() { *m = MsgClaimStray{} } func (m *MsgClaimStray) String() string { return proto.CompactTextString(m) } func (*MsgClaimStray) ProtoMessage() {} func (*MsgClaimStray) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{24} + return fileDescriptor_2194ba0b2c3d6a97, []int{22} } func (m *MsgClaimStray) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1246,7 +1190,7 @@ func (m *MsgClaimStrayResponse) Reset() { *m = MsgClaimStrayResponse{} } func (m *MsgClaimStrayResponse) String() string { return proto.CompactTextString(m) } func (*MsgClaimStrayResponse) ProtoMessage() {} func (*MsgClaimStrayResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{25} + return fileDescriptor_2194ba0b2c3d6a97, []int{23} } func (m *MsgClaimStrayResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1287,7 +1231,7 @@ func (m *MsgUpgradeStorage) Reset() { *m = MsgUpgradeStorage{} } func (m *MsgUpgradeStorage) String() string { return proto.CompactTextString(m) } func (*MsgUpgradeStorage) ProtoMessage() {} func (*MsgUpgradeStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{26} + return fileDescriptor_2194ba0b2c3d6a97, []int{24} } func (m *MsgUpgradeStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1358,7 +1302,7 @@ func (m *MsgUpgradeStorageResponse) Reset() { *m = MsgUpgradeStorageResp func (m *MsgUpgradeStorageResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpgradeStorageResponse) ProtoMessage() {} func (*MsgUpgradeStorageResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{27} + return fileDescriptor_2194ba0b2c3d6a97, []int{25} } func (m *MsgUpgradeStorageResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1396,7 +1340,7 @@ func (m *MsgRequestAttestationForm) Reset() { *m = MsgRequestAttestation func (m *MsgRequestAttestationForm) String() string { return proto.CompactTextString(m) } func (*MsgRequestAttestationForm) ProtoMessage() {} func (*MsgRequestAttestationForm) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{28} + return fileDescriptor_2194ba0b2c3d6a97, []int{26} } func (m *MsgRequestAttestationForm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1450,7 +1394,7 @@ func (m *MsgRequestAttestationFormResponse) Reset() { *m = MsgRequestAtt func (m *MsgRequestAttestationFormResponse) String() string { return proto.CompactTextString(m) } func (*MsgRequestAttestationFormResponse) ProtoMessage() {} func (*MsgRequestAttestationFormResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{29} + return fileDescriptor_2194ba0b2c3d6a97, []int{27} } func (m *MsgRequestAttestationFormResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1516,7 +1460,7 @@ func (m *MsgAttest) Reset() { *m = MsgAttest{} } func (m *MsgAttest) String() string { return proto.CompactTextString(m) } func (*MsgAttest) ProtoMessage() {} func (*MsgAttest) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{30} + return fileDescriptor_2194ba0b2c3d6a97, []int{28} } func (m *MsgAttest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1566,7 +1510,7 @@ func (m *MsgAttestResponse) Reset() { *m = MsgAttestResponse{} } func (m *MsgAttestResponse) String() string { return proto.CompactTextString(m) } func (*MsgAttestResponse) ProtoMessage() {} func (*MsgAttestResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{31} + return fileDescriptor_2194ba0b2c3d6a97, []int{29} } func (m *MsgAttestResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1604,7 +1548,7 @@ func (m *MsgRequestReportForm) Reset() { *m = MsgRequestReportForm{} } func (m *MsgRequestReportForm) String() string { return proto.CompactTextString(m) } func (*MsgRequestReportForm) ProtoMessage() {} func (*MsgRequestReportForm) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{32} + return fileDescriptor_2194ba0b2c3d6a97, []int{30} } func (m *MsgRequestReportForm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1658,7 +1602,7 @@ func (m *MsgRequestReportFormResponse) Reset() { *m = MsgRequestReportFo func (m *MsgRequestReportFormResponse) String() string { return proto.CompactTextString(m) } func (*MsgRequestReportFormResponse) ProtoMessage() {} func (*MsgRequestReportFormResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{33} + return fileDescriptor_2194ba0b2c3d6a97, []int{31} } func (m *MsgRequestReportFormResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1724,7 +1668,7 @@ func (m *MsgReport) Reset() { *m = MsgReport{} } func (m *MsgReport) String() string { return proto.CompactTextString(m) } func (*MsgReport) ProtoMessage() {} func (*MsgReport) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{34} + return fileDescriptor_2194ba0b2c3d6a97, []int{32} } func (m *MsgReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1774,7 +1718,7 @@ func (m *MsgReportResponse) Reset() { *m = MsgReportResponse{} } func (m *MsgReportResponse) String() string { return proto.CompactTextString(m) } func (*MsgReportResponse) ProtoMessage() {} func (*MsgReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2194ba0b2c3d6a97, []int{35} + return fileDescriptor_2194ba0b2c3d6a97, []int{33} } func (m *MsgReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1804,12 +1748,12 @@ func (m *MsgReportResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgReportResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgPostContract)(nil), "canine_chain.storage.MsgPostContract") - proto.RegisterType((*MsgPostContractResponse)(nil), "canine_chain.storage.MsgPostContractResponse") - proto.RegisterType((*MsgPostproof)(nil), "canine_chain.storage.MsgPostproof") - proto.RegisterType((*MsgPostproofResponse)(nil), "canine_chain.storage.MsgPostproofResponse") - proto.RegisterType((*MsgSignContract)(nil), "canine_chain.storage.MsgSignContract") - proto.RegisterType((*MsgSignContractResponse)(nil), "canine_chain.storage.MsgSignContractResponse") + proto.RegisterType((*MsgPostFile)(nil), "canine_chain.storage.MsgPostFile") + proto.RegisterType((*MsgPostFileResponse)(nil), "canine_chain.storage.MsgPostFileResponse") + proto.RegisterType((*MsgPostProof)(nil), "canine_chain.storage.MsgPostProof") + proto.RegisterType((*MsgPostProofResponse)(nil), "canine_chain.storage.MsgPostProofResponse") + proto.RegisterType((*MsgDeleteFile)(nil), "canine_chain.storage.MsgDeleteFile") + proto.RegisterType((*MsgDeleteFileResponse)(nil), "canine_chain.storage.MsgDeleteFileResponse") proto.RegisterType((*MsgSetProviderIP)(nil), "canine_chain.storage.MsgSetProviderIP") proto.RegisterType((*MsgSetProviderIPResponse)(nil), "canine_chain.storage.MsgSetProviderIPResponse") proto.RegisterType((*MsgSetProviderKeybase)(nil), "canine_chain.storage.MsgSetProviderKeybase") @@ -1824,8 +1768,6 @@ func init() { proto.RegisterType((*MsgInitProviderResponse)(nil), "canine_chain.storage.MsgInitProviderResponse") proto.RegisterType((*MsgShutdownProvider)(nil), "canine_chain.storage.MsgShutdownProvider") proto.RegisterType((*MsgShutdownProviderResponse)(nil), "canine_chain.storage.MsgShutdownProviderResponse") - proto.RegisterType((*MsgCancelContract)(nil), "canine_chain.storage.MsgCancelContract") - proto.RegisterType((*MsgCancelContractResponse)(nil), "canine_chain.storage.MsgCancelContractResponse") proto.RegisterType((*MsgBuyStorage)(nil), "canine_chain.storage.MsgBuyStorage") proto.RegisterType((*MsgBuyStorageResponse)(nil), "canine_chain.storage.MsgBuyStorageResponse") proto.RegisterType((*MsgClaimStray)(nil), "canine_chain.storage.MsgClaimStray") @@ -1845,78 +1787,80 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/tx.proto", fileDescriptor_2194ba0b2c3d6a97) } var fileDescriptor_2194ba0b2c3d6a97 = []byte{ - // 1126 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xce, 0xc6, 0xcd, 0xd7, 0x8b, 0x13, 0xd2, 0x6d, 0xd2, 0x3a, 0xdb, 0xc6, 0x29, 0x5b, 0x41, - 0x4b, 0xab, 0xda, 0x22, 0x95, 0xe8, 0x05, 0x09, 0x25, 0x41, 0xa0, 0xd2, 0x1a, 0x82, 0x53, 0x24, - 0x04, 0x88, 0x68, 0xbc, 0x3b, 0x5e, 0x6f, 0x62, 0xef, 0x2c, 0x33, 0xe3, 0x50, 0x73, 0x00, 0x09, - 0x4e, 0xdc, 0xf8, 0x0b, 0x1c, 0xf8, 0x2f, 0x1c, 0x7b, 0xe4, 0x88, 0x92, 0x9f, 0xc1, 0x05, 0xed, - 0xec, 0xec, 0xec, 0x87, 0x77, 0x37, 0xeb, 0x0a, 0x21, 0x6e, 0x9e, 0x77, 0x9e, 0x79, 0x9e, 0xf7, - 0x63, 0x3c, 0xef, 0xab, 0x85, 0x6d, 0x0b, 0x79, 0xae, 0x87, 0x8f, 0xad, 0x01, 0x72, 0xbd, 0x36, - 0xe3, 0x84, 0x22, 0x07, 0xb7, 0xf9, 0x8b, 0x96, 0x4f, 0x09, 0x27, 0xfa, 0x46, 0x72, 0xbb, 0x25, - 0xb7, 0xcd, 0x5f, 0x34, 0x78, 0xbd, 0xc3, 0x9c, 0x43, 0xc2, 0xf8, 0x01, 0xf1, 0x38, 0x45, 0x16, - 0xd7, 0x1b, 0xb0, 0x64, 0x51, 0x8c, 0x38, 0xa1, 0x0d, 0xed, 0xb6, 0x76, 0x6f, 0xa5, 0x1b, 0x2d, - 0xf5, 0xeb, 0xb0, 0x38, 0xc2, 0xf4, 0x74, 0x88, 0x1b, 0xf3, 0x62, 0x43, 0xae, 0x02, 0x3b, 0x73, - 0x1d, 0x0f, 0xe3, 0x46, 0x2d, 0xb4, 0x87, 0x2b, 0xdd, 0x80, 0xe5, 0xbe, 0x3b, 0xc4, 0xcc, 0xfd, - 0x1e, 0x37, 0xae, 0x88, 0x1d, 0xb5, 0xd6, 0xd7, 0xa1, 0xd6, 0x77, 0xed, 0xc6, 0x82, 0x30, 0x07, - 0x3f, 0xcd, 0x2d, 0xb8, 0x91, 0x71, 0xa5, 0x8b, 0x99, 0x4f, 0x3c, 0x86, 0xcd, 0x13, 0xa8, 0xcb, - 0x2d, 0x9f, 0x12, 0xd2, 0x2f, 0x71, 0x51, 0x87, 0x2b, 0x2e, 0xc7, 0x23, 0xe9, 0xa0, 0xf8, 0x1d, - 0xb8, 0x31, 0x40, 0x6c, 0x30, 0x74, 0x19, 0x97, 0x0e, 0xaa, 0x75, 0xe0, 0x86, 0xe5, 0xda, 0xd2, - 0xbb, 0xe0, 0xa7, 0xf9, 0x1c, 0x36, 0x92, 0x5a, 0x91, 0x0f, 0x81, 0x26, 0x1b, 0x5b, 0x16, 0x66, - 0x4c, 0x68, 0x2e, 0x77, 0xa3, 0xa5, 0x6e, 0x42, 0x1d, 0x53, 0x4a, 0x68, 0x07, 0x33, 0x86, 0x9c, - 0x28, 0x39, 0x29, 0x9b, 0xf9, 0x85, 0xc8, 0xf3, 0x91, 0xeb, 0x78, 0x15, 0xf2, 0x2c, 0x9d, 0x9a, - 0x57, 0x4e, 0xe9, 0x5b, 0xb0, 0xec, 0xa3, 0xc9, 0x31, 0xf1, 0xac, 0x30, 0xc7, 0xcb, 0xdd, 0x25, - 0x1f, 0x4d, 0x3e, 0xf5, 0x2c, 0x2c, 0xd3, 0x96, 0x64, 0x56, 0x69, 0x7b, 0x0f, 0xd6, 0x83, 0x2d, - 0xcc, 0x0f, 0x29, 0x39, 0x73, 0x6d, 0x4c, 0x9f, 0x1c, 0x96, 0xa8, 0xae, 0xc1, 0xbc, 0xeb, 0x4b, - 0xd1, 0x79, 0xd7, 0x37, 0x0d, 0x68, 0x64, 0x4f, 0x2b, 0xe6, 0xa7, 0xb0, 0x99, 0xde, 0x7b, 0x8a, - 0x27, 0x3d, 0x14, 0x66, 0xa9, 0x80, 0xbe, 0x01, 0x4b, 0xa7, 0x21, 0x48, 0x6a, 0x44, 0x4b, 0x73, - 0x07, 0xb6, 0x73, 0xc9, 0x94, 0xda, 0xc7, 0x59, 0x4f, 0x9e, 0x13, 0x8e, 0x86, 0xcc, 0x47, 0x56, - 0x99, 0xe0, 0x06, 0x2c, 0x08, 0x88, 0x94, 0x0b, 0x17, 0xa6, 0x09, 0xb7, 0x8b, 0xb8, 0x94, 0xde, - 0x27, 0xb0, 0xda, 0x61, 0xce, 0x9e, 0x6d, 0x1f, 0x0c, 0x91, 0x3b, 0xc2, 0xb4, 0x44, 0xe4, 0x0e, - 0xac, 0x5a, 0x01, 0xe8, 0x18, 0xd9, 0x36, 0x0d, 0xee, 0x86, 0x2c, 0xbe, 0x30, 0xee, 0x85, 0x36, - 0xf3, 0x86, 0xc8, 0x56, 0xcc, 0xa7, 0x84, 0x3e, 0x13, 0x05, 0xea, 0xe2, 0x11, 0x39, 0xc3, 0xff, - 0x92, 0x56, 0x58, 0xb5, 0x14, 0xa5, 0x92, 0x1b, 0x8b, 0x4b, 0xf8, 0xc4, 0x73, 0x55, 0xf0, 0xd5, - 0xaf, 0x43, 0xb2, 0x7e, 0xb5, 0x54, 0xfd, 0xf4, 0x26, 0x00, 0x57, 0x49, 0x94, 0x7f, 0xa5, 0x84, - 0x45, 0xde, 0xd0, 0xa4, 0xac, 0xf2, 0xa8, 0x0d, 0xd7, 0x82, 0x6a, 0x0c, 0xc6, 0xdc, 0x26, 0xdf, - 0x79, 0x97, 0x7b, 0x65, 0x6e, 0xc3, 0xcd, 0x9c, 0x03, 0x8a, 0xef, 0x7d, 0xb8, 0xda, 0x61, 0xce, - 0x01, 0xf2, 0x2c, 0x3c, 0x7c, 0x95, 0x3f, 0x9a, 0x79, 0x13, 0xb6, 0xa6, 0x08, 0x14, 0xfb, 0x6f, - 0x9a, 0xb8, 0x18, 0xfb, 0xe3, 0xc9, 0x51, 0xf8, 0x7e, 0x96, 0x50, 0xef, 0xc0, 0x6b, 0x7d, 0x42, - 0x33, 0xa5, 0x82, 0x3e, 0xa1, 0xb2, 0x50, 0xc1, 0xab, 0x64, 0x8f, 0x29, 0xe2, 0x2e, 0xf1, 0xa2, - 0x57, 0x29, 0x5a, 0x07, 0x57, 0xb7, 0x37, 0xe1, 0x98, 0xc9, 0x64, 0x86, 0x8b, 0xa0, 0xfe, 0x3e, - 0x9a, 0x8c, 0xb0, 0xc7, 0x8f, 0x6d, 0xec, 0x91, 0x91, 0x7c, 0x3c, 0xeb, 0xd2, 0xf8, 0x41, 0x60, - 0x93, 0x77, 0x2d, 0x76, 0x51, 0x39, 0xff, 0xb5, 0xf0, 0x5d, 0x5c, 0x89, 0x23, 0x4e, 0xd1, 0x64, - 0xa6, 0xf7, 0x27, 0x13, 0x4d, 0x2d, 0x1b, 0x8d, 0x94, 0x8d, 0xd9, 0x95, 0xec, 0xef, 0x9a, 0x28, - 0xc9, 0xe7, 0xbe, 0x43, 0x91, 0x8d, 0xff, 0xbf, 0x79, 0x0b, 0x0b, 0x9f, 0x76, 0x53, 0x05, 0xf1, - 0x91, 0xd8, 0xec, 0xe2, 0x6f, 0xc7, 0x98, 0xf1, 0x3d, 0xce, 0x31, 0xe3, 0x42, 0xf0, 0x43, 0x42, - 0x47, 0x33, 0x5d, 0xaf, 0x9f, 0x35, 0x78, 0xa3, 0x90, 0x49, 0xb5, 0x9a, 0x5b, 0xb0, 0xe2, 0xcb, - 0x9b, 0x1d, 0x34, 0x9b, 0xda, 0xbd, 0x95, 0x6e, 0x6c, 0x48, 0x36, 0xa2, 0xf9, 0x74, 0x23, 0xda, - 0x80, 0x05, 0xd1, 0x74, 0x64, 0x5e, 0xc2, 0x45, 0x4e, 0x8b, 0x7b, 0x0c, 0x2b, 0xc1, 0x7b, 0x24, - 0xd4, 0x67, 0x72, 0xff, 0x9a, 0xa8, 0x65, 0x78, 0x50, 0x25, 0x67, 0x5f, 0x34, 0x4c, 0x19, 0x52, - 0x17, 0xfb, 0x84, 0xf2, 0x99, 0xf3, 0xf2, 0x03, 0xdc, 0xca, 0xe3, 0xf8, 0x8f, 0x33, 0x12, 0x0a, - 0xbf, 0x42, 0x46, 0xc2, 0x83, 0x91, 0xb7, 0xbb, 0x7f, 0xaf, 0x41, 0xad, 0xc3, 0x1c, 0xdd, 0x86, - 0x7a, 0x6a, 0xb2, 0x7a, 0xb3, 0x95, 0x37, 0x84, 0xb5, 0x32, 0x53, 0x8f, 0xf1, 0xb0, 0x12, 0x4c, - 0xe5, 0xe6, 0x2b, 0x58, 0x09, 0xec, 0x87, 0x62, 0x32, 0x32, 0x4b, 0xcf, 0x8a, 0x89, 0xc6, 0xb8, - 0x7f, 0x39, 0x46, 0x91, 0xdb, 0x50, 0x4f, 0x0d, 0x2d, 0xc5, 0x21, 0x24, 0x61, 0x25, 0x21, 0xe4, - 0x0d, 0x2a, 0xba, 0x03, 0xab, 0xe9, 0x29, 0xe5, 0xad, 0xe2, 0xf3, 0x49, 0x9c, 0xd1, 0xaa, 0x86, - 0x53, 0x42, 0x67, 0xa0, 0xe7, 0x0c, 0x2d, 0x0f, 0xaa, 0xb0, 0x48, 0xb0, 0xf1, 0x68, 0x06, 0xb0, - 0xd2, 0xfd, 0x11, 0x36, 0xf3, 0xc7, 0x97, 0x4a, 0x01, 0xc4, 0x78, 0xe3, 0xdd, 0xd9, 0xf0, 0xc9, - 0x3a, 0xa6, 0xfa, 0x7e, 0x71, 0x1d, 0x93, 0xb0, 0x92, 0x3a, 0xe6, 0xb5, 0x73, 0xdd, 0x87, 0xf5, - 0xa9, 0x5e, 0xfe, 0x76, 0xb1, 0xc7, 0x19, 0xa8, 0xf1, 0x4e, 0x65, 0xa8, 0x52, 0x3c, 0x81, 0xb5, - 0x4c, 0xb7, 0xbf, 0x5b, 0x48, 0x92, 0x06, 0x1a, 0xed, 0x8a, 0x40, 0xa5, 0xf5, 0x0d, 0x40, 0xa2, - 0xf5, 0xdf, 0x29, 0x3c, 0x1e, 0x83, 0x8c, 0x07, 0x15, 0x40, 0x49, 0xfe, 0x44, 0x7b, 0x2e, 0xe6, - 0x8f, 0x41, 0x25, 0xfc, 0xd3, 0xad, 0x38, 0xc8, 0x55, 0xa6, 0x0d, 0x17, 0xe7, 0x2a, 0x0d, 0x2c, - 0xc9, 0x55, 0x7e, 0xc7, 0xd4, 0xfb, 0xa0, 0xef, 0xd9, 0x76, 0x54, 0xae, 0x68, 0xb6, 0x2d, 0x8e, - 0x29, 0x1e, 0x8e, 0x4b, 0x62, 0x9a, 0x9e, 0xa0, 0x75, 0x02, 0x9b, 0xe1, 0xac, 0x9b, 0x95, 0x2a, - 0x7e, 0x41, 0x52, 0xb3, 0x71, 0xc9, 0x0b, 0x92, 0x3b, 0x43, 0xeb, 0x3f, 0x69, 0x70, 0xbd, 0x60, - 0x10, 0x68, 0x97, 0x50, 0xe5, 0x1d, 0x30, 0x1e, 0xcf, 0x78, 0x40, 0x39, 0xd1, 0x85, 0x45, 0xd9, - 0xbd, 0x77, 0x8a, 0x93, 0x25, 0x00, 0xc6, 0xdd, 0x4b, 0x00, 0x8a, 0x93, 0xc1, 0xd5, 0xe9, 0x1e, - 0x7e, 0xff, 0x32, 0x0f, 0x63, 0xac, 0xb1, 0x5b, 0x1d, 0x9b, 0x0c, 0x44, 0x36, 0xdd, 0x9d, 0x92, - 0xd3, 0x01, 0xa0, 0x24, 0x90, 0x74, 0xf7, 0xdd, 0x7f, 0xf6, 0xc7, 0x79, 0x53, 0x7b, 0x79, 0xde, - 0xd4, 0xfe, 0x3a, 0x6f, 0x6a, 0xbf, 0x5e, 0x34, 0xe7, 0x5e, 0x5e, 0x34, 0xe7, 0xfe, 0xbc, 0x68, - 0xce, 0x7d, 0xb9, 0xeb, 0xb8, 0x7c, 0x30, 0xee, 0xb5, 0x2c, 0x32, 0x6a, 0x9f, 0x20, 0xeb, 0x14, - 0x0d, 0x9f, 0xa1, 0x1e, 0x6b, 0x87, 0xbc, 0x0f, 0xc3, 0x0f, 0x27, 0x2f, 0xe2, 0x4f, 0x27, 0x13, - 0x1f, 0xb3, 0xde, 0xa2, 0xf8, 0x7c, 0xf2, 0xe8, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x88, - 0xad, 0x0d, 0x5f, 0x11, 0x00, 0x00, + // 1154 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x36, 0x2d, 0xff, 0x69, 0x22, 0xbb, 0x0e, 0x63, 0x27, 0x0c, 0x1d, 0xcb, 0x0e, 0x83, 0x34, + 0x6e, 0x82, 0x48, 0xa8, 0x03, 0x34, 0x97, 0x5e, 0xec, 0x06, 0x29, 0xdc, 0x58, 0x85, 0x4b, 0xbb, + 0x68, 0xd1, 0x16, 0x15, 0xd6, 0xe4, 0x9a, 0x66, 0x2c, 0x72, 0xd9, 0xdd, 0x95, 0x63, 0xe5, 0xd0, + 0x02, 0xed, 0x0b, 0xf4, 0x05, 0x72, 0xe8, 0xa1, 0xef, 0xd2, 0x63, 0x2e, 0x05, 0x7a, 0x2c, 0xec, + 0x17, 0x29, 0xb8, 0x5c, 0x2d, 0x49, 0x59, 0xa4, 0xa5, 0xa0, 0x28, 0x7a, 0xd3, 0x0e, 0xbf, 0x99, + 0xf9, 0xbe, 0x99, 0x15, 0x67, 0x40, 0x58, 0x75, 0x50, 0xe8, 0x87, 0xb8, 0xed, 0x1c, 0x23, 0x3f, + 0x6c, 0x32, 0x4e, 0x28, 0xf2, 0x70, 0x93, 0x9f, 0x35, 0x22, 0x4a, 0x38, 0xd1, 0x97, 0xb2, 0x8f, + 0x1b, 0xf2, 0xb1, 0xf5, 0xa7, 0x06, 0xd7, 0x5a, 0xcc, 0xdb, 0x23, 0x8c, 0x3f, 0xf7, 0x3b, 0x58, + 0x37, 0x60, 0xd6, 0xa1, 0x18, 0x71, 0x42, 0x0d, 0x6d, 0x5d, 0xdb, 0xa8, 0xda, 0xfd, 0xa3, 0x7e, + 0x13, 0x66, 0x02, 0x4c, 0x4f, 0x3a, 0xd8, 0x98, 0x5c, 0xd7, 0x36, 0x6a, 0xb6, 0x3c, 0xe9, 0x2b, + 0x50, 0x3d, 0xf2, 0x3b, 0xb8, 0xcd, 0xfc, 0xd7, 0xd8, 0xa8, 0xac, 0x6b, 0x1b, 0x15, 0x7b, 0x2e, + 0x36, 0xec, 0xfb, 0xaf, 0xb1, 0x7e, 0x1f, 0x16, 0x22, 0x4a, 0xc8, 0x51, 0xdb, 0x0f, 0x39, 0xa6, + 0xa7, 0xa8, 0x63, 0x4c, 0x09, 0xc4, 0xbc, 0xb0, 0xee, 0x48, 0xa3, 0xbe, 0x0a, 0x90, 0xc0, 0x78, + 0x2f, 0xc2, 0xc6, 0xb4, 0x80, 0x54, 0x85, 0xe5, 0xa0, 0x17, 0xe1, 0xf8, 0x71, 0x80, 0xce, 0xda, + 0xc2, 0xc0, 0x8c, 0x99, 0xe4, 0x71, 0x80, 0xce, 0xf6, 0x84, 0x41, 0xd7, 0x61, 0x2a, 0x24, 0x1c, + 0x1b, 0xb3, 0x82, 0xb0, 0xf8, 0x6d, 0x2d, 0xc3, 0x8d, 0x8c, 0x2c, 0x1b, 0xb3, 0x88, 0x84, 0x0c, + 0x5b, 0x6f, 0x34, 0xa8, 0x49, 0xbb, 0x70, 0x2e, 0xd1, 0xab, 0xc3, 0x94, 0xcf, 0x71, 0x20, 0xd4, + 0x56, 0x6d, 0xf1, 0x3b, 0xd6, 0x7a, 0x8c, 0xd8, 0x71, 0xbb, 0xe3, 0x33, 0x2e, 0xb4, 0xd6, 0xec, + 0xb9, 0xd8, 0xb0, 0xeb, 0x33, 0x9e, 0x29, 0xd0, 0x54, 0xae, 0x40, 0x4b, 0x30, 0x4d, 0x5e, 0x85, + 0x98, 0x0a, 0x5d, 0x55, 0x3b, 0x39, 0xc4, 0x56, 0xc6, 0x11, 0xe5, 0x52, 0x4e, 0x72, 0xb0, 0x0e, + 0x60, 0x29, 0x4b, 0xaf, 0xcf, 0x3b, 0xa6, 0xc9, 0xba, 0x8e, 0x83, 0x19, 0x13, 0x34, 0xe7, 0xec, + 0xfe, 0x51, 0xb7, 0xa0, 0x86, 0x29, 0x25, 0xb4, 0x85, 0x19, 0x43, 0x1e, 0x96, 0x74, 0x73, 0x36, + 0xeb, 0x2b, 0x98, 0x6f, 0x31, 0xef, 0x19, 0xee, 0x60, 0x8e, 0xdf, 0xb1, 0xcb, 0x8a, 0x6e, 0x25, + 0x4b, 0xf7, 0x16, 0x2c, 0xe7, 0x02, 0xab, 0x3a, 0x7f, 0x0c, 0x8b, 0x2d, 0xe6, 0xed, 0xe3, 0x58, + 0xc6, 0xa9, 0xef, 0x62, 0xba, 0xb3, 0x57, 0x92, 0x74, 0x01, 0x26, 0xfd, 0x48, 0x32, 0x9f, 0xf4, + 0x23, 0xcb, 0x04, 0x63, 0xd0, 0x5b, 0x45, 0x7e, 0x21, 0x52, 0x66, 0x9e, 0xbd, 0xc0, 0xbd, 0x43, + 0xc4, 0xca, 0x34, 0x19, 0x30, 0x7b, 0x92, 0x80, 0x64, 0x8e, 0xfe, 0xd1, 0x5a, 0x83, 0xd5, 0xa1, + 0xc1, 0x54, 0xb6, 0xcf, 0x06, 0x99, 0x1c, 0x10, 0x8e, 0x3a, 0x2c, 0x42, 0x4e, 0x59, 0xc2, 0xb8, + 0x58, 0x31, 0x44, 0xa6, 0x4b, 0x0e, 0x96, 0x05, 0xeb, 0x45, 0xb1, 0x54, 0xbe, 0xcf, 0x45, 0xa7, + 0xb6, 0x5c, 0xf7, 0x93, 0x0e, 0xf2, 0x03, 0x4c, 0x4b, 0x92, 0xdc, 0x83, 0x79, 0x27, 0x06, 0xb5, + 0x91, 0xeb, 0xd2, 0xf8, 0x62, 0xc8, 0xce, 0x0b, 0xe3, 0x56, 0x62, 0x93, 0x0d, 0x4a, 0xe3, 0xa9, + 0x44, 0x5f, 0x88, 0x06, 0xd9, 0x38, 0x20, 0xa7, 0xf8, 0x5f, 0xca, 0x95, 0x74, 0x2d, 0x17, 0x52, + 0xa5, 0xeb, 0xc2, 0x7b, 0x2d, 0xe6, 0xed, 0x84, 0xbe, 0x12, 0x3f, 0xfa, 0x75, 0xc8, 0xf6, 0xaf, + 0x92, 0xeb, 0x9f, 0x5e, 0x07, 0xe0, 0xaa, 0x88, 0xe2, 0x6f, 0x57, 0xb5, 0x33, 0x16, 0xeb, 0x36, + 0xdc, 0x1a, 0x48, 0xab, 0x18, 0x35, 0xc5, 0x0b, 0x62, 0xff, 0xb8, 0xcb, 0x5d, 0xf2, 0x2a, 0xbc, + 0x9a, 0x95, 0xb5, 0x0a, 0x2b, 0x43, 0x1c, 0x54, 0xbc, 0xdf, 0x34, 0xd1, 0xba, 0xed, 0x6e, 0x6f, + 0x3f, 0x79, 0xb5, 0x96, 0x08, 0x5c, 0x83, 0x6b, 0x47, 0x84, 0x0e, 0x14, 0x13, 0x8e, 0x08, 0x95, + 0xa5, 0xd4, 0x4d, 0x98, 0x73, 0xbb, 0x14, 0x71, 0x9f, 0x84, 0x52, 0xb2, 0x3a, 0xc7, 0x97, 0xeb, + 0xb0, 0xc7, 0x31, 0x93, 0x72, 0x93, 0x43, 0xdc, 0xa1, 0x08, 0xf5, 0x02, 0x1c, 0xf2, 0xb6, 0x8b, + 0x43, 0x12, 0xc8, 0x97, 0x4d, 0x4d, 0x1a, 0x9f, 0xc5, 0x36, 0x79, 0x1b, 0x52, 0x8a, 0x8a, 0xfc, + 0x77, 0x82, 0xbb, 0x68, 0xda, 0x3e, 0xa7, 0xa8, 0x57, 0xc2, 0x7d, 0x11, 0x2a, 0x8e, 0xef, 0x4a, + 0xce, 0xf1, 0xcf, 0x41, 0x35, 0x95, 0x41, 0x35, 0x32, 0x6d, 0x1a, 0x5d, 0xa5, 0xfd, 0x5d, 0x83, + 0xeb, 0x2d, 0xe6, 0x7d, 0x19, 0x79, 0x14, 0xb9, 0xf8, 0xff, 0x5b, 0xb7, 0x15, 0xb8, 0x7d, 0x89, + 0xa6, 0x12, 0xf1, 0xa9, 0x78, 0x68, 0xe3, 0x1f, 0xba, 0x98, 0xf1, 0x2d, 0xce, 0x31, 0xe3, 0x22, + 0xe1, 0x73, 0x42, 0x83, 0x71, 0xea, 0x68, 0xfd, 0xa2, 0xc1, 0xdd, 0xc2, 0x48, 0x6a, 0x12, 0xdc, + 0x81, 0x78, 0x30, 0x8a, 0xbb, 0x17, 0xcf, 0x82, 0xca, 0x46, 0xd5, 0x4e, 0x0d, 0xd9, 0x39, 0x31, + 0x99, 0x9f, 0x13, 0x4b, 0x30, 0x2d, 0x66, 0x82, 0xac, 0x4b, 0x72, 0xe8, 0xb3, 0x98, 0x4a, 0x59, + 0x3c, 0x85, 0x6a, 0xfc, 0xc6, 0x10, 0xd9, 0xc7, 0xa2, 0x7f, 0x43, 0xf4, 0x32, 0x71, 0x54, 0xc5, + 0xd9, 0x16, 0xf3, 0x4c, 0x4a, 0xb2, 0x71, 0x44, 0x28, 0x1f, 0xbb, 0x2e, 0x3f, 0xc2, 0x9d, 0x61, + 0x31, 0xfe, 0xe3, 0x8a, 0x24, 0x89, 0xdf, 0xa1, 0x22, 0x89, 0x63, 0x9f, 0xed, 0xe6, 0x9b, 0x79, + 0xa8, 0xb4, 0x98, 0xa7, 0x7f, 0x0d, 0x73, 0x6a, 0xe9, 0xba, 0xdb, 0x18, 0xb6, 0x9b, 0x35, 0x32, + 0x0b, 0x8c, 0xf9, 0xc1, 0x95, 0x10, 0x55, 0x8f, 0x6f, 0xa1, 0x9a, 0xee, 0x37, 0x56, 0xa9, 0x9f, + 0xc0, 0x98, 0x0f, 0xaf, 0xc6, 0xa8, 0xe0, 0xdf, 0x03, 0x64, 0xf6, 0x88, 0x7b, 0x85, 0x9e, 0x29, + 0xc8, 0x7c, 0x34, 0x02, 0x48, 0xc5, 0xf7, 0x60, 0x3e, 0xbf, 0x35, 0xbc, 0x5f, 0xe8, 0x9d, 0xc3, + 0x99, 0x8d, 0xd1, 0x70, 0x2a, 0xd1, 0x29, 0xe8, 0x43, 0x96, 0x88, 0x47, 0xa3, 0x44, 0x91, 0x60, + 0xf3, 0xc9, 0x18, 0x60, 0x95, 0xf7, 0x27, 0x58, 0x1e, 0xbe, 0x4e, 0x8c, 0x24, 0x20, 0xc5, 0x9b, + 0x1f, 0x8d, 0x87, 0x57, 0x04, 0x5c, 0xa8, 0xe5, 0xe6, 0xf0, 0xfd, 0xc2, 0x38, 0x59, 0x98, 0xf9, + 0x78, 0x24, 0x98, 0xca, 0x12, 0xc1, 0xe2, 0xa5, 0xd9, 0x5a, 0x7c, 0x87, 0x07, 0xa1, 0xe6, 0x87, + 0x23, 0x43, 0xb3, 0x37, 0x33, 0x33, 0x7c, 0x8b, 0x6f, 0x66, 0x0a, 0x2a, 0xb9, 0x99, 0x97, 0x67, + 0xa4, 0xfe, 0x12, 0x16, 0x06, 0x06, 0xd5, 0x83, 0x42, 0xf7, 0x3c, 0xd0, 0x6c, 0x8e, 0x08, 0x54, + 0xb9, 0x8e, 0x40, 0xdf, 0x72, 0xdd, 0xbe, 0xc4, 0xfe, 0x7e, 0x56, 0xac, 0x29, 0x5d, 0xf0, 0x4a, + 0x34, 0x5d, 0xde, 0x02, 0x75, 0x02, 0xcb, 0xc9, 0xbe, 0x36, 0x98, 0xaa, 0xf8, 0x5f, 0x97, 0xdb, + 0xef, 0x4a, 0xfe, 0x75, 0x43, 0xf7, 0x40, 0xfd, 0x67, 0x0d, 0x6e, 0x16, 0x8c, 0xca, 0x66, 0x49, + 0xa8, 0x61, 0x0e, 0xe6, 0xd3, 0x31, 0x1d, 0x14, 0x09, 0x1b, 0x66, 0xe4, 0x7c, 0x5b, 0x2b, 0x2e, + 0x96, 0x00, 0x98, 0x0f, 0xae, 0x00, 0xa8, 0x98, 0x0c, 0xae, 0x5f, 0x9e, 0x72, 0x0f, 0xaf, 0x62, + 0x98, 0x62, 0xcd, 0xcd, 0xd1, 0xb1, 0x59, 0x21, 0x72, 0x2c, 0xad, 0x95, 0x78, 0xc7, 0x80, 0x12, + 0x21, 0xf9, 0xf9, 0xb4, 0xbd, 0xfb, 0xc7, 0x79, 0x5d, 0x7b, 0x7b, 0x5e, 0xd7, 0xfe, 0x3e, 0xaf, + 0x6b, 0xbf, 0x5e, 0xd4, 0x27, 0xde, 0x5e, 0xd4, 0x27, 0xfe, 0xba, 0xa8, 0x4f, 0x7c, 0xb3, 0xe9, + 0xf9, 0xfc, 0xb8, 0x7b, 0xd8, 0x70, 0x48, 0xd0, 0x7c, 0x89, 0x9c, 0x13, 0xd4, 0xd9, 0x45, 0x87, + 0xac, 0x99, 0xc4, 0x7d, 0x9c, 0x7c, 0x75, 0x38, 0x4b, 0xbf, 0x3b, 0xf4, 0x22, 0xcc, 0x0e, 0x67, + 0xc4, 0xb7, 0x87, 0x27, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xc4, 0xf6, 0x9c, 0x76, 0x9c, 0x10, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1931,17 +1875,15 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { - PostContract(ctx context.Context, in *MsgPostContract, opts ...grpc.CallOption) (*MsgPostContractResponse, error) - PostProof(ctx context.Context, in *MsgPostproof, opts ...grpc.CallOption) (*MsgPostproofResponse, error) - SignContract(ctx context.Context, in *MsgSignContract, opts ...grpc.CallOption) (*MsgSignContractResponse, error) + PostFile(ctx context.Context, in *MsgPostFile, opts ...grpc.CallOption) (*MsgPostFileResponse, error) + PostProof(ctx context.Context, in *MsgPostProof, opts ...grpc.CallOption) (*MsgPostProofResponse, error) + DeleteFile(ctx context.Context, in *MsgDeleteFile, opts ...grpc.CallOption) (*MsgDeleteFileResponse, error) SetProviderIP(ctx context.Context, in *MsgSetProviderIP, opts ...grpc.CallOption) (*MsgSetProviderIPResponse, error) SetProviderKeybase(ctx context.Context, in *MsgSetProviderKeybase, opts ...grpc.CallOption) (*MsgSetProviderKeybaseResponse, error) SetProviderTotalspace(ctx context.Context, in *MsgSetProviderTotalspace, opts ...grpc.CallOption) (*MsgSetProviderTotalspaceResponse, error) InitProvider(ctx context.Context, in *MsgInitProvider, opts ...grpc.CallOption) (*MsgInitProviderResponse, error) ShutdownProvider(ctx context.Context, in *MsgShutdownProvider, opts ...grpc.CallOption) (*MsgShutdownProviderResponse, error) - CancelContract(ctx context.Context, in *MsgCancelContract, opts ...grpc.CallOption) (*MsgCancelContractResponse, error) BuyStorage(ctx context.Context, in *MsgBuyStorage, opts ...grpc.CallOption) (*MsgBuyStorageResponse, error) - ClaimStray(ctx context.Context, in *MsgClaimStray, opts ...grpc.CallOption) (*MsgClaimStrayResponse, error) UpgradeStorage(ctx context.Context, in *MsgUpgradeStorage, opts ...grpc.CallOption) (*MsgUpgradeStorageResponse, error) AddProviderClaimer(ctx context.Context, in *MsgAddClaimer, opts ...grpc.CallOption) (*MsgAddClaimerResponse, error) RemoveProviderClaimer(ctx context.Context, in *MsgRemoveClaimer, opts ...grpc.CallOption) (*MsgRemoveClaimerResponse, error) @@ -1959,17 +1901,17 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } -func (c *msgClient) PostContract(ctx context.Context, in *MsgPostContract, opts ...grpc.CallOption) (*MsgPostContractResponse, error) { - out := new(MsgPostContractResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/PostContract", in, out, opts...) +func (c *msgClient) PostFile(ctx context.Context, in *MsgPostFile, opts ...grpc.CallOption) (*MsgPostFileResponse, error) { + out := new(MsgPostFileResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/PostFile", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *msgClient) PostProof(ctx context.Context, in *MsgPostproof, opts ...grpc.CallOption) (*MsgPostproofResponse, error) { - out := new(MsgPostproofResponse) +func (c *msgClient) PostProof(ctx context.Context, in *MsgPostProof, opts ...grpc.CallOption) (*MsgPostProofResponse, error) { + out := new(MsgPostProofResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/PostProof", in, out, opts...) if err != nil { return nil, err @@ -1977,9 +1919,9 @@ func (c *msgClient) PostProof(ctx context.Context, in *MsgPostproof, opts ...grp return out, nil } -func (c *msgClient) SignContract(ctx context.Context, in *MsgSignContract, opts ...grpc.CallOption) (*MsgSignContractResponse, error) { - out := new(MsgSignContractResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/SignContract", in, out, opts...) +func (c *msgClient) DeleteFile(ctx context.Context, in *MsgDeleteFile, opts ...grpc.CallOption) (*MsgDeleteFileResponse, error) { + out := new(MsgDeleteFileResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/DeleteFile", in, out, opts...) if err != nil { return nil, err } @@ -2031,15 +1973,6 @@ func (c *msgClient) ShutdownProvider(ctx context.Context, in *MsgShutdownProvide return out, nil } -func (c *msgClient) CancelContract(ctx context.Context, in *MsgCancelContract, opts ...grpc.CallOption) (*MsgCancelContractResponse, error) { - out := new(MsgCancelContractResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/CancelContract", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *msgClient) BuyStorage(ctx context.Context, in *MsgBuyStorage, opts ...grpc.CallOption) (*MsgBuyStorageResponse, error) { out := new(MsgBuyStorageResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/BuyStorage", in, out, opts...) @@ -2049,15 +1982,6 @@ func (c *msgClient) BuyStorage(ctx context.Context, in *MsgBuyStorage, opts ...g return out, nil } -func (c *msgClient) ClaimStray(ctx context.Context, in *MsgClaimStray, opts ...grpc.CallOption) (*MsgClaimStrayResponse, error) { - out := new(MsgClaimStrayResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/ClaimStray", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *msgClient) UpgradeStorage(ctx context.Context, in *MsgUpgradeStorage, opts ...grpc.CallOption) (*MsgUpgradeStorageResponse, error) { out := new(MsgUpgradeStorageResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/UpgradeStorage", in, out, opts...) @@ -2123,17 +2047,15 @@ func (c *msgClient) Report(ctx context.Context, in *MsgReport, opts ...grpc.Call // MsgServer is the server API for Msg service. type MsgServer interface { - PostContract(context.Context, *MsgPostContract) (*MsgPostContractResponse, error) - PostProof(context.Context, *MsgPostproof) (*MsgPostproofResponse, error) - SignContract(context.Context, *MsgSignContract) (*MsgSignContractResponse, error) + PostFile(context.Context, *MsgPostFile) (*MsgPostFileResponse, error) + PostProof(context.Context, *MsgPostProof) (*MsgPostProofResponse, error) + DeleteFile(context.Context, *MsgDeleteFile) (*MsgDeleteFileResponse, error) SetProviderIP(context.Context, *MsgSetProviderIP) (*MsgSetProviderIPResponse, error) SetProviderKeybase(context.Context, *MsgSetProviderKeybase) (*MsgSetProviderKeybaseResponse, error) SetProviderTotalspace(context.Context, *MsgSetProviderTotalspace) (*MsgSetProviderTotalspaceResponse, error) InitProvider(context.Context, *MsgInitProvider) (*MsgInitProviderResponse, error) ShutdownProvider(context.Context, *MsgShutdownProvider) (*MsgShutdownProviderResponse, error) - CancelContract(context.Context, *MsgCancelContract) (*MsgCancelContractResponse, error) BuyStorage(context.Context, *MsgBuyStorage) (*MsgBuyStorageResponse, error) - ClaimStray(context.Context, *MsgClaimStray) (*MsgClaimStrayResponse, error) UpgradeStorage(context.Context, *MsgUpgradeStorage) (*MsgUpgradeStorageResponse, error) AddProviderClaimer(context.Context, *MsgAddClaimer) (*MsgAddClaimerResponse, error) RemoveProviderClaimer(context.Context, *MsgRemoveClaimer) (*MsgRemoveClaimerResponse, error) @@ -2147,14 +2069,14 @@ type MsgServer interface { type UnimplementedMsgServer struct { } -func (*UnimplementedMsgServer) PostContract(ctx context.Context, req *MsgPostContract) (*MsgPostContractResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PostContract not implemented") +func (*UnimplementedMsgServer) PostFile(ctx context.Context, req *MsgPostFile) (*MsgPostFileResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PostFile not implemented") } -func (*UnimplementedMsgServer) PostProof(ctx context.Context, req *MsgPostproof) (*MsgPostproofResponse, error) { +func (*UnimplementedMsgServer) PostProof(ctx context.Context, req *MsgPostProof) (*MsgPostProofResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PostProof not implemented") } -func (*UnimplementedMsgServer) SignContract(ctx context.Context, req *MsgSignContract) (*MsgSignContractResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SignContract not implemented") +func (*UnimplementedMsgServer) DeleteFile(ctx context.Context, req *MsgDeleteFile) (*MsgDeleteFileResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteFile not implemented") } func (*UnimplementedMsgServer) SetProviderIP(ctx context.Context, req *MsgSetProviderIP) (*MsgSetProviderIPResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetProviderIP not implemented") @@ -2171,15 +2093,9 @@ func (*UnimplementedMsgServer) InitProvider(ctx context.Context, req *MsgInitPro func (*UnimplementedMsgServer) ShutdownProvider(ctx context.Context, req *MsgShutdownProvider) (*MsgShutdownProviderResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ShutdownProvider not implemented") } -func (*UnimplementedMsgServer) CancelContract(ctx context.Context, req *MsgCancelContract) (*MsgCancelContractResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CancelContract not implemented") -} func (*UnimplementedMsgServer) BuyStorage(ctx context.Context, req *MsgBuyStorage) (*MsgBuyStorageResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method BuyStorage not implemented") } -func (*UnimplementedMsgServer) ClaimStray(ctx context.Context, req *MsgClaimStray) (*MsgClaimStrayResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ClaimStray not implemented") -} func (*UnimplementedMsgServer) UpgradeStorage(ctx context.Context, req *MsgUpgradeStorage) (*MsgUpgradeStorageResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpgradeStorage not implemented") } @@ -2206,26 +2122,26 @@ func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } -func _Msg_PostContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgPostContract) +func _Msg_PostFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgPostFile) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MsgServer).PostContract(ctx, in) + return srv.(MsgServer).PostFile(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Msg/PostContract", + FullMethod: "/canine_chain.storage.Msg/PostFile", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).PostContract(ctx, req.(*MsgPostContract)) + return srv.(MsgServer).PostFile(ctx, req.(*MsgPostFile)) } return interceptor(ctx, in, info, handler) } func _Msg_PostProof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgPostproof) + in := new(MsgPostProof) if err := dec(in); err != nil { return nil, err } @@ -2237,25 +2153,25 @@ func _Msg_PostProof_Handler(srv interface{}, ctx context.Context, dec func(inter FullMethod: "/canine_chain.storage.Msg/PostProof", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).PostProof(ctx, req.(*MsgPostproof)) + return srv.(MsgServer).PostProof(ctx, req.(*MsgPostProof)) } return interceptor(ctx, in, info, handler) } -func _Msg_SignContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSignContract) +func _Msg_DeleteFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDeleteFile) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MsgServer).SignContract(ctx, in) + return srv.(MsgServer).DeleteFile(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Msg/SignContract", + FullMethod: "/canine_chain.storage.Msg/DeleteFile", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SignContract(ctx, req.(*MsgSignContract)) + return srv.(MsgServer).DeleteFile(ctx, req.(*MsgDeleteFile)) } return interceptor(ctx, in, info, handler) } @@ -2350,24 +2266,6 @@ func _Msg_ShutdownProvider_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } -func _Msg_CancelContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgCancelContract) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).CancelContract(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Msg/CancelContract", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).CancelContract(ctx, req.(*MsgCancelContract)) - } - return interceptor(ctx, in, info, handler) -} - func _Msg_BuyStorage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgBuyStorage) if err := dec(in); err != nil { @@ -2386,24 +2284,6 @@ func _Msg_BuyStorage_Handler(srv interface{}, ctx context.Context, dec func(inte return interceptor(ctx, in, info, handler) } -func _Msg_ClaimStray_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgClaimStray) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ClaimStray(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.storage.Msg/ClaimStray", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ClaimStray(ctx, req.(*MsgClaimStray)) - } - return interceptor(ctx, in, info, handler) -} - func _Msg_UpgradeStorage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgUpgradeStorage) if err := dec(in); err != nil { @@ -2535,16 +2415,16 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "PostContract", - Handler: _Msg_PostContract_Handler, + MethodName: "PostFile", + Handler: _Msg_PostFile_Handler, }, { MethodName: "PostProof", Handler: _Msg_PostProof_Handler, }, { - MethodName: "SignContract", - Handler: _Msg_SignContract_Handler, + MethodName: "DeleteFile", + Handler: _Msg_DeleteFile_Handler, }, { MethodName: "SetProviderIP", @@ -2566,18 +2446,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "ShutdownProvider", Handler: _Msg_ShutdownProvider_Handler, }, - { - MethodName: "CancelContract", - Handler: _Msg_CancelContract_Handler, - }, { MethodName: "BuyStorage", Handler: _Msg_BuyStorage_Handler, }, - { - MethodName: "ClaimStray", - Handler: _Msg_ClaimStray_Handler, - }, { MethodName: "UpgradeStorage", Handler: _Msg_UpgradeStorage_Handler, @@ -2611,7 +2483,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ Metadata: "canine_chain/storage/tx.proto", } -func (m *MsgPostContract) Marshal() (dAtA []byte, err error) { +func (m *MsgPostFile) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2621,36 +2493,42 @@ func (m *MsgPostContract) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgPostContract) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgPostFile) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgPostContract) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgPostFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Fid) > 0 { - i -= len(m.Fid) - copy(dAtA[i:], m.Fid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Fid))) + if len(m.Note) > 0 { + i -= len(m.Note) + copy(dAtA[i:], m.Note) + i = encodeVarintTx(dAtA, i, uint64(len(m.Note))) i-- - dAtA[i] = 0x2a + dAtA[i] = 0x3a } - if len(m.Filesize) > 0 { - i -= len(m.Filesize) - copy(dAtA[i:], m.Filesize) - i = encodeVarintTx(dAtA, i, uint64(len(m.Filesize))) + if m.MaxProofs != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.MaxProofs)) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x30 } - if len(m.Signee) > 0 { - i -= len(m.Signee) - copy(dAtA[i:], m.Signee) - i = encodeVarintTx(dAtA, i, uint64(len(m.Signee))) + if m.ProofType != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.ProofType)) i-- - dAtA[i] = 0x1a + dAtA[i] = 0x28 + } + if m.ProofInterval != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.ProofInterval)) + i-- + dAtA[i] = 0x20 + } + if m.FileSize != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.FileSize)) + i-- + dAtA[i] = 0x18 } if len(m.Merkle) > 0 { i -= len(m.Merkle) @@ -2669,7 +2547,7 @@ func (m *MsgPostContract) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgPostContractResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgPostFileResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2679,12 +2557,12 @@ func (m *MsgPostContractResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgPostContractResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgPostFileResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgPostContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgPostFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2692,7 +2570,7 @@ func (m *MsgPostContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *MsgPostproof) Marshal() (dAtA []byte, err error) { +func (m *MsgPostProof) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2702,27 +2580,39 @@ func (m *MsgPostproof) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgPostproof) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgPostProof) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgPostproof) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgPostProof) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Cid))) + if m.Start != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x30 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintTx(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x2a + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintTx(dAtA, i, uint64(len(m.Merkle))) i-- dAtA[i] = 0x22 } - if len(m.Hashlist) > 0 { - i -= len(m.Hashlist) - copy(dAtA[i:], m.Hashlist) - i = encodeVarintTx(dAtA, i, uint64(len(m.Hashlist))) + if len(m.HashList) > 0 { + i -= len(m.HashList) + copy(dAtA[i:], m.HashList) + i = encodeVarintTx(dAtA, i, uint64(len(m.HashList))) i-- dAtA[i] = 0x1a } @@ -2743,7 +2633,7 @@ func (m *MsgPostproof) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgPostproofResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgPostProofResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2753,12 +2643,12 @@ func (m *MsgPostproofResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgPostproofResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgPostProofResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgPostproofResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgPostProofResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2783,7 +2673,7 @@ func (m *MsgPostproofResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgSignContract) Marshal() (dAtA []byte, err error) { +func (m *MsgDeleteFile) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2793,30 +2683,25 @@ func (m *MsgSignContract) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgSignContract) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgDeleteFile) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgSignContract) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgDeleteFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.PayOnce { - i-- - if m.PayOnce { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } + if m.Start != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Start)) i-- dAtA[i] = 0x18 } - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Cid))) + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintTx(dAtA, i, uint64(len(m.Merkle))) i-- dAtA[i] = 0x12 } @@ -2830,7 +2715,7 @@ func (m *MsgSignContract) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgSignContractResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgDeleteFileResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2840,12 +2725,12 @@ func (m *MsgSignContractResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgSignContractResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgDeleteFileResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgSignContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgDeleteFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3280,66 +3165,6 @@ func (m *MsgShutdownProviderResponse) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *MsgCancelContract) 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 *MsgCancelContract) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgCancelContract) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Cid))) - i-- - dAtA[i] = 0x12 - } - if len(m.Creator) > 0 { - i -= len(m.Creator) - copy(dAtA[i:], m.Creator) - i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgCancelContractResponse) 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 *MsgCancelContractResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgCancelContractResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - func (m *MsgBuyStorage) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3886,7 +3711,7 @@ func encodeVarintTx(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *MsgPostContract) Size() (n int) { +func (m *MsgPostFile) Size() (n int) { if m == nil { return 0 } @@ -3900,22 +3725,26 @@ func (m *MsgPostContract) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Signee) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if m.FileSize != 0 { + n += 1 + sovTx(uint64(m.FileSize)) } - l = len(m.Filesize) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if m.ProofInterval != 0 { + n += 1 + sovTx(uint64(m.ProofInterval)) + } + if m.ProofType != 0 { + n += 1 + sovTx(uint64(m.ProofType)) + } + if m.MaxProofs != 0 { + n += 1 + sovTx(uint64(m.MaxProofs)) } - l = len(m.Fid) + l = len(m.Note) if l > 0 { n += 1 + l + sovTx(uint64(l)) } return n } -func (m *MsgPostContractResponse) Size() (n int) { +func (m *MsgPostFileResponse) Size() (n int) { if m == nil { return 0 } @@ -3924,7 +3753,7 @@ func (m *MsgPostContractResponse) Size() (n int) { return n } -func (m *MsgPostproof) Size() (n int) { +func (m *MsgPostProof) Size() (n int) { if m == nil { return 0 } @@ -3938,18 +3767,25 @@ func (m *MsgPostproof) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Hashlist) + l = len(m.HashList) if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Cid) + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Owner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } + if m.Start != 0 { + n += 1 + sovTx(uint64(m.Start)) + } return n } -func (m *MsgPostproofResponse) Size() (n int) { +func (m *MsgPostProofResponse) Size() (n int) { if m == nil { return 0 } @@ -3965,7 +3801,7 @@ func (m *MsgPostproofResponse) Size() (n int) { return n } -func (m *MsgSignContract) Size() (n int) { +func (m *MsgDeleteFile) Size() (n int) { if m == nil { return 0 } @@ -3975,17 +3811,17 @@ func (m *MsgSignContract) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Cid) + l = len(m.Merkle) if l > 0 { n += 1 + l + sovTx(uint64(l)) } - if m.PayOnce { - n += 2 + if m.Start != 0 { + n += 1 + sovTx(uint64(m.Start)) } return n } -func (m *MsgSignContractResponse) Size() (n int) { +func (m *MsgDeleteFileResponse) Size() (n int) { if m == nil { return 0 } @@ -4180,32 +4016,6 @@ func (m *MsgShutdownProviderResponse) Size() (n int) { return n } -func (m *MsgCancelContract) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Creator) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgCancelContractResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - func (m *MsgBuyStorage) Size() (n int) { if m == nil { return 0 @@ -4456,7 +4266,7 @@ func sovTx(x uint64) (n int) { func sozTx(x uint64) (n int) { return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *MsgPostContract) Unmarshal(dAtA []byte) error { +func (m *MsgPostFile) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4479,10 +4289,10 @@ func (m *MsgPostContract) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgPostContract: wiretype end group for non-group") + return fmt.Errorf("proto: MsgPostFile: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgPostContract: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgPostFile: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4521,7 +4331,7 @@ func (m *MsgPostContract) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -4531,29 +4341,31 @@ func (m *MsgPostContract) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - m.Merkle = string(dAtA[iNdEx:postIndex]) + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signee", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FileSize", wireType) } - var stringLen uint64 + m.FileSize = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -4563,29 +4375,16 @@ func (m *MsgPostContract) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.FileSize |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signee = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filesize", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofInterval", wireType) } - var stringLen uint64 + m.ProofInterval = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -4595,27 +4394,52 @@ func (m *MsgPostContract) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.ProofInterval |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofType", wireType) } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx + m.ProofType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ProofType |= int64(b&0x7F) << shift + if b < 0x80 { + break + } } - if postIndex > l { - return io.ErrUnexpectedEOF + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxProofs", wireType) } - m.Filesize = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: + m.MaxProofs = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxProofs |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Note", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -4643,7 +4467,7 @@ func (m *MsgPostContract) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Fid = string(dAtA[iNdEx:postIndex]) + m.Note = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -4666,7 +4490,7 @@ func (m *MsgPostContract) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgPostContractResponse) Unmarshal(dAtA []byte) error { +func (m *MsgPostFileResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4689,10 +4513,10 @@ func (m *MsgPostContractResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgPostContractResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgPostFileResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgPostContractResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgPostFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -4716,7 +4540,7 @@ func (m *MsgPostContractResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgPostproof) Unmarshal(dAtA []byte) error { +func (m *MsgPostProof) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4739,10 +4563,10 @@ func (m *MsgPostproof) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgPostproof: wiretype end group for non-group") + return fmt.Errorf("proto: MsgPostProof: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgPostproof: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgPostProof: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4811,9 +4635,9 @@ func (m *MsgPostproof) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Hashlist", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HashList", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -4823,27 +4647,63 @@ func (m *MsgPostproof) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - m.Hashlist = string(dAtA[iNdEx:postIndex]) + m.HashList = append(m.HashList[:0], dAtA[iNdEx:postIndex]...) + if m.HashList == nil { + m.HashList = []byte{} + } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -4871,8 +4731,27 @@ func (m *MsgPostproof) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -4894,7 +4773,7 @@ func (m *MsgPostproof) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgPostproofResponse) Unmarshal(dAtA []byte) error { +func (m *MsgPostProofResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4917,10 +4796,10 @@ func (m *MsgPostproofResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgPostproofResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgPostProofResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgPostproofResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgPostProofResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4996,7 +4875,7 @@ func (m *MsgPostproofResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgSignContract) Unmarshal(dAtA []byte) error { +func (m *MsgDeleteFile) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5019,10 +4898,10 @@ func (m *MsgSignContract) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgSignContract: wiretype end group for non-group") + return fmt.Errorf("proto: MsgDeleteFile: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSignContract: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgDeleteFile: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5059,9 +4938,9 @@ func (m *MsgSignContract) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -5071,29 +4950,31 @@ func (m *MsgSignContract) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } iNdEx = postIndex case 3: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PayOnce", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) } - var v int + m.Start = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -5103,12 +4984,11 @@ func (m *MsgSignContract) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + m.Start |= int64(b&0x7F) << shift if b < 0x80 { break } } - m.PayOnce = bool(v != 0) default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -5130,7 +5010,7 @@ func (m *MsgSignContract) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgSignContractResponse) Unmarshal(dAtA []byte) error { +func (m *MsgDeleteFileResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5153,10 +5033,10 @@ func (m *MsgSignContractResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgSignContractResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgDeleteFileResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSignContractResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgDeleteFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -6360,170 +6240,6 @@ func (m *MsgShutdownProviderResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgCancelContract) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgCancelContract: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCancelContract: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Creator = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgCancelContractResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgCancelContractResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCancelContractResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *MsgBuyStorage) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/storage/types/ufid.go b/x/storage/types/ufid.go deleted file mode 100644 index bdcdd3280..000000000 --- a/x/storage/types/ufid.go +++ /dev/null @@ -1,9 +0,0 @@ -package types - -import "github.com/cosmos/cosmos-sdk/types/bech32" - -const UFidPrefix = "jkluf" - -func (u *UFID) ToString() (string, error) { - return bech32.ConvertAndEncode(UFidPrefix, u.GetHash()) -} From 7021425ddc005947b03ad8fd317c07ccd44308e8 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 19 Oct 2023 14:34:44 -0400 Subject: [PATCH 022/256] gutting old struct types --- app/upgrades/v4/upgrades.go | 71 +++++++ x/storage/client/cli/query_contracts.go | 73 ------- x/storage/client/cli/query_fid_cid.go | 73 ------- x/storage/client/cli/query_strays.go | 73 ------- x/storage/client/cli/tx_claim_stray.go | 43 ----- x/storage/genesis.go | 25 +-- x/storage/handler.go | 15 +- x/storage/keeper/contract_killing.go | 58 ------ x/storage/keeper/contracts.go | 61 ------ x/storage/keeper/fid_cid.go | 61 ------ x/storage/keeper/grpc_query_contracts.go | 56 ------ x/storage/keeper/grpc_query_fid_cid.go | 56 ------ x/storage/keeper/grpc_query_strays.go | 56 ------ x/storage/keeper/msg_server_claim_stray.go | 76 -------- x/storage/keeper/msg_server_postproof.go | 1 + x/storage/keeper/msg_server_proofs_test.go | 132 ++++++------- x/storage/keeper/msg_server_sign_contract.go | 178 ------------------ x/storage/simulation/cancel_contract.go | 73 ------- x/storage/simulation/claim_stray.go | 81 -------- x/storage/simulation/post_contract.go | 79 -------- x/storage/simulation/postproof.go | 74 -------- x/storage/simulation/set_miner_ip.go | 2 +- x/storage/simulation/set_miner_totalspace.go | 2 +- x/storage/simulation/sign_contract.go | 76 -------- x/storage/types/codec.go | 22 +-- x/storage/types/file_deal.go | 1 + .../types/message_cancel_contract_test.go | 48 ----- x/storage/types/message_claim_stray.go | 69 ------- x/storage/types/message_claim_stray_test.go | 51 ----- ...cel_contract.go => message_file_delete.go} | 28 ++- ...ct_test.go => message_file_delete_test.go} | 20 +- x/storage/types/message_post_contract.go | 77 -------- x/storage/types/message_post_contract_test.go | 77 -------- x/storage/types/message_post_file.go | 58 ++++++ x/storage/types/message_postproof.go | 33 ++-- x/storage/types/message_postproof_test.go | 28 +-- x/storage/types/message_sign_contract.go | 61 ------ x/storage/types/proof_loader.go | 1 + 38 files changed, 262 insertions(+), 1807 deletions(-) delete mode 100644 x/storage/client/cli/query_contracts.go delete mode 100644 x/storage/client/cli/query_fid_cid.go delete mode 100644 x/storage/client/cli/query_strays.go delete mode 100644 x/storage/client/cli/tx_claim_stray.go delete mode 100644 x/storage/keeper/contract_killing.go delete mode 100644 x/storage/keeper/contracts.go delete mode 100644 x/storage/keeper/fid_cid.go delete mode 100644 x/storage/keeper/grpc_query_contracts.go delete mode 100644 x/storage/keeper/grpc_query_fid_cid.go delete mode 100644 x/storage/keeper/grpc_query_strays.go delete mode 100644 x/storage/keeper/msg_server_claim_stray.go delete mode 100644 x/storage/keeper/msg_server_sign_contract.go delete mode 100644 x/storage/simulation/cancel_contract.go delete mode 100644 x/storage/simulation/claim_stray.go delete mode 100644 x/storage/simulation/post_contract.go delete mode 100644 x/storage/simulation/postproof.go delete mode 100644 x/storage/simulation/sign_contract.go delete mode 100644 x/storage/types/message_cancel_contract_test.go delete mode 100644 x/storage/types/message_claim_stray.go delete mode 100644 x/storage/types/message_claim_stray_test.go rename x/storage/types/{message_cancel_contract.go => message_file_delete.go} (50%) rename x/storage/types/{message_sign_contract_test.go => message_file_delete_test.go} (68%) delete mode 100644 x/storage/types/message_post_contract.go delete mode 100644 x/storage/types/message_post_contract_test.go create mode 100644 x/storage/types/message_post_file.go delete mode 100644 x/storage/types/message_sign_contract.go diff --git a/app/upgrades/v4/upgrades.go b/app/upgrades/v4/upgrades.go index 760cadec3..3283a92e3 100644 --- a/app/upgrades/v4/upgrades.go +++ b/app/upgrades/v4/upgrades.go @@ -1,6 +1,10 @@ package v4 import ( + "encoding/hex" + "encoding/json" + "strconv" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -34,6 +38,11 @@ func (u *Upgrade) Name() string { return "v4" } +type LegacyMarker struct { + Fid string `json:"fid"` + Cid string `json:"cid"` +} + // Handler implements upgrades.Upgrade func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { @@ -41,6 +50,68 @@ func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { fromVM[storagemoduletypes.ModuleName] = 5 + allDeals := u.sk.GetAllLegacyActiveDeals(ctx) + + for _, deal := range allDeals { + + merkle, err := hex.DecodeString(deal.Merkle) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + start, err := strconv.ParseInt(deal.Startblock, 10, 64) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + end, err := strconv.ParseInt(deal.Endblock, 10, 64) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + size, err := strconv.ParseInt(deal.Filesize, 10, 64) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + lm := LegacyMarker{ + Fid: deal.Fid, + Cid: deal.Cid, + } + + lmBytes, err := json.Marshal(lm) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + var uf storagemoduletypes.UnifiedFile + + uf, found := u.sk.GetFile(ctx, merkle, deal.Signee, start) + if !found { + uf = storagemoduletypes.UnifiedFile{ + Merkle: merkle, + Owner: deal.Signee, + Start: start, + Expires: end, + FileSize: size, + ProofInterval: 1800, // TODO: Decide on default window + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: string(lmBytes), + } + } + + u.sk.SetFile(ctx, uf) + uf.AddProver(ctx, u.sk, deal.Provider) + + } + newVM, err := u.mm.RunMigrations(ctx, u.configurator, fromVM) if err != nil { return newVM, err diff --git a/x/storage/client/cli/query_contracts.go b/x/storage/client/cli/query_contracts.go deleted file mode 100644 index 9d7abd228..000000000 --- a/x/storage/client/cli/query_contracts.go +++ /dev/null @@ -1,73 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "github.com/spf13/cobra" -) - -func CmdListContracts() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-contracts", - Short: "list all contracts", - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllContractsRequest{ - Pagination: pageReq, - } - - res, err := queryClient.ContractsAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowContracts() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-contracts [cid]", - Short: "shows a contracts", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argCid := args[0] - - params := &types.QueryContractRequest{ - Cid: argCid, - } - - res, err := queryClient.Contracts(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/storage/client/cli/query_fid_cid.go b/x/storage/client/cli/query_fid_cid.go deleted file mode 100644 index 250f09415..000000000 --- a/x/storage/client/cli/query_fid_cid.go +++ /dev/null @@ -1,73 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "github.com/spf13/cobra" -) - -func CmdListFidCid() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-fid-cid", - Short: "list all fid-cid", - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllFidCidRequest{ - Pagination: pageReq, - } - - res, err := queryClient.FidCidAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowFidCid() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-fid-cid [fid]", - Short: "shows a fid-cid", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argFid := args[0] - - params := &types.QueryFidCidRequest{ - Fid: argFid, - } - - res, err := queryClient.FidCid(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/storage/client/cli/query_strays.go b/x/storage/client/cli/query_strays.go deleted file mode 100644 index 9669a169e..000000000 --- a/x/storage/client/cli/query_strays.go +++ /dev/null @@ -1,73 +0,0 @@ -package cli - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "github.com/spf13/cobra" -) - -func CmdListStrays() *cobra.Command { - cmd := &cobra.Command{ - Use: "list-strays", - Short: "list all strays", - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - return err - } - - queryClient := types.NewQueryClient(clientCtx) - - params := &types.QueryAllStraysRequest{ - Pagination: pageReq, - } - - res, err := queryClient.StraysAll(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddPaginationFlagsToCmd(cmd, cmd.Use) - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - -func CmdShowStrays() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-strays [cid]", - Short: "shows a strays", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - argCid := args[0] - - params := &types.QueryStrayRequest{ - Cid: argCid, - } - - res, err := queryClient.Strays(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} diff --git a/x/storage/client/cli/tx_claim_stray.go b/x/storage/client/cli/tx_claim_stray.go deleted file mode 100644 index 1b332e598..000000000 --- a/x/storage/client/cli/tx_claim_stray.go +++ /dev/null @@ -1,43 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "github.com/spf13/cobra" -) - -var _ = strconv.Itoa(0) - -func CmdClaimStray() *cobra.Command { - cmd := &cobra.Command{ - Use: "claim-stray [cid]", - Short: "claim a stray from the pile", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - argCid := args[0] - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgClaimStray( - clientCtx.GetFromAddress().String(), - argCid, - clientCtx.GetFromAddress().String(), - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/storage/genesis.go b/x/storage/genesis.go index 1f155a0ce..e11d46d8b 100644 --- a/x/storage/genesis.go +++ b/x/storage/genesis.go @@ -9,28 +9,15 @@ import ( // InitGenesis initializes the capability module's state from a provided genesis // state. func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { - // Set all the contracts - for _, elem := range genState.ContractsList { - k.SetContracts(ctx, elem) - } // Set all the activeDeals - for _, elem := range genState.ActiveDealsList { - k.SetActiveDeals(ctx, elem) + for _, elem := range genState.FileList { + k.SetFile(ctx, elem) } // Set all the Providers for _, elem := range genState.ProvidersList { k.SetProviders(ctx, elem) } - // Set all the strays - for _, elem := range genState.StraysList { - k.SetStrays(ctx, elem) - } - // Set all the fidCid - for _, elem := range genState.FidCidList { - k.SetFidCid(ctx, elem) - } - // Set all the paymentinfo for _, elem := range genState.PaymentInfoList { k.SetStoragePaymentInfo(ctx, elem) @@ -56,7 +43,6 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) k.SetActiveProviders(ctx, elem) } - // this line is used by starport scaffolding # genesis/module/init k.SetParams(ctx, genState.Params) } @@ -65,18 +51,13 @@ func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { genesis := types.DefaultGenesis() genesis.Params = k.GetParams(ctx) - genesis.ContractsList = k.GetAllContracts(ctx) - genesis.ActiveDealsList = k.GetAllActiveDeals(ctx) + genesis.FileList = k.GetAllFileByMerkle(ctx) genesis.ProvidersList = k.GetAllProviders(ctx) - genesis.StraysList = k.GetAllStrays(ctx) - genesis.FidCidList = k.GetAllFidCid(ctx) genesis.PaymentInfoList = k.GetAllStoragePaymentInfo(ctx) genesis.CollateralList = k.GetAllCollateral(ctx) genesis.ActiveProvidersList = k.GetAllActiveProviders(ctx) genesis.ReportForms = k.GetAllReport(ctx) genesis.AttestForms = k.GetAllAttestation(ctx) - // this line is used by starport scaffolding # genesis/module/export - return genesis } diff --git a/x/storage/handler.go b/x/storage/handler.go index f5a052612..71b03b504 100644 --- a/x/storage/handler.go +++ b/x/storage/handler.go @@ -17,14 +17,12 @@ func NewHandler(k keeper.Keeper) sdk.Handler { ctx = ctx.WithEventManager(sdk.NewEventManager()) switch msg := msg.(type) { - case *types.MsgPostContract: - res, err := msgServer.PostContract(sdk.WrapSDKContext(ctx), msg) + case *types.MsgPostFile: + res, err := msgServer.PostFile(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgPostproof: + case *types.MsgPostProof: res, err := msgServer.PostProof(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgSignContract: - res, err := msgServer.SignContract(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) case *types.MsgSetProviderIP: res, err := msgServer.SetProviderIP(sdk.WrapSDKContext(ctx), msg) @@ -41,15 +39,12 @@ func NewHandler(k keeper.Keeper) sdk.Handler { case *types.MsgShutdownProvider: res, err := msgServer.ShutdownProvider(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgCancelContract: - res, err := msgServer.CancelContract(sdk.WrapSDKContext(ctx), msg) + case *types.MsgDeleteFile: + res, err := msgServer.DeleteFile(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) case *types.MsgBuyStorage: res, err := msgServer.BuyStorage(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgClaimStray: - res, err := msgServer.ClaimStray(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) case *types.MsgUpgradeStorage: res, err := msgServer.UpgradeStorage(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) diff --git a/x/storage/keeper/contract_killing.go b/x/storage/keeper/contract_killing.go deleted file mode 100644 index d1d65376c..000000000 --- a/x/storage/keeper/contract_killing.go +++ /dev/null @@ -1,58 +0,0 @@ -package keeper - -import ( - "fmt" - "strconv" - - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerror "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -func (k Keeper) KillOldContracts(ctx sdk.Context) { - maxContractAgeInBlocks := k.GetParams(ctx).MaxContractAgeInBlocks - contracts := k.GetAllContracts(ctx) - - for _, contract := range contracts { - if contract.Age+maxContractAgeInBlocks < ctx.BlockHeight() { - k.RemoveContracts(ctx, contract.Cid) - } - } -} - -func (k Keeper) DropDeal(ctx sdk.Context, deal types.ActiveDeals, burn bool) error { - intBlock, ok := sdk.NewIntFromString(deal.Endblock) - if !ok { - return sdkerror.Wrapf(sdkerror.ErrInvalidType, "int parse failed for endblock") - } - // Creating new stray file from the burned active deal - strayDeal := types.Strays{ - Cid: deal.Cid, - Fid: deal.Fid, - Signee: deal.Signee, - Filesize: deal.Filesize, - Merkle: deal.Merkle, - End: intBlock.Int64(), - } - k.SetStrays(ctx, strayDeal) - k.RemoveActiveDeals(ctx, deal.Cid) - - if burn { - provider, found := k.GetProviders(ctx, deal.Provider) - if !found { - return nil - } - - burnString := provider.BurnedContracts - burns, err := strconv.ParseInt(burnString, 10, 64) - if err != nil { - return err - } - burns++ - - provider.BurnedContracts = fmt.Sprintf("%d", burns) - k.SetProviders(ctx, provider) - } - - return nil -} diff --git a/x/storage/keeper/contracts.go b/x/storage/keeper/contracts.go deleted file mode 100644 index 2a5f34b91..000000000 --- a/x/storage/keeper/contracts.go +++ /dev/null @@ -1,61 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -// SetContracts set a specific contracts in the store from its index -func (k Keeper) SetContracts(ctx sdk.Context, contracts types.Contracts) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ContractsKeyPrefix)) - b := k.cdc.MustMarshal(&contracts) - store.Set(types.ContractsKey( - contracts.Cid, - ), b) -} - -// GetContracts returns a contracts from its index -func (k Keeper) GetContracts( - ctx sdk.Context, - cid string, -) (val types.Contracts, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ContractsKeyPrefix)) - - b := store.Get(types.ContractsKey( - cid, - )) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveContracts removes a contracts from the store -func (k Keeper) RemoveContracts( - ctx sdk.Context, - cid string, -) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ContractsKeyPrefix)) - store.Delete(types.ContractsKey( - cid, - )) -} - -// GetAllContracts returns all contracts -func (k Keeper) GetAllContracts(ctx sdk.Context) (list []types.Contracts) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ContractsKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.Contracts - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} diff --git a/x/storage/keeper/fid_cid.go b/x/storage/keeper/fid_cid.go deleted file mode 100644 index 91ca2d613..000000000 --- a/x/storage/keeper/fid_cid.go +++ /dev/null @@ -1,61 +0,0 @@ -package keeper - -import ( - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -// SetFidCid set a specific fidCid in the store from its index -func (k Keeper) SetFidCid(ctx sdk.Context, fidCid types.FidCid) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FidCidKeyPrefix)) - b := k.cdc.MustMarshal(&fidCid) - store.Set(types.FidCidKey( - fidCid.Fid, - ), b) -} - -// GetFidCid returns a fidCid from its index -func (k Keeper) GetFidCid( - ctx sdk.Context, - fid string, -) (val types.FidCid, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FidCidKeyPrefix)) - - b := store.Get(types.FidCidKey( - fid, - )) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveFidCid removes a fidCid from the store -func (k Keeper) RemoveFidCid( - ctx sdk.Context, - fid string, -) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FidCidKeyPrefix)) - store.Delete(types.FidCidKey( - fid, - )) -} - -// GetAllFidCid returns all fidCid -func (k Keeper) GetAllFidCid(ctx sdk.Context) (list []types.FidCid) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FidCidKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.FidCid - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} diff --git a/x/storage/keeper/grpc_query_contracts.go b/x/storage/keeper/grpc_query_contracts.go deleted file mode 100644 index e9e20114c..000000000 --- a/x/storage/keeper/grpc_query_contracts.go +++ /dev/null @@ -1,56 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func (k Keeper) ContractsAll(c context.Context, req *types.QueryAllContractsRequest) (*types.QueryAllContractsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var contractss []types.Contracts - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - contractsStore := prefix.NewStore(store, types.KeyPrefix(types.ContractsKeyPrefix)) - - pageRes, err := query.Paginate(contractsStore, req.Pagination, func(key []byte, value []byte) error { - var contracts types.Contracts - if err := k.cdc.Unmarshal(value, &contracts); err != nil { - return err - } - - contractss = append(contractss, contracts) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllContractsResponse{Contracts: contractss, Pagination: pageRes}, nil -} - -func (k Keeper) Contracts(c context.Context, req *types.QueryContractRequest) (*types.QueryContractResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetContracts( - ctx, - req.Cid, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryContractResponse{Contracts: val}, nil -} diff --git a/x/storage/keeper/grpc_query_fid_cid.go b/x/storage/keeper/grpc_query_fid_cid.go deleted file mode 100644 index 9a82c1a2e..000000000 --- a/x/storage/keeper/grpc_query_fid_cid.go +++ /dev/null @@ -1,56 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func (k Keeper) FidCidAll(c context.Context, req *types.QueryAllFidCidRequest) (*types.QueryAllFidCidResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var fidCids []types.FidCid - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - fidCidStore := prefix.NewStore(store, types.KeyPrefix(types.FidCidKeyPrefix)) - - pageRes, err := query.Paginate(fidCidStore, req.Pagination, func(key []byte, value []byte) error { - var fidCid types.FidCid - if err := k.cdc.Unmarshal(value, &fidCid); err != nil { - return err - } - - fidCids = append(fidCids, fidCid) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllFidCidResponse{FidCid: fidCids, Pagination: pageRes}, nil -} - -func (k Keeper) FidCid(c context.Context, req *types.QueryFidCidRequest) (*types.QueryFidCidResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetFidCid( - ctx, - req.Fid, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryFidCidResponse{FidCid: val}, nil -} diff --git a/x/storage/keeper/grpc_query_strays.go b/x/storage/keeper/grpc_query_strays.go deleted file mode 100644 index d91fd6fc5..000000000 --- a/x/storage/keeper/grpc_query_strays.go +++ /dev/null @@ -1,56 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func (k Keeper) StraysAll(c context.Context, req *types.QueryAllStraysRequest) (*types.QueryAllStraysResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var strayss []types.Strays - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - straysStore := prefix.NewStore(store, types.KeyPrefix(types.StraysKeyPrefix)) - - pageRes, err := query.Paginate(straysStore, req.Pagination, func(key []byte, value []byte) error { - var strays types.Strays - if err := k.cdc.Unmarshal(value, &strays); err != nil { - return err - } - - strayss = append(strayss, strays) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllStraysResponse{Strays: strayss, Pagination: pageRes}, nil -} - -func (k Keeper) Strays(c context.Context, req *types.QueryStrayRequest) (*types.QueryStrayResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetStrays( - ctx, - req.Cid, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryStrayResponse{Strays: val}, nil -} diff --git a/x/storage/keeper/msg_server_claim_stray.go b/x/storage/keeper/msg_server_claim_stray.go deleted file mode 100644 index bd403d50f..000000000 --- a/x/storage/keeper/msg_server_claim_stray.go +++ /dev/null @@ -1,76 +0,0 @@ -package keeper - -import ( - "context" - "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -func (k msgServer) ClaimStray(goCtx context.Context, msg *types.MsgClaimStray) (*types.MsgClaimStrayResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - stray, ok := k.GetStrays(ctx, msg.Cid) - if !ok { - return nil, sdkerrors.Wrap(sdkerrors.ErrKeyNotFound, "stray contract either no longer is stray, or has been removed by the user") - } - - ls := k.ListFiles(ctx, stray.Fid) - - provider, found := k.GetProviders(ctx, msg.ForAddress) - if !found { - return nil, sdkerrors.Wrap(sdkerrors.ErrKeyNotFound, "not a provider") - } - - for _, l := range ls { - if l == provider.Ip { - return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "cannot claim a stray you own.") - } - } - - size := sdk.NewInt(int64(stray.Size())) - - pieces := size.Quo(sdk.NewInt(k.GetParams(ctx).ChunkSize)) - - var pieceToStart int64 - - if !pieces.IsZero() { - pieceToStart = ctx.BlockHeight() % pieces.Int64() - } - - if msg.ForAddress != msg.Creator { - found := false - for _, claimer := range provider.AuthClaimers { - if claimer == msg.Creator { - found = true - } - } - if !found { - return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "cannot claim a stray for someone else") - } - - } - - deal := types.ActiveDeals{ - Cid: stray.Cid, - Signee: stray.Signee, - Provider: msg.ForAddress, - Startblock: fmt.Sprintf("%d", ctx.BlockHeight()), - Endblock: fmt.Sprintf("%d", stray.End), - Filesize: stray.Filesize, - Proofverified: "false", - Blocktoprove: fmt.Sprintf("%d", pieceToStart), - Creator: msg.Creator, - Proofsmissed: "0", - Merkle: stray.Merkle, - Fid: stray.Fid, - } - - k.SetActiveDeals(ctx, deal) - - k.RemoveStrays(ctx, stray.Cid) - - return &types.MsgClaimStrayResponse{}, nil -} diff --git a/x/storage/keeper/msg_server_postproof.go b/x/storage/keeper/msg_server_postproof.go index 310b6c1a4..b0dde3acf 100644 --- a/x/storage/keeper/msg_server_postproof.go +++ b/x/storage/keeper/msg_server_postproof.go @@ -3,6 +3,7 @@ package keeper import ( "context" "fmt" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) diff --git a/x/storage/keeper/msg_server_proofs_test.go b/x/storage/keeper/msg_server_proofs_test.go index 108abc240..10ffbe673 100644 --- a/x/storage/keeper/msg_server_proofs_test.go +++ b/x/storage/keeper/msg_server_proofs_test.go @@ -9,7 +9,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/testutil" - k "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" "github.com/jackalLabs/canine-chain/v3/x/storage/types" "github.com/wealdtech/go-merkletree" @@ -41,7 +40,7 @@ const ( CID2 = "jklc15ftkghzrx2ywyrpr6n7ge6prcej43efe3jvtzsxhenann69rcu8q7jl5uh" ) -func CreateMerkleForProof(file TestFile) (string, string, error) { +func CreateMerkleForProof(file TestFile) (string, []byte, error) { f := []byte(file.Data) index := 0 var data [][]byte @@ -50,7 +49,7 @@ func CreateMerkleForProof(file TestFile) (string, string, error) { h := sha256.New() _, err := io.WriteString(h, fmt.Sprintf("%d%x", index, f)) if err != nil { - return "", "", err + return "", nil, err } hashName := h.Sum(nil) @@ -58,24 +57,24 @@ func CreateMerkleForProof(file TestFile) (string, string, error) { tree, err := merkletree.NewUsing(data, sha3.New512(), false) if err != nil { - return "", "", err + return "", nil, err } h = sha256.New() _, err = io.WriteString(h, fmt.Sprintf("%d%x", index, item)) if err != nil { - return "", "", err + return "", nil, err } ditem := h.Sum(nil) proof, err := tree.GenerateProof(ditem, 0) if err != nil { - return "", "", err + return "", nil, err } jproof, err := json.Marshal(*proof) if err != nil { - return "", "", err + return "", nil, err } e := hex.EncodeToString(tree.Root()) @@ -84,17 +83,17 @@ func CreateMerkleForProof(file TestFile) (string, string, error) { verified, err := merkletree.VerifyProofUsing(ditem, false, proof, [][]byte{k}, sha3.New512()) if err != nil { - return "", "", err + return "", nil, err } if !verified { - return "", "", types.ErrCannotVerifyProof + return "", nil, types.ErrCannotVerifyProof } - return fmt.Sprintf("%x", item), string(jproof), nil + return fmt.Sprintf("%x", item), jproof, nil } -func makeContract(file TestFile) (string, string, error) { +func makeContract(file TestFile) ([]byte, int64, error) { f := []byte(file.Data) var list [][]byte @@ -103,7 +102,7 @@ func makeContract(file TestFile) (string, string, error) { h := sha256.New() _, err := io.WriteString(h, fmt.Sprintf("%d%x", 0, f)) if err != nil { - return "", "", err + return nil, 0, err } hashName := h.Sum(nil) @@ -111,10 +110,10 @@ func makeContract(file TestFile) (string, string, error) { t, err := merkletree.NewUsing(list, sha3.New512(), false) if err != nil { - return "", "", err + return nil, 0, err } - return hex.EncodeToString(t.Root()), fmt.Sprintf("%d", size), nil + return t.Root(), int64(size), nil } func (suite *KeeperTestSuite) TestPostProof() { @@ -179,49 +178,34 @@ func (suite *KeeperTestSuite) TestPostProof() { _, found := keeper.GetStoragePaymentInfo(suite.ctx, user.String()) suite.Require().Equal(true, found) // Post Contract - _, err = msgSrvr.PostContract(context, &types.MsgPostContract{ - Creator: testProvider.String(), - Signee: user.String(), - Filesize: filesize, - Fid: "fid", - Merkle: merkleroot, + _, err = msgSrvr.PostFile(context, &types.MsgPostFile{ + Creator: user.String(), + Merkle: merkleroot, + FileSize: filesize, + ProofInterval: 1800, + ProofType: 0, + MaxProofs: 3, + Note: "", }) suite.Require().NoError(err) h := sha256.New() _, err = io.WriteString(h, fmt.Sprintf("%s%s%s", user.String(), testProvider.String(), "fid")) suite.Require().NoError(err) - hashName := h.Sum(nil) - cid1, err := k.MakeCid(hashName) - suite.Require().NoError(err) // Post Contract #2 - _, err = msgSrvr.PostContract(context, &types.MsgPostContract{ - Creator: testProvider.String(), - Signee: user.String(), - Filesize: "1000", - Fid: "fid2", - Merkle: "invalid_merkleroot", + _, err = msgSrvr.PostFile(context, &types.MsgPostFile{ + Creator: user.String(), + Merkle: []byte{}, + FileSize: 1000, + ProofInterval: 1800, + ProofType: 0, + MaxProofs: 3, + Note: "", }) suite.Require().NoError(err) h2 := sha256.New() _, err = io.WriteString(h2, fmt.Sprintf("%s%s%s", user.String(), testProvider.String(), "fid")) suite.Require().NoError(err) - hashName2 := h.Sum(nil) - cid2, err := k.MakeCid(hashName2) - suite.Require().NoError(err) - // Sign Contract for active deal - _, err = msgSrvr.SignContract(context, &types.MsgSignContract{ - Creator: user.String(), - Cid: cid1, - }) - suite.Require().NoError(err) - - // Sign Contract #2 for active deal - _, err = msgSrvr.SignContract(context, &types.MsgSignContract{ - Creator: user.String(), - Cid: cid2, - }) - suite.Require().Error(err) // Storage Provider get file and create merkle for proof // for tc 1 and 2 @@ -234,68 +218,73 @@ func (suite *KeeperTestSuite) TestPostProof() { cases := []struct { testName string - msg types.MsgPostproof + msg types.MsgPostProof expErr bool expErrMsg string postRun func() }{ { testName: "proof successfully verified", - msg: types.MsgPostproof{ + msg: types.MsgPostProof{ Creator: testProvider.String(), - Cid: cid1, Item: item, - Hashlist: hashlist, + HashList: hashlist, + Merkle: merkleroot, + Owner: user.String(), + Start: 0, }, expErr: false, expErrMsg: "", }, { testName: "postproof for the same file again", - msg: types.MsgPostproof{ + msg: types.MsgPostProof{ Creator: testProvider.String(), - Cid: cid1, Item: item, - Hashlist: hashlist, + HashList: hashlist, + Merkle: merkleroot, + Owner: user.String(), + Start: 0, }, - expErr: true, + expErr: false, expErrMsg: "proof already verified", - postRun: func() { - // Set Proofverified back to false - contract, _ := keeper.GetActiveDeals(suite.ctx, CID) - contract.Proofverified = "false" - keeper.SetActiveDeals(suite.ctx, contract) - }, }, { testName: "proof fail to verify", - msg: types.MsgPostproof{ + msg: types.MsgPostProof{ Creator: testProvider.String(), - Cid: cid1, - Item: item2, - Hashlist: hashlist2, + Item: item, + HashList: hashlist2, + Merkle: merkleroot, + Owner: user.String(), + Start: 0, }, expErr: true, expErrMsg: "file chunk was not verified", }, { testName: "nonexisting contract", - msg: types.MsgPostproof{ + msg: types.MsgPostProof{ Creator: testProvider.String(), - Cid: "fakecontractid", Item: item, - Hashlist: hashlist, + HashList: hashlist, + Merkle: []byte{}, + Owner: user.String(), + Start: 0, }, + expErr: true, expErrMsg: "contract not found", }, { testName: "contract with invalid merkleroot", - msg: types.MsgPostproof{ + msg: types.MsgPostProof{ Creator: testProvider.String(), - Cid: cid2, Item: item2, - Hashlist: hashlist2, + HashList: hashlist2, + Merkle: []byte{}, + Owner: user.String(), + Start: 0, }, expErr: true, expErrMsg: "could not build merkle tree", @@ -308,11 +297,8 @@ func (suite *KeeperTestSuite) TestPostProof() { tc.testName, func() { res, err := msgSrvr.PostProof(context, &tc.msg) if tc.expErr { + suite.Require().Error(err) suite.Require().Equal(false, res.Success) - } else { - contract, _ := keeper.GetActiveDeals(suite.ctx, cid1) - suite.Require().Equal("true", contract.Proofverified) - suite.Require().NoError(err) } if tc.postRun != nil { tc.postRun() diff --git a/x/storage/keeper/msg_server_sign_contract.go b/x/storage/keeper/msg_server_sign_contract.go deleted file mode 100644 index 3ea18a6e3..000000000 --- a/x/storage/keeper/msg_server_sign_contract.go +++ /dev/null @@ -1,178 +0,0 @@ -package keeper - -import ( - "context" - "crypto/sha256" - "encoding/json" - "fmt" - "io" - - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -func (k msgServer) SignContract(goCtx context.Context, msg *types.MsgSignContract) (*types.MsgSignContractResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - contract, found := k.GetContracts(ctx, msg.Cid) - if !found { - return nil, fmt.Errorf("contract not found") - } - - _, found = k.GetActiveDeals(ctx, msg.Cid) - if found { - return nil, fmt.Errorf("contract already exists") - } - - _, found = k.GetStrays(ctx, msg.Cid) - if found { - return nil, fmt.Errorf("contract already exists") - } - - if contract.Signee != msg.Creator { - return nil, fmt.Errorf("you do not have permission to approve this contract") - } - - size, ok := sdk.NewIntFromString(contract.Filesize) - if !ok { - return nil, fmt.Errorf("cannot parse size") - } - - pieces := size.Quo(sdk.NewInt(k.GetParams(ctx).ChunkSize)) - - var pieceToStart int64 - - if !pieces.IsZero() { - pieceToStart = ctx.BlockHeight() % pieces.Int64() - } - - var end int64 - if msg.PayOnce { - - s := size.Quo(sdk.NewInt(1_000_000)).Int64() // round to mbs - if s <= 0 { - s = 1 - } - cost := k.GetStorageCostKbs(ctx, s*1000, 720*12*200) // pay for 200 years in mbs - - deposit, err := sdk.AccAddressFromBech32(k.GetParams(ctx).DepositAccount) - if err != nil { - return nil, err - } - - senderAddress, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - return nil, err - } - costCoins := sdk.NewCoins(sdk.NewCoin("ujkl", cost)) - err = k.bankkeeper.SendCoinsFromAccountToModule(ctx, senderAddress, types.ModuleName, costCoins) - if err != nil { - return nil, err - } - err = k.bankkeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, deposit, costCoins) - if err != nil { - return nil, err - } - - end = (200*31_536_000)/6 + ctx.BlockHeight() - } - - deal := types.ActiveDeals{ - Cid: contract.Cid, - Signee: contract.Signee, - Provider: contract.Creator, - Startblock: fmt.Sprintf("%d", ctx.BlockHeight()), - Endblock: fmt.Sprintf("%d", end), - Filesize: contract.Filesize, - Proofverified: "false", - Blocktoprove: fmt.Sprintf("%d", pieceToStart), - Creator: msg.Creator, - Proofsmissed: "0", - Merkle: contract.Merkle, - Fid: contract.Fid, - } - - if end == 0 { - fsize, ok := sdk.NewIntFromString(contract.Filesize) - if !ok { - return nil, fmt.Errorf("cannot parse file size") - } - payInfo, found := k.GetStoragePaymentInfo(ctx, msg.Creator) - if !found { - return nil, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "payment info not found, please purchase storage space") - } - - // check if user has any free space - if (payInfo.SpaceUsed + (fsize.Int64() * 3)) > payInfo.SpaceAvailable { - return nil, fmt.Errorf("not enough storage space") - } - // check if storage subscription still active - if payInfo.End.Before(ctx.BlockTime()) { - return nil, fmt.Errorf("storage subscription has expired") - } - - payInfo.SpaceUsed += fsize.Int64() * 3 - - k.SetStoragePaymentInfo(ctx, payInfo) - } - - k.SetActiveDeals(ctx, deal) - k.RemoveContracts(ctx, contract.Cid) - - ftc, found := k.GetFidCid(ctx, contract.Fid) - - cids := []string{contract.Cid} - - if found { - var ncids []string - err := json.Unmarshal([]byte(ftc.Cids), &ncids) - if err != nil { - return nil, err - } - - cids = append(cids, ncids...) - } - - for i := 0; i < 2; i++ { - h := sha256.New() - _, err := io.WriteString(h, fmt.Sprintf("%s%d", contract.Cid, i)) - if err != nil { - return nil, err - } - hashName := h.Sum(nil) - - scid, err := MakeCid(hashName) - if err != nil { - return nil, err - } - - newContract := types.Strays{ - Cid: scid, - Signee: contract.Signee, - Fid: contract.Fid, - Filesize: contract.Filesize, - Merkle: contract.Merkle, - End: end, - } - - cids = append(cids, scid) - - k.SetStrays(ctx, newContract) - - } - - cidarr, err := json.Marshal(cids) - if err != nil { - return nil, err - } - - nftc := types.FidCid{ - Fid: contract.Fid, - Cids: string(cidarr), - } - - k.SetFidCid(ctx, nftc) - - return &types.MsgSignContractResponse{}, nil -} diff --git a/x/storage/simulation/cancel_contract.go b/x/storage/simulation/cancel_contract.go deleted file mode 100644 index d0ea04eaa..000000000 --- a/x/storage/simulation/cancel_contract.go +++ /dev/null @@ -1,73 +0,0 @@ -package simulation - -import ( - "math/rand" - - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -func SimulateMsgCancelContract( - ak types.AccountKeeper, - bk types.BankKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - msg := &types.MsgCancelContract{} - - // choose a contract - contracts := k.GetAllActiveDeals(ctx) - if len(contracts) == 0 { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSignContract, "no contracts exist"), nil, nil - } - contract := contracts[simtypes.RandIntBetween(r, 0, len(contracts))] - - simAccount, found := simtypes.FindAccount( - accs, sdk.MustAccAddressFromBech32(contract.Signee), - ) - - if !found { - return simtypes.NoOpMsg( - types.ModuleName, types.TypeMsgSignContract, - "unable to find contract signee in []simtypes.Account", - ), nil, nil - } - - _, found = k.GetFidCid(ctx, contract.Fid) - if !found { - return simtypes.NoOpMsg( - types.ModuleName, types.TypeMsgSignContract, - "unable to find fid to cid", - ), nil, nil - } - - msg.Creator = contract.Signee - msg.Cid = contract.Cid - - spendable := bk.SpendableCoins(ctx, simAccount.Address) - fees, err := simtypes.RandomFees(r, ctx, spendable) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgPostContract, "failed to generate fee"), nil, err - } - txCtx := simulation.OperationInput{ - R: r, - App: app, - TxGen: simappparams.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - ModuleName: types.ModuleName, - } - - return simulation.GenAndDeliverTx(txCtx, fees) - } -} diff --git a/x/storage/simulation/claim_stray.go b/x/storage/simulation/claim_stray.go deleted file mode 100644 index dc7851258..000000000 --- a/x/storage/simulation/claim_stray.go +++ /dev/null @@ -1,81 +0,0 @@ -package simulation - -import ( - "math/rand" - - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -func SimulateMsgClaimStray( - ak types.AccountKeeper, - bk types.BankKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - msg := &types.MsgClaimStray{} - - strays := k.GetAllStrays(ctx) - if len(strays) == 0 { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to find strays"), nil, nil - } - stray := strays[r.Intn(len(strays))] - - providers := k.GetAllProviders(ctx) - if len(providers) == 0 { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to find providers"), nil, nil - } - provider := providers[r.Intn(len(providers))] - - files := k.ListFiles(ctx, stray.Fid) - - for _, file := range files { - if file == provider.Ip { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to find providers"), nil, nil - } - } - - if len(provider.AuthClaimers) == 0 { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to find claimers"), nil, nil - } - claimer := provider.AuthClaimers[r.Intn(len(provider.AuthClaimers))] - - simAccount, found := simtypes.FindAccount( - accs, sdk.MustAccAddressFromBech32(claimer), - ) - if !found { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to find claimer account"), nil, nil - } - - msg.Cid = stray.Cid - msg.Creator = claimer - msg.ForAddress = provider.Address - - spendable := bk.SpendableCoins(ctx, simAccount.Address) - fees, err := simtypes.RandomFees(r, ctx, spendable) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSignContract, "unable to generate fees"), nil, err - } - - txCtx := simulation.OperationInput{ - R: r, - App: app, - TxGen: simappparams.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - ModuleName: types.ModuleName, - } - - return simulation.GenAndDeliverTx(txCtx, fees) - } -} diff --git a/x/storage/simulation/post_contract.go b/x/storage/simulation/post_contract.go deleted file mode 100644 index 896b5234f..000000000 --- a/x/storage/simulation/post_contract.go +++ /dev/null @@ -1,79 +0,0 @@ -package simulation - -import ( - "math/rand" - "strconv" - - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/bech32" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -func SimulateMsgPostContract( - ak types.AccountKeeper, - bk types.BankKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - providers := k.GetAllProviders(ctx) - if len(providers) == 0 { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgPostContract, "providers are not initiated"), nil, nil - } - - provider := providers[simtypes.RandIntBetween(r, 0, len(providers))] - - simAccount, found := simtypes.FindAccount(accs, sdk.MustAccAddressFromBech32(provider.Creator)) - - if !found { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgPostContract, "provider address is unknown"), nil, nil - } - - msg := &types.MsgPostContract{ - Creator: provider.Creator, - } - - users := k.GetAllStoragePaymentInfo(ctx) - if len(users) == 0 { - return simtypes.NoOpMsg( - types.ModuleName, types.TypeMsgPostContract, "storage payment infos are not initiated"), nil, nil - } - msg.Signee = users[simtypes.RandIntBetween(r, 0, len(users))].Address - - msg.Filesize = strconv.Itoa(len(fileData)) - fid, err := bech32.ConvertAndEncode( - "jklf", []byte(simtypes.RandStringOfLength(r, 20))) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgPostContract, "failed to generate fid"), nil, err - } - - msg.Fid = fid - msg.Merkle = GetMerkleRoot() - - spendable := bk.SpendableCoins(ctx, simAccount.Address) - fees, err := simtypes.RandomFees(r, ctx, spendable) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgPostContract, "failed to generate fee"), nil, err - } - - txCtx := simulation.OperationInput{ - R: r, - App: app, - TxGen: simappparams.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - ModuleName: types.ModuleName, - } - - return simulation.GenAndDeliverTx(txCtx, fees) - } -} diff --git a/x/storage/simulation/postproof.go b/x/storage/simulation/postproof.go deleted file mode 100644 index 7142d905b..000000000 --- a/x/storage/simulation/postproof.go +++ /dev/null @@ -1,74 +0,0 @@ -package simulation - -import ( - "math/rand" - - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -func SimulateMsgPostproof( - ak types.AccountKeeper, - bk types.BankKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - msg := &types.MsgPostproof{} - - deals := k.GetAllActiveDeals(ctx) - if len(deals) == 0 { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to find active deals"), nil, nil - } - - deal := deals[r.Intn(len(deals))] - - if deal.Proofverified == "true" { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "proof already verified, skipping"), nil, nil - } - - provider, found := k.GetProviders(ctx, deal.Provider) - if !found { - return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to find provider for an active deal"), nil, nil - } - - simAccount, found := simtypes.FindAccount( - accs, sdk.MustAccAddressFromBech32(provider.Address), - ) - - if !found { - return simtypes.NoOpMsg( - types.ModuleName, msg.Type(), "unable to find provider account from []simtypes.Account"), nil, nil - } - - msg.Item, msg.Hashlist = GetMerkleProof() - msg.Creator = simAccount.Address.String() - msg.Cid = deal.Cid - - spendable := bk.SpendableCoins(ctx, simAccount.Address) - fees, err := simtypes.RandomFees(r, ctx, spendable) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSignContract, "unable to generate fees"), nil, err - } - - txCtx := simulation.OperationInput{ - R: r, - App: app, - TxGen: simappparams.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - ModuleName: types.ModuleName, - } - - return simulation.GenAndDeliverTx(txCtx, fees) - } -} diff --git a/x/storage/simulation/set_miner_ip.go b/x/storage/simulation/set_miner_ip.go index fbd51834e..3c1135df6 100644 --- a/x/storage/simulation/set_miner_ip.go +++ b/x/storage/simulation/set_miner_ip.go @@ -40,7 +40,7 @@ func SimulateMsgSetProviderIP( spendable := bk.SpendableCoins(ctx, simAccount.Address) fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSignContract, "unable to generate fees"), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSetProviderIP, "unable to generate fees"), nil, err } txCtx := simulation.OperationInput{ diff --git a/x/storage/simulation/set_miner_totalspace.go b/x/storage/simulation/set_miner_totalspace.go index c5868cc2b..a4f2bc0ca 100644 --- a/x/storage/simulation/set_miner_totalspace.go +++ b/x/storage/simulation/set_miner_totalspace.go @@ -39,7 +39,7 @@ func SimulateMsgSetProviderTotalspace( spendable := bk.SpendableCoins(ctx, simAccount.Address) fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSignContract, "unable to generate fees"), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSetProviderTotalspace, "unable to generate fees"), nil, err } txCtx := simulation.OperationInput{ diff --git a/x/storage/simulation/sign_contract.go b/x/storage/simulation/sign_contract.go deleted file mode 100644 index 2692643a8..000000000 --- a/x/storage/simulation/sign_contract.go +++ /dev/null @@ -1,76 +0,0 @@ -package simulation - -import ( - "math/rand" - - "github.com/cosmos/cosmos-sdk/baseapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" - sdk "github.com/cosmos/cosmos-sdk/types" - simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/cosmos/cosmos-sdk/x/simulation" - "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -func SimulateMsgSignContract( - ak types.AccountKeeper, - bk types.BankKeeper, - k keeper.Keeper, -) simtypes.Operation { - return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, - ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { - msg := &types.MsgSignContract{} - - contracts := k.GetAllContracts(ctx) - if len(contracts) == 0 { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSignContract, "no contracts exist"), nil, nil - } - contract := contracts[r.Intn(len(contracts))] - - simAccount, found := simtypes.FindAccount( - accs, sdk.MustAccAddressFromBech32(contract.Signee), - ) - - if !found { - return simtypes.NoOpMsg( - types.ModuleName, types.TypeMsgSignContract, - "unable to find contract signee in []simtypes.Account", - ), nil, nil - } - - payInfo, found := k.GetStoragePaymentInfo(ctx, simAccount.Address.String()) - if !found { - return simtypes.NoOpMsg( - types.ModuleName, types.TypeMsgSignContract, - "unable to find contract signee in []simtypes.Account", - ), nil, nil - } - if payInfo.End.Before(ctx.BlockTime()) { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSignContract, "storage payment expired"), nil, nil - } - - msg.Cid = contract.Cid - msg.Creator = contract.Signee - - spendable := bk.SpendableCoins(ctx, simAccount.Address) - fees, err := simtypes.RandomFees(r, ctx, spendable) - if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSignContract, "unable to generate fees"), nil, err - } - - txCtx := simulation.OperationInput{ - R: r, - App: app, - TxGen: simappparams.MakeTestEncodingConfig().TxConfig, - Cdc: nil, - Msg: msg, - MsgType: msg.Type(), - Context: ctx, - SimAccount: simAccount, - AccountKeeper: ak, - ModuleName: types.ModuleName, - } - - return simulation.GenAndDeliverTx(txCtx, fees) - } -} diff --git a/x/storage/types/codec.go b/x/storage/types/codec.go index 0f34053af..543e63039 100644 --- a/x/storage/types/codec.go +++ b/x/storage/types/codec.go @@ -9,15 +9,13 @@ import ( ) func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgPostContract{}, "storage/PostContract", nil) - cdc.RegisterConcrete(&MsgPostproof{}, "storage/PostProof", nil) - cdc.RegisterConcrete(&MsgSignContract{}, "storage/SignContract", nil) + cdc.RegisterConcrete(&MsgPostFile{}, "storage/PostFile", nil) + cdc.RegisterConcrete(&MsgPostProof{}, "storage/PostProof", nil) cdc.RegisterConcrete(&MsgSetProviderIP{}, "storage/SetProviderIp", nil) cdc.RegisterConcrete(&MsgSetProviderTotalspace{}, "storage/SetProviderTotalspace", nil) cdc.RegisterConcrete(&MsgInitProvider{}, "storage/InitProvider", nil) - cdc.RegisterConcrete(&MsgCancelContract{}, "storage/CancelContract", nil) + cdc.RegisterConcrete(&MsgDeleteFile{}, "storage/DeleteFile", nil) cdc.RegisterConcrete(&MsgBuyStorage{}, "storage/BuyStorage", nil) - cdc.RegisterConcrete(&MsgClaimStray{}, "storage/ClaimStray", nil) cdc.RegisterConcrete(&MsgUpgradeStorage{}, "storage/UpgradeStorage", nil) cdc.RegisterConcrete(&MsgSetProviderKeybase{}, "storage/SetProviderKeybase", nil) cdc.RegisterConcrete(&MsgAddClaimer{}, "storage/AddClaimer", nil) @@ -26,14 +24,12 @@ func RegisterCodec(cdc *codec.LegacyAmino) { func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgPostContract{}, + &MsgPostFile{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgPostproof{}, - ) - registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgSignContract{}, + &MsgPostProof{}, ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSetProviderIP{}, ) @@ -44,14 +40,12 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgInitProvider{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgCancelContract{}, + &MsgDeleteFile{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), &MsgBuyStorage{}, ) - registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgClaimStray{}, - ) + registry.RegisterImplementations((*sdk.Msg)(nil), &MsgUpgradeStorage{}, ) diff --git a/x/storage/types/file_deal.go b/x/storage/types/file_deal.go index 8791a8b3b..a6b8cbaac 100644 --- a/x/storage/types/file_deal.go +++ b/x/storage/types/file_deal.go @@ -55,6 +55,7 @@ func (f *UnifiedFile) AddProver(ctx sdk.Context, k ProofLoader, prover string) b } k.SetProof(ctx, p) + k.SetFile(ctx, *f) return true } diff --git a/x/storage/types/message_cancel_contract_test.go b/x/storage/types/message_cancel_contract_test.go deleted file mode 100644 index c0fc75301..000000000 --- a/x/storage/types/message_cancel_contract_test.go +++ /dev/null @@ -1,48 +0,0 @@ -package types - -import ( - "testing" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/stretchr/testify/require" -) - -func TestMsgCancelContract_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgCancelContract - err error - }{ - { - name: "invalid address", - msg: MsgCancelContract{ - Creator: "invalid_address", - Cid: "jklc1j3p63s42w7ywaczlju626st55mzu5z39qh6g4g", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "invalid cid", - msg: MsgCancelContract{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Cid: "invalid_cid", - }, - err: sdkerrors.ErrInvalidRequest, - }, { - name: "valid address", - msg: MsgCancelContract{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Cid: "jklc1j3p63s42w7ywaczlju626st55mzu5z39qh6g4g", - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/storage/types/message_claim_stray.go b/x/storage/types/message_claim_stray.go deleted file mode 100644 index bb35e4994..000000000 --- a/x/storage/types/message_claim_stray.go +++ /dev/null @@ -1,69 +0,0 @@ -package types - -import ( - fmt "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/bech32" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -const TypeMsgClaimStray = "claim_stray" - -var _ sdk.Msg = &MsgClaimStray{} - -func NewMsgClaimStray(creator string, cid string, forAddress string) *MsgClaimStray { - return &MsgClaimStray{ - Creator: creator, - Cid: cid, - ForAddress: forAddress, - } -} - -func (msg *MsgClaimStray) Route() string { - return RouterKey -} - -func (msg *MsgClaimStray) Type() string { - return TypeMsgClaimStray -} - -func (msg *MsgClaimStray) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgClaimStray) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgClaimStray) ValidateBasic() error { - prefix, _, err := bech32.DecodeAndConvert(msg.Creator) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) - } - if prefix != AddressPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) - } - - prefix, _, err = bech32.DecodeAndConvert(msg.ForAddress) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid for address (%s)", err) - } - if prefix != AddressPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid for prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) - } - - prefix, _, err = bech32.DecodeAndConvert(msg.Cid) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid (%s)", err) - } - if prefix != CidPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jklc`", prefix)) - } - return nil -} diff --git a/x/storage/types/message_claim_stray_test.go b/x/storage/types/message_claim_stray_test.go deleted file mode 100644 index a03b85ded..000000000 --- a/x/storage/types/message_claim_stray_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package types - -import ( - "testing" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/stretchr/testify/require" -) - -func TestMsgClaimStray_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgClaimStray - err error - }{ - { - name: "invalid address", - msg: MsgClaimStray{ - Creator: "invalid_address", - Cid: "jklc1j3p63s42w7ywaczlju626st55mzu5z39qh6g4g", - ForAddress: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "invalid cid", - msg: MsgClaimStray{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Cid: "invalid_cid", - ForAddress: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - }, - err: sdkerrors.ErrInvalidRequest, - }, { - name: "valid address", - msg: MsgClaimStray{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Cid: "jklc1j3p63s42w7ywaczlju626st55mzu5z39qh6g4g", - ForAddress: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/storage/types/message_cancel_contract.go b/x/storage/types/message_file_delete.go similarity index 50% rename from x/storage/types/message_cancel_contract.go rename to x/storage/types/message_file_delete.go index d96faaa5b..f463cf391 100644 --- a/x/storage/types/message_cancel_contract.go +++ b/x/storage/types/message_file_delete.go @@ -8,26 +8,27 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -const TypeMsgCancelContract = "cancel_contract" +const TypeMsgCancelContract = "delete_file" -var _ sdk.Msg = &MsgCancelContract{} +var _ sdk.Msg = &MsgDeleteFile{} -func NewMsgCancelContract(creator string, cid string) *MsgCancelContract { - return &MsgCancelContract{ +func NewMsgDeleteFile(creator string, merkle []byte, start int64) *MsgDeleteFile { + return &MsgDeleteFile{ Creator: creator, - Cid: cid, + Merkle: merkle, + Start: start, } } -func (msg *MsgCancelContract) Route() string { +func (msg *MsgDeleteFile) Route() string { return RouterKey } -func (msg *MsgCancelContract) Type() string { +func (msg *MsgDeleteFile) Type() string { return TypeMsgCancelContract } -func (msg *MsgCancelContract) GetSigners() []sdk.AccAddress { +func (msg *MsgDeleteFile) GetSigners() []sdk.AccAddress { creator, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { panic(err) @@ -35,12 +36,12 @@ func (msg *MsgCancelContract) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{creator} } -func (msg *MsgCancelContract) GetSignBytes() []byte { +func (msg *MsgDeleteFile) GetSignBytes() []byte { bz := ModuleCdc.MustMarshalJSON(msg) return sdk.MustSortJSON(bz) } -func (msg *MsgCancelContract) ValidateBasic() error { +func (msg *MsgDeleteFile) ValidateBasic() error { prefix, _, err := bech32.DecodeAndConvert(msg.Creator) if err != nil { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) @@ -49,12 +50,5 @@ func (msg *MsgCancelContract) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) } - prefix, _, err = bech32.DecodeAndConvert(msg.Cid) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid (%s)", err) - } - if prefix != CidPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jklc`", prefix)) - } return nil } diff --git a/x/storage/types/message_sign_contract_test.go b/x/storage/types/message_file_delete_test.go similarity index 68% rename from x/storage/types/message_sign_contract_test.go rename to x/storage/types/message_file_delete_test.go index 2e2bda9bd..e82338ae4 100644 --- a/x/storage/types/message_sign_contract_test.go +++ b/x/storage/types/message_file_delete_test.go @@ -7,31 +7,33 @@ import ( "github.com/stretchr/testify/require" ) -func TestMsgSignContract_ValidateBasic(t *testing.T) { +func TestMsgDeleteFile_ValidateBasic(t *testing.T) { tests := []struct { name string - msg MsgSignContract + msg MsgDeleteFile err error }{ { name: "invalid address", - msg: MsgSignContract{ - Creator: "invalid_address", - Cid: "jklc1j3p63s42w7ywaczlju626st55mzu5z39qh6g4g", + msg: MsgDeleteFile{ + Creator: "invalid_address", Merkle: []byte{}, + Start: 0, }, err: sdkerrors.ErrInvalidAddress, }, { name: "invalid cid", - msg: MsgSignContract{ + msg: MsgDeleteFile{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Cid: "invalid_cid", + Merkle: []byte{}, + Start: 0, }, err: sdkerrors.ErrInvalidRequest, }, { name: "valid address", - msg: MsgSignContract{ + msg: MsgDeleteFile{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Cid: "jklc1j3p63s42w7ywaczlju626st55mzu5z39qh6g4g", + Merkle: []byte{}, + Start: 0, }, }, } diff --git a/x/storage/types/message_post_contract.go b/x/storage/types/message_post_contract.go deleted file mode 100644 index d83ca7a56..000000000 --- a/x/storage/types/message_post_contract.go +++ /dev/null @@ -1,77 +0,0 @@ -package types - -import ( - fmt "fmt" - "strconv" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/bech32" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -const TypeMsgPostContract = "post_contract" - -var _ sdk.Msg = &MsgPostContract{} - -func NewMsgPostContract(creator string, signee string, filesize string, fid string, merkle string) *MsgPostContract { - return &MsgPostContract{ - Creator: creator, - Signee: signee, - Filesize: filesize, - Fid: fid, - Merkle: merkle, - } -} - -func (msg *MsgPostContract) Route() string { - return RouterKey -} - -func (msg *MsgPostContract) Type() string { - return TypeMsgPostContract -} - -func (msg *MsgPostContract) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgPostContract) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgPostContract) ValidateBasic() error { - prefix, _, err := bech32.DecodeAndConvert(msg.Creator) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) - } - if prefix != AddressPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) - } - - prefix, _, err = bech32.DecodeAndConvert(msg.Signee) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid signee address (%s)", err) - } - if prefix != AddressPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid signee prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) - } - - prefix, _, err = bech32.DecodeAndConvert(msg.Fid) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid fid (%s)", err) - } - if prefix != FidPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid fid prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jklf`", prefix)) - } - - if _, err := strconv.Atoi(msg.Filesize); err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "cannot parse file size (%s)", err) - } - - return nil -} diff --git a/x/storage/types/message_post_contract_test.go b/x/storage/types/message_post_contract_test.go deleted file mode 100644 index 3d9143613..000000000 --- a/x/storage/types/message_post_contract_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package types - -import ( - "testing" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/stretchr/testify/require" -) - -func TestMsgPostContract_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgPostContract - err error - }{ - { - name: "invalid creator", - msg: MsgPostContract{ - Creator: "invalid_address", - Merkle: "merkle", - Signee: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Filesize: "100000", - Fid: "jklf1j3p63s42w7ywaczlju626st55mzu5z39w2rx9x", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "invalid signee", - msg: MsgPostContract{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Merkle: "merkle", - Signee: "invalid_address", - Filesize: "100000", - Fid: "jklf1j3p63s42w7ywaczlju626st55mzu5z39w2rx9x", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "invalid filesize", - msg: MsgPostContract{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Merkle: "merkle", - Signee: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Filesize: "x", - Fid: "jklf1j3p63s42w7ywaczlju626st55mzu5z39w2rx9x", - }, - err: sdkerrors.ErrInvalidType, - }, { - name: "invalid fid", - msg: MsgPostContract{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Merkle: "merkle", - Signee: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Filesize: "100000", - Fid: "invalid_fid", - }, - err: sdkerrors.ErrInvalidRequest, - }, { - name: "valid address", - msg: MsgPostContract{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Merkle: "merkle", - Signee: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Filesize: "100000", - Fid: "jklf1j3p63s42w7ywaczlju626st55mzu5z39w2rx9x", - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/x/storage/types/message_post_file.go b/x/storage/types/message_post_file.go new file mode 100644 index 000000000..ce93d7bfa --- /dev/null +++ b/x/storage/types/message_post_file.go @@ -0,0 +1,58 @@ +package types + +import ( + fmt "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/bech32" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgPostFile = "post_file" + +var _ sdk.Msg = &MsgPostFile{} + +func NewMsgPostContract(creator string, merkle []byte, fileSize int64, proofInterval int64, proofType int64, maxProofs int64, note string) *MsgPostFile { + return &MsgPostFile{ + Creator: creator, + Merkle: merkle, + FileSize: fileSize, + ProofInterval: proofInterval, + ProofType: proofType, + MaxProofs: maxProofs, + Note: note, + } +} + +func (msg *MsgPostFile) Route() string { + return RouterKey +} + +func (msg *MsgPostFile) Type() string { + return TypeMsgPostFile +} + +func (msg *MsgPostFile) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgPostFile) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(msg) + return sdk.MustSortJSON(bz) +} + +func (msg *MsgPostFile) ValidateBasic() error { + prefix, _, err := bech32.DecodeAndConvert(msg.Creator) + if err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if prefix != AddressPrefix { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) + } + + return nil +} diff --git a/x/storage/types/message_postproof.go b/x/storage/types/message_postproof.go index 7f060cde0..2336b9bb8 100644 --- a/x/storage/types/message_postproof.go +++ b/x/storage/types/message_postproof.go @@ -8,28 +8,30 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -const TypeMsgPostproof = "postproof" +const TypeMsgPostProof = "post_proof" -var _ sdk.Msg = &MsgPostproof{} +var _ sdk.Msg = &MsgPostProof{} -func NewMsgPostproof(creator string, item string, hashlist string, cid string) *MsgPostproof { - return &MsgPostproof{ +func NewMsgPostProof(creator string, merkle []byte, owner string, start int64, item string, hashList []byte) *MsgPostProof { + return &MsgPostProof{ Creator: creator, - Cid: cid, Item: item, - Hashlist: hashlist, + HashList: hashList, + Merkle: merkle, + Owner: owner, + Start: start, } } -func (msg *MsgPostproof) Route() string { +func (msg *MsgPostProof) Route() string { return RouterKey } -func (msg *MsgPostproof) Type() string { - return TypeMsgPostproof +func (msg *MsgPostProof) Type() string { + return TypeMsgPostProof } -func (msg *MsgPostproof) GetSigners() []sdk.AccAddress { +func (msg *MsgPostProof) GetSigners() []sdk.AccAddress { creator, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { panic(err) @@ -37,12 +39,12 @@ func (msg *MsgPostproof) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{creator} } -func (msg *MsgPostproof) GetSignBytes() []byte { +func (msg *MsgPostProof) GetSignBytes() []byte { bz := ModuleCdc.MustMarshalJSON(msg) return sdk.MustSortJSON(bz) } -func (msg *MsgPostproof) ValidateBasic() error { +func (msg *MsgPostProof) ValidateBasic() error { prefix, _, err := bech32.DecodeAndConvert(msg.Creator) if err != nil { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) @@ -51,12 +53,5 @@ func (msg *MsgPostproof) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) } - prefix, _, err = bech32.DecodeAndConvert(msg.Cid) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid (%s)", err) - } - if prefix != "jklc" { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jklc`", prefix)) - } return nil } diff --git a/x/storage/types/message_postproof_test.go b/x/storage/types/message_postproof_test.go index 7e49a7a83..e0658a0e6 100644 --- a/x/storage/types/message_postproof_test.go +++ b/x/storage/types/message_postproof_test.go @@ -7,37 +7,43 @@ import ( "github.com/stretchr/testify/require" ) -func TestMsgPostproof_ValidateBasic(t *testing.T) { +func TestMsgPostProof_ValidateBasic(t *testing.T) { tests := []struct { name string - msg MsgPostproof + msg MsgPostProof err error }{ { name: "invalid address", - msg: MsgPostproof{ + msg: MsgPostProof{ Creator: "invalid_address", Item: "hex", - Hashlist: "hex", - Cid: "jklc1j3p63s42w7ywaczlju626st55mzu5z39qh6g4g", + HashList: []byte{}, + Merkle: []byte{}, + Owner: "owner", + Start: 0, }, err: sdkerrors.ErrInvalidAddress, }, { name: "invalid cid", - msg: MsgPostproof{ + msg: MsgPostProof{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Item: "hex", - Hashlist: "hex", - Cid: "invalid_cid", + HashList: []byte{}, + Merkle: []byte{}, + Owner: "owner", + Start: 0, }, err: sdkerrors.ErrInvalidRequest, }, { name: "valid address", - msg: MsgPostproof{ + msg: MsgPostProof{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Item: "hex", - Hashlist: "hex", - Cid: "jklc1j3p63s42w7ywaczlju626st55mzu5z39qh6g4g", + HashList: []byte{}, + Merkle: []byte{}, + Owner: "owner", + Start: 0, }, }, } diff --git a/x/storage/types/message_sign_contract.go b/x/storage/types/message_sign_contract.go deleted file mode 100644 index e1f622101..000000000 --- a/x/storage/types/message_sign_contract.go +++ /dev/null @@ -1,61 +0,0 @@ -package types - -import ( - fmt "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/bech32" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -const TypeMsgSignContract = "sign_contract" - -var _ sdk.Msg = &MsgSignContract{} - -func NewMsgSignContract(creator string, cid string, payOnce bool) *MsgSignContract { - return &MsgSignContract{ - Creator: creator, - Cid: cid, - PayOnce: payOnce, - } -} - -func (msg *MsgSignContract) Route() string { - return RouterKey -} - -func (msg *MsgSignContract) Type() string { - return TypeMsgSignContract -} - -func (msg *MsgSignContract) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgSignContract) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgSignContract) ValidateBasic() error { - prefix, _, err := bech32.DecodeAndConvert(msg.Creator) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) - } - if prefix != AddressPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) - } - - prefix, _, err = bech32.DecodeAndConvert(msg.Cid) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid (%s)", err) - } - if prefix != CidPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jklc`", prefix)) - } - return nil -} diff --git a/x/storage/types/proof_loader.go b/x/storage/types/proof_loader.go index f5999912b..996ab9007 100644 --- a/x/storage/types/proof_loader.go +++ b/x/storage/types/proof_loader.go @@ -12,4 +12,5 @@ type ProofLoader interface { ctx sdk.Context, key []byte, ) + SetFile(ctx sdk.Context, File UnifiedFile) } From f3cc8fb274c98492bf17b7d85bf3b2964fe9026f Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 19 Oct 2023 16:22:18 -0400 Subject: [PATCH 023/256] fixing attestations/reports with new uf --- proto/canine_chain/storage/providers.proto | 10 +- proto/canine_chain/storage/query.proto | 28 +- proto/canine_chain/storage/tx.proto | 21 +- x/storage/client/cli/query.go | 7 - x/storage/client/cli/query_active_deals.go | 37 +- x/storage/client/cli/query_attest.go | 48 +- x/storage/client/cli/tx.go | 4 - x/storage/client/cli/tx_cancel_contract.go | 22 +- x/storage/client/cli/tx_post_contract.go | 48 - x/storage/client/cli/tx_postproof.go | 45 - x/storage/client/cli/tx_sign_contract.go | 52 -- x/storage/keeper/attestations.go | 31 +- x/storage/keeper/files.go | 9 + x/storage/keeper/grpc_query_active_deals.go | 20 +- x/storage/keeper/grpc_query_attestation.go | 5 +- x/storage/keeper/grpc_query_report.go | 5 +- x/storage/keeper/msg_server_attest.go | 48 +- .../keeper/msg_server_cancel_contract.go | 86 +- x/storage/keeper/msg_server_post_contract.go | 60 +- x/storage/keeper/msg_server_postproof.go | 15 +- x/storage/keeper/msg_server_report.go | 36 +- x/storage/keeper/reports.go | 25 +- x/storage/types/file_deal.go | 8 +- x/storage/types/key_providers.go | 31 +- x/storage/types/message_attest.go | 27 +- x/storage/types/message_report.go | 28 +- x/storage/types/providers.pb.go | 375 +++++++- x/storage/types/query.pb.go | 841 ++++++++++------- x/storage/types/query.pb.gw.go | 190 +++- x/storage/types/tx.pb.go | 846 +++++++++++++----- 30 files changed, 1947 insertions(+), 1061 deletions(-) delete mode 100644 x/storage/client/cli/tx_post_contract.go delete mode 100644 x/storage/client/cli/tx_postproof.go delete mode 100644 x/storage/client/cli/tx_sign_contract.go diff --git a/proto/canine_chain/storage/providers.proto b/proto/canine_chain/storage/providers.proto index 8976f8940..66f58738f 100644 --- a/proto/canine_chain/storage/providers.proto +++ b/proto/canine_chain/storage/providers.proto @@ -24,12 +24,18 @@ message Attestation { message AttestationForm { repeated Attestation attestations = 1; - string cid = 2; + string prover = 2; + bytes merkle = 3; // The merkle root is unique to every file based on its contents. + string owner = 4; + int64 start = 5; // Marks the block height the file started on. } message ReportForm { repeated Attestation attestations = 1; - string cid = 2; + string prover = 2; + bytes merkle = 3; // The merkle root is unique to every file based on its contents. + string owner = 4; + int64 start = 5; // Marks the block height the file started on. } message Collateral { diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index 6b23c72cd..d8ef162b4 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -9,7 +9,6 @@ import "canine_chain/storage/contracts.proto"; import "canine_chain/storage/active_deals.proto"; import "canine_chain/storage/providers.proto"; import "canine_chain/storage/strays.proto"; -import "canine_chain/storage/fid_cid.proto"; import "canine_chain/storage/payment_info.proto"; // this line is used by starport scaffolding # 1 @@ -51,7 +50,7 @@ service Query { // Queries a Attestation by index. rpc Attestation(QueryAttestationRequest) returns (QueryAttestationResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/attestations/{cid}"; + "/jackal-dao/canine-chain/storage/attestations/{prover}/{merkle}/{owner}/{start}"; } // Queries a list of Attestation items. @@ -63,7 +62,7 @@ service Query { // Queries a Report by index. rpc Reports(QueryReportRequest) returns (QueryReportResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/reports/{cid}"; + "/jackal-dao/canine-chain/storage/reports/{prover}/{merkle}/{owner}/{start}"; } // Queries a list of Attestation items. @@ -152,7 +151,11 @@ message QueryParamsResponse { } -message QueryFileRequest { string merkle = 1; } +message QueryFileRequest { + bytes merkle = 1; + string owner = 2; + int64 start = 3; +} message QueryFileResponse { UnifiedFile file = 1 [ (gogoproto.nullable) = false ]; @@ -183,7 +186,12 @@ message QueryAllProvidersResponse { } -message QueryAttestationRequest { string cid = 1; } +message QueryAttestationRequest { + string prover = 1; + bytes merkle = 2; + string owner = 3; + int64 start = 4; +} message QueryAttestationResponse { AttestationForm attestation = 1 [ (gogoproto.nullable) = false ]; @@ -199,7 +207,12 @@ message QueryAllAttestationsResponse { } -message QueryReportRequest { string cid = 1; } +message QueryReportRequest { + string prover = 1; + bytes merkle = 2; + string owner = 3; + int64 start = 4; +} message QueryReportResponse { ReportForm report = 1 [ (gogoproto.nullable) = false ]; @@ -233,9 +246,6 @@ message QueryClientFreeSpaceRequest { string address = 1; } message QueryClientFreeSpaceResponse { int64 bytesfree = 1; } -message QueryFidCidRequest { string fid = 1; } - - message QueryPayDataRequest { string address = 1; } message QueryPayDataResponse { diff --git a/proto/canine_chain/storage/tx.proto b/proto/canine_chain/storage/tx.proto index 54a75916f..208e09004 100644 --- a/proto/canine_chain/storage/tx.proto +++ b/proto/canine_chain/storage/tx.proto @@ -148,38 +148,47 @@ message MsgUpgradeStorageResponse {} message MsgRequestAttestationForm { string creator = 1; - string cid = 2; + bytes merkle = 2; + string owner = 3; + int64 start = 4; } message MsgRequestAttestationFormResponse { repeated string providers = 1; bool success = 2; string error = 3; - string cid = 4; } message MsgAttest { string creator = 1; - string cid = 2; + string prover = 2; + bytes merkle = 3; + string owner = 4; + int64 start = 5; } message MsgAttestResponse {} message MsgRequestReportForm { string creator = 1; - string cid = 2; + string prover = 2; + bytes merkle = 3; + string owner = 4; + int64 start = 5; } message MsgRequestReportFormResponse { repeated string providers = 1; bool success = 2; string error = 3; - string cid = 4; } message MsgReport { string creator = 1; - string cid = 2; + string prover = 2; + bytes merkle = 3; + string owner = 4; + int64 start = 5; } message MsgReportResponse {} diff --git a/x/storage/client/cli/query.go b/x/storage/client/cli/query.go index 0a26089fb..2aaddd205 100644 --- a/x/storage/client/cli/query.go +++ b/x/storage/client/cli/query.go @@ -25,8 +25,6 @@ func GetQueryCmd(_ string) *cobra.Command { } cmd.AddCommand(CmdQueryParams()) - cmd.AddCommand(CmdListContracts()) - cmd.AddCommand(CmdShowContracts()) cmd.AddCommand(CmdListActiveDeals()) cmd.AddCommand(CmdShowActiveDeals()) cmd.AddCommand(CmdListProviders()) @@ -35,12 +33,8 @@ func GetQueryCmd(_ string) *cobra.Command { cmd.AddCommand(CmdFindFile()) - cmd.AddCommand(CmdListStrays()) - cmd.AddCommand(CmdShowStrays()) cmd.AddCommand(CmdGetClientFreeSpace()) - cmd.AddCommand(CmdListFidCid()) - cmd.AddCommand(CmdShowFidCid()) cmd.AddCommand(CmdGetPayData()) cmd.AddCommand(CmdFileUploadCheck()) @@ -57,7 +51,6 @@ func GetQueryCmd(_ string) *cobra.Command { cmd.AddCommand(CmdShowReportForms()) cmd.AddCommand(CmdListActiveProviders()) - // this line is used by starport scaffolding # 1 cmd.AddCommand(CmdGetStorageStats()) return cmd diff --git a/x/storage/client/cli/query_active_deals.go b/x/storage/client/cli/query_active_deals.go index a4836ade1..678b79762 100644 --- a/x/storage/client/cli/query_active_deals.go +++ b/x/storage/client/cli/query_active_deals.go @@ -2,6 +2,8 @@ package cli import ( "context" + "encoding/hex" + "strconv" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -11,8 +13,8 @@ import ( func CmdListActiveDeals() *cobra.Command { cmd := &cobra.Command{ - Use: "list-active-deals", - Short: "list all active_deals", + Use: "files", + Short: "list all files", RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) @@ -23,11 +25,11 @@ func CmdListActiveDeals() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllActiveDealsRequest{ + params := &types.QueryAllFilesRequest{ Pagination: pageReq, } - res, err := queryClient.ActiveDealsAll(context.Background(), params) + res, err := queryClient.FilesAll(context.Background(), params) if err != nil { return err } @@ -44,21 +46,34 @@ func CmdListActiveDeals() *cobra.Command { func CmdShowActiveDeals() *cobra.Command { cmd := &cobra.Command{ - Use: "show-active-deals [cid]", - Short: "shows a active_deals", - Args: cobra.ExactArgs(1), + Use: "file [merkle] [owner] [start]", + Short: "shows a file", + Args: cobra.ExactArgs(3), RunE: func(cmd *cobra.Command, args []string) (err error) { clientCtx := client.GetClientContextFromCmd(cmd) queryClient := types.NewQueryClient(clientCtx) - argCid := args[0] + argMerkle := args[0] + argOwner := args[1] + argStart := args[2] - params := &types.QueryActiveDealRequest{ - Cid: argCid, + start, err := strconv.ParseInt(argStart, 10, 64) + if err != nil { + panic(err) + } + merkle, err := hex.DecodeString(argMerkle) + if err != nil { + panic(err) + } + + params := &types.QueryFileRequest{ + Merkle: merkle, + Start: start, + Owner: argOwner, } - res, err := queryClient.ActiveDeals(context.Background(), params) + res, err := queryClient.File(context.Background(), params) if err != nil { return err } diff --git a/x/storage/client/cli/query_attest.go b/x/storage/client/cli/query_attest.go index fcd795856..333983594 100644 --- a/x/storage/client/cli/query_attest.go +++ b/x/storage/client/cli/query_attest.go @@ -2,6 +2,8 @@ package cli import ( "context" + "encoding/hex" + "strconv" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -44,18 +46,33 @@ func CmdListAttestForms() *cobra.Command { func CmdShowAttestForms() *cobra.Command { cmd := &cobra.Command{ - Use: "show-attest-form [cid]", + Use: "attest-form [prover] [merkle] [owner] [start]", Short: "shows an attest form", - Args: cobra.ExactArgs(1), + Args: cobra.ExactArgs(4), RunE: func(cmd *cobra.Command, args []string) (err error) { clientCtx := client.GetClientContextFromCmd(cmd) queryClient := types.NewQueryClient(clientCtx) - argCid := args[0] + argProver := args[0] + argMerkle := args[1] + argOwner := args[2] + argStart := args[3] + + start, err := strconv.ParseInt(argStart, 10, 64) + if err != nil { + panic(err) + } + merkle, err := hex.DecodeString(argMerkle) + if err != nil { + panic(err) + } params := &types.QueryAttestationRequest{ - Cid: argCid, + Prover: argProver, + Merkle: merkle, + Owner: argOwner, + Start: start, } res, err := queryClient.Attestation(context.Background(), params) @@ -107,18 +124,33 @@ func CmdListReportForms() *cobra.Command { func CmdShowReportForms() *cobra.Command { cmd := &cobra.Command{ - Use: "show-report-form [cid]", + Use: "report-form [prover] [merkle] [owner] [start]", Short: "shows an report form", - Args: cobra.ExactArgs(1), + Args: cobra.ExactArgs(4), RunE: func(cmd *cobra.Command, args []string) (err error) { clientCtx := client.GetClientContextFromCmd(cmd) queryClient := types.NewQueryClient(clientCtx) - argCid := args[0] + argProver := args[1] + argMerkle := args[2] + argOwner := args[3] + argStart := args[4] + + start, err := strconv.ParseInt(argStart, 10, 64) + if err != nil { + panic(err) + } + merkle, err := hex.DecodeString(argMerkle) + if err != nil { + panic(err) + } params := &types.QueryReportRequest{ - Cid: argCid, + Prover: argProver, + Merkle: merkle, + Owner: argOwner, + Start: start, } res, err := queryClient.Reports(context.Background(), params) diff --git a/x/storage/client/cli/tx.go b/x/storage/client/cli/tx.go index 25d6941b1..603905450 100644 --- a/x/storage/client/cli/tx.go +++ b/x/storage/client/cli/tx.go @@ -23,12 +23,8 @@ func GetTxCmd() *cobra.Command { RunE: client.ValidateCmd, } - cmd.AddCommand(CmdPostContract()) - cmd.AddCommand(CmdPostproof()) - cmd.AddCommand(CmdSignContract()) cmd.AddCommand(CmdCancelContract()) cmd.AddCommand(CmdBuyStorage()) - cmd.AddCommand(CmdClaimStray()) cmd.AddCommand(CmdUpgradeStorage()) return cmd diff --git a/x/storage/client/cli/tx_cancel_contract.go b/x/storage/client/cli/tx_cancel_contract.go index b4b394a99..da490ebe7 100644 --- a/x/storage/client/cli/tx_cancel_contract.go +++ b/x/storage/client/cli/tx_cancel_contract.go @@ -1,6 +1,7 @@ package cli import ( + "encoding/hex" "strconv" "github.com/cosmos/cosmos-sdk/client" @@ -14,20 +15,31 @@ var _ = strconv.Itoa(0) func CmdCancelContract() *cobra.Command { cmd := &cobra.Command{ - Use: "cancel-contract [cid]", - Short: "Broadcast message cancel-contract", + Use: "delete-file [merkle] [start]", + Short: "Delete a file on chain", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) (err error) { - argCid := args[0] + argMerkle := args[0] + argStart := args[1] + + start, err := strconv.ParseInt(argStart, 10, 64) + if err != nil { + panic(err) + } + merkle, err := hex.DecodeString(argMerkle) + if err != nil { + panic(err) + } clientCtx, err := client.GetClientTxContext(cmd) if err != nil { return err } - msg := types.NewMsgCancelContract( + msg := types.NewMsgDeleteFile( clientCtx.GetFromAddress().String(), - argCid, + merkle, + start, ) if err := msg.ValidateBasic(); err != nil { return err diff --git a/x/storage/client/cli/tx_post_contract.go b/x/storage/client/cli/tx_post_contract.go deleted file mode 100644 index b03cae60c..000000000 --- a/x/storage/client/cli/tx_post_contract.go +++ /dev/null @@ -1,48 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "github.com/spf13/cobra" -) - -var _ = strconv.Itoa(0) - -func CmdPostContract() *cobra.Command { - cmd := &cobra.Command{ - Use: "post-contract [hashes] [signee] [filesize] [fid]", - Short: "Broadcast message post-contract", - Args: cobra.ExactArgs(4), - RunE: func(cmd *cobra.Command, args []string) (err error) { - argHashes := args[0] - argSignee := args[1] - argFilesize := args[2] - argFid := args[3] - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgPostContract( - clientCtx.GetFromAddress().String(), - argSignee, - argFilesize, - argFid, - argHashes, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/storage/client/cli/tx_postproof.go b/x/storage/client/cli/tx_postproof.go deleted file mode 100644 index e209cd9ff..000000000 --- a/x/storage/client/cli/tx_postproof.go +++ /dev/null @@ -1,45 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "github.com/spf13/cobra" -) - -var _ = strconv.Itoa(0) - -func CmdPostproof() *cobra.Command { - cmd := &cobra.Command{ - Use: "postproof [item] [hashlist]", - Short: "Broadcast message postproof", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) (err error) { - argItem := args[0] - argHashlist := args[1] - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgPostproof( - clientCtx.GetFromAddress().String(), - argItem, - argHashlist, - "", - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/storage/client/cli/tx_sign_contract.go b/x/storage/client/cli/tx_sign_contract.go deleted file mode 100644 index 8b67a3773..000000000 --- a/x/storage/client/cli/tx_sign_contract.go +++ /dev/null @@ -1,52 +0,0 @@ -package cli - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "github.com/spf13/cobra" -) - -var _ = strconv.Itoa(0) - -const FlagPayUpfront = "pay-upfront" - -func CmdSignContract() *cobra.Command { - cmd := &cobra.Command{ - Use: "sign-contract [cid]", - Short: "Broadcast message sign-contract", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - argCid := args[0] - - pay, err := cmd.Flags().GetBool(FlagPayUpfront) - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - msg := types.NewMsgSignContract( - clientCtx.GetFromAddress().String(), - argCid, - pay, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().Bool(FlagPayUpfront, false, "Pay for the contract in advance.") - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} diff --git a/x/storage/keeper/attestations.go b/x/storage/keeper/attestations.go index 54f1af00c..ecf1853d7 100644 --- a/x/storage/keeper/attestations.go +++ b/x/storage/keeper/attestations.go @@ -11,19 +11,28 @@ func (k Keeper) SetAttestationForm(ctx sdk.Context, attestation types.Attestatio store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.AttestationKeyPrefix)) b := k.cdc.MustMarshal(&attestation) store.Set(types.AttestationKey( - attestation.Cid, + attestation.Prover, + attestation.Merkle, + attestation.Owner, + attestation.Start, ), b) } // GetAttestationForm returns an attestation from its index func (k Keeper) GetAttestationForm( ctx sdk.Context, - cid string, + prover string, + merkle []byte, + owner string, + start int64, ) (val types.AttestationForm, found bool) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.AttestationKeyPrefix)) b := store.Get(types.AttestationKey( - cid, + prover, + merkle, + owner, + start, )) if b == nil { return val, false @@ -36,11 +45,18 @@ func (k Keeper) GetAttestationForm( // RemoveAttestation removes an attestation from the store func (k Keeper) RemoveAttestation( ctx sdk.Context, - cid string, + prover string, + merkle []byte, + owner string, + start int64, ) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.AttestationKeyPrefix)) store.Delete(types.AttestationKey( - cid, + + prover, + merkle, + owner, + start, )) } @@ -71,7 +87,10 @@ func (k Keeper) RemoveAllAttestation(ctx sdk.Context) { var val types.AttestationForm k.cdc.MustUnmarshal(iterator.Value(), &val) store.Delete(types.AttestationKey( - val.Cid, + val.Prover, + val.Merkle, + val.Owner, + val.Start, )) } } diff --git a/x/storage/keeper/files.go b/x/storage/keeper/files.go index 47f0c79c5..0437818c3 100644 --- a/x/storage/keeper/files.go +++ b/x/storage/keeper/files.go @@ -87,6 +87,15 @@ func (k Keeper) RemoveFile( owner string, start int64, ) { + file, found := k.GetFile(ctx, merkle, owner, start) + if !found { + return + } + + for _, proof := range file.Proofs { // deleting all the associated proofs too + k.RemoveProofWithBuiltKey(ctx, []byte(proof)) + } + k.removeFilePrimary(ctx, merkle, owner, start) k.removeFileSecondary(ctx, merkle, owner, start) } diff --git a/x/storage/keeper/grpc_query_active_deals.go b/x/storage/keeper/grpc_query_active_deals.go index 70b373bd1..7339af848 100644 --- a/x/storage/keeper/grpc_query_active_deals.go +++ b/x/storage/keeper/grpc_query_active_deals.go @@ -11,19 +11,19 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) ActiveDealsAll(c context.Context, req *types.QueryAllActiveDealsRequest) (*types.QueryAllActiveDealsResponse, error) { +func (k Keeper) FilesAll(c context.Context, req *types.QueryAllFilesRequest) (*types.QueryAllFilesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } - var activeDealss []types.ActiveDeals + var activeDealss []types.UnifiedFile ctx := sdk.UnwrapSDKContext(c) store := ctx.KVStore(k.storeKey) - activeDealsStore := prefix.NewStore(store, types.KeyPrefix(types.ActiveDealsKeyPrefix)) + activeDealsStore := prefix.NewStore(store, types.KeyPrefix(types.FilePrimaryKeyPrefix)) pageRes, err := query.Paginate(activeDealsStore, req.Pagination, func(key []byte, value []byte) error { - var activeDeals types.ActiveDeals + var activeDeals types.UnifiedFile if err := k.cdc.Unmarshal(value, &activeDeals); err != nil { return err } @@ -35,22 +35,24 @@ func (k Keeper) ActiveDealsAll(c context.Context, req *types.QueryAllActiveDeals return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryAllActiveDealsResponse{ActiveDeals: activeDealss, Pagination: pageRes}, nil + return &types.QueryAllFilesResponse{Files: activeDealss, Pagination: pageRes}, nil } -func (k Keeper) ActiveDeals(c context.Context, req *types.QueryActiveDealRequest) (*types.QueryActiveDealResponse, error) { +func (k Keeper) ActiveDeals(c context.Context, req *types.QueryFileRequest) (*types.QueryFileResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } ctx := sdk.UnwrapSDKContext(c) - val, found := k.GetActiveDeals( + val, found := k.GetFile( ctx, - req.Cid, + req.Merkle, + req.Owner, + req.Start, ) if !found { return nil, status.Error(codes.NotFound, "not found") } - return &types.QueryActiveDealResponse{ActiveDeals: val}, nil + return &types.QueryFileResponse{File: val}, nil } diff --git a/x/storage/keeper/grpc_query_attestation.go b/x/storage/keeper/grpc_query_attestation.go index b4c703df2..2f158a739 100644 --- a/x/storage/keeper/grpc_query_attestation.go +++ b/x/storage/keeper/grpc_query_attestation.go @@ -46,7 +46,10 @@ func (k Keeper) Attestation(c context.Context, req *types.QueryAttestationReques val, found := k.GetAttestationForm( ctx, - req.Cid, + req.Prover, + req.Merkle, + req.Owner, + req.Start, ) if !found { return nil, status.Error(codes.NotFound, "not found") diff --git a/x/storage/keeper/grpc_query_report.go b/x/storage/keeper/grpc_query_report.go index f4cf88875..cace1307c 100644 --- a/x/storage/keeper/grpc_query_report.go +++ b/x/storage/keeper/grpc_query_report.go @@ -46,7 +46,10 @@ func (k Keeper) Reports(c context.Context, req *types.QueryReportRequest) (*type val, found := k.GetReportForm( ctx, - req.Cid, + req.Prover, + req.Merkle, + req.Owner, + req.Start, ) if !found { return nil, status.Error(codes.NotFound, "not found") diff --git a/x/storage/keeper/msg_server_attest.go b/x/storage/keeper/msg_server_attest.go index aa86ddda5..f286f5e75 100644 --- a/x/storage/keeper/msg_server_attest.go +++ b/x/storage/keeper/msg_server_attest.go @@ -14,8 +14,8 @@ const ( // TODO: Figure out optimal values for these and replace them with chain True = "true" ) -func (k Keeper) Attest(ctx sdk.Context, cid string, creator string) error { - form, found := k.GetAttestationForm(ctx, cid) +func (k Keeper) Attest(ctx sdk.Context, prover string, merkle []byte, owner string, start int64, creator string) error { + form, found := k.GetAttestationForm(ctx, prover, merkle, owner, start) if !found { return sdkerrors.Wrapf(types.ErrAttestInvalid, "cannot find this attestation") } @@ -46,15 +46,22 @@ func (k Keeper) Attest(ctx sdk.Context, cid string, creator string) error { return nil } - deal, found := k.GetActiveDeals(ctx, cid) + deal, found := k.GetFile(ctx, form.Merkle, form.Owner, form.Start) if !found { return sdkerrors.Wrapf(types.ErrDealNotFound, "cannot find active deal from form") } - deal.Proofverified = True // flip deal to verified if the minimum attestation threshold is met - k.SetActiveDeals(ctx, deal) - k.RemoveAttestation(ctx, cid) + proof, err := deal.GetProver(ctx, k, form.Prover) + if err != nil { + return sdkerrors.Wrapf(err, "can't find proof for attestation") + } + + proof.LastProven = ctx.BlockHeight() + + k.SetProof(ctx, *proof) + + k.RemoveAttestation(ctx, form.Prover, form.Merkle, form.Owner, form.Start) return nil } @@ -62,7 +69,7 @@ func (k Keeper) Attest(ctx sdk.Context, cid string, creator string) error { func (k msgServer) Attest(goCtx context.Context, msg *types.MsgAttest) (*types.MsgAttestResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - err := k.Keeper.Attest(ctx, msg.Cid, msg.Creator) + err := k.Keeper.Attest(ctx, msg.Prover, msg.Merkle, msg.Owner, msg.Start, msg.Creator) if err != nil { ctx.Logger().Debug(err.Error()) } @@ -70,23 +77,23 @@ func (k msgServer) Attest(goCtx context.Context, msg *types.MsgAttest) (*types.M return &types.MsgAttestResponse{}, nil } -func (k Keeper) RequestAttestation(ctx sdk.Context, cid string, creator string) ([]string, error) { - deal, found := k.GetActiveDeals(ctx, cid) +func (k Keeper) RequestAttestation(ctx sdk.Context, merkle []byte, owner string, start int64, creator string) ([]string, error) { + deal, found := k.GetFile(ctx, merkle, owner, start) if !found { return nil, sdkerrors.Wrapf(types.ErrDealNotFound, "cannot find active deal for attestation form") } - if deal.Provider != creator { - return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "you do not own this deal") + _, err := deal.GetProver(ctx, k, creator) + if err != nil { + return nil, sdkerrors.Wrapf(err, "you are not a prover for this file") } - _, found = k.GetAttestationForm(ctx, cid) + _, found = k.GetAttestationForm(ctx, creator, merkle, owner, start) if found { return nil, sdkerrors.Wrapf(types.ErrAttestAlreadyExists, "attestation form already exists") } - dealProvider := deal.Provider - provider, found := k.GetProviders(ctx, dealProvider) + provider, found := k.GetProviders(ctx, creator) if !found { return nil, sdkerrors.Wrapf(types.ErrProviderNotFound, "cannot find provider matching deal") } @@ -117,7 +124,10 @@ func (k Keeper) RequestAttestation(ctx sdk.Context, cid string, creator string) form := types.AttestationForm{ Attestations: attestations, - Cid: cid, + Prover: creator, + Merkle: merkle, + Owner: owner, + Start: start, } k.SetAttestationForm(ctx, form) @@ -127,10 +137,13 @@ func (k Keeper) RequestAttestation(ctx sdk.Context, cid string, creator string) func (k msgServer) RequestAttestationForm(goCtx context.Context, msg *types.MsgRequestAttestationForm) (*types.MsgRequestAttestationFormResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - cid := msg.Cid creator := msg.Creator - providerAddresses, err := k.RequestAttestation(ctx, cid, creator) + merkle := msg.Merkle + owner := msg.Owner + start := msg.Start + + providerAddresses, err := k.RequestAttestation(ctx, merkle, owner, start, creator) success := true @@ -145,6 +158,5 @@ func (k msgServer) RequestAttestationForm(goCtx context.Context, msg *types.MsgR Providers: providerAddresses, Success: success, Error: errorString, - Cid: cid, }, nil } diff --git a/x/storage/keeper/msg_server_cancel_contract.go b/x/storage/keeper/msg_server_cancel_contract.go index 3b826801f..ec7aee86f 100644 --- a/x/storage/keeper/msg_server_cancel_contract.go +++ b/x/storage/keeper/msg_server_cancel_contract.go @@ -2,95 +2,15 @@ package keeper import ( "context" - "encoding/json" - "strconv" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func (k Keeper) CanContract(ctx sdk.Context, root string, creator string) error { - d, dealFound := k.GetActiveDeals(ctx, root) - s, strayFound := k.GetStrays(ctx, root) - - var fileSize int64 - var fid string - var signee string - var err error - - // nolint - if dealFound { - signee = d.Signee - fid = d.Fid - fileSize, err = strconv.ParseInt(d.Filesize, 10, 64) - if err != nil { - return err - } - } else if strayFound { - signee = s.Signee - fid = s.Fid - fileSize, err = strconv.ParseInt(s.Filesize, 10, 64) - if err != nil { - return err - } - } else { - return types.ErrNoCid - } - - if creator != signee { - return sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "cannot cancel a contract that isn't yours. %s is not %s", creator, signee) - } - - k.RemoveStrays(ctx, root) - k.RemoveActiveDeals(ctx, root) - - newFidCid := types.FidCid{ - Fid: fid, - Cids: "", - } - - ftc, found := k.GetFidCid(ctx, fid) // get existing FIDCID Mapping - cids := make([]string, 0) // create new home for CID list - if found { // if found we remove the existing cid from the list - var ncids []string - err := json.Unmarshal([]byte(ftc.Cids), &ncids) // getting all cids from the existing fid_cid - if err != nil { - return err - } - - for _, v := range ncids { // all all cids to the list again if they aren't the root - if v != root { - cids = append(cids, v) - } - } - } - - b, err := json.Marshal(cids) // put em all back - if err != nil { - return err - } - newFidCid.Cids = string(b) - - k.SetFidCid(ctx, newFidCid) - - info, found := k.GetStoragePaymentInfo(ctx, creator) - if !found { - return sdkerrors.Wrapf(sdkerrors.ErrNotFound, "cannot find storage payment") - } - info.SpaceUsed -= fileSize - k.SetStoragePaymentInfo(ctx, info) - - return nil -} - -func (k msgServer) CancelContract(goCtx context.Context, msg *types.MsgCancelContract) (*types.MsgCancelContractResponse, error) { +func (k msgServer) DeleteFile(goCtx context.Context, msg *types.MsgDeleteFile) (*types.MsgDeleteFileResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - root := msg.Cid - - err := k.Keeper.CanContract(ctx, root, msg.Creator) + k.Keeper.RemoveFile(ctx, msg.Merkle, msg.Creator, msg.Start) - return &types.MsgCancelContractResponse{}, err + return &types.MsgDeleteFileResponse{}, nil } diff --git a/x/storage/keeper/msg_server_post_contract.go b/x/storage/keeper/msg_server_post_contract.go index 17787c2db..79352cb9e 100644 --- a/x/storage/keeper/msg_server_post_contract.go +++ b/x/storage/keeper/msg_server_post_contract.go @@ -2,68 +2,16 @@ package keeper import ( "context" - "crypto/sha256" - "fmt" - "io" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func (k msgServer) PostContract(goCtx context.Context, msg *types.MsgPostContract) (*types.MsgPostContractResponse, error) { +// TODO: POST FILE +func (k msgServer) PostFile(goCtx context.Context, msg *types.MsgPostFile) (*types.MsgPostFileResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - provider, ok := k.GetProviders(ctx, msg.Creator) - if !ok { - return nil, fmt.Errorf("can't find provider") - } - - ts, ok := sdk.NewIntFromString(provider.Totalspace) - - if !ok { - return nil, fmt.Errorf("error parsing total space") - } - - fs, ok := sdk.NewIntFromString(msg.Filesize) - - if !ok { - return nil, fmt.Errorf("error parsing file size") - } - - if k.GetProviderUsing(ctx, msg.Creator)+fs.Int64() > ts.Int64() { - return nil, fmt.Errorf("not enough space on provider") - } - - h := sha256.New() - _, err := io.WriteString(h, fmt.Sprintf("%s%s%s", msg.Signee, msg.Creator, msg.Fid)) - if err != nil { - return nil, err - } - hashName := h.Sum(nil) - - cid, err := MakeCid(hashName) - if err != nil { - return nil, err - } - - _, cidtaken := k.GetContracts(ctx, cid) - if cidtaken { - return nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "cannot post the same contract twice") - } - - newContract := types.Contracts{ - Cid: cid, - Signee: msg.Signee, - Fid: msg.Fid, - Filesize: msg.Filesize, - Creator: msg.Creator, - Merkle: msg.Merkle, - Age: ctx.BlockHeight(), - } - - k.SetContracts(ctx, newContract) + _ = ctx - return &types.MsgPostContractResponse{}, nil + return &types.MsgPostFileResponse{}, nil } diff --git a/x/storage/keeper/msg_server_postproof.go b/x/storage/keeper/msg_server_postproof.go index b0dde3acf..12a7a1133 100644 --- a/x/storage/keeper/msg_server_postproof.go +++ b/x/storage/keeper/msg_server_postproof.go @@ -22,12 +22,19 @@ func (k msgServer) PostProof(goCtx context.Context, msg *types.MsgPostProof) (*t prover := msg.Creator - proof, err := file.GetProver(ctx, k, prover) - if err != nil { - return &types.MsgPostProofResponse{Success: false, ErrorMessage: err.Error()}, nil + var proof *types.FileProof + + if len(file.Proofs) == int(file.MaxProofs) { + var err error + proof, err = file.GetProver(ctx, k, prover) + if err != nil { + return &types.MsgPostProofResponse{Success: false, ErrorMessage: err.Error()}, nil + } + } else { + proof = file.AddProver(ctx, k, prover) } - err = file.Prove(ctx, k, msg.Creator, msg.HashList, proof.ChunkToProve, msg.Item, proofSize) + err := file.Prove(ctx, k, msg.Creator, msg.HashList, proof.ChunkToProve, msg.Item, proofSize) if err != nil { ctx.Logger().Debug("%s\n", "Cannot verify") return &types.MsgPostProofResponse{Success: false, ErrorMessage: err.Error()}, nil diff --git a/x/storage/keeper/msg_server_report.go b/x/storage/keeper/msg_server_report.go index b78c5507a..5a49b8cca 100644 --- a/x/storage/keeper/msg_server_report.go +++ b/x/storage/keeper/msg_server_report.go @@ -8,8 +8,8 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func (k Keeper) Report(ctx sdk.Context, cid string, creator string) error { - form, found := k.GetReportForm(ctx, cid) +func (k Keeper) Report(ctx sdk.Context, prover string, merkle []byte, owner string, start int64, creator string) error { + form, found := k.GetReportForm(ctx, prover, merkle, owner, start) if !found { return sdkerrors.Wrapf(types.ErrAttestInvalid, "cannot find this report") } @@ -40,21 +40,22 @@ func (k Keeper) Report(ctx sdk.Context, cid string, creator string) error { return nil } - deal, found := k.GetActiveDeals(ctx, cid) + deal, found := k.GetFile(ctx, merkle, owner, start) if !found { return sdkerrors.Wrapf(types.ErrDealNotFound, "cannot find active deal from form") } - k.RemoveReport(ctx, cid) + k.RemoveReport(ctx, prover, merkle, owner, start) - return k.DropDeal(ctx, deal, true) + deal.RemoveProver(ctx, k, prover) + return nil } func (k msgServer) Report(goCtx context.Context, msg *types.MsgReport) (*types.MsgReportResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - err := k.Keeper.Report(ctx, msg.Cid, msg.Creator) + err := k.Keeper.Report(ctx, msg.Prover, msg.Merkle, msg.Owner, msg.Start, msg.Creator) if err != nil { return nil, err } @@ -62,19 +63,23 @@ func (k msgServer) Report(goCtx context.Context, msg *types.MsgReport) (*types.M return &types.MsgReportResponse{}, nil } -func (k Keeper) RequestReport(ctx sdk.Context, cid string) ([]string, error) { - deal, found := k.GetActiveDeals(ctx, cid) +func (k Keeper) RequestReport(ctx sdk.Context, prover string, merkle []byte, owner string, start int64) ([]string, error) { + deal, found := k.GetFile(ctx, merkle, owner, start) if !found { return nil, sdkerrors.Wrapf(types.ErrDealNotFound, "cannot find active deal for report form") } - _, found = k.GetReportForm(ctx, cid) + _, found = k.GetReportForm(ctx, prover, merkle, owner, start) if found { return nil, sdkerrors.Wrapf(types.ErrAttestAlreadyExists, "report form already exists") } - dealProvider := deal.Provider - provider, found := k.GetProviders(ctx, dealProvider) + _, err := deal.GetProver(ctx, k, prover) + if err != nil { + return nil, sdkerrors.Wrapf(err, "not a provider of this file") + } + + provider, found := k.GetProviders(ctx, prover) if !found { return nil, sdkerrors.Wrapf(types.ErrProviderNotFound, "cannot find provider matching deal") } @@ -103,7 +108,10 @@ func (k Keeper) RequestReport(ctx sdk.Context, cid string) ([]string, error) { form := types.ReportForm{ Attestations: attestations, - Cid: cid, + Prover: prover, + Merkle: merkle, + Owner: owner, + Start: start, } k.SetReportForm(ctx, form) @@ -113,9 +121,8 @@ func (k Keeper) RequestReport(ctx sdk.Context, cid string) ([]string, error) { func (k msgServer) RequestReportForm(goCtx context.Context, msg *types.MsgRequestReportForm) (*types.MsgRequestReportFormResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - cid := msg.Cid - providerAddresses, err := k.RequestReport(ctx, cid) + providerAddresses, err := k.RequestReport(ctx, msg.Prover, msg.Merkle, msg.Owner, msg.Start) success := true @@ -130,6 +137,5 @@ func (k msgServer) RequestReportForm(goCtx context.Context, msg *types.MsgReques Providers: providerAddresses, Success: success, Error: errorString, - Cid: cid, }, nil } diff --git a/x/storage/keeper/reports.go b/x/storage/keeper/reports.go index 20fbee792..7e9171e28 100644 --- a/x/storage/keeper/reports.go +++ b/x/storage/keeper/reports.go @@ -11,19 +11,28 @@ func (k Keeper) SetReportForm(ctx sdk.Context, report types.ReportForm) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ReportKeyPrefix)) b := k.cdc.MustMarshal(&report) store.Set(types.ReportKey( - report.Cid, + report.Prover, + report.Merkle, + report.Owner, + report.Start, ), b) } // GetReportForm returns a report from its index func (k Keeper) GetReportForm( ctx sdk.Context, - cid string, + prover string, + merkle []byte, + owner string, + start int64, ) (val types.ReportForm, found bool) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ReportKeyPrefix)) b := store.Get(types.ReportKey( - cid, + prover, + merkle, + owner, + start, )) if b == nil { return val, false @@ -36,11 +45,17 @@ func (k Keeper) GetReportForm( // RemoveReport removes an attestation from the store func (k Keeper) RemoveReport( ctx sdk.Context, - cid string, + prover string, + merkle []byte, + owner string, + start int64, ) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ReportKeyPrefix)) store.Delete(types.ReportKey( - cid, + prover, + merkle, + owner, + start, )) } diff --git a/x/storage/types/file_deal.go b/x/storage/types/file_deal.go index a6b8cbaac..98e0bea30 100644 --- a/x/storage/types/file_deal.go +++ b/x/storage/types/file_deal.go @@ -36,9 +36,9 @@ func (f *UnifiedFile) VerifyProof(proofData []byte, chunk int64, item string) bo return verified } -func (f *UnifiedFile) AddProver(ctx sdk.Context, k ProofLoader, prover string) bool { +func (f *UnifiedFile) AddProver(ctx sdk.Context, k ProofLoader, prover string) *FileProof { if len(f.Proofs) >= int(f.MaxProofs) { - return false + return nil } pk := f.MakeProofKey(prover) @@ -50,14 +50,14 @@ func (f *UnifiedFile) AddProver(ctx sdk.Context, k ProofLoader, prover string) b Merkle: f.Merkle, Owner: f.Owner, Start: f.Start, - LastProven: 0, + LastProven: ctx.BlockHeight(), ChunkToProve: 0, } k.SetProof(ctx, p) k.SetFile(ctx, *f) - return true + return &p } func (f *UnifiedFile) RemoveProver(ctx sdk.Context, k ProofLoader, prover string) { diff --git a/x/storage/types/key_providers.go b/x/storage/types/key_providers.go index 0bb31dae9..ad5e0b93b 100644 --- a/x/storage/types/key_providers.go +++ b/x/storage/types/key_providers.go @@ -1,6 +1,9 @@ package types -import "encoding/binary" +import ( + "encoding/binary" + "fmt" +) var _ binary.ByteOrder @@ -42,28 +45,22 @@ func ProvidersKey( // AttestationKey returns the store key to retrieve a Providers from the index fields func AttestationKey( - cid string, + prover string, + merkle []byte, + owner string, + start int64, ) []byte { - var key []byte - - cidBytes := []byte(cid) - key = append(key, cidBytes...) - key = append(key, []byte("/")...) - - return key + return []byte(fmt.Sprintf("%s/%x/%s/%d", prover, merkle, owner, start)) } // ReportKey returns the store key to retrieve a Report from the index fields func ReportKey( - cid string, + prover string, + merkle []byte, + owner string, + start int64, ) []byte { - var key []byte - - cidBytes := []byte(cid) - key = append(key, cidBytes...) - key = append(key, []byte("/")...) - - return key + return []byte(fmt.Sprintf("%s/%x/%s/%d", prover, merkle, owner, start)) } // CollateralKey returns the store key to retrieve a Collateral Index from the index fields diff --git a/x/storage/types/message_attest.go b/x/storage/types/message_attest.go index 6d793c357..c6f85d11c 100644 --- a/x/storage/types/message_attest.go +++ b/x/storage/types/message_attest.go @@ -18,10 +18,12 @@ var ( _ sdk.Msg = &MsgAttest{} ) -func NewMsgRequestAttestationForm(creator string, cid string) *MsgRequestAttestationForm { +func NewMsgRequestAttestationForm(creator string, merkle []byte, owner string, start int64) *MsgRequestAttestationForm { return &MsgRequestAttestationForm{ Creator: creator, - Cid: cid, + Merkle: merkle, + Owner: owner, + Start: start, } } @@ -55,20 +57,16 @@ func (msg *MsgRequestAttestationForm) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) } - prefix, _, err = bech32.DecodeAndConvert(msg.Cid) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid (%s)", err) - } - if prefix != CidPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jklc`", prefix)) - } return nil } -func NewMsgAttest(creator string, cid string) *MsgAttest { +func NewMsgAttest(creator string, prover string, merkle []byte, owner string, start int64) *MsgAttest { return &MsgAttest{ Creator: creator, - Cid: cid, + Prover: prover, + Merkle: merkle, + Owner: owner, + Start: start, } } @@ -102,12 +100,5 @@ func (msg *MsgAttest) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) } - prefix, _, err = bech32.DecodeAndConvert(msg.Cid) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid (%s)", err) - } - if prefix != CidPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jklc`", prefix)) - } return nil } diff --git a/x/storage/types/message_report.go b/x/storage/types/message_report.go index 27e6bd111..854465110 100644 --- a/x/storage/types/message_report.go +++ b/x/storage/types/message_report.go @@ -18,10 +18,13 @@ var ( _ sdk.Msg = &MsgReport{} ) -func NewMsgRequestReportForm(creator string, cid string) *MsgRequestReportForm { +func NewMsgRequestReportForm(creator string, prover string, merkle []byte, owner string, start int64) *MsgRequestReportForm { return &MsgRequestReportForm{ Creator: creator, - Cid: cid, + Prover: prover, + Merkle: merkle, + Owner: owner, + Start: start, } } @@ -55,20 +58,16 @@ func (msg *MsgRequestReportForm) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) } - prefix, _, err = bech32.DecodeAndConvert(msg.Cid) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid (%s)", err) - } - if prefix != CidPrefix { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jklc`", prefix)) - } return nil } -func NewMsgReport(creator string, cid string) *MsgReport { +func NewMsgReport(creator string, prover string, merkle []byte, owner string, start int64) *MsgReport { return &MsgReport{ Creator: creator, - Cid: cid, + Prover: prover, + Merkle: merkle, + Owner: owner, + Start: start, } } @@ -102,12 +101,5 @@ func (msg *MsgReport) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) } - prefix, _, err = bech32.DecodeAndConvert(msg.Cid) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid (%s)", err) - } - if prefix != "jklc" { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid cid prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jklc`", prefix)) - } return nil } diff --git a/x/storage/types/providers.pb.go b/x/storage/types/providers.pb.go index e3375c877..95098ddd1 100644 --- a/x/storage/types/providers.pb.go +++ b/x/storage/types/providers.pb.go @@ -212,7 +212,10 @@ func (m *Attestation) GetComplete() bool { type AttestationForm struct { Attestations []*Attestation `protobuf:"bytes,1,rep,name=attestations,proto3" json:"attestations,omitempty"` - Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"` + Prover string `protobuf:"bytes,2,opt,name=prover,proto3" json:"prover,omitempty"` + Merkle []byte `protobuf:"bytes,3,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,5,opt,name=start,proto3" json:"start,omitempty"` } func (m *AttestationForm) Reset() { *m = AttestationForm{} } @@ -255,16 +258,40 @@ func (m *AttestationForm) GetAttestations() []*Attestation { return nil } -func (m *AttestationForm) GetCid() string { +func (m *AttestationForm) GetProver() string { if m != nil { - return m.Cid + return m.Prover } return "" } +func (m *AttestationForm) GetMerkle() []byte { + if m != nil { + return m.Merkle + } + return nil +} + +func (m *AttestationForm) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *AttestationForm) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + type ReportForm struct { Attestations []*Attestation `protobuf:"bytes,1,rep,name=attestations,proto3" json:"attestations,omitempty"` - Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"` + Prover string `protobuf:"bytes,2,opt,name=prover,proto3" json:"prover,omitempty"` + Merkle []byte `protobuf:"bytes,3,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,5,opt,name=start,proto3" json:"start,omitempty"` } func (m *ReportForm) Reset() { *m = ReportForm{} } @@ -307,13 +334,34 @@ func (m *ReportForm) GetAttestations() []*Attestation { return nil } -func (m *ReportForm) GetCid() string { +func (m *ReportForm) GetProver() string { if m != nil { - return m.Cid + return m.Prover } return "" } +func (m *ReportForm) GetMerkle() []byte { + if m != nil { + return m.Merkle + } + return nil +} + +func (m *ReportForm) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *ReportForm) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + type Collateral struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` @@ -380,33 +428,36 @@ func init() { } var fileDescriptor_bf0b782528f3c2f0 = []byte{ - // 415 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x92, 0x41, 0x6f, 0xd3, 0x40, - 0x10, 0x85, 0xe3, 0x18, 0xd2, 0x66, 0x5a, 0x48, 0xb5, 0x42, 0xc8, 0xe2, 0x60, 0x15, 0xc3, 0x21, - 0x08, 0xe1, 0x48, 0xe5, 0x8e, 0x54, 0xa2, 0x22, 0x21, 0xf5, 0x80, 0x7c, 0xe4, 0x12, 0x8d, 0xd7, - 0xa3, 0x66, 0x5b, 0xdb, 0xbb, 0xda, 0x9d, 0x54, 0xe4, 0x5f, 0xf0, 0xb3, 0x38, 0xf6, 0xc8, 0x11, - 0x25, 0x37, 0x7e, 0x05, 0xb2, 0xbd, 0x09, 0x46, 0x42, 0x88, 0x4b, 0x6f, 0x7e, 0x9f, 0xdf, 0xcc, - 0xb3, 0x77, 0x1f, 0xbc, 0x94, 0x58, 0xab, 0x9a, 0x16, 0x72, 0x89, 0xaa, 0x9e, 0x39, 0xd6, 0x16, - 0xaf, 0x68, 0x66, 0xac, 0xbe, 0x55, 0x05, 0x59, 0x97, 0x1a, 0xab, 0x59, 0x8b, 0x27, 0x7d, 0x57, - 0xea, 0x5d, 0xc9, 0xcf, 0x00, 0xc6, 0x9f, 0x76, 0x4e, 0x11, 0xc1, 0x01, 0x16, 0x85, 0x25, 0xe7, - 0xa2, 0xe0, 0x34, 0x98, 0x8e, 0xb3, 0x9d, 0x14, 0x8f, 0x61, 0xa8, 0x4c, 0x34, 0x6c, 0xe1, 0x50, - 0x19, 0x11, 0x03, 0xb0, 0x66, 0x2c, 0x9d, 0x41, 0x49, 0x51, 0xd8, 0xf2, 0x1e, 0x11, 0xaf, 0xe0, - 0x24, 0x5f, 0xd9, 0x9a, 0x8a, 0x85, 0xd4, 0x35, 0x5b, 0x94, 0xec, 0xa2, 0x07, 0xad, 0x6b, 0xd2, - 0xf1, 0xf9, 0x0e, 0x37, 0xa1, 0xd2, 0x12, 0xb2, 0xb6, 0xd1, 0xc3, 0x2e, 0xd4, 0xcb, 0x66, 0xc9, - 0x0d, 0xad, 0x73, 0x74, 0xb4, 0x50, 0x05, 0xd5, 0xac, 0x78, 0x1d, 0x8d, 0xba, 0x25, 0x9e, 0x7f, - 0xf4, 0x58, 0xbc, 0x80, 0x47, 0xb8, 0xe2, 0xe5, 0x42, 0x96, 0xa8, 0x2a, 0xb2, 0x2e, 0x3a, 0x38, - 0x0d, 0xa7, 0xe3, 0xec, 0xb8, 0x81, 0x73, 0xcf, 0x92, 0xd7, 0x30, 0x39, 0x97, 0xac, 0x6e, 0xe9, - 0x3f, 0xfe, 0x38, 0xb9, 0x80, 0xa3, 0x73, 0x66, 0x72, 0x8c, 0xac, 0x74, 0x2d, 0x9e, 0xc1, 0xe1, - 0xee, 0x44, 0xbd, 0x73, 0xaf, 0x9b, 0x77, 0x52, 0x57, 0xa6, 0x24, 0xa6, 0xf6, 0x88, 0x0e, 0xb3, - 0xbd, 0x4e, 0xae, 0x61, 0xd2, 0x5b, 0xf3, 0x41, 0xdb, 0x4a, 0x5c, 0xc0, 0x31, 0xfe, 0x46, 0x4d, - 0x70, 0x38, 0x3d, 0x3a, 0x7b, 0x9e, 0xfe, 0xed, 0x82, 0xd2, 0xde, 0x70, 0xf6, 0xc7, 0x98, 0x38, - 0x81, 0x50, 0xaa, 0xc2, 0xdf, 0x49, 0xf3, 0x98, 0x10, 0x40, 0x46, 0x46, 0x5b, 0xbe, 0xdf, 0x98, - 0x77, 0x00, 0x73, 0x5d, 0x96, 0xc8, 0x64, 0xb1, 0xfc, 0x47, 0x67, 0x9e, 0xc2, 0x08, 0x2b, 0xbd, - 0xaa, 0xb9, 0x1d, 0x0e, 0x33, 0xaf, 0xde, 0x5f, 0x7e, 0xdb, 0xc4, 0xc1, 0xdd, 0x26, 0x0e, 0x7e, - 0x6c, 0xe2, 0xe0, 0xeb, 0x36, 0x1e, 0xdc, 0x6d, 0xe3, 0xc1, 0xf7, 0x6d, 0x3c, 0xf8, 0x7c, 0x76, - 0xa5, 0x78, 0xb9, 0xca, 0x53, 0xa9, 0xab, 0xd9, 0x35, 0xca, 0x1b, 0x2c, 0x2f, 0x31, 0x77, 0xb3, - 0xee, 0x8b, 0xdf, 0x74, 0xfd, 0xfe, 0xb2, 0x6f, 0x38, 0xaf, 0x0d, 0xb9, 0x7c, 0xd4, 0xd6, 0xfb, - 0xed, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8a, 0x3a, 0x9d, 0x38, 0x06, 0x03, 0x00, 0x00, + // 450 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x93, 0xcf, 0x6e, 0xd3, 0x40, + 0x10, 0xc6, 0xe3, 0x84, 0xa6, 0xcd, 0x34, 0x10, 0xb4, 0xaa, 0x2a, 0x8b, 0x83, 0x55, 0x0c, 0x87, + 0x20, 0x84, 0x23, 0x95, 0x3b, 0x52, 0x89, 0x8a, 0x84, 0xd4, 0x03, 0xf2, 0x91, 0x4b, 0x34, 0x5e, + 0x8f, 0x9a, 0x25, 0xf6, 0xae, 0xb5, 0x3b, 0x29, 0xe4, 0x2d, 0x78, 0x13, 0x2e, 0x3c, 0x04, 0xc7, + 0x1e, 0x39, 0xa2, 0xe4, 0xc6, 0x53, 0x20, 0xdb, 0x9b, 0x10, 0x24, 0x84, 0xb8, 0xf6, 0xf8, 0xfd, + 0xfc, 0xed, 0xfc, 0xf5, 0xc0, 0x53, 0x89, 0x5a, 0x69, 0x9a, 0xc9, 0x39, 0x2a, 0x3d, 0x71, 0x6c, + 0x2c, 0x5e, 0xd3, 0xa4, 0xb2, 0xe6, 0x46, 0xe5, 0x64, 0x5d, 0x52, 0x59, 0xc3, 0x46, 0x9c, 0xec, + 0xbb, 0x12, 0xef, 0x8a, 0x7f, 0x06, 0x30, 0x78, 0xb7, 0x75, 0x8a, 0x10, 0x0e, 0x31, 0xcf, 0x2d, + 0x39, 0x17, 0x06, 0x67, 0xc1, 0x78, 0x90, 0x6e, 0xa5, 0x78, 0x00, 0x5d, 0x55, 0x85, 0xdd, 0x06, + 0x76, 0x55, 0x25, 0x22, 0x00, 0x36, 0x8c, 0x85, 0xab, 0x50, 0x52, 0xd8, 0x6b, 0xf8, 0x1e, 0x11, + 0xcf, 0xe0, 0x61, 0xb6, 0xb4, 0x9a, 0xf2, 0x99, 0x34, 0x9a, 0x2d, 0x4a, 0x76, 0xe1, 0xbd, 0xc6, + 0x35, 0x6a, 0xf9, 0x74, 0x8b, 0xeb, 0xa4, 0xd2, 0x12, 0xb2, 0xb1, 0xe1, 0x41, 0x9b, 0xd4, 0xcb, + 0x3a, 0xc8, 0x82, 0x56, 0x19, 0x3a, 0x9a, 0xa9, 0x9c, 0x34, 0x2b, 0x5e, 0x85, 0xfd, 0x36, 0x88, + 0xe7, 0x6f, 0x3d, 0x16, 0x4f, 0xe0, 0x3e, 0x2e, 0x79, 0x3e, 0x93, 0x05, 0xaa, 0x92, 0xac, 0x0b, + 0x0f, 0xcf, 0x7a, 0xe3, 0x41, 0x3a, 0xac, 0xe1, 0xd4, 0xb3, 0xf8, 0x39, 0x8c, 0x2e, 0x24, 0xab, + 0x1b, 0xfa, 0x8f, 0x8e, 0xe3, 0x4b, 0x38, 0xbe, 0x60, 0x26, 0xc7, 0xc8, 0xca, 0x68, 0xf1, 0x08, + 0x8e, 0xb6, 0x13, 0xf5, 0xce, 0x9d, 0xae, 0xbf, 0x49, 0x53, 0x56, 0x05, 0x31, 0x35, 0x23, 0x3a, + 0x4a, 0x77, 0x3a, 0xfe, 0x1a, 0xc0, 0x68, 0x2f, 0xce, 0x1b, 0x63, 0x4b, 0x71, 0x09, 0x43, 0xfc, + 0x8d, 0xea, 0xcc, 0xbd, 0xf1, 0xf1, 0xf9, 0xe3, 0xe4, 0x6f, 0x1b, 0x4a, 0xf6, 0x1e, 0xa7, 0x7f, + 0x3c, 0x13, 0xa7, 0xd0, 0xaf, 0x4b, 0x20, 0xeb, 0xf7, 0xe2, 0x55, 0xcd, 0x4b, 0xb2, 0x8b, 0xa2, + 0xdd, 0xcb, 0x30, 0xf5, 0x4a, 0x9c, 0xc0, 0x81, 0xf9, 0xa8, 0xc9, 0xfa, 0x45, 0xb4, 0xa2, 0xa6, + 0x8e, 0xd1, 0x72, 0x33, 0xfc, 0x5e, 0xda, 0x8a, 0xf8, 0x4b, 0x00, 0x90, 0x52, 0x65, 0x2c, 0xdf, + 0x95, 0x8a, 0x5f, 0x01, 0x4c, 0x4d, 0x51, 0x20, 0x93, 0xc5, 0xe2, 0x1f, 0x7f, 0xf2, 0x29, 0xf4, + 0xb1, 0x34, 0x4b, 0xcd, 0x4d, 0x0d, 0xbd, 0xd4, 0xab, 0xd7, 0x57, 0xdf, 0xd6, 0x51, 0x70, 0xbb, + 0x8e, 0x82, 0x1f, 0xeb, 0x28, 0xf8, 0xbc, 0x89, 0x3a, 0xb7, 0x9b, 0xa8, 0xf3, 0x7d, 0x13, 0x75, + 0xde, 0x9f, 0x5f, 0x2b, 0x9e, 0x2f, 0xb3, 0x44, 0x9a, 0x72, 0xf2, 0x01, 0xe5, 0x02, 0x8b, 0x2b, + 0xcc, 0xdc, 0xa4, 0xed, 0xfd, 0x45, 0x7b, 0x75, 0x9f, 0x76, 0x77, 0xc7, 0xab, 0x8a, 0x5c, 0xd6, + 0x6f, 0x8e, 0xee, 0xe5, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x23, 0x5e, 0x97, 0x8f, 0x9c, 0x03, + 0x00, 0x00, } func (m *Providers) Marshal() (dAtA []byte, err error) { @@ -573,10 +624,29 @@ func (m *AttestationForm) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintProviders(dAtA, i, uint64(len(m.Cid))) + if m.Start != 0 { + i = encodeVarintProviders(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x28 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintProviders(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x22 + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintProviders(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x1a + } + if len(m.Prover) > 0 { + i -= len(m.Prover) + copy(dAtA[i:], m.Prover) + i = encodeVarintProviders(dAtA, i, uint64(len(m.Prover))) i-- dAtA[i] = 0x12 } @@ -617,10 +687,29 @@ func (m *ReportForm) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintProviders(dAtA, i, uint64(len(m.Cid))) + if m.Start != 0 { + i = encodeVarintProviders(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x28 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintProviders(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x22 + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintProviders(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x1a + } + if len(m.Prover) > 0 { + i -= len(m.Prover) + copy(dAtA[i:], m.Prover) + i = encodeVarintProviders(dAtA, i, uint64(len(m.Prover))) i-- dAtA[i] = 0x12 } @@ -767,10 +856,21 @@ func (m *AttestationForm) Size() (n int) { n += 1 + l + sovProviders(uint64(l)) } } - l = len(m.Cid) + l = len(m.Prover) + if l > 0 { + n += 1 + l + sovProviders(uint64(l)) + } + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovProviders(uint64(l)) + } + l = len(m.Owner) if l > 0 { n += 1 + l + sovProviders(uint64(l)) } + if m.Start != 0 { + n += 1 + sovProviders(uint64(m.Start)) + } return n } @@ -786,10 +886,21 @@ func (m *ReportForm) Size() (n int) { n += 1 + l + sovProviders(uint64(l)) } } - l = len(m.Cid) + l = len(m.Prover) if l > 0 { n += 1 + l + sovProviders(uint64(l)) } + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovProviders(uint64(l)) + } + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovProviders(uint64(l)) + } + if m.Start != 0 { + n += 1 + sovProviders(uint64(m.Start)) + } return n } @@ -1338,7 +1449,73 @@ func (m *AttestationForm) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Prover", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProviders + } + 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 ErrInvalidLengthProviders + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthProviders + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Prover = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProviders + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthProviders + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthProviders + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1366,8 +1543,27 @@ func (m *AttestationForm) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProviders + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipProviders(dAtA[iNdEx:]) @@ -1454,7 +1650,73 @@ func (m *ReportForm) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Prover", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProviders + } + 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 ErrInvalidLengthProviders + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthProviders + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Prover = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProviders + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthProviders + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthProviders + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1482,8 +1744,27 @@ func (m *ReportForm) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProviders + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipProviders(dAtA[iNdEx:]) diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index a24d59640..b1eda5a72 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -115,7 +115,9 @@ func (m *QueryParamsResponse) GetParams() Params { } type QueryFileRequest struct { - Merkle string `protobuf:"bytes,1,opt,name=merkle,proto3" json:"merkle,omitempty"` + Merkle []byte `protobuf:"bytes,1,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,3,opt,name=start,proto3" json:"start,omitempty"` } func (m *QueryFileRequest) Reset() { *m = QueryFileRequest{} } @@ -151,13 +153,27 @@ func (m *QueryFileRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryFileRequest proto.InternalMessageInfo -func (m *QueryFileRequest) GetMerkle() string { +func (m *QueryFileRequest) GetMerkle() []byte { if m != nil { return m.Merkle } + return nil +} + +func (m *QueryFileRequest) GetOwner() string { + if m != nil { + return m.Owner + } return "" } +func (m *QueryFileRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + type QueryFileResponse struct { File UnifiedFile `protobuf:"bytes,1,opt,name=file,proto3" json:"file"` } @@ -483,7 +499,10 @@ func (m *QueryAllProvidersResponse) GetPagination() *query.PageResponse { } type QueryAttestationRequest struct { - Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` + Prover string `protobuf:"bytes,1,opt,name=prover,proto3" json:"prover,omitempty"` + Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` } func (m *QueryAttestationRequest) Reset() { *m = QueryAttestationRequest{} } @@ -519,13 +538,34 @@ func (m *QueryAttestationRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryAttestationRequest proto.InternalMessageInfo -func (m *QueryAttestationRequest) GetCid() string { +func (m *QueryAttestationRequest) GetProver() string { + if m != nil { + return m.Prover + } + return "" +} + +func (m *QueryAttestationRequest) GetMerkle() []byte { if m != nil { - return m.Cid + return m.Merkle + } + return nil +} + +func (m *QueryAttestationRequest) GetOwner() string { + if m != nil { + return m.Owner } return "" } +func (m *QueryAttestationRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + type QueryAttestationResponse struct { Attestation AttestationForm `protobuf:"bytes,1,opt,name=attestation,proto3" json:"attestation"` } @@ -667,7 +707,10 @@ func (m *QueryAllAttestationsResponse) GetPagination() *query.PageResponse { } type QueryReportRequest struct { - Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` + Prover string `protobuf:"bytes,1,opt,name=prover,proto3" json:"prover,omitempty"` + Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` } func (m *QueryReportRequest) Reset() { *m = QueryReportRequest{} } @@ -703,13 +746,34 @@ func (m *QueryReportRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryReportRequest proto.InternalMessageInfo -func (m *QueryReportRequest) GetCid() string { +func (m *QueryReportRequest) GetProver() string { if m != nil { - return m.Cid + return m.Prover } return "" } +func (m *QueryReportRequest) GetMerkle() []byte { + if m != nil { + return m.Merkle + } + return nil +} + +func (m *QueryReportRequest) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *QueryReportRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + type QueryReportResponse struct { Report ReportForm `protobuf:"bytes,1,opt,name=report,proto3" json:"report"` } @@ -1202,50 +1266,6 @@ func (m *QueryClientFreeSpaceResponse) GetBytesfree() int64 { return 0 } -type QueryFidCidRequest struct { - Fid string `protobuf:"bytes,1,opt,name=fid,proto3" json:"fid,omitempty"` -} - -func (m *QueryFidCidRequest) Reset() { *m = QueryFidCidRequest{} } -func (m *QueryFidCidRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFidCidRequest) ProtoMessage() {} -func (*QueryFidCidRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{26} -} -func (m *QueryFidCidRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryFidCidRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryFidCidRequest.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 *QueryFidCidRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFidCidRequest.Merge(m, src) -} -func (m *QueryFidCidRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryFidCidRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFidCidRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryFidCidRequest proto.InternalMessageInfo - -func (m *QueryFidCidRequest) GetFid() string { - if m != nil { - return m.Fid - } - return "" -} - type QueryPayDataRequest struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } @@ -1254,7 +1274,7 @@ func (m *QueryPayDataRequest) Reset() { *m = QueryPayDataRequest{} } func (m *QueryPayDataRequest) String() string { return proto.CompactTextString(m) } func (*QueryPayDataRequest) ProtoMessage() {} func (*QueryPayDataRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{27} + return fileDescriptor_9fe03bff51a37284, []int{26} } func (m *QueryPayDataRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1299,7 +1319,7 @@ func (m *QueryPayDataResponse) Reset() { *m = QueryPayDataResponse{} } func (m *QueryPayDataResponse) String() string { return proto.CompactTextString(m) } func (*QueryPayDataResponse) ProtoMessage() {} func (*QueryPayDataResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{28} + return fileDescriptor_9fe03bff51a37284, []int{27} } func (m *QueryPayDataResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1350,7 +1370,7 @@ func (m *QueryStoragePaymentInfoRequest) Reset() { *m = QueryStoragePaym func (m *QueryStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryStoragePaymentInfoRequest) ProtoMessage() {} func (*QueryStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{29} + return fileDescriptor_9fe03bff51a37284, []int{28} } func (m *QueryStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1394,7 +1414,7 @@ func (m *QueryStoragePaymentInfoResponse) Reset() { *m = QueryStoragePay func (m *QueryStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryStoragePaymentInfoResponse) ProtoMessage() {} func (*QueryStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{30} + return fileDescriptor_9fe03bff51a37284, []int{29} } func (m *QueryStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1438,7 +1458,7 @@ func (m *QueryAllStoragePaymentInfoRequest) Reset() { *m = QueryAllStora func (m *QueryAllStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllStoragePaymentInfoRequest) ProtoMessage() {} func (*QueryAllStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{31} + return fileDescriptor_9fe03bff51a37284, []int{30} } func (m *QueryAllStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1483,7 +1503,7 @@ func (m *QueryAllStoragePaymentInfoResponse) Reset() { *m = QueryAllStor func (m *QueryAllStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllStoragePaymentInfoResponse) ProtoMessage() {} func (*QueryAllStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{32} + return fileDescriptor_9fe03bff51a37284, []int{31} } func (m *QueryAllStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1535,7 +1555,7 @@ func (m *QueryFileUploadCheckRequest) Reset() { *m = QueryFileUploadChec func (m *QueryFileUploadCheckRequest) String() string { return proto.CompactTextString(m) } func (*QueryFileUploadCheckRequest) ProtoMessage() {} func (*QueryFileUploadCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{33} + return fileDescriptor_9fe03bff51a37284, []int{32} } func (m *QueryFileUploadCheckRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1586,7 +1606,7 @@ func (m *QueryFileUploadCheckResponse) Reset() { *m = QueryFileUploadChe func (m *QueryFileUploadCheckResponse) String() string { return proto.CompactTextString(m) } func (*QueryFileUploadCheckResponse) ProtoMessage() {} func (*QueryFileUploadCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{34} + return fileDescriptor_9fe03bff51a37284, []int{33} } func (m *QueryFileUploadCheckResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1631,7 +1651,7 @@ func (m *QueryPriceCheckRequest) Reset() { *m = QueryPriceCheckRequest{} func (m *QueryPriceCheckRequest) String() string { return proto.CompactTextString(m) } func (*QueryPriceCheckRequest) ProtoMessage() {} func (*QueryPriceCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{35} + return fileDescriptor_9fe03bff51a37284, []int{34} } func (m *QueryPriceCheckRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1682,7 +1702,7 @@ func (m *QueryPriceCheckResponse) Reset() { *m = QueryPriceCheckResponse func (m *QueryPriceCheckResponse) String() string { return proto.CompactTextString(m) } func (*QueryPriceCheckResponse) ProtoMessage() {} func (*QueryPriceCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{36} + return fileDescriptor_9fe03bff51a37284, []int{35} } func (m *QueryPriceCheckResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1725,7 +1745,7 @@ func (m *QueryActiveProvidersRequest) Reset() { *m = QueryActiveProvider func (m *QueryActiveProvidersRequest) String() string { return proto.CompactTextString(m) } func (*QueryActiveProvidersRequest) ProtoMessage() {} func (*QueryActiveProvidersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{37} + return fileDescriptor_9fe03bff51a37284, []int{36} } func (m *QueryActiveProvidersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1762,7 +1782,7 @@ func (m *QueryActiveProvidersResponse) Reset() { *m = QueryActiveProvide func (m *QueryActiveProvidersResponse) String() string { return proto.CompactTextString(m) } func (*QueryActiveProvidersResponse) ProtoMessage() {} func (*QueryActiveProvidersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{38} + return fileDescriptor_9fe03bff51a37284, []int{37} } func (m *QueryActiveProvidersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1805,7 +1825,7 @@ func (m *QueryStorageStatsRequest) Reset() { *m = QueryStorageStatsReque func (m *QueryStorageStatsRequest) String() string { return proto.CompactTextString(m) } func (*QueryStorageStatsRequest) ProtoMessage() {} func (*QueryStorageStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{39} + return fileDescriptor_9fe03bff51a37284, []int{38} } func (m *QueryStorageStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1845,7 +1865,7 @@ func (m *QueryStorageStatsResponse) Reset() { *m = QueryStorageStatsResp func (m *QueryStorageStatsResponse) String() string { return proto.CompactTextString(m) } func (*QueryStorageStatsResponse) ProtoMessage() {} func (*QueryStorageStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{40} + return fileDescriptor_9fe03bff51a37284, []int{39} } func (m *QueryStorageStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1922,7 +1942,6 @@ func init() { proto.RegisterType((*QueryFindFileResponse)(nil), "canine_chain.storage.QueryFindFileResponse") proto.RegisterType((*QueryClientFreeSpaceRequest)(nil), "canine_chain.storage.QueryClientFreeSpaceRequest") proto.RegisterType((*QueryClientFreeSpaceResponse)(nil), "canine_chain.storage.QueryClientFreeSpaceResponse") - proto.RegisterType((*QueryFidCidRequest)(nil), "canine_chain.storage.QueryFidCidRequest") proto.RegisterType((*QueryPayDataRequest)(nil), "canine_chain.storage.QueryPayDataRequest") proto.RegisterType((*QueryPayDataResponse)(nil), "canine_chain.storage.QueryPayDataResponse") proto.RegisterType((*QueryStoragePaymentInfoRequest)(nil), "canine_chain.storage.QueryStoragePaymentInfoRequest") @@ -1942,120 +1961,123 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 1796 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xcd, 0x6f, 0xdc, 0x54, - 0x10, 0x8f, 0xbb, 0x69, 0xda, 0x4c, 0x02, 0x2d, 0x8f, 0xb4, 0x84, 0x25, 0xe4, 0xc3, 0xa2, 0x49, - 0x9a, 0x36, 0x76, 0xb2, 0x4d, 0x9b, 0x36, 0x2d, 0xb4, 0x4d, 0xaa, 0x84, 0xa2, 0x56, 0xa4, 0x1b, - 0xe5, 0x82, 0x10, 0xcb, 0x8b, 0xfd, 0x76, 0x63, 0xb2, 0x6b, 0xbb, 0xb6, 0x37, 0x22, 0x8a, 0x72, - 0x81, 0x3b, 0xaa, 0x54, 0x09, 0x89, 0x03, 0x42, 0xa2, 0x45, 0xa8, 0x27, 0x24, 0xe0, 0xc0, 0x85, - 0x03, 0x48, 0x48, 0xbd, 0x51, 0xc1, 0x05, 0x71, 0xa8, 0x50, 0xcb, 0x1f, 0x82, 0xfc, 0x3c, 0x6f, - 0xed, 0xdd, 0xf5, 0xda, 0xbb, 0x68, 0x4f, 0x59, 0x3f, 0xcf, 0xc7, 0x6f, 0xe6, 0xcd, 0x8c, 0xe7, - 0xd7, 0xc2, 0xb8, 0x46, 0x4d, 0xc3, 0x64, 0x05, 0x6d, 0x9b, 0x1a, 0xa6, 0xea, 0x7a, 0x96, 0x43, - 0x4b, 0x4c, 0xbd, 0x5b, 0x65, 0xce, 0x9e, 0x62, 0x3b, 0x96, 0x67, 0x91, 0xa1, 0xa8, 0x84, 0x82, - 0x12, 0xd9, 0xa1, 0x92, 0x55, 0xb2, 0xb8, 0x80, 0xea, 0xff, 0x0a, 0x64, 0xb3, 0x23, 0x25, 0xcb, - 0x2a, 0x95, 0x99, 0x4a, 0x6d, 0x43, 0xa5, 0xa6, 0x69, 0x79, 0xd4, 0x33, 0x2c, 0xd3, 0xc5, 0xb7, - 0x33, 0x9a, 0xe5, 0x56, 0x2c, 0x57, 0xdd, 0xa2, 0x2e, 0xba, 0x50, 0x77, 0xe7, 0xb7, 0x98, 0x47, - 0xe7, 0x55, 0x9b, 0x96, 0x0c, 0x93, 0x0b, 0xa3, 0xec, 0x44, 0x2c, 0x2e, 0x9b, 0x3a, 0xb4, 0x22, - 0xcc, 0xbd, 0x11, 0x2b, 0xa2, 0x59, 0xa6, 0xe7, 0x50, 0xcd, 0x13, 0x52, 0x53, 0xb1, 0x52, 0x54, - 0xf3, 0x8c, 0x5d, 0x56, 0xd0, 0x19, 0x2d, 0x27, 0x9b, 0xb3, 0x1d, 0x6b, 0xd7, 0xd0, 0x99, 0xe3, - 0x26, 0xe2, 0x72, 0x3d, 0x87, 0xee, 0x09, 0x11, 0x39, 0x56, 0xa4, 0x68, 0xe8, 0x05, 0xcd, 0xd0, - 0x13, 0x51, 0xd9, 0x74, 0xaf, 0xc2, 0x4c, 0xaf, 0x60, 0x98, 0x45, 0xcc, 0xa8, 0x3c, 0x04, 0xe4, - 0x8e, 0x9f, 0xa9, 0x75, 0x1e, 0x79, 0x9e, 0xdd, 0xad, 0x32, 0xd7, 0x93, 0xef, 0xc0, 0xcb, 0x75, - 0xa7, 0xae, 0x6d, 0x99, 0x2e, 0x23, 0x4b, 0xd0, 0x17, 0x64, 0x68, 0x58, 0x1a, 0x97, 0xa6, 0x07, - 0x72, 0x23, 0x4a, 0xdc, 0xdd, 0x29, 0x81, 0xd6, 0x72, 0xef, 0xe3, 0xa7, 0x63, 0x3d, 0x79, 0xd4, - 0x90, 0x67, 0xe0, 0x38, 0x37, 0xb9, 0x6a, 0x94, 0x19, 0xba, 0x21, 0x27, 0xa1, 0xaf, 0xc2, 0x9c, - 0x9d, 0x32, 0xe3, 0xf6, 0xfa, 0xf3, 0xf8, 0x24, 0xaf, 0xc3, 0x4b, 0x11, 0x59, 0x74, 0x7e, 0x19, - 0x7a, 0x8b, 0x06, 0x8a, 0x0e, 0xe4, 0x26, 0xe2, 0x5d, 0x6f, 0x9a, 0x46, 0xd1, 0x60, 0xba, 0xaf, - 0x88, 0xfe, 0xb9, 0x92, 0xfc, 0x01, 0x0c, 0x71, 0x8b, 0xd7, 0xcb, 0x65, 0xff, 0x9d, 0x08, 0x94, - 0xac, 0x02, 0x84, 0xa5, 0x81, 0xa6, 0x27, 0x95, 0xa0, 0x8e, 0x14, 0xbf, 0x8e, 0x94, 0xa0, 0x54, - 0xb1, 0x8e, 0x94, 0x75, 0x5a, 0x12, 0xe8, 0xf3, 0x11, 0x4d, 0xf9, 0x2b, 0x09, 0x4e, 0x34, 0x38, - 0x40, 0xd8, 0x6f, 0xc2, 0x61, 0x1f, 0x81, 0x9f, 0xb2, 0x4c, 0x27, 0xb8, 0x03, 0x2d, 0xb2, 0x56, - 0x07, 0xf0, 0x10, 0x07, 0x38, 0x95, 0x0a, 0x30, 0xf0, 0x5d, 0x87, 0x70, 0x0e, 0x33, 0xb0, 0x8e, - 0x05, 0x27, 0x32, 0x30, 0x0c, 0x47, 0xa8, 0xae, 0x3b, 0xcc, 0x75, 0xf1, 0x12, 0xc4, 0xa3, 0xfc, - 0x3e, 0x86, 0x14, 0x6a, 0x60, 0x48, 0x2b, 0xd0, 0x5f, 0x2b, 0x5b, 0xcc, 0xd9, 0x58, 0x8b, 0x4a, - 0x10, 0x62, 0x18, 0x54, 0xa8, 0x27, 0x6f, 0xc1, 0xb0, 0x48, 0x58, 0x4d, 0xaa, 0xdb, 0xb7, 0xf2, - 0x48, 0x82, 0x57, 0x63, 0x9c, 0xc4, 0x87, 0x91, 0xf9, 0x3f, 0x61, 0x74, 0xef, 0x7e, 0xce, 0xc0, - 0x2b, 0x01, 0x54, 0xcf, 0x63, 0x6e, 0x30, 0xd7, 0x44, 0x3a, 0x8e, 0x43, 0x46, 0x33, 0x74, 0xbc, - 0x1e, 0xff, 0xa7, 0x6c, 0x88, 0xe4, 0x45, 0x85, 0x31, 0xac, 0xdb, 0x30, 0x40, 0xc3, 0x63, 0xcc, - 0xde, 0xa9, 0xf8, 0xc0, 0x22, 0xfa, 0xab, 0x96, 0x53, 0xc1, 0xf0, 0xa2, 0xfa, 0x32, 0x83, 0xd7, - 0x44, 0x0a, 0x23, 0xd2, 0x5d, 0xbf, 0xaa, 0x9f, 0x24, 0x18, 0x89, 0xf7, 0x83, 0x61, 0xbd, 0x0b, - 0x83, 0x11, 0x58, 0xe2, 0xc2, 0x3a, 0x8a, 0xab, 0xce, 0x40, 0xf7, 0x6e, 0x6e, 0x12, 0x47, 0x68, - 0x9e, 0xd9, 0x96, 0xe3, 0xb5, 0xbe, 0xb4, 0x4d, 0x1c, 0xaa, 0x42, 0x0e, 0x03, 0x7b, 0x0b, 0xfa, - 0x1c, 0x7e, 0x82, 0xd9, 0x1b, 0x8f, 0x0f, 0x29, 0xd0, 0x8a, 0x44, 0x83, 0x5a, 0x72, 0x21, 0x9c, - 0x3c, 0xf5, 0x08, 0xba, 0x75, 0x35, 0x0f, 0x24, 0x38, 0xd9, 0xe8, 0x01, 0xb1, 0x5f, 0x83, 0x23, - 0x01, 0x0a, 0x71, 0x1f, 0xed, 0x82, 0x17, 0x6a, 0xdd, 0xbb, 0x85, 0x79, 0x4c, 0xc3, 0xaa, 0xc3, - 0x98, 0x6b, 0x53, 0x8d, 0xa5, 0x0f, 0xb8, 0x1c, 0xc6, 0xb5, 0xe1, 0x59, 0x0e, 0x5b, 0xb1, 0xaa, - 0xa6, 0x97, 0xae, 0xa3, 0xa0, 0x4e, 0xc4, 0x0d, 0xe6, 0x62, 0x08, 0x0e, 0xf3, 0x03, 0xd4, 0x08, - 0x1e, 0x64, 0x15, 0xdb, 0x3a, 0xea, 0x23, 0x54, 0xd0, 0xfc, 0x03, 0xa1, 0xc0, 0x1f, 0xe4, 0x69, - 0x9c, 0xd3, 0xab, 0x86, 0xa9, 0x47, 0xbf, 0x95, 0xc7, 0x21, 0x53, 0x0c, 0xeb, 0xa9, 0x68, 0xe8, - 0xf2, 0x92, 0x88, 0xb8, 0x26, 0x89, 0x86, 0x27, 0x60, 0x50, 0x0c, 0xa8, 0x82, 0x61, 0x8b, 0x10, - 0x06, 0xc4, 0xd9, 0x4d, 0xdb, 0x95, 0x17, 0xb1, 0xab, 0x57, 0xca, 0x06, 0x33, 0x3d, 0x3f, 0x98, - 0x8d, 0xf6, 0x72, 0x76, 0x05, 0xdb, 0xb4, 0x49, 0x11, 0x7d, 0x8f, 0x40, 0xff, 0xd6, 0x9e, 0xc7, - 0xdc, 0xa2, 0xc3, 0x82, 0x4c, 0x64, 0xf2, 0xe1, 0x41, 0xad, 0x55, 0x56, 0x0d, 0x7d, 0xc5, 0xd0, - 0x5b, 0x87, 0xa6, 0xd6, 0xf6, 0x8f, 0xbd, 0x1b, 0xd4, 0xa3, 0xe9, 0xb0, 0x36, 0xc4, 0xd7, 0x4d, - 0x28, 0x20, 0x9c, 0x53, 0xf0, 0xa2, 0x67, 0x54, 0x58, 0xc1, 0x61, 0x15, 0x6a, 0x98, 0x86, 0x59, - 0x42, 0x4c, 0x2f, 0xf8, 0xa7, 0x79, 0x71, 0xe8, 0x5f, 0x05, 0x07, 0xc9, 0x0b, 0x30, 0x93, 0x0f, - 0x1e, 0xe4, 0x25, 0x18, 0xad, 0xdd, 0x1d, 0x2d, 0xb1, 0xf5, 0x60, 0x7b, 0xba, 0x69, 0x16, 0xad, - 0x74, 0x40, 0x9f, 0x4a, 0x30, 0xd6, 0x52, 0x19, 0xc1, 0x7d, 0x08, 0x43, 0xd8, 0x20, 0x85, 0xe8, - 0x66, 0x86, 0xad, 0x3a, 0x1d, 0xdf, 0x4a, 0xcd, 0xf6, 0xb0, 0xa5, 0x88, 0xdb, 0xf4, 0x46, 0xde, - 0x81, 0x09, 0xd1, 0xb9, 0xad, 0x83, 0xe8, 0xd6, 0x9c, 0xf8, 0x5d, 0x02, 0x39, 0xc9, 0x5b, 0x6a, - 0xd4, 0x99, 0xee, 0x44, 0xdd, 0xbd, 0x99, 0x72, 0x1b, 0xbb, 0xc4, 0xef, 0xae, 0x4d, 0xbb, 0x6c, - 0x51, 0x7d, 0x65, 0x9b, 0x69, 0x3b, 0xa9, 0xb7, 0xdf, 0xa2, 0x9e, 0x16, 0xb0, 0x77, 0x9a, 0xcc, - 0x85, 0x03, 0x61, 0x97, 0x96, 0xb1, 0x13, 0x8e, 0xe6, 0x83, 0x07, 0xf9, 0x1d, 0x9c, 0x38, 0xeb, - 0x8e, 0xa1, 0xb1, 0x3a, 0xff, 0x59, 0x38, 0xaa, 0x57, 0x9d, 0xf0, 0xda, 0xfa, 0xf3, 0xb5, 0xe7, - 0x16, 0x08, 0xc4, 0x34, 0x8a, 0xda, 0x0a, 0x9d, 0xdb, 0xfe, 0x29, 0x36, 0x48, 0xf0, 0x20, 0xbf, - 0x2e, 0xbe, 0xfe, 0x9c, 0xcf, 0x34, 0x2e, 0x6a, 0xb2, 0x21, 0x3e, 0xda, 0x8d, 0xaf, 0xd1, 0xe8, - 0xcd, 0xe6, 0x15, 0xab, 0xd5, 0x17, 0xbb, 0xde, 0x42, 0xf3, 0xbe, 0x98, 0xc5, 0x95, 0x07, 0x2b, - 0x61, 0xc3, 0xa3, 0x5e, 0x0d, 0xc6, 0xcf, 0x62, 0xcf, 0xab, 0x7f, 0x19, 0x8e, 0x24, 0xbb, 0xea, - 0x68, 0xdb, 0xd4, 0x65, 0x41, 0x6a, 0x7b, 0xf3, 0xe1, 0x01, 0x21, 0xd0, 0x5b, 0xf5, 0x5f, 0x1c, - 0xe2, 0x2f, 0xf8, 0x6f, 0x72, 0x0b, 0xfa, 0xfd, 0xbf, 0x79, 0x3f, 0x95, 0xc3, 0x99, 0x71, 0x69, - 0x7a, 0x70, 0x59, 0xf1, 0xf1, 0xfc, 0xfd, 0x74, 0x6c, 0xb2, 0x64, 0x78, 0xdb, 0xd5, 0x2d, 0x45, - 0xb3, 0x2a, 0x2a, 0xd2, 0xcd, 0xe0, 0xcf, 0xac, 0xab, 0xef, 0xa8, 0xde, 0x9e, 0xcd, 0x5c, 0xe5, - 0x06, 0xd3, 0xf2, 0xa1, 0x01, 0x32, 0x0e, 0x03, 0x01, 0x1d, 0xdc, 0x74, 0xfd, 0x34, 0xf4, 0x72, - 0x47, 0xd1, 0xa3, 0xdc, 0x1f, 0x59, 0x38, 0xcc, 0xf1, 0x93, 0xcf, 0x24, 0xe8, 0x0b, 0xe8, 0x13, - 0x69, 0xd1, 0x09, 0xcd, 0x6c, 0x2d, 0x7b, 0xba, 0x0d, 0xc9, 0x20, 0x17, 0xb2, 0xfa, 0xc9, 0x9f, - 0xff, 0xde, 0x3f, 0x74, 0x9a, 0x4c, 0xa9, 0x1f, 0x51, 0x6d, 0x87, 0x96, 0x67, 0x75, 0x6a, 0xa9, - 0x81, 0xf6, 0x6c, 0x1c, 0x15, 0x26, 0xf7, 0x24, 0xe8, 0xf5, 0xeb, 0x95, 0x4c, 0x26, 0x38, 0x89, - 0x7c, 0xa7, 0xb2, 0x53, 0xa9, 0x72, 0x08, 0x65, 0x91, 0x43, 0x99, 0x27, 0x6a, 0x2a, 0x14, 0xce, - 0x84, 0xd4, 0xfd, 0x80, 0x1c, 0x1e, 0x90, 0xfb, 0x12, 0x1c, 0xe5, 0x1c, 0xeb, 0x7a, 0xb9, 0x4c, - 0x66, 0x12, 0xdc, 0x35, 0x90, 0xbd, 0xec, 0x99, 0xb6, 0x64, 0x11, 0x9e, 0xc2, 0xe1, 0x4d, 0x93, - 0xc9, 0xf6, 0xe0, 0x91, 0xaf, 0x25, 0xe8, 0xaf, 0x95, 0x6f, 0x22, 0xac, 0x06, 0x06, 0x96, 0x08, - 0xab, 0x91, 0x7b, 0xc9, 0x57, 0x38, 0xac, 0x0b, 0x64, 0x21, 0xfd, 0x02, 0x05, 0x18, 0x75, 0x1f, - 0xc7, 0xd2, 0x01, 0x79, 0x20, 0xc1, 0x60, 0x0d, 0xa4, 0x9f, 0x3e, 0x25, 0x39, 0x25, 0x8d, 0x0d, - 0x9f, 0x55, 0xdb, 0x96, 0x47, 0xbc, 0x39, 0x8e, 0xf7, 0x2c, 0x99, 0x69, 0x1f, 0x2f, 0x79, 0x24, - 0xc1, 0x40, 0x64, 0x83, 0x27, 0xb3, 0x49, 0x4e, 0x9b, 0xe8, 0x52, 0x56, 0x69, 0x57, 0x1c, 0x21, - 0x5e, 0xe6, 0x10, 0xcf, 0x93, 0x73, 0xa9, 0x10, 0xa3, 0xfc, 0x41, 0xdd, 0xd7, 0x0c, 0xfd, 0x80, - 0x7c, 0x27, 0xc1, 0xb1, 0x28, 0x5f, 0xf1, 0x93, 0x3a, 0x9f, 0x9c, 0xa4, 0x18, 0x1a, 0x95, 0xcd, - 0x75, 0xa2, 0x82, 0xb8, 0xcf, 0x73, 0xdc, 0x2a, 0x99, 0xed, 0x08, 0x37, 0xf9, 0x5c, 0x82, 0x23, - 0x79, 0xdc, 0xbe, 0x93, 0x66, 0x4c, 0x1d, 0x99, 0x48, 0x9c, 0x31, 0xf5, 0xa4, 0x40, 0xbe, 0xc0, - 0x71, 0xcd, 0x11, 0x25, 0x15, 0x17, 0x92, 0x00, 0x4c, 0xe5, 0x17, 0x12, 0x00, 0x02, 0xf3, 0xb3, - 0x98, 0xd2, 0xad, 0xf5, 0xf0, 0xce, 0xb6, 0x27, 0x8c, 0x08, 0xe7, 0x38, 0xc2, 0x19, 0x32, 0xdd, - 0x2e, 0x42, 0xf2, 0x50, 0x82, 0xfe, 0xda, 0xca, 0x9f, 0x08, 0xad, 0x91, 0x7f, 0x24, 0x42, 0x6b, - 0x62, 0x11, 0x1d, 0xf4, 0x77, 0x51, 0xe8, 0x46, 0xfa, 0xfb, 0x1b, 0x09, 0x20, 0x64, 0x1a, 0x24, - 0xc9, 0x75, 0x13, 0xe9, 0xc9, 0xce, 0xb6, 0x29, 0x8d, 0x48, 0x97, 0x38, 0xd2, 0x05, 0x92, 0x4b, - 0x45, 0xea, 0xff, 0x35, 0xcc, 0x52, 0x04, 0xe7, 0x97, 0x7c, 0x84, 0x07, 0xb4, 0x25, 0x71, 0x56, - 0x36, 0xb0, 0xa0, 0xc4, 0x59, 0xd9, 0xc8, 0x83, 0xe4, 0x8b, 0x1c, 0x61, 0x8e, 0xcc, 0xb5, 0x31, - 0xc2, 0x4d, 0xbd, 0xe0, 0xcf, 0x71, 0x75, 0xbf, 0xe8, 0x97, 0xe2, 0x6f, 0x12, 0x90, 0x35, 0xe6, - 0x35, 0x90, 0x9c, 0xc4, 0xc6, 0x8e, 0x67, 0x52, 0x89, 0x8d, 0xdd, 0x82, 0x43, 0xc9, 0x6f, 0x73, - 0xdc, 0xcb, 0xe4, 0x5a, 0x2a, 0xee, 0x12, 0xf3, 0x0a, 0x1a, 0xb7, 0x52, 0xf0, 0xcb, 0xa1, 0xd0, - 0x58, 0x0f, 0x0f, 0x25, 0x80, 0x35, 0xe6, 0x21, 0x2b, 0x22, 0xc9, 0x8b, 0x42, 0x94, 0x6a, 0x65, - 0x67, 0xda, 0x11, 0x45, 0xbc, 0x57, 0x39, 0xde, 0x4b, 0x64, 0xb1, 0x2d, 0xbc, 0x36, 0xdd, 0x2b, - 0xe8, 0xd4, 0xa3, 0x11, 0x98, 0xbf, 0x4a, 0x40, 0x9a, 0x37, 0x7c, 0xb2, 0x90, 0x52, 0x90, 0xb1, - 0x74, 0x26, 0x7b, 0xbe, 0x43, 0xad, 0x8e, 0x83, 0x88, 0xb2, 0x96, 0x48, 0x10, 0xbf, 0x48, 0x70, - 0xa2, 0xd9, 0xbe, 0x3f, 0xc9, 0x16, 0x93, 0x87, 0x53, 0xeb, 0x50, 0x2e, 0x76, 0xae, 0xd8, 0xf1, - 0xb7, 0x21, 0x1a, 0x0d, 0xf9, 0x51, 0x82, 0x63, 0x0d, 0xec, 0x24, 0xb1, 0xe8, 0xe3, 0x89, 0x51, - 0x62, 0xd1, 0xb7, 0x20, 0x3f, 0x1d, 0x8c, 0x13, 0xbf, 0x4f, 0x0b, 0x55, 0x6e, 0xa2, 0xa0, 0x71, - 0x88, 0xdf, 0x4b, 0x00, 0x21, 0xa5, 0x49, 0x1c, 0x7b, 0x4d, 0x2c, 0x2a, 0x71, 0xec, 0x35, 0xf3, - 0x24, 0x79, 0x8d, 0xe3, 0xbc, 0x4e, 0xae, 0xb6, 0xb1, 0xd0, 0x18, 0x1a, 0x0b, 0x10, 0xaa, 0xfb, - 0x82, 0x98, 0x1d, 0xa8, 0xfb, 0x9c, 0x8a, 0x1d, 0x90, 0x1f, 0xfc, 0xcd, 0xa1, 0x9e, 0xf5, 0x24, - 0x6f, 0x0e, 0xb1, 0x14, 0x2c, 0x79, 0x73, 0x88, 0xa7, 0x65, 0xf2, 0x25, 0x1e, 0xc3, 0x39, 0x32, - 0x9f, 0xbe, 0x39, 0x04, 0xff, 0x8f, 0x15, 0xee, 0x66, 0xdf, 0x4a, 0x30, 0x18, 0x65, 0x59, 0x89, - 0x1b, 0x64, 0x0c, 0x57, 0x4b, 0xdc, 0x20, 0xe3, 0xe8, 0x5b, 0x07, 0xeb, 0x84, 0xf8, 0x67, 0x05, - 0x7f, 0xd5, 0x71, 0x97, 0x6f, 0x3d, 0x7e, 0x36, 0x2a, 0x3d, 0x79, 0x36, 0x2a, 0xfd, 0xf3, 0x6c, - 0x54, 0xba, 0xf7, 0x7c, 0xb4, 0xe7, 0xc9, 0xf3, 0xd1, 0x9e, 0xbf, 0x9e, 0x8f, 0xf6, 0xbc, 0x97, - 0x8b, 0x70, 0xb8, 0xc0, 0xe6, 0x2d, 0xba, 0xe5, 0xd6, 0xdb, 0xfc, 0xb8, 0x66, 0x95, 0x73, 0xba, - 0xad, 0x3e, 0xfe, 0xdf, 0x65, 0xe7, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x65, 0x54, 0x9e, - 0xd0, 0x1c, 0x00, 0x00, + // 1847 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0xdc, 0xc6, + 0x15, 0x17, 0xb5, 0xb2, 0xec, 0x1d, 0xa9, 0xb5, 0x3b, 0x95, 0x5d, 0x75, 0xad, 0xea, 0x83, 0xa8, + 0x25, 0x59, 0xb5, 0x48, 0x69, 0x2d, 0x5b, 0xb6, 0xea, 0xd6, 0xb6, 0x64, 0x48, 0xb5, 0x21, 0xc3, + 0x32, 0x05, 0xb5, 0x40, 0x51, 0x74, 0x3b, 0xe2, 0xce, 0xae, 0x58, 0xed, 0x92, 0x34, 0xc9, 0x55, + 0x2b, 0x2c, 0xf6, 0xd2, 0xde, 0x72, 0x08, 0x0c, 0xf8, 0x94, 0x43, 0x10, 0x20, 0x76, 0x10, 0xe4, + 0x14, 0xc0, 0xc9, 0x21, 0x97, 0x1c, 0x12, 0x20, 0x80, 0x6f, 0x31, 0x90, 0x4b, 0x90, 0x83, 0x11, + 0xd8, 0xf9, 0x43, 0x82, 0x99, 0x79, 0x5c, 0x72, 0x77, 0xb9, 0x24, 0x37, 0x58, 0xe4, 0xa4, 0xe5, + 0xf0, 0x7d, 0xfc, 0xde, 0x9b, 0xf7, 0x1e, 0xdf, 0x0f, 0x42, 0xd3, 0x3a, 0x31, 0x0d, 0x93, 0x16, + 0xf4, 0x03, 0x62, 0x98, 0xaa, 0xeb, 0x59, 0x0e, 0x29, 0x53, 0xf5, 0x51, 0x8d, 0x3a, 0xc7, 0x8a, + 0xed, 0x58, 0x9e, 0x85, 0xc7, 0xc2, 0x12, 0x0a, 0x48, 0xe4, 0xc6, 0xca, 0x56, 0xd9, 0xe2, 0x02, + 0x2a, 0xfb, 0x25, 0x64, 0x73, 0x13, 0x65, 0xcb, 0x2a, 0x57, 0xa8, 0x4a, 0x6c, 0x43, 0x25, 0xa6, + 0x69, 0x79, 0xc4, 0x33, 0x2c, 0xd3, 0x85, 0xb7, 0x0b, 0xba, 0xe5, 0x56, 0x2d, 0x57, 0xdd, 0x27, + 0x2e, 0xb8, 0x50, 0x8f, 0x96, 0xf7, 0xa9, 0x47, 0x96, 0x55, 0x9b, 0x94, 0x0d, 0x93, 0x0b, 0x83, + 0xec, 0x4c, 0x24, 0x2e, 0x9b, 0x38, 0xa4, 0xea, 0x9b, 0xfb, 0x7d, 0xa4, 0x88, 0x6e, 0x99, 0x9e, + 0x43, 0x74, 0xcf, 0x97, 0x9a, 0x8b, 0x94, 0x22, 0xba, 0x67, 0x1c, 0xd1, 0x42, 0x91, 0x92, 0x4a, + 0xbc, 0x39, 0xdb, 0xb1, 0x8e, 0x8c, 0x22, 0x75, 0xdc, 0x58, 0x5c, 0xae, 0xe7, 0x90, 0xe3, 0x78, + 0x8f, 0x36, 0x39, 0xae, 0x52, 0xd3, 0x2b, 0x18, 0x66, 0x09, 0xb2, 0x25, 0x8f, 0x21, 0xfc, 0x90, + 0x65, 0x61, 0x87, 0x47, 0xa5, 0xd1, 0x47, 0x35, 0xea, 0x7a, 0xf2, 0x43, 0xf4, 0xeb, 0x96, 0x53, + 0xd7, 0xb6, 0x4c, 0x97, 0xe2, 0x35, 0x34, 0x2c, 0xa2, 0x1f, 0x97, 0xa6, 0xa5, 0xf9, 0x91, 0xfc, + 0x84, 0x12, 0x75, 0x2f, 0x8a, 0xd0, 0x5a, 0x1f, 0x7a, 0xf1, 0x6a, 0x6a, 0x40, 0x03, 0x0d, 0xf9, + 0xaf, 0xe8, 0x0c, 0x37, 0xb9, 0x69, 0x54, 0x28, 0xb8, 0xc1, 0xe7, 0xd0, 0x70, 0x95, 0x3a, 0x87, + 0x15, 0xca, 0xed, 0x8d, 0x6a, 0xf0, 0x84, 0xc7, 0xd0, 0x09, 0xeb, 0x3f, 0x26, 0x75, 0xc6, 0x07, + 0xa7, 0xa5, 0xf9, 0xac, 0x26, 0x1e, 0xd8, 0xa9, 0xeb, 0x11, 0xc7, 0x1b, 0xcf, 0x4c, 0x4b, 0xf3, + 0x19, 0x4d, 0x3c, 0xc8, 0x3b, 0xe8, 0x57, 0x21, 0xbb, 0x00, 0xf4, 0x8f, 0x68, 0xa8, 0x64, 0x80, + 0xd9, 0x91, 0xfc, 0x4c, 0x34, 0xcc, 0x3d, 0xd3, 0x28, 0x19, 0xb4, 0xc8, 0x14, 0x01, 0x2b, 0x57, + 0x92, 0xff, 0x89, 0xc6, 0xb8, 0xc5, 0xdb, 0x95, 0x0a, 0x7b, 0xe7, 0x27, 0x05, 0x6f, 0x22, 0x14, + 0x94, 0x08, 0x98, 0x9e, 0x55, 0x44, 0x3d, 0x29, 0xac, 0x9e, 0x14, 0x51, 0xb2, 0x50, 0x4f, 0xca, + 0x0e, 0x29, 0xfb, 0x91, 0x6a, 0x21, 0x4d, 0xf9, 0x3d, 0x09, 0x9d, 0x6d, 0x73, 0x00, 0xb0, 0xff, + 0x84, 0x4e, 0x30, 0x04, 0x2c, 0xbd, 0x99, 0x5e, 0x70, 0x0b, 0x2d, 0xbc, 0xd5, 0x02, 0x70, 0x90, + 0x03, 0x9c, 0x4b, 0x04, 0x28, 0x7c, 0xb7, 0x20, 0x5c, 0x82, 0x0c, 0xec, 0x40, 0xe1, 0xf9, 0x19, + 0x18, 0x47, 0x27, 0x49, 0xb1, 0xe8, 0x50, 0x57, 0x14, 0x40, 0x56, 0xf3, 0x1f, 0xe5, 0x7f, 0x40, + 0x48, 0x81, 0x06, 0x84, 0xb4, 0x81, 0xb2, 0xcd, 0xf2, 0x85, 0x9c, 0x4d, 0x75, 0xa9, 0x1a, 0x5f, + 0x0c, 0x82, 0x0a, 0xf4, 0xe4, 0x7d, 0x34, 0xee, 0x27, 0xac, 0x29, 0xd5, 0xef, 0x5b, 0xf9, 0x48, + 0x42, 0xbf, 0x8d, 0x70, 0x12, 0x1d, 0x46, 0xe6, 0xa7, 0x84, 0xd1, 0xbf, 0xfb, 0xa9, 0xa1, 0xdf, + 0x08, 0xa8, 0x9e, 0x47, 0x5d, 0x31, 0xdf, 0x42, 0x2d, 0xc5, 0x1c, 0x52, 0x07, 0x6e, 0x08, 0x9e, + 0x42, 0xad, 0x36, 0x18, 0xdd, 0x6a, 0x99, 0xc8, 0x56, 0x1b, 0x0a, 0xb7, 0x9a, 0xe1, 0x5f, 0x43, + 0xd8, 0x2d, 0x24, 0xe8, 0x3e, 0x1a, 0x21, 0xc1, 0x31, 0xdc, 0xc3, 0x85, 0xe8, 0x14, 0x85, 0xf4, + 0x37, 0x2d, 0xa7, 0x0a, 0x89, 0x0a, 0xeb, 0xcb, 0x14, 0x9d, 0xf7, 0x2f, 0x23, 0x24, 0xdd, 0xf7, + 0x4b, 0xff, 0x4c, 0x42, 0x13, 0xd1, 0x7e, 0x20, 0xac, 0x07, 0x68, 0x34, 0x04, 0xcb, 0xbf, 0xfa, + 0x9e, 0xe2, 0x6a, 0x31, 0xd0, 0xbf, 0x1a, 0xb0, 0x61, 0x70, 0x6b, 0xd4, 0xb6, 0x1c, 0xef, 0xe7, + 0xb8, 0xfe, 0x3d, 0xf8, 0x28, 0xf8, 0x1e, 0x21, 0x45, 0x7f, 0x46, 0xc3, 0x0e, 0x3f, 0x81, 0x7b, + 0x98, 0x8e, 0x4e, 0x8e, 0xd0, 0x0a, 0xe5, 0x05, 0xb4, 0xe4, 0x42, 0x30, 0x0d, 0x5b, 0x63, 0xe9, + 0xd7, 0x25, 0x3f, 0x95, 0xd0, 0xb9, 0x76, 0x0f, 0x80, 0xfd, 0x16, 0x3a, 0x29, 0x50, 0xf8, 0x37, + 0x9b, 0x16, 0xbc, 0xaf, 0xd6, 0xbf, 0xfb, 0x5c, 0x86, 0x34, 0x6c, 0x3a, 0x94, 0xba, 0x36, 0xd1, + 0x69, 0xf2, 0xd0, 0xcd, 0x43, 0x5c, 0xbb, 0x9e, 0xe5, 0xd0, 0x0d, 0xab, 0x66, 0x7a, 0xc9, 0x3a, + 0x0a, 0xe8, 0x84, 0xdc, 0x40, 0x2e, 0xd8, 0xa5, 0xb3, 0x03, 0xd0, 0x10, 0x0f, 0xb2, 0x0a, 0xa3, + 0x26, 0xec, 0x23, 0x50, 0xd0, 0xd9, 0x81, 0xaf, 0xc0, 0x1f, 0xe4, 0x79, 0xf8, 0x76, 0x6c, 0x1a, + 0x66, 0x31, 0xfc, 0xad, 0x3f, 0x83, 0x32, 0x25, 0xa3, 0x08, 0xb2, 0xec, 0xa7, 0xbc, 0xe6, 0x47, + 0xdc, 0x94, 0x04, 0xc3, 0x33, 0x68, 0xd4, 0x1f, 0x9a, 0x05, 0xc3, 0xf6, 0x43, 0x18, 0xf1, 0xcf, + 0xee, 0xda, 0xae, 0xbc, 0x0a, 0xf3, 0x61, 0xa3, 0x62, 0x50, 0xd3, 0x63, 0xc1, 0xec, 0xa6, 0xcb, + 0xd9, 0x0d, 0x68, 0xf8, 0x0e, 0x45, 0xf0, 0x3d, 0x81, 0xb2, 0xfb, 0xc7, 0x1e, 0x75, 0x4b, 0x0e, + 0x15, 0x99, 0xc8, 0x68, 0xc1, 0x81, 0xac, 0x36, 0xf7, 0xa2, 0xe3, 0x3b, 0xc4, 0x23, 0xc9, 0xee, + 0x76, 0xfd, 0x2f, 0xa9, 0xaf, 0x00, 0x6e, 0x2e, 0xa0, 0x5f, 0x7a, 0x46, 0x95, 0x16, 0x1c, 0x5a, + 0x25, 0x86, 0x69, 0x98, 0x65, 0xf0, 0xf5, 0x0b, 0x76, 0xaa, 0xf9, 0x87, 0x2c, 0xc5, 0xdc, 0x39, + 0x2f, 0xac, 0x8c, 0x26, 0x1e, 0xe4, 0x35, 0x34, 0xd9, 0xbc, 0x13, 0x52, 0xa6, 0x3b, 0x62, 0xab, + 0xbb, 0x6b, 0x96, 0xac, 0x64, 0x40, 0xff, 0x97, 0xd0, 0x54, 0x57, 0x65, 0x00, 0xf7, 0x2f, 0x34, + 0x06, 0x85, 0x5f, 0x08, 0x6f, 0x8c, 0xd0, 0x82, 0xf3, 0xd1, 0x2d, 0xd2, 0x69, 0x0f, 0x5a, 0x05, + 0xbb, 0x1d, 0x6f, 0xe4, 0x43, 0x34, 0xe3, 0x77, 0x64, 0xf7, 0x20, 0xfa, 0xd5, 0xff, 0x5f, 0x4b, + 0x48, 0x8e, 0xf3, 0x96, 0x18, 0x75, 0xa6, 0x3f, 0x51, 0xf7, 0x6f, 0x56, 0xdc, 0x87, 0xea, 0x67, + 0x5d, 0xb3, 0x67, 0x57, 0x2c, 0x52, 0xdc, 0x38, 0xa0, 0xfa, 0x61, 0xe2, 0xed, 0x77, 0xa9, 0xa7, + 0x15, 0xe8, 0x89, 0x0e, 0x73, 0x41, 0xa3, 0x1f, 0x91, 0x0a, 0x34, 0xef, 0x29, 0x4d, 0x3c, 0xc8, + 0xf7, 0x60, 0x92, 0xec, 0x38, 0x86, 0x4e, 0x5b, 0xfc, 0xe7, 0xd0, 0xa9, 0x62, 0xcd, 0x09, 0xae, + 0x2d, 0xab, 0x35, 0x9f, 0xbb, 0x20, 0xf0, 0xa7, 0x4c, 0xd8, 0x56, 0xe0, 0xdc, 0x66, 0xa7, 0xd0, + 0x20, 0xe2, 0x41, 0xfe, 0x9d, 0xbf, 0x1f, 0x70, 0x0e, 0xd5, 0xbe, 0x14, 0xca, 0x86, 0xff, 0x59, + 0x6f, 0x7f, 0x0d, 0x46, 0xef, 0x76, 0xae, 0x73, 0xdd, 0xbe, 0xe9, 0xad, 0x16, 0x3a, 0x77, 0xd3, + 0x1c, 0x2c, 0x45, 0x50, 0x09, 0xbb, 0x1e, 0xf1, 0x9a, 0x30, 0x3e, 0xf7, 0x77, 0xca, 0xd6, 0x97, + 0xc1, 0xa8, 0xb1, 0x6b, 0x8e, 0x7e, 0x40, 0x5c, 0x2a, 0x52, 0x3b, 0xa4, 0x05, 0x07, 0x18, 0xa3, + 0xa1, 0x1a, 0x7b, 0x31, 0xc8, 0x5f, 0xf0, 0xdf, 0x78, 0x1b, 0x65, 0xd9, 0x5f, 0x8d, 0xa5, 0x92, + 0x7f, 0xb1, 0x47, 0xd7, 0x15, 0x86, 0xe7, 0xbb, 0x57, 0x53, 0xb3, 0x65, 0xc3, 0x3b, 0xa8, 0xed, + 0x2b, 0xba, 0x55, 0x55, 0x81, 0xe2, 0x8a, 0x3f, 0x8b, 0x6e, 0xf1, 0x50, 0xf5, 0x8e, 0x6d, 0xea, + 0x2a, 0x77, 0xa8, 0xae, 0x05, 0x06, 0xf0, 0x34, 0x1a, 0x11, 0x14, 0x74, 0xcf, 0x65, 0x69, 0x18, + 0xe2, 0x8e, 0xc2, 0x47, 0xf9, 0xb7, 0xce, 0xa3, 0x13, 0x1c, 0x3f, 0x7e, 0x5b, 0x42, 0xc3, 0x82, + 0xd6, 0xe1, 0x2e, 0x9d, 0xd0, 0xc9, 0x22, 0x73, 0x17, 0x53, 0x48, 0x8a, 0x5c, 0xc8, 0xea, 0xff, + 0xbe, 0xf9, 0xe1, 0xc9, 0xe0, 0x45, 0x3c, 0xa7, 0xfe, 0x9b, 0xe8, 0x87, 0xa4, 0xb2, 0x58, 0x24, + 0x96, 0x2a, 0xb4, 0x17, 0xa3, 0xe8, 0x37, 0x7e, 0x2c, 0xa1, 0x21, 0x56, 0xaf, 0x78, 0x36, 0xc6, + 0x49, 0xe8, 0xfb, 0x93, 0x9b, 0x4b, 0x94, 0x03, 0x28, 0xab, 0x1c, 0xca, 0x32, 0x56, 0x13, 0xa1, + 0x70, 0xd6, 0xa5, 0xd6, 0xc5, 0x2a, 0xd5, 0xc0, 0x4f, 0x24, 0x74, 0x8a, 0xf3, 0xb9, 0xdb, 0x95, + 0x0a, 0x5e, 0x88, 0x71, 0xd7, 0x46, 0x2c, 0x73, 0x7f, 0x48, 0x25, 0x0b, 0xf0, 0x14, 0x0e, 0x6f, + 0x1e, 0xcf, 0xa6, 0x83, 0x87, 0xdf, 0x97, 0x50, 0xb6, 0x59, 0xbe, 0xb1, 0xb0, 0xda, 0xd8, 0x5e, + 0x2c, 0xac, 0x76, 0x9e, 0x27, 0xdf, 0xe0, 0xb0, 0xae, 0xe2, 0x95, 0xe4, 0x0b, 0xf4, 0xc1, 0xa8, + 0x75, 0x18, 0x4b, 0x0d, 0xfc, 0x54, 0x42, 0xa3, 0x4d, 0x90, 0x2c, 0x7d, 0x4a, 0x7c, 0x4a, 0xda, + 0x1b, 0x3e, 0xa7, 0xa6, 0x96, 0x07, 0xbc, 0x79, 0x8e, 0xf7, 0x12, 0x5e, 0x48, 0x8f, 0x17, 0x7f, + 0x25, 0xa1, 0x91, 0xd0, 0x8e, 0x8f, 0x17, 0xe3, 0x9c, 0x76, 0x50, 0xb3, 0x9c, 0x92, 0x56, 0x1c, + 0x20, 0xfe, 0x8d, 0x43, 0x7c, 0x88, 0x1f, 0x24, 0x42, 0x0c, 0x33, 0x0c, 0xb5, 0x2e, 0x56, 0xfe, + 0x46, 0xb3, 0x30, 0xd5, 0x3a, 0xdf, 0xea, 0x1b, 0x6a, 0x9d, 0xef, 0xf1, 0x0d, 0xfc, 0xb1, 0x84, + 0x4e, 0x87, 0xd9, 0x0e, 0x4b, 0xf8, 0x72, 0x7c, 0x02, 0x23, 0x48, 0x58, 0x2e, 0xdf, 0x8b, 0x0a, + 0xc4, 0x74, 0x85, 0xc7, 0xa4, 0xe2, 0xc5, 0x9e, 0x62, 0xc2, 0xcf, 0x25, 0x74, 0x52, 0x83, 0x8d, + 0x3b, 0x6e, 0xfe, 0xb4, 0x10, 0x88, 0xd8, 0xf9, 0xd3, 0x4a, 0x04, 0x64, 0x8d, 0xe3, 0xda, 0xc6, + 0xf7, 0x12, 0x71, 0xc1, 0xe2, 0x9f, 0x22, 0xcd, 0xef, 0x48, 0x08, 0x01, 0x68, 0x96, 0xe1, 0x84, + 0x2e, 0x6f, 0x85, 0x7e, 0x29, 0x9d, 0x30, 0xa0, 0x5f, 0xe2, 0xe8, 0x17, 0xf0, 0x7c, 0x5a, 0xf4, + 0xf8, 0x99, 0x84, 0xb2, 0x4d, 0x0a, 0x10, 0x0b, 0xad, 0x9d, 0x8f, 0xc4, 0x42, 0xeb, 0x60, 0x15, + 0x3d, 0xcc, 0x85, 0x92, 0xaf, 0x1b, 0x9a, 0x0b, 0x1f, 0x48, 0x08, 0x05, 0xcc, 0x03, 0xc7, 0xb9, + 0xee, 0x20, 0x41, 0xb9, 0xc5, 0x94, 0xd2, 0x80, 0x74, 0x8d, 0x23, 0x5d, 0xc1, 0xf9, 0x44, 0xa4, + 0xec, 0xaf, 0x61, 0x96, 0x43, 0x38, 0xdf, 0xe5, 0xa3, 0x5f, 0xd0, 0x98, 0xd8, 0x19, 0xdb, 0xc6, + 0x8a, 0x62, 0x67, 0x6c, 0x3b, 0x2f, 0x92, 0xaf, 0x71, 0x84, 0x79, 0xbc, 0x94, 0x62, 0xf4, 0x9b, + 0xc5, 0x02, 0x9b, 0xff, 0x6a, 0xbd, 0x64, 0x14, 0x1b, 0x6c, 0x72, 0xe1, 0x2d, 0xea, 0xb5, 0x91, + 0x9e, 0xd8, 0xa6, 0x8f, 0x66, 0x56, 0xb1, 0x4d, 0xdf, 0x85, 0x53, 0xc9, 0x7f, 0xe1, 0xb8, 0xd7, + 0xf1, 0xad, 0x44, 0xdc, 0x65, 0xea, 0x15, 0x74, 0x6e, 0xa5, 0xc0, 0xca, 0xa1, 0xd0, 0x5e, 0x0f, + 0xcf, 0x24, 0x84, 0xb6, 0xa8, 0x07, 0x6c, 0x0a, 0xc7, 0x2f, 0x18, 0x61, 0x8a, 0x96, 0x5b, 0x48, + 0x23, 0x0a, 0x78, 0x6f, 0x72, 0xbc, 0xd7, 0xf1, 0x6a, 0x2a, 0xbc, 0x36, 0x39, 0x2e, 0x14, 0x89, + 0x47, 0x42, 0x30, 0xbf, 0x94, 0x10, 0xee, 0x64, 0x06, 0x78, 0x25, 0xa1, 0x20, 0x23, 0x69, 0x50, + 0xee, 0x4a, 0x8f, 0x5a, 0x3d, 0x07, 0x11, 0x66, 0x3b, 0xa1, 0x20, 0xbe, 0x90, 0xd0, 0xd9, 0x4e, + 0xfb, 0x6c, 0x92, 0xad, 0xc6, 0x0f, 0xa7, 0xee, 0xa1, 0x5c, 0xeb, 0x5d, 0xb1, 0xe7, 0xef, 0x46, + 0x38, 0x1a, 0xfc, 0xa9, 0x84, 0x4e, 0xb7, 0xb1, 0x9a, 0xd8, 0xa2, 0x8f, 0x26, 0x54, 0xb1, 0x45, + 0xdf, 0x85, 0x34, 0xf5, 0x30, 0x4e, 0x58, 0x9f, 0x16, 0x6a, 0xdc, 0x44, 0x41, 0xe7, 0x10, 0x9f, + 0x4b, 0x08, 0x05, 0x54, 0x28, 0x76, 0xec, 0x75, 0xb0, 0xaf, 0xd8, 0xb1, 0xd7, 0xc9, 0xaf, 0xe4, + 0x2d, 0x8e, 0xf3, 0x36, 0xbe, 0x99, 0x62, 0x11, 0x32, 0x74, 0x2a, 0x10, 0xaa, 0x75, 0x9f, 0xd0, + 0x35, 0xd4, 0x3a, 0xa7, 0x70, 0x0d, 0xfc, 0x09, 0xdb, 0x2a, 0x5a, 0xd9, 0x52, 0xfc, 0x56, 0x11, + 0x49, 0xdd, 0xe2, 0xb7, 0x8a, 0x68, 0x3a, 0x27, 0x5f, 0xe7, 0x31, 0x5c, 0xc6, 0xcb, 0xc9, 0x5b, + 0x85, 0xf8, 0x9f, 0x5b, 0xb0, 0xd3, 0x7d, 0x28, 0xa1, 0xd1, 0x30, 0x3b, 0x8b, 0xdd, 0x3c, 0x23, + 0x38, 0x5e, 0xec, 0xe6, 0x19, 0x45, 0xfb, 0xe4, 0xab, 0x1c, 0xec, 0x12, 0x56, 0x52, 0x7d, 0x67, + 0x48, 0x99, 0x16, 0xd8, 0x1a, 0xe4, 0xae, 0x6f, 0xbf, 0x78, 0x3d, 0x29, 0xbd, 0x7c, 0x3d, 0x29, + 0x7d, 0xff, 0x7a, 0x52, 0x7a, 0xfc, 0x66, 0x72, 0xe0, 0xe5, 0x9b, 0xc9, 0x81, 0x6f, 0xdf, 0x4c, + 0x0e, 0xfc, 0x3d, 0x1f, 0xe2, 0x7e, 0xc2, 0xe6, 0x36, 0xd9, 0x77, 0x5b, 0x6d, 0xfe, 0xb7, 0x69, + 0x95, 0x73, 0xc1, 0xfd, 0x61, 0xfe, 0xef, 0xbf, 0xcb, 0x3f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x7d, + 0x2d, 0x10, 0x66, 0x7c, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2938,6 +2960,18 @@ func (m *QueryFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Start != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x18 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x12 + } if len(m.Merkle) > 0 { i -= len(m.Merkle) copy(dAtA[i:], m.Merkle) @@ -3232,10 +3266,29 @@ func (m *QueryAttestationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Cid))) + if m.Start != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x20 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x1a + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x12 + } + if len(m.Prover) > 0 { + i -= len(m.Prover) + copy(dAtA[i:], m.Prover) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Prover))) i-- dAtA[i] = 0xa } @@ -3379,10 +3432,29 @@ func (m *QueryReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Cid))) + if m.Start != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x20 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x1a + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x12 + } + if len(m.Prover) > 0 { + i -= len(m.Prover) + copy(dAtA[i:], m.Prover) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Prover))) i-- dAtA[i] = 0xa } @@ -3744,36 +3816,6 @@ func (m *QueryClientFreeSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryFidCidRequest) 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 *QueryFidCidRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryFidCidRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Fid) > 0 { - i -= len(m.Fid) - copy(dAtA[i:], m.Fid) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Fid))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - func (m *QueryPayDataRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4287,6 +4329,13 @@ func (m *QueryFileRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Start != 0 { + n += 1 + sovQuery(uint64(m.Start)) + } return n } @@ -4395,10 +4444,21 @@ func (m *QueryAttestationRequest) Size() (n int) { } var l int _ = l - l = len(m.Cid) + l = len(m.Prover) if l > 0 { n += 1 + l + sovQuery(uint64(l)) } + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Start != 0 { + n += 1 + sovQuery(uint64(m.Start)) + } return n } @@ -4451,10 +4511,21 @@ func (m *QueryReportRequest) Size() (n int) { } var l int _ = l - l = len(m.Cid) + l = len(m.Prover) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Merkle) if l > 0 { n += 1 + l + sovQuery(uint64(l)) } + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Start != 0 { + n += 1 + sovQuery(uint64(m.Start)) + } return n } @@ -4604,19 +4675,6 @@ func (m *QueryClientFreeSpaceResponse) Size() (n int) { return n } -func (m *QueryFidCidRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Fid) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - func (m *QueryPayDataRequest) Size() (n int) { if m == nil { return 0 @@ -4982,6 +5040,40 @@ func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { @@ -5008,8 +5100,27 @@ func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Merkle = string(dAtA[iNdEx:postIndex]) + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -5722,7 +5833,7 @@ func (m *QueryAttestationRequest) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Prover", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5750,8 +5861,93 @@ func (m *QueryAttestationRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Prover = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -6093,7 +6289,73 @@ func (m *QueryReportRequest) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Prover", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Prover = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -6121,8 +6383,27 @@ func (m *QueryReportRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -7076,88 +7357,6 @@ func (m *QueryClientFreeSpaceResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFidCidRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryFidCidRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFidCidRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Fid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *QueryPayDataRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/storage/types/query.pb.gw.go b/x/storage/types/query.pb.gw.go index 67fa23e94..9682c44ee 100644 --- a/x/storage/types/query.pb.gw.go +++ b/x/storage/types/query.pb.gw.go @@ -51,6 +51,10 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } +var ( + filter_Query_File_0 = &utilities.DoubleArray{Encoding: map[string]int{"merkle": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryFileRequest var metadata runtime.ServerMetadata @@ -67,12 +71,19 @@ func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, clie return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") } - protoReq.Merkle, err = runtime.String(val) + protoReq.Merkle, err = runtime.Bytes(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_File_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.File(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -94,12 +105,19 @@ func local_request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") } - protoReq.Merkle, err = runtime.String(val) + protoReq.Merkle, err = runtime.Bytes(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_File_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.File(ctx, &protoReq) return msg, metadata, err @@ -242,15 +260,48 @@ func request_Query_Attestation_0(ctx context.Context, marshaler runtime.Marshale _ = err ) - val, ok = pathParams["cid"] + val, ok = pathParams["prover"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "prover") + } + + protoReq.Prover, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "prover", err) + } + + val, ok = pathParams["merkle"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") + } + + protoReq.Merkle, err = runtime.Bytes(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) + } + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["start"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "start") } - protoReq.Cid, err = runtime.String(val) + protoReq.Start, err = runtime.Int64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) } msg, err := client.Attestation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -269,15 +320,48 @@ func local_request_Query_Attestation_0(ctx context.Context, marshaler runtime.Ma _ = err ) - val, ok = pathParams["cid"] + val, ok = pathParams["prover"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "prover") + } + + protoReq.Prover, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "prover", err) + } + + val, ok = pathParams["merkle"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") + } + + protoReq.Merkle, err = runtime.Bytes(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) + } + + val, ok = pathParams["owner"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") } - protoReq.Cid, err = runtime.String(val) + protoReq.Owner, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["start"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "start") + } + + protoReq.Start, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) } msg, err := server.Attestation(ctx, &protoReq) @@ -332,15 +416,48 @@ func request_Query_Reports_0(ctx context.Context, marshaler runtime.Marshaler, c _ = err ) - val, ok = pathParams["cid"] + val, ok = pathParams["prover"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "prover") + } + + protoReq.Prover, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "prover", err) + } + + val, ok = pathParams["merkle"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") + } + + protoReq.Merkle, err = runtime.Bytes(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) + } + + val, ok = pathParams["owner"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") } - protoReq.Cid, err = runtime.String(val) + protoReq.Owner, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["start"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "start") + } + + protoReq.Start, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) } msg, err := client.Reports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -359,15 +476,48 @@ func local_request_Query_Reports_0(ctx context.Context, marshaler runtime.Marsha _ = err ) - val, ok = pathParams["cid"] + val, ok = pathParams["prover"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "prover") + } + + protoReq.Prover, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "prover", err) + } + + val, ok = pathParams["merkle"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") + } + + protoReq.Merkle, err = runtime.Bytes(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) + } + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["start"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "start") } - protoReq.Cid, err = runtime.String(val) + protoReq.Start, err = runtime.Int64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) } msg, err := server.Reports(ctx, &protoReq) @@ -1840,11 +1990,11 @@ var ( pattern_Query_ProvidersAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "providers"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Attestation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "attestations", "cid"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Attestation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal-dao", "canine-chain", "storage", "attestations", "prover", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_AttestationsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "attestations"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Reports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "reports", "cid"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Reports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal-dao", "canine-chain", "storage", "reports", "prover", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_ReportsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "reports"}, "", runtime.AssumeColonVerbOpt(false))) diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index 97d812806..50ce6fbb0 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -1333,7 +1333,9 @@ var xxx_messageInfo_MsgUpgradeStorageResponse proto.InternalMessageInfo type MsgRequestAttestationForm struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"` + Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` } func (m *MsgRequestAttestationForm) Reset() { *m = MsgRequestAttestationForm{} } @@ -1376,18 +1378,31 @@ func (m *MsgRequestAttestationForm) GetCreator() string { return "" } -func (m *MsgRequestAttestationForm) GetCid() string { +func (m *MsgRequestAttestationForm) GetMerkle() []byte { if m != nil { - return m.Cid + return m.Merkle + } + return nil +} + +func (m *MsgRequestAttestationForm) GetOwner() string { + if m != nil { + return m.Owner } return "" } +func (m *MsgRequestAttestationForm) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + type MsgRequestAttestationFormResponse struct { Providers []string `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty"` Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` - Cid string `protobuf:"bytes,4,opt,name=cid,proto3" json:"cid,omitempty"` } func (m *MsgRequestAttestationFormResponse) Reset() { *m = MsgRequestAttestationFormResponse{} } @@ -1444,16 +1459,12 @@ func (m *MsgRequestAttestationFormResponse) GetError() string { return "" } -func (m *MsgRequestAttestationFormResponse) GetCid() string { - if m != nil { - return m.Cid - } - return "" -} - type MsgAttest struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"` + Prover string `protobuf:"bytes,2,opt,name=prover,proto3" json:"prover,omitempty"` + Merkle []byte `protobuf:"bytes,3,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,5,opt,name=start,proto3" json:"start,omitempty"` } func (m *MsgAttest) Reset() { *m = MsgAttest{} } @@ -1496,13 +1507,34 @@ func (m *MsgAttest) GetCreator() string { return "" } -func (m *MsgAttest) GetCid() string { +func (m *MsgAttest) GetProver() string { if m != nil { - return m.Cid + return m.Prover + } + return "" +} + +func (m *MsgAttest) GetMerkle() []byte { + if m != nil { + return m.Merkle + } + return nil +} + +func (m *MsgAttest) GetOwner() string { + if m != nil { + return m.Owner } return "" } +func (m *MsgAttest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + type MsgAttestResponse struct { } @@ -1541,7 +1573,10 @@ var xxx_messageInfo_MsgAttestResponse proto.InternalMessageInfo type MsgRequestReportForm struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"` + Prover string `protobuf:"bytes,2,opt,name=prover,proto3" json:"prover,omitempty"` + Merkle []byte `protobuf:"bytes,3,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,5,opt,name=start,proto3" json:"start,omitempty"` } func (m *MsgRequestReportForm) Reset() { *m = MsgRequestReportForm{} } @@ -1584,18 +1619,38 @@ func (m *MsgRequestReportForm) GetCreator() string { return "" } -func (m *MsgRequestReportForm) GetCid() string { +func (m *MsgRequestReportForm) GetProver() string { if m != nil { - return m.Cid + return m.Prover + } + return "" +} + +func (m *MsgRequestReportForm) GetMerkle() []byte { + if m != nil { + return m.Merkle + } + return nil +} + +func (m *MsgRequestReportForm) GetOwner() string { + if m != nil { + return m.Owner } return "" } +func (m *MsgRequestReportForm) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + type MsgRequestReportFormResponse struct { Providers []string `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty"` Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` - Cid string `protobuf:"bytes,4,opt,name=cid,proto3" json:"cid,omitempty"` } func (m *MsgRequestReportFormResponse) Reset() { *m = MsgRequestReportFormResponse{} } @@ -1652,16 +1707,12 @@ func (m *MsgRequestReportFormResponse) GetError() string { return "" } -func (m *MsgRequestReportFormResponse) GetCid() string { - if m != nil { - return m.Cid - } - return "" -} - type MsgReport struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"` + Prover string `protobuf:"bytes,2,opt,name=prover,proto3" json:"prover,omitempty"` + Merkle []byte `protobuf:"bytes,3,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,5,opt,name=start,proto3" json:"start,omitempty"` } func (m *MsgReport) Reset() { *m = MsgReport{} } @@ -1704,13 +1755,34 @@ func (m *MsgReport) GetCreator() string { return "" } -func (m *MsgReport) GetCid() string { +func (m *MsgReport) GetProver() string { if m != nil { - return m.Cid + return m.Prover + } + return "" +} + +func (m *MsgReport) GetMerkle() []byte { + if m != nil { + return m.Merkle + } + return nil +} + +func (m *MsgReport) GetOwner() string { + if m != nil { + return m.Owner } return "" } +func (m *MsgReport) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + type MsgReportResponse struct { } @@ -1787,80 +1859,81 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/tx.proto", fileDescriptor_2194ba0b2c3d6a97) } var fileDescriptor_2194ba0b2c3d6a97 = []byte{ - // 1154 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0xdb, 0x46, - 0x10, 0x36, 0x2d, 0xff, 0x69, 0x22, 0xbb, 0x0e, 0x63, 0x27, 0x0c, 0x1d, 0xcb, 0x0e, 0x83, 0x34, - 0x6e, 0x82, 0x48, 0xa8, 0x03, 0x34, 0x97, 0x5e, 0xec, 0x06, 0x29, 0xdc, 0x58, 0x85, 0x4b, 0xbb, - 0x68, 0xd1, 0x16, 0x15, 0xd6, 0xe4, 0x9a, 0x66, 0x2c, 0x72, 0xd9, 0xdd, 0x95, 0x63, 0xe5, 0xd0, - 0x02, 0xed, 0x0b, 0xf4, 0x05, 0x72, 0xe8, 0xa1, 0xef, 0xd2, 0x63, 0x2e, 0x05, 0x7a, 0x2c, 0xec, - 0x17, 0x29, 0xb8, 0x5c, 0x2d, 0x49, 0x59, 0xa4, 0xa5, 0xa0, 0x28, 0x7a, 0xd3, 0x0e, 0xbf, 0x99, - 0xf9, 0xbe, 0x99, 0x15, 0x67, 0x40, 0x58, 0x75, 0x50, 0xe8, 0x87, 0xb8, 0xed, 0x1c, 0x23, 0x3f, - 0x6c, 0x32, 0x4e, 0x28, 0xf2, 0x70, 0x93, 0x9f, 0x35, 0x22, 0x4a, 0x38, 0xd1, 0x97, 0xb2, 0x8f, - 0x1b, 0xf2, 0xb1, 0xf5, 0xa7, 0x06, 0xd7, 0x5a, 0xcc, 0xdb, 0x23, 0x8c, 0x3f, 0xf7, 0x3b, 0x58, - 0x37, 0x60, 0xd6, 0xa1, 0x18, 0x71, 0x42, 0x0d, 0x6d, 0x5d, 0xdb, 0xa8, 0xda, 0xfd, 0xa3, 0x7e, - 0x13, 0x66, 0x02, 0x4c, 0x4f, 0x3a, 0xd8, 0x98, 0x5c, 0xd7, 0x36, 0x6a, 0xb6, 0x3c, 0xe9, 0x2b, - 0x50, 0x3d, 0xf2, 0x3b, 0xb8, 0xcd, 0xfc, 0xd7, 0xd8, 0xa8, 0xac, 0x6b, 0x1b, 0x15, 0x7b, 0x2e, - 0x36, 0xec, 0xfb, 0xaf, 0xb1, 0x7e, 0x1f, 0x16, 0x22, 0x4a, 0xc8, 0x51, 0xdb, 0x0f, 0x39, 0xa6, - 0xa7, 0xa8, 0x63, 0x4c, 0x09, 0xc4, 0xbc, 0xb0, 0xee, 0x48, 0xa3, 0xbe, 0x0a, 0x90, 0xc0, 0x78, - 0x2f, 0xc2, 0xc6, 0xb4, 0x80, 0x54, 0x85, 0xe5, 0xa0, 0x17, 0xe1, 0xf8, 0x71, 0x80, 0xce, 0xda, - 0xc2, 0xc0, 0x8c, 0x99, 0xe4, 0x71, 0x80, 0xce, 0xf6, 0x84, 0x41, 0xd7, 0x61, 0x2a, 0x24, 0x1c, - 0x1b, 0xb3, 0x82, 0xb0, 0xf8, 0x6d, 0x2d, 0xc3, 0x8d, 0x8c, 0x2c, 0x1b, 0xb3, 0x88, 0x84, 0x0c, - 0x5b, 0x6f, 0x34, 0xa8, 0x49, 0xbb, 0x70, 0x2e, 0xd1, 0xab, 0xc3, 0x94, 0xcf, 0x71, 0x20, 0xd4, - 0x56, 0x6d, 0xf1, 0x3b, 0xd6, 0x7a, 0x8c, 0xd8, 0x71, 0xbb, 0xe3, 0x33, 0x2e, 0xb4, 0xd6, 0xec, - 0xb9, 0xd8, 0xb0, 0xeb, 0x33, 0x9e, 0x29, 0xd0, 0x54, 0xae, 0x40, 0x4b, 0x30, 0x4d, 0x5e, 0x85, - 0x98, 0x0a, 0x5d, 0x55, 0x3b, 0x39, 0xc4, 0x56, 0xc6, 0x11, 0xe5, 0x52, 0x4e, 0x72, 0xb0, 0x0e, - 0x60, 0x29, 0x4b, 0xaf, 0xcf, 0x3b, 0xa6, 0xc9, 0xba, 0x8e, 0x83, 0x19, 0x13, 0x34, 0xe7, 0xec, - 0xfe, 0x51, 0xb7, 0xa0, 0x86, 0x29, 0x25, 0xb4, 0x85, 0x19, 0x43, 0x1e, 0x96, 0x74, 0x73, 0x36, - 0xeb, 0x2b, 0x98, 0x6f, 0x31, 0xef, 0x19, 0xee, 0x60, 0x8e, 0xdf, 0xb1, 0xcb, 0x8a, 0x6e, 0x25, - 0x4b, 0xf7, 0x16, 0x2c, 0xe7, 0x02, 0xab, 0x3a, 0x7f, 0x0c, 0x8b, 0x2d, 0xe6, 0xed, 0xe3, 0x58, - 0xc6, 0xa9, 0xef, 0x62, 0xba, 0xb3, 0x57, 0x92, 0x74, 0x01, 0x26, 0xfd, 0x48, 0x32, 0x9f, 0xf4, - 0x23, 0xcb, 0x04, 0x63, 0xd0, 0x5b, 0x45, 0x7e, 0x21, 0x52, 0x66, 0x9e, 0xbd, 0xc0, 0xbd, 0x43, - 0xc4, 0xca, 0x34, 0x19, 0x30, 0x7b, 0x92, 0x80, 0x64, 0x8e, 0xfe, 0xd1, 0x5a, 0x83, 0xd5, 0xa1, - 0xc1, 0x54, 0xb6, 0xcf, 0x06, 0x99, 0x1c, 0x10, 0x8e, 0x3a, 0x2c, 0x42, 0x4e, 0x59, 0xc2, 0xb8, - 0x58, 0x31, 0x44, 0xa6, 0x4b, 0x0e, 0x96, 0x05, 0xeb, 0x45, 0xb1, 0x54, 0xbe, 0xcf, 0x45, 0xa7, - 0xb6, 0x5c, 0xf7, 0x93, 0x0e, 0xf2, 0x03, 0x4c, 0x4b, 0x92, 0xdc, 0x83, 0x79, 0x27, 0x06, 0xb5, - 0x91, 0xeb, 0xd2, 0xf8, 0x62, 0xc8, 0xce, 0x0b, 0xe3, 0x56, 0x62, 0x93, 0x0d, 0x4a, 0xe3, 0xa9, - 0x44, 0x5f, 0x88, 0x06, 0xd9, 0x38, 0x20, 0xa7, 0xf8, 0x5f, 0xca, 0x95, 0x74, 0x2d, 0x17, 0x52, - 0xa5, 0xeb, 0xc2, 0x7b, 0x2d, 0xe6, 0xed, 0x84, 0xbe, 0x12, 0x3f, 0xfa, 0x75, 0xc8, 0xf6, 0xaf, - 0x92, 0xeb, 0x9f, 0x5e, 0x07, 0xe0, 0xaa, 0x88, 0xe2, 0x6f, 0x57, 0xb5, 0x33, 0x16, 0xeb, 0x36, - 0xdc, 0x1a, 0x48, 0xab, 0x18, 0x35, 0xc5, 0x0b, 0x62, 0xff, 0xb8, 0xcb, 0x5d, 0xf2, 0x2a, 0xbc, - 0x9a, 0x95, 0xb5, 0x0a, 0x2b, 0x43, 0x1c, 0x54, 0xbc, 0xdf, 0x34, 0xd1, 0xba, 0xed, 0x6e, 0x6f, - 0x3f, 0x79, 0xb5, 0x96, 0x08, 0x5c, 0x83, 0x6b, 0x47, 0x84, 0x0e, 0x14, 0x13, 0x8e, 0x08, 0x95, - 0xa5, 0xd4, 0x4d, 0x98, 0x73, 0xbb, 0x14, 0x71, 0x9f, 0x84, 0x52, 0xb2, 0x3a, 0xc7, 0x97, 0xeb, - 0xb0, 0xc7, 0x31, 0x93, 0x72, 0x93, 0x43, 0xdc, 0xa1, 0x08, 0xf5, 0x02, 0x1c, 0xf2, 0xb6, 0x8b, - 0x43, 0x12, 0xc8, 0x97, 0x4d, 0x4d, 0x1a, 0x9f, 0xc5, 0x36, 0x79, 0x1b, 0x52, 0x8a, 0x8a, 0xfc, - 0x77, 0x82, 0xbb, 0x68, 0xda, 0x3e, 0xa7, 0xa8, 0x57, 0xc2, 0x7d, 0x11, 0x2a, 0x8e, 0xef, 0x4a, - 0xce, 0xf1, 0xcf, 0x41, 0x35, 0x95, 0x41, 0x35, 0x32, 0x6d, 0x1a, 0x5d, 0xa5, 0xfd, 0x5d, 0x83, - 0xeb, 0x2d, 0xe6, 0x7d, 0x19, 0x79, 0x14, 0xb9, 0xf8, 0xff, 0x5b, 0xb7, 0x15, 0xb8, 0x7d, 0x89, - 0xa6, 0x12, 0xf1, 0xa9, 0x78, 0x68, 0xe3, 0x1f, 0xba, 0x98, 0xf1, 0x2d, 0xce, 0x31, 0xe3, 0x22, - 0xe1, 0x73, 0x42, 0x83, 0x71, 0xea, 0x68, 0xfd, 0xa2, 0xc1, 0xdd, 0xc2, 0x48, 0x6a, 0x12, 0xdc, - 0x81, 0x78, 0x30, 0x8a, 0xbb, 0x17, 0xcf, 0x82, 0xca, 0x46, 0xd5, 0x4e, 0x0d, 0xd9, 0x39, 0x31, - 0x99, 0x9f, 0x13, 0x4b, 0x30, 0x2d, 0x66, 0x82, 0xac, 0x4b, 0x72, 0xe8, 0xb3, 0x98, 0x4a, 0x59, - 0x3c, 0x85, 0x6a, 0xfc, 0xc6, 0x10, 0xd9, 0xc7, 0xa2, 0x7f, 0x43, 0xf4, 0x32, 0x71, 0x54, 0xc5, - 0xd9, 0x16, 0xf3, 0x4c, 0x4a, 0xb2, 0x71, 0x44, 0x28, 0x1f, 0xbb, 0x2e, 0x3f, 0xc2, 0x9d, 0x61, - 0x31, 0xfe, 0xe3, 0x8a, 0x24, 0x89, 0xdf, 0xa1, 0x22, 0x89, 0x63, 0x9f, 0xed, 0xe6, 0x9b, 0x79, - 0xa8, 0xb4, 0x98, 0xa7, 0x7f, 0x0d, 0x73, 0x6a, 0xe9, 0xba, 0xdb, 0x18, 0xb6, 0x9b, 0x35, 0x32, - 0x0b, 0x8c, 0xf9, 0xc1, 0x95, 0x10, 0x55, 0x8f, 0x6f, 0xa1, 0x9a, 0xee, 0x37, 0x56, 0xa9, 0x9f, - 0xc0, 0x98, 0x0f, 0xaf, 0xc6, 0xa8, 0xe0, 0xdf, 0x03, 0x64, 0xf6, 0x88, 0x7b, 0x85, 0x9e, 0x29, - 0xc8, 0x7c, 0x34, 0x02, 0x48, 0xc5, 0xf7, 0x60, 0x3e, 0xbf, 0x35, 0xbc, 0x5f, 0xe8, 0x9d, 0xc3, - 0x99, 0x8d, 0xd1, 0x70, 0x2a, 0xd1, 0x29, 0xe8, 0x43, 0x96, 0x88, 0x47, 0xa3, 0x44, 0x91, 0x60, - 0xf3, 0xc9, 0x18, 0x60, 0x95, 0xf7, 0x27, 0x58, 0x1e, 0xbe, 0x4e, 0x8c, 0x24, 0x20, 0xc5, 0x9b, - 0x1f, 0x8d, 0x87, 0x57, 0x04, 0x5c, 0xa8, 0xe5, 0xe6, 0xf0, 0xfd, 0xc2, 0x38, 0x59, 0x98, 0xf9, - 0x78, 0x24, 0x98, 0xca, 0x12, 0xc1, 0xe2, 0xa5, 0xd9, 0x5a, 0x7c, 0x87, 0x07, 0xa1, 0xe6, 0x87, - 0x23, 0x43, 0xb3, 0x37, 0x33, 0x33, 0x7c, 0x8b, 0x6f, 0x66, 0x0a, 0x2a, 0xb9, 0x99, 0x97, 0x67, - 0xa4, 0xfe, 0x12, 0x16, 0x06, 0x06, 0xd5, 0x83, 0x42, 0xf7, 0x3c, 0xd0, 0x6c, 0x8e, 0x08, 0x54, - 0xb9, 0x8e, 0x40, 0xdf, 0x72, 0xdd, 0xbe, 0xc4, 0xfe, 0x7e, 0x56, 0xac, 0x29, 0x5d, 0xf0, 0x4a, - 0x34, 0x5d, 0xde, 0x02, 0x75, 0x02, 0xcb, 0xc9, 0xbe, 0x36, 0x98, 0xaa, 0xf8, 0x5f, 0x97, 0xdb, - 0xef, 0x4a, 0xfe, 0x75, 0x43, 0xf7, 0x40, 0xfd, 0x67, 0x0d, 0x6e, 0x16, 0x8c, 0xca, 0x66, 0x49, - 0xa8, 0x61, 0x0e, 0xe6, 0xd3, 0x31, 0x1d, 0x14, 0x09, 0x1b, 0x66, 0xe4, 0x7c, 0x5b, 0x2b, 0x2e, - 0x96, 0x00, 0x98, 0x0f, 0xae, 0x00, 0xa8, 0x98, 0x0c, 0xae, 0x5f, 0x9e, 0x72, 0x0f, 0xaf, 0x62, - 0x98, 0x62, 0xcd, 0xcd, 0xd1, 0xb1, 0x59, 0x21, 0x72, 0x2c, 0xad, 0x95, 0x78, 0xc7, 0x80, 0x12, - 0x21, 0xf9, 0xf9, 0xb4, 0xbd, 0xfb, 0xc7, 0x79, 0x5d, 0x7b, 0x7b, 0x5e, 0xd7, 0xfe, 0x3e, 0xaf, - 0x6b, 0xbf, 0x5e, 0xd4, 0x27, 0xde, 0x5e, 0xd4, 0x27, 0xfe, 0xba, 0xa8, 0x4f, 0x7c, 0xb3, 0xe9, - 0xf9, 0xfc, 0xb8, 0x7b, 0xd8, 0x70, 0x48, 0xd0, 0x7c, 0x89, 0x9c, 0x13, 0xd4, 0xd9, 0x45, 0x87, - 0xac, 0x99, 0xc4, 0x7d, 0x9c, 0x7c, 0x75, 0x38, 0x4b, 0xbf, 0x3b, 0xf4, 0x22, 0xcc, 0x0e, 0x67, - 0xc4, 0xb7, 0x87, 0x27, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xc4, 0xf6, 0x9c, 0x76, 0x9c, 0x10, - 0x00, 0x00, + // 1181 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4d, 0x6f, 0xdb, 0x46, + 0x10, 0x35, 0x2d, 0xf9, 0x43, 0x13, 0xd9, 0x75, 0x18, 0x3b, 0x51, 0xe8, 0x58, 0x76, 0x18, 0xa4, + 0x71, 0x13, 0x44, 0x42, 0x1d, 0xa0, 0xbd, 0xf4, 0xe2, 0x34, 0x08, 0xe0, 0xc6, 0x2a, 0x5c, 0xda, + 0x45, 0x8b, 0xb6, 0xa8, 0xb0, 0x16, 0xd7, 0x34, 0x63, 0x91, 0xcb, 0xec, 0xae, 0x1c, 0x2b, 0x97, + 0xa2, 0x3d, 0xf7, 0xd0, 0x3f, 0x90, 0x43, 0x0f, 0xfd, 0x2f, 0x3d, 0xe6, 0x52, 0xa0, 0xc7, 0xc2, + 0xfe, 0x23, 0x05, 0x97, 0xab, 0x25, 0x29, 0x91, 0x94, 0x1c, 0x34, 0x68, 0x6e, 0xda, 0xe1, 0xdb, + 0x79, 0xef, 0xed, 0xac, 0x38, 0x03, 0xc2, 0x5a, 0x07, 0xf9, 0xae, 0x8f, 0xdb, 0x9d, 0x63, 0xe4, + 0xfa, 0x4d, 0xc6, 0x09, 0x45, 0x0e, 0x6e, 0xf2, 0xb3, 0x46, 0x40, 0x09, 0x27, 0xfa, 0x72, 0xf2, + 0x71, 0x43, 0x3e, 0x36, 0xff, 0xd2, 0xe0, 0x4a, 0x8b, 0x39, 0x7b, 0x84, 0xf1, 0xa7, 0x6e, 0x17, + 0xeb, 0x35, 0x98, 0xeb, 0x50, 0x8c, 0x38, 0xa1, 0x35, 0x6d, 0x43, 0xdb, 0xac, 0x58, 0x83, 0xa5, + 0x7e, 0x1d, 0x66, 0x3d, 0x4c, 0x4f, 0xba, 0xb8, 0x36, 0xbd, 0xa1, 0x6d, 0x56, 0x2d, 0xb9, 0xd2, + 0x57, 0xa1, 0x72, 0xe4, 0x76, 0x71, 0x9b, 0xb9, 0xaf, 0x70, 0xad, 0xb4, 0xa1, 0x6d, 0x96, 0xac, + 0xf9, 0x30, 0xb0, 0xef, 0xbe, 0xc2, 0xfa, 0x5d, 0x58, 0x0c, 0x28, 0x21, 0x47, 0x6d, 0xd7, 0xe7, + 0x98, 0x9e, 0xa2, 0x6e, 0xad, 0x2c, 0x10, 0x0b, 0x22, 0xba, 0x23, 0x83, 0xfa, 0x1a, 0x40, 0x04, + 0xe3, 0xfd, 0x00, 0xd7, 0x66, 0x04, 0xa4, 0x22, 0x22, 0x07, 0xfd, 0x00, 0x87, 0x8f, 0x3d, 0x74, + 0xd6, 0x16, 0x01, 0x56, 0x9b, 0x8d, 0x1e, 0x7b, 0xe8, 0x6c, 0x4f, 0x04, 0x74, 0x1d, 0xca, 0x3e, + 0xe1, 0xb8, 0x36, 0x27, 0x04, 0x8b, 0xdf, 0xe6, 0x0a, 0x5c, 0x4b, 0xd8, 0xb2, 0x30, 0x0b, 0x88, + 0xcf, 0xb0, 0xf9, 0x5a, 0x83, 0xaa, 0x8c, 0x8b, 0xcd, 0x05, 0x7e, 0x75, 0x28, 0xbb, 0x1c, 0x7b, + 0xc2, 0x6d, 0xc5, 0x12, 0xbf, 0x43, 0xaf, 0xc7, 0x88, 0x1d, 0xb7, 0xbb, 0x2e, 0xe3, 0xc2, 0x6b, + 0xd5, 0x9a, 0x0f, 0x03, 0xbb, 0x2e, 0xe3, 0x89, 0x03, 0x2a, 0xa7, 0x0e, 0x68, 0x19, 0x66, 0xc8, + 0x4b, 0x1f, 0x53, 0xe1, 0xab, 0x62, 0x45, 0x8b, 0x30, 0xca, 0x38, 0xa2, 0x5c, 0xda, 0x89, 0x16, + 0xe6, 0x01, 0x2c, 0x27, 0xe5, 0x0d, 0x74, 0x87, 0x32, 0x59, 0xaf, 0xd3, 0xc1, 0x8c, 0x09, 0x99, + 0xf3, 0xd6, 0x60, 0xa9, 0x9b, 0x50, 0xc5, 0x94, 0x12, 0xda, 0xc2, 0x8c, 0x21, 0x07, 0x4b, 0xb9, + 0xa9, 0x98, 0xf9, 0x0d, 0x2c, 0xb4, 0x98, 0xf3, 0x04, 0x77, 0x31, 0xc7, 0x6f, 0x59, 0x65, 0x25, + 0xb7, 0x94, 0x94, 0x7b, 0x03, 0x56, 0x52, 0x89, 0xd5, 0x39, 0x7f, 0x06, 0x4b, 0x2d, 0xe6, 0xec, + 0xe3, 0xd0, 0xc6, 0xa9, 0x6b, 0x63, 0xba, 0xb3, 0x57, 0x40, 0xba, 0x08, 0xd3, 0x6e, 0x20, 0x95, + 0x4f, 0xbb, 0x81, 0x69, 0x40, 0x6d, 0x78, 0xb7, 0xca, 0xfc, 0x4c, 0x50, 0x26, 0x9e, 0x3d, 0xc3, + 0xfd, 0x43, 0xc4, 0x8a, 0x3c, 0xd5, 0x60, 0xee, 0x24, 0x02, 0x49, 0x8e, 0xc1, 0xd2, 0x5c, 0x87, + 0xb5, 0xcc, 0x64, 0x8a, 0xed, 0x8b, 0x61, 0x25, 0x07, 0x84, 0xa3, 0x2e, 0x0b, 0x50, 0xa7, 0x88, + 0x30, 0x3c, 0xac, 0x10, 0x22, 0xe9, 0xa2, 0x85, 0x69, 0xc2, 0x46, 0x5e, 0x2e, 0xc5, 0xf7, 0xa5, + 0xa8, 0xd4, 0xb6, 0x6d, 0x7f, 0xde, 0x45, 0xae, 0x87, 0x69, 0x01, 0xc9, 0x1d, 0x58, 0xe8, 0x84, + 0xa0, 0x36, 0xb2, 0x6d, 0x1a, 0x5e, 0x0c, 0x59, 0x79, 0x11, 0xdc, 0x8e, 0x62, 0xb2, 0x40, 0x71, + 0x3e, 0x45, 0xf4, 0x95, 0x28, 0x90, 0x85, 0x3d, 0x72, 0x8a, 0xff, 0x23, 0xae, 0xa8, 0x6a, 0xa9, + 0x94, 0x8a, 0xae, 0x07, 0x1f, 0xb4, 0x98, 0xb3, 0xe3, 0xbb, 0xca, 0xfc, 0xe4, 0xd7, 0x21, 0x59, + 0xbf, 0x52, 0xaa, 0x7e, 0x7a, 0x1d, 0x80, 0xab, 0x43, 0x14, 0x7f, 0xbb, 0x8a, 0x95, 0x88, 0x98, + 0x37, 0xe1, 0xc6, 0x10, 0xad, 0x52, 0xd4, 0x14, 0x2f, 0x88, 0xfd, 0xe3, 0x1e, 0xb7, 0xc9, 0x4b, + 0x7f, 0xbc, 0x2a, 0x73, 0x0d, 0x56, 0x33, 0x36, 0xa8, 0x7c, 0xbf, 0x6b, 0xa2, 0x74, 0x8f, 0x7b, + 0xfd, 0xfd, 0xe8, 0xd5, 0x5a, 0x60, 0x70, 0x1d, 0xae, 0x1c, 0x11, 0x3a, 0x74, 0x98, 0x70, 0x44, + 0xa8, 0x3c, 0x4a, 0xdd, 0x80, 0x79, 0xbb, 0x47, 0x11, 0x77, 0x89, 0x2f, 0x2d, 0xab, 0x75, 0x78, + 0xb9, 0x0e, 0xfb, 0x1c, 0x33, 0x69, 0x37, 0x5a, 0x84, 0x15, 0x0a, 0x50, 0xdf, 0xc3, 0x3e, 0x6f, + 0xdb, 0xd8, 0x27, 0x9e, 0x7c, 0xd9, 0x54, 0x65, 0xf0, 0x49, 0x18, 0x93, 0xb7, 0x21, 0x96, 0xa8, + 0xc4, 0xff, 0x20, 0xb4, 0x8b, 0xa2, 0xed, 0x73, 0x8a, 0xfa, 0x05, 0xda, 0x97, 0xa0, 0xd4, 0x71, + 0x6d, 0xa9, 0x39, 0xfc, 0x39, 0xec, 0xa6, 0x34, 0xec, 0x46, 0xd2, 0xc6, 0xd9, 0x15, 0xed, 0x1f, + 0x1a, 0x5c, 0x6d, 0x31, 0xe7, 0xeb, 0xc0, 0xa1, 0xc8, 0xc6, 0xef, 0xef, 0xb9, 0xad, 0xc2, 0xcd, + 0x11, 0x99, 0xca, 0x44, 0x5f, 0x3c, 0xb4, 0xf0, 0x8b, 0x1e, 0x66, 0x7c, 0x9b, 0x73, 0xcc, 0xb8, + 0x20, 0x7c, 0x4a, 0xa8, 0xf7, 0x76, 0x2f, 0xda, 0xa8, 0x5b, 0x94, 0x32, 0xbb, 0x45, 0x39, 0xf9, + 0xfa, 0x7d, 0x01, 0xb7, 0x73, 0xa9, 0x55, 0xeb, 0xb8, 0x05, 0x61, 0x27, 0x15, 0x97, 0x35, 0x6c, + 0x1e, 0xa5, 0xcd, 0x8a, 0x15, 0x07, 0x92, 0x8d, 0x65, 0x3a, 0xdd, 0x58, 0x96, 0x61, 0x46, 0x34, + 0x91, 0x81, 0x10, 0xb1, 0x30, 0x7f, 0xd6, 0xa0, 0x12, 0xbe, 0x51, 0x04, 0x59, 0xb1, 0xbd, 0x90, + 0x04, 0x53, 0x59, 0x25, 0xb9, 0x4a, 0xd8, 0x2e, 0x65, 0xdb, 0x2e, 0x67, 0xda, 0x9e, 0x49, 0xda, + 0xbe, 0x26, 0x6e, 0x4d, 0x24, 0x41, 0x95, 0xe1, 0x57, 0x4d, 0xb4, 0x4e, 0x79, 0x18, 0x16, 0x0e, + 0x08, 0xe5, 0xe3, 0x4b, 0xf0, 0xce, 0x34, 0x76, 0xe1, 0x56, 0x96, 0x9a, 0x77, 0x5b, 0x95, 0x88, + 0xe7, 0x7f, 0xad, 0x4a, 0x24, 0x61, 0x60, 0x73, 0xeb, 0xf5, 0x02, 0x94, 0x5a, 0xcc, 0xd1, 0xbf, + 0x85, 0x79, 0x35, 0x62, 0xde, 0x6e, 0x64, 0x4d, 0xa2, 0x8d, 0xc4, 0xb8, 0x66, 0x7c, 0x34, 0x16, + 0xa2, 0x0e, 0xf2, 0x7b, 0xa8, 0xc4, 0xd3, 0x9c, 0x59, 0xb8, 0x4f, 0x60, 0x8c, 0xfb, 0xe3, 0x31, + 0x2a, 0xf9, 0x8f, 0x00, 0x89, 0xa9, 0xe9, 0x4e, 0xee, 0xce, 0x18, 0x64, 0x3c, 0x98, 0x00, 0xa4, + 0xf2, 0x3b, 0xb0, 0x90, 0x9e, 0x91, 0x3e, 0xcc, 0xdd, 0x9d, 0xc2, 0x19, 0x8d, 0xc9, 0x70, 0x8a, + 0xe8, 0x14, 0xf4, 0x8c, 0x91, 0xe9, 0xc1, 0x24, 0x59, 0x24, 0xd8, 0x78, 0x74, 0x09, 0xb0, 0xe2, + 0xfd, 0x09, 0x56, 0xb2, 0x87, 0xa7, 0x89, 0x0c, 0xc4, 0x78, 0xe3, 0x93, 0xcb, 0xe1, 0x95, 0x00, + 0x1b, 0xaa, 0xa9, 0xa9, 0xe3, 0x6e, 0x6e, 0x9e, 0x24, 0xcc, 0x78, 0x38, 0x11, 0x4c, 0xb1, 0x04, + 0xb0, 0x34, 0x32, 0x49, 0xe4, 0xdf, 0xe1, 0x61, 0xa8, 0xf1, 0xf1, 0xc4, 0xd0, 0xe4, 0xcd, 0x4c, + 0x8c, 0x1a, 0xf9, 0x37, 0x33, 0x06, 0x15, 0xdc, 0xcc, 0xd1, 0x89, 0x40, 0x7f, 0x0e, 0x8b, 0x43, + 0x6d, 0xf9, 0x5e, 0xee, 0xf6, 0x34, 0xd0, 0x68, 0x4e, 0x08, 0x54, 0x5c, 0x47, 0xa0, 0x6f, 0xdb, + 0xf6, 0xc0, 0xe2, 0x60, 0x1a, 0xcd, 0xf7, 0x14, 0x8f, 0xb3, 0x05, 0x9e, 0x46, 0x67, 0x5e, 0x9d, + 0xc0, 0x4a, 0x34, 0x9d, 0x0e, 0x53, 0xe5, 0xff, 0xeb, 0x52, 0xd3, 0x6c, 0xc1, 0xbf, 0x2e, 0x73, + 0xea, 0xd5, 0x7f, 0xd1, 0xe0, 0x7a, 0xce, 0x60, 0xd0, 0x2c, 0x48, 0x95, 0xb5, 0xc1, 0xf8, 0xf4, + 0x92, 0x1b, 0x94, 0x08, 0x0b, 0x66, 0x65, 0xb7, 0x5e, 0xcf, 0x3f, 0x2c, 0x01, 0x30, 0xee, 0x8d, + 0x01, 0xa8, 0x9c, 0x0c, 0xae, 0x8e, 0x36, 0xda, 0xfb, 0xe3, 0x14, 0xc6, 0x58, 0x63, 0x6b, 0x72, + 0x6c, 0xd2, 0x88, 0x6c, 0x70, 0xeb, 0x05, 0xbb, 0x43, 0x40, 0x81, 0x91, 0x74, 0x7f, 0x7a, 0xbc, + 0xfb, 0xe7, 0x79, 0x5d, 0x7b, 0x73, 0x5e, 0xd7, 0xfe, 0x39, 0xaf, 0x6b, 0xbf, 0x5d, 0xd4, 0xa7, + 0xde, 0x5c, 0xd4, 0xa7, 0xfe, 0xbe, 0xa8, 0x4f, 0x7d, 0xb7, 0xe5, 0xb8, 0xfc, 0xb8, 0x77, 0xd8, + 0xe8, 0x10, 0xaf, 0xf9, 0x1c, 0x75, 0x4e, 0x50, 0x77, 0x17, 0x1d, 0xb2, 0x66, 0x94, 0xf7, 0x61, + 0xf4, 0x8d, 0xe5, 0x2c, 0xfe, 0xca, 0xd2, 0x0f, 0x30, 0x3b, 0x9c, 0x15, 0x5f, 0x5a, 0x1e, 0xfd, + 0x1b, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x9f, 0x01, 0x61, 0x8a, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3414,10 +3487,22 @@ func (m *MsgRequestAttestationForm) MarshalToSizedBuffer(dAtA []byte) (int, erro _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Cid))) + if m.Start != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x20 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintTx(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x1a + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintTx(dAtA, i, uint64(len(m.Merkle))) i-- dAtA[i] = 0x12 } @@ -3451,13 +3536,6 @@ func (m *MsgRequestAttestationFormResponse) MarshalToSizedBuffer(dAtA []byte) (i _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Cid))) - i-- - dAtA[i] = 0x22 - } if len(m.Error) > 0 { i -= len(m.Error) copy(dAtA[i:], m.Error) @@ -3507,10 +3585,29 @@ func (m *MsgAttest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Cid))) + if m.Start != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x28 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintTx(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x22 + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintTx(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x1a + } + if len(m.Prover) > 0 { + i -= len(m.Prover) + copy(dAtA[i:], m.Prover) + i = encodeVarintTx(dAtA, i, uint64(len(m.Prover))) i-- dAtA[i] = 0x12 } @@ -3567,10 +3664,29 @@ func (m *MsgRequestReportForm) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Cid))) + if m.Start != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x28 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintTx(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x22 + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintTx(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x1a + } + if len(m.Prover) > 0 { + i -= len(m.Prover) + copy(dAtA[i:], m.Prover) + i = encodeVarintTx(dAtA, i, uint64(len(m.Prover))) i-- dAtA[i] = 0x12 } @@ -3604,13 +3720,6 @@ func (m *MsgRequestReportFormResponse) MarshalToSizedBuffer(dAtA []byte) (int, e _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Cid))) - i-- - dAtA[i] = 0x22 - } if len(m.Error) > 0 { i -= len(m.Error) copy(dAtA[i:], m.Error) @@ -3660,10 +3769,29 @@ func (m *MsgReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintTx(dAtA, i, uint64(len(m.Cid))) + if m.Start != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x28 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintTx(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x22 + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintTx(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x1a + } + if len(m.Prover) > 0 { + i -= len(m.Prover) + copy(dAtA[i:], m.Prover) + i = encodeVarintTx(dAtA, i, uint64(len(m.Prover))) i-- dAtA[i] = 0x12 } @@ -4132,10 +4260,17 @@ func (m *MsgRequestAttestationForm) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Cid) + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Owner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } + if m.Start != 0 { + n += 1 + sovTx(uint64(m.Start)) + } return n } @@ -4158,10 +4293,6 @@ func (m *MsgRequestAttestationFormResponse) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } return n } @@ -4175,10 +4306,21 @@ func (m *MsgAttest) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Cid) + l = len(m.Prover) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Owner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } + if m.Start != 0 { + n += 1 + sovTx(uint64(m.Start)) + } return n } @@ -4201,10 +4343,21 @@ func (m *MsgRequestReportForm) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Cid) + l = len(m.Prover) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Owner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } + if m.Start != 0 { + n += 1 + sovTx(uint64(m.Start)) + } return n } @@ -4227,10 +4380,6 @@ func (m *MsgRequestReportFormResponse) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } return n } @@ -4244,10 +4393,21 @@ func (m *MsgReport) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Cid) + l = len(m.Prover) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Owner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } + if m.Start != 0 { + n += 1 + sovTx(uint64(m.Start)) + } return n } @@ -7019,9 +7179,9 @@ func (m *MsgRequestAttestationForm) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -7031,24 +7191,77 @@ func (m *MsgRequestAttestationForm) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -7183,38 +7396,6 @@ func (m *MsgRequestAttestationFormResponse) Unmarshal(dAtA []byte) error { } m.Error = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -7299,7 +7480,7 @@ func (m *MsgAttest) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Prover", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7327,8 +7508,93 @@ func (m *MsgAttest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Prover = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -7463,7 +7729,7 @@ func (m *MsgRequestReportForm) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Prover", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7491,8 +7757,93 @@ func (m *MsgRequestReportForm) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Prover = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -7627,38 +7978,6 @@ func (m *MsgRequestReportFormResponse) Unmarshal(dAtA []byte) error { } m.Error = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -7743,7 +8062,7 @@ func (m *MsgReport) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Prover", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7771,8 +8090,93 @@ func (m *MsgReport) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Cid = string(dAtA[iNdEx:postIndex]) + m.Prover = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) From b2b2238292cfe14d444f68dc78df4c04f6703bf0 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 19 Oct 2023 20:06:15 -0400 Subject: [PATCH 024/256] =?UTF-8?q?linting=20=F0=9F=98=AAshould=20be=20onl?= =?UTF-8?q?y=20tests=20to=20fix=20for=20now?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/upgrades/recovery/upgrades.go | 46 -- app/upgrades/testnet/async/upgrades.go | 75 --- app/upgrades/testnet/fixstrays/store.go | 26 - app/upgrades/testnet/fixstrays/upgrades.go | 78 --- app/upgrades/testnet/killdeals/upgrades.go | 65 -- app/upgrades/testnet/params/upgrades.go | 83 --- app/upgrades/v4/README.md | 7 + app/upgrades/v4/flow_post_file.png | Bin 0 -> 216788 bytes proto/canine_chain/storage/query.proto | 4 +- proto/canine_chain/storage/tx.proto | 4 +- x/storage/abci.go | 13 +- x/storage/client/cli/query_find_file.go | 14 +- x/storage/handler.go | 1 - x/storage/keeper/active_deals.go | 1 + x/storage/keeper/files.go | 54 +- x/storage/keeper/grpc_query_active_deals.go | 2 +- x/storage/keeper/grpc_query_find_file.go | 20 +- ..._contract.go => msg_server_file_delete.go} | 0 x/storage/keeper/proofs.go | 28 +- x/storage/keeper/rewards.go | 251 ++------ x/storage/keeper/strays.go | 90 --- x/storage/keeper/utils.go | 29 +- x/storage/module_simulation.go | 78 --- x/storage/types/query.pb.go | 265 ++++----- x/storage/types/query.pb.gw.go | 18 +- x/storage/types/strays.pb.go | 558 ------------------ x/storage/types/tx.pb.go | 207 ++++--- 27 files changed, 427 insertions(+), 1590 deletions(-) delete mode 100644 app/upgrades/recovery/upgrades.go delete mode 100644 app/upgrades/testnet/async/upgrades.go delete mode 100644 app/upgrades/testnet/fixstrays/store.go delete mode 100644 app/upgrades/testnet/fixstrays/upgrades.go delete mode 100644 app/upgrades/testnet/killdeals/upgrades.go delete mode 100644 app/upgrades/testnet/params/upgrades.go create mode 100644 app/upgrades/v4/README.md create mode 100644 app/upgrades/v4/flow_post_file.png rename x/storage/keeper/{msg_server_cancel_contract.go => msg_server_file_delete.go} (100%) delete mode 100644 x/storage/keeper/strays.go delete mode 100644 x/storage/types/strays.pb.go diff --git a/app/upgrades/recovery/upgrades.go b/app/upgrades/recovery/upgrades.go deleted file mode 100644 index 5fada79b1..000000000 --- a/app/upgrades/recovery/upgrades.go +++ /dev/null @@ -1,46 +0,0 @@ -package recovery - -import ( - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - "github.com/jackalLabs/canine-chain/v3/app/upgrades" - storagekeeper "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" -) - -var _ upgrades.Upgrade = &Upgrade{} - -// Upgrade represents the v4 upgrade -type Upgrade struct { - mm *module.Manager - configurator module.Configurator - storageKeeper storagekeeper.Keeper -} - -// NewUpgrade returns a new Upgrade instance -func NewUpgrade(mm *module.Manager, configurator module.Configurator, storageKeeper storagekeeper.Keeper) *Upgrade { - return &Upgrade{ - mm: mm, - configurator: configurator, - storageKeeper: storageKeeper, - } -} - -// Name implements upgrades.Upgrade -func (u *Upgrade) Name() string { - return "recovery" -} - -// Handler implements upgrades.Upgrade -func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - u.storageKeeper.ClearDeadFiles(ctx) - return fromVM, nil - } -} - -// StoreUpgrades implements upgrades.Upgrade -func (u *Upgrade) StoreUpgrades() *storetypes.StoreUpgrades { - return &storetypes.StoreUpgrades{} -} diff --git a/app/upgrades/testnet/async/upgrades.go b/app/upgrades/testnet/async/upgrades.go deleted file mode 100644 index d7f8b191f..000000000 --- a/app/upgrades/testnet/async/upgrades.go +++ /dev/null @@ -1,75 +0,0 @@ -package async - -import ( - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - "github.com/jackalLabs/canine-chain/v3/app/upgrades" - "github.com/jackalLabs/canine-chain/v3/types" - storagemodulekeeper "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" -) - -var _ upgrades.Upgrade = &Upgrade{} - -// Upgrade represents the v4 upgrade -type Upgrade struct { - mm *module.Manager - configurator module.Configurator - storeageKeeper storagemodulekeeper.Keeper -} - -// NewUpgrade returns a new Upgrade instance -func NewUpgrade(mm *module.Manager, configurator module.Configurator, storeageKeeper storagemodulekeeper.Keeper) *Upgrade { - return &Upgrade{ - mm: mm, - configurator: configurator, - storeageKeeper: storeageKeeper, - } -} - -// Name implements upgrades.Upgrade -func (u *Upgrade) Name() string { - return "async" -} - -// Handler implements upgrades.Upgrade -func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - if types.IsTestnet(ctx.ChainID()) || ctx.ChainID() == "test" { - - newVM, err := u.mm.RunMigrations(ctx, u.configurator, fromVM) - if err != nil { - return newVM, err - } - - deals := u.storeageKeeper.GetAllActiveDeals(ctx) - for _, deal := range deals { - u.storeageKeeper.RemoveActiveDeals(ctx, deal.Cid) - } - - strays := u.storeageKeeper.GetAllStrays(ctx) - for _, stray := range strays { - u.storeageKeeper.RemoveStrays(ctx, stray.Cid) - } - - payinfo := u.storeageKeeper.GetAllStoragePaymentInfo(ctx) - for _, info := range payinfo { - u.storeageKeeper.RemoveStoragePaymentInfo(ctx, info.Address) - } - - fidcid := u.storeageKeeper.GetAllFidCid(ctx) - for _, fc := range fidcid { - u.storeageKeeper.RemoveFidCid(ctx, fc.Fid) - } - - return newVM, err - } - return fromVM, nil - } -} - -// StoreUpgrades implements upgrades.Upgrade -func (u *Upgrade) StoreUpgrades() *storetypes.StoreUpgrades { - return &storetypes.StoreUpgrades{} -} diff --git a/app/upgrades/testnet/fixstrays/store.go b/app/upgrades/testnet/fixstrays/store.go deleted file mode 100644 index 6eba97388..000000000 --- a/app/upgrades/testnet/fixstrays/store.go +++ /dev/null @@ -1,26 +0,0 @@ -package fixstrays - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -// MigrateStore performs in-place store migrations from v2 to v3 -// The things done here are the following: -// 1. setting up the next reason id and report id keys for existing subspaces -// 2. setting up the module params -func MigrateStore(ctx sdk.Context, paramsSubspace *paramstypes.Subspace) error { - ctx.Logger().Error("MIGRATING STORAGE STORE!") - // Set the module params - - var params types.Params - - paramsSubspace.GetParamSet(ctx, ¶ms) - - params.ProofWindow = 50 - - paramsSubspace.SetParamSet(ctx, ¶ms) - - return nil -} diff --git a/app/upgrades/testnet/fixstrays/upgrades.go b/app/upgrades/testnet/fixstrays/upgrades.go deleted file mode 100644 index 5557559ce..000000000 --- a/app/upgrades/testnet/fixstrays/upgrades.go +++ /dev/null @@ -1,78 +0,0 @@ -package fixstrays - -import ( - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - "github.com/jackalLabs/canine-chain/v3/app/upgrades" - "github.com/jackalLabs/canine-chain/v3/types" - storagemodulekeeper "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" - storeagemoduletypes "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -var _ upgrades.Upgrade = &Upgrade{} - -// Upgrade represents the v4 upgrade -type Upgrade struct { - mm *module.Manager - configurator module.Configurator - storeageKeeper storagemodulekeeper.Keeper -} - -// NewUpgrade returns a new Upgrade instance -func NewUpgrade(mm *module.Manager, configurator module.Configurator, storeageKeeper storagemodulekeeper.Keeper) *Upgrade { - return &Upgrade{ - mm: mm, - configurator: configurator, - storeageKeeper: storeageKeeper, - } -} - -// Name implements upgrades.Upgrade -func (u *Upgrade) Name() string { - return "fixstrays" -} - -// Handler implements upgrades.Upgrade -func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - if types.IsTestnet(ctx.ChainID()) || ctx.ChainID() == "test" { - - fromVM[storeagemoduletypes.ModuleName] = 2 - - newVM, err := u.mm.RunMigrations(ctx, u.configurator, fromVM) - if err != nil { - return newVM, err - } - - deals := u.storeageKeeper.GetAllActiveDeals(ctx) - for _, deal := range deals { - u.storeageKeeper.RemoveActiveDeals(ctx, deal.Cid) - } - - strays := u.storeageKeeper.GetAllStrays(ctx) - for _, stray := range strays { - u.storeageKeeper.RemoveStrays(ctx, stray.Cid) - } - - payinfo := u.storeageKeeper.GetAllStoragePaymentInfo(ctx) - for _, info := range payinfo { - u.storeageKeeper.RemoveStoragePaymentInfo(ctx, info.Address) - } - - fidcid := u.storeageKeeper.GetAllFidCid(ctx) - for _, fc := range fidcid { - u.storeageKeeper.RemoveFidCid(ctx, fc.Fid) - } - - return newVM, err - } - return fromVM, nil - } -} - -// StoreUpgrades implements upgrades.Upgrade -func (u *Upgrade) StoreUpgrades() *storetypes.StoreUpgrades { - return &storetypes.StoreUpgrades{} -} diff --git a/app/upgrades/testnet/killdeals/upgrades.go b/app/upgrades/testnet/killdeals/upgrades.go deleted file mode 100644 index 47210da5b..000000000 --- a/app/upgrades/testnet/killdeals/upgrades.go +++ /dev/null @@ -1,65 +0,0 @@ -package killdeals - -import ( - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - "github.com/jackalLabs/canine-chain/v3/app/upgrades" - "github.com/jackalLabs/canine-chain/v3/types" - storagemodulekeeper "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" -) - -var _ upgrades.Upgrade = &Upgrade{} - -// Upgrade represents the v4 upgrade -type Upgrade struct { - mm *module.Manager - configurator module.Configurator - storeageKeeper storagemodulekeeper.Keeper -} - -// NewUpgrade returns a new Upgrade instance -func NewUpgrade(mm *module.Manager, configurator module.Configurator, storeageKeeper storagemodulekeeper.Keeper) *Upgrade { - return &Upgrade{ - mm: mm, - configurator: configurator, - storeageKeeper: storeageKeeper, - } -} - -// Name implements upgrades.Upgrade -func (u *Upgrade) Name() string { - return "killdeals" -} - -// Handler implements upgrades.Upgrade -func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - if types.IsTestnet(ctx.ChainID()) { - - newVM, err := u.mm.RunMigrations(ctx, u.configurator, fromVM) - if err != nil { - return newVM, err - } - - deals := u.storeageKeeper.GetAllActiveDeals(ctx) - for _, deal := range deals { - u.storeageKeeper.RemoveActiveDeals(ctx, deal.Cid) - } - - strays := u.storeageKeeper.GetAllStrays(ctx) - for _, stray := range strays { - u.storeageKeeper.RemoveStrays(ctx, stray.Cid) - } - - return newVM, err - } - return fromVM, nil - } -} - -// StoreUpgrades implements upgrades.Upgrade -func (u *Upgrade) StoreUpgrades() *storetypes.StoreUpgrades { - return &storetypes.StoreUpgrades{} -} diff --git a/app/upgrades/testnet/params/upgrades.go b/app/upgrades/testnet/params/upgrades.go deleted file mode 100644 index 85e5ee135..000000000 --- a/app/upgrades/testnet/params/upgrades.go +++ /dev/null @@ -1,83 +0,0 @@ -package params - -import ( - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - "github.com/jackalLabs/canine-chain/v3/app/upgrades" - "github.com/jackalLabs/canine-chain/v3/types" - storagemodulekeeper "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" - storeagemoduletypes "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -var _ upgrades.Upgrade = &Upgrade{} - -// Upgrade represents the v4 upgrade -type Upgrade struct { - mm *module.Manager - configurator module.Configurator - storeageKeeper storagemodulekeeper.Keeper -} - -// NewUpgrade returns a new Upgrade instance -func NewUpgrade(mm *module.Manager, configurator module.Configurator, storeageKeeper storagemodulekeeper.Keeper) *Upgrade { - return &Upgrade{ - mm: mm, - configurator: configurator, - storeageKeeper: storeageKeeper, - } -} - -// Name implements upgrades.Upgrade -func (u *Upgrade) Name() string { - return "params" -} - -// Handler implements upgrades.Upgrade -func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - if types.IsTestnet(ctx.ChainID()) || ctx.ChainID() == "test" { - - fromVM[storeagemoduletypes.ModuleName] = 3 - - newVM, err := u.mm.RunMigrations(ctx, u.configurator, fromVM) - if err != nil { - return newVM, err - } - - deals := u.storeageKeeper.GetAllActiveDeals(ctx) - for _, deal := range deals { - u.storeageKeeper.RemoveActiveDeals(ctx, deal.Cid) - } - - strays := u.storeageKeeper.GetAllStrays(ctx) - for _, stray := range strays { - u.storeageKeeper.RemoveStrays(ctx, stray.Cid) - } - - payinfo := u.storeageKeeper.GetAllStoragePaymentInfo(ctx) - for _, info := range payinfo { - u.storeageKeeper.RemoveStoragePaymentInfo(ctx, info.Address) - } - - fidcid := u.storeageKeeper.GetAllFidCid(ctx) - for _, fc := range fidcid { - u.storeageKeeper.RemoveFidCid(ctx, fc.Fid) - } - - providers := u.storeageKeeper.GetAllProviders(ctx) - for _, prov := range providers { - u.storeageKeeper.RemoveProviders(ctx, prov.Address) - } - - return newVM, err - } - return fromVM, nil - } -} - -// StoreUpgrades implements upgrades.Upgrade -func (u *Upgrade) StoreUpgrades() *storetypes.StoreUpgrades { - return &storetypes.StoreUpgrades{} -} diff --git a/app/upgrades/v4/README.md b/app/upgrades/v4/README.md new file mode 100644 index 000000000..8e0a20876 --- /dev/null +++ b/app/upgrades/v4/README.md @@ -0,0 +1,7 @@ +# V4 Acacia + +For a full rundown of what v4 is and is not, head to [v4 - Acacia](https://github.com/JackalLabs/canine-chain/issues/365) on GitHub. + +## Activity Diagrams +### Post File Workflow +![Post File Workflow](./flow_post_file.png) \ No newline at end of file diff --git a/app/upgrades/v4/flow_post_file.png b/app/upgrades/v4/flow_post_file.png new file mode 100644 index 0000000000000000000000000000000000000000..d0dfa0f1e05e32c7b7edbda2cf0428b8e564fa28 GIT binary patch literal 216788 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 z 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 literal 0 HcmV?d00001 diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index d8ef162b4..cdd13de46 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -86,7 +86,7 @@ service Query { // Queries a list of FindFile items. rpc FindFile(QueryFindFileRequest) returns (QueryFindFileResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/find_file/{fid}"; + "/jackal-dao/canine-chain/storage/find_file/{merkle}"; } // Queries a list of GetClientFreeSpace items. @@ -236,7 +236,7 @@ message QueryFreespaceResponse { string space = 1; } message QueryStoreCountResponse { string count = 1; } -message QueryFindFileRequest { string fid = 1; } +message QueryFindFileRequest { bytes merkle = 1; } message QueryFindFileResponse { string provider_ips = 1; } diff --git a/proto/canine_chain/storage/tx.proto b/proto/canine_chain/storage/tx.proto index 208e09004..172f8965f 100644 --- a/proto/canine_chain/storage/tx.proto +++ b/proto/canine_chain/storage/tx.proto @@ -38,7 +38,9 @@ message MsgPostFile { string note = 7; // Misc string to store extra details. } -message MsgPostFileResponse {} +message MsgPostFileResponse { + repeated string provider_ips = 1; // list of providers that are pre-loaded into the file +} message MsgPostProof { string creator = 1; diff --git a/x/storage/abci.go b/x/storage/abci.go index d6cdf85f4..f57f7b895 100644 --- a/x/storage/abci.go +++ b/x/storage/abci.go @@ -12,16 +12,5 @@ import ( func BeginBlocker(ctx sdk.Context, k keeper.Keeper) { defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker) - err := k.HandleRewardBlock(ctx) - if err != nil { - ctx.Logger().Error(err.Error()) - } - - k.KillOldContracts(ctx) - - var week int64 = (7 * 24 * 60 * 60) / 6 - - if ctx.BlockHeight()%week == 0 { // clear out files once a week - k.ClearDeadFiles(ctx) - } + k.RunRewardBlock(ctx) } diff --git a/x/storage/client/cli/query_find_file.go b/x/storage/client/cli/query_find_file.go index 3a1f840b4..10180ce96 100644 --- a/x/storage/client/cli/query_find_file.go +++ b/x/storage/client/cli/query_find_file.go @@ -1,6 +1,7 @@ package cli import ( + "encoding/hex" "strconv" "github.com/cosmos/cosmos-sdk/client" @@ -13,11 +14,16 @@ var _ = strconv.Itoa(0) func CmdFindFile() *cobra.Command { cmd := &cobra.Command{ - Use: "find-file [fid]", - Short: "Query find-file", + Use: "find-file [merkle]", + Short: "Query the chain to find which provider a file is on", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) (err error) { - reqFid := args[0] + reqMerkle := args[0] + + merkle, err := hex.DecodeString(reqMerkle) + if err != nil { + return err + } clientCtx, err := client.GetClientTxContext(cmd) if err != nil { @@ -27,7 +33,7 @@ func CmdFindFile() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) params := &types.QueryFindFileRequest{ - Fid: reqFid, + Merkle: merkle, } res, err := queryClient.FindFile(cmd.Context(), params) diff --git a/x/storage/handler.go b/x/storage/handler.go index 71b03b504..2438146f7 100644 --- a/x/storage/handler.go +++ b/x/storage/handler.go @@ -23,7 +23,6 @@ func NewHandler(k keeper.Keeper) sdk.Handler { case *types.MsgPostProof: res, err := msgServer.PostProof(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - return sdk.WrapServiceResult(ctx, res, err) case *types.MsgSetProviderIP: res, err := msgServer.SetProviderIP(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) diff --git a/x/storage/keeper/active_deals.go b/x/storage/keeper/active_deals.go index bc4578888..1679250df 100644 --- a/x/storage/keeper/active_deals.go +++ b/x/storage/keeper/active_deals.go @@ -1,3 +1,4 @@ +//nolint:all package keeper import ( diff --git a/x/storage/keeper/files.go b/x/storage/keeper/files.go index 0437818c3..5f0efff5f 100644 --- a/x/storage/keeper/files.go +++ b/x/storage/keeper/files.go @@ -6,30 +6,30 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func (k Keeper) setFilePrimary(ctx sdk.Context, File types.UnifiedFile) { +func (k Keeper) setFilePrimary(ctx sdk.Context, file types.UnifiedFile) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FilePrimaryKeyPrefix)) - b := k.cdc.MustMarshal(&File) + b := k.cdc.MustMarshal(&file) store.Set(types.FilesPrimaryKey( - File.Merkle, - File.Owner, - File.Start, + file.Merkle, + file.Owner, + file.Start, ), b) } -func (k Keeper) setFileSecondary(ctx sdk.Context, File types.UnifiedFile) { +func (k Keeper) setFileSecondary(ctx sdk.Context, file types.UnifiedFile) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FileSecondaryKeyPrefix)) - b := k.cdc.MustMarshal(&File) + b := k.cdc.MustMarshal(&file) store.Set(types.FilesSecondaryKey( - File.Merkle, - File.Owner, - File.Start, + file.Merkle, + file.Owner, + file.Start, ), b) } // SetFile set a specific File in the store from its index -func (k Keeper) SetFile(ctx sdk.Context, File types.UnifiedFile) { - k.setFilePrimary(ctx, File) - k.setFileSecondary(ctx, File) +func (k Keeper) SetFile(ctx sdk.Context, file types.UnifiedFile) { + k.setFilePrimary(ctx, file) + k.setFileSecondary(ctx, file) } // GetFile returns a File from its index @@ -116,6 +116,34 @@ func (k Keeper) GetAllFileByMerkle(ctx sdk.Context) (list []types.UnifiedFile) { return } +// IterateFilesByMerkle iterates through every file +func (k Keeper) IterateFilesByMerkle(ctx sdk.Context, fn func(key []byte, val []byte)) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FilePrimaryKeyPrefix)) + iterator := sdk.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + fn(iterator.Key(), iterator.Value()) + } +} + +// GetAllFilesWithMerkle returns all Files that start with a specific merkle +func (k Keeper) GetAllFilesWithMerkle(ctx sdk.Context, merkle []byte) (list []types.UnifiedFile) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FilePrimaryKeyPrefix)) + iterator := sdk.KVStorePrefixIterator(store, merkle) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.UnifiedFile + k.cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} + // GetAllFileByOwner returns all File func (k Keeper) GetAllFileByOwner(ctx sdk.Context) (list []types.UnifiedFile) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FileSecondaryKeyPrefix)) diff --git a/x/storage/keeper/grpc_query_active_deals.go b/x/storage/keeper/grpc_query_active_deals.go index 7339af848..8a27b7787 100644 --- a/x/storage/keeper/grpc_query_active_deals.go +++ b/x/storage/keeper/grpc_query_active_deals.go @@ -38,7 +38,7 @@ func (k Keeper) FilesAll(c context.Context, req *types.QueryAllFilesRequest) (*t return &types.QueryAllFilesResponse{Files: activeDealss, Pagination: pageRes}, nil } -func (k Keeper) ActiveDeals(c context.Context, req *types.QueryFileRequest) (*types.QueryFileResponse, error) { +func (k Keeper) File(c context.Context, req *types.QueryFileRequest) (*types.QueryFileResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_find_file.go b/x/storage/keeper/grpc_query_find_file.go index 022915063..2eb30f620 100644 --- a/x/storage/keeper/grpc_query_find_file.go +++ b/x/storage/keeper/grpc_query_find_file.go @@ -3,6 +3,7 @@ package keeper import ( "context" "encoding/json" + "strings" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" @@ -10,20 +11,25 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) ListFiles(ctx sdk.Context, fid string) []string { - allDeals := k.GetAllActiveDeals(ctx) +func (k Keeper) ListFiles(ctx sdk.Context, merkle []byte) []string { + allDeals := k.GetAllFilesWithMerkle(ctx, merkle) - providers := []string{} + providers := make([]string, 0) - for i := 0; i < len(allDeals); i++ { - if allDeals[i].Fid == fid { - provider, ok := k.GetProviders(ctx, allDeals[i].Provider) + for _, deal := range allDeals { + proofs := deal.GetProofs() + for _, proof := range proofs { + ss := strings.Split(proof, "/") + prov := ss[0] + + provider, ok := k.GetProviders(ctx, prov) if !ok { continue } providers = append(providers, provider.Ip) } + } return providers @@ -36,7 +42,7 @@ func (k Keeper) FindFile(goCtx context.Context, req *types.QueryFindFileRequest) ctx := sdk.UnwrapSDKContext(goCtx) - ls := k.ListFiles(ctx, req.Fid) + ls := k.ListFiles(ctx, req.Merkle) ProviderIps, err := json.Marshal(ls) if err != nil { diff --git a/x/storage/keeper/msg_server_cancel_contract.go b/x/storage/keeper/msg_server_file_delete.go similarity index 100% rename from x/storage/keeper/msg_server_cancel_contract.go rename to x/storage/keeper/msg_server_file_delete.go diff --git a/x/storage/keeper/proofs.go b/x/storage/keeper/proofs.go index f51a9101a..b05b3a253 100644 --- a/x/storage/keeper/proofs.go +++ b/x/storage/keeper/proofs.go @@ -7,14 +7,14 @@ import ( ) // SetProof set a specific proof in the store from its index -func (k Keeper) SetProof(ctx sdk.Context, Proof types.FileProof) { +func (k Keeper) SetProof(ctx sdk.Context, proof types.FileProof) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProofKeyPrefix)) - b := k.cdc.MustMarshal(&Proof) + b := k.cdc.MustMarshal(&proof) store.Set(types.ProofKey( - Proof.Prover, - Proof.Merkle, - Proof.Owner, - Proof.Start, + proof.Prover, + proof.Merkle, + proof.Owner, + proof.Start, ), b) } @@ -95,3 +95,19 @@ func (k Keeper) GetAllProofs(ctx sdk.Context) (list []types.FileProof) { return } + +// GetAllProofsForProver returns all Proofs for the given prover +func (k Keeper) GetAllProofsForProver(ctx sdk.Context, prover string) (list []types.FileProof) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.ProofKeyPrefix)) + iterator := sdk.KVStorePrefixIterator(store, []byte(prover)) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.FileProof + k.cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} diff --git a/x/storage/keeper/rewards.go b/x/storage/keeper/rewards.go index 2180b7204..5d0de0910 100644 --- a/x/storage/keeper/rewards.go +++ b/x/storage/keeper/rewards.go @@ -1,245 +1,84 @@ package keeper import ( - "errors" - "fmt" - "strconv" - "time" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerror "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func getTotalSize(allDeals []types.ActiveDeals) sdk.Dec { - networkSize := sdk.NewDecFromInt(sdk.NewInt(0)) - for i := 0; i < len(allDeals); i++ { - deal := allDeals[i] - ss, err := sdk.NewDecFromStr(deal.Filesize) - if err != nil { - continue - } - networkSize = networkSize.Add(ss) - } - return networkSize -} - -func (k Keeper) manageDealReward(ctx sdk.Context, deal types.ActiveDeals, networkSize sdk.Dec, balance sdk.Coin) error { - toprove, ok := sdk.NewIntFromString(deal.Blocktoprove) - if !ok { - return sdkerror.Wrapf(sdkerror.ErrInvalidType, "int parse failed") - } - - iprove := toprove.Int64() - - totalSize, err := sdk.NewDecFromStr(deal.Filesize) - if err != nil { - return err - } - - var byteHash byte - if len(ctx.HeaderHash().Bytes()) > 2 { - byteHash = ctx.HeaderHash().Bytes()[0] + ctx.HeaderHash().Bytes()[1] + ctx.HeaderHash().Bytes()[2] - } else { - byteHash = byte(ctx.BlockHeight()) // support for running simulations - } - - d := totalSize.TruncateInt().Int64() / k.GetParams(ctx).ChunkSize - - if d > 0 { - iprove = (int64(byteHash) + int64(ctx.BlockGasMeter().GasConsumed())) % d - } - - deal.Blocktoprove = fmt.Sprintf("%d", iprove) +func (k Keeper) manageProofs(ctx sdk.Context, sizeTracker *map[string]int64, file *types.UnifiedFile, prover string) { + st := *sizeTracker - verified, errb := strconv.ParseBool(deal.Proofverified) - - if errb != nil { - return errb + proof, found := k.GetProof(ctx, prover, file.Merkle, file.Owner, file.Start) + if !found { + file.RemoveProver(ctx, k, prover) } - if !verified { - ctx.Logger().Debug("%s\n", "Not verified!") - intt, ok := sdk.NewIntFromString(deal.Proofsmissed) - if !ok { - return sdkerror.Wrapf(sdkerror.ErrInvalidType, "int parse failed") - } - - sb, ok := sdk.NewIntFromString(deal.Startblock) - if !ok { - return sdkerror.Wrapf(sdkerror.ErrInvalidType, "int parse failed") - } - - DayBlocks := k.GetParams(ctx).ProofWindow + currentHeight := ctx.BlockHeight() - if sb.Int64() >= ctx.BlockHeight()-DayBlocks { - ctx.Logger().Info("ignore young deals") - return nil - } - - misses := intt.Int64() + 1 - missesToBurn := k.GetParams(ctx).MissesToBurn - - if misses > missesToBurn { - return k.DropDeal(ctx, deal, true) - } + windowStart := currentHeight - file.ProofInterval - deal.Proofsmissed = fmt.Sprintf("%d", misses) - k.SetActiveDeals(ctx, deal) - return nil + if windowStart > proof.LastProven { // if the last time this file was proven was outside the proof window, burn their stake in the file + file.RemoveProver(ctx, k, prover) + return } - ctx.Logger().Debug(fmt.Sprintf("File size: %s\n", deal.Filesize)) - ctx.Logger().Debug(fmt.Sprintf("Total size: %d\n", networkSize)) - - nom := totalSize - - den := networkSize - - res := nom.Quo(den) - - ctx.Logger().Debug("Percentage of network space * 1000: %f\n", res) + st[prover] += file.FileSize +} - coinfloat := res.Mul(balance.Amount.ToDec()) +func (k Keeper) rewardProviders(totalSize int64, sizeTracker *map[string]int64) { + networkValue := sdk.NewDec(totalSize) - ctx.Logger().Debug("%f\n", coinfloat) - coin := sdk.NewCoin("ujkl", coinfloat.TruncateInt()) - coins := sdk.NewCoins(coin) + providersVault := sdk.NewDec(8000000) // TODO: Change this to the actual amount of tokens in the vault - provider, err := sdk.AccAddressFromBech32(deal.Provider) - if err != nil { - return err - } - ctx.Logger().Debug("Sending coins to %s\n", provider.String()) - errorr := k.bankkeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, provider, coins) - if errorr != nil { - ctx.Logger().Debug("ERR: %v\n", errorr) - ctx.Logger().Error(errorr.Error()) - return errorr - } + for prover, worth := range *sizeTracker { - ctx.Logger().Debug("%s\n", deal.Cid) + providerValue := sdk.NewDec(worth) - misses, ok := sdk.NewIntFromString(deal.Proofsmissed) - if !ok { - e := errors.New("cannot parse string") - ctx.Logger().Error(e.Error()) - return e - } - updatedMisses := misses.SubRaw(1) - - if updatedMisses.LT(sdk.NewInt(0)) { - updatedMisses = sdk.NewInt(0) - } + networkPercentage := providerValue.Quo(networkValue) - deal.Proofsmissed = updatedMisses.String() - deal.Proofverified = "false" - k.SetActiveDeals(ctx, deal) + tokensValueOwed := networkPercentage.Mul(providersVault).TruncateInt64() - ap := types.ActiveProviders{ - Address: deal.Provider, + _ = tokensValueOwed // TODO: send actual tokens from some vault address to the providers + _ = prover } - - k.SetActiveProviders(ctx, ap) - - return nil } -func (k Keeper) loopDeals(ctx sdk.Context, allDeals []types.ActiveDeals, networkSize sdk.Dec, balance sdk.Coin) { - currentBlock := ctx.BlockHeight() - for _, deal := range allDeals { - end, err := strconv.ParseInt(deal.Endblock, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } - - info, found := k.GetStoragePaymentInfo(ctx, deal.Signee) - if !found { // user has no storage plan, we'll check if the deal was made with no plan before removing it - - if end == 0 { // the deal was made with a plan yet the user has no plan, remove it - ctx.Logger().Debug(fmt.Sprintf("Removing %s due to no payment info", deal.Cid)) - cerr := k.CanContract(ctx, deal.Cid, deal.Signee) - if cerr != nil { - ctx.Logger().Error(cerr.Error()) - } - continue - } - } - - if end == 0 { // for deals that were made with a subscription, we remove them if there is not enough space in the plan - if info.SpaceUsed > info.SpaceAvailable { // remove file if the user doesn't have enough space - ctx.Logger().Debug(fmt.Sprintf("Removing %s for space used", deal.Cid)) - err := k.CanContract(ctx, deal.Cid, deal.Signee) - if err != nil { - ctx.Logger().Error(err.Error()) - } - continue - } - } - - if currentBlock > end && end > 0 { // check if end block has passed and was made with a timed storage deal - ctx.Logger().Info(fmt.Sprintf("deal has expired at %d", ctx.BlockHeight())) - - grace := info.End.Add(time.Hour * 24 * 30) - if grace.Before(ctx.BlockTime()) { - ctx.Logger().Debug(fmt.Sprintf("Removing %s after grace period", deal.Cid)) - cerr := k.CanContract(ctx, deal.Cid, deal.Signee) - if cerr != nil { - ctx.Logger().Error(cerr.Error()) - } - continue - } - } - - err = k.manageDealReward(ctx, deal, networkSize, balance) - if err != nil { - ctx.Logger().Error(err.Error()) - } - +func (k Keeper) removeFileIfDeserved(ctx sdk.Context, file *types.UnifiedFile) { + if len(file.Proofs) == 0 { // remove file if it + k.RemoveFile(ctx, file.Merkle, file.Owner, file.Start) } } -func (k Keeper) InternalRewards(ctx sdk.Context, allDeals []types.ActiveDeals, address sdk.AccAddress) error { - ctx.Logger().Debug("%s\n", "checking blocks") - - k.RemoveAllActiveProviders(ctx) // clearing recent provider list - - networkSize := getTotalSize(allDeals) +// ManageRewards loops through every file on the network and manages it in some way. +func (k Keeper) manageRewards(ctx sdk.Context) { + var totalSize int64 + s := make(map[string]int64) + sizeTracker := &s - balance := k.bankkeeper.GetBalance(ctx, address, "ujkl") + k.IterateFilesByMerkle(ctx, func(key []byte, val []byte) { + var file types.UnifiedFile + k.cdc.MustUnmarshal(val, &file) - k.loopDeals(ctx, allDeals, networkSize, balance) + s := file.FileSize * file.MaxProofs + totalSize += s - balance = k.bankkeeper.GetBalance(ctx, address, "ujkl") + k.removeFileIfDeserved(ctx, &file) // delete file if it meets the conditions to be deleted - err := k.bankkeeper.BurnCoins(ctx, types.ModuleName, sdk.NewCoins(balance)) - if err != nil { - return err - } - - k.RemoveAllAttestation(ctx) + for _, proof := range file.Proofs { + k.manageProofs(ctx, sizeTracker, &file, proof) + } + }) - return nil + k.rewardProviders(totalSize, sizeTracker) } -func (k Keeper) HandleRewardBlock(ctx sdk.Context) error { - allDeals := k.GetAllActiveDeals(ctx) - - DayBlocks := k.GetParams(ctx).ProofWindow +func (k Keeper) RunRewardBlock(ctx sdk.Context) { + DayBlocks := k.GetParams(ctx).ProofWindow // TODO: Change this window to 14400 - if ctx.BlockHeight()%DayBlocks > 0 { + if ctx.BlockHeight()%DayBlocks > 0 { // runs once each window (usually a full days worth of blocks) ctx.Logger().Debug("skipping reward handling for this block") - return nil - } - - address := k.accountkeeper.GetModuleAddress(types.ModuleName) - - err := k.InternalRewards(ctx, allDeals, address) - if err != nil { - return err + return } - return nil + k.manageRewards(ctx) } diff --git a/x/storage/keeper/strays.go b/x/storage/keeper/strays.go deleted file mode 100644 index ff0879371..000000000 --- a/x/storage/keeper/strays.go +++ /dev/null @@ -1,90 +0,0 @@ -package keeper - -import ( - "strconv" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/jackalLabs/canine-chain/v3/x/storage/types" -) - -// SetStrays set a specific strays in the store from its index -func (k Keeper) SetStrays(ctx sdk.Context, strays types.Strays) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.StraysKeyPrefix)) - b := k.cdc.MustMarshal(&strays) - store.Set(types.StraysKey( - strays.Cid, - ), b) -} - -// GetStrays returns a strays from its index -func (k Keeper) GetStrays( - ctx sdk.Context, - cid string, -) (val types.Strays, found bool) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.StraysKeyPrefix)) - - b := store.Get(types.StraysKey( - cid, - )) - if b == nil { - return val, false - } - - k.cdc.MustUnmarshal(b, &val) - return val, true -} - -// RemoveStrays removes a strays from the store -func (k Keeper) RemoveStrays( - ctx sdk.Context, - cid string, -) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.StraysKeyPrefix)) - store.Delete(types.StraysKey( - cid, - )) -} - -// GetAllStrays returns all strays -func (k Keeper) GetAllStrays(ctx sdk.Context) (list []types.Strays) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.StraysKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) - - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - var val types.Strays - k.cdc.MustUnmarshal(iterator.Value(), &val) - list = append(list, val) - } - - return -} - -func (k Keeper) ClearDeadFiles(ctx sdk.Context) { - strays := k.GetAllStrays(ctx) - deals := k.GetAllActiveDeals(ctx) - - for _, stray := range strays { - found := false - for _, deal := range deals { - if stray.Fid == deal.Fid { - found = true - break - } - } - if found { - continue - } - - paymentInfo, found := k.GetStoragePaymentInfo(ctx, stray.Signee) - if found { - fSize, err := strconv.ParseInt(stray.Filesize, 10, 64) - if err == nil { - paymentInfo.SpaceUsed -= fSize // remove the deal from the users paid amount. - } - } - k.RemoveStrays(ctx, stray.Cid) - } -} diff --git a/x/storage/keeper/utils.go b/x/storage/keeper/utils.go index b9ad30836..f9b8a1dbb 100644 --- a/x/storage/keeper/utils.go +++ b/x/storage/keeper/utils.go @@ -29,37 +29,22 @@ func (k Keeper) GetPaidAmount(ctx sdk.Context, address string) int64 { } func (k Keeper) GetProviderDeals(ctx sdk.Context, provider string) int64 { - allDeals := k.GetAllActiveDeals(ctx) + allDeals := k.GetAllProofsForProver(ctx, provider) - var count int64 - for i := 0; i < len(allDeals); i++ { - deal := allDeals[i] - if deal.Provider != provider { - continue - } - - count++ - - } - - return count + return int64(len(allDeals)) } func (k Keeper) GetProviderUsing(ctx sdk.Context, provider string) int64 { - allDeals := k.GetAllActiveDeals(ctx) + allDeals := k.GetAllProofsForProver(ctx, provider) var space int64 - for i := 0; i < len(allDeals); i++ { - deal := allDeals[i] - if deal.Provider != provider { - continue - } - size, ok := sdk.NewIntFromString(deal.Filesize) - if !ok { + for _, proof := range allDeals { + deal, found := k.GetFile(ctx, proof.Merkle, proof.Owner, proof.Start) + if !found { continue } - space += size.Int64() + space += deal.FileSize } diff --git a/x/storage/module_simulation.go b/x/storage/module_simulation.go index d8052a454..630b5f4e9 100644 --- a/x/storage/module_simulation.go +++ b/x/storage/module_simulation.go @@ -22,21 +22,6 @@ var ( ) const ( - //nolint:all - opWeightMsgPostContract = "op_weight_msg_post_contract" - // TODO: Determine the simulation weight value - defaultWeightMsgPostContract int = 100 - - //nolint:all - opWeightMsgPostproof = "op_weight_msg_postproof" - // TODO: Determine the simulation weight value - defaultWeightMsgPostproof int = 80 - - //nolint:all - opWeightMsgSignContract = "op_weight_msg_sign_contract" - // TODO: Determine the simulation weight value - defaultWeightMsgSignContract int = 90 - //nolint:all opWeightMsgSetProviderIP = "op_weight_msg_set_provider_ip" // TODO: Determine the simulation weight value @@ -52,11 +37,6 @@ const ( // TODO: Determine the simulation weight value defaultWeightMsgInitProvider int = 60 - //nolint:all - opWeightMsgCancelContract = "op_weight_msg_cancel_contract" - // TODO: Determine the simulation weight value - defaultWeightMsgCancelContract int = 10 - //nolint:all opWeightMsgBuyStorage = "op_weight_msg_buy_storage" // TODO: Determine the simulation weight value @@ -66,10 +46,6 @@ const ( opWeightMsgUpgradeStorage = "op_weight_msg_upgrade_storage" defaultWeightMsgUpgradeStorage int = 100 - //nolint:all - opWeightMsgClaimStray = "op_weight_msg_claim_stray" - defaultWeightMsgClaimStray int = 100 - //nolint:all opWeightMsgAddProviderClaimer = "op_weight_msg_add_provider_claimer" defaultWeightMsgAddProviderClaimer int = 100 @@ -100,38 +76,6 @@ func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) {} // WeightedOperations returns the all the gov module operations with their respective weights. func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { operations := make([]simtypes.WeightedOperation, 0) - var weightMsgPostContract int - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgPostContract, &weightMsgPostContract, nil, - func(_ *rand.Rand) { - weightMsgPostContract = defaultWeightMsgPostContract - }, - ) - operations = append(operations, simulation.NewWeightedOperation( - weightMsgPostContract, - storagesimulation.SimulateMsgPostContract(am.accountKeeper, am.bankKeeper, am.keeper), - )) - - var weightMsgPostproof int - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgPostproof, &weightMsgPostproof, nil, - func(_ *rand.Rand) { - weightMsgPostproof = defaultWeightMsgPostproof - }, - ) - operations = append(operations, simulation.NewWeightedOperation( - weightMsgPostproof, - storagesimulation.SimulateMsgPostproof(am.accountKeeper, am.bankKeeper, am.keeper), - )) - - var weightMsgSignContract int - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgSignContract, &weightMsgSignContract, nil, - func(_ *rand.Rand) { - weightMsgSignContract = defaultWeightMsgSignContract - }, - ) - operations = append(operations, simulation.NewWeightedOperation( - weightMsgSignContract, - storagesimulation.SimulateMsgSignContract(am.accountKeeper, am.bankKeeper, am.keeper), - )) var weightMsgSetProviderIP int simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgSetProviderIP, &weightMsgSetProviderIP, nil, @@ -166,17 +110,6 @@ func (am AppModule) WeightedOperations(simState module.SimulationState) []simtyp storagesimulation.SimulateMsgInitProvider(am.accountKeeper, am.bankKeeper, am.keeper), )) - var weightMsgCancelContract int - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgCancelContract, &weightMsgCancelContract, nil, - func(_ *rand.Rand) { - weightMsgCancelContract = defaultWeightMsgCancelContract - }, - ) - operations = append(operations, simulation.NewWeightedOperation( - weightMsgCancelContract, - storagesimulation.SimulateMsgCancelContract(am.accountKeeper, am.bankKeeper, am.keeper), - )) - var weightMsgBuyStorage int simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgBuyStorage, &weightMsgBuyStorage, nil, func(_ *rand.Rand) { @@ -199,17 +132,6 @@ func (am AppModule) WeightedOperations(simState module.SimulationState) []simtyp storagesimulation.SimulateMsgUpgradeStorage(am.accountKeeper, am.bankKeeper, am.keeper), )) - var weightMsgClaimStray int - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgClaimStray, &weightMsgClaimStray, nil, - func(_ *rand.Rand) { - weightMsgClaimStray = defaultWeightMsgClaimStray - }, - ) - operations = append(operations, simulation.NewWeightedOperation( - weightMsgClaimStray, - storagesimulation.SimulateMsgClaimStray(am.accountKeeper, am.bankKeeper, am.keeper), - )) - var weightMsgAddProviderClaimer int simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgAddProviderClaimer, &weightMsgAddProviderClaimer, nil, func(_ *rand.Rand) { diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index b1eda5a72..757009dec 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -1091,7 +1091,7 @@ func (m *QueryStoreCountResponse) GetCount() string { } type QueryFindFileRequest struct { - Fid string `protobuf:"bytes,1,opt,name=fid,proto3" json:"fid,omitempty"` + Merkle []byte `protobuf:"bytes,1,opt,name=merkle,proto3" json:"merkle,omitempty"` } func (m *QueryFindFileRequest) Reset() { *m = QueryFindFileRequest{} } @@ -1127,11 +1127,11 @@ func (m *QueryFindFileRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryFindFileRequest proto.InternalMessageInfo -func (m *QueryFindFileRequest) GetFid() string { +func (m *QueryFindFileRequest) GetMerkle() []byte { if m != nil { - return m.Fid + return m.Merkle } - return "" + return nil } type QueryFindFileResponse struct { @@ -1961,123 +1961,122 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 1847 bytes of a gzipped FileDescriptorProto + // 1836 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0xdc, 0xc6, - 0x15, 0x17, 0xb5, 0xb2, 0xec, 0x1d, 0xa9, 0xb5, 0x3b, 0x95, 0x5d, 0x75, 0xad, 0xea, 0x83, 0xa8, - 0x25, 0x59, 0xb5, 0x48, 0x69, 0x2d, 0x5b, 0xb6, 0xea, 0xd6, 0xb6, 0x64, 0x48, 0xb5, 0x21, 0xc3, - 0x32, 0x05, 0xb5, 0x40, 0x51, 0x74, 0x3b, 0xe2, 0xce, 0xae, 0x58, 0xed, 0x92, 0x34, 0xc9, 0x55, - 0x2b, 0x2c, 0xf6, 0xd2, 0xde, 0x72, 0x08, 0x0c, 0xf8, 0x94, 0x43, 0x10, 0x20, 0x76, 0x10, 0xe4, - 0x14, 0xc0, 0xc9, 0x21, 0x97, 0x1c, 0x12, 0x20, 0x80, 0x6f, 0x31, 0x90, 0x4b, 0x90, 0x83, 0x11, - 0xd8, 0xf9, 0x43, 0x82, 0x99, 0x79, 0x5c, 0x72, 0x77, 0xb9, 0x24, 0x37, 0x58, 0xe4, 0xa4, 0xe5, - 0xf0, 0x7d, 0xfc, 0xde, 0x9b, 0xf7, 0x1e, 0xdf, 0x0f, 0x42, 0xd3, 0x3a, 0x31, 0x0d, 0x93, 0x16, - 0xf4, 0x03, 0x62, 0x98, 0xaa, 0xeb, 0x59, 0x0e, 0x29, 0x53, 0xf5, 0x51, 0x8d, 0x3a, 0xc7, 0x8a, - 0xed, 0x58, 0x9e, 0x85, 0xc7, 0xc2, 0x12, 0x0a, 0x48, 0xe4, 0xc6, 0xca, 0x56, 0xd9, 0xe2, 0x02, - 0x2a, 0xfb, 0x25, 0x64, 0x73, 0x13, 0x65, 0xcb, 0x2a, 0x57, 0xa8, 0x4a, 0x6c, 0x43, 0x25, 0xa6, - 0x69, 0x79, 0xc4, 0x33, 0x2c, 0xd3, 0x85, 0xb7, 0x0b, 0xba, 0xe5, 0x56, 0x2d, 0x57, 0xdd, 0x27, - 0x2e, 0xb8, 0x50, 0x8f, 0x96, 0xf7, 0xa9, 0x47, 0x96, 0x55, 0x9b, 0x94, 0x0d, 0x93, 0x0b, 0x83, - 0xec, 0x4c, 0x24, 0x2e, 0x9b, 0x38, 0xa4, 0xea, 0x9b, 0xfb, 0x7d, 0xa4, 0x88, 0x6e, 0x99, 0x9e, - 0x43, 0x74, 0xcf, 0x97, 0x9a, 0x8b, 0x94, 0x22, 0xba, 0x67, 0x1c, 0xd1, 0x42, 0x91, 0x92, 0x4a, - 0xbc, 0x39, 0xdb, 0xb1, 0x8e, 0x8c, 0x22, 0x75, 0xdc, 0x58, 0x5c, 0xae, 0xe7, 0x90, 0xe3, 0x78, - 0x8f, 0x36, 0x39, 0xae, 0x52, 0xd3, 0x2b, 0x18, 0x66, 0x09, 0xb2, 0x25, 0x8f, 0x21, 0xfc, 0x90, - 0x65, 0x61, 0x87, 0x47, 0xa5, 0xd1, 0x47, 0x35, 0xea, 0x7a, 0xf2, 0x43, 0xf4, 0xeb, 0x96, 0x53, - 0xd7, 0xb6, 0x4c, 0x97, 0xe2, 0x35, 0x34, 0x2c, 0xa2, 0x1f, 0x97, 0xa6, 0xa5, 0xf9, 0x91, 0xfc, - 0x84, 0x12, 0x75, 0x2f, 0x8a, 0xd0, 0x5a, 0x1f, 0x7a, 0xf1, 0x6a, 0x6a, 0x40, 0x03, 0x0d, 0xf9, - 0xaf, 0xe8, 0x0c, 0x37, 0xb9, 0x69, 0x54, 0x28, 0xb8, 0xc1, 0xe7, 0xd0, 0x70, 0x95, 0x3a, 0x87, - 0x15, 0xca, 0xed, 0x8d, 0x6a, 0xf0, 0x84, 0xc7, 0xd0, 0x09, 0xeb, 0x3f, 0x26, 0x75, 0xc6, 0x07, - 0xa7, 0xa5, 0xf9, 0xac, 0x26, 0x1e, 0xd8, 0xa9, 0xeb, 0x11, 0xc7, 0x1b, 0xcf, 0x4c, 0x4b, 0xf3, - 0x19, 0x4d, 0x3c, 0xc8, 0x3b, 0xe8, 0x57, 0x21, 0xbb, 0x00, 0xf4, 0x8f, 0x68, 0xa8, 0x64, 0x80, - 0xd9, 0x91, 0xfc, 0x4c, 0x34, 0xcc, 0x3d, 0xd3, 0x28, 0x19, 0xb4, 0xc8, 0x14, 0x01, 0x2b, 0x57, - 0x92, 0xff, 0x89, 0xc6, 0xb8, 0xc5, 0xdb, 0x95, 0x0a, 0x7b, 0xe7, 0x27, 0x05, 0x6f, 0x22, 0x14, - 0x94, 0x08, 0x98, 0x9e, 0x55, 0x44, 0x3d, 0x29, 0xac, 0x9e, 0x14, 0x51, 0xb2, 0x50, 0x4f, 0xca, - 0x0e, 0x29, 0xfb, 0x91, 0x6a, 0x21, 0x4d, 0xf9, 0x3d, 0x09, 0x9d, 0x6d, 0x73, 0x00, 0xb0, 0xff, - 0x84, 0x4e, 0x30, 0x04, 0x2c, 0xbd, 0x99, 0x5e, 0x70, 0x0b, 0x2d, 0xbc, 0xd5, 0x02, 0x70, 0x90, - 0x03, 0x9c, 0x4b, 0x04, 0x28, 0x7c, 0xb7, 0x20, 0x5c, 0x82, 0x0c, 0xec, 0x40, 0xe1, 0xf9, 0x19, - 0x18, 0x47, 0x27, 0x49, 0xb1, 0xe8, 0x50, 0x57, 0x14, 0x40, 0x56, 0xf3, 0x1f, 0xe5, 0x7f, 0x40, - 0x48, 0x81, 0x06, 0x84, 0xb4, 0x81, 0xb2, 0xcd, 0xf2, 0x85, 0x9c, 0x4d, 0x75, 0xa9, 0x1a, 0x5f, - 0x0c, 0x82, 0x0a, 0xf4, 0xe4, 0x7d, 0x34, 0xee, 0x27, 0xac, 0x29, 0xd5, 0xef, 0x5b, 0xf9, 0x48, - 0x42, 0xbf, 0x8d, 0x70, 0x12, 0x1d, 0x46, 0xe6, 0xa7, 0x84, 0xd1, 0xbf, 0xfb, 0xa9, 0xa1, 0xdf, - 0x08, 0xa8, 0x9e, 0x47, 0x5d, 0x31, 0xdf, 0x42, 0x2d, 0xc5, 0x1c, 0x52, 0x07, 0x6e, 0x08, 0x9e, - 0x42, 0xad, 0x36, 0x18, 0xdd, 0x6a, 0x99, 0xc8, 0x56, 0x1b, 0x0a, 0xb7, 0x9a, 0xe1, 0x5f, 0x43, - 0xd8, 0x2d, 0x24, 0xe8, 0x3e, 0x1a, 0x21, 0xc1, 0x31, 0xdc, 0xc3, 0x85, 0xe8, 0x14, 0x85, 0xf4, - 0x37, 0x2d, 0xa7, 0x0a, 0x89, 0x0a, 0xeb, 0xcb, 0x14, 0x9d, 0xf7, 0x2f, 0x23, 0x24, 0xdd, 0xf7, - 0x4b, 0xff, 0x4c, 0x42, 0x13, 0xd1, 0x7e, 0x20, 0xac, 0x07, 0x68, 0x34, 0x04, 0xcb, 0xbf, 0xfa, - 0x9e, 0xe2, 0x6a, 0x31, 0xd0, 0xbf, 0x1a, 0xb0, 0x61, 0x70, 0x6b, 0xd4, 0xb6, 0x1c, 0xef, 0xe7, - 0xb8, 0xfe, 0x3d, 0xf8, 0x28, 0xf8, 0x1e, 0x21, 0x45, 0x7f, 0x46, 0xc3, 0x0e, 0x3f, 0x81, 0x7b, - 0x98, 0x8e, 0x4e, 0x8e, 0xd0, 0x0a, 0xe5, 0x05, 0xb4, 0xe4, 0x42, 0x30, 0x0d, 0x5b, 0x63, 0xe9, - 0xd7, 0x25, 0x3f, 0x95, 0xd0, 0xb9, 0x76, 0x0f, 0x80, 0xfd, 0x16, 0x3a, 0x29, 0x50, 0xf8, 0x37, - 0x9b, 0x16, 0xbc, 0xaf, 0xd6, 0xbf, 0xfb, 0x5c, 0x86, 0x34, 0x6c, 0x3a, 0x94, 0xba, 0x36, 0xd1, - 0x69, 0xf2, 0xd0, 0xcd, 0x43, 0x5c, 0xbb, 0x9e, 0xe5, 0xd0, 0x0d, 0xab, 0x66, 0x7a, 0xc9, 0x3a, - 0x0a, 0xe8, 0x84, 0xdc, 0x40, 0x2e, 0xd8, 0xa5, 0xb3, 0x03, 0xd0, 0x10, 0x0f, 0xb2, 0x0a, 0xa3, - 0x26, 0xec, 0x23, 0x50, 0xd0, 0xd9, 0x81, 0xaf, 0xc0, 0x1f, 0xe4, 0x79, 0xf8, 0x76, 0x6c, 0x1a, - 0x66, 0x31, 0xfc, 0xad, 0x3f, 0x83, 0x32, 0x25, 0xa3, 0x08, 0xb2, 0xec, 0xa7, 0xbc, 0xe6, 0x47, - 0xdc, 0x94, 0x04, 0xc3, 0x33, 0x68, 0xd4, 0x1f, 0x9a, 0x05, 0xc3, 0xf6, 0x43, 0x18, 0xf1, 0xcf, - 0xee, 0xda, 0xae, 0xbc, 0x0a, 0xf3, 0x61, 0xa3, 0x62, 0x50, 0xd3, 0x63, 0xc1, 0xec, 0xa6, 0xcb, - 0xd9, 0x0d, 0x68, 0xf8, 0x0e, 0x45, 0xf0, 0x3d, 0x81, 0xb2, 0xfb, 0xc7, 0x1e, 0x75, 0x4b, 0x0e, - 0x15, 0x99, 0xc8, 0x68, 0xc1, 0x81, 0xac, 0x36, 0xf7, 0xa2, 0xe3, 0x3b, 0xc4, 0x23, 0xc9, 0xee, - 0x76, 0xfd, 0x2f, 0xa9, 0xaf, 0x00, 0x6e, 0x2e, 0xa0, 0x5f, 0x7a, 0x46, 0x95, 0x16, 0x1c, 0x5a, - 0x25, 0x86, 0x69, 0x98, 0x65, 0xf0, 0xf5, 0x0b, 0x76, 0xaa, 0xf9, 0x87, 0x2c, 0xc5, 0xdc, 0x39, - 0x2f, 0xac, 0x8c, 0x26, 0x1e, 0xe4, 0x35, 0x34, 0xd9, 0xbc, 0x13, 0x52, 0xa6, 0x3b, 0x62, 0xab, - 0xbb, 0x6b, 0x96, 0xac, 0x64, 0x40, 0xff, 0x97, 0xd0, 0x54, 0x57, 0x65, 0x00, 0xf7, 0x2f, 0x34, - 0x06, 0x85, 0x5f, 0x08, 0x6f, 0x8c, 0xd0, 0x82, 0xf3, 0xd1, 0x2d, 0xd2, 0x69, 0x0f, 0x5a, 0x05, - 0xbb, 0x1d, 0x6f, 0xe4, 0x43, 0x34, 0xe3, 0x77, 0x64, 0xf7, 0x20, 0xfa, 0xd5, 0xff, 0x5f, 0x4b, - 0x48, 0x8e, 0xf3, 0x96, 0x18, 0x75, 0xa6, 0x3f, 0x51, 0xf7, 0x6f, 0x56, 0xdc, 0x87, 0xea, 0x67, - 0x5d, 0xb3, 0x67, 0x57, 0x2c, 0x52, 0xdc, 0x38, 0xa0, 0xfa, 0x61, 0xe2, 0xed, 0x77, 0xa9, 0xa7, - 0x15, 0xe8, 0x89, 0x0e, 0x73, 0x41, 0xa3, 0x1f, 0x91, 0x0a, 0x34, 0xef, 0x29, 0x4d, 0x3c, 0xc8, - 0xf7, 0x60, 0x92, 0xec, 0x38, 0x86, 0x4e, 0x5b, 0xfc, 0xe7, 0xd0, 0xa9, 0x62, 0xcd, 0x09, 0xae, - 0x2d, 0xab, 0x35, 0x9f, 0xbb, 0x20, 0xf0, 0xa7, 0x4c, 0xd8, 0x56, 0xe0, 0xdc, 0x66, 0xa7, 0xd0, - 0x20, 0xe2, 0x41, 0xfe, 0x9d, 0xbf, 0x1f, 0x70, 0x0e, 0xd5, 0xbe, 0x14, 0xca, 0x86, 0xff, 0x59, - 0x6f, 0x7f, 0x0d, 0x46, 0xef, 0x76, 0xae, 0x73, 0xdd, 0xbe, 0xe9, 0xad, 0x16, 0x3a, 0x77, 0xd3, - 0x1c, 0x2c, 0x45, 0x50, 0x09, 0xbb, 0x1e, 0xf1, 0x9a, 0x30, 0x3e, 0xf7, 0x77, 0xca, 0xd6, 0x97, - 0xc1, 0xa8, 0xb1, 0x6b, 0x8e, 0x7e, 0x40, 0x5c, 0x2a, 0x52, 0x3b, 0xa4, 0x05, 0x07, 0x18, 0xa3, - 0xa1, 0x1a, 0x7b, 0x31, 0xc8, 0x5f, 0xf0, 0xdf, 0x78, 0x1b, 0x65, 0xd9, 0x5f, 0x8d, 0xa5, 0x92, - 0x7f, 0xb1, 0x47, 0xd7, 0x15, 0x86, 0xe7, 0xbb, 0x57, 0x53, 0xb3, 0x65, 0xc3, 0x3b, 0xa8, 0xed, - 0x2b, 0xba, 0x55, 0x55, 0x81, 0xe2, 0x8a, 0x3f, 0x8b, 0x6e, 0xf1, 0x50, 0xf5, 0x8e, 0x6d, 0xea, - 0x2a, 0x77, 0xa8, 0xae, 0x05, 0x06, 0xf0, 0x34, 0x1a, 0x11, 0x14, 0x74, 0xcf, 0x65, 0x69, 0x18, - 0xe2, 0x8e, 0xc2, 0x47, 0xf9, 0xb7, 0xce, 0xa3, 0x13, 0x1c, 0x3f, 0x7e, 0x5b, 0x42, 0xc3, 0x82, - 0xd6, 0xe1, 0x2e, 0x9d, 0xd0, 0xc9, 0x22, 0x73, 0x17, 0x53, 0x48, 0x8a, 0x5c, 0xc8, 0xea, 0xff, - 0xbe, 0xf9, 0xe1, 0xc9, 0xe0, 0x45, 0x3c, 0xa7, 0xfe, 0x9b, 0xe8, 0x87, 0xa4, 0xb2, 0x58, 0x24, - 0x96, 0x2a, 0xb4, 0x17, 0xa3, 0xe8, 0x37, 0x7e, 0x2c, 0xa1, 0x21, 0x56, 0xaf, 0x78, 0x36, 0xc6, - 0x49, 0xe8, 0xfb, 0x93, 0x9b, 0x4b, 0x94, 0x03, 0x28, 0xab, 0x1c, 0xca, 0x32, 0x56, 0x13, 0xa1, - 0x70, 0xd6, 0xa5, 0xd6, 0xc5, 0x2a, 0xd5, 0xc0, 0x4f, 0x24, 0x74, 0x8a, 0xf3, 0xb9, 0xdb, 0x95, - 0x0a, 0x5e, 0x88, 0x71, 0xd7, 0x46, 0x2c, 0x73, 0x7f, 0x48, 0x25, 0x0b, 0xf0, 0x14, 0x0e, 0x6f, - 0x1e, 0xcf, 0xa6, 0x83, 0x87, 0xdf, 0x97, 0x50, 0xb6, 0x59, 0xbe, 0xb1, 0xb0, 0xda, 0xd8, 0x5e, - 0x2c, 0xac, 0x76, 0x9e, 0x27, 0xdf, 0xe0, 0xb0, 0xae, 0xe2, 0x95, 0xe4, 0x0b, 0xf4, 0xc1, 0xa8, - 0x75, 0x18, 0x4b, 0x0d, 0xfc, 0x54, 0x42, 0xa3, 0x4d, 0x90, 0x2c, 0x7d, 0x4a, 0x7c, 0x4a, 0xda, - 0x1b, 0x3e, 0xa7, 0xa6, 0x96, 0x07, 0xbc, 0x79, 0x8e, 0xf7, 0x12, 0x5e, 0x48, 0x8f, 0x17, 0x7f, - 0x25, 0xa1, 0x91, 0xd0, 0x8e, 0x8f, 0x17, 0xe3, 0x9c, 0x76, 0x50, 0xb3, 0x9c, 0x92, 0x56, 0x1c, - 0x20, 0xfe, 0x8d, 0x43, 0x7c, 0x88, 0x1f, 0x24, 0x42, 0x0c, 0x33, 0x0c, 0xb5, 0x2e, 0x56, 0xfe, - 0x46, 0xb3, 0x30, 0xd5, 0x3a, 0xdf, 0xea, 0x1b, 0x6a, 0x9d, 0xef, 0xf1, 0x0d, 0xfc, 0xb1, 0x84, - 0x4e, 0x87, 0xd9, 0x0e, 0x4b, 0xf8, 0x72, 0x7c, 0x02, 0x23, 0x48, 0x58, 0x2e, 0xdf, 0x8b, 0x0a, - 0xc4, 0x74, 0x85, 0xc7, 0xa4, 0xe2, 0xc5, 0x9e, 0x62, 0xc2, 0xcf, 0x25, 0x74, 0x52, 0x83, 0x8d, - 0x3b, 0x6e, 0xfe, 0xb4, 0x10, 0x88, 0xd8, 0xf9, 0xd3, 0x4a, 0x04, 0x64, 0x8d, 0xe3, 0xda, 0xc6, - 0xf7, 0x12, 0x71, 0xc1, 0xe2, 0x9f, 0x22, 0xcd, 0xef, 0x48, 0x08, 0x01, 0x68, 0x96, 0xe1, 0x84, - 0x2e, 0x6f, 0x85, 0x7e, 0x29, 0x9d, 0x30, 0xa0, 0x5f, 0xe2, 0xe8, 0x17, 0xf0, 0x7c, 0x5a, 0xf4, - 0xf8, 0x99, 0x84, 0xb2, 0x4d, 0x0a, 0x10, 0x0b, 0xad, 0x9d, 0x8f, 0xc4, 0x42, 0xeb, 0x60, 0x15, - 0x3d, 0xcc, 0x85, 0x92, 0xaf, 0x1b, 0x9a, 0x0b, 0x1f, 0x48, 0x08, 0x05, 0xcc, 0x03, 0xc7, 0xb9, - 0xee, 0x20, 0x41, 0xb9, 0xc5, 0x94, 0xd2, 0x80, 0x74, 0x8d, 0x23, 0x5d, 0xc1, 0xf9, 0x44, 0xa4, - 0xec, 0xaf, 0x61, 0x96, 0x43, 0x38, 0xdf, 0xe5, 0xa3, 0x5f, 0xd0, 0x98, 0xd8, 0x19, 0xdb, 0xc6, - 0x8a, 0x62, 0x67, 0x6c, 0x3b, 0x2f, 0x92, 0xaf, 0x71, 0x84, 0x79, 0xbc, 0x94, 0x62, 0xf4, 0x9b, - 0xc5, 0x02, 0x9b, 0xff, 0x6a, 0xbd, 0x64, 0x14, 0x1b, 0x6c, 0x72, 0xe1, 0x2d, 0xea, 0xb5, 0x91, - 0x9e, 0xd8, 0xa6, 0x8f, 0x66, 0x56, 0xb1, 0x4d, 0xdf, 0x85, 0x53, 0xc9, 0x7f, 0xe1, 0xb8, 0xd7, - 0xf1, 0xad, 0x44, 0xdc, 0x65, 0xea, 0x15, 0x74, 0x6e, 0xa5, 0xc0, 0xca, 0xa1, 0xd0, 0x5e, 0x0f, - 0xcf, 0x24, 0x84, 0xb6, 0xa8, 0x07, 0x6c, 0x0a, 0xc7, 0x2f, 0x18, 0x61, 0x8a, 0x96, 0x5b, 0x48, - 0x23, 0x0a, 0x78, 0x6f, 0x72, 0xbc, 0xd7, 0xf1, 0x6a, 0x2a, 0xbc, 0x36, 0x39, 0x2e, 0x14, 0x89, - 0x47, 0x42, 0x30, 0xbf, 0x94, 0x10, 0xee, 0x64, 0x06, 0x78, 0x25, 0xa1, 0x20, 0x23, 0x69, 0x50, - 0xee, 0x4a, 0x8f, 0x5a, 0x3d, 0x07, 0x11, 0x66, 0x3b, 0xa1, 0x20, 0xbe, 0x90, 0xd0, 0xd9, 0x4e, - 0xfb, 0x6c, 0x92, 0xad, 0xc6, 0x0f, 0xa7, 0xee, 0xa1, 0x5c, 0xeb, 0x5d, 0xb1, 0xe7, 0xef, 0x46, - 0x38, 0x1a, 0xfc, 0xa9, 0x84, 0x4e, 0xb7, 0xb1, 0x9a, 0xd8, 0xa2, 0x8f, 0x26, 0x54, 0xb1, 0x45, - 0xdf, 0x85, 0x34, 0xf5, 0x30, 0x4e, 0x58, 0x9f, 0x16, 0x6a, 0xdc, 0x44, 0x41, 0xe7, 0x10, 0x9f, - 0x4b, 0x08, 0x05, 0x54, 0x28, 0x76, 0xec, 0x75, 0xb0, 0xaf, 0xd8, 0xb1, 0xd7, 0xc9, 0xaf, 0xe4, - 0x2d, 0x8e, 0xf3, 0x36, 0xbe, 0x99, 0x62, 0x11, 0x32, 0x74, 0x2a, 0x10, 0xaa, 0x75, 0x9f, 0xd0, - 0x35, 0xd4, 0x3a, 0xa7, 0x70, 0x0d, 0xfc, 0x09, 0xdb, 0x2a, 0x5a, 0xd9, 0x52, 0xfc, 0x56, 0x11, - 0x49, 0xdd, 0xe2, 0xb7, 0x8a, 0x68, 0x3a, 0x27, 0x5f, 0xe7, 0x31, 0x5c, 0xc6, 0xcb, 0xc9, 0x5b, - 0x85, 0xf8, 0x9f, 0x5b, 0xb0, 0xd3, 0x7d, 0x28, 0xa1, 0xd1, 0x30, 0x3b, 0x8b, 0xdd, 0x3c, 0x23, - 0x38, 0x5e, 0xec, 0xe6, 0x19, 0x45, 0xfb, 0xe4, 0xab, 0x1c, 0xec, 0x12, 0x56, 0x52, 0x7d, 0x67, - 0x48, 0x99, 0x16, 0xd8, 0x1a, 0xe4, 0xae, 0x6f, 0xbf, 0x78, 0x3d, 0x29, 0xbd, 0x7c, 0x3d, 0x29, - 0x7d, 0xff, 0x7a, 0x52, 0x7a, 0xfc, 0x66, 0x72, 0xe0, 0xe5, 0x9b, 0xc9, 0x81, 0x6f, 0xdf, 0x4c, - 0x0e, 0xfc, 0x3d, 0x1f, 0xe2, 0x7e, 0xc2, 0xe6, 0x36, 0xd9, 0x77, 0x5b, 0x6d, 0xfe, 0xb7, 0x69, - 0x95, 0x73, 0xc1, 0xfd, 0x61, 0xfe, 0xef, 0xbf, 0xcb, 0x3f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x7d, - 0x2d, 0x10, 0x66, 0x7c, 0x1d, 0x00, 0x00, + 0x15, 0xd7, 0x68, 0x65, 0xd9, 0x3b, 0x52, 0xeb, 0x76, 0x2a, 0xbb, 0xea, 0x5a, 0xd5, 0x07, 0x51, + 0x4b, 0xb2, 0x6a, 0x91, 0xd6, 0x5a, 0xb6, 0x6a, 0xd9, 0xad, 0x6d, 0xc9, 0x90, 0x6a, 0x43, 0x86, + 0x65, 0x0a, 0x6a, 0x81, 0xa2, 0xe8, 0x76, 0xc4, 0x1d, 0xad, 0x58, 0xed, 0x92, 0x34, 0xc9, 0x55, + 0x2b, 0x08, 0xba, 0xb4, 0xe7, 0x16, 0x06, 0x7c, 0xea, 0x29, 0x41, 0xec, 0x20, 0xc8, 0x29, 0x80, + 0x93, 0x43, 0x2e, 0x39, 0x24, 0x80, 0x01, 0xdf, 0x62, 0x20, 0x97, 0x20, 0x07, 0x23, 0xb0, 0xf3, + 0x87, 0x04, 0x33, 0xf3, 0xb8, 0xe4, 0xee, 0x72, 0x49, 0x6e, 0xb0, 0xc8, 0x69, 0x35, 0xc3, 0xf7, + 0xf1, 0x7b, 0x6f, 0xde, 0xbc, 0x79, 0x3f, 0x08, 0x4f, 0x1a, 0xd4, 0x32, 0x2d, 0x56, 0x32, 0xf6, + 0xa8, 0x69, 0x69, 0x9e, 0x6f, 0xbb, 0xb4, 0xc2, 0xb4, 0x47, 0x75, 0xe6, 0x1e, 0xaa, 0x8e, 0x6b, + 0xfb, 0x36, 0x19, 0x89, 0x4a, 0xa8, 0x20, 0x51, 0x18, 0xa9, 0xd8, 0x15, 0x5b, 0x08, 0x68, 0xfc, + 0x2f, 0x29, 0x5b, 0x18, 0xab, 0xd8, 0x76, 0xa5, 0xca, 0x34, 0xea, 0x98, 0x1a, 0xb5, 0x2c, 0xdb, + 0xa7, 0xbe, 0x69, 0x5b, 0x1e, 0x7c, 0x9d, 0x33, 0x6c, 0xaf, 0x66, 0x7b, 0xda, 0x0e, 0xf5, 0xc0, + 0x85, 0x76, 0xb0, 0xb0, 0xc3, 0x7c, 0xba, 0xa0, 0x39, 0xb4, 0x62, 0x5a, 0x42, 0x18, 0x64, 0xa7, + 0x62, 0x71, 0x39, 0xd4, 0xa5, 0xb5, 0xc0, 0xdc, 0x6f, 0x62, 0x45, 0x0c, 0xdb, 0xf2, 0x5d, 0x6a, + 0xf8, 0x81, 0xd4, 0x4c, 0xac, 0x14, 0x35, 0x7c, 0xf3, 0x80, 0x95, 0xca, 0x8c, 0x56, 0x93, 0xcd, + 0x39, 0xae, 0x7d, 0x60, 0x96, 0x99, 0xeb, 0x25, 0xe2, 0xf2, 0x7c, 0x97, 0x1e, 0x26, 0x7b, 0x74, + 0xe8, 0x61, 0x8d, 0x59, 0x7e, 0xc9, 0xb4, 0x76, 0x21, 0x5b, 0xca, 0x08, 0x26, 0x0f, 0x79, 0x16, + 0x36, 0x45, 0x54, 0x3a, 0x7b, 0x54, 0x67, 0x9e, 0xaf, 0x3c, 0xc4, 0xbf, 0x68, 0xda, 0xf5, 0x1c, + 0xdb, 0xf2, 0x18, 0x59, 0xc6, 0x83, 0x32, 0xfa, 0x51, 0x34, 0x89, 0x66, 0x87, 0x8a, 0x63, 0x6a, + 0xdc, 0xb9, 0xa8, 0x52, 0x6b, 0x65, 0xe0, 0xe5, 0xeb, 0x89, 0x3e, 0x1d, 0x34, 0x94, 0x3f, 0xe1, + 0x9f, 0x09, 0x93, 0x6b, 0x66, 0x95, 0x81, 0x1b, 0x72, 0x16, 0x0f, 0xd6, 0x98, 0xbb, 0x5f, 0x65, + 0xc2, 0xde, 0xb0, 0x0e, 0x2b, 0x32, 0x82, 0x4f, 0xd8, 0xff, 0xb4, 0x98, 0x3b, 0xda, 0x3f, 0x89, + 0x66, 0xf3, 0xba, 0x5c, 0xf0, 0x5d, 0xcf, 0xa7, 0xae, 0x3f, 0x9a, 0x9b, 0x44, 0xb3, 0x39, 0x5d, + 0x2e, 0x94, 0x4d, 0xfc, 0xf3, 0x88, 0x5d, 0x00, 0x7a, 0x1d, 0x0f, 0xec, 0x9a, 0x60, 0x76, 0xa8, + 0x38, 0x15, 0x0f, 0x73, 0xdb, 0x32, 0x77, 0x4d, 0x56, 0xe6, 0x8a, 0x80, 0x55, 0x28, 0x29, 0x7f, + 0xc3, 0x23, 0xc2, 0xe2, 0xed, 0x6a, 0x95, 0x7f, 0x0b, 0x92, 0x42, 0xd6, 0x30, 0x0e, 0x4b, 0x04, + 0x4c, 0x4f, 0xab, 0xb2, 0x9e, 0x54, 0x5e, 0x4f, 0xaa, 0x2c, 0x59, 0xa8, 0x27, 0x75, 0x93, 0x56, + 0x82, 0x48, 0xf5, 0x88, 0xa6, 0xf2, 0x0e, 0xc2, 0x67, 0x5a, 0x1c, 0x00, 0xec, 0xdf, 0xe3, 0x13, + 0x1c, 0x01, 0x4f, 0x6f, 0xae, 0x1b, 0xdc, 0x52, 0x8b, 0xac, 0x37, 0x01, 0xec, 0x17, 0x00, 0x67, + 0x52, 0x01, 0x4a, 0xdf, 0x4d, 0x08, 0x2f, 0x41, 0x06, 0x36, 0xa1, 0xf0, 0x82, 0x0c, 0x8c, 0xe2, + 0x93, 0xb4, 0x5c, 0x76, 0x99, 0x27, 0x0b, 0x20, 0xaf, 0x07, 0x4b, 0xe5, 0xaf, 0x10, 0x52, 0xa8, + 0x01, 0x21, 0xad, 0xe2, 0x7c, 0xa3, 0x7c, 0x21, 0x67, 0x13, 0x1d, 0xaa, 0x26, 0x10, 0x83, 0xa0, + 0x42, 0x3d, 0x65, 0x07, 0x8f, 0x06, 0x09, 0x6b, 0x48, 0xf5, 0xfa, 0x54, 0x3e, 0x44, 0xf8, 0x57, + 0x31, 0x4e, 0xe2, 0xc3, 0xc8, 0xfd, 0x90, 0x30, 0x7a, 0x77, 0x3e, 0x75, 0xfc, 0x4b, 0x09, 0xd5, + 0xf7, 0x99, 0x27, 0xfb, 0x5b, 0xe4, 0x4a, 0x71, 0x87, 0xcc, 0x85, 0x13, 0x82, 0x55, 0xe4, 0xaa, + 0xf5, 0xc7, 0x5f, 0xb5, 0x5c, 0xec, 0x55, 0x1b, 0x88, 0x5e, 0x35, 0x33, 0x38, 0x86, 0xa8, 0x5b, + 0x48, 0xd0, 0x7d, 0x3c, 0x44, 0xc3, 0x6d, 0x38, 0x87, 0xf3, 0xf1, 0x29, 0x8a, 0xe8, 0xaf, 0xd9, + 0x6e, 0x0d, 0x12, 0x15, 0xd5, 0x57, 0x18, 0x3e, 0x17, 0x1c, 0x46, 0x44, 0xba, 0xe7, 0x87, 0xfe, + 0x29, 0xc2, 0x63, 0xf1, 0x7e, 0x20, 0xac, 0x07, 0x78, 0x38, 0x02, 0x2b, 0x38, 0xfa, 0xae, 0xe2, + 0x6a, 0x32, 0xd0, 0xbb, 0x1a, 0x70, 0xa0, 0x71, 0xeb, 0xcc, 0xb1, 0x5d, 0xff, 0xc7, 0x38, 0xfe, + 0x6d, 0x78, 0x14, 0x02, 0x8f, 0x90, 0xa2, 0x3f, 0xe0, 0x41, 0x57, 0xec, 0xc0, 0x39, 0x4c, 0xc6, + 0x27, 0x47, 0x6a, 0x45, 0xf2, 0x02, 0x5a, 0x4a, 0x29, 0xec, 0x86, 0xcd, 0xb1, 0xf4, 0xea, 0x90, + 0x9f, 0x22, 0x7c, 0xb6, 0xd5, 0x03, 0x60, 0xbf, 0x85, 0x4f, 0x4a, 0x14, 0xc1, 0xc9, 0x66, 0x05, + 0x1f, 0xa8, 0xf5, 0xee, 0x3c, 0x17, 0x20, 0x0d, 0x6b, 0x2e, 0x63, 0x9e, 0x43, 0x0d, 0x96, 0xde, + 0x74, 0x8b, 0x10, 0xd7, 0x96, 0x6f, 0xbb, 0x6c, 0xd5, 0xae, 0x5b, 0x7e, 0xba, 0x8e, 0x0a, 0x3a, + 0x11, 0x37, 0x90, 0x0b, 0x7e, 0xe8, 0x7c, 0x03, 0x34, 0xe4, 0x42, 0xd1, 0xa0, 0xd5, 0x44, 0x7d, + 0x84, 0x0a, 0x06, 0xdf, 0x08, 0x14, 0xc4, 0x42, 0x51, 0xe1, 0xed, 0x58, 0x33, 0xad, 0x72, 0x86, + 0xb7, 0x5e, 0x59, 0x0e, 0xe2, 0x6e, 0xc8, 0x83, 0xf9, 0x29, 0x3c, 0x1c, 0xb4, 0xce, 0x92, 0xe9, + 0x04, 0x81, 0x0c, 0x05, 0x7b, 0x77, 0x1d, 0x4f, 0x59, 0x82, 0x2e, 0xb1, 0x5a, 0x35, 0x99, 0xe5, + 0xf3, 0x90, 0xb6, 0xb2, 0x65, 0xee, 0x06, 0x5c, 0xfb, 0x36, 0x45, 0xf0, 0x3d, 0x86, 0xf3, 0x3b, + 0x87, 0x3e, 0xf3, 0x76, 0x5d, 0x26, 0xf1, 0xe6, 0xf4, 0x70, 0x43, 0xd1, 0x1a, 0xd3, 0xd1, 0xe1, + 0x1d, 0xea, 0xd3, 0x74, 0x77, 0x5b, 0xc1, 0x7b, 0x1a, 0x28, 0x80, 0x9b, 0xf3, 0xf8, 0xa7, 0xbe, + 0x59, 0x63, 0x25, 0x97, 0xd5, 0xa8, 0x69, 0x99, 0x56, 0x05, 0x7c, 0xfd, 0x84, 0xef, 0xea, 0xc1, + 0x26, 0x4f, 0xb4, 0x70, 0x2e, 0xca, 0x2b, 0xa7, 0xcb, 0x85, 0xb2, 0x8c, 0xc7, 0x1b, 0x27, 0x43, + 0x2b, 0x6c, 0x53, 0xce, 0x76, 0x77, 0xad, 0x5d, 0x3b, 0x1d, 0xd0, 0x7f, 0x10, 0x9e, 0xe8, 0xa8, + 0x0c, 0xe0, 0xfe, 0x8e, 0x47, 0xa0, 0xfc, 0x4b, 0xd1, 0xb9, 0x11, 0x2e, 0xe2, 0x6c, 0xfc, 0x45, + 0x69, 0xb7, 0x07, 0x17, 0x86, 0x78, 0x6d, 0x5f, 0x94, 0x7d, 0x3c, 0x15, 0xdc, 0xcb, 0xce, 0x41, + 0xf4, 0xaa, 0x0b, 0x7c, 0x89, 0xb0, 0x92, 0xe4, 0x2d, 0x35, 0xea, 0x5c, 0x6f, 0xa2, 0xee, 0x5d, + 0xc7, 0xb8, 0x0f, 0xd5, 0xcf, 0x6f, 0xcd, 0xb6, 0x53, 0xb5, 0x69, 0x79, 0x75, 0x8f, 0x19, 0xfb, + 0xa9, 0xa7, 0xdf, 0xa1, 0x9e, 0x16, 0xe1, 0x4e, 0xb4, 0x99, 0x0b, 0xaf, 0xfb, 0x01, 0xad, 0x9a, + 0x65, 0x61, 0xed, 0x94, 0x2e, 0x17, 0xca, 0x3d, 0xe8, 0x27, 0x9b, 0xae, 0x69, 0xb0, 0x26, 0xff, + 0x05, 0x7c, 0xaa, 0x5c, 0x77, 0xc3, 0x63, 0xcb, 0xeb, 0x8d, 0x75, 0x07, 0x04, 0x41, 0xaf, 0x89, + 0xda, 0x0a, 0x9d, 0x3b, 0x7c, 0x17, 0x2e, 0x88, 0x5c, 0x28, 0xbf, 0x0e, 0xa6, 0x04, 0xc1, 0xa4, + 0x5a, 0x47, 0x43, 0xc5, 0x0c, 0x1e, 0xf7, 0xd6, 0xcf, 0x60, 0xf4, 0x6e, 0xfb, 0x50, 0xd7, 0xe9, + 0x65, 0x6f, 0xb6, 0xd0, 0x3e, 0xa1, 0x16, 0x60, 0x34, 0x82, 0x4a, 0xd8, 0xf2, 0xa9, 0xdf, 0x80, + 0xf1, 0x59, 0x30, 0x59, 0x36, 0x7f, 0x0c, 0x5b, 0x8d, 0x53, 0x77, 0x8d, 0x3d, 0xea, 0x31, 0x99, + 0xda, 0x01, 0x3d, 0xdc, 0x20, 0x04, 0x0f, 0xd4, 0xf9, 0x87, 0x7e, 0xf1, 0x41, 0xfc, 0x4d, 0x36, + 0x70, 0x9e, 0xff, 0xea, 0x3c, 0x95, 0xe2, 0xdd, 0x1e, 0x5e, 0x51, 0x39, 0x9e, 0x6f, 0x5e, 0x4f, + 0x4c, 0x57, 0x4c, 0x7f, 0xaf, 0xbe, 0xa3, 0x1a, 0x76, 0x4d, 0x03, 0xa2, 0x2b, 0x7f, 0xe6, 0xbd, + 0xf2, 0xbe, 0xe6, 0x1f, 0x3a, 0xcc, 0x53, 0xef, 0x30, 0x43, 0x0f, 0x0d, 0x90, 0x49, 0x3c, 0x24, + 0x89, 0xe8, 0xb6, 0xc7, 0xd3, 0x30, 0x20, 0x1c, 0x45, 0xb7, 0x8a, 0xff, 0x3d, 0x87, 0x4f, 0x08, + 0xfc, 0xe4, 0x7f, 0x08, 0x0f, 0x4a, 0x72, 0x47, 0x3a, 0xdc, 0x84, 0x76, 0x2e, 0x59, 0xb8, 0x90, + 0x41, 0x52, 0xe6, 0x42, 0xd1, 0xfe, 0xfd, 0xd5, 0x77, 0x4f, 0xfa, 0x2f, 0x90, 0x19, 0xed, 0x1f, + 0xd4, 0xd8, 0xa7, 0xd5, 0xf9, 0x32, 0xb5, 0x35, 0xa9, 0x3d, 0x1f, 0x47, 0xc2, 0xc9, 0x63, 0x84, + 0x07, 0x78, 0xbd, 0x92, 0xe9, 0x04, 0x27, 0x91, 0x57, 0xa8, 0x30, 0x93, 0x2a, 0x07, 0x50, 0x96, + 0x04, 0x94, 0x05, 0xa2, 0xa5, 0x42, 0x11, 0xdc, 0x4b, 0x3b, 0x92, 0xcf, 0xd9, 0x31, 0x79, 0x82, + 0xf0, 0x29, 0xc1, 0xea, 0x6e, 0x57, 0xab, 0x64, 0x2e, 0xc1, 0x5d, 0x0b, 0xbd, 0x2c, 0xfc, 0x36, + 0x93, 0x2c, 0xc0, 0x53, 0x05, 0xbc, 0x59, 0x32, 0x9d, 0x0d, 0x1e, 0x79, 0x0f, 0xe1, 0x7c, 0xa3, + 0x7c, 0x13, 0x61, 0xb5, 0x70, 0xbe, 0x44, 0x58, 0xad, 0x6c, 0x4f, 0xb9, 0x21, 0x60, 0x5d, 0x25, + 0x8b, 0xe9, 0x07, 0x18, 0x80, 0xd1, 0x8e, 0xa0, 0x2d, 0x1d, 0x93, 0xa7, 0x08, 0x0f, 0x37, 0x40, + 0xf2, 0xf4, 0xa9, 0xc9, 0x29, 0x69, 0xbd, 0xf0, 0x05, 0x2d, 0xb3, 0x3c, 0xe0, 0x2d, 0x0a, 0xbc, + 0x17, 0xc9, 0x5c, 0x76, 0xbc, 0xe4, 0x05, 0xc2, 0x43, 0x91, 0x49, 0x9f, 0xcc, 0x27, 0x39, 0x6d, + 0x23, 0x68, 0x05, 0x35, 0xab, 0x38, 0x40, 0xfc, 0xb3, 0x80, 0xf8, 0x90, 0x3c, 0x48, 0x85, 0x18, + 0xe5, 0x19, 0xda, 0x91, 0x1c, 0xfc, 0x8f, 0x1b, 0x85, 0xa9, 0x1d, 0x89, 0xd9, 0xfe, 0x58, 0x3b, + 0x12, 0xd3, 0xfc, 0x31, 0xf9, 0x08, 0xe1, 0xd3, 0x51, 0xce, 0xc3, 0x13, 0xbe, 0x90, 0x9c, 0xc0, + 0x18, 0x2a, 0x56, 0x28, 0x76, 0xa3, 0x02, 0x31, 0x5d, 0x11, 0x31, 0x69, 0x64, 0xbe, 0xab, 0x98, + 0xc8, 0x73, 0x84, 0x4f, 0xea, 0x30, 0x77, 0x27, 0xf5, 0x9f, 0x26, 0x1a, 0x91, 0xd8, 0x7f, 0x9a, + 0xe9, 0x80, 0xa2, 0x0b, 0x5c, 0x1b, 0xe4, 0x5e, 0x2a, 0x2e, 0x18, 0xff, 0x33, 0xa4, 0xf9, 0xff, + 0x08, 0x63, 0x00, 0xcd, 0x33, 0x9c, 0x72, 0xcb, 0x9b, 0xa1, 0x5f, 0xcc, 0x26, 0x0c, 0xe8, 0x2f, + 0x09, 0xf4, 0x73, 0x64, 0x36, 0x2b, 0x7a, 0xf2, 0x0c, 0xe1, 0x7c, 0x83, 0x08, 0x24, 0x42, 0x6b, + 0x65, 0x25, 0x89, 0xd0, 0xda, 0xb8, 0x45, 0x17, 0x7d, 0x61, 0x37, 0xd0, 0x8d, 0xf4, 0x85, 0xf7, + 0x11, 0xc6, 0x21, 0xff, 0x20, 0x49, 0xae, 0xdb, 0xa8, 0x50, 0x61, 0x3e, 0xa3, 0x34, 0x20, 0x5d, + 0x16, 0x48, 0x17, 0x49, 0x31, 0x15, 0x29, 0xff, 0x35, 0xad, 0x4a, 0x04, 0xe7, 0xbb, 0xa2, 0xf5, + 0x4b, 0x1a, 0x93, 0xd8, 0x63, 0x5b, 0xb8, 0x51, 0x62, 0x8f, 0x6d, 0xe5, 0x45, 0xca, 0x75, 0x81, + 0xf0, 0x0a, 0xb9, 0x9c, 0xa1, 0xf5, 0x5b, 0xe5, 0x12, 0xef, 0xff, 0xe1, 0xeb, 0xf4, 0x02, 0x61, + 0xb2, 0xce, 0xfc, 0x16, 0xde, 0x93, 0x78, 0xef, 0xe3, 0xc9, 0x55, 0xe2, 0xbd, 0xef, 0x40, 0xab, + 0x94, 0x3f, 0x0a, 0xe8, 0x2b, 0xe4, 0x56, 0x2a, 0xf4, 0x0a, 0xf3, 0x4b, 0x86, 0xb0, 0x52, 0xe2, + 0x15, 0x51, 0x6a, 0x2d, 0x89, 0x67, 0x08, 0xe3, 0x75, 0xe6, 0x03, 0xa1, 0x22, 0xc9, 0x33, 0x46, + 0x94, 0xa5, 0x15, 0xe6, 0xb2, 0x88, 0x02, 0xde, 0x9b, 0x02, 0xef, 0x35, 0xb2, 0x94, 0x09, 0xaf, + 0x43, 0x0f, 0x4b, 0x65, 0xea, 0xd3, 0x08, 0xcc, 0x2f, 0x10, 0x26, 0xed, 0xe4, 0x80, 0x2c, 0xa6, + 0xd4, 0x64, 0x2c, 0x13, 0x2a, 0x5c, 0xe9, 0x52, 0xab, 0xeb, 0x20, 0xa2, 0x84, 0x27, 0x12, 0xc4, + 0xe7, 0x08, 0x9f, 0x69, 0xb7, 0xcf, 0x9b, 0xd9, 0x52, 0x72, 0x7f, 0xea, 0x1c, 0xca, 0xef, 0xba, + 0x57, 0xec, 0xfa, 0xe9, 0x88, 0x46, 0x43, 0x3e, 0x41, 0xf8, 0x74, 0x0b, 0xb1, 0x49, 0x2c, 0xfa, + 0x78, 0x4e, 0x95, 0x58, 0xf4, 0x1d, 0x78, 0x53, 0x17, 0x1d, 0x85, 0x5f, 0xd5, 0x52, 0x5d, 0x98, + 0x28, 0x19, 0x02, 0xe2, 0x73, 0x84, 0x71, 0xc8, 0x86, 0x12, 0x3b, 0x5f, 0x1b, 0x01, 0x4b, 0xec, + 0x7c, 0xed, 0x14, 0x4b, 0x59, 0x17, 0x38, 0x6f, 0x93, 0x9b, 0x19, 0x66, 0x21, 0xd3, 0x60, 0x12, + 0xa1, 0x76, 0x14, 0x70, 0xba, 0x63, 0xed, 0x48, 0xb0, 0xb8, 0x63, 0xf2, 0x31, 0x1f, 0x2c, 0x9a, + 0x09, 0x53, 0xf2, 0x60, 0x11, 0xcb, 0xde, 0x92, 0x07, 0x8b, 0x78, 0x46, 0xa7, 0x5c, 0x13, 0x31, + 0x5c, 0x26, 0x0b, 0xe9, 0x83, 0x85, 0xfc, 0xe7, 0x5b, 0x38, 0xd6, 0x7d, 0x80, 0xf0, 0x70, 0x94, + 0xa0, 0x25, 0x0e, 0x9f, 0x31, 0x34, 0x2f, 0x71, 0xf8, 0x8c, 0x63, 0x7e, 0xca, 0x55, 0x01, 0xf6, + 0x12, 0x51, 0x33, 0x3d, 0x35, 0xb4, 0xc2, 0x4a, 0x7c, 0x12, 0xf2, 0x56, 0x36, 0x5e, 0xbe, 0x19, + 0x47, 0xaf, 0xde, 0x8c, 0xa3, 0x6f, 0xdf, 0x8c, 0xa3, 0xc7, 0x6f, 0xc7, 0xfb, 0x5e, 0xbd, 0x1d, + 0xef, 0xfb, 0xfa, 0xed, 0x78, 0xdf, 0x5f, 0x8a, 0x11, 0xfa, 0x27, 0x6d, 0x6e, 0xd0, 0x1d, 0xaf, + 0xd9, 0xe6, 0xbf, 0x1a, 0x56, 0x05, 0x1d, 0xdc, 0x19, 0x14, 0xff, 0x07, 0xbc, 0xfc, 0x7d, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xbc, 0xcc, 0xcc, 0x44, 0x85, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3718,10 +3717,10 @@ func (m *QueryFindFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Fid) > 0 { - i -= len(m.Fid) - copy(dAtA[i:], m.Fid) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Fid))) + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Merkle))) i-- dAtA[i] = 0xa } @@ -4630,7 +4629,7 @@ func (m *QueryFindFileRequest) Size() (n int) { } var l int _ = l - l = len(m.Fid) + l = len(m.Merkle) if l > 0 { n += 1 + l + sovQuery(uint64(l)) } @@ -7073,9 +7072,9 @@ func (m *QueryFindFileRequest) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -7085,23 +7084,25 @@ func (m *QueryFindFileRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Fid = string(dAtA[iNdEx:postIndex]) + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/storage/types/query.pb.gw.go b/x/storage/types/query.pb.gw.go index 9682c44ee..9615b8020 100644 --- a/x/storage/types/query.pb.gw.go +++ b/x/storage/types/query.pb.gw.go @@ -680,15 +680,15 @@ func request_Query_FindFile_0(ctx context.Context, marshaler runtime.Marshaler, _ = err ) - val, ok = pathParams["fid"] + val, ok = pathParams["merkle"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "fid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") } - protoReq.Fid, err = runtime.String(val) + protoReq.Merkle, err = runtime.Bytes(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "fid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) } msg, err := client.FindFile(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -707,15 +707,15 @@ func local_request_Query_FindFile_0(ctx context.Context, marshaler runtime.Marsh _ = err ) - val, ok = pathParams["fid"] + val, ok = pathParams["merkle"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "fid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") } - protoReq.Fid, err = runtime.String(val) + protoReq.Merkle, err = runtime.Bytes(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "fid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) } msg, err := server.FindFile(ctx, &protoReq) @@ -2002,7 +2002,7 @@ var ( pattern_Query_StoreCount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "storing", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_FindFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "find_file", "fid"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_FindFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "find_file", "merkle"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_GetClientFreeSpace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "get_client_free_space", "address"}, "", runtime.AssumeColonVerbOpt(false))) diff --git a/x/storage/types/strays.pb.go b/x/storage/types/strays.pb.go deleted file mode 100644 index d4ab82526..000000000 --- a/x/storage/types/strays.pb.go +++ /dev/null @@ -1,558 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: canine_chain/storage/strays.proto - -package types - -import ( - fmt "fmt" - proto "github.com/gogo/protobuf/proto" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -type Strays struct { - Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` - Fid string `protobuf:"bytes,2,opt,name=fid,proto3" json:"fid,omitempty"` - Signee string `protobuf:"bytes,3,opt,name=signee,proto3" json:"signee,omitempty"` - Filesize string `protobuf:"bytes,4,opt,name=filesize,proto3" json:"filesize,omitempty"` - Merkle string `protobuf:"bytes,5,opt,name=merkle,proto3" json:"merkle,omitempty"` - End int64 `protobuf:"varint,6,opt,name=end,proto3" json:"end,omitempty"` -} - -func (m *Strays) Reset() { *m = Strays{} } -func (m *Strays) String() string { return proto.CompactTextString(m) } -func (*Strays) ProtoMessage() {} -func (*Strays) Descriptor() ([]byte, []int) { - return fileDescriptor_2da44830ae5f0b34, []int{0} -} -func (m *Strays) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Strays) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Strays.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 *Strays) XXX_Merge(src proto.Message) { - xxx_messageInfo_Strays.Merge(m, src) -} -func (m *Strays) XXX_Size() int { - return m.Size() -} -func (m *Strays) XXX_DiscardUnknown() { - xxx_messageInfo_Strays.DiscardUnknown(m) -} - -var xxx_messageInfo_Strays proto.InternalMessageInfo - -func (m *Strays) GetCid() string { - if m != nil { - return m.Cid - } - return "" -} - -func (m *Strays) GetFid() string { - if m != nil { - return m.Fid - } - return "" -} - -func (m *Strays) GetSignee() string { - if m != nil { - return m.Signee - } - return "" -} - -func (m *Strays) GetFilesize() string { - if m != nil { - return m.Filesize - } - return "" -} - -func (m *Strays) GetMerkle() string { - if m != nil { - return m.Merkle - } - return "" -} - -func (m *Strays) GetEnd() int64 { - if m != nil { - return m.End - } - return 0 -} - -func init() { - proto.RegisterType((*Strays)(nil), "canine_chain.storage.Strays") -} - -func init() { proto.RegisterFile("canine_chain/storage/strays.proto", fileDescriptor_2da44830ae5f0b34) } - -var fileDescriptor_2da44830ae5f0b34 = []byte{ - // 233 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0x4e, 0xcc, 0xcb, - 0xcc, 0x4b, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0xcc, 0xd3, 0x2f, 0x2e, 0xc9, 0x2f, 0x4a, 0x4c, 0x4f, - 0xd5, 0x2f, 0x2e, 0x29, 0x4a, 0xac, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x41, - 0x56, 0xa2, 0x07, 0x55, 0xa2, 0xd4, 0xc5, 0xc8, 0xc5, 0x16, 0x0c, 0x56, 0x26, 0x24, 0xc0, 0xc5, - 0x9c, 0x9c, 0x99, 0x22, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0x04, 0x62, 0x82, 0x44, 0xd2, 0x32, - 0x53, 0x24, 0x98, 0x20, 0x22, 0x69, 0x99, 0x29, 0x42, 0x62, 0x5c, 0x6c, 0xc5, 0x99, 0xe9, 0x79, - 0xa9, 0xa9, 0x12, 0xcc, 0x60, 0x41, 0x28, 0x4f, 0x48, 0x8a, 0x8b, 0x23, 0x2d, 0x33, 0x27, 0xb5, - 0x38, 0xb3, 0x2a, 0x55, 0x82, 0x05, 0x2c, 0x03, 0xe7, 0x83, 0xf4, 0xe4, 0xa6, 0x16, 0x65, 0xe7, - 0xa4, 0x4a, 0xb0, 0x42, 0xf4, 0x40, 0x78, 0x20, 0xd3, 0x53, 0xf3, 0x52, 0x24, 0xd8, 0x14, 0x18, - 0x35, 0x98, 0x83, 0x40, 0x4c, 0x27, 0x9f, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, - 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, - 0x88, 0x32, 0x4a, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0xcf, 0x4a, 0x4c, - 0xce, 0x4e, 0xcc, 0xf1, 0x49, 0x4c, 0x2a, 0xd6, 0x87, 0x78, 0x49, 0x17, 0xe2, 0xeb, 0x0a, 0xb8, - 0xbf, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xfe, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, - 0xff, 0x31, 0x5f, 0x52, 0x82, 0x1c, 0x01, 0x00, 0x00, -} - -func (m *Strays) 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 *Strays) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Strays) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.End != 0 { - i = encodeVarintStrays(dAtA, i, uint64(m.End)) - i-- - dAtA[i] = 0x30 - } - if len(m.Merkle) > 0 { - i -= len(m.Merkle) - copy(dAtA[i:], m.Merkle) - i = encodeVarintStrays(dAtA, i, uint64(len(m.Merkle))) - i-- - dAtA[i] = 0x2a - } - if len(m.Filesize) > 0 { - i -= len(m.Filesize) - copy(dAtA[i:], m.Filesize) - i = encodeVarintStrays(dAtA, i, uint64(len(m.Filesize))) - i-- - dAtA[i] = 0x22 - } - if len(m.Signee) > 0 { - i -= len(m.Signee) - copy(dAtA[i:], m.Signee) - i = encodeVarintStrays(dAtA, i, uint64(len(m.Signee))) - i-- - dAtA[i] = 0x1a - } - if len(m.Fid) > 0 { - i -= len(m.Fid) - copy(dAtA[i:], m.Fid) - i = encodeVarintStrays(dAtA, i, uint64(len(m.Fid))) - i-- - dAtA[i] = 0x12 - } - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintStrays(dAtA, i, uint64(len(m.Cid))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintStrays(dAtA []byte, offset int, v uint64) int { - offset -= sovStrays(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *Strays) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovStrays(uint64(l)) - } - l = len(m.Fid) - if l > 0 { - n += 1 + l + sovStrays(uint64(l)) - } - l = len(m.Signee) - if l > 0 { - n += 1 + l + sovStrays(uint64(l)) - } - l = len(m.Filesize) - if l > 0 { - n += 1 + l + sovStrays(uint64(l)) - } - l = len(m.Merkle) - if l > 0 { - n += 1 + l + sovStrays(uint64(l)) - } - if m.End != 0 { - n += 1 + sovStrays(uint64(m.End)) - } - return n -} - -func sovStrays(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozStrays(x uint64) (n int) { - return sovStrays(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Strays) 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 ErrIntOverflowStrays - } - 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: Strays: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Strays: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStrays - } - 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 ErrInvalidLengthStrays - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStrays - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStrays - } - 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 ErrInvalidLengthStrays - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStrays - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Fid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signee", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStrays - } - 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 ErrInvalidLengthStrays - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStrays - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signee = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filesize", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStrays - } - 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 ErrInvalidLengthStrays - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStrays - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Filesize = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStrays - } - 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 ErrInvalidLengthStrays - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStrays - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Merkle = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field End", wireType) - } - m.End = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStrays - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.End |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipStrays(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthStrays - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipStrays(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowStrays - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowStrays - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowStrays - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthStrays - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupStrays - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthStrays - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthStrays = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowStrays = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupStrays = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index 50ce6fbb0..c235157c1 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -120,6 +120,7 @@ func (m *MsgPostFile) GetNote() string { } type MsgPostFileResponse struct { + ProviderIps []string `protobuf:"bytes,1,rep,name=provider_ips,json=providerIps,proto3" json:"provider_ips,omitempty"` } func (m *MsgPostFileResponse) Reset() { *m = MsgPostFileResponse{} } @@ -155,6 +156,13 @@ func (m *MsgPostFileResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgPostFileResponse proto.InternalMessageInfo +func (m *MsgPostFileResponse) GetProviderIps() []string { + if m != nil { + return m.ProviderIps + } + return nil +} + type MsgPostProof struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Item string `protobuf:"bytes,2,opt,name=item,proto3" json:"item,omitempty"` @@ -1859,81 +1867,83 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/tx.proto", fileDescriptor_2194ba0b2c3d6a97) } var fileDescriptor_2194ba0b2c3d6a97 = []byte{ - // 1181 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4d, 0x6f, 0xdb, 0x46, - 0x10, 0x35, 0x2d, 0xf9, 0x43, 0x13, 0xd9, 0x75, 0x18, 0x3b, 0x51, 0xe8, 0x58, 0x76, 0x18, 0xa4, - 0x71, 0x13, 0x44, 0x42, 0x1d, 0xa0, 0xbd, 0xf4, 0xe2, 0x34, 0x08, 0xe0, 0xc6, 0x2a, 0x5c, 0xda, - 0x45, 0x8b, 0xb6, 0xa8, 0xb0, 0x16, 0xd7, 0x34, 0x63, 0x91, 0xcb, 0xec, 0xae, 0x1c, 0x2b, 0x97, - 0xa2, 0x3d, 0xf7, 0xd0, 0x3f, 0x90, 0x43, 0x0f, 0xfd, 0x2f, 0x3d, 0xe6, 0x52, 0xa0, 0xc7, 0xc2, - 0xfe, 0x23, 0x05, 0x97, 0xab, 0x25, 0x29, 0x91, 0x94, 0x1c, 0x34, 0x68, 0x6e, 0xda, 0xe1, 0xdb, - 0x79, 0xef, 0xed, 0xac, 0x38, 0x03, 0xc2, 0x5a, 0x07, 0xf9, 0xae, 0x8f, 0xdb, 0x9d, 0x63, 0xe4, - 0xfa, 0x4d, 0xc6, 0x09, 0x45, 0x0e, 0x6e, 0xf2, 0xb3, 0x46, 0x40, 0x09, 0x27, 0xfa, 0x72, 0xf2, - 0x71, 0x43, 0x3e, 0x36, 0xff, 0xd2, 0xe0, 0x4a, 0x8b, 0x39, 0x7b, 0x84, 0xf1, 0xa7, 0x6e, 0x17, - 0xeb, 0x35, 0x98, 0xeb, 0x50, 0x8c, 0x38, 0xa1, 0x35, 0x6d, 0x43, 0xdb, 0xac, 0x58, 0x83, 0xa5, - 0x7e, 0x1d, 0x66, 0x3d, 0x4c, 0x4f, 0xba, 0xb8, 0x36, 0xbd, 0xa1, 0x6d, 0x56, 0x2d, 0xb9, 0xd2, - 0x57, 0xa1, 0x72, 0xe4, 0x76, 0x71, 0x9b, 0xb9, 0xaf, 0x70, 0xad, 0xb4, 0xa1, 0x6d, 0x96, 0xac, - 0xf9, 0x30, 0xb0, 0xef, 0xbe, 0xc2, 0xfa, 0x5d, 0x58, 0x0c, 0x28, 0x21, 0x47, 0x6d, 0xd7, 0xe7, - 0x98, 0x9e, 0xa2, 0x6e, 0xad, 0x2c, 0x10, 0x0b, 0x22, 0xba, 0x23, 0x83, 0xfa, 0x1a, 0x40, 0x04, - 0xe3, 0xfd, 0x00, 0xd7, 0x66, 0x04, 0xa4, 0x22, 0x22, 0x07, 0xfd, 0x00, 0x87, 0x8f, 0x3d, 0x74, - 0xd6, 0x16, 0x01, 0x56, 0x9b, 0x8d, 0x1e, 0x7b, 0xe8, 0x6c, 0x4f, 0x04, 0x74, 0x1d, 0xca, 0x3e, - 0xe1, 0xb8, 0x36, 0x27, 0x04, 0x8b, 0xdf, 0xe6, 0x0a, 0x5c, 0x4b, 0xd8, 0xb2, 0x30, 0x0b, 0x88, - 0xcf, 0xb0, 0xf9, 0x5a, 0x83, 0xaa, 0x8c, 0x8b, 0xcd, 0x05, 0x7e, 0x75, 0x28, 0xbb, 0x1c, 0x7b, - 0xc2, 0x6d, 0xc5, 0x12, 0xbf, 0x43, 0xaf, 0xc7, 0x88, 0x1d, 0xb7, 0xbb, 0x2e, 0xe3, 0xc2, 0x6b, - 0xd5, 0x9a, 0x0f, 0x03, 0xbb, 0x2e, 0xe3, 0x89, 0x03, 0x2a, 0xa7, 0x0e, 0x68, 0x19, 0x66, 0xc8, - 0x4b, 0x1f, 0x53, 0xe1, 0xab, 0x62, 0x45, 0x8b, 0x30, 0xca, 0x38, 0xa2, 0x5c, 0xda, 0x89, 0x16, - 0xe6, 0x01, 0x2c, 0x27, 0xe5, 0x0d, 0x74, 0x87, 0x32, 0x59, 0xaf, 0xd3, 0xc1, 0x8c, 0x09, 0x99, - 0xf3, 0xd6, 0x60, 0xa9, 0x9b, 0x50, 0xc5, 0x94, 0x12, 0xda, 0xc2, 0x8c, 0x21, 0x07, 0x4b, 0xb9, - 0xa9, 0x98, 0xf9, 0x0d, 0x2c, 0xb4, 0x98, 0xf3, 0x04, 0x77, 0x31, 0xc7, 0x6f, 0x59, 0x65, 0x25, - 0xb7, 0x94, 0x94, 0x7b, 0x03, 0x56, 0x52, 0x89, 0xd5, 0x39, 0x7f, 0x06, 0x4b, 0x2d, 0xe6, 0xec, - 0xe3, 0xd0, 0xc6, 0xa9, 0x6b, 0x63, 0xba, 0xb3, 0x57, 0x40, 0xba, 0x08, 0xd3, 0x6e, 0x20, 0x95, - 0x4f, 0xbb, 0x81, 0x69, 0x40, 0x6d, 0x78, 0xb7, 0xca, 0xfc, 0x4c, 0x50, 0x26, 0x9e, 0x3d, 0xc3, - 0xfd, 0x43, 0xc4, 0x8a, 0x3c, 0xd5, 0x60, 0xee, 0x24, 0x02, 0x49, 0x8e, 0xc1, 0xd2, 0x5c, 0x87, - 0xb5, 0xcc, 0x64, 0x8a, 0xed, 0x8b, 0x61, 0x25, 0x07, 0x84, 0xa3, 0x2e, 0x0b, 0x50, 0xa7, 0x88, - 0x30, 0x3c, 0xac, 0x10, 0x22, 0xe9, 0xa2, 0x85, 0x69, 0xc2, 0x46, 0x5e, 0x2e, 0xc5, 0xf7, 0xa5, - 0xa8, 0xd4, 0xb6, 0x6d, 0x7f, 0xde, 0x45, 0xae, 0x87, 0x69, 0x01, 0xc9, 0x1d, 0x58, 0xe8, 0x84, - 0xa0, 0x36, 0xb2, 0x6d, 0x1a, 0x5e, 0x0c, 0x59, 0x79, 0x11, 0xdc, 0x8e, 0x62, 0xb2, 0x40, 0x71, - 0x3e, 0x45, 0xf4, 0x95, 0x28, 0x90, 0x85, 0x3d, 0x72, 0x8a, 0xff, 0x23, 0xae, 0xa8, 0x6a, 0xa9, - 0x94, 0x8a, 0xae, 0x07, 0x1f, 0xb4, 0x98, 0xb3, 0xe3, 0xbb, 0xca, 0xfc, 0xe4, 0xd7, 0x21, 0x59, - 0xbf, 0x52, 0xaa, 0x7e, 0x7a, 0x1d, 0x80, 0xab, 0x43, 0x14, 0x7f, 0xbb, 0x8a, 0x95, 0x88, 0x98, - 0x37, 0xe1, 0xc6, 0x10, 0xad, 0x52, 0xd4, 0x14, 0x2f, 0x88, 0xfd, 0xe3, 0x1e, 0xb7, 0xc9, 0x4b, - 0x7f, 0xbc, 0x2a, 0x73, 0x0d, 0x56, 0x33, 0x36, 0xa8, 0x7c, 0xbf, 0x6b, 0xa2, 0x74, 0x8f, 0x7b, - 0xfd, 0xfd, 0xe8, 0xd5, 0x5a, 0x60, 0x70, 0x1d, 0xae, 0x1c, 0x11, 0x3a, 0x74, 0x98, 0x70, 0x44, - 0xa8, 0x3c, 0x4a, 0xdd, 0x80, 0x79, 0xbb, 0x47, 0x11, 0x77, 0x89, 0x2f, 0x2d, 0xab, 0x75, 0x78, - 0xb9, 0x0e, 0xfb, 0x1c, 0x33, 0x69, 0x37, 0x5a, 0x84, 0x15, 0x0a, 0x50, 0xdf, 0xc3, 0x3e, 0x6f, - 0xdb, 0xd8, 0x27, 0x9e, 0x7c, 0xd9, 0x54, 0x65, 0xf0, 0x49, 0x18, 0x93, 0xb7, 0x21, 0x96, 0xa8, - 0xc4, 0xff, 0x20, 0xb4, 0x8b, 0xa2, 0xed, 0x73, 0x8a, 0xfa, 0x05, 0xda, 0x97, 0xa0, 0xd4, 0x71, - 0x6d, 0xa9, 0x39, 0xfc, 0x39, 0xec, 0xa6, 0x34, 0xec, 0x46, 0xd2, 0xc6, 0xd9, 0x15, 0xed, 0x1f, - 0x1a, 0x5c, 0x6d, 0x31, 0xe7, 0xeb, 0xc0, 0xa1, 0xc8, 0xc6, 0xef, 0xef, 0xb9, 0xad, 0xc2, 0xcd, - 0x11, 0x99, 0xca, 0x44, 0x5f, 0x3c, 0xb4, 0xf0, 0x8b, 0x1e, 0x66, 0x7c, 0x9b, 0x73, 0xcc, 0xb8, - 0x20, 0x7c, 0x4a, 0xa8, 0xf7, 0x76, 0x2f, 0xda, 0xa8, 0x5b, 0x94, 0x32, 0xbb, 0x45, 0x39, 0xf9, - 0xfa, 0x7d, 0x01, 0xb7, 0x73, 0xa9, 0x55, 0xeb, 0xb8, 0x05, 0x61, 0x27, 0x15, 0x97, 0x35, 0x6c, - 0x1e, 0xa5, 0xcd, 0x8a, 0x15, 0x07, 0x92, 0x8d, 0x65, 0x3a, 0xdd, 0x58, 0x96, 0x61, 0x46, 0x34, - 0x91, 0x81, 0x10, 0xb1, 0x30, 0x7f, 0xd6, 0xa0, 0x12, 0xbe, 0x51, 0x04, 0x59, 0xb1, 0xbd, 0x90, - 0x04, 0x53, 0x59, 0x25, 0xb9, 0x4a, 0xd8, 0x2e, 0x65, 0xdb, 0x2e, 0x67, 0xda, 0x9e, 0x49, 0xda, - 0xbe, 0x26, 0x6e, 0x4d, 0x24, 0x41, 0x95, 0xe1, 0x57, 0x4d, 0xb4, 0x4e, 0x79, 0x18, 0x16, 0x0e, - 0x08, 0xe5, 0xe3, 0x4b, 0xf0, 0xce, 0x34, 0x76, 0xe1, 0x56, 0x96, 0x9a, 0x77, 0x5b, 0x95, 0x88, - 0xe7, 0x7f, 0xad, 0x4a, 0x24, 0x61, 0x60, 0x73, 0xeb, 0xf5, 0x02, 0x94, 0x5a, 0xcc, 0xd1, 0xbf, - 0x85, 0x79, 0x35, 0x62, 0xde, 0x6e, 0x64, 0x4d, 0xa2, 0x8d, 0xc4, 0xb8, 0x66, 0x7c, 0x34, 0x16, - 0xa2, 0x0e, 0xf2, 0x7b, 0xa8, 0xc4, 0xd3, 0x9c, 0x59, 0xb8, 0x4f, 0x60, 0x8c, 0xfb, 0xe3, 0x31, - 0x2a, 0xf9, 0x8f, 0x00, 0x89, 0xa9, 0xe9, 0x4e, 0xee, 0xce, 0x18, 0x64, 0x3c, 0x98, 0x00, 0xa4, - 0xf2, 0x3b, 0xb0, 0x90, 0x9e, 0x91, 0x3e, 0xcc, 0xdd, 0x9d, 0xc2, 0x19, 0x8d, 0xc9, 0x70, 0x8a, - 0xe8, 0x14, 0xf4, 0x8c, 0x91, 0xe9, 0xc1, 0x24, 0x59, 0x24, 0xd8, 0x78, 0x74, 0x09, 0xb0, 0xe2, - 0xfd, 0x09, 0x56, 0xb2, 0x87, 0xa7, 0x89, 0x0c, 0xc4, 0x78, 0xe3, 0x93, 0xcb, 0xe1, 0x95, 0x00, - 0x1b, 0xaa, 0xa9, 0xa9, 0xe3, 0x6e, 0x6e, 0x9e, 0x24, 0xcc, 0x78, 0x38, 0x11, 0x4c, 0xb1, 0x04, - 0xb0, 0x34, 0x32, 0x49, 0xe4, 0xdf, 0xe1, 0x61, 0xa8, 0xf1, 0xf1, 0xc4, 0xd0, 0xe4, 0xcd, 0x4c, - 0x8c, 0x1a, 0xf9, 0x37, 0x33, 0x06, 0x15, 0xdc, 0xcc, 0xd1, 0x89, 0x40, 0x7f, 0x0e, 0x8b, 0x43, - 0x6d, 0xf9, 0x5e, 0xee, 0xf6, 0x34, 0xd0, 0x68, 0x4e, 0x08, 0x54, 0x5c, 0x47, 0xa0, 0x6f, 0xdb, - 0xf6, 0xc0, 0xe2, 0x60, 0x1a, 0xcd, 0xf7, 0x14, 0x8f, 0xb3, 0x05, 0x9e, 0x46, 0x67, 0x5e, 0x9d, - 0xc0, 0x4a, 0x34, 0x9d, 0x0e, 0x53, 0xe5, 0xff, 0xeb, 0x52, 0xd3, 0x6c, 0xc1, 0xbf, 0x2e, 0x73, - 0xea, 0xd5, 0x7f, 0xd1, 0xe0, 0x7a, 0xce, 0x60, 0xd0, 0x2c, 0x48, 0x95, 0xb5, 0xc1, 0xf8, 0xf4, - 0x92, 0x1b, 0x94, 0x08, 0x0b, 0x66, 0x65, 0xb7, 0x5e, 0xcf, 0x3f, 0x2c, 0x01, 0x30, 0xee, 0x8d, - 0x01, 0xa8, 0x9c, 0x0c, 0xae, 0x8e, 0x36, 0xda, 0xfb, 0xe3, 0x14, 0xc6, 0x58, 0x63, 0x6b, 0x72, - 0x6c, 0xd2, 0x88, 0x6c, 0x70, 0xeb, 0x05, 0xbb, 0x43, 0x40, 0x81, 0x91, 0x74, 0x7f, 0x7a, 0xbc, - 0xfb, 0xe7, 0x79, 0x5d, 0x7b, 0x73, 0x5e, 0xd7, 0xfe, 0x39, 0xaf, 0x6b, 0xbf, 0x5d, 0xd4, 0xa7, - 0xde, 0x5c, 0xd4, 0xa7, 0xfe, 0xbe, 0xa8, 0x4f, 0x7d, 0xb7, 0xe5, 0xb8, 0xfc, 0xb8, 0x77, 0xd8, - 0xe8, 0x10, 0xaf, 0xf9, 0x1c, 0x75, 0x4e, 0x50, 0x77, 0x17, 0x1d, 0xb2, 0x66, 0x94, 0xf7, 0x61, - 0xf4, 0x8d, 0xe5, 0x2c, 0xfe, 0xca, 0xd2, 0x0f, 0x30, 0x3b, 0x9c, 0x15, 0x5f, 0x5a, 0x1e, 0xfd, - 0x1b, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x9f, 0x01, 0x61, 0x8a, 0x11, 0x00, 0x00, + // 1201 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x36, 0x2d, 0xf9, 0x47, 0x63, 0xd9, 0x75, 0x18, 0x3b, 0x61, 0xe8, 0x58, 0xb6, 0x19, 0xa4, + 0x71, 0x13, 0x44, 0x42, 0x1d, 0xa0, 0xed, 0xa1, 0x17, 0xa7, 0x41, 0x00, 0x37, 0x56, 0xe1, 0xd2, + 0x2e, 0x5a, 0xb4, 0x45, 0x85, 0xb5, 0xb8, 0x96, 0x19, 0x4b, 0x5c, 0x66, 0x77, 0xe5, 0x58, 0xb9, + 0x14, 0xed, 0xb9, 0x87, 0xbe, 0x40, 0x0e, 0x3d, 0xf4, 0x5d, 0x7a, 0xcc, 0xa5, 0x40, 0x8f, 0x85, + 0xfd, 0x22, 0x05, 0x97, 0xcb, 0x25, 0x29, 0x93, 0x94, 0x1c, 0x34, 0x68, 0x6f, 0xda, 0xd9, 0x6f, + 0x67, 0xbe, 0x6f, 0x66, 0xb5, 0x33, 0x20, 0xac, 0xb6, 0x91, 0xe7, 0x7a, 0xb8, 0xd5, 0x3e, 0x46, + 0xae, 0xd7, 0x60, 0x9c, 0x50, 0xd4, 0xc1, 0x0d, 0x7e, 0x56, 0xf7, 0x29, 0xe1, 0x44, 0x5f, 0x4a, + 0x6e, 0xd7, 0xe5, 0xb6, 0xf5, 0xa7, 0x06, 0x73, 0x4d, 0xd6, 0xd9, 0x23, 0x8c, 0x3f, 0x75, 0xbb, + 0x58, 0x37, 0x60, 0xa6, 0x4d, 0x31, 0xe2, 0x84, 0x1a, 0xda, 0xba, 0xb6, 0x59, 0xb1, 0xa3, 0xa5, + 0x7e, 0x03, 0xa6, 0x7b, 0x98, 0x9e, 0x74, 0xb1, 0x31, 0xb9, 0xae, 0x6d, 0x56, 0x6d, 0xb9, 0xd2, + 0x57, 0xa0, 0x72, 0xe4, 0x76, 0x71, 0x8b, 0xb9, 0xaf, 0xb0, 0x51, 0x5a, 0xd7, 0x36, 0x4b, 0xf6, + 0x6c, 0x60, 0xd8, 0x77, 0x5f, 0x61, 0xfd, 0x2e, 0x2c, 0xf8, 0x94, 0x90, 0xa3, 0x96, 0xeb, 0x71, + 0x4c, 0x4f, 0x51, 0xd7, 0x28, 0x0b, 0xc4, 0xbc, 0xb0, 0xee, 0x48, 0xa3, 0xbe, 0x0a, 0x10, 0xc2, + 0xf8, 0xc0, 0xc7, 0xc6, 0x94, 0x80, 0x54, 0x84, 0xe5, 0x60, 0xe0, 0xe3, 0x60, 0xbb, 0x87, 0xce, + 0x5a, 0xc2, 0xc0, 0x8c, 0xe9, 0x70, 0xbb, 0x87, 0xce, 0xf6, 0x84, 0x41, 0xd7, 0xa1, 0xec, 0x11, + 0x8e, 0x8d, 0x19, 0x41, 0x58, 0xfc, 0xb6, 0x3e, 0x81, 0xeb, 0x09, 0x59, 0x36, 0x66, 0x3e, 0xf1, + 0x18, 0xd6, 0x37, 0xa0, 0xea, 0x53, 0x72, 0xea, 0x3a, 0x98, 0xb6, 0x5c, 0x9f, 0x19, 0xda, 0x7a, + 0x69, 0xb3, 0x62, 0xcf, 0x45, 0xb6, 0x1d, 0x9f, 0x59, 0xaf, 0x35, 0xa8, 0xca, 0xa3, 0xc2, 0x7f, + 0x41, 0x4a, 0x74, 0x28, 0xbb, 0x1c, 0xf7, 0x44, 0x42, 0x2a, 0xb6, 0xf8, 0x1d, 0xa4, 0xe3, 0x18, + 0xb1, 0xe3, 0x56, 0xd7, 0x65, 0x5c, 0xa4, 0xa3, 0x6a, 0xcf, 0x06, 0x86, 0x5d, 0x97, 0xf1, 0x44, + 0x0e, 0xcb, 0xa9, 0x1c, 0x2e, 0xc1, 0x14, 0x79, 0xe9, 0x61, 0x2a, 0xa4, 0x57, 0xec, 0x70, 0x11, + 0x58, 0x19, 0x47, 0x94, 0x4b, 0xc5, 0xe1, 0xc2, 0x3a, 0x80, 0xa5, 0x24, 0x3d, 0x25, 0xcd, 0x80, + 0x19, 0xd6, 0x6f, 0xb7, 0x31, 0x63, 0x82, 0xe6, 0xac, 0x1d, 0x2d, 0x75, 0x0b, 0xaa, 0x98, 0x52, + 0x42, 0x9b, 0x98, 0x31, 0xd4, 0xc1, 0x92, 0x6e, 0xca, 0x66, 0x7d, 0x0d, 0xf3, 0x4d, 0xd6, 0x79, + 0x82, 0xbb, 0x98, 0xe3, 0xb7, 0xbc, 0x08, 0x8a, 0x6e, 0x29, 0x49, 0xf7, 0x26, 0x2c, 0xa7, 0x1c, + 0x47, 0x7c, 0xad, 0x4f, 0x61, 0xb1, 0xc9, 0x3a, 0xfb, 0x38, 0x90, 0x11, 0x26, 0x7f, 0xaf, 0x20, + 0xe8, 0x02, 0x4c, 0xba, 0xbe, 0x64, 0x3e, 0xe9, 0xfa, 0x96, 0x09, 0xc6, 0xf0, 0x69, 0xe5, 0xf9, + 0x99, 0x08, 0x99, 0xd8, 0x7b, 0x86, 0x07, 0x87, 0x88, 0x15, 0x69, 0x32, 0x60, 0xe6, 0x24, 0x04, + 0xc9, 0x18, 0xd1, 0xd2, 0x5a, 0x83, 0xd5, 0x4c, 0x67, 0x2a, 0xda, 0xe7, 0xc3, 0x4c, 0x0e, 0x08, + 0x47, 0x5d, 0xe6, 0xa3, 0x76, 0x51, 0xc0, 0x20, 0x59, 0x01, 0x44, 0x86, 0x0b, 0x17, 0x96, 0x05, + 0xeb, 0x79, 0xbe, 0x54, 0xbc, 0x2f, 0x44, 0xa5, 0xb6, 0x1d, 0xe7, 0xb3, 0x2e, 0x72, 0x7b, 0x98, + 0x16, 0x04, 0xb9, 0x03, 0xf3, 0xed, 0x00, 0xd4, 0x42, 0x8e, 0x43, 0x83, 0x8b, 0x21, 0x2b, 0x2f, + 0x8c, 0xdb, 0xa1, 0x4d, 0x16, 0x28, 0xf6, 0xa7, 0x02, 0x7d, 0x29, 0x0a, 0x64, 0xe3, 0x1e, 0x39, + 0xc5, 0xff, 0x52, 0xac, 0xb0, 0x6a, 0x29, 0x97, 0x2a, 0x5c, 0x1f, 0xde, 0x6b, 0xb2, 0xce, 0x8e, + 0xe7, 0x2a, 0xf1, 0xe3, 0x5f, 0x87, 0x64, 0xfd, 0x4a, 0xa9, 0xfa, 0xe9, 0x35, 0x00, 0xae, 0x92, + 0x28, 0xfe, 0x76, 0x15, 0x3b, 0x61, 0xb1, 0x6e, 0xc1, 0xcd, 0xa1, 0xb0, 0x8a, 0x51, 0x43, 0xbc, + 0x21, 0xfb, 0xc7, 0x7d, 0xee, 0x90, 0x97, 0xde, 0x68, 0x56, 0xd6, 0x2a, 0xac, 0x64, 0x1c, 0x50, + 0xfe, 0x7e, 0xd3, 0x44, 0xe9, 0x1e, 0xf7, 0x07, 0xfb, 0xe1, 0xeb, 0x5b, 0x20, 0x70, 0x0d, 0xe6, + 0x8e, 0x08, 0x1d, 0x4a, 0x26, 0x1c, 0x11, 0x2a, 0x53, 0xa9, 0x9b, 0x30, 0xeb, 0xf4, 0x29, 0xe2, + 0x2e, 0xf1, 0xa4, 0x64, 0xb5, 0x0e, 0x2e, 0xd7, 0xe1, 0x80, 0x63, 0x26, 0xe5, 0x86, 0x8b, 0xa0, + 0x42, 0x3e, 0x1a, 0xf4, 0xb0, 0xc7, 0x5b, 0x0e, 0xf6, 0x48, 0x4f, 0x3e, 0x36, 0x55, 0x69, 0x7c, + 0x12, 0xd8, 0xe4, 0x6d, 0x88, 0x29, 0x2a, 0xf2, 0xdf, 0x0b, 0xee, 0xa2, 0x68, 0xfb, 0x9c, 0xa2, + 0x41, 0x01, 0xf7, 0x45, 0x28, 0xb5, 0x5d, 0x47, 0x72, 0x0e, 0x7e, 0x0e, 0xab, 0x29, 0x0d, 0xab, + 0x91, 0x61, 0x63, 0xef, 0x2a, 0xec, 0xef, 0x1a, 0x5c, 0x6b, 0xb2, 0xce, 0x57, 0x7e, 0x87, 0x22, + 0x07, 0xff, 0x7f, 0xf3, 0xb6, 0x02, 0xb7, 0x2e, 0xd1, 0x54, 0x22, 0x06, 0x62, 0xd3, 0xc6, 0x2f, + 0xfa, 0x98, 0xf1, 0x6d, 0xce, 0x31, 0xe3, 0x22, 0xe0, 0x53, 0x42, 0x7b, 0x6f, 0xf7, 0xd0, 0x86, + 0xdd, 0xa2, 0x94, 0xd9, 0x2d, 0xca, 0xc9, 0xe7, 0xf7, 0x05, 0x6c, 0xe4, 0x86, 0x56, 0xad, 0xe3, + 0x36, 0x54, 0xa2, 0x0e, 0x18, 0xb5, 0xc4, 0xd8, 0x90, 0x6c, 0x2c, 0x93, 0xe9, 0xc6, 0xb2, 0x04, + 0x53, 0xa2, 0x89, 0x44, 0x44, 0xc4, 0xc2, 0xfa, 0x49, 0x83, 0x4a, 0xf0, 0xa2, 0x88, 0x60, 0xc5, + 0xf2, 0x82, 0x20, 0x98, 0xca, 0x2a, 0xc9, 0x55, 0x42, 0x76, 0x29, 0x5b, 0x76, 0x39, 0x53, 0xf6, + 0x54, 0x52, 0xf6, 0x75, 0x71, 0x6b, 0x42, 0x0a, 0xaa, 0x0c, 0xbf, 0x68, 0xa2, 0x75, 0xca, 0x64, + 0xd8, 0xd8, 0x27, 0x94, 0x8f, 0x2e, 0xc1, 0x3b, 0xe3, 0xd8, 0x85, 0xdb, 0x59, 0x6c, 0xde, 0x6d, + 0x55, 0xc2, 0x38, 0xff, 0x69, 0x55, 0x42, 0x0a, 0x91, 0xcc, 0xad, 0xd7, 0xf3, 0x50, 0x6a, 0xb2, + 0x8e, 0xfe, 0x0d, 0xcc, 0xaa, 0x29, 0x74, 0xa3, 0x9e, 0x35, 0xac, 0xd6, 0x13, 0x13, 0x9d, 0xf9, + 0xc1, 0x48, 0x88, 0x4a, 0xe4, 0x77, 0x50, 0x89, 0xa7, 0x39, 0xab, 0xf0, 0x9c, 0xc0, 0x98, 0xf7, + 0x47, 0x63, 0x94, 0xf3, 0x1f, 0x00, 0x12, 0x53, 0xd3, 0x9d, 0xdc, 0x93, 0x31, 0xc8, 0x7c, 0x30, + 0x06, 0x48, 0xf9, 0xef, 0xc0, 0x7c, 0x7a, 0x46, 0x7a, 0x3f, 0xf7, 0x74, 0x0a, 0x67, 0xd6, 0xc7, + 0xc3, 0xa9, 0x40, 0xa7, 0xa0, 0x67, 0x8c, 0x4c, 0x0f, 0xc6, 0xf1, 0x22, 0xc1, 0xe6, 0xa3, 0x2b, + 0x80, 0x55, 0xdc, 0x1f, 0x61, 0x39, 0x7b, 0x78, 0x1a, 0x4b, 0x40, 0x8c, 0x37, 0x3f, 0xba, 0x1a, + 0x5e, 0x11, 0x70, 0xa0, 0x9a, 0x9a, 0x3a, 0xee, 0xe6, 0xfa, 0x49, 0xc2, 0xcc, 0x87, 0x63, 0xc1, + 0x54, 0x14, 0x1f, 0x16, 0x2f, 0x4d, 0x12, 0xf9, 0x77, 0x78, 0x18, 0x6a, 0x7e, 0x38, 0x36, 0x34, + 0x79, 0x33, 0x13, 0xa3, 0x46, 0xfe, 0xcd, 0x8c, 0x41, 0x05, 0x37, 0xf3, 0xf2, 0x44, 0xa0, 0x3f, + 0x87, 0x85, 0xa1, 0xb6, 0x7c, 0x2f, 0xf7, 0x78, 0x1a, 0x68, 0x36, 0xc6, 0x04, 0xaa, 0x58, 0x47, + 0xa0, 0x6f, 0x3b, 0x4e, 0x24, 0x31, 0x9a, 0x46, 0xf3, 0x35, 0xc5, 0xe3, 0x6c, 0x81, 0xa6, 0xcb, + 0x33, 0xaf, 0x4e, 0x60, 0x39, 0x9c, 0x4e, 0x87, 0x43, 0xe5, 0xff, 0xeb, 0x52, 0xd3, 0x6c, 0xc1, + 0xbf, 0x2e, 0x73, 0xea, 0xd5, 0x7f, 0xd6, 0xe0, 0x46, 0xce, 0x60, 0xd0, 0x28, 0x70, 0x95, 0x75, + 0xc0, 0xfc, 0xf8, 0x8a, 0x07, 0x14, 0x09, 0x1b, 0xa6, 0x65, 0xb7, 0x5e, 0xcb, 0x4f, 0x96, 0x00, + 0x98, 0xf7, 0x46, 0x00, 0x94, 0x4f, 0x06, 0xd7, 0x2e, 0x37, 0xda, 0xfb, 0xa3, 0x18, 0xc6, 0x58, + 0x73, 0x6b, 0x7c, 0x6c, 0x52, 0x88, 0x6c, 0x70, 0x6b, 0x05, 0xa7, 0x03, 0x40, 0x81, 0x90, 0x74, + 0x7f, 0x7a, 0xbc, 0xfb, 0xc7, 0x79, 0x4d, 0x7b, 0x73, 0x5e, 0xd3, 0xfe, 0x3e, 0xaf, 0x69, 0xbf, + 0x5e, 0xd4, 0x26, 0xde, 0x5c, 0xd4, 0x26, 0xfe, 0xba, 0xa8, 0x4d, 0x7c, 0xbb, 0xd5, 0x71, 0xf9, + 0x71, 0xff, 0xb0, 0xde, 0x26, 0xbd, 0xc6, 0x73, 0xd4, 0x3e, 0x41, 0xdd, 0x5d, 0x74, 0xc8, 0x1a, + 0xa1, 0xdf, 0x87, 0xe1, 0x67, 0x98, 0xb3, 0xf8, 0x43, 0xcc, 0xc0, 0xc7, 0xec, 0x70, 0x5a, 0x7c, + 0x8c, 0x79, 0xf4, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0xc6, 0xc2, 0x79, 0xad, 0x11, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2640,6 +2650,15 @@ func (m *MsgPostFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ProviderIps) > 0 { + for iNdEx := len(m.ProviderIps) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ProviderIps[iNdEx]) + copy(dAtA[i:], m.ProviderIps[iNdEx]) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProviderIps[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } return len(dAtA) - i, nil } @@ -3878,6 +3897,12 @@ func (m *MsgPostFileResponse) Size() (n int) { } var l int _ = l + if len(m.ProviderIps) > 0 { + for _, s := range m.ProviderIps { + l = len(s) + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -4679,6 +4704,38 @@ func (m *MsgPostFileResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgPostFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProviderIps", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProviderIps = append(m.ProviderIps, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) From 257470b4ca5584135fd5b3f4a2ae7828ddc75eb2 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 19 Oct 2023 20:13:22 -0400 Subject: [PATCH 025/256] linting some more --- app/upgrades.go | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/app/upgrades.go b/app/upgrades.go index 2702e1831..648a278e4 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -4,16 +4,11 @@ import ( upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/jackalLabs/canine-chain/v3/app/upgrades" "github.com/jackalLabs/canine-chain/v3/app/upgrades/bouncybulldog" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/recovery" v121 "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/121" "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/alpha11" "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/alpha13" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/async" "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/beta6" "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/beta7" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/fixstrays" - "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/killdeals" - paramUpgrade "github.com/jackalLabs/canine-chain/v3/app/upgrades/testnet/params" v3 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v3" v4 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v4" ) @@ -21,19 +16,13 @@ import ( func (app *JackalApp) registerTestnetUpgradeHandlers() { app.registerUpgrade(alpha11.NewUpgrade(app.mm, app.configurator, app.OracleKeeper)) app.registerUpgrade(alpha13.NewUpgrade(app.mm, app.configurator)) - app.registerUpgrade(killdeals.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(fixstrays.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(async.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(paramUpgrade.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) app.registerUpgrade(beta6.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) app.registerUpgrade(beta7.NewUpgrade(app.mm, app.configurator, app.NotificationsKeeper)) app.registerUpgrade(v121.NewUpgrade(app.mm, app.configurator)) - app.registerUpgrade(recovery.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) } func (app *JackalApp) registerMainnetUpgradeHandlers() { app.registerUpgrade(bouncybulldog.NewUpgrade(app.mm, app.configurator, app.OracleKeeper)) - app.registerUpgrade(recovery.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) app.registerUpgrade(v3.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) app.registerUpgrade(v4.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) } From 65e9899a2838e312cb08603b8d510a122ae46e2f Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 20 Oct 2023 10:07:29 -0400 Subject: [PATCH 026/256] linted all tests, still need to add better tests for new system --- x/storage/keeper/attestation_test.go | 131 ++++++++----------- x/storage/keeper/msg_server_attest_test.go | 113 ++++++++++------ x/storage/keeper/msg_server_post_contract.go | 1 + x/storage/keeper/report_test.go | 93 ++++++------- x/storage/keeper/rewards.go | 4 +- x/storage/keeper/rewards_test.go | 63 ++++----- x/storage/keeper/utils_test.go | 43 +++--- 7 files changed, 225 insertions(+), 223 deletions(-) diff --git a/x/storage/keeper/attestation_test.go b/x/storage/keeper/attestation_test.go index 8178a5ea7..72a74ebf8 100644 --- a/x/storage/keeper/attestation_test.go +++ b/x/storage/keeper/attestation_test.go @@ -3,13 +3,10 @@ package keeper_test import ( "fmt" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/testutil" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -const cid = "jklc123" - // testing attestations.go file func (suite *KeeperTestSuite) TestSetAttestationForm() { suite.SetupSuite() @@ -17,69 +14,47 @@ func (suite *KeeperTestSuite) TestSetAttestationForm() { var att []*types.Attestation attestation := types.AttestationForm{ Attestations: att, - Cid: cid, + Prover: "prover", + Merkle: []byte{}, + Owner: "owner", + Start: 0, } suite.storageKeeper.SetAttestationForm(suite.ctx, attestation) attestationRequest := types.QueryAttestationRequest{ - Cid: cid, + Prover: "prover", + Merkle: []byte{}, + Owner: "owner", + Start: 0, } res, err := suite.queryClient.Attestation(suite.ctx.Context(), &attestationRequest) suite.Require().NoError(err) - suite.Require().Equal(attestation.Cid, res.Attestation.Cid) + suite.Require().Equal(attestation.Prover, res.Attestation.Prover) + suite.Require().Equal(attestation.Owner, res.Attestation.Owner) + suite.Require().Equal(attestation.Start, res.Attestation.Start) + suite.Require().Equal(attestation.Merkle, res.Attestation.Merkle) suite.Require().Equal(attestation.Attestations, res.Attestation.Attestations) } -// testing attestations.go file -func (suite *KeeperTestSuite) TestRewardsAttestationForm() { - suite.SetupSuite() - - var att []*types.Attestation - attestation := types.AttestationForm{ - Attestations: att, - Cid: cid, - } - - suite.storageKeeper.SetAttestationForm(suite.ctx, attestation) - - attestationRequest := types.QueryAttestationRequest{ - Cid: cid, - } - - addresses, err := testutil.CreateTestAddresses("cosmos", 50) - suite.NoError(err) - - res, err := suite.queryClient.Attestation(suite.ctx.Context(), &attestationRequest) - suite.Require().NoError(err) - suite.Require().Equal(attestation.Cid, res.Attestation.Cid) - suite.Require().Equal(attestation.Attestations, res.Attestation.Attestations) - - address, err := sdk.AccAddressFromBech32(addresses[0]) - suite.Require().NoError(err) - - err = suite.storageKeeper.InternalRewards(suite.ctx, make([]types.ActiveDeals, 0), address) - suite.Require().NoError(err) - - _, found := suite.storageKeeper.GetAttestationForm(suite.ctx, cid) - suite.Require().Equal(false, found) -} - func (suite *KeeperTestSuite) TestGetAttestationForm() { suite.SetupSuite() var att []*types.Attestation attestation := types.AttestationForm{ Attestations: att, - Cid: cid, + Prover: "prover", + Merkle: []byte{}, + Owner: "owner", + Start: 0, } suite.storageKeeper.SetAttestationForm(suite.ctx, attestation) - foundAttestation, found := suite.storageKeeper.GetAttestationForm(suite.ctx, cid) + foundAttestation, found := suite.storageKeeper.GetAttestationForm(suite.ctx, "prover", []byte{}, "owner", 0) suite.Require().Equal(found, true) - suite.Require().Equal(foundAttestation.Cid, attestation.Cid) + suite.Require().Equal(foundAttestation.Prover, attestation.Prover) suite.Require().Equal(foundAttestation.Attestations, attestation.Attestations) } @@ -88,12 +63,18 @@ func (suite *KeeperTestSuite) TestGetAllAttestationForm() { attestation := types.AttestationForm{ Attestations: []*types.Attestation{}, - Cid: cid, + Prover: "prover", + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, } attestation2 := types.AttestationForm{ Attestations: []*types.Attestation{}, - Cid: "jklc1321", + Prover: "prover2", + Merkle: []byte("merkle2"), + Owner: "owner2", + Start: 0, } allAttestationFormbefore := suite.storageKeeper.GetAllAttestation(suite.ctx) @@ -111,22 +92,17 @@ func (suite *KeeperTestSuite) TestRemoveAttestationForm() { attestation := types.AttestationForm{ Attestations: []*types.Attestation{}, - Cid: cid, + Prover: "prover", + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, } suite.storageKeeper.SetAttestationForm(suite.ctx, attestation) - suite.storageKeeper.RemoveAttestation(suite.ctx, cid) + suite.storageKeeper.RemoveAttestation(suite.ctx, "prover", []byte{}, "owner", 0) - foundAttestation, found := suite.storageKeeper.GetAttestationForm(suite.ctx, cid) + _, found := suite.storageKeeper.GetAttestationForm(suite.ctx, "prover", []byte{}, "owner", 0) suite.Require().Equal(found, false) - - var atts []*types.Attestation - ghostAttestation := types.AttestationForm{ - Attestations: atts, - Cid: "", - } - - suite.Require().Equal(foundAttestation, ghostAttestation) } func (suite *KeeperTestSuite) TestMakeAttestation() { @@ -148,27 +124,26 @@ func (suite *KeeperTestSuite) TestMakeAttestation() { }) } - deal := types.ActiveDeals{ - Cid: cid, - Signee: "", - Provider: addresses[10], - Startblock: "", - Endblock: "", - Filesize: "10", - Proofverified: "false", - Proofsmissed: "0", - Blocktoprove: "0", - Creator: "", - Merkle: "", - Fid: "", + file := types.UnifiedFile{ + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, + Expires: 0, + FileSize: 100, + ProofInterval: 100, + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: "test", } + suite.storageKeeper.SetFile(suite.ctx, file) // creating storage deal - suite.storageKeeper.SetActiveDeals(suite.ctx, deal) // creating storage deal + file.AddProver(suite.ctx, suite.storageKeeper, addresses[10]) - _, err = suite.storageKeeper.RequestAttestation(suite.ctx, cid, addresses[10]) + _, err = suite.storageKeeper.RequestAttestation(suite.ctx, []byte("merkle"), "owner", 0, addresses[10]) suite.NoError(err) - form, found := suite.storageKeeper.GetAttestationForm(suite.ctx, cid) + form, found := suite.storageKeeper.GetAttestationForm(suite.ctx, addresses[10], []byte("merkle"), "owner", 0) suite.Equal(true, found) for _, attestation := range form.Attestations { @@ -179,12 +154,12 @@ func (suite *KeeperTestSuite) TestMakeAttestation() { allAttestationForm := suite.storageKeeper.GetAllAttestation(suite.ctx) suite.Require().Equal(1, len(allAttestationForm)) - d, found := suite.storageKeeper.GetActiveDeals(suite.ctx, cid) + d, found := suite.storageKeeper.GetProof(suite.ctx, addresses[10], []byte("merkle"), "owner", 0) suite.Equal(true, found) - suite.Equal("false", d.Proofverified) + suite.Equal(int64(0), d.LastProven) for i, attestation := range form.Attestations { - err := suite.storageKeeper.Attest(suite.ctx, cid, attestation.Provider) + err := suite.storageKeeper.Attest(suite.ctx, addresses[10], []byte("merkle"), "owner", 0, attestation.Provider) if i >= int(params.AttestMinToPass) { suite.Require().Error(err) } else { @@ -192,10 +167,10 @@ func (suite *KeeperTestSuite) TestMakeAttestation() { } } - _, found = suite.storageKeeper.GetAttestationForm(suite.ctx, cid) + _, found = suite.storageKeeper.GetAttestationForm(suite.ctx, addresses[10], []byte("merkle"), "owner", 0) suite.Equal(false, found) - d, found = suite.storageKeeper.GetActiveDeals(suite.ctx, cid) + d, found = suite.storageKeeper.GetProof(suite.ctx, addresses[10], []byte("merkle"), "owner", 0) suite.Equal(true, found) - suite.Equal("true", d.Proofverified) + suite.Equal(int64(0), d.LastProven) } diff --git a/x/storage/keeper/msg_server_attest_test.go b/x/storage/keeper/msg_server_attest_test.go index cdc048fe8..db85059b8 100644 --- a/x/storage/keeper/msg_server_attest_test.go +++ b/x/storage/keeper/msg_server_attest_test.go @@ -11,26 +11,35 @@ func (suite *KeeperTestSuite) TestAttest() { addresses, err := testutil.CreateTestAddresses("cosmos", int(params.AttestFormSize)+2) suite.Require().NoError(err) - validCid := "cid1" - noActiveDealCid := "no_active_deal_cid" - cases := map[string]struct { - cid string + prover string + owner string + merkle []byte + start int64 creator string expErr bool }{ - "attestation form not found": { - cid: "I do not exist", + "attestation form found": { + prover: addresses[10], + merkle: []byte("merkle"), + owner: "owner", + start: 0, creator: addresses[params.AttestFormSize], - expErr: true, + expErr: false, }, "not requested provider": { - cid: validCid, - creator: "not requested provider", + prover: addresses[4], + merkle: []byte("merkle"), + owner: "owner", + start: 0, + creator: addresses[params.AttestFormSize], expErr: true, }, "active deal not found": { - cid: noActiveDealCid, + prover: addresses[10], + merkle: []byte("merkle_bad"), + owner: "owner", + start: 0, creator: addresses[params.AttestFormSize], expErr: true, }, @@ -40,6 +49,21 @@ func (suite *KeeperTestSuite) TestAttest() { suite.Run(name, func() { suite.SetupSuite() + uf := types.UnifiedFile{ + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, + Expires: 0, + FileSize: 1000, + ProofInterval: 100, + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: "test", + } + suite.storageKeeper.SetFile(suite.ctx, uf) + uf.AddProver(suite.ctx, suite.storageKeeper, addresses[10]) + attestations := make([]*types.Attestation, params.AttestFormSize) for i := 0; i < int(params.AttestFormSize); i++ { @@ -51,24 +75,24 @@ func (suite *KeeperTestSuite) TestAttest() { attestForm := types.AttestationForm{ Attestations: attestations, - Cid: validCid, + Prover: addresses[10], + Merkle: uf.Merkle, + Owner: uf.Owner, + Start: uf.Start, } noActiveDealAttestForm := types.AttestationForm{ Attestations: attestations, - Cid: noActiveDealCid, + Prover: addresses[10], + Merkle: []byte("no_merkle"), + Owner: uf.Owner, + Start: uf.Start, } suite.storageKeeper.SetAttestationForm(suite.ctx, attestForm) suite.storageKeeper.SetAttestationForm(suite.ctx, noActiveDealAttestForm) - activeDeal := types.ActiveDeals{ - Cid: validCid, - } - - suite.storageKeeper.SetActiveDeals(suite.ctx, activeDeal) - - err = suite.storageKeeper.Attest(suite.ctx, tc.cid, tc.creator) + err = suite.storageKeeper.Attest(suite.ctx, tc.prover, tc.merkle, tc.owner, tc.start, tc.creator) if tc.expErr { suite.Error(err) @@ -85,27 +109,31 @@ func (suite *KeeperTestSuite) TestRequestAttestation() { addresses, err := testutil.CreateTestAddresses("cosmos", int(params.AttestFormSize)+2) suite.Require().NoError(err) - validCid := "cid1" - noActiveDealCid := "no_active_deal_cid" - requestedCid := "requested_cid" - cases := map[string]struct { - cid string + owner string + merkle []byte + start int64 creator string expErr bool }{ "attestation already requested": { - cid: requestedCid, + merkle: []byte("merkle"), + owner: "owner", + start: 0, creator: addresses[params.AttestFormSize], expErr: true, }, "not provider's cid": { - cid: validCid, + merkle: []byte("merkle"), + owner: "owner", + start: 0, creator: "not provider's cid", expErr: true, }, "active deal not found": { - cid: noActiveDealCid, + merkle: []byte("merkle_bad"), + owner: "owner", + start: 0, creator: addresses[params.AttestFormSize], expErr: true, }, @@ -115,6 +143,21 @@ func (suite *KeeperTestSuite) TestRequestAttestation() { suite.Run(name, func() { suite.SetupSuite() + uf := types.UnifiedFile{ + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, + Expires: 0, + FileSize: 1000, + ProofInterval: 100, + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: "test", + } + suite.storageKeeper.SetFile(suite.ctx, uf) + uf.AddProver(suite.ctx, suite.storageKeeper, addresses[10]) + for i := 0; i < int(params.AttestFormSize); i++ { provider := types.ActiveProviders{ Address: addresses[i], @@ -133,21 +176,15 @@ func (suite *KeeperTestSuite) TestRequestAttestation() { attestForm := types.AttestationForm{ Attestations: attestations, - Cid: requestedCid, + Prover: addresses[10], + Merkle: []byte("no_merkle"), + Owner: uf.Owner, + Start: uf.Start, } suite.storageKeeper.SetAttestationForm(suite.ctx, attestForm) - activeDeal := types.ActiveDeals{ - Provider: addresses[params.AttestFormSize], - Cid: validCid, - } - suite.storageKeeper.SetActiveDeals(suite.ctx, activeDeal) - - activeDeal.Cid = requestedCid - suite.storageKeeper.SetActiveDeals(suite.ctx, activeDeal) - - _, err = suite.storageKeeper.RequestAttestation(suite.ctx, tc.cid, tc.creator) + _, err = suite.storageKeeper.RequestAttestation(suite.ctx, tc.merkle, tc.owner, tc.start, tc.creator) if tc.expErr { suite.Error(err) diff --git a/x/storage/keeper/msg_server_post_contract.go b/x/storage/keeper/msg_server_post_contract.go index 79352cb9e..80de957f9 100644 --- a/x/storage/keeper/msg_server_post_contract.go +++ b/x/storage/keeper/msg_server_post_contract.go @@ -12,6 +12,7 @@ func (k msgServer) PostFile(goCtx context.Context, msg *types.MsgPostFile) (*typ ctx := sdk.UnwrapSDKContext(goCtx) _ = ctx + _ = msg return &types.MsgPostFileResponse{}, nil } diff --git a/x/storage/keeper/report_test.go b/x/storage/keeper/report_test.go index b1257ad55..42c8ecc8a 100644 --- a/x/storage/keeper/report_test.go +++ b/x/storage/keeper/report_test.go @@ -14,18 +14,24 @@ func (suite *KeeperTestSuite) TestSetReportForm() { var att []*types.Attestation report := types.ReportForm{ Attestations: att, - Cid: cid, + Prover: "prover", + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, } suite.storageKeeper.SetReportForm(suite.ctx, report) reportRequest := types.QueryReportRequest{ - Cid: cid, + Prover: "prover", + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, } res, err := suite.queryClient.Reports(suite.ctx.Context(), &reportRequest) suite.Require().NoError(err) - suite.Require().Equal(report.Cid, res.Report.Cid) + suite.Require().Equal(report.Prover, res.Report.Prover) suite.Require().Equal(report.Attestations, res.Report.Attestations) } @@ -35,14 +41,17 @@ func (suite *KeeperTestSuite) TestGetReportForm() { var att []*types.Attestation report := types.ReportForm{ Attestations: att, - Cid: cid, + Prover: "prover", + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, } suite.storageKeeper.SetReportForm(suite.ctx, report) - foundReport, found := suite.storageKeeper.GetReportForm(suite.ctx, cid) + foundReport, found := suite.storageKeeper.GetReportForm(suite.ctx, "prover", []byte{}, "owner", 0) suite.Require().Equal(found, true) - suite.Require().Equal(foundReport.Cid, report.Cid) + suite.Require().Equal(foundReport.Merkle, report.Merkle) suite.Require().Equal(foundReport.Attestations, report.Attestations) } @@ -51,12 +60,18 @@ func (suite *KeeperTestSuite) TestGetAllReportForm() { report := types.ReportForm{ Attestations: []*types.Attestation{}, - Cid: cid, + Prover: "prover", + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, } report2 := types.ReportForm{ Attestations: []*types.Attestation{}, - Cid: "jklc1321", + Prover: "prover", + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, } allReportFormsBefore := suite.storageKeeper.GetAllReport(suite.ctx) @@ -74,22 +89,17 @@ func (suite *KeeperTestSuite) TestRemoveReportForm() { report := types.ReportForm{ Attestations: []*types.Attestation{}, - Cid: cid, + Prover: "prover", + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, } suite.storageKeeper.SetReportForm(suite.ctx, report) - suite.storageKeeper.RemoveReport(suite.ctx, cid) + suite.storageKeeper.RemoveReport(suite.ctx, "prover", []byte{}, "owner", 0) - foundReport, found := suite.storageKeeper.GetReportForm(suite.ctx, cid) + _, found := suite.storageKeeper.GetReportForm(suite.ctx, "prover", []byte{}, "owner", 0) suite.Require().Equal(found, false) - - var atts []*types.Attestation - ghostReport := types.ReportForm{ - Attestations: atts, - Cid: "", - } - - suite.Require().Equal(foundReport, ghostReport) } func (suite *KeeperTestSuite) TestMakeReport() { @@ -113,27 +123,25 @@ func (suite *KeeperTestSuite) TestMakeReport() { }) } - deal := types.ActiveDeals{ - Cid: cid, - Signee: "", - Provider: addresses[10], - Startblock: "", - Endblock: "0", - Filesize: "", - Proofverified: "false", - Proofsmissed: "", - Blocktoprove: "", - Creator: "", - Merkle: "", - Fid: "", + uf := types.UnifiedFile{ + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, + Expires: 0, + FileSize: 1000, + ProofInterval: 100, + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: "test", } + suite.storageKeeper.SetFile(suite.ctx, uf) + uf.AddProver(suite.ctx, suite.storageKeeper, addresses[10]) - suite.storageKeeper.SetActiveDeals(suite.ctx, deal) // creating storage deal - - _, err = suite.storageKeeper.RequestReport(suite.ctx, cid) + _, err = suite.storageKeeper.RequestReport(suite.ctx, addresses[10], uf.Merkle, uf.Owner, uf.Start) suite.NoError(err) - form, found := suite.storageKeeper.GetReportForm(suite.ctx, cid) + form, found := suite.storageKeeper.GetReportForm(suite.ctx, addresses[10], uf.Merkle, uf.Owner, uf.Start) suite.Equal(true, found) for _, attestation := range form.Attestations { @@ -144,12 +152,11 @@ func (suite *KeeperTestSuite) TestMakeReport() { allReportForm := suite.storageKeeper.GetAllReport(suite.ctx) suite.Require().Equal(1, len(allReportForm)) - d, found := suite.storageKeeper.GetActiveDeals(suite.ctx, cid) + _, found = suite.storageKeeper.GetProof(suite.ctx, addresses[10], uf.Merkle, uf.Owner, uf.Start) suite.Equal(true, found) - suite.Equal("false", d.Proofverified) for i, attestation := range form.Attestations { - err := suite.storageKeeper.Report(suite.ctx, cid, attestation.Provider) + err := suite.storageKeeper.Report(suite.ctx, addresses[10], uf.Merkle, uf.Owner, uf.Start, attestation.Provider) if i >= int(params.AttestMinToPass) { suite.Require().Error(err) } else { @@ -157,12 +164,6 @@ func (suite *KeeperTestSuite) TestMakeReport() { } } - _, found = suite.storageKeeper.GetReportForm(suite.ctx, cid) + _, found = suite.storageKeeper.GetReportForm(suite.ctx, addresses[10], uf.Merkle, uf.Owner, uf.Start) suite.Equal(false, found) - - _, found = suite.storageKeeper.GetActiveDeals(suite.ctx, cid) - suite.Equal(false, found) - - _, found = suite.storageKeeper.GetStrays(suite.ctx, cid) - suite.Equal(true, found) } diff --git a/x/storage/keeper/rewards.go b/x/storage/keeper/rewards.go index 5d0de0910..b0e39d989 100644 --- a/x/storage/keeper/rewards.go +++ b/x/storage/keeper/rewards.go @@ -50,7 +50,7 @@ func (k Keeper) removeFileIfDeserved(ctx sdk.Context, file *types.UnifiedFile) { } // ManageRewards loops through every file on the network and manages it in some way. -func (k Keeper) manageRewards(ctx sdk.Context) { +func (k Keeper) ManageRewards(ctx sdk.Context) { var totalSize int64 s := make(map[string]int64) sizeTracker := &s @@ -80,5 +80,5 @@ func (k Keeper) RunRewardBlock(ctx sdk.Context) { return } - k.manageRewards(ctx) + k.ManageRewards(ctx) } diff --git a/x/storage/keeper/rewards_test.go b/x/storage/keeper/rewards_test.go index 9a09edec7..27a94169c 100644 --- a/x/storage/keeper/rewards_test.go +++ b/x/storage/keeper/rewards_test.go @@ -44,20 +44,20 @@ func (suite *KeeperTestSuite) TestReward() { }) providerOne := testAddresses[1] - dealOne := types.ActiveDeals{ - Cid: "cid1test", - Signee: signer, - Provider: providerOne, - Startblock: "0", - Endblock: "0", - Filesize: "100", - Proofverified: "true", - Proofsmissed: "0", - Blocktoprove: "1", - Creator: providerOne, - Merkle: "nil", - Fid: "fid1test", + dealOne := types.UnifiedFile{ + Merkle: []byte("merkle"), + Owner: signer, + Start: 0, + Expires: 0, + FileSize: 1000, + ProofInterval: 100, + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: "test", } + suite.storageKeeper.SetFile(suite.ctx, dealOne) + dealOne.AddProver(suite.ctx, suite.storageKeeper, providerOne) acc := suite.accountKeeper.GetModuleAddress(types.ModuleName) @@ -72,8 +72,6 @@ func (suite *KeeperTestSuite) TestReward() { bal = suite.bankKeeper.GetBalance(suite.ctx, acc, "ujkl") suite.Require().Equal(int64(6000000), bal.Amount.Int64()) - suite.storageKeeper.SetActiveDeals(suite.ctx, dealOne) - var blocks int64 = 10 * 5 ctx := suite.ctx.WithBlockHeight(blocks).WithHeaderHash([]byte{10, 15, 16, 20}) @@ -81,8 +79,7 @@ func (suite *KeeperTestSuite) TestReward() { suite.Require().Equal(blocks, ctx.BlockHeight()) suite.Require().Equal(ctx.BlockHeight()%blocks, int64(0)) - err = suite.storageKeeper.HandleRewardBlock(ctx) - suite.NoError(err) + suite.storageKeeper.ManageRewards(ctx) pOneAcc, err := sdk.AccAddressFromBech32(providerOne) suite.NoError(err) @@ -118,31 +115,30 @@ func (suite *KeeperTestSuite) TestMultiReward() { providers[i] = acc } - deals := make([]types.ActiveDeals, l*2) + deals := make([]types.UnifiedFile, l*2) total := 0 for i := 0; i < l*2; i++ { p := providers[i%l] - deal := types.ActiveDeals{ - Cid: fmt.Sprintf("cid1test%d", i), - Signee: signer, - Provider: p.String(), - Startblock: "0", - Endblock: "0", - Filesize: fmt.Sprintf("%d", i), - Proofverified: "true", - Proofsmissed: "0", - Blocktoprove: "1", - Creator: p.String(), - Merkle: "nil", - Fid: fmt.Sprintf("fid1test%d", i), + deal := types.UnifiedFile{ + Merkle: []byte("merkle"), + Owner: signer, + Start: 0, + Expires: 0, + FileSize: 1000, + ProofInterval: 100, + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: "test", } + suite.storageKeeper.SetFile(suite.ctx, deal) + deal.AddProver(suite.ctx, suite.storageKeeper, p.String()) total += i deals[i] = deal - suite.storageKeeper.SetActiveDeals(suite.ctx, deal) } acc := suite.accountKeeper.GetModuleAddress(types.ModuleName) @@ -165,8 +161,7 @@ func (suite *KeeperTestSuite) TestMultiReward() { suite.Require().Equal(blocks, ctx.BlockHeight()) suite.Require().Equal(ctx.BlockHeight()%blocks, int64(0)) - err = suite.storageKeeper.HandleRewardBlock(ctx) - suite.NoError(err) + suite.storageKeeper.ManageRewards(ctx) nom := sdk.NewDec(20) den := sdk.NewDec(int64(total)) diff --git a/x/storage/keeper/utils_test.go b/x/storage/keeper/utils_test.go index ae6466a31..7033623b8 100644 --- a/x/storage/keeper/utils_test.go +++ b/x/storage/keeper/utils_test.go @@ -44,41 +44,34 @@ func (suite *KeeperTestSuite) TestGetProviderUsing() { cases := []struct { name string - preRun func() string + preRun func() expReturn int64 }{ { name: "No_provider_found", - preRun: func() string { - return "a" - }, - expReturn: 0, - }, - - { - name: "invalid_active_deal_file_size", - preRun: func() string { - ad := types.ActiveDeals{ - Provider: "a", - Filesize: "aaaaa", - Cid: "abc", + preRun: func() { + ad := types.UnifiedFile{ + Merkle: make([]byte, 0), + Owner: "owner", + Start: 0, + FileSize: 100000, } - sKeeper.SetActiveDeals(suite.ctx, ad) - return "a" + sKeeper.SetFile(suite.ctx, ad) }, expReturn: 0, }, { name: "valid_active_deal_file_size", - preRun: func() string { - ad := types.ActiveDeals{ - Provider: "a", - Filesize: "100000", - Cid: "bbb", + preRun: func() { + ad := types.UnifiedFile{ + Merkle: make([]byte, 0), + Owner: "owner", + Start: 0, + FileSize: 100000, } - sKeeper.SetActiveDeals(suite.ctx, ad) - return "a" + sKeeper.SetFile(suite.ctx, ad) + ad.AddProver(suite.ctx, suite.storageKeeper, "prover1") }, expReturn: 100000, }, @@ -87,8 +80,8 @@ func (suite *KeeperTestSuite) TestGetProviderUsing() { for _, tc := range cases { suite.Run(tc.name, func() { suite.Require().NotNil(tc.preRun) - provider := tc.preRun() - result := sKeeper.GetProviderUsing(suite.ctx, provider) + tc.preRun() + result := sKeeper.GetProviderUsing(suite.ctx, "prover1") suite.Require().Equal(tc.expReturn, result) }) From 32ab6cb8d5bc2e232a87d3fe485c08bb3acccee6 Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 20 Oct 2023 10:21:25 -0400 Subject: [PATCH 027/256] fixing some tests --- x/storage/keeper/attestation_test.go | 4 ++-- x/storage/keeper/msg_server_attest_test.go | 2 +- x/storage/keeper/msg_server_proofs_test.go | 6 +++--- x/storage/keeper/report_test.go | 2 +- x/storage/types/message_file_delete_test.go | 8 -------- x/storage/types/message_postproof_test.go | 11 ----------- 6 files changed, 7 insertions(+), 26 deletions(-) diff --git a/x/storage/keeper/attestation_test.go b/x/storage/keeper/attestation_test.go index 72a74ebf8..1482aed78 100644 --- a/x/storage/keeper/attestation_test.go +++ b/x/storage/keeper/attestation_test.go @@ -15,7 +15,7 @@ func (suite *KeeperTestSuite) TestSetAttestationForm() { attestation := types.AttestationForm{ Attestations: att, Prover: "prover", - Merkle: []byte{}, + Merkle: []byte("merkle"), Owner: "owner", Start: 0, } @@ -24,7 +24,7 @@ func (suite *KeeperTestSuite) TestSetAttestationForm() { attestationRequest := types.QueryAttestationRequest{ Prover: "prover", - Merkle: []byte{}, + Merkle: []byte("merkle"), Owner: "owner", Start: 0, } diff --git a/x/storage/keeper/msg_server_attest_test.go b/x/storage/keeper/msg_server_attest_test.go index db85059b8..6457e0b97 100644 --- a/x/storage/keeper/msg_server_attest_test.go +++ b/x/storage/keeper/msg_server_attest_test.go @@ -106,7 +106,7 @@ func (suite *KeeperTestSuite) TestAttest() { func (suite *KeeperTestSuite) TestRequestAttestation() { params := suite.storageKeeper.GetParams(suite.ctx) - addresses, err := testutil.CreateTestAddresses("cosmos", int(params.AttestFormSize)+2) + addresses, err := testutil.CreateTestAddresses("cosmos", int(params.AttestFormSize)+10) suite.Require().NoError(err) cases := map[string]struct { diff --git a/x/storage/keeper/msg_server_proofs_test.go b/x/storage/keeper/msg_server_proofs_test.go index 10ffbe673..f751229ee 100644 --- a/x/storage/keeper/msg_server_proofs_test.go +++ b/x/storage/keeper/msg_server_proofs_test.go @@ -173,7 +173,7 @@ func (suite *KeeperTestSuite) TestPostProof() { merkleroot, filesize, err := makeContract(originalFile) suite.Require().NoError(err) - suite.Require().Equal("11", filesize) + suite.Require().Equal(int64(11), filesize) _, found := keeper.GetStoragePaymentInfo(suite.ctx, user.String()) suite.Require().Equal(true, found) @@ -295,9 +295,9 @@ func (suite *KeeperTestSuite) TestPostProof() { tc := tcs suite.Run( tc.testName, func() { - res, err := msgSrvr.PostProof(context, &tc.msg) + res, _ := msgSrvr.PostProof(context, &tc.msg) if tc.expErr { - suite.Require().Error(err) + suite.Require().Equal(tc.expErrMsg, res.ErrorMessage) suite.Require().Equal(false, res.Success) } if tc.postRun != nil { diff --git a/x/storage/keeper/report_test.go b/x/storage/keeper/report_test.go index 42c8ecc8a..f81fa79b9 100644 --- a/x/storage/keeper/report_test.go +++ b/x/storage/keeper/report_test.go @@ -137,6 +137,7 @@ func (suite *KeeperTestSuite) TestMakeReport() { } suite.storageKeeper.SetFile(suite.ctx, uf) uf.AddProver(suite.ctx, suite.storageKeeper, addresses[10]) + suite.storageKeeper.SetFile(suite.ctx, uf) _, err = suite.storageKeeper.RequestReport(suite.ctx, addresses[10], uf.Merkle, uf.Owner, uf.Start) suite.NoError(err) @@ -148,7 +149,6 @@ func (suite *KeeperTestSuite) TestMakeReport() { fmt.Printf("%s %t\n", attestation.Provider, attestation.Complete) } - _ = form allReportForm := suite.storageKeeper.GetAllReport(suite.ctx) suite.Require().Equal(1, len(allReportForm)) diff --git a/x/storage/types/message_file_delete_test.go b/x/storage/types/message_file_delete_test.go index e82338ae4..e2622de4a 100644 --- a/x/storage/types/message_file_delete_test.go +++ b/x/storage/types/message_file_delete_test.go @@ -20,14 +20,6 @@ func TestMsgDeleteFile_ValidateBasic(t *testing.T) { Start: 0, }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "invalid cid", - msg: MsgDeleteFile{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Merkle: []byte{}, - Start: 0, - }, - err: sdkerrors.ErrInvalidRequest, }, { name: "valid address", msg: MsgDeleteFile{ diff --git a/x/storage/types/message_postproof_test.go b/x/storage/types/message_postproof_test.go index e0658a0e6..a48183f33 100644 --- a/x/storage/types/message_postproof_test.go +++ b/x/storage/types/message_postproof_test.go @@ -24,17 +24,6 @@ func TestMsgPostProof_ValidateBasic(t *testing.T) { Start: 0, }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "invalid cid", - msg: MsgPostProof{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Item: "hex", - HashList: []byte{}, - Merkle: []byte{}, - Owner: "owner", - Start: 0, - }, - err: sdkerrors.ErrInvalidRequest, }, { name: "valid address", msg: MsgPostProof{ From 0d974e4921999cabbe185bdd9b77753d78080dcb Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 20 Oct 2023 11:05:59 -0400 Subject: [PATCH 028/256] removing dead protos --- proto/canine_chain/storage/contracts.proto | 17 - proto/canine_chain/storage/fid_cid.proto | 9 - proto/canine_chain/storage/genesis.proto | 3 - proto/canine_chain/storage/query.proto | 2 - proto/canine_chain/storage/strays.proto | 13 - x/storage/types/contracts.pb.go | 768 --------------------- x/storage/types/fid_cid.pb.go | 369 ---------- x/storage/types/genesis.pb.go | 60 +- x/storage/types/key_fid_cid.go | 23 - x/storage/types/query.pb.go | 231 +++---- 10 files changed, 144 insertions(+), 1351 deletions(-) delete mode 100644 proto/canine_chain/storage/contracts.proto delete mode 100644 proto/canine_chain/storage/fid_cid.proto delete mode 100644 proto/canine_chain/storage/strays.proto delete mode 100644 x/storage/types/contracts.pb.go delete mode 100644 x/storage/types/fid_cid.pb.go delete mode 100644 x/storage/types/key_fid_cid.go diff --git a/proto/canine_chain/storage/contracts.proto b/proto/canine_chain/storage/contracts.proto deleted file mode 100644 index 381a33b1e..000000000 --- a/proto/canine_chain/storage/contracts.proto +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "proto3"; -package canine_chain.storage; - -option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; - -message LegacyContracts { - string cid = 1; - string priceamt = 2; - string pricedenom = 3; - string creator = 4; - string merkle = 5; - string signee = 6; - string duration = 7; - string filesize = 8; - string fid = 9; - int64 age = 10; -} diff --git a/proto/canine_chain/storage/fid_cid.proto b/proto/canine_chain/storage/fid_cid.proto deleted file mode 100644 index 508f692a6..000000000 --- a/proto/canine_chain/storage/fid_cid.proto +++ /dev/null @@ -1,9 +0,0 @@ -syntax = "proto3"; -package canine_chain.storage; - -option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; - -message LegacyFidCid { - string fid = 1; - string cids = 2; -} diff --git a/proto/canine_chain/storage/genesis.proto b/proto/canine_chain/storage/genesis.proto index 59eef2f1f..1a0cda537 100644 --- a/proto/canine_chain/storage/genesis.proto +++ b/proto/canine_chain/storage/genesis.proto @@ -3,11 +3,8 @@ package canine_chain.storage; import "gogoproto/gogo.proto"; import "canine_chain/storage/params.proto"; -import "canine_chain/storage/contracts.proto"; import "canine_chain/storage/active_deals.proto"; import "canine_chain/storage/providers.proto"; -import "canine_chain/storage/strays.proto"; -import "canine_chain/storage/fid_cid.proto"; import "canine_chain/storage/payment_info.proto"; diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index cdd13de46..049fe4c29 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -5,10 +5,8 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "canine_chain/storage/params.proto"; -import "canine_chain/storage/contracts.proto"; import "canine_chain/storage/active_deals.proto"; import "canine_chain/storage/providers.proto"; -import "canine_chain/storage/strays.proto"; import "canine_chain/storage/payment_info.proto"; // this line is used by starport scaffolding # 1 diff --git a/proto/canine_chain/storage/strays.proto b/proto/canine_chain/storage/strays.proto deleted file mode 100644 index e06bc5bf9..000000000 --- a/proto/canine_chain/storage/strays.proto +++ /dev/null @@ -1,13 +0,0 @@ -syntax = "proto3"; -package canine_chain.storage; - -option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; - -message Strays { - string cid = 1; - string fid = 2; - string signee = 3; - string filesize = 4; - string merkle = 5; - int64 end = 6; -} diff --git a/x/storage/types/contracts.pb.go b/x/storage/types/contracts.pb.go deleted file mode 100644 index 29dd6e3c4..000000000 --- a/x/storage/types/contracts.pb.go +++ /dev/null @@ -1,768 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: canine_chain/storage/contracts.proto - -package types - -import ( - fmt "fmt" - proto "github.com/gogo/protobuf/proto" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -type LegacyContracts struct { - Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` - Priceamt string `protobuf:"bytes,2,opt,name=priceamt,proto3" json:"priceamt,omitempty"` - Pricedenom string `protobuf:"bytes,3,opt,name=pricedenom,proto3" json:"pricedenom,omitempty"` - Creator string `protobuf:"bytes,4,opt,name=creator,proto3" json:"creator,omitempty"` - Merkle string `protobuf:"bytes,5,opt,name=merkle,proto3" json:"merkle,omitempty"` - Signee string `protobuf:"bytes,6,opt,name=signee,proto3" json:"signee,omitempty"` - Duration string `protobuf:"bytes,7,opt,name=duration,proto3" json:"duration,omitempty"` - Filesize string `protobuf:"bytes,8,opt,name=filesize,proto3" json:"filesize,omitempty"` - Fid string `protobuf:"bytes,9,opt,name=fid,proto3" json:"fid,omitempty"` - Age int64 `protobuf:"varint,10,opt,name=age,proto3" json:"age,omitempty"` -} - -func (m *LegacyContracts) Reset() { *m = LegacyContracts{} } -func (m *LegacyContracts) String() string { return proto.CompactTextString(m) } -func (*LegacyContracts) ProtoMessage() {} -func (*LegacyContracts) Descriptor() ([]byte, []int) { - return fileDescriptor_69cb5e3b60cb0642, []int{0} -} -func (m *LegacyContracts) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LegacyContracts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LegacyContracts.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 *LegacyContracts) XXX_Merge(src proto.Message) { - xxx_messageInfo_LegacyContracts.Merge(m, src) -} -func (m *LegacyContracts) XXX_Size() int { - return m.Size() -} -func (m *LegacyContracts) XXX_DiscardUnknown() { - xxx_messageInfo_LegacyContracts.DiscardUnknown(m) -} - -var xxx_messageInfo_LegacyContracts proto.InternalMessageInfo - -func (m *LegacyContracts) GetCid() string { - if m != nil { - return m.Cid - } - return "" -} - -func (m *LegacyContracts) GetPriceamt() string { - if m != nil { - return m.Priceamt - } - return "" -} - -func (m *LegacyContracts) GetPricedenom() string { - if m != nil { - return m.Pricedenom - } - return "" -} - -func (m *LegacyContracts) GetCreator() string { - if m != nil { - return m.Creator - } - return "" -} - -func (m *LegacyContracts) GetMerkle() string { - if m != nil { - return m.Merkle - } - return "" -} - -func (m *LegacyContracts) GetSignee() string { - if m != nil { - return m.Signee - } - return "" -} - -func (m *LegacyContracts) GetDuration() string { - if m != nil { - return m.Duration - } - return "" -} - -func (m *LegacyContracts) GetFilesize() string { - if m != nil { - return m.Filesize - } - return "" -} - -func (m *LegacyContracts) GetFid() string { - if m != nil { - return m.Fid - } - return "" -} - -func (m *LegacyContracts) GetAge() int64 { - if m != nil { - return m.Age - } - return 0 -} - -func init() { - proto.RegisterType((*LegacyContracts)(nil), "canine_chain.storage.LegacyContracts") -} - -func init() { - proto.RegisterFile("canine_chain/storage/contracts.proto", fileDescriptor_69cb5e3b60cb0642) -} - -var fileDescriptor_69cb5e3b60cb0642 = []byte{ - // 291 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0xbf, 0x4e, 0xf3, 0x30, - 0x14, 0xc5, 0xeb, 0xf6, 0xfb, 0xfa, 0xc7, 0x0b, 0xc8, 0x42, 0xc8, 0x62, 0xb0, 0x2a, 0xc4, 0xd0, - 0x85, 0x46, 0x82, 0x37, 0x80, 0xb5, 0x53, 0x47, 0x16, 0x74, 0xeb, 0xdc, 0xa6, 0xa6, 0x89, 0x1d, - 0xd9, 0xae, 0x44, 0xd9, 0xd9, 0x79, 0x2c, 0xc6, 0x8e, 0x8c, 0x28, 0x79, 0x11, 0x64, 0xbb, 0xa9, - 0xba, 0x9d, 0xdf, 0x39, 0x67, 0xb8, 0xf7, 0xd0, 0x3b, 0x09, 0x5a, 0x69, 0x7c, 0x95, 0x1b, 0x50, - 0x3a, 0x73, 0xde, 0x58, 0x28, 0x30, 0x93, 0x46, 0x7b, 0x0b, 0xd2, 0xbb, 0x79, 0x6d, 0x8d, 0x37, - 0xec, 0xea, 0xbc, 0x35, 0x3f, 0xb6, 0x6e, 0x3f, 0xfb, 0xf4, 0x62, 0x81, 0x05, 0xc8, 0xfd, 0x73, - 0xd7, 0x67, 0x97, 0x74, 0x20, 0x55, 0xce, 0xc9, 0x94, 0xcc, 0x26, 0xcb, 0x20, 0xd9, 0x0d, 0x1d, - 0xd7, 0x56, 0x49, 0x84, 0xca, 0xf3, 0x7e, 0xb4, 0x4f, 0xcc, 0x04, 0xa5, 0x51, 0xe7, 0xa8, 0x4d, - 0xc5, 0x07, 0x31, 0x3d, 0x73, 0x18, 0xa7, 0x23, 0x69, 0x11, 0xbc, 0xb1, 0xfc, 0x5f, 0x0c, 0x3b, - 0x64, 0xd7, 0x74, 0x58, 0xa1, 0xdd, 0x96, 0xc8, 0xff, 0xc7, 0xe0, 0x48, 0xc1, 0x77, 0xaa, 0xd0, - 0x88, 0x7c, 0x98, 0xfc, 0x44, 0xe1, 0x8a, 0x7c, 0x67, 0xc1, 0x2b, 0xa3, 0xf9, 0x28, 0x5d, 0xd1, - 0x71, 0xc8, 0xd6, 0xaa, 0x44, 0xa7, 0x3e, 0x90, 0x8f, 0x53, 0xd6, 0x71, 0xf8, 0x67, 0xad, 0x72, - 0x3e, 0x49, 0xff, 0xac, 0x55, 0x1e, 0x1c, 0x28, 0x90, 0xd3, 0x29, 0x99, 0x0d, 0x96, 0x41, 0x3e, - 0x2d, 0xbe, 0x1b, 0x41, 0x0e, 0x8d, 0x20, 0xbf, 0x8d, 0x20, 0x5f, 0xad, 0xe8, 0x1d, 0x5a, 0xd1, - 0xfb, 0x69, 0x45, 0xef, 0xe5, 0xa1, 0x50, 0x7e, 0xb3, 0x5b, 0xcd, 0xa5, 0xa9, 0xb2, 0x37, 0x90, - 0x5b, 0x28, 0x17, 0xb0, 0x72, 0x59, 0x5a, 0xf3, 0x3e, 0x6d, 0xfe, 0x7e, 0x5a, 0xdd, 0xef, 0x6b, - 0x74, 0xab, 0x61, 0x9c, 0xfc, 0xf1, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x14, 0x14, 0x32, 0xb3, 0x9a, - 0x01, 0x00, 0x00, -} - -func (m *LegacyContracts) 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 *LegacyContracts) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LegacyContracts) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Age != 0 { - i = encodeVarintContracts(dAtA, i, uint64(m.Age)) - i-- - dAtA[i] = 0x50 - } - if len(m.Fid) > 0 { - i -= len(m.Fid) - copy(dAtA[i:], m.Fid) - i = encodeVarintContracts(dAtA, i, uint64(len(m.Fid))) - i-- - dAtA[i] = 0x4a - } - if len(m.Filesize) > 0 { - i -= len(m.Filesize) - copy(dAtA[i:], m.Filesize) - i = encodeVarintContracts(dAtA, i, uint64(len(m.Filesize))) - i-- - dAtA[i] = 0x42 - } - if len(m.Duration) > 0 { - i -= len(m.Duration) - copy(dAtA[i:], m.Duration) - i = encodeVarintContracts(dAtA, i, uint64(len(m.Duration))) - i-- - dAtA[i] = 0x3a - } - if len(m.Signee) > 0 { - i -= len(m.Signee) - copy(dAtA[i:], m.Signee) - i = encodeVarintContracts(dAtA, i, uint64(len(m.Signee))) - i-- - dAtA[i] = 0x32 - } - if len(m.Merkle) > 0 { - i -= len(m.Merkle) - copy(dAtA[i:], m.Merkle) - i = encodeVarintContracts(dAtA, i, uint64(len(m.Merkle))) - i-- - dAtA[i] = 0x2a - } - if len(m.Creator) > 0 { - i -= len(m.Creator) - copy(dAtA[i:], m.Creator) - i = encodeVarintContracts(dAtA, i, uint64(len(m.Creator))) - i-- - dAtA[i] = 0x22 - } - if len(m.Pricedenom) > 0 { - i -= len(m.Pricedenom) - copy(dAtA[i:], m.Pricedenom) - i = encodeVarintContracts(dAtA, i, uint64(len(m.Pricedenom))) - i-- - dAtA[i] = 0x1a - } - if len(m.Priceamt) > 0 { - i -= len(m.Priceamt) - copy(dAtA[i:], m.Priceamt) - i = encodeVarintContracts(dAtA, i, uint64(len(m.Priceamt))) - i-- - dAtA[i] = 0x12 - } - if len(m.Cid) > 0 { - i -= len(m.Cid) - copy(dAtA[i:], m.Cid) - i = encodeVarintContracts(dAtA, i, uint64(len(m.Cid))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintContracts(dAtA []byte, offset int, v uint64) int { - offset -= sovContracts(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *LegacyContracts) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Cid) - if l > 0 { - n += 1 + l + sovContracts(uint64(l)) - } - l = len(m.Priceamt) - if l > 0 { - n += 1 + l + sovContracts(uint64(l)) - } - l = len(m.Pricedenom) - if l > 0 { - n += 1 + l + sovContracts(uint64(l)) - } - l = len(m.Creator) - if l > 0 { - n += 1 + l + sovContracts(uint64(l)) - } - l = len(m.Merkle) - if l > 0 { - n += 1 + l + sovContracts(uint64(l)) - } - l = len(m.Signee) - if l > 0 { - n += 1 + l + sovContracts(uint64(l)) - } - l = len(m.Duration) - if l > 0 { - n += 1 + l + sovContracts(uint64(l)) - } - l = len(m.Filesize) - if l > 0 { - n += 1 + l + sovContracts(uint64(l)) - } - l = len(m.Fid) - if l > 0 { - n += 1 + l + sovContracts(uint64(l)) - } - if m.Age != 0 { - n += 1 + sovContracts(uint64(m.Age)) - } - return n -} - -func sovContracts(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozContracts(x uint64) (n int) { - return sovContracts(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *LegacyContracts) 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 ErrIntOverflowContracts - } - 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: LegacyContracts: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LegacyContracts: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - 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 ErrInvalidLengthContracts - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthContracts - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Priceamt", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - 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 ErrInvalidLengthContracts - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthContracts - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Priceamt = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pricedenom", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - 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 ErrInvalidLengthContracts - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthContracts - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pricedenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - 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 ErrInvalidLengthContracts - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthContracts - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Creator = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - 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 ErrInvalidLengthContracts - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthContracts - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Merkle = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signee", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - 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 ErrInvalidLengthContracts - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthContracts - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signee = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - 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 ErrInvalidLengthContracts - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthContracts - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Duration = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Filesize", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - 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 ErrInvalidLengthContracts - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthContracts - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Filesize = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - 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 ErrInvalidLengthContracts - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthContracts - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Fid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 10: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Age", wireType) - } - m.Age = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowContracts - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Age |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipContracts(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthContracts - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipContracts(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowContracts - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowContracts - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowContracts - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthContracts - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupContracts - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthContracts - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthContracts = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowContracts = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupContracts = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/storage/types/fid_cid.pb.go b/x/storage/types/fid_cid.pb.go deleted file mode 100644 index 0b37b778a..000000000 --- a/x/storage/types/fid_cid.pb.go +++ /dev/null @@ -1,369 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: canine_chain/storage/fid_cid.proto - -package types - -import ( - fmt "fmt" - proto "github.com/gogo/protobuf/proto" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -type LegacyFidCid struct { - Fid string `protobuf:"bytes,1,opt,name=fid,proto3" json:"fid,omitempty"` - Cids string `protobuf:"bytes,2,opt,name=cids,proto3" json:"cids,omitempty"` -} - -func (m *LegacyFidCid) Reset() { *m = LegacyFidCid{} } -func (m *LegacyFidCid) String() string { return proto.CompactTextString(m) } -func (*LegacyFidCid) ProtoMessage() {} -func (*LegacyFidCid) Descriptor() ([]byte, []int) { - return fileDescriptor_e2d91a93fd947ec8, []int{0} -} -func (m *LegacyFidCid) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *LegacyFidCid) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_LegacyFidCid.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 *LegacyFidCid) XXX_Merge(src proto.Message) { - xxx_messageInfo_LegacyFidCid.Merge(m, src) -} -func (m *LegacyFidCid) XXX_Size() int { - return m.Size() -} -func (m *LegacyFidCid) XXX_DiscardUnknown() { - xxx_messageInfo_LegacyFidCid.DiscardUnknown(m) -} - -var xxx_messageInfo_LegacyFidCid proto.InternalMessageInfo - -func (m *LegacyFidCid) GetFid() string { - if m != nil { - return m.Fid - } - return "" -} - -func (m *LegacyFidCid) GetCids() string { - if m != nil { - return m.Cids - } - return "" -} - -func init() { - proto.RegisterType((*LegacyFidCid)(nil), "canine_chain.storage.LegacyFidCid") -} - -func init() { - proto.RegisterFile("canine_chain/storage/fid_cid.proto", fileDescriptor_e2d91a93fd947ec8) -} - -var fileDescriptor_e2d91a93fd947ec8 = []byte{ - // 183 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4a, 0x4e, 0xcc, 0xcb, - 0xcc, 0x4b, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0xcc, 0xd3, 0x2f, 0x2e, 0xc9, 0x2f, 0x4a, 0x4c, 0x4f, - 0xd5, 0x4f, 0xcb, 0x4c, 0x89, 0x4f, 0xce, 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, - 0x41, 0x56, 0xa3, 0x07, 0x55, 0xa3, 0x64, 0xc2, 0xc5, 0xe3, 0x93, 0x9a, 0x9e, 0x98, 0x5c, 0xe9, - 0x96, 0x99, 0xe2, 0x9c, 0x99, 0x22, 0x24, 0xc0, 0xc5, 0x9c, 0x96, 0x99, 0x22, 0xc1, 0xa8, 0xc0, - 0xa8, 0xc1, 0x19, 0x04, 0x62, 0x0a, 0x09, 0x71, 0xb1, 0x24, 0x67, 0xa6, 0x14, 0x4b, 0x30, 0x81, - 0x85, 0xc0, 0x6c, 0x27, 0x9f, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, - 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, - 0x4a, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0xcf, 0x4a, 0x4c, 0xce, 0x4e, - 0xcc, 0xf1, 0x49, 0x4c, 0x2a, 0xd6, 0x87, 0xd8, 0xad, 0x0b, 0x71, 0x5f, 0x05, 0xdc, 0x85, 0x25, - 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0x07, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x27, - 0xfa, 0x1a, 0x41, 0xc6, 0x00, 0x00, 0x00, -} - -func (m *LegacyFidCid) 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 *LegacyFidCid) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LegacyFidCid) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Cids) > 0 { - i -= len(m.Cids) - copy(dAtA[i:], m.Cids) - i = encodeVarintFidCid(dAtA, i, uint64(len(m.Cids))) - i-- - dAtA[i] = 0x12 - } - if len(m.Fid) > 0 { - i -= len(m.Fid) - copy(dAtA[i:], m.Fid) - i = encodeVarintFidCid(dAtA, i, uint64(len(m.Fid))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintFidCid(dAtA []byte, offset int, v uint64) int { - offset -= sovFidCid(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *LegacyFidCid) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Fid) - if l > 0 { - n += 1 + l + sovFidCid(uint64(l)) - } - l = len(m.Cids) - if l > 0 { - n += 1 + l + sovFidCid(uint64(l)) - } - return n -} - -func sovFidCid(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozFidCid(x uint64) (n int) { - return sovFidCid(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *LegacyFidCid) 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 ErrIntOverflowFidCid - } - 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: LegacyFidCid: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: LegacyFidCid: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fid", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowFidCid - } - 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 ErrInvalidLengthFidCid - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthFidCid - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Fid = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cids", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowFidCid - } - 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 ErrInvalidLengthFidCid - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthFidCid - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cids = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipFidCid(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthFidCid - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipFidCid(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowFidCid - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowFidCid - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowFidCid - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthFidCid - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupFidCid - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthFidCid - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthFidCid = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowFidCid = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupFidCid = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/storage/types/genesis.pb.go b/x/storage/types/genesis.pb.go index 57382735b..48a6ac2a1 100644 --- a/x/storage/types/genesis.pb.go +++ b/x/storage/types/genesis.pb.go @@ -133,37 +133,35 @@ func init() { } var fileDescriptor_a52da9fdb04c8b35 = []byte{ - // 469 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x6f, 0xd3, 0x4c, - 0x10, 0x86, 0xe3, 0xaf, 0x6d, 0xbe, 0xb2, 0x09, 0xad, 0x30, 0x45, 0x8a, 0x22, 0xe4, 0xa6, 0x15, - 0x88, 0x5c, 0xb0, 0xa5, 0x70, 0xe3, 0x46, 0x41, 0x45, 0x95, 0x22, 0xa8, 0x5a, 0x71, 0xe9, 0xc5, - 0x9a, 0xac, 0xd7, 0xee, 0x82, 0xbd, 0x6b, 0xed, 0x0e, 0x15, 0xf9, 0x05, 0x5c, 0xf9, 0x59, 0x3d, - 0xf6, 0xc8, 0x09, 0xa1, 0xe4, 0x8f, 0xa0, 0xee, 0x6e, 0xdc, 0x50, 0x2d, 0x3e, 0x25, 0x1a, 0x3d, - 0xef, 0xb3, 0xe3, 0x57, 0x43, 0x0e, 0x29, 0x08, 0x2e, 0x58, 0x4a, 0x2f, 0x81, 0x8b, 0x44, 0xa3, - 0x54, 0x50, 0xb0, 0xa4, 0x60, 0x82, 0x69, 0xae, 0xe3, 0x5a, 0x49, 0x94, 0xe1, 0xde, 0x3a, 0x13, - 0x3b, 0x66, 0xb8, 0x57, 0xc8, 0x42, 0x1a, 0x20, 0xb9, 0xfd, 0x67, 0xd9, 0xe1, 0x81, 0xd7, 0x57, - 0x83, 0x82, 0xca, 0xe9, 0x86, 0xcf, 0xbc, 0x08, 0x95, 0x02, 0x15, 0x50, 0x5c, 0x51, 0x2f, 0xbc, - 0x14, 0x50, 0xe4, 0x57, 0x2c, 0xcd, 0x18, 0x94, 0xed, 0xba, 0x5a, 0xc9, 0x2b, 0x9e, 0x31, 0xa5, - 0x5b, 0xf7, 0xd2, 0xa8, 0x60, 0xbe, 0x42, 0xfc, 0x55, 0xe4, 0x3c, 0x4b, 0x29, 0xcf, 0x5a, 0xb7, - 0xaa, 0x61, 0x5e, 0x31, 0x81, 0x29, 0x17, 0xb9, 0xeb, 0xe1, 0xf0, 0xfb, 0x16, 0xe9, 0xbf, 0xb7, - 0x2d, 0x9e, 0x23, 0x20, 0x0b, 0x5f, 0x93, 0xae, 0x6d, 0x61, 0x10, 0x8c, 0x82, 0x71, 0x6f, 0xf2, - 0x34, 0xf6, 0xb5, 0x1a, 0x9f, 0x1a, 0xe6, 0x68, 0xf3, 0xfa, 0xd7, 0x7e, 0xe7, 0xcc, 0x25, 0xc2, - 0x77, 0xe4, 0x41, 0xce, 0x4b, 0x96, 0x96, 0x5c, 0xe3, 0xe0, 0xbf, 0xd1, 0xc6, 0xb8, 0x37, 0x39, - 0xf0, 0xc7, 0x3f, 0x09, 0x9e, 0x73, 0x96, 0x1d, 0xf3, 0x92, 0x39, 0xc7, 0xf6, 0x6d, 0x72, 0xca, - 0x35, 0x86, 0x53, 0xb2, 0xd3, 0xb4, 0x62, 0x55, 0x1b, 0x46, 0xb5, 0xff, 0x8f, 0x4d, 0x56, 0xac, - 0x13, 0x3d, 0x6c, 0xc2, 0xc6, 0x76, 0x41, 0x1e, 0xad, 0x7f, 0xb6, 0x15, 0x6e, 0x1a, 0xe1, 0xd8, - 0x2f, 0x3c, 0xb7, 0xbf, 0xa7, 0x36, 0x75, 0x22, 0x72, 0xe9, 0xcc, 0xbb, 0xf5, 0xdd, 0xc8, 0xb8, - 0x3f, 0x92, 0x5d, 0x2a, 0xcb, 0x12, 0x90, 0x29, 0x28, 0xad, 0x79, 0xcb, 0x98, 0x47, 0x7e, 0xf3, - 0xdb, 0x06, 0x76, 0xc6, 0x9d, 0xbb, 0xb8, 0x11, 0xa6, 0xe4, 0x89, 0xbb, 0x9c, 0x7b, 0x0d, 0x74, - 0x8d, 0xf6, 0xb9, 0x5f, 0xfb, 0xc6, 0x44, 0xee, 0xf7, 0xf0, 0x18, 0xfe, 0x1e, 0x9b, 0x07, 0x4e, - 0x48, 0x5f, 0xb1, 0x5a, 0x2a, 0x4c, 0x73, 0xa9, 0x2a, 0x3d, 0xf8, 0xbf, 0x6d, 0xdd, 0x33, 0x43, - 0x1e, 0x4b, 0x55, 0x39, 0x65, 0x4f, 0x35, 0x13, 0x1d, 0x7e, 0x20, 0x7d, 0x40, 0x64, 0x7a, 0xa5, - 0xda, 0x6e, 0x5d, 0xd1, 0x90, 0x80, 0x5c, 0x8a, 0x75, 0x9f, 0x15, 0x18, 0xdf, 0xd1, 0xf4, 0x7a, - 0x11, 0x05, 0x37, 0x8b, 0x28, 0xf8, 0xbd, 0x88, 0x82, 0x1f, 0xcb, 0xa8, 0x73, 0xb3, 0x8c, 0x3a, - 0x3f, 0x97, 0x51, 0xe7, 0x62, 0x52, 0x70, 0xbc, 0xfc, 0x3a, 0x8b, 0xa9, 0xac, 0x92, 0xcf, 0x40, - 0xbf, 0x40, 0x39, 0x85, 0x99, 0x4e, 0xec, 0x43, 0x2f, 0xed, 0x89, 0x7f, 0x6b, 0x8e, 0x1c, 0xe7, - 0x35, 0xd3, 0xb3, 0xae, 0x39, 0xef, 0x57, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x72, 0x7e, 0x95, - 0xad, 0x38, 0x04, 0x00, 0x00, + // 444 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xd2, 0x41, 0x6f, 0xd3, 0x30, + 0x14, 0x07, 0xf0, 0x84, 0x6d, 0x65, 0xb8, 0x65, 0x13, 0x61, 0x48, 0x55, 0x85, 0xb2, 0x6e, 0x02, + 0xd1, 0x0b, 0x89, 0x54, 0x6e, 0xdc, 0x18, 0x68, 0x68, 0x52, 0x04, 0xd3, 0x26, 0x2e, 0xbb, 0x44, + 0xaf, 0xe9, 0x4b, 0x66, 0x70, 0xec, 0xc8, 0x36, 0x13, 0xfb, 0x04, 0x5c, 0xf9, 0x58, 0x3b, 0xee, + 0xc8, 0x09, 0xa1, 0xf6, 0x8b, 0xa0, 0xd9, 0x6e, 0x56, 0x26, 0xaf, 0xa7, 0x56, 0xd6, 0xff, 0xff, + 0xcb, 0x7b, 0x89, 0xc9, 0x7e, 0x01, 0x9c, 0x72, 0xcc, 0x8b, 0x73, 0xa0, 0x3c, 0x55, 0x5a, 0x48, + 0xa8, 0x30, 0xad, 0x90, 0xa3, 0xa2, 0x2a, 0x69, 0xa4, 0xd0, 0x22, 0xda, 0x59, 0xce, 0x24, 0x2e, + 0x33, 0xd8, 0xa9, 0x44, 0x25, 0x4c, 0x20, 0xbd, 0xf9, 0x67, 0xb3, 0x83, 0x3d, 0xaf, 0xd7, 0x80, + 0x84, 0xda, 0x71, 0x83, 0x57, 0xde, 0x08, 0x14, 0x9a, 0x5e, 0x60, 0x3e, 0x45, 0x60, 0x8b, 0xe0, + 0x0b, 0xbf, 0x25, 0xc5, 0x05, 0x9d, 0xa2, 0x5c, 0xcd, 0x35, 0x70, 0x59, 0x23, 0xd7, 0x39, 0xe5, + 0xa5, 0x1b, 0x6d, 0xff, 0xe7, 0x06, 0xe9, 0x7d, 0xb4, 0x8b, 0x9d, 0x6a, 0xd0, 0x18, 0xbd, 0x25, + 0x1d, 0x3b, 0x58, 0x3f, 0x1c, 0x86, 0xa3, 0xee, 0xf8, 0x79, 0xe2, 0x5b, 0x34, 0x39, 0x36, 0x99, + 0x83, 0xf5, 0xab, 0x3f, 0xbb, 0xc1, 0x89, 0x6b, 0x44, 0x1f, 0xc8, 0xa3, 0x92, 0x32, 0xcc, 0x19, + 0x55, 0xba, 0xff, 0x60, 0xb8, 0x36, 0xea, 0x8e, 0xf7, 0xfc, 0xf5, 0x2f, 0x9c, 0x96, 0x14, 0xa7, + 0x87, 0x94, 0xa1, 0x33, 0x36, 0x6f, 0x9a, 0x19, 0x55, 0x3a, 0xca, 0xc8, 0x56, 0xbb, 0x8e, 0xa5, + 0xd6, 0x0c, 0xb5, 0x7b, 0xcf, 0x24, 0x8b, 0xac, 0x83, 0x1e, 0xb7, 0x65, 0xa3, 0x9d, 0x91, 0x27, + 0xcb, 0x6b, 0x5b, 0x70, 0xdd, 0x80, 0x23, 0x3f, 0x78, 0x6a, 0x7f, 0x8f, 0x6d, 0xeb, 0x88, 0x97, + 0xc2, 0xc9, 0xdb, 0xcd, 0xed, 0x91, 0xb1, 0x3f, 0x93, 0xed, 0x42, 0x30, 0x06, 0x1a, 0x25, 0x30, + 0x2b, 0x6f, 0x18, 0x79, 0xe8, 0x97, 0xdf, 0xb7, 0x61, 0x27, 0x6e, 0xdd, 0xd6, 0x0d, 0x98, 0x93, + 0x67, 0xee, 0x93, 0xdf, 0x79, 0x03, 0x1d, 0xc3, 0xbe, 0xf4, 0xb3, 0xef, 0x4c, 0xe5, 0xee, 0x7b, + 0x78, 0x0a, 0xff, 0x1f, 0x9b, 0x07, 0x1c, 0x91, 0x9e, 0xc4, 0x46, 0x48, 0x9d, 0x97, 0x42, 0xd6, + 0xaa, 0xff, 0x70, 0xd5, 0xb8, 0x27, 0x26, 0x79, 0x28, 0x64, 0xed, 0xc8, 0xae, 0x6c, 0x4f, 0x54, + 0xf4, 0x89, 0xf4, 0x40, 0x6b, 0x54, 0x0b, 0x6a, 0x73, 0xe5, 0x88, 0x26, 0x09, 0x9a, 0x0a, 0xbe, + 0xec, 0x59, 0xc0, 0x78, 0x07, 0xd9, 0xd5, 0x2c, 0x0e, 0xaf, 0x67, 0x71, 0xf8, 0x77, 0x16, 0x87, + 0xbf, 0xe6, 0x71, 0x70, 0x3d, 0x8f, 0x83, 0xdf, 0xf3, 0x38, 0x38, 0x1b, 0x57, 0x54, 0x9f, 0x7f, + 0x9f, 0x24, 0x85, 0xa8, 0xd3, 0xaf, 0x50, 0x7c, 0x03, 0x96, 0xc1, 0x44, 0xa5, 0xf6, 0x41, 0xaf, + 0xed, 0x15, 0xff, 0xd1, 0x5e, 0x72, 0x7d, 0xd9, 0xa0, 0x9a, 0x74, 0xcc, 0xf5, 0x7e, 0xf3, 0x2f, + 0x00, 0x00, 0xff, 0xff, 0x97, 0x4b, 0x51, 0x36, 0xcb, 0x03, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/storage/types/key_fid_cid.go b/x/storage/types/key_fid_cid.go deleted file mode 100644 index 440b1d3ef..000000000 --- a/x/storage/types/key_fid_cid.go +++ /dev/null @@ -1,23 +0,0 @@ -package types - -import "encoding/binary" - -var _ binary.ByteOrder - -const ( - // FidCidKeyPrefix is the prefix to retrieve all FidCid - FidCidKeyPrefix = "FidCid/value/" -) - -// FidCidKey returns the store key to retrieve a FidCid from the index fields -func FidCidKey( - fid string, -) []byte { - var key []byte - - fidBytes := []byte(fid) - key = append(key, fidBytes...) - key = append(key, []byte("/")...) - - return key -} diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index 757009dec..8215f99fa 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -1961,122 +1961,121 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 1836 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0xdc, 0xc6, - 0x15, 0xd7, 0x68, 0x65, 0xd9, 0x3b, 0x52, 0xeb, 0x76, 0x2a, 0xbb, 0xea, 0x5a, 0xd5, 0x07, 0x51, - 0x4b, 0xb2, 0x6a, 0x91, 0xd6, 0x5a, 0xb6, 0x6a, 0xd9, 0xad, 0x6d, 0xc9, 0x90, 0x6a, 0x43, 0x86, - 0x65, 0x0a, 0x6a, 0x81, 0xa2, 0xe8, 0x76, 0xc4, 0x1d, 0xad, 0x58, 0xed, 0x92, 0x34, 0xc9, 0x55, - 0x2b, 0x08, 0xba, 0xb4, 0xe7, 0x16, 0x06, 0x7c, 0xea, 0x29, 0x41, 0xec, 0x20, 0xc8, 0x29, 0x80, - 0x93, 0x43, 0x2e, 0x39, 0x24, 0x80, 0x01, 0xdf, 0x62, 0x20, 0x97, 0x20, 0x07, 0x23, 0xb0, 0xf3, - 0x87, 0x04, 0x33, 0xf3, 0xb8, 0xe4, 0xee, 0x72, 0x49, 0x6e, 0xb0, 0xc8, 0x69, 0x35, 0xc3, 0xf7, - 0xf1, 0x7b, 0x6f, 0xde, 0xbc, 0x79, 0x3f, 0x08, 0x4f, 0x1a, 0xd4, 0x32, 0x2d, 0x56, 0x32, 0xf6, - 0xa8, 0x69, 0x69, 0x9e, 0x6f, 0xbb, 0xb4, 0xc2, 0xb4, 0x47, 0x75, 0xe6, 0x1e, 0xaa, 0x8e, 0x6b, - 0xfb, 0x36, 0x19, 0x89, 0x4a, 0xa8, 0x20, 0x51, 0x18, 0xa9, 0xd8, 0x15, 0x5b, 0x08, 0x68, 0xfc, - 0x2f, 0x29, 0x5b, 0x18, 0xab, 0xd8, 0x76, 0xa5, 0xca, 0x34, 0xea, 0x98, 0x1a, 0xb5, 0x2c, 0xdb, - 0xa7, 0xbe, 0x69, 0x5b, 0x1e, 0x7c, 0x9d, 0x33, 0x6c, 0xaf, 0x66, 0x7b, 0xda, 0x0e, 0xf5, 0xc0, - 0x85, 0x76, 0xb0, 0xb0, 0xc3, 0x7c, 0xba, 0xa0, 0x39, 0xb4, 0x62, 0x5a, 0x42, 0x18, 0x64, 0xa7, - 0x62, 0x71, 0x39, 0xd4, 0xa5, 0xb5, 0xc0, 0xdc, 0x6f, 0x62, 0x45, 0x0c, 0xdb, 0xf2, 0x5d, 0x6a, - 0xf8, 0x81, 0xd4, 0x4c, 0xac, 0x14, 0x35, 0x7c, 0xf3, 0x80, 0x95, 0xca, 0x8c, 0x56, 0x93, 0xcd, - 0x39, 0xae, 0x7d, 0x60, 0x96, 0x99, 0xeb, 0x25, 0xe2, 0xf2, 0x7c, 0x97, 0x1e, 0x26, 0x7b, 0x74, - 0xe8, 0x61, 0x8d, 0x59, 0x7e, 0xc9, 0xb4, 0x76, 0x21, 0x5b, 0xca, 0x08, 0x26, 0x0f, 0x79, 0x16, - 0x36, 0x45, 0x54, 0x3a, 0x7b, 0x54, 0x67, 0x9e, 0xaf, 0x3c, 0xc4, 0xbf, 0x68, 0xda, 0xf5, 0x1c, - 0xdb, 0xf2, 0x18, 0x59, 0xc6, 0x83, 0x32, 0xfa, 0x51, 0x34, 0x89, 0x66, 0x87, 0x8a, 0x63, 0x6a, - 0xdc, 0xb9, 0xa8, 0x52, 0x6b, 0x65, 0xe0, 0xe5, 0xeb, 0x89, 0x3e, 0x1d, 0x34, 0x94, 0x3f, 0xe1, - 0x9f, 0x09, 0x93, 0x6b, 0x66, 0x95, 0x81, 0x1b, 0x72, 0x16, 0x0f, 0xd6, 0x98, 0xbb, 0x5f, 0x65, - 0xc2, 0xde, 0xb0, 0x0e, 0x2b, 0x32, 0x82, 0x4f, 0xd8, 0xff, 0xb4, 0x98, 0x3b, 0xda, 0x3f, 0x89, - 0x66, 0xf3, 0xba, 0x5c, 0xf0, 0x5d, 0xcf, 0xa7, 0xae, 0x3f, 0x9a, 0x9b, 0x44, 0xb3, 0x39, 0x5d, - 0x2e, 0x94, 0x4d, 0xfc, 0xf3, 0x88, 0x5d, 0x00, 0x7a, 0x1d, 0x0f, 0xec, 0x9a, 0x60, 0x76, 0xa8, - 0x38, 0x15, 0x0f, 0x73, 0xdb, 0x32, 0x77, 0x4d, 0x56, 0xe6, 0x8a, 0x80, 0x55, 0x28, 0x29, 0x7f, - 0xc3, 0x23, 0xc2, 0xe2, 0xed, 0x6a, 0x95, 0x7f, 0x0b, 0x92, 0x42, 0xd6, 0x30, 0x0e, 0x4b, 0x04, - 0x4c, 0x4f, 0xab, 0xb2, 0x9e, 0x54, 0x5e, 0x4f, 0xaa, 0x2c, 0x59, 0xa8, 0x27, 0x75, 0x93, 0x56, - 0x82, 0x48, 0xf5, 0x88, 0xa6, 0xf2, 0x0e, 0xc2, 0x67, 0x5a, 0x1c, 0x00, 0xec, 0xdf, 0xe3, 0x13, - 0x1c, 0x01, 0x4f, 0x6f, 0xae, 0x1b, 0xdc, 0x52, 0x8b, 0xac, 0x37, 0x01, 0xec, 0x17, 0x00, 0x67, - 0x52, 0x01, 0x4a, 0xdf, 0x4d, 0x08, 0x2f, 0x41, 0x06, 0x36, 0xa1, 0xf0, 0x82, 0x0c, 0x8c, 0xe2, - 0x93, 0xb4, 0x5c, 0x76, 0x99, 0x27, 0x0b, 0x20, 0xaf, 0x07, 0x4b, 0xe5, 0xaf, 0x10, 0x52, 0xa8, - 0x01, 0x21, 0xad, 0xe2, 0x7c, 0xa3, 0x7c, 0x21, 0x67, 0x13, 0x1d, 0xaa, 0x26, 0x10, 0x83, 0xa0, - 0x42, 0x3d, 0x65, 0x07, 0x8f, 0x06, 0x09, 0x6b, 0x48, 0xf5, 0xfa, 0x54, 0x3e, 0x44, 0xf8, 0x57, - 0x31, 0x4e, 0xe2, 0xc3, 0xc8, 0xfd, 0x90, 0x30, 0x7a, 0x77, 0x3e, 0x75, 0xfc, 0x4b, 0x09, 0xd5, - 0xf7, 0x99, 0x27, 0xfb, 0x5b, 0xe4, 0x4a, 0x71, 0x87, 0xcc, 0x85, 0x13, 0x82, 0x55, 0xe4, 0xaa, - 0xf5, 0xc7, 0x5f, 0xb5, 0x5c, 0xec, 0x55, 0x1b, 0x88, 0x5e, 0x35, 0x33, 0x38, 0x86, 0xa8, 0x5b, - 0x48, 0xd0, 0x7d, 0x3c, 0x44, 0xc3, 0x6d, 0x38, 0x87, 0xf3, 0xf1, 0x29, 0x8a, 0xe8, 0xaf, 0xd9, - 0x6e, 0x0d, 0x12, 0x15, 0xd5, 0x57, 0x18, 0x3e, 0x17, 0x1c, 0x46, 0x44, 0xba, 0xe7, 0x87, 0xfe, - 0x29, 0xc2, 0x63, 0xf1, 0x7e, 0x20, 0xac, 0x07, 0x78, 0x38, 0x02, 0x2b, 0x38, 0xfa, 0xae, 0xe2, - 0x6a, 0x32, 0xd0, 0xbb, 0x1a, 0x70, 0xa0, 0x71, 0xeb, 0xcc, 0xb1, 0x5d, 0xff, 0xc7, 0x38, 0xfe, - 0x6d, 0x78, 0x14, 0x02, 0x8f, 0x90, 0xa2, 0x3f, 0xe0, 0x41, 0x57, 0xec, 0xc0, 0x39, 0x4c, 0xc6, - 0x27, 0x47, 0x6a, 0x45, 0xf2, 0x02, 0x5a, 0x4a, 0x29, 0xec, 0x86, 0xcd, 0xb1, 0xf4, 0xea, 0x90, - 0x9f, 0x22, 0x7c, 0xb6, 0xd5, 0x03, 0x60, 0xbf, 0x85, 0x4f, 0x4a, 0x14, 0xc1, 0xc9, 0x66, 0x05, - 0x1f, 0xa8, 0xf5, 0xee, 0x3c, 0x17, 0x20, 0x0d, 0x6b, 0x2e, 0x63, 0x9e, 0x43, 0x0d, 0x96, 0xde, - 0x74, 0x8b, 0x10, 0xd7, 0x96, 0x6f, 0xbb, 0x6c, 0xd5, 0xae, 0x5b, 0x7e, 0xba, 0x8e, 0x0a, 0x3a, - 0x11, 0x37, 0x90, 0x0b, 0x7e, 0xe8, 0x7c, 0x03, 0x34, 0xe4, 0x42, 0xd1, 0xa0, 0xd5, 0x44, 0x7d, - 0x84, 0x0a, 0x06, 0xdf, 0x08, 0x14, 0xc4, 0x42, 0x51, 0xe1, 0xed, 0x58, 0x33, 0xad, 0x72, 0x86, - 0xb7, 0x5e, 0x59, 0x0e, 0xe2, 0x6e, 0xc8, 0x83, 0xf9, 0x29, 0x3c, 0x1c, 0xb4, 0xce, 0x92, 0xe9, - 0x04, 0x81, 0x0c, 0x05, 0x7b, 0x77, 0x1d, 0x4f, 0x59, 0x82, 0x2e, 0xb1, 0x5a, 0x35, 0x99, 0xe5, - 0xf3, 0x90, 0xb6, 0xb2, 0x65, 0xee, 0x06, 0x5c, 0xfb, 0x36, 0x45, 0xf0, 0x3d, 0x86, 0xf3, 0x3b, - 0x87, 0x3e, 0xf3, 0x76, 0x5d, 0x26, 0xf1, 0xe6, 0xf4, 0x70, 0x43, 0xd1, 0x1a, 0xd3, 0xd1, 0xe1, - 0x1d, 0xea, 0xd3, 0x74, 0x77, 0x5b, 0xc1, 0x7b, 0x1a, 0x28, 0x80, 0x9b, 0xf3, 0xf8, 0xa7, 0xbe, - 0x59, 0x63, 0x25, 0x97, 0xd5, 0xa8, 0x69, 0x99, 0x56, 0x05, 0x7c, 0xfd, 0x84, 0xef, 0xea, 0xc1, - 0x26, 0x4f, 0xb4, 0x70, 0x2e, 0xca, 0x2b, 0xa7, 0xcb, 0x85, 0xb2, 0x8c, 0xc7, 0x1b, 0x27, 0x43, - 0x2b, 0x6c, 0x53, 0xce, 0x76, 0x77, 0xad, 0x5d, 0x3b, 0x1d, 0xd0, 0x7f, 0x10, 0x9e, 0xe8, 0xa8, - 0x0c, 0xe0, 0xfe, 0x8e, 0x47, 0xa0, 0xfc, 0x4b, 0xd1, 0xb9, 0x11, 0x2e, 0xe2, 0x6c, 0xfc, 0x45, - 0x69, 0xb7, 0x07, 0x17, 0x86, 0x78, 0x6d, 0x5f, 0x94, 0x7d, 0x3c, 0x15, 0xdc, 0xcb, 0xce, 0x41, - 0xf4, 0xaa, 0x0b, 0x7c, 0x89, 0xb0, 0x92, 0xe4, 0x2d, 0x35, 0xea, 0x5c, 0x6f, 0xa2, 0xee, 0x5d, - 0xc7, 0xb8, 0x0f, 0xd5, 0xcf, 0x6f, 0xcd, 0xb6, 0x53, 0xb5, 0x69, 0x79, 0x75, 0x8f, 0x19, 0xfb, - 0xa9, 0xa7, 0xdf, 0xa1, 0x9e, 0x16, 0xe1, 0x4e, 0xb4, 0x99, 0x0b, 0xaf, 0xfb, 0x01, 0xad, 0x9a, - 0x65, 0x61, 0xed, 0x94, 0x2e, 0x17, 0xca, 0x3d, 0xe8, 0x27, 0x9b, 0xae, 0x69, 0xb0, 0x26, 0xff, - 0x05, 0x7c, 0xaa, 0x5c, 0x77, 0xc3, 0x63, 0xcb, 0xeb, 0x8d, 0x75, 0x07, 0x04, 0x41, 0xaf, 0x89, - 0xda, 0x0a, 0x9d, 0x3b, 0x7c, 0x17, 0x2e, 0x88, 0x5c, 0x28, 0xbf, 0x0e, 0xa6, 0x04, 0xc1, 0xa4, - 0x5a, 0x47, 0x43, 0xc5, 0x0c, 0x1e, 0xf7, 0xd6, 0xcf, 0x60, 0xf4, 0x6e, 0xfb, 0x50, 0xd7, 0xe9, - 0x65, 0x6f, 0xb6, 0xd0, 0x3e, 0xa1, 0x16, 0x60, 0x34, 0x82, 0x4a, 0xd8, 0xf2, 0xa9, 0xdf, 0x80, - 0xf1, 0x59, 0x30, 0x59, 0x36, 0x7f, 0x0c, 0x5b, 0x8d, 0x53, 0x77, 0x8d, 0x3d, 0xea, 0x31, 0x99, - 0xda, 0x01, 0x3d, 0xdc, 0x20, 0x04, 0x0f, 0xd4, 0xf9, 0x87, 0x7e, 0xf1, 0x41, 0xfc, 0x4d, 0x36, - 0x70, 0x9e, 0xff, 0xea, 0x3c, 0x95, 0xe2, 0xdd, 0x1e, 0x5e, 0x51, 0x39, 0x9e, 0x6f, 0x5e, 0x4f, - 0x4c, 0x57, 0x4c, 0x7f, 0xaf, 0xbe, 0xa3, 0x1a, 0x76, 0x4d, 0x03, 0xa2, 0x2b, 0x7f, 0xe6, 0xbd, - 0xf2, 0xbe, 0xe6, 0x1f, 0x3a, 0xcc, 0x53, 0xef, 0x30, 0x43, 0x0f, 0x0d, 0x90, 0x49, 0x3c, 0x24, - 0x89, 0xe8, 0xb6, 0xc7, 0xd3, 0x30, 0x20, 0x1c, 0x45, 0xb7, 0x8a, 0xff, 0x3d, 0x87, 0x4f, 0x08, - 0xfc, 0xe4, 0x7f, 0x08, 0x0f, 0x4a, 0x72, 0x47, 0x3a, 0xdc, 0x84, 0x76, 0x2e, 0x59, 0xb8, 0x90, - 0x41, 0x52, 0xe6, 0x42, 0xd1, 0xfe, 0xfd, 0xd5, 0x77, 0x4f, 0xfa, 0x2f, 0x90, 0x19, 0xed, 0x1f, - 0xd4, 0xd8, 0xa7, 0xd5, 0xf9, 0x32, 0xb5, 0x35, 0xa9, 0x3d, 0x1f, 0x47, 0xc2, 0xc9, 0x63, 0x84, - 0x07, 0x78, 0xbd, 0x92, 0xe9, 0x04, 0x27, 0x91, 0x57, 0xa8, 0x30, 0x93, 0x2a, 0x07, 0x50, 0x96, - 0x04, 0x94, 0x05, 0xa2, 0xa5, 0x42, 0x11, 0xdc, 0x4b, 0x3b, 0x92, 0xcf, 0xd9, 0x31, 0x79, 0x82, - 0xf0, 0x29, 0xc1, 0xea, 0x6e, 0x57, 0xab, 0x64, 0x2e, 0xc1, 0x5d, 0x0b, 0xbd, 0x2c, 0xfc, 0x36, - 0x93, 0x2c, 0xc0, 0x53, 0x05, 0xbc, 0x59, 0x32, 0x9d, 0x0d, 0x1e, 0x79, 0x0f, 0xe1, 0x7c, 0xa3, - 0x7c, 0x13, 0x61, 0xb5, 0x70, 0xbe, 0x44, 0x58, 0xad, 0x6c, 0x4f, 0xb9, 0x21, 0x60, 0x5d, 0x25, - 0x8b, 0xe9, 0x07, 0x18, 0x80, 0xd1, 0x8e, 0xa0, 0x2d, 0x1d, 0x93, 0xa7, 0x08, 0x0f, 0x37, 0x40, - 0xf2, 0xf4, 0xa9, 0xc9, 0x29, 0x69, 0xbd, 0xf0, 0x05, 0x2d, 0xb3, 0x3c, 0xe0, 0x2d, 0x0a, 0xbc, - 0x17, 0xc9, 0x5c, 0x76, 0xbc, 0xe4, 0x05, 0xc2, 0x43, 0x91, 0x49, 0x9f, 0xcc, 0x27, 0x39, 0x6d, - 0x23, 0x68, 0x05, 0x35, 0xab, 0x38, 0x40, 0xfc, 0xb3, 0x80, 0xf8, 0x90, 0x3c, 0x48, 0x85, 0x18, - 0xe5, 0x19, 0xda, 0x91, 0x1c, 0xfc, 0x8f, 0x1b, 0x85, 0xa9, 0x1d, 0x89, 0xd9, 0xfe, 0x58, 0x3b, - 0x12, 0xd3, 0xfc, 0x31, 0xf9, 0x08, 0xe1, 0xd3, 0x51, 0xce, 0xc3, 0x13, 0xbe, 0x90, 0x9c, 0xc0, - 0x18, 0x2a, 0x56, 0x28, 0x76, 0xa3, 0x02, 0x31, 0x5d, 0x11, 0x31, 0x69, 0x64, 0xbe, 0xab, 0x98, - 0xc8, 0x73, 0x84, 0x4f, 0xea, 0x30, 0x77, 0x27, 0xf5, 0x9f, 0x26, 0x1a, 0x91, 0xd8, 0x7f, 0x9a, - 0xe9, 0x80, 0xa2, 0x0b, 0x5c, 0x1b, 0xe4, 0x5e, 0x2a, 0x2e, 0x18, 0xff, 0x33, 0xa4, 0xf9, 0xff, - 0x08, 0x63, 0x00, 0xcd, 0x33, 0x9c, 0x72, 0xcb, 0x9b, 0xa1, 0x5f, 0xcc, 0x26, 0x0c, 0xe8, 0x2f, - 0x09, 0xf4, 0x73, 0x64, 0x36, 0x2b, 0x7a, 0xf2, 0x0c, 0xe1, 0x7c, 0x83, 0x08, 0x24, 0x42, 0x6b, - 0x65, 0x25, 0x89, 0xd0, 0xda, 0xb8, 0x45, 0x17, 0x7d, 0x61, 0x37, 0xd0, 0x8d, 0xf4, 0x85, 0xf7, - 0x11, 0xc6, 0x21, 0xff, 0x20, 0x49, 0xae, 0xdb, 0xa8, 0x50, 0x61, 0x3e, 0xa3, 0x34, 0x20, 0x5d, - 0x16, 0x48, 0x17, 0x49, 0x31, 0x15, 0x29, 0xff, 0x35, 0xad, 0x4a, 0x04, 0xe7, 0xbb, 0xa2, 0xf5, - 0x4b, 0x1a, 0x93, 0xd8, 0x63, 0x5b, 0xb8, 0x51, 0x62, 0x8f, 0x6d, 0xe5, 0x45, 0xca, 0x75, 0x81, - 0xf0, 0x0a, 0xb9, 0x9c, 0xa1, 0xf5, 0x5b, 0xe5, 0x12, 0xef, 0xff, 0xe1, 0xeb, 0xf4, 0x02, 0x61, - 0xb2, 0xce, 0xfc, 0x16, 0xde, 0x93, 0x78, 0xef, 0xe3, 0xc9, 0x55, 0xe2, 0xbd, 0xef, 0x40, 0xab, - 0x94, 0x3f, 0x0a, 0xe8, 0x2b, 0xe4, 0x56, 0x2a, 0xf4, 0x0a, 0xf3, 0x4b, 0x86, 0xb0, 0x52, 0xe2, - 0x15, 0x51, 0x6a, 0x2d, 0x89, 0x67, 0x08, 0xe3, 0x75, 0xe6, 0x03, 0xa1, 0x22, 0xc9, 0x33, 0x46, - 0x94, 0xa5, 0x15, 0xe6, 0xb2, 0x88, 0x02, 0xde, 0x9b, 0x02, 0xef, 0x35, 0xb2, 0x94, 0x09, 0xaf, - 0x43, 0x0f, 0x4b, 0x65, 0xea, 0xd3, 0x08, 0xcc, 0x2f, 0x10, 0x26, 0xed, 0xe4, 0x80, 0x2c, 0xa6, - 0xd4, 0x64, 0x2c, 0x13, 0x2a, 0x5c, 0xe9, 0x52, 0xab, 0xeb, 0x20, 0xa2, 0x84, 0x27, 0x12, 0xc4, - 0xe7, 0x08, 0x9f, 0x69, 0xb7, 0xcf, 0x9b, 0xd9, 0x52, 0x72, 0x7f, 0xea, 0x1c, 0xca, 0xef, 0xba, - 0x57, 0xec, 0xfa, 0xe9, 0x88, 0x46, 0x43, 0x3e, 0x41, 0xf8, 0x74, 0x0b, 0xb1, 0x49, 0x2c, 0xfa, - 0x78, 0x4e, 0x95, 0x58, 0xf4, 0x1d, 0x78, 0x53, 0x17, 0x1d, 0x85, 0x5f, 0xd5, 0x52, 0x5d, 0x98, - 0x28, 0x19, 0x02, 0xe2, 0x73, 0x84, 0x71, 0xc8, 0x86, 0x12, 0x3b, 0x5f, 0x1b, 0x01, 0x4b, 0xec, - 0x7c, 0xed, 0x14, 0x4b, 0x59, 0x17, 0x38, 0x6f, 0x93, 0x9b, 0x19, 0x66, 0x21, 0xd3, 0x60, 0x12, - 0xa1, 0x76, 0x14, 0x70, 0xba, 0x63, 0xed, 0x48, 0xb0, 0xb8, 0x63, 0xf2, 0x31, 0x1f, 0x2c, 0x9a, - 0x09, 0x53, 0xf2, 0x60, 0x11, 0xcb, 0xde, 0x92, 0x07, 0x8b, 0x78, 0x46, 0xa7, 0x5c, 0x13, 0x31, - 0x5c, 0x26, 0x0b, 0xe9, 0x83, 0x85, 0xfc, 0xe7, 0x5b, 0x38, 0xd6, 0x7d, 0x80, 0xf0, 0x70, 0x94, - 0xa0, 0x25, 0x0e, 0x9f, 0x31, 0x34, 0x2f, 0x71, 0xf8, 0x8c, 0x63, 0x7e, 0xca, 0x55, 0x01, 0xf6, - 0x12, 0x51, 0x33, 0x3d, 0x35, 0xb4, 0xc2, 0x4a, 0x7c, 0x12, 0xf2, 0x56, 0x36, 0x5e, 0xbe, 0x19, - 0x47, 0xaf, 0xde, 0x8c, 0xa3, 0x6f, 0xdf, 0x8c, 0xa3, 0xc7, 0x6f, 0xc7, 0xfb, 0x5e, 0xbd, 0x1d, - 0xef, 0xfb, 0xfa, 0xed, 0x78, 0xdf, 0x5f, 0x8a, 0x11, 0xfa, 0x27, 0x6d, 0x6e, 0xd0, 0x1d, 0xaf, - 0xd9, 0xe6, 0xbf, 0x1a, 0x56, 0x05, 0x1d, 0xdc, 0x19, 0x14, 0xff, 0x07, 0xbc, 0xfc, 0x7d, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xbc, 0xcc, 0xcc, 0x44, 0x85, 0x1d, 0x00, 0x00, + // 1819 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcf, 0x6f, 0x1c, 0x45, + 0x16, 0x76, 0x79, 0x1c, 0x27, 0x53, 0xf6, 0x6e, 0x76, 0x6b, 0x9d, 0xac, 0x77, 0xe2, 0xf5, 0x8f, + 0xd6, 0xc6, 0x76, 0xbc, 0x71, 0x77, 0x3c, 0x71, 0xe2, 0x8d, 0x93, 0x25, 0x89, 0x1d, 0xd9, 0x24, + 0x72, 0x14, 0xa7, 0x2d, 0x83, 0x84, 0x10, 0x43, 0x79, 0xa6, 0x3c, 0x6e, 0x3c, 0xd3, 0xdd, 0xe9, + 0xee, 0x31, 0x58, 0x96, 0x2f, 0x70, 0x06, 0x45, 0xca, 0x89, 0x13, 0x88, 0x04, 0x21, 0x4e, 0x48, + 0x81, 0x03, 0x17, 0x0e, 0x20, 0x45, 0xca, 0x8d, 0x48, 0x5c, 0x10, 0x87, 0x08, 0x25, 0xfc, 0x21, + 0xa8, 0xaa, 0x5e, 0x4f, 0xf7, 0xcc, 0xf4, 0x74, 0xf7, 0xa0, 0x11, 0xa7, 0x71, 0x55, 0xd7, 0x7b, + 0xef, 0x7b, 0xaf, 0xde, 0x7b, 0xf5, 0x3e, 0x19, 0x8f, 0x17, 0xa9, 0x69, 0x98, 0xac, 0x50, 0xdc, + 0xa1, 0x86, 0xa9, 0xb9, 0x9e, 0xe5, 0xd0, 0x32, 0xd3, 0xee, 0xd5, 0x98, 0xb3, 0xaf, 0xda, 0x8e, + 0xe5, 0x59, 0x64, 0x28, 0x7c, 0x42, 0x85, 0x13, 0xb9, 0xa1, 0xb2, 0x55, 0xb6, 0xc4, 0x01, 0x8d, + 0xff, 0x25, 0xcf, 0xe6, 0x46, 0xca, 0x96, 0x55, 0xae, 0x30, 0x8d, 0xda, 0x86, 0x46, 0x4d, 0xd3, + 0xf2, 0xa8, 0x67, 0x58, 0xa6, 0x0b, 0x5f, 0x67, 0x8a, 0x96, 0x5b, 0xb5, 0x5c, 0x6d, 0x8b, 0xba, + 0x60, 0x42, 0xdb, 0x9b, 0xdb, 0x62, 0x1e, 0x9d, 0xd3, 0x6c, 0x5a, 0x36, 0x4c, 0x71, 0x18, 0xce, + 0x4e, 0x44, 0xe2, 0xb2, 0xa9, 0x43, 0xab, 0xbe, 0xba, 0xa9, 0xc8, 0x23, 0xb4, 0xe8, 0x19, 0x7b, + 0xac, 0x50, 0x62, 0xb4, 0xe2, 0x1f, 0xfc, 0x4f, 0xb4, 0x2e, 0xc7, 0xda, 0x33, 0x4a, 0xcc, 0x89, + 0x57, 0x67, 0xd3, 0xfd, 0x2a, 0x33, 0xbd, 0x82, 0x61, 0x6e, 0x83, 0x93, 0xca, 0x10, 0x26, 0x77, + 0x39, 0xf8, 0x75, 0x01, 0x46, 0x67, 0xf7, 0x6a, 0xcc, 0xf5, 0x94, 0xbb, 0xf8, 0x1f, 0x0d, 0xbb, + 0xae, 0x6d, 0x99, 0x2e, 0x23, 0x8b, 0xb8, 0x5f, 0x82, 0x1e, 0x46, 0xe3, 0x68, 0x7a, 0x20, 0x3f, + 0xa2, 0x46, 0x85, 0x53, 0x95, 0x52, 0x4b, 0x7d, 0x4f, 0x9f, 0x8f, 0xf5, 0xe8, 0x20, 0xa1, 0xbc, + 0x86, 0xff, 0x26, 0x54, 0xae, 0x18, 0x15, 0x06, 0x66, 0xc8, 0x49, 0xdc, 0x5f, 0x65, 0xce, 0x6e, + 0x85, 0x09, 0x7d, 0x83, 0x3a, 0xac, 0xc8, 0x10, 0x3e, 0x62, 0xbd, 0x6b, 0x32, 0x67, 0xb8, 0x77, + 0x1c, 0x4d, 0x67, 0x75, 0xb9, 0xe0, 0xbb, 0xae, 0x47, 0x1d, 0x6f, 0x38, 0x33, 0x8e, 0xa6, 0x33, + 0xba, 0x5c, 0x28, 0xeb, 0xf8, 0xef, 0x21, 0xbd, 0x00, 0xf4, 0x32, 0xee, 0xdb, 0x36, 0x40, 0xed, + 0x40, 0x7e, 0x22, 0x1a, 0xe6, 0xa6, 0x69, 0x6c, 0x1b, 0xac, 0xc4, 0x05, 0x01, 0xab, 0x10, 0x52, + 0xde, 0xc2, 0x43, 0x42, 0xe3, 0xf5, 0x4a, 0x85, 0x7f, 0xf3, 0x83, 0x42, 0x56, 0x30, 0x0e, 0x6e, + 0x16, 0x54, 0x4f, 0xaa, 0x32, 0x0d, 0x54, 0x9e, 0x06, 0xaa, 0xcc, 0x34, 0x48, 0x03, 0x75, 0x9d, + 0x96, 0x7d, 0x4f, 0xf5, 0x90, 0xa4, 0xf2, 0x09, 0xc2, 0x27, 0x9a, 0x0c, 0x00, 0xec, 0xff, 0xe3, + 0x23, 0x1c, 0x01, 0x0f, 0x6f, 0xa6, 0x13, 0xdc, 0x52, 0x8a, 0xac, 0x36, 0x00, 0xec, 0x15, 0x00, + 0xa7, 0x12, 0x01, 0x4a, 0xdb, 0x0d, 0x08, 0xcf, 0x41, 0x04, 0xd6, 0x21, 0xab, 0xfc, 0x08, 0x0c, + 0xe3, 0xa3, 0xb4, 0x54, 0x72, 0x98, 0x2b, 0x13, 0x20, 0xab, 0xfb, 0x4b, 0xe5, 0x4d, 0x70, 0x29, + 0x90, 0x00, 0x97, 0x96, 0x71, 0xb6, 0x9e, 0x9b, 0x10, 0xb3, 0xb1, 0x36, 0x59, 0xe3, 0x1f, 0x03, + 0xa7, 0x02, 0x39, 0x65, 0x0b, 0x0f, 0xfb, 0x01, 0xab, 0x9f, 0xea, 0xf6, 0xad, 0x7c, 0x89, 0xf0, + 0xbf, 0x22, 0x8c, 0x44, 0xbb, 0x91, 0xf9, 0x23, 0x6e, 0x74, 0xef, 0x7e, 0x6a, 0xf8, 0x9f, 0x12, + 0xaa, 0xe7, 0x31, 0x57, 0xb6, 0xa5, 0x50, 0x49, 0x71, 0x83, 0xcc, 0x81, 0x1b, 0x82, 0x55, 0xa8, + 0xd4, 0x7a, 0xa3, 0x4b, 0x2d, 0x13, 0x59, 0x6a, 0x7d, 0xe1, 0x52, 0x33, 0xfc, 0x6b, 0x08, 0x9b, + 0x85, 0x00, 0xdd, 0xc6, 0x03, 0x34, 0xd8, 0x86, 0x7b, 0x38, 0x1d, 0x1d, 0xa2, 0x90, 0xfc, 0x8a, + 0xe5, 0x54, 0x21, 0x50, 0x61, 0x79, 0x85, 0xe1, 0x53, 0xfe, 0x65, 0x84, 0x4e, 0x77, 0xfd, 0xd2, + 0xbf, 0x45, 0x78, 0x24, 0xda, 0x0e, 0xb8, 0x75, 0x07, 0x0f, 0x86, 0x60, 0xf9, 0x57, 0xdf, 0x91, + 0x5f, 0x0d, 0x0a, 0xba, 0x97, 0x03, 0x36, 0x34, 0x6e, 0x9d, 0xd9, 0x96, 0xe3, 0xfd, 0x19, 0xd7, + 0xbf, 0x09, 0x8f, 0x82, 0x6f, 0x11, 0x42, 0xf4, 0x0a, 0xee, 0x77, 0xc4, 0x0e, 0xdc, 0xc3, 0x78, + 0x74, 0x70, 0xa4, 0x54, 0x28, 0x2e, 0x20, 0xa5, 0x14, 0x82, 0x6e, 0xd8, 0xe8, 0x4b, 0xb7, 0x2e, + 0xf9, 0x21, 0xc2, 0x27, 0x9b, 0x2d, 0x00, 0xf6, 0x6b, 0xf8, 0xa8, 0x44, 0xe1, 0xdf, 0x6c, 0x5a, + 0xf0, 0xbe, 0x58, 0xf7, 0xee, 0x73, 0x0e, 0xc2, 0xb0, 0xe2, 0x30, 0xe6, 0xda, 0xb4, 0xc8, 0x92, + 0x9b, 0x6e, 0x1e, 0xfc, 0xda, 0xf0, 0x2c, 0x87, 0x2d, 0x5b, 0x35, 0xd3, 0x4b, 0x96, 0x51, 0x41, + 0x26, 0x64, 0x06, 0x62, 0xc1, 0x2f, 0x9d, 0x6f, 0x80, 0x84, 0x5c, 0x28, 0x1a, 0xb4, 0x9a, 0xb0, + 0x8d, 0x40, 0xa0, 0xc8, 0x37, 0x7c, 0x01, 0xb1, 0x50, 0x54, 0x78, 0x3b, 0x56, 0x0c, 0xb3, 0x94, + 0xe2, 0xad, 0x57, 0x16, 0x7d, 0xbf, 0xeb, 0xe7, 0x41, 0xfd, 0x04, 0x1e, 0xf4, 0x5b, 0x67, 0xc1, + 0xb0, 0x7d, 0x47, 0x06, 0xfc, 0xbd, 0x9b, 0xb6, 0xab, 0x2c, 0x40, 0x97, 0x58, 0xae, 0x18, 0xcc, + 0xf4, 0xb8, 0x4b, 0x1b, 0xe9, 0x22, 0x77, 0x05, 0xca, 0xbe, 0x45, 0x10, 0x6c, 0x8f, 0xe0, 0xec, + 0xd6, 0xbe, 0xc7, 0xdc, 0x6d, 0x87, 0x49, 0xbc, 0x19, 0x3d, 0xd8, 0x50, 0xb4, 0xfa, 0x74, 0xb4, + 0x7f, 0x83, 0x7a, 0x34, 0xd9, 0xdc, 0x86, 0xff, 0x9e, 0xfa, 0x02, 0x60, 0xe6, 0x34, 0xfe, 0xab, + 0x67, 0x54, 0x59, 0xc1, 0x61, 0x55, 0x6a, 0x98, 0x86, 0x59, 0x06, 0x5b, 0x7f, 0xe1, 0xbb, 0xba, + 0xbf, 0xc9, 0x03, 0x2d, 0x8c, 0x8b, 0xf4, 0xca, 0xe8, 0x72, 0xa1, 0x2c, 0xe2, 0xd1, 0xfa, 0xcd, + 0xd0, 0x32, 0x5b, 0x97, 0xb3, 0xdd, 0x4d, 0x73, 0xdb, 0x4a, 0x06, 0xf4, 0x01, 0xc2, 0x63, 0x6d, + 0x85, 0x01, 0xdc, 0xdb, 0x78, 0x08, 0xd2, 0xbf, 0x10, 0x9e, 0x1b, 0xa1, 0x10, 0xa7, 0xa3, 0x0b, + 0xa5, 0x55, 0x1f, 0x14, 0x0c, 0x71, 0x5b, 0xbe, 0x28, 0xbb, 0x78, 0xc2, 0xaf, 0xcb, 0xf6, 0x4e, + 0x74, 0xab, 0x0b, 0xfc, 0x88, 0xb0, 0x12, 0x67, 0x2d, 0xd1, 0xeb, 0x4c, 0x77, 0xbc, 0xee, 0x5e, + 0xc7, 0xb8, 0x0d, 0xd9, 0xcf, 0xab, 0x66, 0xd3, 0xae, 0x58, 0xb4, 0xb4, 0xbc, 0xc3, 0x8a, 0xbb, + 0x89, 0xb7, 0xdf, 0x26, 0x9f, 0xe6, 0xa1, 0x26, 0x5a, 0xd4, 0x05, 0xe5, 0xbe, 0x47, 0x2b, 0x46, + 0x49, 0x68, 0x3b, 0xa6, 0xcb, 0x85, 0x72, 0x0b, 0xfa, 0xc9, 0xba, 0x63, 0x14, 0x59, 0x83, 0xfd, + 0x1c, 0x3e, 0x56, 0xaa, 0x39, 0xc1, 0xb5, 0x65, 0xf5, 0xfa, 0xba, 0x0d, 0x02, 0xbf, 0xd7, 0x84, + 0x75, 0x05, 0xc6, 0x6d, 0xbe, 0x0b, 0x05, 0x22, 0x17, 0xca, 0xbf, 0xfd, 0x29, 0x41, 0xd0, 0xa4, + 0xe6, 0xd1, 0x50, 0x31, 0xfc, 0xc7, 0xbd, 0xf9, 0x33, 0x28, 0xbd, 0xd9, 0x3a, 0xd4, 0xb5, 0x7b, + 0xd9, 0x1b, 0x35, 0xb4, 0x4e, 0xa8, 0x39, 0x18, 0x8d, 0x20, 0x13, 0x36, 0x3c, 0xea, 0xd5, 0x61, + 0x7c, 0xe7, 0x4f, 0x96, 0x8d, 0x1f, 0x83, 0x56, 0x63, 0xd7, 0x9c, 0xe2, 0x0e, 0x75, 0x99, 0x0c, + 0x6d, 0x9f, 0x1e, 0x6c, 0x10, 0x82, 0xfb, 0x6a, 0xfc, 0x43, 0xaf, 0xf8, 0x20, 0xfe, 0x26, 0x6b, + 0x38, 0xcb, 0x7f, 0x75, 0x1e, 0x4a, 0xf1, 0x6e, 0x0f, 0x2e, 0xa9, 0x1c, 0xcf, 0x2f, 0xcf, 0xc7, + 0x26, 0xcb, 0x86, 0xb7, 0x53, 0xdb, 0x52, 0x8b, 0x56, 0x55, 0x03, 0x7e, 0x2a, 0x7f, 0x66, 0xdd, + 0xd2, 0xae, 0xe6, 0xed, 0xdb, 0xcc, 0x55, 0x6f, 0xb0, 0xa2, 0x1e, 0x28, 0x20, 0xe3, 0x78, 0x40, + 0xb2, 0xcc, 0x4d, 0x97, 0x87, 0xa1, 0x4f, 0x18, 0x0a, 0x6f, 0xe5, 0x3f, 0x3c, 0x85, 0x8f, 0x08, + 0xfc, 0xe4, 0x23, 0x84, 0xfb, 0x25, 0xb9, 0x23, 0x6d, 0x2a, 0xa1, 0x95, 0x4b, 0xe6, 0xce, 0xa4, + 0x38, 0x29, 0x63, 0xa1, 0x68, 0xef, 0xff, 0xf4, 0xdb, 0x83, 0xde, 0x33, 0x64, 0x4a, 0x7b, 0x87, + 0x16, 0x77, 0x69, 0x65, 0xb6, 0x44, 0x2d, 0x4d, 0x4a, 0xcf, 0x46, 0x71, 0x67, 0x72, 0x1f, 0xe1, + 0x3e, 0x9e, 0xaf, 0x64, 0x32, 0xc6, 0x48, 0xe8, 0x15, 0xca, 0x4d, 0x25, 0x9e, 0x03, 0x28, 0x0b, + 0x02, 0xca, 0x1c, 0xd1, 0x12, 0xa1, 0x08, 0xee, 0xa5, 0x1d, 0xc8, 0xe7, 0xec, 0x90, 0x3c, 0x40, + 0xf8, 0x98, 0x60, 0x75, 0xd7, 0x2b, 0x15, 0x32, 0x13, 0x63, 0xae, 0x89, 0x5e, 0xe6, 0xfe, 0x9b, + 0xea, 0x2c, 0xc0, 0x53, 0x05, 0xbc, 0x69, 0x32, 0x99, 0x0e, 0x1e, 0xf9, 0x0c, 0xe1, 0x6c, 0x3d, + 0x7d, 0x63, 0x61, 0x35, 0x71, 0xbe, 0x58, 0x58, 0xcd, 0x6c, 0x4f, 0xb9, 0x22, 0x60, 0x5d, 0x24, + 0xf3, 0xc9, 0x17, 0xe8, 0x83, 0xd1, 0x0e, 0xa0, 0x2d, 0x1d, 0x92, 0x87, 0x08, 0x0f, 0xd6, 0x41, + 0xf2, 0xf0, 0xa9, 0xf1, 0x21, 0x69, 0x2e, 0xf8, 0x9c, 0x96, 0xfa, 0x3c, 0xe0, 0xcd, 0x0b, 0xbc, + 0x67, 0xc9, 0x4c, 0x7a, 0xbc, 0xe4, 0x09, 0xc2, 0x03, 0xa1, 0x49, 0x9f, 0xcc, 0xc6, 0x19, 0x6d, + 0x21, 0x68, 0x39, 0x35, 0xed, 0x71, 0x80, 0xf8, 0xba, 0x80, 0x78, 0x97, 0xdc, 0x49, 0x84, 0x18, + 0xe6, 0x19, 0xda, 0x81, 0x1c, 0xfc, 0x0f, 0xeb, 0x89, 0xa9, 0x1d, 0x88, 0xd9, 0xfe, 0x50, 0x3b, + 0x10, 0xd3, 0xfc, 0x21, 0xf9, 0x0a, 0xe1, 0xe3, 0x61, 0xce, 0xc3, 0x03, 0x3e, 0x17, 0x1f, 0xc0, + 0x08, 0x2a, 0x96, 0xcb, 0x77, 0x22, 0x02, 0x3e, 0x5d, 0x10, 0x3e, 0x69, 0x64, 0xb6, 0x23, 0x9f, + 0xc8, 0x63, 0x84, 0x8f, 0xea, 0x30, 0x77, 0xc7, 0xf5, 0x9f, 0x06, 0x1a, 0x11, 0xdb, 0x7f, 0x1a, + 0xe9, 0x80, 0xa2, 0x0b, 0x5c, 0x6b, 0xe4, 0x56, 0x22, 0x2e, 0x18, 0xff, 0x53, 0x84, 0xf9, 0x63, + 0x84, 0x31, 0x80, 0xe6, 0x11, 0x4e, 0xa8, 0xf2, 0x46, 0xe8, 0x67, 0xd3, 0x1d, 0x06, 0xf4, 0xe7, + 0x04, 0xfa, 0x19, 0x32, 0x9d, 0x16, 0x3d, 0x79, 0x84, 0x70, 0xb6, 0x4e, 0x04, 0x62, 0xa1, 0x35, + 0xb3, 0x92, 0x58, 0x68, 0x2d, 0xdc, 0xa2, 0x83, 0xbe, 0xb0, 0xed, 0xcb, 0x86, 0xfa, 0xc2, 0xe7, + 0x08, 0xe3, 0x80, 0x7f, 0x90, 0x38, 0xd3, 0x2d, 0x54, 0x28, 0x37, 0x9b, 0xf2, 0x34, 0x20, 0x5d, + 0x14, 0x48, 0xe7, 0x49, 0x3e, 0x11, 0x29, 0xff, 0x35, 0xcc, 0x72, 0x08, 0xe7, 0xa7, 0xa2, 0xf5, + 0x4b, 0x1a, 0x13, 0xdb, 0x63, 0x9b, 0xb8, 0x51, 0x6c, 0x8f, 0x6d, 0xe6, 0x45, 0xca, 0x65, 0x81, + 0xf0, 0x02, 0x39, 0x9f, 0xa2, 0xf5, 0x9b, 0xa5, 0x02, 0xef, 0xff, 0xc1, 0xeb, 0xf4, 0x04, 0x61, + 0xb2, 0xca, 0xbc, 0x26, 0xde, 0x13, 0x5b, 0xf7, 0xd1, 0xe4, 0x2a, 0xb6, 0xee, 0xdb, 0xd0, 0x2a, + 0xe5, 0x55, 0x01, 0x7d, 0x89, 0x5c, 0x4b, 0x84, 0x5e, 0x66, 0x5e, 0xa1, 0x28, 0xb4, 0x14, 0x78, + 0x46, 0x14, 0x9a, 0x53, 0xe2, 0x11, 0xc2, 0x78, 0x95, 0x79, 0x40, 0xa8, 0x48, 0xfc, 0x8c, 0x11, + 0x66, 0x69, 0xb9, 0x99, 0x34, 0x47, 0x01, 0xef, 0x55, 0x81, 0xf7, 0x12, 0x59, 0x48, 0x85, 0xd7, + 0xa6, 0xfb, 0x85, 0x12, 0xf5, 0x68, 0x08, 0xe6, 0x0f, 0x08, 0x93, 0x56, 0x72, 0x40, 0xe6, 0x13, + 0x72, 0x32, 0x92, 0x09, 0xe5, 0x2e, 0x74, 0x28, 0xd5, 0xb1, 0x13, 0x61, 0xc2, 0x13, 0x72, 0xe2, + 0x7b, 0x84, 0x4f, 0xb4, 0xea, 0xe7, 0xcd, 0x6c, 0x21, 0xbe, 0x3f, 0xb5, 0x77, 0xe5, 0x7f, 0x9d, + 0x0b, 0x76, 0xfc, 0x74, 0x84, 0xbd, 0x21, 0xdf, 0x20, 0x7c, 0xbc, 0x89, 0xd8, 0xc4, 0x26, 0x7d, + 0x34, 0xa7, 0x8a, 0x4d, 0xfa, 0x36, 0xbc, 0xa9, 0x83, 0x8e, 0xc2, 0x4b, 0xb5, 0x50, 0x13, 0x2a, + 0x0a, 0x45, 0x01, 0xf1, 0x31, 0xc2, 0x38, 0x60, 0x43, 0xb1, 0x9d, 0xaf, 0x85, 0x80, 0xc5, 0x76, + 0xbe, 0x56, 0x8a, 0xa5, 0xac, 0x0a, 0x9c, 0xd7, 0xc9, 0xd5, 0x14, 0xb3, 0x90, 0x51, 0x64, 0x12, + 0xa1, 0x76, 0xe0, 0x73, 0xba, 0x43, 0xed, 0x40, 0xb0, 0xb8, 0x43, 0xf2, 0x35, 0x1f, 0x2c, 0x1a, + 0x09, 0x53, 0xfc, 0x60, 0x11, 0xc9, 0xde, 0xe2, 0x07, 0x8b, 0x68, 0x46, 0xa7, 0x5c, 0x12, 0x3e, + 0x9c, 0x27, 0x73, 0xc9, 0x83, 0x85, 0xfc, 0xcf, 0x5a, 0x30, 0xd6, 0x7d, 0x81, 0xf0, 0x60, 0x98, + 0xa0, 0xc5, 0x0e, 0x9f, 0x11, 0x34, 0x2f, 0x76, 0xf8, 0x8c, 0x62, 0x7e, 0xca, 0x45, 0x01, 0xf6, + 0x1c, 0x51, 0x53, 0x3d, 0x35, 0xb4, 0xcc, 0x0a, 0x7c, 0x12, 0x72, 0x97, 0xd6, 0x9e, 0xbe, 0x18, + 0x45, 0xcf, 0x5e, 0x8c, 0xa2, 0x5f, 0x5f, 0x8c, 0xa2, 0xfb, 0x2f, 0x47, 0x7b, 0x9e, 0xbd, 0x1c, + 0xed, 0xf9, 0xf9, 0xe5, 0x68, 0xcf, 0x1b, 0xf9, 0x10, 0xfd, 0x93, 0x3a, 0xd7, 0xe8, 0x96, 0xdb, + 0xa8, 0xf3, 0xbd, 0xba, 0x56, 0x41, 0x07, 0xb7, 0xfa, 0xc5, 0xff, 0x01, 0xcf, 0xff, 0x1e, 0x00, + 0x00, 0xff, 0xff, 0x5f, 0xcf, 0x90, 0x2b, 0x3c, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. From 9508bd4c368823a4b8f95e3d543894a504817b13 Mon Sep 17 00:00:00 2001 From: marston Date: Mon, 23 Oct 2023 10:59:35 -0400 Subject: [PATCH 029/256] user posting file & being properly charged --- proto/canine_chain/storage/tx.proto | 4 +- x/storage/keeper/msg_server_post_contract.go | 82 +++++++- x/storage/types/tx.pb.go | 193 +++++++++++-------- 3 files changed, 195 insertions(+), 84 deletions(-) diff --git a/proto/canine_chain/storage/tx.proto b/proto/canine_chain/storage/tx.proto index 172f8965f..b28cd3d90 100644 --- a/proto/canine_chain/storage/tx.proto +++ b/proto/canine_chain/storage/tx.proto @@ -35,7 +35,9 @@ message MsgPostFile { int64 proof_interval = 4; // How many blocks between proofs. int64 proof_type = 5; int64 max_proofs = 6; // How many provers this file can have. - string note = 7; // Misc string to store extra details. + int64 expires = 7; + string note = 8; // Misc string to store extra details. + } message MsgPostFileResponse { diff --git a/x/storage/keeper/msg_server_post_contract.go b/x/storage/keeper/msg_server_post_contract.go index 80de957f9..11110f502 100644 --- a/x/storage/keeper/msg_server_post_contract.go +++ b/x/storage/keeper/msg_server_post_contract.go @@ -2,17 +2,91 @@ package keeper import ( "context" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -// TODO: POST FILE func (k msgServer) PostFile(goCtx context.Context, msg *types.MsgPostFile) (*types.MsgPostFileResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - _ = ctx - _ = msg + providers := k.GetActiveProviders(ctx, "") - return &types.MsgPostFileResponse{}, nil + file := types.UnifiedFile{ + Merkle: msg.Merkle, + Owner: msg.Creator, + Start: ctx.BlockHeight(), + Expires: msg.Expires, + FileSize: msg.FileSize, + ProofInterval: msg.ProofInterval, + ProofType: msg.ProofType, + Proofs: make([]string, 0), + MaxProofs: msg.MaxProofs, + Note: msg.Note, + } + k.SetFile(ctx, file) + + ips := make([]string, 0) + + for i, provider := range providers { // adding all provers + if i >= int(msg.MaxProofs) { + break + } + file.AddProver(ctx, k, provider.Address) + + prv, found := k.GetProviders(ctx, provider.Address) + if !found { + continue + } + + ips = append(ips, prv.Ip) + } + + res := &types.MsgPostFileResponse{ProviderIps: ips} + + totalSize := msg.FileSize * msg.MaxProofs + if msg.Expires > 0 { // if the file is posted as a one-time payment + kbs := totalSize / 1000 + var kbMin int64 = 1024 + if kbs < kbMin { // minimum amount of kbs to post + kbs = kbMin + } + + var minBlocks int64 = 600 + blockDuration := msg.Expires - ctx.BlockHeight() + if blockDuration < minBlocks { + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "cannot post a file for less than %d blocks", minBlocks) + } + + seconds := blockDuration * 6 + minutes := seconds / 60 + hours := minutes / 60 + + cost := k.GetStorageCostKbs(ctx, kbs, hours) + + // TODO: charge user for cost using USDC + _ = cost + + return res, nil + } + + // traditional storage plan payment info + + paymentInfo, found := k.GetStoragePaymentInfo(ctx, msg.Creator) + if !found { + return nil, sdkerrors.Wrapf(sdkerrors.ErrKeyNotFound, "storage account does not exist") + } + if paymentInfo.End.Before(ctx.BlockTime()) { + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "storage account is expired") + } + + paymentInfo.SpaceUsed += totalSize + if paymentInfo.SpaceUsed > paymentInfo.SpaceAvailable { + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "storage account does not have enough space available %d > %d", paymentInfo.SpaceUsed, paymentInfo.SpaceAvailable) + } + + k.SetStoragePaymentInfo(ctx, paymentInfo) + + return res, nil } diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index c235157c1..c64b49d53 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -34,7 +34,8 @@ type MsgPostFile struct { ProofInterval int64 `protobuf:"varint,4,opt,name=proof_interval,json=proofInterval,proto3" json:"proof_interval,omitempty"` ProofType int64 `protobuf:"varint,5,opt,name=proof_type,json=proofType,proto3" json:"proof_type,omitempty"` MaxProofs int64 `protobuf:"varint,6,opt,name=max_proofs,json=maxProofs,proto3" json:"max_proofs,omitempty"` - Note string `protobuf:"bytes,7,opt,name=note,proto3" json:"note,omitempty"` + Expires int64 `protobuf:"varint,7,opt,name=expires,proto3" json:"expires,omitempty"` + Note string `protobuf:"bytes,8,opt,name=note,proto3" json:"note,omitempty"` } func (m *MsgPostFile) Reset() { *m = MsgPostFile{} } @@ -112,6 +113,13 @@ func (m *MsgPostFile) GetMaxProofs() int64 { return 0 } +func (m *MsgPostFile) GetExpires() int64 { + if m != nil { + return m.Expires + } + return 0 +} + func (m *MsgPostFile) GetNote() string { if m != nil { return m.Note @@ -1867,83 +1875,83 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/tx.proto", fileDescriptor_2194ba0b2c3d6a97) } var fileDescriptor_2194ba0b2c3d6a97 = []byte{ - // 1201 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0xdb, 0x46, - 0x10, 0x36, 0x2d, 0xf9, 0x47, 0x63, 0xd9, 0x75, 0x18, 0x3b, 0x61, 0xe8, 0x58, 0xb6, 0x19, 0xa4, - 0x71, 0x13, 0x44, 0x42, 0x1d, 0xa0, 0xed, 0xa1, 0x17, 0xa7, 0x41, 0x00, 0x37, 0x56, 0xe1, 0xd2, - 0x2e, 0x5a, 0xb4, 0x45, 0x85, 0xb5, 0xb8, 0x96, 0x19, 0x4b, 0x5c, 0x66, 0x77, 0xe5, 0x58, 0xb9, - 0x14, 0xed, 0xb9, 0x87, 0xbe, 0x40, 0x0e, 0x3d, 0xf4, 0x5d, 0x7a, 0xcc, 0xa5, 0x40, 0x8f, 0x85, - 0xfd, 0x22, 0x05, 0x97, 0xcb, 0x25, 0x29, 0x93, 0x94, 0x1c, 0x34, 0x68, 0x6f, 0xda, 0xd9, 0x6f, - 0x67, 0xbe, 0x6f, 0x66, 0xb5, 0x33, 0x20, 0xac, 0xb6, 0x91, 0xe7, 0x7a, 0xb8, 0xd5, 0x3e, 0x46, - 0xae, 0xd7, 0x60, 0x9c, 0x50, 0xd4, 0xc1, 0x0d, 0x7e, 0x56, 0xf7, 0x29, 0xe1, 0x44, 0x5f, 0x4a, - 0x6e, 0xd7, 0xe5, 0xb6, 0xf5, 0xa7, 0x06, 0x73, 0x4d, 0xd6, 0xd9, 0x23, 0x8c, 0x3f, 0x75, 0xbb, - 0x58, 0x37, 0x60, 0xa6, 0x4d, 0x31, 0xe2, 0x84, 0x1a, 0xda, 0xba, 0xb6, 0x59, 0xb1, 0xa3, 0xa5, - 0x7e, 0x03, 0xa6, 0x7b, 0x98, 0x9e, 0x74, 0xb1, 0x31, 0xb9, 0xae, 0x6d, 0x56, 0x6d, 0xb9, 0xd2, - 0x57, 0xa0, 0x72, 0xe4, 0x76, 0x71, 0x8b, 0xb9, 0xaf, 0xb0, 0x51, 0x5a, 0xd7, 0x36, 0x4b, 0xf6, - 0x6c, 0x60, 0xd8, 0x77, 0x5f, 0x61, 0xfd, 0x2e, 0x2c, 0xf8, 0x94, 0x90, 0xa3, 0x96, 0xeb, 0x71, - 0x4c, 0x4f, 0x51, 0xd7, 0x28, 0x0b, 0xc4, 0xbc, 0xb0, 0xee, 0x48, 0xa3, 0xbe, 0x0a, 0x10, 0xc2, - 0xf8, 0xc0, 0xc7, 0xc6, 0x94, 0x80, 0x54, 0x84, 0xe5, 0x60, 0xe0, 0xe3, 0x60, 0xbb, 0x87, 0xce, - 0x5a, 0xc2, 0xc0, 0x8c, 0xe9, 0x70, 0xbb, 0x87, 0xce, 0xf6, 0x84, 0x41, 0xd7, 0xa1, 0xec, 0x11, - 0x8e, 0x8d, 0x19, 0x41, 0x58, 0xfc, 0xb6, 0x3e, 0x81, 0xeb, 0x09, 0x59, 0x36, 0x66, 0x3e, 0xf1, - 0x18, 0xd6, 0x37, 0xa0, 0xea, 0x53, 0x72, 0xea, 0x3a, 0x98, 0xb6, 0x5c, 0x9f, 0x19, 0xda, 0x7a, - 0x69, 0xb3, 0x62, 0xcf, 0x45, 0xb6, 0x1d, 0x9f, 0x59, 0xaf, 0x35, 0xa8, 0xca, 0xa3, 0xc2, 0x7f, - 0x41, 0x4a, 0x74, 0x28, 0xbb, 0x1c, 0xf7, 0x44, 0x42, 0x2a, 0xb6, 0xf8, 0x1d, 0xa4, 0xe3, 0x18, - 0xb1, 0xe3, 0x56, 0xd7, 0x65, 0x5c, 0xa4, 0xa3, 0x6a, 0xcf, 0x06, 0x86, 0x5d, 0x97, 0xf1, 0x44, - 0x0e, 0xcb, 0xa9, 0x1c, 0x2e, 0xc1, 0x14, 0x79, 0xe9, 0x61, 0x2a, 0xa4, 0x57, 0xec, 0x70, 0x11, - 0x58, 0x19, 0x47, 0x94, 0x4b, 0xc5, 0xe1, 0xc2, 0x3a, 0x80, 0xa5, 0x24, 0x3d, 0x25, 0xcd, 0x80, - 0x19, 0xd6, 0x6f, 0xb7, 0x31, 0x63, 0x82, 0xe6, 0xac, 0x1d, 0x2d, 0x75, 0x0b, 0xaa, 0x98, 0x52, - 0x42, 0x9b, 0x98, 0x31, 0xd4, 0xc1, 0x92, 0x6e, 0xca, 0x66, 0x7d, 0x0d, 0xf3, 0x4d, 0xd6, 0x79, - 0x82, 0xbb, 0x98, 0xe3, 0xb7, 0xbc, 0x08, 0x8a, 0x6e, 0x29, 0x49, 0xf7, 0x26, 0x2c, 0xa7, 0x1c, - 0x47, 0x7c, 0xad, 0x4f, 0x61, 0xb1, 0xc9, 0x3a, 0xfb, 0x38, 0x90, 0x11, 0x26, 0x7f, 0xaf, 0x20, - 0xe8, 0x02, 0x4c, 0xba, 0xbe, 0x64, 0x3e, 0xe9, 0xfa, 0x96, 0x09, 0xc6, 0xf0, 0x69, 0xe5, 0xf9, - 0x99, 0x08, 0x99, 0xd8, 0x7b, 0x86, 0x07, 0x87, 0x88, 0x15, 0x69, 0x32, 0x60, 0xe6, 0x24, 0x04, - 0xc9, 0x18, 0xd1, 0xd2, 0x5a, 0x83, 0xd5, 0x4c, 0x67, 0x2a, 0xda, 0xe7, 0xc3, 0x4c, 0x0e, 0x08, - 0x47, 0x5d, 0xe6, 0xa3, 0x76, 0x51, 0xc0, 0x20, 0x59, 0x01, 0x44, 0x86, 0x0b, 0x17, 0x96, 0x05, - 0xeb, 0x79, 0xbe, 0x54, 0xbc, 0x2f, 0x44, 0xa5, 0xb6, 0x1d, 0xe7, 0xb3, 0x2e, 0x72, 0x7b, 0x98, - 0x16, 0x04, 0xb9, 0x03, 0xf3, 0xed, 0x00, 0xd4, 0x42, 0x8e, 0x43, 0x83, 0x8b, 0x21, 0x2b, 0x2f, - 0x8c, 0xdb, 0xa1, 0x4d, 0x16, 0x28, 0xf6, 0xa7, 0x02, 0x7d, 0x29, 0x0a, 0x64, 0xe3, 0x1e, 0x39, - 0xc5, 0xff, 0x52, 0xac, 0xb0, 0x6a, 0x29, 0x97, 0x2a, 0x5c, 0x1f, 0xde, 0x6b, 0xb2, 0xce, 0x8e, - 0xe7, 0x2a, 0xf1, 0xe3, 0x5f, 0x87, 0x64, 0xfd, 0x4a, 0xa9, 0xfa, 0xe9, 0x35, 0x00, 0xae, 0x92, - 0x28, 0xfe, 0x76, 0x15, 0x3b, 0x61, 0xb1, 0x6e, 0xc1, 0xcd, 0xa1, 0xb0, 0x8a, 0x51, 0x43, 0xbc, - 0x21, 0xfb, 0xc7, 0x7d, 0xee, 0x90, 0x97, 0xde, 0x68, 0x56, 0xd6, 0x2a, 0xac, 0x64, 0x1c, 0x50, - 0xfe, 0x7e, 0xd3, 0x44, 0xe9, 0x1e, 0xf7, 0x07, 0xfb, 0xe1, 0xeb, 0x5b, 0x20, 0x70, 0x0d, 0xe6, - 0x8e, 0x08, 0x1d, 0x4a, 0x26, 0x1c, 0x11, 0x2a, 0x53, 0xa9, 0x9b, 0x30, 0xeb, 0xf4, 0x29, 0xe2, - 0x2e, 0xf1, 0xa4, 0x64, 0xb5, 0x0e, 0x2e, 0xd7, 0xe1, 0x80, 0x63, 0x26, 0xe5, 0x86, 0x8b, 0xa0, - 0x42, 0x3e, 0x1a, 0xf4, 0xb0, 0xc7, 0x5b, 0x0e, 0xf6, 0x48, 0x4f, 0x3e, 0x36, 0x55, 0x69, 0x7c, - 0x12, 0xd8, 0xe4, 0x6d, 0x88, 0x29, 0x2a, 0xf2, 0xdf, 0x0b, 0xee, 0xa2, 0x68, 0xfb, 0x9c, 0xa2, - 0x41, 0x01, 0xf7, 0x45, 0x28, 0xb5, 0x5d, 0x47, 0x72, 0x0e, 0x7e, 0x0e, 0xab, 0x29, 0x0d, 0xab, - 0x91, 0x61, 0x63, 0xef, 0x2a, 0xec, 0xef, 0x1a, 0x5c, 0x6b, 0xb2, 0xce, 0x57, 0x7e, 0x87, 0x22, - 0x07, 0xff, 0x7f, 0xf3, 0xb6, 0x02, 0xb7, 0x2e, 0xd1, 0x54, 0x22, 0x06, 0x62, 0xd3, 0xc6, 0x2f, - 0xfa, 0x98, 0xf1, 0x6d, 0xce, 0x31, 0xe3, 0x22, 0xe0, 0x53, 0x42, 0x7b, 0x6f, 0xf7, 0xd0, 0x86, - 0xdd, 0xa2, 0x94, 0xd9, 0x2d, 0xca, 0xc9, 0xe7, 0xf7, 0x05, 0x6c, 0xe4, 0x86, 0x56, 0xad, 0xe3, - 0x36, 0x54, 0xa2, 0x0e, 0x18, 0xb5, 0xc4, 0xd8, 0x90, 0x6c, 0x2c, 0x93, 0xe9, 0xc6, 0xb2, 0x04, - 0x53, 0xa2, 0x89, 0x44, 0x44, 0xc4, 0xc2, 0xfa, 0x49, 0x83, 0x4a, 0xf0, 0xa2, 0x88, 0x60, 0xc5, - 0xf2, 0x82, 0x20, 0x98, 0xca, 0x2a, 0xc9, 0x55, 0x42, 0x76, 0x29, 0x5b, 0x76, 0x39, 0x53, 0xf6, - 0x54, 0x52, 0xf6, 0x75, 0x71, 0x6b, 0x42, 0x0a, 0xaa, 0x0c, 0xbf, 0x68, 0xa2, 0x75, 0xca, 0x64, - 0xd8, 0xd8, 0x27, 0x94, 0x8f, 0x2e, 0xc1, 0x3b, 0xe3, 0xd8, 0x85, 0xdb, 0x59, 0x6c, 0xde, 0x6d, - 0x55, 0xc2, 0x38, 0xff, 0x69, 0x55, 0x42, 0x0a, 0x91, 0xcc, 0xad, 0xd7, 0xf3, 0x50, 0x6a, 0xb2, - 0x8e, 0xfe, 0x0d, 0xcc, 0xaa, 0x29, 0x74, 0xa3, 0x9e, 0x35, 0xac, 0xd6, 0x13, 0x13, 0x9d, 0xf9, - 0xc1, 0x48, 0x88, 0x4a, 0xe4, 0x77, 0x50, 0x89, 0xa7, 0x39, 0xab, 0xf0, 0x9c, 0xc0, 0x98, 0xf7, - 0x47, 0x63, 0x94, 0xf3, 0x1f, 0x00, 0x12, 0x53, 0xd3, 0x9d, 0xdc, 0x93, 0x31, 0xc8, 0x7c, 0x30, - 0x06, 0x48, 0xf9, 0xef, 0xc0, 0x7c, 0x7a, 0x46, 0x7a, 0x3f, 0xf7, 0x74, 0x0a, 0x67, 0xd6, 0xc7, - 0xc3, 0xa9, 0x40, 0xa7, 0xa0, 0x67, 0x8c, 0x4c, 0x0f, 0xc6, 0xf1, 0x22, 0xc1, 0xe6, 0xa3, 0x2b, - 0x80, 0x55, 0xdc, 0x1f, 0x61, 0x39, 0x7b, 0x78, 0x1a, 0x4b, 0x40, 0x8c, 0x37, 0x3f, 0xba, 0x1a, - 0x5e, 0x11, 0x70, 0xa0, 0x9a, 0x9a, 0x3a, 0xee, 0xe6, 0xfa, 0x49, 0xc2, 0xcc, 0x87, 0x63, 0xc1, - 0x54, 0x14, 0x1f, 0x16, 0x2f, 0x4d, 0x12, 0xf9, 0x77, 0x78, 0x18, 0x6a, 0x7e, 0x38, 0x36, 0x34, - 0x79, 0x33, 0x13, 0xa3, 0x46, 0xfe, 0xcd, 0x8c, 0x41, 0x05, 0x37, 0xf3, 0xf2, 0x44, 0xa0, 0x3f, - 0x87, 0x85, 0xa1, 0xb6, 0x7c, 0x2f, 0xf7, 0x78, 0x1a, 0x68, 0x36, 0xc6, 0x04, 0xaa, 0x58, 0x47, - 0xa0, 0x6f, 0x3b, 0x4e, 0x24, 0x31, 0x9a, 0x46, 0xf3, 0x35, 0xc5, 0xe3, 0x6c, 0x81, 0xa6, 0xcb, - 0x33, 0xaf, 0x4e, 0x60, 0x39, 0x9c, 0x4e, 0x87, 0x43, 0xe5, 0xff, 0xeb, 0x52, 0xd3, 0x6c, 0xc1, - 0xbf, 0x2e, 0x73, 0xea, 0xd5, 0x7f, 0xd6, 0xe0, 0x46, 0xce, 0x60, 0xd0, 0x28, 0x70, 0x95, 0x75, - 0xc0, 0xfc, 0xf8, 0x8a, 0x07, 0x14, 0x09, 0x1b, 0xa6, 0x65, 0xb7, 0x5e, 0xcb, 0x4f, 0x96, 0x00, - 0x98, 0xf7, 0x46, 0x00, 0x94, 0x4f, 0x06, 0xd7, 0x2e, 0x37, 0xda, 0xfb, 0xa3, 0x18, 0xc6, 0x58, - 0x73, 0x6b, 0x7c, 0x6c, 0x52, 0x88, 0x6c, 0x70, 0x6b, 0x05, 0xa7, 0x03, 0x40, 0x81, 0x90, 0x74, - 0x7f, 0x7a, 0xbc, 0xfb, 0xc7, 0x79, 0x4d, 0x7b, 0x73, 0x5e, 0xd3, 0xfe, 0x3e, 0xaf, 0x69, 0xbf, - 0x5e, 0xd4, 0x26, 0xde, 0x5c, 0xd4, 0x26, 0xfe, 0xba, 0xa8, 0x4d, 0x7c, 0xbb, 0xd5, 0x71, 0xf9, - 0x71, 0xff, 0xb0, 0xde, 0x26, 0xbd, 0xc6, 0x73, 0xd4, 0x3e, 0x41, 0xdd, 0x5d, 0x74, 0xc8, 0x1a, - 0xa1, 0xdf, 0x87, 0xe1, 0x67, 0x98, 0xb3, 0xf8, 0x43, 0xcc, 0xc0, 0xc7, 0xec, 0x70, 0x5a, 0x7c, - 0x8c, 0x79, 0xf4, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0xc6, 0xc2, 0x79, 0xad, 0x11, 0x00, - 0x00, + // 1213 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x41, 0x73, 0xdb, 0x44, + 0x14, 0xae, 0x62, 0x27, 0xb1, 0x5f, 0x9d, 0x90, 0xaa, 0x49, 0xab, 0x2a, 0x8d, 0x93, 0xa8, 0x53, + 0x1a, 0xda, 0xa9, 0x3d, 0xa4, 0x33, 0xc0, 0x81, 0x4b, 0x4a, 0xa7, 0x33, 0xa1, 0x31, 0x13, 0x94, + 0x30, 0x30, 0xc0, 0xe0, 0xd9, 0x58, 0x1b, 0x47, 0x8d, 0xad, 0x55, 0x77, 0xd7, 0x69, 0xdc, 0x0b, + 0x03, 0x67, 0x0e, 0xfc, 0x81, 0x1e, 0x38, 0xf0, 0x5f, 0x38, 0xf6, 0xc8, 0x91, 0x49, 0x7e, 0x00, + 0x7f, 0x81, 0xd1, 0x6a, 0xb5, 0x92, 0x1c, 0x49, 0x76, 0x3a, 0x74, 0xe0, 0xe6, 0x7d, 0xfb, 0xed, + 0xfb, 0xbe, 0xf7, 0xde, 0x7a, 0xdf, 0x1b, 0xc1, 0x4a, 0x07, 0x79, 0xae, 0x87, 0xdb, 0x9d, 0x23, + 0xe4, 0x7a, 0x4d, 0xc6, 0x09, 0x45, 0x5d, 0xdc, 0xe4, 0xa7, 0x0d, 0x9f, 0x12, 0x4e, 0xf4, 0xc5, + 0xe4, 0x76, 0x43, 0x6e, 0x5b, 0x7f, 0x6b, 0x70, 0xb5, 0xc5, 0xba, 0xbb, 0x84, 0xf1, 0xa7, 0x6e, + 0x0f, 0xeb, 0x06, 0xcc, 0x76, 0x28, 0x46, 0x9c, 0x50, 0x43, 0x5b, 0xd3, 0x36, 0xaa, 0x76, 0xb4, + 0xd4, 0x6f, 0xc0, 0x4c, 0x1f, 0xd3, 0xe3, 0x1e, 0x36, 0xa6, 0xd6, 0xb4, 0x8d, 0x9a, 0x2d, 0x57, + 0xfa, 0x32, 0x54, 0x0f, 0xdd, 0x1e, 0x6e, 0x33, 0xf7, 0x15, 0x36, 0x4a, 0x6b, 0xda, 0x46, 0xc9, + 0xae, 0x04, 0x86, 0x3d, 0xf7, 0x15, 0xd6, 0xef, 0xc2, 0xbc, 0x4f, 0x09, 0x39, 0x6c, 0xbb, 0x1e, + 0xc7, 0xf4, 0x04, 0xf5, 0x8c, 0xb2, 0x40, 0xcc, 0x09, 0xeb, 0xb6, 0x34, 0xea, 0x2b, 0x00, 0x21, + 0x8c, 0x0f, 0x7d, 0x6c, 0x4c, 0x0b, 0x48, 0x55, 0x58, 0xf6, 0x87, 0x3e, 0x0e, 0xb6, 0xfb, 0xe8, + 0xb4, 0x2d, 0x0c, 0xcc, 0x98, 0x09, 0xb7, 0xfb, 0xe8, 0x74, 0x57, 0x18, 0x02, 0xcd, 0xf8, 0xd4, + 0x77, 0x29, 0x66, 0xc6, 0xac, 0xd8, 0x8b, 0x96, 0xba, 0x0e, 0x65, 0x8f, 0x70, 0x6c, 0x54, 0x44, + 0x28, 0xe2, 0xb7, 0xf5, 0x09, 0x5c, 0x4f, 0x04, 0x6c, 0x63, 0xe6, 0x13, 0x8f, 0x61, 0x7d, 0x1d, + 0x6a, 0x3e, 0x25, 0x27, 0xae, 0x83, 0x69, 0xdb, 0xf5, 0x99, 0xa1, 0xad, 0x95, 0x36, 0xaa, 0xf6, + 0xd5, 0xc8, 0xb6, 0xed, 0x33, 0xeb, 0xb5, 0x06, 0x35, 0x79, 0x54, 0x30, 0x17, 0x24, 0x4b, 0x87, + 0xb2, 0xcb, 0x71, 0x5f, 0xa4, 0xaa, 0x6a, 0x8b, 0xdf, 0x41, 0xa2, 0x8e, 0x10, 0x3b, 0x6a, 0xf7, + 0x5c, 0xc6, 0x45, 0xa2, 0x6a, 0x76, 0x25, 0x30, 0xec, 0xb8, 0x8c, 0x27, 0xb2, 0x5b, 0x4e, 0x65, + 0x77, 0x11, 0xa6, 0xc9, 0x4b, 0x0f, 0x53, 0x91, 0x94, 0xaa, 0x1d, 0x2e, 0x02, 0x2b, 0xe3, 0x88, + 0x72, 0x99, 0x8b, 0x70, 0x61, 0xed, 0xc3, 0x62, 0x52, 0x9e, 0x0a, 0xcd, 0x80, 0x59, 0x36, 0xe8, + 0x74, 0x30, 0x63, 0x42, 0x66, 0xc5, 0x8e, 0x96, 0xba, 0x05, 0x35, 0x4c, 0x29, 0xa1, 0x2d, 0xcc, + 0x18, 0xea, 0x62, 0x29, 0x37, 0x65, 0xb3, 0xbe, 0x86, 0xb9, 0x16, 0xeb, 0x3e, 0xc1, 0x3d, 0xcc, + 0xf1, 0x5b, 0x5e, 0x11, 0x25, 0xb7, 0x94, 0x94, 0x7b, 0x13, 0x96, 0x52, 0x8e, 0x23, 0xbd, 0xd6, + 0xa7, 0xb0, 0xd0, 0x62, 0xdd, 0x3d, 0x1c, 0x84, 0x11, 0x26, 0x7f, 0xb7, 0x80, 0x74, 0x1e, 0xa6, + 0x5c, 0x5f, 0x2a, 0x9f, 0x72, 0x7d, 0xcb, 0x04, 0x63, 0xf4, 0xb4, 0xf2, 0xfc, 0x4c, 0x50, 0x26, + 0xf6, 0x9e, 0xe1, 0xe1, 0x01, 0x62, 0x45, 0x31, 0x19, 0x30, 0x7b, 0x1c, 0x82, 0x24, 0x47, 0xb4, + 0xb4, 0x56, 0x61, 0x25, 0xd3, 0x99, 0x62, 0xfb, 0x7c, 0x54, 0xc9, 0x3e, 0xe1, 0xa8, 0xc7, 0x7c, + 0xd4, 0x29, 0x22, 0x0c, 0x92, 0x15, 0x40, 0x24, 0x5d, 0xb8, 0xb0, 0x2c, 0x58, 0xcb, 0xf3, 0xa5, + 0xf8, 0xbe, 0x10, 0x95, 0xda, 0x72, 0x9c, 0xcf, 0x7a, 0xc8, 0xed, 0x63, 0x5a, 0x40, 0x72, 0x07, + 0xe6, 0x3a, 0x01, 0xa8, 0x8d, 0x1c, 0x87, 0x06, 0x17, 0x43, 0x56, 0x5e, 0x18, 0xb7, 0x42, 0x9b, + 0x2c, 0x50, 0xec, 0x4f, 0x11, 0x7d, 0x29, 0x0a, 0x64, 0xe3, 0x3e, 0x39, 0xc1, 0xff, 0x12, 0x57, + 0x58, 0xb5, 0x94, 0x4b, 0x45, 0x37, 0x80, 0xf7, 0x5a, 0xac, 0xbb, 0xed, 0xb9, 0x2a, 0xf8, 0xc9, + 0xaf, 0x43, 0xb2, 0x7e, 0xa5, 0x54, 0xfd, 0xf4, 0x3a, 0x00, 0x57, 0x49, 0x14, 0x7f, 0xbb, 0xaa, + 0x9d, 0xb0, 0x58, 0xb7, 0xe0, 0xe6, 0x08, 0xad, 0x52, 0xd4, 0x14, 0x6f, 0xc8, 0xde, 0xd1, 0x80, + 0x3b, 0xe4, 0xa5, 0x37, 0x5e, 0x95, 0xb5, 0x02, 0xcb, 0x19, 0x07, 0x94, 0xbf, 0xdf, 0x34, 0x51, + 0xba, 0xc7, 0x83, 0xe1, 0x5e, 0xf8, 0x2e, 0x17, 0x04, 0xb8, 0x0a, 0x57, 0x0f, 0x09, 0x1d, 0x49, + 0x26, 0x1c, 0x12, 0x2a, 0x53, 0xa9, 0x9b, 0x50, 0x71, 0x06, 0x14, 0x71, 0x97, 0x78, 0x32, 0x64, + 0xb5, 0x0e, 0x2e, 0xd7, 0xc1, 0x90, 0x63, 0x26, 0xc3, 0x0d, 0x17, 0x41, 0x85, 0x7c, 0x34, 0xec, + 0x63, 0x8f, 0xb7, 0x1d, 0xec, 0x91, 0xbe, 0x7c, 0x6c, 0x6a, 0xd2, 0xf8, 0x24, 0xb0, 0xc9, 0xdb, + 0x10, 0x4b, 0x54, 0xe2, 0xbf, 0x17, 0xda, 0x45, 0xd1, 0xf6, 0x38, 0x45, 0xc3, 0x02, 0xed, 0x0b, + 0x50, 0xea, 0xb8, 0x8e, 0xd4, 0x1c, 0xfc, 0x1c, 0x8d, 0xa6, 0x34, 0x1a, 0x8d, 0xa4, 0x8d, 0xbd, + 0x2b, 0xda, 0xdf, 0x35, 0xb8, 0xd6, 0x62, 0xdd, 0xaf, 0xfc, 0x2e, 0x45, 0x0e, 0xfe, 0xff, 0xe6, + 0x6d, 0x19, 0x6e, 0x5d, 0x90, 0xa9, 0x82, 0x18, 0x8a, 0x4d, 0x1b, 0xbf, 0x18, 0x60, 0xc6, 0xb7, + 0x38, 0xc7, 0x8c, 0x0b, 0xc2, 0xa7, 0x84, 0xf6, 0xdf, 0xee, 0xa1, 0x0d, 0xbb, 0x45, 0x29, 0xb3, + 0x5b, 0x94, 0x93, 0xcf, 0xef, 0x0b, 0x58, 0xcf, 0xa5, 0x56, 0xad, 0xe3, 0x36, 0x54, 0xa3, 0x0e, + 0x18, 0xb5, 0xc4, 0xd8, 0x90, 0x6c, 0x2c, 0x53, 0xe9, 0xc6, 0xb2, 0x08, 0xd3, 0xa2, 0x89, 0x44, + 0x42, 0xc4, 0xc2, 0xfa, 0x49, 0x83, 0x6a, 0xf0, 0xa2, 0x08, 0xb2, 0xe2, 0xf0, 0x02, 0x12, 0x4c, + 0x65, 0x95, 0xe4, 0x2a, 0x11, 0x76, 0x29, 0x3b, 0xec, 0x72, 0x66, 0xd8, 0xd3, 0xc9, 0xb0, 0xaf, + 0x8b, 0x5b, 0x13, 0x4a, 0x50, 0x65, 0xf8, 0x45, 0x13, 0xad, 0x53, 0x26, 0xc3, 0xc6, 0x3e, 0xa1, + 0x7c, 0x7c, 0x09, 0xde, 0x99, 0xc6, 0x1e, 0xdc, 0xce, 0x52, 0xf3, 0x6e, 0xab, 0x12, 0xf2, 0xfc, + 0xa7, 0x55, 0x09, 0x25, 0x44, 0x61, 0x6e, 0xbe, 0x9e, 0x83, 0x52, 0x8b, 0x75, 0xf5, 0x6f, 0xa0, + 0xa2, 0xe6, 0xd3, 0xf5, 0x46, 0xd6, 0x18, 0xdb, 0x48, 0x4c, 0x74, 0xe6, 0x07, 0x63, 0x21, 0x2a, + 0x91, 0xdf, 0x41, 0x35, 0x9e, 0xe6, 0xac, 0xc2, 0x73, 0x02, 0x63, 0xde, 0x1f, 0x8f, 0x51, 0xce, + 0x7f, 0x00, 0x48, 0x4c, 0x4d, 0x77, 0x72, 0x4f, 0xc6, 0x20, 0xf3, 0xc1, 0x04, 0x20, 0xe5, 0xbf, + 0x0b, 0x73, 0xe9, 0x19, 0xe9, 0xfd, 0xdc, 0xd3, 0x29, 0x9c, 0xd9, 0x98, 0x0c, 0xa7, 0x88, 0x4e, + 0x40, 0xcf, 0x18, 0x99, 0x1e, 0x4c, 0xe2, 0x45, 0x82, 0xcd, 0x47, 0x97, 0x00, 0x2b, 0xde, 0x1f, + 0x61, 0x29, 0x7b, 0x78, 0x9a, 0x28, 0x80, 0x18, 0x6f, 0x7e, 0x74, 0x39, 0xbc, 0x12, 0xe0, 0x40, + 0x2d, 0x35, 0x75, 0xdc, 0xcd, 0xf5, 0x93, 0x84, 0x99, 0x0f, 0x27, 0x82, 0x29, 0x16, 0x1f, 0x16, + 0x2e, 0x4c, 0x12, 0xf9, 0x77, 0x78, 0x14, 0x6a, 0x7e, 0x38, 0x31, 0x34, 0x79, 0x33, 0x13, 0xa3, + 0x46, 0xfe, 0xcd, 0x8c, 0x41, 0x05, 0x37, 0xf3, 0xe2, 0x44, 0xa0, 0x3f, 0x87, 0xf9, 0x91, 0xb6, + 0x7c, 0x2f, 0xf7, 0x78, 0x1a, 0x68, 0x36, 0x27, 0x04, 0x2a, 0xae, 0x43, 0xd0, 0xb7, 0x1c, 0x27, + 0x0a, 0x31, 0x9a, 0x46, 0xf3, 0x63, 0x8a, 0xc7, 0xd9, 0x82, 0x98, 0x2e, 0xce, 0xbc, 0x3a, 0x81, + 0xa5, 0x70, 0x3a, 0x1d, 0xa5, 0xca, 0xff, 0xd7, 0xa5, 0xa6, 0xd9, 0x82, 0x7f, 0x5d, 0xe6, 0xd4, + 0xab, 0xff, 0xac, 0xc1, 0x8d, 0x9c, 0xc1, 0xa0, 0x59, 0xe0, 0x2a, 0xeb, 0x80, 0xf9, 0xf1, 0x25, + 0x0f, 0x28, 0x11, 0x36, 0xcc, 0xc8, 0x6e, 0xbd, 0x9a, 0x9f, 0x2c, 0x01, 0x30, 0xef, 0x8d, 0x01, + 0x28, 0x9f, 0x0c, 0xae, 0x5d, 0x6c, 0xb4, 0xf7, 0xc7, 0x29, 0x8c, 0xb1, 0xe6, 0xe6, 0xe4, 0xd8, + 0x64, 0x20, 0xb2, 0xc1, 0xad, 0x16, 0x9c, 0x0e, 0x00, 0x05, 0x81, 0xa4, 0xfb, 0xd3, 0xe3, 0x9d, + 0x3f, 0xce, 0xea, 0xda, 0x9b, 0xb3, 0xba, 0xf6, 0xd7, 0x59, 0x5d, 0xfb, 0xf5, 0xbc, 0x7e, 0xe5, + 0xcd, 0x79, 0xfd, 0xca, 0x9f, 0xe7, 0xf5, 0x2b, 0xdf, 0x6e, 0x76, 0x5d, 0x7e, 0x34, 0x38, 0x68, + 0x74, 0x48, 0xbf, 0xf9, 0x1c, 0x75, 0x8e, 0x51, 0x6f, 0x07, 0x1d, 0xb0, 0x66, 0xe8, 0xf7, 0x61, + 0xf8, 0x81, 0xe6, 0x34, 0xfe, 0x44, 0x33, 0xf4, 0x31, 0x3b, 0x98, 0x11, 0x9f, 0x69, 0x1e, 0xfd, + 0x13, 0x00, 0x00, 0xff, 0xff, 0x3d, 0x30, 0xe1, 0x81, 0xc7, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2591,7 +2599,12 @@ func (m *MsgPostFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.Note) i = encodeVarintTx(dAtA, i, uint64(len(m.Note))) i-- - dAtA[i] = 0x3a + dAtA[i] = 0x42 + } + if m.Expires != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Expires)) + i-- + dAtA[i] = 0x38 } if m.MaxProofs != 0 { i = encodeVarintTx(dAtA, i, uint64(m.MaxProofs)) @@ -3884,6 +3897,9 @@ func (m *MsgPostFile) Size() (n int) { if m.MaxProofs != 0 { n += 1 + sovTx(uint64(m.MaxProofs)) } + if m.Expires != 0 { + n += 1 + sovTx(uint64(m.Expires)) + } l = len(m.Note) if l > 0 { n += 1 + l + sovTx(uint64(l)) @@ -4623,6 +4639,25 @@ func (m *MsgPostFile) Unmarshal(dAtA []byte) error { } } case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Expires", wireType) + } + m.Expires = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Expires |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Note", wireType) } From cbe1646e62d2c23d87a01f83359d6e876b81892b Mon Sep 17 00:00:00 2001 From: marston Date: Tue, 24 Oct 2023 18:30:09 -0400 Subject: [PATCH 030/256] query files that aren't full & proofs --- go.mod | 4 +- go.sum | 6 +- proto/canine_chain/storage/query.proto | 43 +- scripts/test-sequoia.sh | 59 + x/storage/client/cli/tx.go | 1 + x/storage/client/cli/tx_post_file.go | 182 ++ x/storage/keeper/files.go | 16 +- x/storage/keeper/grpc_query_active_deals.go | 83 + ...st_contract.go => msg_server_post_file.go} | 6 + x/storage/keeper/rewards.go | 4 +- x/storage/types/file.go | 9 + x/storage/types/key_contracts.go | 23 - x/storage/types/key_files.go | 7 + x/storage/types/message_post_file.go | 2 +- x/storage/types/query.pb.go | 1638 +++++++++++++++-- x/storage/types/query.pb.gw.go | 338 +++- x/storage/utils/trees.go | 61 + 17 files changed, 2252 insertions(+), 230 deletions(-) create mode 100755 scripts/test-sequoia.sh create mode 100644 x/storage/client/cli/tx_post_file.go rename x/storage/keeper/{msg_server_post_contract.go => msg_server_post_file.go} (92%) delete mode 100644 x/storage/types/key_contracts.go create mode 100644 x/storage/utils/trees.go diff --git a/go.mod b/go.mod index cff102d7d..9a129728d 100644 --- a/go.mod +++ b/go.mod @@ -113,6 +113,7 @@ require ( github.com/improbable-eng/grpc-web v0.14.1 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect + github.com/josharian/intern v1.0.0 // indirect github.com/klauspost/compress v1.16.3 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect @@ -120,6 +121,7 @@ require ( github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/linxGnu/grocksdb v1.7.10 // indirect github.com/magiconair/properties v1.8.6 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect @@ -178,7 +180,7 @@ replace ( github.com/tendermint/tendermint => github.com/cometbft/cometbft v0.34.27 - github.com/wealdtech/go-merkletree => github.com/TheMarstonConnell/go-merkletree v0.0.0-20230124030923-93fb10e701d7 + github.com/wealdtech/go-merkletree => github.com/TheMarstonConnell/go-merkletree v0.0.0-20230328183338-b5d590ab1aaf // use grpc compatible with cosmos-flavored protobufs google.golang.org/grpc => google.golang.org/grpc v1.33.2 diff --git a/go.sum b/go.sum index 5b2db56b6..899ea7937 100644 --- a/go.sum +++ b/go.sum @@ -97,8 +97,8 @@ github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjK github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/TheMarstonConnell/go-merkletree v0.0.0-20230124030923-93fb10e701d7 h1:5HSad+OSV81UBODXzvt+CVUzmxPMzC/OFoq2cIqj3LE= -github.com/TheMarstonConnell/go-merkletree v0.0.0-20230124030923-93fb10e701d7/go.mod h1:SL9h+IpE1SI3K+In4dOtjHu9KZIluuRjdQxYHJQGdUI= +github.com/TheMarstonConnell/go-merkletree v0.0.0-20230328183338-b5d590ab1aaf h1:K8hLTtjPxDCIjb/YNncNWHTWDpubfPFbXWGE8vAQC4g= +github.com/TheMarstonConnell/go-merkletree v0.0.0-20230328183338-b5d590ab1aaf/go.mod h1:Dpt5BLOsKmHAA6gAs3lyo9EKaLq2glBsEoHj3RqfN+Q= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= @@ -685,6 +685,7 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= @@ -791,6 +792,7 @@ github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK github.com/mailgun/raymond/v2 v2.0.46/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index 049fe4c29..336525598 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -23,7 +23,7 @@ service Query { // Queries a File by index. rpc File(QueryFileRequest) returns (QueryFileResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/files/{merkle}"; + "/jackal-dao/canine-chain/storage/files/{merkle}/{owner}/{start}"; } // Queries a list of File items. @@ -33,6 +33,20 @@ service Query { "/jackal-dao/canine-chain/storage/files"; } + // Queries a list of File items. + rpc OpenFiles(QueryOpenFilesRequest) + returns (QueryAllFilesResponse) { + option (google.api.http).get = + "/jackal-dao/canine-chain/storage/open_files/{provider_address}"; + } + + // Queries a list of File items. + rpc Proof(QueryProofRequest) + returns (QueryProofResponse) { + option (google.api.http).get = + "/jackal-dao/canine-chain/storage/proof/{provider_address}/{merkle}/{owner}/{start}"; + } + // Queries a Providers by index. rpc Providers(QueryProviderRequest) returns (QueryProviderResponse) { option (google.api.http).get = @@ -148,6 +162,28 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } +message QueryProofRequest { + string provider_address = 1; + bytes merkle = 2; + string owner = 3; + int64 start = 4; +} + +message QueryProofResponse { + FileProof proof = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryProofsByAddressRequest { + string provider_address = 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; + +} + +message QueryProofsByAddressResponse { + repeated FileProof proof = 1 [ (gogoproto.nullable) = false ]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; + +} message QueryFileRequest { bytes merkle = 1; @@ -163,6 +199,11 @@ message QueryAllFilesRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; } +message QueryOpenFilesRequest { + string provider_address= 1; + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + message QueryAllFilesResponse { repeated UnifiedFile files = 1 [ (gogoproto.nullable) = false ]; cosmos.base.query.v1beta1.PageResponse pagination = 2; diff --git a/scripts/test-sequoia.sh b/scripts/test-sequoia.sh new file mode 100755 index 000000000..ebd93f76f --- /dev/null +++ b/scripts/test-sequoia.sh @@ -0,0 +1,59 @@ +export JKL_HOME="$HOME/canine-test" +export PROV_HOME="$HOME/canine-prov-test" + +rm -rf $JKL_HOME +rm -rf $PROV_HOME + +export CHAIN="canine-1" +export ALIAS="marston" +export MONIKER="jackal" + +canined init $MONIKER --home=$JKL_HOME --chain-id=$CHAIN +canined config chain-id $CHAIN --home=$JKL_HOME +canined config keyring-backend test --home=$JKL_HOME + +sed -i.bak -e 's/chain-id = ""/chain-id = "canine-1"/' $JKL_HOME/config/client.toml + +echo "video pluck level diagram maximum grant make there clog tray enrich book hawk confirm spot you book vendor ensure theory sure jewel sort basket" | canined keys add $ALIAS --keyring-backend=test --recover --home=$JKL_HOME +echo "flock stereo dignity lawsuit mouse page faith exact mountain clinic hazard parent arrest face couch asset jump feed benefit upper hair scrap loud spirit" | canined keys add charlie --keyring-backend=test --recover --home=$JKL_HOME +echo "brief enhance flee chest rabbit matter chaos clever lady enable luggage arrange hint quarter change float embark canoe chalk husband legal dignity music web" | canined keys add danny --keyring-backend=test --recover --home=$JKL_HOME + +canined add-genesis-account $(canined keys show -a $ALIAS --keyring-backend=test --home=$JKL_HOME) 500000000ujkl --home=$JKL_HOME +canined add-genesis-account $(canined keys show -a charlie --keyring-backend=test --home=$JKL_HOME) 500000000ujkl --home=$JKL_HOME +canined add-genesis-account $(canined keys show -a danny --keyring-backend=test --home=$JKL_HOME) 500000000ujkl --home=$JKL_HOME +canined add-genesis-account jkl13327d3ntsy849s622y4ft05ynwkfyqss3v4pzg 500000000000000ujkl --home=$JKL_HOME + +canined gentx $ALIAS 200000000ujkl \ +--chain-id=$CHAIN \ +--moniker="$MONIKER" \ +--commission-max-change-rate=0.01 \ +--commission-max-rate=0.20 \ +--commission-rate=0.05 \ +--fees=2500ujkl \ +--from=$ALIAS \ +--keyring-backend=test \ +--home=$JKL_HOME + +canined collect-gentxs --home=$JKL_HOME + +sed -i.bak -e "s/stake/ujkl/" $JKL_HOME/config/genesis.json +sed -i.bak -e "s/cosmos1arsaayyj5tash86mwqudmcs2fd5jt5zgp07gl8/jkl1arsaayyj5tash86mwqudmcs2fd5jt5zgc3sexc/" $JKL_HOME/config/genesis.json +sed -i.bak -e "s/\"proof_window\": \"50\"/\"proof_window\": \"10\"/" $JKL_HOME/config/genesis.json +sed -i.bak -e "s/\"chunk_size\": \"1024\"/\"chunk_size\": \"10240\"/" $JKL_HOME/config/genesis.json +sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025ujkl\"/" $JKL_HOME/config/app.toml +sed -i.bak -e 's/enable = false/enable=true/' $JKL_HOME/config/app.toml +sed -i.bak -e 's/enabled-unsafe-cors = false/enabled-unsafe-cors = true/' $JKL_HOME/config/app.toml +sed -i.bak -e 's/cors_allowed_origins = \[\]/cors_allowed_origins = \["*"\]/' $JKL_HOME/config/config.toml +sed -i.bak -e 's/chain-id = ""/chain-id = "canine-1"/' $JKL_HOME/config/client.toml +screen -d -m canined start --home=$JKL_HOME --log_level info +sleep 20 + +sequoia init --home=$PROV_HOME + +yq -i '.chunk_size=10240' $PROV_HOME/config.yaml +yq -i '.chain_config.rpc_addr="http://localhost:26657"' $PROV_HOME/config.yaml +yq -i '.chain_config.grpc_addr="localhost:26659"' $PROV_HOME/config.yaml +yq -i '.domain="localhost:3333"' $PROV_HOME/config.yaml +yq -i '.data_directory="'$PROV_HOME'/data"' $PROV_HOME/config.yaml + +sequoia start --home=$PROV_HOME diff --git a/x/storage/client/cli/tx.go b/x/storage/client/cli/tx.go index 603905450..24cabebb5 100644 --- a/x/storage/client/cli/tx.go +++ b/x/storage/client/cli/tx.go @@ -26,6 +26,7 @@ func GetTxCmd() *cobra.Command { cmd.AddCommand(CmdCancelContract()) cmd.AddCommand(CmdBuyStorage()) cmd.AddCommand(CmdUpgradeStorage()) + cmd.AddCommand(CmdPostFile()) return cmd } diff --git a/x/storage/client/cli/tx_post_file.go b/x/storage/client/cli/tx_post_file.go new file mode 100644 index 000000000..79fbdb865 --- /dev/null +++ b/x/storage/client/cli/tx_post_file.go @@ -0,0 +1,182 @@ +package cli + +import ( + "bufio" + "encoding/hex" + "fmt" + "os" + "strconv" + + "github.com/cosmos/cosmos-sdk/client/input" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/jackalLabs/canine-chain/v3/x/storage/utils" + "github.com/spf13/pflag" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/jackalLabs/canine-chain/v3/x/storage/types" + "github.com/spf13/cobra" +) + +var _ = strconv.Itoa(0) + +func prepareFactory(clientCtx client.Context, txf tx.Factory) (tx.Factory, error) { + from := clientCtx.GetFromAddress() + + if err := txf.AccountRetriever().EnsureExists(clientCtx, from); err != nil { + return txf, err + } + + initNum, initSeq := txf.AccountNumber(), txf.Sequence() + if initNum == 0 || initSeq == 0 { + num, seq, err := txf.AccountRetriever().GetAccountNumberSequence(clientCtx, from) + if err != nil { + return txf, err + } + + if initNum == 0 { + txf = txf.WithAccountNumber(num) + } + + if initSeq == 0 { + txf = txf.WithSequence(seq) + } + } + + return txf, nil +} + +// GenerateOrBroadcastTxWithFactory is some dumb wrapper I had to make cause the sdk assumes I don't want to programmatically handle the +// response but instead print it out like a doofus +func GenerateOrBroadcastTx(clientCtx client.Context, flags *pflag.FlagSet, msgs ...sdk.Msg) (*sdk.TxResponse, error) { + txf := tx.NewFactoryCLI(clientCtx, flags) + + for _, msg := range msgs { + if err := msg.ValidateBasic(); err != nil { + return nil, err + } + } + + txf, err := prepareFactory(clientCtx, txf) + if err != nil { + return nil, err + } + + if txf.SimulateAndExecute() || clientCtx.Simulate { + _, adjusted, err := tx.CalculateGas(clientCtx, txf, msgs...) + if err != nil { + return nil, err + } + + txf = txf.WithGas(adjusted) + _, _ = fmt.Fprintf(os.Stderr, "%s\n", tx.GasEstimateResponse{GasEstimate: txf.Gas()}) + } + + if clientCtx.Simulate { + return nil, err + } + + txn, err := tx.BuildUnsignedTx(txf, msgs...) + if err != nil { + return nil, err + } + + if !clientCtx.SkipConfirm { + out, err := clientCtx.TxConfig.TxJSONEncoder()(txn.GetTx()) + if err != nil { + return nil, err + } + + _, _ = fmt.Fprintf(os.Stderr, "%s\n\n", out) + + buf := bufio.NewReader(os.Stdin) + ok, err := input.GetConfirmation("confirm transaction before signing and broadcasting", buf, os.Stderr) + + if err != nil || !ok { + _, _ = fmt.Fprintf(os.Stderr, "%s\n", "cancelled transaction") + return nil, err + } + } + + txn.SetFeeGranter(clientCtx.GetFeeGranterAddress()) + err = tx.Sign(txf, clientCtx.GetFromName(), txn, true) + if err != nil { + return nil, err + } + + txBytes, err := clientCtx.TxConfig.TxEncoder()(txn.GetTx()) + if err != nil { + return nil, err + } + + // broadcast to a Tendermint node + return clientCtx.BroadcastTx(txBytes) +} + +func CmdPostFile() *cobra.Command { + cmd := &cobra.Command{ + Use: "post [file-path]", + Short: "Post file to chain", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + filePath := args[0] + + file, err := os.OpenFile(filePath, os.O_RDONLY, os.ModePerm) + if err != nil { + return err + } + + root, _, _, size, err := utils.BuildTree(file, 1024) + if err != nil { + return err + } + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgPostFile( + clientCtx.GetFromAddress().String(), + root, + int64(size), + 1800, + 0, + 3, + "Uploaded with canined", + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + + res, err := GenerateOrBroadcastTx(clientCtx, cmd.Flags(), msg) + if err != nil { + return err + } + + var postRes types.MsgPostFileResponse + data, err := hex.DecodeString(res.Data) + if err != nil { + return err + } + + var txMsgData sdk.TxMsgData + + err = clientCtx.Codec.Unmarshal(data, &txMsgData) + if err != nil { + return err + } + + err = postRes.Unmarshal(txMsgData.Data[0].Data) + if err != nil { + return err + } + + ips := postRes.ProviderIps + fmt.Println(ips) + + return nil + }, + } + + return cmd +} diff --git a/x/storage/keeper/files.go b/x/storage/keeper/files.go index 5f0efff5f..e0cab2ea5 100644 --- a/x/storage/keeper/files.go +++ b/x/storage/keeper/files.go @@ -2,6 +2,7 @@ package keeper import ( "github.com/cosmos/cosmos-sdk/store/prefix" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) @@ -117,14 +118,23 @@ func (k Keeper) GetAllFileByMerkle(ctx sdk.Context) (list []types.UnifiedFile) { } // IterateFilesByMerkle iterates through every file -func (k Keeper) IterateFilesByMerkle(ctx sdk.Context, fn func(key []byte, val []byte)) { +func (k Keeper) IterateFilesByMerkle(ctx sdk.Context, reverse bool, fn func(key []byte, val []byte) bool) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.FilePrimaryKeyPrefix)) - iterator := sdk.KVStorePrefixIterator(store, []byte{}) + + var iterator storetypes.Iterator + if reverse { + iterator = sdk.KVStoreReversePrefixIterator(store, []byte{}) + } else { + iterator = sdk.KVStorePrefixIterator(store, []byte{}) + } defer iterator.Close() for ; iterator.Valid(); iterator.Next() { - fn(iterator.Key(), iterator.Value()) + b := fn(iterator.Key(), iterator.Value()) + if b { + return + } } } diff --git a/x/storage/keeper/grpc_query_active_deals.go b/x/storage/keeper/grpc_query_active_deals.go index 8a27b7787..e64b0692a 100644 --- a/x/storage/keeper/grpc_query_active_deals.go +++ b/x/storage/keeper/grpc_query_active_deals.go @@ -38,6 +38,42 @@ func (k Keeper) FilesAll(c context.Context, req *types.QueryAllFilesRequest) (*t return &types.QueryAllFilesResponse{Files: activeDealss, Pagination: pageRes}, nil } +func (k Keeper) OpenFiles(c context.Context, req *types.QueryOpenFilesRequest) (*types.QueryAllFilesResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var files []types.UnifiedFile + ctx := sdk.UnwrapSDKContext(c) + + var i uint64 + k.IterateFilesByMerkle(ctx, req.Pagination.Reverse, func(key []byte, val []byte) bool { + if i >= req.Pagination.Limit { + return true + } + + var file types.UnifiedFile + if err := k.cdc.Unmarshal(val, &file); err != nil { + return false + } + + if len(file.Proofs) < int(file.MaxProofs) { + files = append(files, file) + } + + i++ + + return false + }) + + qpr := query.PageResponse{ + NextKey: nil, + Total: i, + } + + return &types.QueryAllFilesResponse{Files: files, Pagination: &qpr}, nil +} + func (k Keeper) File(c context.Context, req *types.QueryFileRequest) (*types.QueryFileResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") @@ -56,3 +92,50 @@ func (k Keeper) File(c context.Context, req *types.QueryFileRequest) (*types.Que return &types.QueryFileResponse{File: val}, nil } + +func (k Keeper) Proof(c context.Context, req *types.QueryProofRequest) (*types.QueryProofResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + val, found := k.GetProof( + ctx, + req.ProviderAddress, + req.Merkle, + req.Owner, + req.Start, + ) + if !found { + return nil, status.Error(codes.NotFound, "not found") + } + + return &types.QueryProofResponse{Proof: val}, nil +} + +func (k Keeper) ProofsAll(c context.Context, req *types.QueryProofsByAddressRequest) (*types.QueryProofsByAddressResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var proofs []types.FileProof + ctx := sdk.UnwrapSDKContext(c) + + store := ctx.KVStore(k.storeKey) + proofStore := prefix.NewStore(store, types.ProofPrefix(req.ProviderAddress)) + + pageRes, err := query.Paginate(proofStore, req.Pagination, func(key []byte, value []byte) error { + var proof types.FileProof + if err := k.cdc.Unmarshal(value, &proof); err != nil { + return err + } + + proofs = append(proofs, proof) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryProofsByAddressResponse{Proof: proofs, Pagination: pageRes}, nil +} diff --git a/x/storage/keeper/msg_server_post_contract.go b/x/storage/keeper/msg_server_post_file.go similarity index 92% rename from x/storage/keeper/msg_server_post_contract.go rename to x/storage/keeper/msg_server_post_file.go index 11110f502..4cbed37a1 100644 --- a/x/storage/keeper/msg_server_post_contract.go +++ b/x/storage/keeper/msg_server_post_file.go @@ -2,6 +2,7 @@ package keeper import ( "context" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" sdk "github.com/cosmos/cosmos-sdk/types" @@ -11,6 +12,11 @@ import ( func (k msgServer) PostFile(goCtx context.Context, msg *types.MsgPostFile) (*types.MsgPostFileResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) + window := k.GetParams(ctx).ProofWindow + if msg.ProofInterval != window { + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "cannot create a file with a window different than %d", window) + } + providers := k.GetActiveProviders(ctx, "") file := types.UnifiedFile{ diff --git a/x/storage/keeper/rewards.go b/x/storage/keeper/rewards.go index b0e39d989..4e0b3c763 100644 --- a/x/storage/keeper/rewards.go +++ b/x/storage/keeper/rewards.go @@ -55,7 +55,7 @@ func (k Keeper) ManageRewards(ctx sdk.Context) { s := make(map[string]int64) sizeTracker := &s - k.IterateFilesByMerkle(ctx, func(key []byte, val []byte) { + k.IterateFilesByMerkle(ctx, false, func(key []byte, val []byte) bool { var file types.UnifiedFile k.cdc.MustUnmarshal(val, &file) @@ -67,6 +67,8 @@ func (k Keeper) ManageRewards(ctx sdk.Context) { for _, proof := range file.Proofs { k.manageProofs(ctx, sizeTracker, &file, proof) } + + return false }) k.rewardProviders(totalSize, sizeTracker) diff --git a/x/storage/types/file.go b/x/storage/types/file.go index 382dadfe0..608972e72 100644 --- a/x/storage/types/file.go +++ b/x/storage/types/file.go @@ -3,3 +3,12 @@ package types func (f *UnifiedFile) MakeProofKey(prover string) string { return string(ProofKey(prover, f.Merkle, f.Owner, f.Start)) } + +func (f *UnifiedFile) ContainsProver(prover string) bool { + for _, proof := range f.Proofs { + if proof == string(ProofKey(prover, f.Merkle, f.Owner, f.Start)) { + return true + } + } + return false +} diff --git a/x/storage/types/key_contracts.go b/x/storage/types/key_contracts.go deleted file mode 100644 index 783fc89e7..000000000 --- a/x/storage/types/key_contracts.go +++ /dev/null @@ -1,23 +0,0 @@ -package types - -import "encoding/binary" - -var _ binary.ByteOrder - -const ( - // ContractsKeyPrefix is the prefix to retrieve all Contracts - ContractsKeyPrefix = "Contracts/value/" -) - -// ContractsKey returns the store key to retrieve a Contracts from the index fields -func ContractsKey( - cid string, -) []byte { - var key []byte - - cidBytes := []byte(cid) - key = append(key, cidBytes...) - key = append(key, []byte("/")...) - - return key -} diff --git a/x/storage/types/key_files.go b/x/storage/types/key_files.go index 8b385e22e..10862c17d 100644 --- a/x/storage/types/key_files.go +++ b/x/storage/types/key_files.go @@ -44,6 +44,13 @@ func ProofKey( return []byte(fmt.Sprintf("%s/%s/%x/%d/", prover, owner, merkle, start)) } +// ProofKey returns the store key to retrieve a proof from the index fields ordered by owner +func ProofPrefix( + prover string, +) []byte { + return []byte(fmt.Sprintf("%s/%s", ProofKeyPrefix, prover)) +} + // LegacyActiveDealsKey returns the store key to retrieve a ActiveDeals from the index fields // // Deprecated: UnifiedFile replaced Active Deals as the correct data structure diff --git a/x/storage/types/message_post_file.go b/x/storage/types/message_post_file.go index ce93d7bfa..c1dfa7439 100644 --- a/x/storage/types/message_post_file.go +++ b/x/storage/types/message_post_file.go @@ -12,7 +12,7 @@ const TypeMsgPostFile = "post_file" var _ sdk.Msg = &MsgPostFile{} -func NewMsgPostContract(creator string, merkle []byte, fileSize int64, proofInterval int64, proofType int64, maxProofs int64, note string) *MsgPostFile { +func NewMsgPostFile(creator string, merkle []byte, fileSize int64, proofInterval int64, proofType int64, maxProofs int64, note string) *MsgPostFile { return &MsgPostFile{ Creator: creator, Merkle: merkle, diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index 8215f99fa..b6b8df3a8 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -114,6 +114,222 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } +type QueryProofRequest struct { + ProviderAddress string `protobuf:"bytes,1,opt,name=provider_address,json=providerAddress,proto3" json:"provider_address,omitempty"` + Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` + Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` +} + +func (m *QueryProofRequest) Reset() { *m = QueryProofRequest{} } +func (m *QueryProofRequest) String() string { return proto.CompactTextString(m) } +func (*QueryProofRequest) ProtoMessage() {} +func (*QueryProofRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{2} +} +func (m *QueryProofRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryProofRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryProofRequest.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 *QueryProofRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryProofRequest.Merge(m, src) +} +func (m *QueryProofRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryProofRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryProofRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryProofRequest proto.InternalMessageInfo + +func (m *QueryProofRequest) GetProviderAddress() string { + if m != nil { + return m.ProviderAddress + } + return "" +} + +func (m *QueryProofRequest) GetMerkle() []byte { + if m != nil { + return m.Merkle + } + return nil +} + +func (m *QueryProofRequest) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *QueryProofRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +type QueryProofResponse struct { + Proof FileProof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof"` +} + +func (m *QueryProofResponse) Reset() { *m = QueryProofResponse{} } +func (m *QueryProofResponse) String() string { return proto.CompactTextString(m) } +func (*QueryProofResponse) ProtoMessage() {} +func (*QueryProofResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{3} +} +func (m *QueryProofResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryProofResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryProofResponse.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 *QueryProofResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryProofResponse.Merge(m, src) +} +func (m *QueryProofResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryProofResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryProofResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryProofResponse proto.InternalMessageInfo + +func (m *QueryProofResponse) GetProof() FileProof { + if m != nil { + return m.Proof + } + return FileProof{} +} + +type QueryProofsByAddressRequest struct { + ProviderAddress string `protobuf:"bytes,1,opt,name=provider_address,json=providerAddress,proto3" json:"provider_address,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryProofsByAddressRequest) Reset() { *m = QueryProofsByAddressRequest{} } +func (m *QueryProofsByAddressRequest) String() string { return proto.CompactTextString(m) } +func (*QueryProofsByAddressRequest) ProtoMessage() {} +func (*QueryProofsByAddressRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{4} +} +func (m *QueryProofsByAddressRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryProofsByAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryProofsByAddressRequest.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 *QueryProofsByAddressRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryProofsByAddressRequest.Merge(m, src) +} +func (m *QueryProofsByAddressRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryProofsByAddressRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryProofsByAddressRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryProofsByAddressRequest proto.InternalMessageInfo + +func (m *QueryProofsByAddressRequest) GetProviderAddress() string { + if m != nil { + return m.ProviderAddress + } + return "" +} + +func (m *QueryProofsByAddressRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryProofsByAddressResponse struct { + Proof []FileProof `protobuf:"bytes,1,rep,name=proof,proto3" json:"proof"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryProofsByAddressResponse) Reset() { *m = QueryProofsByAddressResponse{} } +func (m *QueryProofsByAddressResponse) String() string { return proto.CompactTextString(m) } +func (*QueryProofsByAddressResponse) ProtoMessage() {} +func (*QueryProofsByAddressResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{5} +} +func (m *QueryProofsByAddressResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryProofsByAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryProofsByAddressResponse.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 *QueryProofsByAddressResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryProofsByAddressResponse.Merge(m, src) +} +func (m *QueryProofsByAddressResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryProofsByAddressResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryProofsByAddressResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryProofsByAddressResponse proto.InternalMessageInfo + +func (m *QueryProofsByAddressResponse) GetProof() []FileProof { + if m != nil { + return m.Proof + } + return nil +} + +func (m *QueryProofsByAddressResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + type QueryFileRequest struct { Merkle []byte `protobuf:"bytes,1,opt,name=merkle,proto3" json:"merkle,omitempty"` Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` @@ -124,7 +340,7 @@ func (m *QueryFileRequest) Reset() { *m = QueryFileRequest{} } func (m *QueryFileRequest) String() string { return proto.CompactTextString(m) } func (*QueryFileRequest) ProtoMessage() {} func (*QueryFileRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{2} + return fileDescriptor_9fe03bff51a37284, []int{6} } func (m *QueryFileRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -182,7 +398,7 @@ func (m *QueryFileResponse) Reset() { *m = QueryFileResponse{} } func (m *QueryFileResponse) String() string { return proto.CompactTextString(m) } func (*QueryFileResponse) ProtoMessage() {} func (*QueryFileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{3} + return fileDescriptor_9fe03bff51a37284, []int{7} } func (m *QueryFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -226,7 +442,7 @@ func (m *QueryAllFilesRequest) Reset() { *m = QueryAllFilesRequest{} } func (m *QueryAllFilesRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllFilesRequest) ProtoMessage() {} func (*QueryAllFilesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{4} + return fileDescriptor_9fe03bff51a37284, []int{8} } func (m *QueryAllFilesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -262,6 +478,58 @@ func (m *QueryAllFilesRequest) GetPagination() *query.PageRequest { return nil } +type QueryOpenFilesRequest struct { + ProviderAddress string `protobuf:"bytes,1,opt,name=provider_address,json=providerAddress,proto3" json:"provider_address,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryOpenFilesRequest) Reset() { *m = QueryOpenFilesRequest{} } +func (m *QueryOpenFilesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryOpenFilesRequest) ProtoMessage() {} +func (*QueryOpenFilesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{9} +} +func (m *QueryOpenFilesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryOpenFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryOpenFilesRequest.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 *QueryOpenFilesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryOpenFilesRequest.Merge(m, src) +} +func (m *QueryOpenFilesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryOpenFilesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryOpenFilesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryOpenFilesRequest proto.InternalMessageInfo + +func (m *QueryOpenFilesRequest) GetProviderAddress() string { + if m != nil { + return m.ProviderAddress + } + return "" +} + +func (m *QueryOpenFilesRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + type QueryAllFilesResponse struct { Files []UnifiedFile `protobuf:"bytes,1,rep,name=files,proto3" json:"files"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` @@ -271,7 +539,7 @@ func (m *QueryAllFilesResponse) Reset() { *m = QueryAllFilesResponse{} } func (m *QueryAllFilesResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllFilesResponse) ProtoMessage() {} func (*QueryAllFilesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{5} + return fileDescriptor_9fe03bff51a37284, []int{10} } func (m *QueryAllFilesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -322,7 +590,7 @@ func (m *QueryProviderRequest) Reset() { *m = QueryProviderRequest{} } func (m *QueryProviderRequest) String() string { return proto.CompactTextString(m) } func (*QueryProviderRequest) ProtoMessage() {} func (*QueryProviderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{6} + return fileDescriptor_9fe03bff51a37284, []int{11} } func (m *QueryProviderRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -366,7 +634,7 @@ func (m *QueryProviderResponse) Reset() { *m = QueryProviderResponse{} } func (m *QueryProviderResponse) String() string { return proto.CompactTextString(m) } func (*QueryProviderResponse) ProtoMessage() {} func (*QueryProviderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{7} + return fileDescriptor_9fe03bff51a37284, []int{12} } func (m *QueryProviderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -410,7 +678,7 @@ func (m *QueryAllProvidersRequest) Reset() { *m = QueryAllProvidersReque func (m *QueryAllProvidersRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllProvidersRequest) ProtoMessage() {} func (*QueryAllProvidersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{8} + return fileDescriptor_9fe03bff51a37284, []int{13} } func (m *QueryAllProvidersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -455,7 +723,7 @@ func (m *QueryAllProvidersResponse) Reset() { *m = QueryAllProvidersResp func (m *QueryAllProvidersResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllProvidersResponse) ProtoMessage() {} func (*QueryAllProvidersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{9} + return fileDescriptor_9fe03bff51a37284, []int{14} } func (m *QueryAllProvidersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -509,7 +777,7 @@ func (m *QueryAttestationRequest) Reset() { *m = QueryAttestationRequest func (m *QueryAttestationRequest) String() string { return proto.CompactTextString(m) } func (*QueryAttestationRequest) ProtoMessage() {} func (*QueryAttestationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{10} + return fileDescriptor_9fe03bff51a37284, []int{15} } func (m *QueryAttestationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -574,7 +842,7 @@ func (m *QueryAttestationResponse) Reset() { *m = QueryAttestationRespon func (m *QueryAttestationResponse) String() string { return proto.CompactTextString(m) } func (*QueryAttestationResponse) ProtoMessage() {} func (*QueryAttestationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{11} + return fileDescriptor_9fe03bff51a37284, []int{16} } func (m *QueryAttestationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -618,7 +886,7 @@ func (m *QueryAllAttestationsRequest) Reset() { *m = QueryAllAttestation func (m *QueryAllAttestationsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllAttestationsRequest) ProtoMessage() {} func (*QueryAllAttestationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{12} + return fileDescriptor_9fe03bff51a37284, []int{17} } func (m *QueryAllAttestationsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -663,7 +931,7 @@ func (m *QueryAllAttestationsResponse) Reset() { *m = QueryAllAttestatio func (m *QueryAllAttestationsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllAttestationsResponse) ProtoMessage() {} func (*QueryAllAttestationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{13} + return fileDescriptor_9fe03bff51a37284, []int{18} } func (m *QueryAllAttestationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -717,7 +985,7 @@ func (m *QueryReportRequest) Reset() { *m = QueryReportRequest{} } func (m *QueryReportRequest) String() string { return proto.CompactTextString(m) } func (*QueryReportRequest) ProtoMessage() {} func (*QueryReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{14} + return fileDescriptor_9fe03bff51a37284, []int{19} } func (m *QueryReportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -782,7 +1050,7 @@ func (m *QueryReportResponse) Reset() { *m = QueryReportResponse{} } func (m *QueryReportResponse) String() string { return proto.CompactTextString(m) } func (*QueryReportResponse) ProtoMessage() {} func (*QueryReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{15} + return fileDescriptor_9fe03bff51a37284, []int{20} } func (m *QueryReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -826,7 +1094,7 @@ func (m *QueryAllReportRequest) Reset() { *m = QueryAllReportRequest{} } func (m *QueryAllReportRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllReportRequest) ProtoMessage() {} func (*QueryAllReportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{16} + return fileDescriptor_9fe03bff51a37284, []int{21} } func (m *QueryAllReportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -871,7 +1139,7 @@ func (m *QueryAllReportResponse) Reset() { *m = QueryAllReportResponse{} func (m *QueryAllReportResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllReportResponse) ProtoMessage() {} func (*QueryAllReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{17} + return fileDescriptor_9fe03bff51a37284, []int{22} } func (m *QueryAllReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -922,7 +1190,7 @@ func (m *QueryFreespaceRequest) Reset() { *m = QueryFreespaceRequest{} } func (m *QueryFreespaceRequest) String() string { return proto.CompactTextString(m) } func (*QueryFreespaceRequest) ProtoMessage() {} func (*QueryFreespaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{18} + return fileDescriptor_9fe03bff51a37284, []int{23} } func (m *QueryFreespaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -966,7 +1234,7 @@ func (m *QueryStoreCountRequest) Reset() { *m = QueryStoreCountRequest{} func (m *QueryStoreCountRequest) String() string { return proto.CompactTextString(m) } func (*QueryStoreCountRequest) ProtoMessage() {} func (*QueryStoreCountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{19} + return fileDescriptor_9fe03bff51a37284, []int{24} } func (m *QueryStoreCountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1010,7 +1278,7 @@ func (m *QueryFreespaceResponse) Reset() { *m = QueryFreespaceResponse{} func (m *QueryFreespaceResponse) String() string { return proto.CompactTextString(m) } func (*QueryFreespaceResponse) ProtoMessage() {} func (*QueryFreespaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{20} + return fileDescriptor_9fe03bff51a37284, []int{25} } func (m *QueryFreespaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1054,7 +1322,7 @@ func (m *QueryStoreCountResponse) Reset() { *m = QueryStoreCountResponse func (m *QueryStoreCountResponse) String() string { return proto.CompactTextString(m) } func (*QueryStoreCountResponse) ProtoMessage() {} func (*QueryStoreCountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{21} + return fileDescriptor_9fe03bff51a37284, []int{26} } func (m *QueryStoreCountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1098,7 +1366,7 @@ func (m *QueryFindFileRequest) Reset() { *m = QueryFindFileRequest{} } func (m *QueryFindFileRequest) String() string { return proto.CompactTextString(m) } func (*QueryFindFileRequest) ProtoMessage() {} func (*QueryFindFileRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{22} + return fileDescriptor_9fe03bff51a37284, []int{27} } func (m *QueryFindFileRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1142,7 +1410,7 @@ func (m *QueryFindFileResponse) Reset() { *m = QueryFindFileResponse{} } func (m *QueryFindFileResponse) String() string { return proto.CompactTextString(m) } func (*QueryFindFileResponse) ProtoMessage() {} func (*QueryFindFileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{23} + return fileDescriptor_9fe03bff51a37284, []int{28} } func (m *QueryFindFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1186,7 +1454,7 @@ func (m *QueryClientFreeSpaceRequest) Reset() { *m = QueryClientFreeSpac func (m *QueryClientFreeSpaceRequest) String() string { return proto.CompactTextString(m) } func (*QueryClientFreeSpaceRequest) ProtoMessage() {} func (*QueryClientFreeSpaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{24} + return fileDescriptor_9fe03bff51a37284, []int{29} } func (m *QueryClientFreeSpaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1230,7 +1498,7 @@ func (m *QueryClientFreeSpaceResponse) Reset() { *m = QueryClientFreeSpa func (m *QueryClientFreeSpaceResponse) String() string { return proto.CompactTextString(m) } func (*QueryClientFreeSpaceResponse) ProtoMessage() {} func (*QueryClientFreeSpaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{25} + return fileDescriptor_9fe03bff51a37284, []int{30} } func (m *QueryClientFreeSpaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1274,7 +1542,7 @@ func (m *QueryPayDataRequest) Reset() { *m = QueryPayDataRequest{} } func (m *QueryPayDataRequest) String() string { return proto.CompactTextString(m) } func (*QueryPayDataRequest) ProtoMessage() {} func (*QueryPayDataRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{26} + return fileDescriptor_9fe03bff51a37284, []int{31} } func (m *QueryPayDataRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1319,7 +1587,7 @@ func (m *QueryPayDataResponse) Reset() { *m = QueryPayDataResponse{} } func (m *QueryPayDataResponse) String() string { return proto.CompactTextString(m) } func (*QueryPayDataResponse) ProtoMessage() {} func (*QueryPayDataResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{27} + return fileDescriptor_9fe03bff51a37284, []int{32} } func (m *QueryPayDataResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1370,7 +1638,7 @@ func (m *QueryStoragePaymentInfoRequest) Reset() { *m = QueryStoragePaym func (m *QueryStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryStoragePaymentInfoRequest) ProtoMessage() {} func (*QueryStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{28} + return fileDescriptor_9fe03bff51a37284, []int{33} } func (m *QueryStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1414,7 +1682,7 @@ func (m *QueryStoragePaymentInfoResponse) Reset() { *m = QueryStoragePay func (m *QueryStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryStoragePaymentInfoResponse) ProtoMessage() {} func (*QueryStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{29} + return fileDescriptor_9fe03bff51a37284, []int{34} } func (m *QueryStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1458,7 +1726,7 @@ func (m *QueryAllStoragePaymentInfoRequest) Reset() { *m = QueryAllStora func (m *QueryAllStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllStoragePaymentInfoRequest) ProtoMessage() {} func (*QueryAllStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{30} + return fileDescriptor_9fe03bff51a37284, []int{35} } func (m *QueryAllStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1503,7 +1771,7 @@ func (m *QueryAllStoragePaymentInfoResponse) Reset() { *m = QueryAllStor func (m *QueryAllStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllStoragePaymentInfoResponse) ProtoMessage() {} func (*QueryAllStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{31} + return fileDescriptor_9fe03bff51a37284, []int{36} } func (m *QueryAllStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1555,7 +1823,7 @@ func (m *QueryFileUploadCheckRequest) Reset() { *m = QueryFileUploadChec func (m *QueryFileUploadCheckRequest) String() string { return proto.CompactTextString(m) } func (*QueryFileUploadCheckRequest) ProtoMessage() {} func (*QueryFileUploadCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{32} + return fileDescriptor_9fe03bff51a37284, []int{37} } func (m *QueryFileUploadCheckRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1606,7 +1874,7 @@ func (m *QueryFileUploadCheckResponse) Reset() { *m = QueryFileUploadChe func (m *QueryFileUploadCheckResponse) String() string { return proto.CompactTextString(m) } func (*QueryFileUploadCheckResponse) ProtoMessage() {} func (*QueryFileUploadCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{33} + return fileDescriptor_9fe03bff51a37284, []int{38} } func (m *QueryFileUploadCheckResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1651,7 +1919,7 @@ func (m *QueryPriceCheckRequest) Reset() { *m = QueryPriceCheckRequest{} func (m *QueryPriceCheckRequest) String() string { return proto.CompactTextString(m) } func (*QueryPriceCheckRequest) ProtoMessage() {} func (*QueryPriceCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{34} + return fileDescriptor_9fe03bff51a37284, []int{39} } func (m *QueryPriceCheckRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1702,7 +1970,7 @@ func (m *QueryPriceCheckResponse) Reset() { *m = QueryPriceCheckResponse func (m *QueryPriceCheckResponse) String() string { return proto.CompactTextString(m) } func (*QueryPriceCheckResponse) ProtoMessage() {} func (*QueryPriceCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{35} + return fileDescriptor_9fe03bff51a37284, []int{40} } func (m *QueryPriceCheckResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1745,7 +2013,7 @@ func (m *QueryActiveProvidersRequest) Reset() { *m = QueryActiveProvider func (m *QueryActiveProvidersRequest) String() string { return proto.CompactTextString(m) } func (*QueryActiveProvidersRequest) ProtoMessage() {} func (*QueryActiveProvidersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{36} + return fileDescriptor_9fe03bff51a37284, []int{41} } func (m *QueryActiveProvidersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1782,7 +2050,7 @@ func (m *QueryActiveProvidersResponse) Reset() { *m = QueryActiveProvide func (m *QueryActiveProvidersResponse) String() string { return proto.CompactTextString(m) } func (*QueryActiveProvidersResponse) ProtoMessage() {} func (*QueryActiveProvidersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{37} + return fileDescriptor_9fe03bff51a37284, []int{42} } func (m *QueryActiveProvidersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1825,7 +2093,7 @@ func (m *QueryStorageStatsRequest) Reset() { *m = QueryStorageStatsReque func (m *QueryStorageStatsRequest) String() string { return proto.CompactTextString(m) } func (*QueryStorageStatsRequest) ProtoMessage() {} func (*QueryStorageStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{38} + return fileDescriptor_9fe03bff51a37284, []int{43} } func (m *QueryStorageStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1865,7 +2133,7 @@ func (m *QueryStorageStatsResponse) Reset() { *m = QueryStorageStatsResp func (m *QueryStorageStatsResponse) String() string { return proto.CompactTextString(m) } func (*QueryStorageStatsResponse) ProtoMessage() {} func (*QueryStorageStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{39} + return fileDescriptor_9fe03bff51a37284, []int{44} } func (m *QueryStorageStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1918,9 +2186,14 @@ func (m *QueryStorageStatsResponse) GetActiveUsers() uint64 { func init() { proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.storage.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.storage.QueryParamsResponse") + proto.RegisterType((*QueryProofRequest)(nil), "canine_chain.storage.QueryProofRequest") + proto.RegisterType((*QueryProofResponse)(nil), "canine_chain.storage.QueryProofResponse") + proto.RegisterType((*QueryProofsByAddressRequest)(nil), "canine_chain.storage.QueryProofsByAddressRequest") + proto.RegisterType((*QueryProofsByAddressResponse)(nil), "canine_chain.storage.QueryProofsByAddressResponse") proto.RegisterType((*QueryFileRequest)(nil), "canine_chain.storage.QueryFileRequest") proto.RegisterType((*QueryFileResponse)(nil), "canine_chain.storage.QueryFileResponse") proto.RegisterType((*QueryAllFilesRequest)(nil), "canine_chain.storage.QueryAllFilesRequest") + proto.RegisterType((*QueryOpenFilesRequest)(nil), "canine_chain.storage.QueryOpenFilesRequest") proto.RegisterType((*QueryAllFilesResponse)(nil), "canine_chain.storage.QueryAllFilesResponse") proto.RegisterType((*QueryProviderRequest)(nil), "canine_chain.storage.QueryProviderRequest") proto.RegisterType((*QueryProviderResponse)(nil), "canine_chain.storage.QueryProviderResponse") @@ -1961,121 +2234,131 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 1819 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcf, 0x6f, 0x1c, 0x45, - 0x16, 0x76, 0x79, 0x1c, 0x27, 0x53, 0xf6, 0x6e, 0x76, 0x6b, 0x9d, 0xac, 0x77, 0xe2, 0xf5, 0x8f, - 0xd6, 0xc6, 0x76, 0xbc, 0x71, 0x77, 0x3c, 0x71, 0xe2, 0x8d, 0x93, 0x25, 0x89, 0x1d, 0xd9, 0x24, - 0x72, 0x14, 0xa7, 0x2d, 0x83, 0x84, 0x10, 0x43, 0x79, 0xa6, 0x3c, 0x6e, 0x3c, 0xd3, 0xdd, 0xe9, - 0xee, 0x31, 0x58, 0x96, 0x2f, 0x70, 0x06, 0x45, 0xca, 0x89, 0x13, 0x88, 0x04, 0x21, 0x4e, 0x48, - 0x81, 0x03, 0x17, 0x0e, 0x20, 0x45, 0xca, 0x8d, 0x48, 0x5c, 0x10, 0x87, 0x08, 0x25, 0xfc, 0x21, - 0xa8, 0xaa, 0x5e, 0x4f, 0xf7, 0xcc, 0xf4, 0x74, 0xf7, 0xa0, 0x11, 0xa7, 0x71, 0x55, 0xd7, 0x7b, - 0xef, 0x7b, 0xaf, 0xde, 0x7b, 0xf5, 0x3e, 0x19, 0x8f, 0x17, 0xa9, 0x69, 0x98, 0xac, 0x50, 0xdc, - 0xa1, 0x86, 0xa9, 0xb9, 0x9e, 0xe5, 0xd0, 0x32, 0xd3, 0xee, 0xd5, 0x98, 0xb3, 0xaf, 0xda, 0x8e, - 0xe5, 0x59, 0x64, 0x28, 0x7c, 0x42, 0x85, 0x13, 0xb9, 0xa1, 0xb2, 0x55, 0xb6, 0xc4, 0x01, 0x8d, - 0xff, 0x25, 0xcf, 0xe6, 0x46, 0xca, 0x96, 0x55, 0xae, 0x30, 0x8d, 0xda, 0x86, 0x46, 0x4d, 0xd3, - 0xf2, 0xa8, 0x67, 0x58, 0xa6, 0x0b, 0x5f, 0x67, 0x8a, 0x96, 0x5b, 0xb5, 0x5c, 0x6d, 0x8b, 0xba, - 0x60, 0x42, 0xdb, 0x9b, 0xdb, 0x62, 0x1e, 0x9d, 0xd3, 0x6c, 0x5a, 0x36, 0x4c, 0x71, 0x18, 0xce, - 0x4e, 0x44, 0xe2, 0xb2, 0xa9, 0x43, 0xab, 0xbe, 0xba, 0xa9, 0xc8, 0x23, 0xb4, 0xe8, 0x19, 0x7b, - 0xac, 0x50, 0x62, 0xb4, 0xe2, 0x1f, 0xfc, 0x4f, 0xb4, 0x2e, 0xc7, 0xda, 0x33, 0x4a, 0xcc, 0x89, - 0x57, 0x67, 0xd3, 0xfd, 0x2a, 0x33, 0xbd, 0x82, 0x61, 0x6e, 0x83, 0x93, 0xca, 0x10, 0x26, 0x77, - 0x39, 0xf8, 0x75, 0x01, 0x46, 0x67, 0xf7, 0x6a, 0xcc, 0xf5, 0x94, 0xbb, 0xf8, 0x1f, 0x0d, 0xbb, - 0xae, 0x6d, 0x99, 0x2e, 0x23, 0x8b, 0xb8, 0x5f, 0x82, 0x1e, 0x46, 0xe3, 0x68, 0x7a, 0x20, 0x3f, - 0xa2, 0x46, 0x85, 0x53, 0x95, 0x52, 0x4b, 0x7d, 0x4f, 0x9f, 0x8f, 0xf5, 0xe8, 0x20, 0xa1, 0xbc, - 0x86, 0xff, 0x26, 0x54, 0xae, 0x18, 0x15, 0x06, 0x66, 0xc8, 0x49, 0xdc, 0x5f, 0x65, 0xce, 0x6e, - 0x85, 0x09, 0x7d, 0x83, 0x3a, 0xac, 0xc8, 0x10, 0x3e, 0x62, 0xbd, 0x6b, 0x32, 0x67, 0xb8, 0x77, - 0x1c, 0x4d, 0x67, 0x75, 0xb9, 0xe0, 0xbb, 0xae, 0x47, 0x1d, 0x6f, 0x38, 0x33, 0x8e, 0xa6, 0x33, - 0xba, 0x5c, 0x28, 0xeb, 0xf8, 0xef, 0x21, 0xbd, 0x00, 0xf4, 0x32, 0xee, 0xdb, 0x36, 0x40, 0xed, - 0x40, 0x7e, 0x22, 0x1a, 0xe6, 0xa6, 0x69, 0x6c, 0x1b, 0xac, 0xc4, 0x05, 0x01, 0xab, 0x10, 0x52, - 0xde, 0xc2, 0x43, 0x42, 0xe3, 0xf5, 0x4a, 0x85, 0x7f, 0xf3, 0x83, 0x42, 0x56, 0x30, 0x0e, 0x6e, - 0x16, 0x54, 0x4f, 0xaa, 0x32, 0x0d, 0x54, 0x9e, 0x06, 0xaa, 0xcc, 0x34, 0x48, 0x03, 0x75, 0x9d, - 0x96, 0x7d, 0x4f, 0xf5, 0x90, 0xa4, 0xf2, 0x09, 0xc2, 0x27, 0x9a, 0x0c, 0x00, 0xec, 0xff, 0xe3, - 0x23, 0x1c, 0x01, 0x0f, 0x6f, 0xa6, 0x13, 0xdc, 0x52, 0x8a, 0xac, 0x36, 0x00, 0xec, 0x15, 0x00, - 0xa7, 0x12, 0x01, 0x4a, 0xdb, 0x0d, 0x08, 0xcf, 0x41, 0x04, 0xd6, 0x21, 0xab, 0xfc, 0x08, 0x0c, - 0xe3, 0xa3, 0xb4, 0x54, 0x72, 0x98, 0x2b, 0x13, 0x20, 0xab, 0xfb, 0x4b, 0xe5, 0x4d, 0x70, 0x29, - 0x90, 0x00, 0x97, 0x96, 0x71, 0xb6, 0x9e, 0x9b, 0x10, 0xb3, 0xb1, 0x36, 0x59, 0xe3, 0x1f, 0x03, - 0xa7, 0x02, 0x39, 0x65, 0x0b, 0x0f, 0xfb, 0x01, 0xab, 0x9f, 0xea, 0xf6, 0xad, 0x7c, 0x89, 0xf0, - 0xbf, 0x22, 0x8c, 0x44, 0xbb, 0x91, 0xf9, 0x23, 0x6e, 0x74, 0xef, 0x7e, 0x6a, 0xf8, 0x9f, 0x12, - 0xaa, 0xe7, 0x31, 0x57, 0xb6, 0xa5, 0x50, 0x49, 0x71, 0x83, 0xcc, 0x81, 0x1b, 0x82, 0x55, 0xa8, - 0xd4, 0x7a, 0xa3, 0x4b, 0x2d, 0x13, 0x59, 0x6a, 0x7d, 0xe1, 0x52, 0x33, 0xfc, 0x6b, 0x08, 0x9b, - 0x85, 0x00, 0xdd, 0xc6, 0x03, 0x34, 0xd8, 0x86, 0x7b, 0x38, 0x1d, 0x1d, 0xa2, 0x90, 0xfc, 0x8a, - 0xe5, 0x54, 0x21, 0x50, 0x61, 0x79, 0x85, 0xe1, 0x53, 0xfe, 0x65, 0x84, 0x4e, 0x77, 0xfd, 0xd2, - 0xbf, 0x45, 0x78, 0x24, 0xda, 0x0e, 0xb8, 0x75, 0x07, 0x0f, 0x86, 0x60, 0xf9, 0x57, 0xdf, 0x91, - 0x5f, 0x0d, 0x0a, 0xba, 0x97, 0x03, 0x36, 0x34, 0x6e, 0x9d, 0xd9, 0x96, 0xe3, 0xfd, 0x19, 0xd7, - 0xbf, 0x09, 0x8f, 0x82, 0x6f, 0x11, 0x42, 0xf4, 0x0a, 0xee, 0x77, 0xc4, 0x0e, 0xdc, 0xc3, 0x78, - 0x74, 0x70, 0xa4, 0x54, 0x28, 0x2e, 0x20, 0xa5, 0x14, 0x82, 0x6e, 0xd8, 0xe8, 0x4b, 0xb7, 0x2e, - 0xf9, 0x21, 0xc2, 0x27, 0x9b, 0x2d, 0x00, 0xf6, 0x6b, 0xf8, 0xa8, 0x44, 0xe1, 0xdf, 0x6c, 0x5a, - 0xf0, 0xbe, 0x58, 0xf7, 0xee, 0x73, 0x0e, 0xc2, 0xb0, 0xe2, 0x30, 0xe6, 0xda, 0xb4, 0xc8, 0x92, - 0x9b, 0x6e, 0x1e, 0xfc, 0xda, 0xf0, 0x2c, 0x87, 0x2d, 0x5b, 0x35, 0xd3, 0x4b, 0x96, 0x51, 0x41, - 0x26, 0x64, 0x06, 0x62, 0xc1, 0x2f, 0x9d, 0x6f, 0x80, 0x84, 0x5c, 0x28, 0x1a, 0xb4, 0x9a, 0xb0, - 0x8d, 0x40, 0xa0, 0xc8, 0x37, 0x7c, 0x01, 0xb1, 0x50, 0x54, 0x78, 0x3b, 0x56, 0x0c, 0xb3, 0x94, - 0xe2, 0xad, 0x57, 0x16, 0x7d, 0xbf, 0xeb, 0xe7, 0x41, 0xfd, 0x04, 0x1e, 0xf4, 0x5b, 0x67, 0xc1, - 0xb0, 0x7d, 0x47, 0x06, 0xfc, 0xbd, 0x9b, 0xb6, 0xab, 0x2c, 0x40, 0x97, 0x58, 0xae, 0x18, 0xcc, - 0xf4, 0xb8, 0x4b, 0x1b, 0xe9, 0x22, 0x77, 0x05, 0xca, 0xbe, 0x45, 0x10, 0x6c, 0x8f, 0xe0, 0xec, - 0xd6, 0xbe, 0xc7, 0xdc, 0x6d, 0x87, 0x49, 0xbc, 0x19, 0x3d, 0xd8, 0x50, 0xb4, 0xfa, 0x74, 0xb4, - 0x7f, 0x83, 0x7a, 0x34, 0xd9, 0xdc, 0x86, 0xff, 0x9e, 0xfa, 0x02, 0x60, 0xe6, 0x34, 0xfe, 0xab, - 0x67, 0x54, 0x59, 0xc1, 0x61, 0x55, 0x6a, 0x98, 0x86, 0x59, 0x06, 0x5b, 0x7f, 0xe1, 0xbb, 0xba, - 0xbf, 0xc9, 0x03, 0x2d, 0x8c, 0x8b, 0xf4, 0xca, 0xe8, 0x72, 0xa1, 0x2c, 0xe2, 0xd1, 0xfa, 0xcd, - 0xd0, 0x32, 0x5b, 0x97, 0xb3, 0xdd, 0x4d, 0x73, 0xdb, 0x4a, 0x06, 0xf4, 0x01, 0xc2, 0x63, 0x6d, - 0x85, 0x01, 0xdc, 0xdb, 0x78, 0x08, 0xd2, 0xbf, 0x10, 0x9e, 0x1b, 0xa1, 0x10, 0xa7, 0xa3, 0x0b, - 0xa5, 0x55, 0x1f, 0x14, 0x0c, 0x71, 0x5b, 0xbe, 0x28, 0xbb, 0x78, 0xc2, 0xaf, 0xcb, 0xf6, 0x4e, - 0x74, 0xab, 0x0b, 0xfc, 0x88, 0xb0, 0x12, 0x67, 0x2d, 0xd1, 0xeb, 0x4c, 0x77, 0xbc, 0xee, 0x5e, - 0xc7, 0xb8, 0x0d, 0xd9, 0xcf, 0xab, 0x66, 0xd3, 0xae, 0x58, 0xb4, 0xb4, 0xbc, 0xc3, 0x8a, 0xbb, - 0x89, 0xb7, 0xdf, 0x26, 0x9f, 0xe6, 0xa1, 0x26, 0x5a, 0xd4, 0x05, 0xe5, 0xbe, 0x47, 0x2b, 0x46, - 0x49, 0x68, 0x3b, 0xa6, 0xcb, 0x85, 0x72, 0x0b, 0xfa, 0xc9, 0xba, 0x63, 0x14, 0x59, 0x83, 0xfd, - 0x1c, 0x3e, 0x56, 0xaa, 0x39, 0xc1, 0xb5, 0x65, 0xf5, 0xfa, 0xba, 0x0d, 0x02, 0xbf, 0xd7, 0x84, - 0x75, 0x05, 0xc6, 0x6d, 0xbe, 0x0b, 0x05, 0x22, 0x17, 0xca, 0xbf, 0xfd, 0x29, 0x41, 0xd0, 0xa4, - 0xe6, 0xd1, 0x50, 0x31, 0xfc, 0xc7, 0xbd, 0xf9, 0x33, 0x28, 0xbd, 0xd9, 0x3a, 0xd4, 0xb5, 0x7b, - 0xd9, 0x1b, 0x35, 0xb4, 0x4e, 0xa8, 0x39, 0x18, 0x8d, 0x20, 0x13, 0x36, 0x3c, 0xea, 0xd5, 0x61, - 0x7c, 0xe7, 0x4f, 0x96, 0x8d, 0x1f, 0x83, 0x56, 0x63, 0xd7, 0x9c, 0xe2, 0x0e, 0x75, 0x99, 0x0c, - 0x6d, 0x9f, 0x1e, 0x6c, 0x10, 0x82, 0xfb, 0x6a, 0xfc, 0x43, 0xaf, 0xf8, 0x20, 0xfe, 0x26, 0x6b, - 0x38, 0xcb, 0x7f, 0x75, 0x1e, 0x4a, 0xf1, 0x6e, 0x0f, 0x2e, 0xa9, 0x1c, 0xcf, 0x2f, 0xcf, 0xc7, - 0x26, 0xcb, 0x86, 0xb7, 0x53, 0xdb, 0x52, 0x8b, 0x56, 0x55, 0x03, 0x7e, 0x2a, 0x7f, 0x66, 0xdd, - 0xd2, 0xae, 0xe6, 0xed, 0xdb, 0xcc, 0x55, 0x6f, 0xb0, 0xa2, 0x1e, 0x28, 0x20, 0xe3, 0x78, 0x40, - 0xb2, 0xcc, 0x4d, 0x97, 0x87, 0xa1, 0x4f, 0x18, 0x0a, 0x6f, 0xe5, 0x3f, 0x3c, 0x85, 0x8f, 0x08, - 0xfc, 0xe4, 0x23, 0x84, 0xfb, 0x25, 0xb9, 0x23, 0x6d, 0x2a, 0xa1, 0x95, 0x4b, 0xe6, 0xce, 0xa4, - 0x38, 0x29, 0x63, 0xa1, 0x68, 0xef, 0xff, 0xf4, 0xdb, 0x83, 0xde, 0x33, 0x64, 0x4a, 0x7b, 0x87, - 0x16, 0x77, 0x69, 0x65, 0xb6, 0x44, 0x2d, 0x4d, 0x4a, 0xcf, 0x46, 0x71, 0x67, 0x72, 0x1f, 0xe1, - 0x3e, 0x9e, 0xaf, 0x64, 0x32, 0xc6, 0x48, 0xe8, 0x15, 0xca, 0x4d, 0x25, 0x9e, 0x03, 0x28, 0x0b, - 0x02, 0xca, 0x1c, 0xd1, 0x12, 0xa1, 0x08, 0xee, 0xa5, 0x1d, 0xc8, 0xe7, 0xec, 0x90, 0x3c, 0x40, - 0xf8, 0x98, 0x60, 0x75, 0xd7, 0x2b, 0x15, 0x32, 0x13, 0x63, 0xae, 0x89, 0x5e, 0xe6, 0xfe, 0x9b, - 0xea, 0x2c, 0xc0, 0x53, 0x05, 0xbc, 0x69, 0x32, 0x99, 0x0e, 0x1e, 0xf9, 0x0c, 0xe1, 0x6c, 0x3d, - 0x7d, 0x63, 0x61, 0x35, 0x71, 0xbe, 0x58, 0x58, 0xcd, 0x6c, 0x4f, 0xb9, 0x22, 0x60, 0x5d, 0x24, - 0xf3, 0xc9, 0x17, 0xe8, 0x83, 0xd1, 0x0e, 0xa0, 0x2d, 0x1d, 0x92, 0x87, 0x08, 0x0f, 0xd6, 0x41, - 0xf2, 0xf0, 0xa9, 0xf1, 0x21, 0x69, 0x2e, 0xf8, 0x9c, 0x96, 0xfa, 0x3c, 0xe0, 0xcd, 0x0b, 0xbc, - 0x67, 0xc9, 0x4c, 0x7a, 0xbc, 0xe4, 0x09, 0xc2, 0x03, 0xa1, 0x49, 0x9f, 0xcc, 0xc6, 0x19, 0x6d, - 0x21, 0x68, 0x39, 0x35, 0xed, 0x71, 0x80, 0xf8, 0xba, 0x80, 0x78, 0x97, 0xdc, 0x49, 0x84, 0x18, - 0xe6, 0x19, 0xda, 0x81, 0x1c, 0xfc, 0x0f, 0xeb, 0x89, 0xa9, 0x1d, 0x88, 0xd9, 0xfe, 0x50, 0x3b, - 0x10, 0xd3, 0xfc, 0x21, 0xf9, 0x0a, 0xe1, 0xe3, 0x61, 0xce, 0xc3, 0x03, 0x3e, 0x17, 0x1f, 0xc0, - 0x08, 0x2a, 0x96, 0xcb, 0x77, 0x22, 0x02, 0x3e, 0x5d, 0x10, 0x3e, 0x69, 0x64, 0xb6, 0x23, 0x9f, - 0xc8, 0x63, 0x84, 0x8f, 0xea, 0x30, 0x77, 0xc7, 0xf5, 0x9f, 0x06, 0x1a, 0x11, 0xdb, 0x7f, 0x1a, - 0xe9, 0x80, 0xa2, 0x0b, 0x5c, 0x6b, 0xe4, 0x56, 0x22, 0x2e, 0x18, 0xff, 0x53, 0x84, 0xf9, 0x63, - 0x84, 0x31, 0x80, 0xe6, 0x11, 0x4e, 0xa8, 0xf2, 0x46, 0xe8, 0x67, 0xd3, 0x1d, 0x06, 0xf4, 0xe7, - 0x04, 0xfa, 0x19, 0x32, 0x9d, 0x16, 0x3d, 0x79, 0x84, 0x70, 0xb6, 0x4e, 0x04, 0x62, 0xa1, 0x35, - 0xb3, 0x92, 0x58, 0x68, 0x2d, 0xdc, 0xa2, 0x83, 0xbe, 0xb0, 0xed, 0xcb, 0x86, 0xfa, 0xc2, 0xe7, - 0x08, 0xe3, 0x80, 0x7f, 0x90, 0x38, 0xd3, 0x2d, 0x54, 0x28, 0x37, 0x9b, 0xf2, 0x34, 0x20, 0x5d, - 0x14, 0x48, 0xe7, 0x49, 0x3e, 0x11, 0x29, 0xff, 0x35, 0xcc, 0x72, 0x08, 0xe7, 0xa7, 0xa2, 0xf5, - 0x4b, 0x1a, 0x13, 0xdb, 0x63, 0x9b, 0xb8, 0x51, 0x6c, 0x8f, 0x6d, 0xe6, 0x45, 0xca, 0x65, 0x81, - 0xf0, 0x02, 0x39, 0x9f, 0xa2, 0xf5, 0x9b, 0xa5, 0x02, 0xef, 0xff, 0xc1, 0xeb, 0xf4, 0x04, 0x61, - 0xb2, 0xca, 0xbc, 0x26, 0xde, 0x13, 0x5b, 0xf7, 0xd1, 0xe4, 0x2a, 0xb6, 0xee, 0xdb, 0xd0, 0x2a, - 0xe5, 0x55, 0x01, 0x7d, 0x89, 0x5c, 0x4b, 0x84, 0x5e, 0x66, 0x5e, 0xa1, 0x28, 0xb4, 0x14, 0x78, - 0x46, 0x14, 0x9a, 0x53, 0xe2, 0x11, 0xc2, 0x78, 0x95, 0x79, 0x40, 0xa8, 0x48, 0xfc, 0x8c, 0x11, - 0x66, 0x69, 0xb9, 0x99, 0x34, 0x47, 0x01, 0xef, 0x55, 0x81, 0xf7, 0x12, 0x59, 0x48, 0x85, 0xd7, - 0xa6, 0xfb, 0x85, 0x12, 0xf5, 0x68, 0x08, 0xe6, 0x0f, 0x08, 0x93, 0x56, 0x72, 0x40, 0xe6, 0x13, - 0x72, 0x32, 0x92, 0x09, 0xe5, 0x2e, 0x74, 0x28, 0xd5, 0xb1, 0x13, 0x61, 0xc2, 0x13, 0x72, 0xe2, - 0x7b, 0x84, 0x4f, 0xb4, 0xea, 0xe7, 0xcd, 0x6c, 0x21, 0xbe, 0x3f, 0xb5, 0x77, 0xe5, 0x7f, 0x9d, - 0x0b, 0x76, 0xfc, 0x74, 0x84, 0xbd, 0x21, 0xdf, 0x20, 0x7c, 0xbc, 0x89, 0xd8, 0xc4, 0x26, 0x7d, - 0x34, 0xa7, 0x8a, 0x4d, 0xfa, 0x36, 0xbc, 0xa9, 0x83, 0x8e, 0xc2, 0x4b, 0xb5, 0x50, 0x13, 0x2a, - 0x0a, 0x45, 0x01, 0xf1, 0x31, 0xc2, 0x38, 0x60, 0x43, 0xb1, 0x9d, 0xaf, 0x85, 0x80, 0xc5, 0x76, - 0xbe, 0x56, 0x8a, 0xa5, 0xac, 0x0a, 0x9c, 0xd7, 0xc9, 0xd5, 0x14, 0xb3, 0x90, 0x51, 0x64, 0x12, - 0xa1, 0x76, 0xe0, 0x73, 0xba, 0x43, 0xed, 0x40, 0xb0, 0xb8, 0x43, 0xf2, 0x35, 0x1f, 0x2c, 0x1a, - 0x09, 0x53, 0xfc, 0x60, 0x11, 0xc9, 0xde, 0xe2, 0x07, 0x8b, 0x68, 0x46, 0xa7, 0x5c, 0x12, 0x3e, - 0x9c, 0x27, 0x73, 0xc9, 0x83, 0x85, 0xfc, 0xcf, 0x5a, 0x30, 0xd6, 0x7d, 0x81, 0xf0, 0x60, 0x98, - 0xa0, 0xc5, 0x0e, 0x9f, 0x11, 0x34, 0x2f, 0x76, 0xf8, 0x8c, 0x62, 0x7e, 0xca, 0x45, 0x01, 0xf6, - 0x1c, 0x51, 0x53, 0x3d, 0x35, 0xb4, 0xcc, 0x0a, 0x7c, 0x12, 0x72, 0x97, 0xd6, 0x9e, 0xbe, 0x18, - 0x45, 0xcf, 0x5e, 0x8c, 0xa2, 0x5f, 0x5f, 0x8c, 0xa2, 0xfb, 0x2f, 0x47, 0x7b, 0x9e, 0xbd, 0x1c, - 0xed, 0xf9, 0xf9, 0xe5, 0x68, 0xcf, 0x1b, 0xf9, 0x10, 0xfd, 0x93, 0x3a, 0xd7, 0xe8, 0x96, 0xdb, - 0xa8, 0xf3, 0xbd, 0xba, 0x56, 0x41, 0x07, 0xb7, 0xfa, 0xc5, 0xff, 0x01, 0xcf, 0xff, 0x1e, 0x00, - 0x00, 0xff, 0xff, 0x5f, 0xcf, 0x90, 0x2b, 0x3c, 0x1d, 0x00, 0x00, + // 1976 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcf, 0x6f, 0x24, 0x47, + 0x15, 0xde, 0xda, 0xb1, 0xbd, 0x3b, 0x65, 0xc3, 0x86, 0xc2, 0x09, 0x66, 0x58, 0xc6, 0x76, 0x8b, + 0xd8, 0x5e, 0x13, 0x77, 0xaf, 0x67, 0xbd, 0x59, 0xe2, 0x84, 0x64, 0x6d, 0x47, 0x36, 0x1b, 0x39, + 0x5a, 0xbb, 0x8d, 0x41, 0x8a, 0x10, 0x43, 0x79, 0xa6, 0x3c, 0x6e, 0x3c, 0xd3, 0xdd, 0xe9, 0xee, + 0x31, 0x58, 0x96, 0x2f, 0x41, 0xe2, 0xc0, 0x01, 0x45, 0xca, 0x89, 0x13, 0x11, 0x59, 0x84, 0x38, + 0x20, 0xa4, 0x80, 0x10, 0x17, 0x0e, 0x20, 0x21, 0xe5, 0x46, 0x24, 0x2e, 0x88, 0xc3, 0x0a, 0xed, + 0xf2, 0x87, 0xa0, 0xaa, 0x7a, 0xd5, 0xdd, 0x33, 0xdd, 0xd3, 0xdd, 0xb3, 0x1a, 0x91, 0xd3, 0xb8, + 0xab, 0xeb, 0xbd, 0xf7, 0xbd, 0x1f, 0xf5, 0xea, 0x7d, 0xbd, 0x8b, 0xe7, 0x1a, 0xd4, 0xb6, 0x6c, + 0x56, 0x6f, 0x9c, 0x50, 0xcb, 0x36, 0xfc, 0xc0, 0xf1, 0x68, 0x8b, 0x19, 0xef, 0x76, 0x99, 0x77, + 0xae, 0xbb, 0x9e, 0x13, 0x38, 0x64, 0x3a, 0xbe, 0x43, 0x87, 0x1d, 0x95, 0xe9, 0x96, 0xd3, 0x72, + 0xc4, 0x06, 0x83, 0xff, 0x25, 0xf7, 0x56, 0x6e, 0xb6, 0x1c, 0xa7, 0xd5, 0x66, 0x06, 0x75, 0x2d, + 0x83, 0xda, 0xb6, 0x13, 0xd0, 0xc0, 0x72, 0x6c, 0x1f, 0xde, 0x2e, 0x37, 0x1c, 0xbf, 0xe3, 0xf8, + 0xc6, 0x11, 0xf5, 0xc1, 0x84, 0x71, 0xb6, 0x7a, 0xc4, 0x02, 0xba, 0x6a, 0xb8, 0xb4, 0x65, 0xd9, + 0x62, 0x33, 0xec, 0x9d, 0x4f, 0xc5, 0xe5, 0x52, 0x8f, 0x76, 0x94, 0xba, 0xc5, 0xd4, 0x2d, 0xb4, + 0x11, 0x58, 0x67, 0xac, 0xde, 0x64, 0xb4, 0xad, 0x36, 0x7e, 0x2d, 0x5d, 0x97, 0xe7, 0x9c, 0x59, + 0x4d, 0xe6, 0x65, 0xab, 0x73, 0xe9, 0x79, 0x87, 0xd9, 0x41, 0xdd, 0xb2, 0x8f, 0xc1, 0x49, 0x6d, + 0x1a, 0x93, 0x7d, 0x0e, 0x7e, 0x4f, 0x80, 0x31, 0xd9, 0xbb, 0x5d, 0xe6, 0x07, 0xda, 0x3e, 0xfe, + 0x62, 0xcf, 0xaa, 0xef, 0x3a, 0xb6, 0xcf, 0xc8, 0x3a, 0x9e, 0x90, 0xa0, 0x67, 0xd0, 0x1c, 0x5a, + 0x9a, 0xac, 0xdd, 0xd4, 0xd3, 0xc2, 0xa9, 0x4b, 0xa9, 0xcd, 0xb1, 0x4f, 0x1e, 0xcf, 0x5e, 0x31, + 0x41, 0x42, 0x7b, 0x0f, 0xe1, 0x2f, 0x48, 0x9d, 0x9e, 0xe3, 0x1c, 0x83, 0x21, 0x72, 0x0b, 0x3f, + 0xa7, 0xa0, 0xd7, 0x69, 0xb3, 0xe9, 0x31, 0x5f, 0xea, 0x2e, 0x9b, 0x37, 0xd4, 0xfa, 0x86, 0x5c, + 0x26, 0x2f, 0xe0, 0x89, 0x0e, 0xf3, 0x4e, 0xdb, 0x6c, 0xe6, 0xea, 0x1c, 0x5a, 0x9a, 0x32, 0xe1, + 0x89, 0x4c, 0xe3, 0x71, 0xe7, 0x47, 0x36, 0xf3, 0x66, 0x4a, 0x42, 0x4e, 0x3e, 0xf0, 0x55, 0x3f, + 0xa0, 0x5e, 0x30, 0x33, 0x36, 0x87, 0x96, 0x4a, 0xa6, 0x7c, 0xd0, 0xf6, 0x95, 0xb7, 0x12, 0x03, + 0xb8, 0xf5, 0x2a, 0x1e, 0x77, 0xf9, 0x02, 0x78, 0x35, 0x9b, 0xee, 0xd5, 0xb6, 0xd5, 0x66, 0x42, + 0x0e, 0x1c, 0x93, 0x32, 0xda, 0xfb, 0x08, 0x7f, 0x25, 0xd2, 0xe9, 0x6f, 0x9e, 0x03, 0xde, 0x67, + 0xf0, 0x70, 0x1b, 0xe3, 0xa8, 0x74, 0x84, 0x97, 0x93, 0xb5, 0x05, 0x5d, 0xd6, 0x99, 0xce, 0xeb, + 0x4c, 0x97, 0xa5, 0x0c, 0x75, 0xa6, 0xef, 0xd1, 0x16, 0x03, 0x33, 0x66, 0x4c, 0x52, 0x7b, 0x84, + 0xf0, 0xcd, 0x74, 0x48, 0x49, 0x87, 0x4b, 0xc3, 0x3a, 0x4c, 0x76, 0x52, 0x50, 0x2e, 0xe6, 0xa2, + 0x94, 0x96, 0x7b, 0x60, 0x7e, 0x07, 0x3f, 0x27, 0x50, 0x72, 0x3b, 0x2a, 0x5a, 0x51, 0x92, 0x51, + 0x7a, 0x92, 0xaf, 0xa6, 0x26, 0xb9, 0x14, 0x4f, 0xf2, 0x1e, 0x14, 0x9a, 0xd4, 0x1b, 0xba, 0x3c, + 0x76, 0x6c, 0x81, 0xda, 0xc9, 0xda, 0x7c, 0xba, 0xc7, 0x87, 0xb6, 0x75, 0x6c, 0xb1, 0x26, 0x17, + 0x04, 0x9f, 0x85, 0x90, 0xf6, 0x7d, 0x3c, 0x2d, 0x34, 0x6e, 0xb4, 0xdb, 0xfc, 0x5d, 0x98, 0xdb, + 0xde, 0x84, 0xa1, 0x67, 0x4e, 0xd8, 0xcf, 0x10, 0x7e, 0x5e, 0x18, 0x78, 0xe8, 0x32, 0xbb, 0xc7, + 0xc2, 0x67, 0x50, 0x3d, 0xbf, 0x54, 0x60, 0x22, 0x6f, 0x21, 0x86, 0xdf, 0xc4, 0xe3, 0x3c, 0x1c, + 0x3e, 0x94, 0x4d, 0xe1, 0x20, 0x4a, 0xa9, 0xd1, 0x15, 0xce, 0x6d, 0x48, 0xc7, 0x1e, 0x44, 0x40, + 0x05, 0x6b, 0x06, 0x5f, 0xeb, 0x8d, 0x91, 0x7a, 0xd4, 0xbe, 0x07, 0x2e, 0x45, 0x12, 0xe0, 0xd2, + 0x16, 0x2e, 0x87, 0xad, 0x33, 0xfb, 0xf8, 0x2b, 0x51, 0xd5, 0xd7, 0x22, 0x39, 0xed, 0x08, 0xcf, + 0xa8, 0x80, 0x85, 0xbb, 0x46, 0x5d, 0x22, 0xbf, 0x45, 0xf8, 0xcb, 0x29, 0x46, 0xd2, 0xdd, 0x28, + 0x3d, 0x8b, 0x1b, 0xa3, 0xcb, 0x4f, 0x17, 0x7f, 0x49, 0x42, 0x0d, 0x02, 0xe6, 0xcb, 0x5b, 0x33, + 0x76, 0xbe, 0xb9, 0x41, 0xe6, 0x41, 0x86, 0xe0, 0x69, 0x24, 0xcd, 0xdd, 0x52, 0x69, 0x88, 0x9b, + 0x85, 0x00, 0xbd, 0x8d, 0x27, 0x69, 0xb4, 0x0c, 0x79, 0x78, 0x31, 0x3d, 0x44, 0x31, 0xf9, 0x6d, + 0xc7, 0xeb, 0x40, 0xa0, 0xe2, 0xf2, 0x1a, 0x83, 0x9e, 0xbf, 0xd1, 0x6e, 0xc7, 0x76, 0x8f, 0x3c, + 0xe9, 0x7f, 0x56, 0x8d, 0x3c, 0x61, 0x07, 0xdc, 0x7a, 0x88, 0xa7, 0x62, 0xb0, 0x54, 0xea, 0x87, + 0xf2, 0xab, 0x47, 0xc1, 0xe8, 0x6a, 0xc0, 0x85, 0x9b, 0xd6, 0x64, 0xae, 0xe3, 0x05, 0xff, 0x8f, + 0xf4, 0x1f, 0xc2, 0xcc, 0xa2, 0x2c, 0x42, 0x88, 0x5e, 0xc7, 0x13, 0x9e, 0x58, 0x81, 0x3c, 0xcc, + 0xa5, 0x07, 0x47, 0x4a, 0xc5, 0xe2, 0x02, 0x52, 0x5a, 0x3d, 0xea, 0x86, 0xbd, 0xbe, 0x8c, 0x2a, + 0xc9, 0x1f, 0x21, 0xfc, 0x42, 0xbf, 0x05, 0xc0, 0x7e, 0x1f, 0x5f, 0x93, 0x28, 0x54, 0x66, 0x8b, + 0x82, 0x57, 0x62, 0xa3, 0xcb, 0xe7, 0x2a, 0x84, 0x61, 0xdb, 0x63, 0xcc, 0x77, 0x69, 0x83, 0xe5, + 0x37, 0xdd, 0x1a, 0xf8, 0x75, 0x10, 0x38, 0x1e, 0xdb, 0x72, 0xba, 0x76, 0x90, 0x2f, 0xa3, 0x83, + 0x4c, 0xcc, 0x0c, 0xc4, 0x82, 0x27, 0x9d, 0x2f, 0x80, 0x84, 0x7c, 0xd0, 0x0c, 0x68, 0x35, 0x71, + 0x1b, 0x91, 0x40, 0x83, 0x2f, 0x28, 0x01, 0xf1, 0xa0, 0xe9, 0x70, 0x77, 0x6c, 0x5b, 0x76, 0xb3, + 0xc0, 0xe0, 0xa1, 0xad, 0x2b, 0xbf, 0xc3, 0xfd, 0xa0, 0x7e, 0x1e, 0x4f, 0x85, 0x37, 0xb3, 0xe5, + 0x2a, 0x47, 0x26, 0xd5, 0xda, 0x03, 0xd7, 0xd7, 0xee, 0x41, 0x97, 0xd8, 0x6a, 0x5b, 0xcc, 0x0e, + 0xb8, 0x4b, 0x07, 0xc5, 0x22, 0xf7, 0x1a, 0x1c, 0xfb, 0x84, 0x20, 0xd8, 0xbe, 0x89, 0xcb, 0x47, + 0xe7, 0x01, 0xf3, 0x8f, 0x3d, 0x26, 0xf1, 0x96, 0xcc, 0x68, 0x41, 0x33, 0xc2, 0xe1, 0xfd, 0xfc, + 0x4d, 0x1a, 0xd0, 0x7c, 0x73, 0x07, 0xea, 0x3e, 0x55, 0x02, 0x60, 0xe6, 0x45, 0xfc, 0xf9, 0xc0, + 0xea, 0xb0, 0xba, 0xc7, 0x3a, 0xd4, 0xb2, 0x2d, 0xbb, 0x05, 0xb6, 0x3e, 0xc7, 0x57, 0x4d, 0xb5, + 0xc8, 0x03, 0x2d, 0x8c, 0x8b, 0xf2, 0x2a, 0x99, 0xf2, 0x41, 0x5b, 0xc7, 0xd5, 0x30, 0x33, 0xb4, + 0xc5, 0xf6, 0x24, 0xf5, 0x78, 0x60, 0x1f, 0x3b, 0xf9, 0x80, 0x7e, 0x82, 0xf0, 0xec, 0x40, 0x61, + 0x00, 0xf7, 0x03, 0x3c, 0x0d, 0xe5, 0x5f, 0x8f, 0xd3, 0x1a, 0x38, 0x88, 0x4b, 0xe9, 0x07, 0x25, + 0xa9, 0x0f, 0x0e, 0x0c, 0xf1, 0x13, 0x6f, 0xb4, 0x53, 0x3c, 0xaf, 0xce, 0xe5, 0x60, 0x27, 0x46, + 0xd5, 0x05, 0xfe, 0x81, 0xb0, 0x96, 0x65, 0x2d, 0xd7, 0xeb, 0xd2, 0x68, 0xbc, 0x1e, 0x5d, 0xc7, + 0x78, 0x1b, 0xaa, 0x9f, 0x9f, 0x9a, 0x43, 0xb7, 0xed, 0xd0, 0xe6, 0xd6, 0x09, 0x6b, 0x9c, 0xe6, + 0x66, 0x7f, 0x40, 0x3d, 0xad, 0xc1, 0x99, 0x48, 0xa8, 0x8b, 0x8e, 0xfb, 0x19, 0x6d, 0x5b, 0x4d, + 0xa1, 0xed, 0xba, 0x29, 0x1f, 0xb4, 0xb7, 0xa0, 0x9f, 0xec, 0x79, 0x56, 0x83, 0xf5, 0xd8, 0xaf, + 0xe0, 0xeb, 0xcd, 0xae, 0x17, 0xa5, 0xad, 0x6c, 0x86, 0xcf, 0x03, 0x10, 0xa8, 0x5e, 0x13, 0xd7, + 0x15, 0x19, 0x77, 0xf9, 0x2a, 0x1c, 0x10, 0xf9, 0xa0, 0x7d, 0x55, 0x4d, 0x09, 0x82, 0xc5, 0xf7, + 0x8f, 0x86, 0x9a, 0xa5, 0x2e, 0xf7, 0xfe, 0xd7, 0xa0, 0xf4, 0x41, 0x72, 0xa8, 0x1b, 0x74, 0xb3, + 0xf7, 0x6a, 0x48, 0x4e, 0xa8, 0x15, 0x18, 0x8d, 0xa0, 0x12, 0x0e, 0x02, 0x1a, 0x84, 0x30, 0xfe, + 0xa2, 0x26, 0xcb, 0xde, 0x97, 0x51, 0xab, 0x71, 0xbb, 0x5e, 0xe3, 0x84, 0xfa, 0x4c, 0x86, 0x76, + 0xcc, 0x8c, 0x16, 0x08, 0xc1, 0x63, 0x5d, 0xfe, 0xe2, 0xaa, 0x78, 0x21, 0xfe, 0x26, 0xbb, 0xb8, + 0xcc, 0x7f, 0x4d, 0x1e, 0x4a, 0x71, 0x6f, 0x4f, 0x6d, 0xea, 0x1c, 0xcf, 0xbf, 0x1f, 0xcf, 0x2e, + 0xb4, 0xac, 0xe0, 0xa4, 0x7b, 0xa4, 0x37, 0x9c, 0x8e, 0x01, 0x9f, 0x4f, 0xe4, 0xcf, 0x8a, 0xdf, + 0x3c, 0x35, 0x82, 0x73, 0x97, 0xf9, 0xfa, 0x9b, 0xac, 0x61, 0x46, 0x0a, 0xc8, 0x1c, 0x9e, 0x94, + 0x1f, 0x41, 0x0e, 0x7d, 0x1e, 0x86, 0x31, 0x61, 0x28, 0xbe, 0x54, 0xfb, 0x69, 0x15, 0x8f, 0x0b, + 0xfc, 0xe4, 0xe7, 0x08, 0x4f, 0xc8, 0x6f, 0x0f, 0x64, 0xc0, 0x49, 0x48, 0x7e, 0xea, 0xa8, 0xdc, + 0x2a, 0xb0, 0x53, 0xc6, 0x42, 0x33, 0xde, 0xfb, 0xe7, 0x7f, 0x3f, 0xb8, 0x7a, 0x8b, 0x2c, 0x1a, + 0x3f, 0xa4, 0x8d, 0x53, 0xda, 0x5e, 0x69, 0x52, 0xc7, 0x90, 0xd2, 0x2b, 0x69, 0x9f, 0x76, 0xc8, + 0x87, 0x08, 0x8f, 0xf1, 0x7a, 0x25, 0x0b, 0x19, 0x46, 0x62, 0xb7, 0x50, 0x65, 0x31, 0x77, 0x1f, + 0x40, 0xd9, 0x11, 0x50, 0x36, 0xc8, 0x1b, 0xb9, 0x50, 0x04, 0xf7, 0x32, 0x2e, 0xe4, 0x75, 0x76, + 0x69, 0x5c, 0x88, 0x11, 0xea, 0xd2, 0xb8, 0x10, 0x43, 0xd3, 0x25, 0xf9, 0x00, 0xe1, 0xeb, 0x82, + 0xe5, 0x6d, 0xb4, 0xdb, 0x64, 0x39, 0xc3, 0x7c, 0x1f, 0xf7, 0xad, 0x7c, 0xbd, 0xd0, 0x5e, 0x80, + 0xab, 0x0b, 0xb8, 0x4b, 0x64, 0xa1, 0x18, 0x5c, 0xf2, 0x3b, 0x84, 0xcb, 0x21, 0x17, 0x26, 0x59, + 0xa6, 0xfa, 0x19, 0xf3, 0x70, 0xb8, 0xb6, 0x05, 0xae, 0xfb, 0xe4, 0xf5, 0x5c, 0x5c, 0x8e, 0xcb, + 0xec, 0x3a, 0xc4, 0xb2, 0x9f, 0x91, 0x5f, 0x92, 0x3f, 0x21, 0x3c, 0x2e, 0x3e, 0x95, 0x90, 0xac, + 0x0c, 0xc6, 0xbf, 0x7c, 0x55, 0x96, 0xf2, 0x37, 0x02, 0xc8, 0x77, 0x04, 0xc8, 0x6f, 0x13, 0x33, + 0xbf, 0xec, 0xb8, 0x5c, 0x0a, 0xbe, 0xc1, 0xe9, 0xff, 0x15, 0xc2, 0xe5, 0xb0, 0x6f, 0x64, 0xe6, + 0xbf, 0x8f, 0x6c, 0x67, 0xc6, 0xb9, 0x9f, 0x66, 0x6b, 0xaf, 0x09, 0x17, 0x5e, 0x26, 0x6b, 0x45, + 0x5c, 0x90, 0x60, 0x8c, 0x8b, 0x30, 0xba, 0x1f, 0x21, 0x3c, 0x15, 0x82, 0xe4, 0x75, 0xaa, 0x67, + 0xe7, 0xb8, 0xbf, 0xd3, 0x56, 0x8c, 0xc2, 0xfb, 0x01, 0x6f, 0x4d, 0xe0, 0x7d, 0x89, 0x2c, 0x17, + 0xc7, 0x4b, 0xfe, 0x8e, 0xf0, 0x64, 0x8c, 0x62, 0x91, 0x95, 0x2c, 0xa3, 0x09, 0x66, 0x5c, 0xd1, + 0x8b, 0x6e, 0x07, 0x88, 0xdf, 0x15, 0x10, 0xf7, 0xc9, 0xc3, 0x5c, 0x88, 0x71, 0x82, 0x27, 0x8b, + 0x43, 0x54, 0xc0, 0xa0, 0x92, 0xf8, 0x3d, 0xc2, 0x37, 0xe2, 0x64, 0x93, 0x07, 0x7c, 0x35, 0x3b, + 0x80, 0x29, 0x1c, 0xb8, 0x52, 0x1b, 0x46, 0x04, 0x7c, 0xba, 0x2b, 0x7c, 0x32, 0xc8, 0xca, 0x50, + 0x3e, 0x91, 0x8f, 0x11, 0xbe, 0x66, 0x02, 0xe1, 0xc9, 0x3a, 0x56, 0x3d, 0xfc, 0x2d, 0xb3, 0xf1, + 0xf7, 0xf2, 0x30, 0xcd, 0x14, 0xb8, 0x76, 0xc9, 0x5b, 0xb9, 0xb8, 0x80, 0x77, 0x15, 0x08, 0xf3, + 0x2f, 0x10, 0xc6, 0x00, 0x9a, 0x47, 0x38, 0xa7, 0x6d, 0xf5, 0x42, 0x7f, 0xa9, 0xd8, 0x66, 0x40, + 0x7f, 0x5b, 0xa0, 0x5f, 0x26, 0x4b, 0x45, 0xd1, 0x93, 0x47, 0x08, 0x97, 0x43, 0x06, 0x96, 0x09, + 0xad, 0x9f, 0x0e, 0x66, 0x42, 0x4b, 0x90, 0xba, 0x21, 0xfa, 0xc2, 0xb1, 0x92, 0x8d, 0xf5, 0x85, + 0x5f, 0x23, 0x8c, 0x23, 0xe2, 0x47, 0xb2, 0x4c, 0x27, 0x38, 0x68, 0x65, 0xa5, 0xe0, 0x6e, 0x40, + 0xba, 0x2e, 0x90, 0xae, 0x91, 0x5a, 0x2e, 0x52, 0xfe, 0x6b, 0xd9, 0xad, 0x18, 0xce, 0x0f, 0xc5, + 0x1d, 0x2b, 0xf9, 0x63, 0x66, 0x8f, 0xed, 0x23, 0xa5, 0x99, 0x3d, 0xb6, 0x9f, 0x90, 0x6a, 0xaf, + 0x0a, 0x84, 0x77, 0xc9, 0x9d, 0x02, 0x77, 0xac, 0xdd, 0x14, 0x77, 0x59, 0x58, 0x9d, 0xbc, 0x79, + 0x91, 0x1d, 0x16, 0xf4, 0x11, 0xce, 0xcc, 0x73, 0x9f, 0xce, 0x6a, 0x33, 0xcf, 0xfd, 0x00, 0x3e, + 0xab, 0x7d, 0x4b, 0x40, 0xdf, 0x24, 0xf7, 0x73, 0xa1, 0xb7, 0x58, 0x50, 0x6f, 0x08, 0x2d, 0x75, + 0x5e, 0x11, 0xf5, 0xfe, 0x92, 0x78, 0x84, 0x30, 0xde, 0x61, 0x01, 0x30, 0x59, 0x92, 0x3d, 0xdc, + 0xc5, 0xe9, 0x71, 0x65, 0xb9, 0xc8, 0x56, 0xc0, 0xfb, 0x86, 0xc0, 0xfb, 0x0a, 0xb9, 0x57, 0x08, + 0xaf, 0x4b, 0xcf, 0xeb, 0x4d, 0x1a, 0xd0, 0x18, 0xcc, 0xbf, 0x21, 0x4c, 0x92, 0xac, 0x8c, 0xac, + 0xe5, 0xd4, 0x64, 0x2a, 0x05, 0xad, 0xdc, 0x1d, 0x52, 0x6a, 0x68, 0x27, 0xe2, 0x4c, 0x33, 0xe6, + 0xc4, 0x5f, 0x11, 0x7e, 0x3e, 0xa9, 0x9f, 0x37, 0xb3, 0x7b, 0xd9, 0xfd, 0x69, 0xb0, 0x2b, 0xdf, + 0x18, 0x5e, 0x70, 0xe8, 0xab, 0x23, 0xee, 0x0d, 0xf9, 0x23, 0xc2, 0x37, 0xfa, 0x18, 0x65, 0x66, + 0xd1, 0xa7, 0x93, 0xd9, 0xcc, 0xa2, 0x1f, 0x40, 0x58, 0x87, 0xe8, 0x28, 0xfc, 0xa8, 0xd6, 0xbb, + 0x42, 0x45, 0xbd, 0x21, 0x20, 0x7e, 0x8c, 0x30, 0x8e, 0x68, 0x68, 0x66, 0xe7, 0x4b, 0x30, 0xdf, + 0xcc, 0xce, 0x97, 0xe4, 0xb6, 0x43, 0x50, 0x0d, 0xc1, 0x7a, 0x25, 0x42, 0xe3, 0x42, 0x91, 0xe9, + 0x4b, 0xe3, 0x42, 0xd0, 0xe7, 0x4b, 0xf2, 0x07, 0x3e, 0x58, 0xf4, 0x32, 0xd5, 0xec, 0xc1, 0x22, + 0x95, 0x36, 0x67, 0x0f, 0x16, 0xe9, 0x54, 0x5a, 0x7b, 0x45, 0xf8, 0x70, 0x87, 0xac, 0xe6, 0x0f, + 0x16, 0xf2, 0x5f, 0xdc, 0xa3, 0xb1, 0xee, 0x37, 0x08, 0x4f, 0xc5, 0x99, 0x71, 0xe6, 0xf0, 0x99, + 0xc2, 0xaf, 0x33, 0x87, 0xcf, 0x34, 0xca, 0xad, 0xbd, 0x2c, 0xc0, 0xde, 0x26, 0x7a, 0xa1, 0xab, + 0x86, 0xb6, 0x58, 0x9d, 0x4f, 0x42, 0xfe, 0xe6, 0xee, 0x27, 0x4f, 0xaa, 0xe8, 0xd3, 0x27, 0x55, + 0xf4, 0x9f, 0x27, 0x55, 0xf4, 0xfe, 0xd3, 0xea, 0x95, 0x4f, 0x9f, 0x56, 0xaf, 0xfc, 0xeb, 0x69, + 0xf5, 0xca, 0x3b, 0xb5, 0x18, 0xef, 0x96, 0x3a, 0x77, 0xe9, 0x91, 0xdf, 0xab, 0xf3, 0xc7, 0xa1, + 0x56, 0xc1, 0xc3, 0x8f, 0x26, 0xc4, 0xff, 0x0f, 0xb8, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x5c, 0xbe, 0x62, 0x88, 0x54, 0x21, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2096,6 +2379,10 @@ type QueryClient interface { File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) // Queries a list of File items. FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) + // Queries a list of File items. + OpenFiles(ctx context.Context, in *QueryOpenFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) + // Queries a list of File items. + Proof(ctx context.Context, in *QueryProofRequest, opts ...grpc.CallOption) (*QueryProofResponse, error) // Queries a Providers by index. Providers(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) // Queries a list of Providers items. @@ -2167,29 +2454,47 @@ func (c *queryClient) FilesAll(ctx context.Context, in *QueryAllFilesRequest, op return out, nil } -func (c *queryClient) Providers(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) { - out := new(QueryProviderResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Providers", in, out, opts...) +func (c *queryClient) OpenFiles(ctx context.Context, in *QueryOpenFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { + out := new(QueryAllFilesResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/OpenFiles", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ProvidersAll(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) { - out := new(QueryAllProvidersResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ProvidersAll", in, out, opts...) +func (c *queryClient) Proof(ctx context.Context, in *QueryProofRequest, opts ...grpc.CallOption) (*QueryProofResponse, error) { + out := new(QueryProofResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Proof", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Attestation(ctx context.Context, in *QueryAttestationRequest, opts ...grpc.CallOption) (*QueryAttestationResponse, error) { - out := new(QueryAttestationResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Attestation", in, out, opts...) - if err != nil { - return nil, err +func (c *queryClient) Providers(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) { + out := new(QueryProviderResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Providers", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ProvidersAll(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) { + out := new(QueryAllProvidersResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ProvidersAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) Attestation(ctx context.Context, in *QueryAttestationRequest, opts ...grpc.CallOption) (*QueryAttestationResponse, error) { + out := new(QueryAttestationResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Attestation", in, out, opts...) + if err != nil { + return nil, err } return out, nil } @@ -2328,6 +2633,10 @@ type QueryServer interface { File(context.Context, *QueryFileRequest) (*QueryFileResponse, error) // Queries a list of File items. FilesAll(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) + // Queries a list of File items. + OpenFiles(context.Context, *QueryOpenFilesRequest) (*QueryAllFilesResponse, error) + // Queries a list of File items. + Proof(context.Context, *QueryProofRequest) (*QueryProofResponse, error) // Queries a Providers by index. Providers(context.Context, *QueryProviderRequest) (*QueryProviderResponse, error) // Queries a list of Providers items. @@ -2377,6 +2686,12 @@ func (*UnimplementedQueryServer) File(ctx context.Context, req *QueryFileRequest func (*UnimplementedQueryServer) FilesAll(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FilesAll not implemented") } +func (*UnimplementedQueryServer) OpenFiles(ctx context.Context, req *QueryOpenFilesRequest) (*QueryAllFilesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method OpenFiles not implemented") +} +func (*UnimplementedQueryServer) Proof(ctx context.Context, req *QueryProofRequest) (*QueryProofResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Proof not implemented") +} func (*UnimplementedQueryServer) Providers(ctx context.Context, req *QueryProviderRequest) (*QueryProviderResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Providers not implemented") } @@ -2487,6 +2802,42 @@ func _Query_FilesAll_Handler(srv interface{}, ctx context.Context, dec func(inte return interceptor(ctx, in, info, handler) } +func _Query_OpenFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryOpenFilesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).OpenFiles(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/OpenFiles", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).OpenFiles(ctx, req.(*QueryOpenFilesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Proof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryProofRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Proof(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/Proof", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Proof(ctx, req.(*QueryProofRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_Providers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryProviderRequest) if err := dec(in); err != nil { @@ -2809,6 +3160,14 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "FilesAll", Handler: _Query_FilesAll_Handler, }, + { + MethodName: "OpenFiles", + Handler: _Query_OpenFiles_Handler, + }, + { + MethodName: "Proof", + Handler: _Query_Proof_Handler, + }, { MethodName: "Providers", Handler: _Query_Providers_Handler, @@ -2938,6 +3297,179 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *QueryProofRequest) 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 *QueryProofRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryProofRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Start != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Start)) + i-- + dAtA[i] = 0x20 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x1a + } + if len(m.Merkle) > 0 { + i -= len(m.Merkle) + copy(dAtA[i:], m.Merkle) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Merkle))) + i-- + dAtA[i] = 0x12 + } + if len(m.ProviderAddress) > 0 { + i -= len(m.ProviderAddress) + copy(dAtA[i:], m.ProviderAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ProviderAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryProofResponse) 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 *QueryProofResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryProofResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Proof.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryProofsByAddressRequest) 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 *QueryProofsByAddressRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryProofsByAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.ProviderAddress) > 0 { + i -= len(m.ProviderAddress) + copy(dAtA[i:], m.ProviderAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ProviderAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryProofsByAddressResponse) 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 *QueryProofsByAddressResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryProofsByAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Proof) > 0 { + for iNdEx := len(m.Proof) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Proof[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *QueryFileRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3048,6 +3580,48 @@ func (m *QueryAllFilesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *QueryOpenFilesRequest) 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 *QueryOpenFilesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryOpenFilesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.ProviderAddress) > 0 { + i -= len(m.ProviderAddress) + copy(dAtA[i:], m.ProviderAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ProviderAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *QueryAllFilesResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4317,12 +4891,16 @@ func (m *QueryParamsResponse) Size() (n int) { return n } -func (m *QueryFileRequest) Size() (n int) { +func (m *QueryProofRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l + l = len(m.ProviderAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } l = len(m.Merkle) if l > 0 { n += 1 + l + sovQuery(uint64(l)) @@ -4337,23 +4915,27 @@ func (m *QueryFileRequest) Size() (n int) { return n } -func (m *QueryFileResponse) Size() (n int) { +func (m *QueryProofResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.File.Size() + l = m.Proof.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllFilesRequest) Size() (n int) { +func (m *QueryProofsByAddressRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l + l = len(m.ProviderAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } if m.Pagination != nil { l = m.Pagination.Size() n += 1 + l + sovQuery(uint64(l)) @@ -4361,14 +4943,14 @@ func (m *QueryAllFilesRequest) Size() (n int) { return n } -func (m *QueryAllFilesResponse) Size() (n int) { +func (m *QueryProofsByAddressResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Files) > 0 { - for _, e := range m.Files { + if len(m.Proof) > 0 { + for _, e := range m.Proof { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -4380,7 +4962,87 @@ func (m *QueryAllFilesResponse) Size() (n int) { return n } -func (m *QueryProviderRequest) Size() (n int) { +func (m *QueryFileRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Merkle) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Start != 0 { + n += 1 + sovQuery(uint64(m.Start)) + } + return n +} + +func (m *QueryFileResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.File.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAllFilesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryOpenFilesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ProviderAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllFilesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Files) > 0 { + for _, e := range m.Files { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryProviderRequest) Size() (n int) { if m == nil { return 0 } @@ -5005,7 +5667,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { +func (m *QueryProofRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5028,13 +5690,45 @@ func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFileRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryProofRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFileRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryProofRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProviderAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProviderAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) } @@ -5068,7 +5762,7 @@ func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { m.Merkle = []byte{} } iNdEx = postIndex - case 2: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) } @@ -5100,7 +5794,7 @@ func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { } m.Owner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 4: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) } @@ -5140,7 +5834,7 @@ func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { +func (m *QueryProofResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5163,15 +5857,15 @@ func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFileResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryProofResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryProofResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field File", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -5198,7 +5892,7 @@ func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.File.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Proof.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -5223,7 +5917,7 @@ func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryProofsByAddressRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5246,13 +5940,587 @@ func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllFilesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryProofsByAddressRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllFilesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryProofsByAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProviderAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProviderAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryProofsByAddressResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryProofsByAddressResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryProofsByAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Proof = append(m.Proof, FileProof{}) + if err := m.Proof[len(m.Proof)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryFileRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryFileRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merkle", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Merkle = append(m.Merkle[:0], dAtA[iNdEx:postIndex]...) + if m.Merkle == nil { + m.Merkle = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType) + } + m.Start = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Start |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryFileResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field File", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.File.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllFilesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllFilesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryOpenFilesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryOpenFilesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryOpenFilesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProviderAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProviderAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) } diff --git a/x/storage/types/query.pb.gw.go b/x/storage/types/query.pb.gw.go index 9615b8020..7a546bc2c 100644 --- a/x/storage/types/query.pb.gw.go +++ b/x/storage/types/query.pb.gw.go @@ -51,10 +51,6 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } -var ( - filter_Query_File_0 = &utilities.DoubleArray{Encoding: map[string]int{"merkle": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryFileRequest var metadata runtime.ServerMetadata @@ -77,11 +73,26 @@ func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, clie return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_File_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["start"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "start") + } + + protoReq.Start, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) } msg, err := client.File(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -111,11 +122,26 @@ func local_request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_File_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["start"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "start") + } + + protoReq.Start, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) } msg, err := server.File(ctx, &protoReq) @@ -159,6 +185,198 @@ func local_request_Query_FilesAll_0(ctx context.Context, marshaler runtime.Marsh } +var ( + filter_Query_OpenFiles_0 = &utilities.DoubleArray{Encoding: map[string]int{"provider_address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_OpenFiles_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryOpenFilesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["provider_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_address") + } + + protoReq.ProviderAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_OpenFiles_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.OpenFiles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_OpenFiles_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryOpenFilesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["provider_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_address") + } + + protoReq.ProviderAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_OpenFiles_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.OpenFiles(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_Proof_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryProofRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["provider_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_address") + } + + protoReq.ProviderAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_address", err) + } + + val, ok = pathParams["merkle"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") + } + + protoReq.Merkle, err = runtime.Bytes(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) + } + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["start"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "start") + } + + protoReq.Start, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) + } + + msg, err := client.Proof(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Proof_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryProofRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["provider_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_address") + } + + protoReq.ProviderAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_address", err) + } + + val, ok = pathParams["merkle"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "merkle") + } + + protoReq.Merkle, err = runtime.Bytes(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "merkle", err) + } + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["start"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "start") + } + + protoReq.Start, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) + } + + msg, err := server.Proof(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_Providers_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryProviderRequest var metadata runtime.ServerMetadata @@ -1144,6 +1362,52 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_OpenFiles_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_OpenFiles_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_OpenFiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Proof_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_Proof_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_Proof_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_Providers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1636,6 +1900,46 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_OpenFiles_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_OpenFiles_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_OpenFiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Proof_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_Proof_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_Proof_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_Providers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1982,10 +2286,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_File_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "files", "merkle"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_File_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"jackal-dao", "canine-chain", "storage", "files", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_FilesAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "files"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_OpenFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "open_files", "provider_address"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_Proof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal-dao", "canine-chain", "storage", "proof", "provider_address", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Providers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "providers", "address"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_ProvidersAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "providers"}, "", runtime.AssumeColonVerbOpt(false))) @@ -2028,6 +2336,10 @@ var ( forward_Query_FilesAll_0 = runtime.ForwardResponseMessage + forward_Query_OpenFiles_0 = runtime.ForwardResponseMessage + + forward_Query_Proof_0 = runtime.ForwardResponseMessage + forward_Query_Providers_0 = runtime.ForwardResponseMessage forward_Query_ProvidersAll_0 = runtime.ForwardResponseMessage diff --git a/x/storage/utils/trees.go b/x/storage/utils/trees.go new file mode 100644 index 000000000..e5859b159 --- /dev/null +++ b/x/storage/utils/trees.go @@ -0,0 +1,61 @@ +package utils + +import ( + "crypto/sha256" + "encoding/hex" + "fmt" + "io" + + "github.com/wealdtech/go-merkletree" + "github.com/wealdtech/go-merkletree/sha3" +) + +func BuildTree(buf io.Reader, chunkSize int64) ([]byte, []byte, [][]byte, int, error) { + size := 0 + + data := make([][]byte, 0) + chunks := make([][]byte, 0) + + index := 0 + + for { + b := make([]byte, chunkSize) + read, _ := buf.Read(b) + + if read == 0 { + break + } + + b = b[:read] + + size += read + + chunks = append(chunks, b) + + hexedData := hex.EncodeToString(b) + + hash := sha256.New() + hash.Write([]byte(fmt.Sprintf("%d%s", index, hexedData))) // appending the index and the data + hashName := hash.Sum(nil) + + data = append(data, hashName) + + index++ + } + + tree, err := merkletree.NewUsing(data, sha3.New512(), false) + if err != nil { + return nil, nil, nil, 0, err + } + + r := tree.Root() + + exportedTree, err := tree.Export() + if err != nil { + return nil, nil, nil, 0, err + } + + tree = nil // for GC + + return r, exportedTree, chunks, size, nil +} From 01cb4a25cc22e621fdf3298f14e04a7d22b0b28d Mon Sep 17 00:00:00 2001 From: marston Date: Tue, 24 Oct 2023 18:36:07 -0400 Subject: [PATCH 031/256] cleaning item jankiness --- proto/canine_chain/storage/tx.proto | 2 +- x/storage/keeper/msg_server_proofs_test.go | 18 +-- x/storage/types/file_deal.go | 6 +- x/storage/types/file_deal_test.go | 5 +- x/storage/types/message_postproof.go | 2 +- x/storage/types/message_postproof_test.go | 4 +- x/storage/types/tx.pb.go | 142 +++++++++++---------- 7 files changed, 90 insertions(+), 89 deletions(-) diff --git a/proto/canine_chain/storage/tx.proto b/proto/canine_chain/storage/tx.proto index b28cd3d90..31d0a777e 100644 --- a/proto/canine_chain/storage/tx.proto +++ b/proto/canine_chain/storage/tx.proto @@ -46,7 +46,7 @@ message MsgPostFileResponse { message MsgPostProof { string creator = 1; - string item = 2; + bytes item = 2; bytes hash_list = 3; bytes merkle = 4; string owner = 5; diff --git a/x/storage/keeper/msg_server_proofs_test.go b/x/storage/keeper/msg_server_proofs_test.go index f751229ee..1b2ac17a9 100644 --- a/x/storage/keeper/msg_server_proofs_test.go +++ b/x/storage/keeper/msg_server_proofs_test.go @@ -40,7 +40,7 @@ const ( CID2 = "jklc15ftkghzrx2ywyrpr6n7ge6prcej43efe3jvtzsxhenann69rcu8q7jl5uh" ) -func CreateMerkleForProof(file TestFile) (string, []byte, error) { +func CreateMerkleForProof(file TestFile) ([]byte, []byte, error) { f := []byte(file.Data) index := 0 var data [][]byte @@ -49,7 +49,7 @@ func CreateMerkleForProof(file TestFile) (string, []byte, error) { h := sha256.New() _, err := io.WriteString(h, fmt.Sprintf("%d%x", index, f)) if err != nil { - return "", nil, err + return nil, nil, err } hashName := h.Sum(nil) @@ -57,24 +57,24 @@ func CreateMerkleForProof(file TestFile) (string, []byte, error) { tree, err := merkletree.NewUsing(data, sha3.New512(), false) if err != nil { - return "", nil, err + return nil, nil, err } h = sha256.New() _, err = io.WriteString(h, fmt.Sprintf("%d%x", index, item)) if err != nil { - return "", nil, err + return nil, nil, err } ditem := h.Sum(nil) proof, err := tree.GenerateProof(ditem, 0) if err != nil { - return "", nil, err + return nil, nil, err } jproof, err := json.Marshal(*proof) if err != nil { - return "", nil, err + return nil, nil, err } e := hex.EncodeToString(tree.Root()) @@ -83,14 +83,14 @@ func CreateMerkleForProof(file TestFile) (string, []byte, error) { verified, err := merkletree.VerifyProofUsing(ditem, false, proof, [][]byte{k}, sha3.New512()) if err != nil { - return "", nil, err + return nil, nil, err } if !verified { - return "", nil, types.ErrCannotVerifyProof + return nil, nil, types.ErrCannotVerifyProof } - return fmt.Sprintf("%x", item), jproof, nil + return item, jproof, nil } func makeContract(file TestFile) ([]byte, int64, error) { diff --git a/x/storage/types/file_deal.go b/x/storage/types/file_deal.go index 98e0bea30..095698c22 100644 --- a/x/storage/types/file_deal.go +++ b/x/storage/types/file_deal.go @@ -14,9 +14,9 @@ import ( ) // VerifyProof checks whether a proof is valid against a file -func (f *UnifiedFile) VerifyProof(proofData []byte, chunk int64, item string) bool { +func (f *UnifiedFile) VerifyProof(proofData []byte, chunk int64, item []byte) bool { h := sha256.New() - _, err := io.WriteString(h, fmt.Sprintf("%d%s", chunk, item)) + _, err := io.WriteString(h, fmt.Sprintf("%d%x", chunk, item)) if err != nil { return false } @@ -143,7 +143,7 @@ func (f *UnifiedFile) SetProven(ctx sdk.Context, k ProofLoader, prover string, c } // Prove checks the validity of a proof and updates the proof window & picks a new chunk to verify -func (f *UnifiedFile) Prove(ctx sdk.Context, k ProofLoader, prover string, proofData []byte, chunk int64, item string, chunkSize int64) error { +func (f *UnifiedFile) Prove(ctx sdk.Context, k ProofLoader, prover string, proofData []byte, chunk int64, item []byte, chunkSize int64) error { valid := f.VerifyProof(proofData, chunk, item) if !valid { diff --git a/x/storage/types/file_deal_test.go b/x/storage/types/file_deal_test.go index 1274351ac..d16685c23 100644 --- a/x/storage/types/file_deal_test.go +++ b/x/storage/types/file_deal_test.go @@ -76,14 +76,13 @@ func TestFileProof(t *testing.T) { require.Equal(t, true, verified) - item := fmt.Sprintf("%x", i) proofData := jproof var chunk int64 - validProof := f.VerifyProof(proofData, chunk, item) + validProof := f.VerifyProof(proofData, chunk, i) require.Equal(t, true, validProof) - validProof = f.VerifyProof(proofData, chunk+1, item) + validProof = f.VerifyProof(proofData, chunk+1, i) require.Equal(t, false, validProof) } diff --git a/x/storage/types/message_postproof.go b/x/storage/types/message_postproof.go index 2336b9bb8..131fbe1b4 100644 --- a/x/storage/types/message_postproof.go +++ b/x/storage/types/message_postproof.go @@ -12,7 +12,7 @@ const TypeMsgPostProof = "post_proof" var _ sdk.Msg = &MsgPostProof{} -func NewMsgPostProof(creator string, merkle []byte, owner string, start int64, item string, hashList []byte) *MsgPostProof { +func NewMsgPostProof(creator string, merkle []byte, owner string, start int64, item []byte, hashList []byte) *MsgPostProof { return &MsgPostProof{ Creator: creator, Item: item, diff --git a/x/storage/types/message_postproof_test.go b/x/storage/types/message_postproof_test.go index a48183f33..4f9a094d0 100644 --- a/x/storage/types/message_postproof_test.go +++ b/x/storage/types/message_postproof_test.go @@ -17,7 +17,7 @@ func TestMsgPostProof_ValidateBasic(t *testing.T) { name: "invalid address", msg: MsgPostProof{ Creator: "invalid_address", - Item: "hex", + Item: []byte("hex"), HashList: []byte{}, Merkle: []byte{}, Owner: "owner", @@ -28,7 +28,7 @@ func TestMsgPostProof_ValidateBasic(t *testing.T) { name: "valid address", msg: MsgPostProof{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Item: "hex", + Item: []byte("hex"), HashList: []byte{}, Merkle: []byte{}, Owner: "owner", diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index c64b49d53..ced40f6ae 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -173,7 +173,7 @@ func (m *MsgPostFileResponse) GetProviderIps() []string { type MsgPostProof struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Item string `protobuf:"bytes,2,opt,name=item,proto3" json:"item,omitempty"` + Item []byte `protobuf:"bytes,2,opt,name=item,proto3" json:"item,omitempty"` HashList []byte `protobuf:"bytes,3,opt,name=hash_list,json=hashList,proto3" json:"hash_list,omitempty"` Merkle []byte `protobuf:"bytes,4,opt,name=merkle,proto3" json:"merkle,omitempty"` Owner string `protobuf:"bytes,5,opt,name=owner,proto3" json:"owner,omitempty"` @@ -220,11 +220,11 @@ func (m *MsgPostProof) GetCreator() string { return "" } -func (m *MsgPostProof) GetItem() string { +func (m *MsgPostProof) GetItem() []byte { if m != nil { return m.Item } - return "" + return nil } func (m *MsgPostProof) GetHashList() []byte { @@ -1882,7 +1882,7 @@ var fileDescriptor_2194ba0b2c3d6a97 = []byte{ 0x30, 0x30, 0xc0, 0xe0, 0xd9, 0x58, 0x1b, 0x47, 0x8d, 0xad, 0x55, 0x77, 0xd7, 0x69, 0xdc, 0x0b, 0x03, 0x67, 0x0e, 0xfc, 0x81, 0x1e, 0x38, 0xf0, 0x5f, 0x38, 0xf6, 0xc8, 0x91, 0x49, 0x7e, 0x00, 0x7f, 0x81, 0xd1, 0x6a, 0xb5, 0x92, 0x1c, 0x49, 0x76, 0x3a, 0x74, 0xe0, 0xe6, 0x7d, 0xfb, 0xed, - 0xfb, 0xbe, 0xf7, 0xde, 0x7a, 0xdf, 0x1b, 0xc1, 0x4a, 0x07, 0x79, 0xae, 0x87, 0xdb, 0x9d, 0x23, + 0xfb, 0xde, 0xf7, 0xde, 0x7a, 0xdf, 0x1b, 0xc1, 0x4a, 0x07, 0x79, 0xae, 0x87, 0xdb, 0x9d, 0x23, 0xe4, 0x7a, 0x4d, 0xc6, 0x09, 0x45, 0x5d, 0xdc, 0xe4, 0xa7, 0x0d, 0x9f, 0x12, 0x4e, 0xf4, 0xc5, 0xe4, 0x76, 0x43, 0x6e, 0x5b, 0x7f, 0x6b, 0x70, 0xb5, 0xc5, 0xba, 0xbb, 0x84, 0xf1, 0xa7, 0x6e, 0x0f, 0xeb, 0x06, 0xcc, 0x76, 0x28, 0x46, 0x9c, 0x50, 0x43, 0x5b, 0xd3, 0x36, 0xaa, 0x76, 0xb4, @@ -1891,67 +1891,67 @@ var fileDescriptor_2194ba0b2c3d6a97 = []byte{ 0xae, 0x04, 0x86, 0x3d, 0xf7, 0x15, 0xd6, 0xef, 0xc2, 0xbc, 0x4f, 0x09, 0x39, 0x6c, 0xbb, 0x1e, 0xc7, 0xf4, 0x04, 0xf5, 0x8c, 0xb2, 0x40, 0xcc, 0x09, 0xeb, 0xb6, 0x34, 0xea, 0x2b, 0x00, 0x21, 0x8c, 0x0f, 0x7d, 0x6c, 0x4c, 0x0b, 0x48, 0x55, 0x58, 0xf6, 0x87, 0x3e, 0x0e, 0xb6, 0xfb, 0xe8, - 0xb4, 0x2d, 0x0c, 0xcc, 0x98, 0x09, 0xb7, 0xfb, 0xe8, 0x74, 0x57, 0x18, 0x02, 0xcd, 0xf8, 0xd4, - 0x77, 0x29, 0x66, 0xc6, 0xac, 0xd8, 0x8b, 0x96, 0xba, 0x0e, 0x65, 0x8f, 0x70, 0x6c, 0x54, 0x44, - 0x28, 0xe2, 0xb7, 0xf5, 0x09, 0x5c, 0x4f, 0x04, 0x6c, 0x63, 0xe6, 0x13, 0x8f, 0x61, 0x7d, 0x1d, - 0x6a, 0x3e, 0x25, 0x27, 0xae, 0x83, 0x69, 0xdb, 0xf5, 0x99, 0xa1, 0xad, 0x95, 0x36, 0xaa, 0xf6, - 0xd5, 0xc8, 0xb6, 0xed, 0x33, 0xeb, 0xb5, 0x06, 0x35, 0x79, 0x54, 0x30, 0x17, 0x24, 0x4b, 0x87, - 0xb2, 0xcb, 0x71, 0x5f, 0xa4, 0xaa, 0x6a, 0x8b, 0xdf, 0x41, 0xa2, 0x8e, 0x10, 0x3b, 0x6a, 0xf7, - 0x5c, 0xc6, 0x45, 0xa2, 0x6a, 0x76, 0x25, 0x30, 0xec, 0xb8, 0x8c, 0x27, 0xb2, 0x5b, 0x4e, 0x65, - 0x77, 0x11, 0xa6, 0xc9, 0x4b, 0x0f, 0x53, 0x91, 0x94, 0xaa, 0x1d, 0x2e, 0x02, 0x2b, 0xe3, 0x88, - 0x72, 0x99, 0x8b, 0x70, 0x61, 0xed, 0xc3, 0x62, 0x52, 0x9e, 0x0a, 0xcd, 0x80, 0x59, 0x36, 0xe8, - 0x74, 0x30, 0x63, 0x42, 0x66, 0xc5, 0x8e, 0x96, 0xba, 0x05, 0x35, 0x4c, 0x29, 0xa1, 0x2d, 0xcc, - 0x18, 0xea, 0x62, 0x29, 0x37, 0x65, 0xb3, 0xbe, 0x86, 0xb9, 0x16, 0xeb, 0x3e, 0xc1, 0x3d, 0xcc, - 0xf1, 0x5b, 0x5e, 0x11, 0x25, 0xb7, 0x94, 0x94, 0x7b, 0x13, 0x96, 0x52, 0x8e, 0x23, 0xbd, 0xd6, - 0xa7, 0xb0, 0xd0, 0x62, 0xdd, 0x3d, 0x1c, 0x84, 0x11, 0x26, 0x7f, 0xb7, 0x80, 0x74, 0x1e, 0xa6, - 0x5c, 0x5f, 0x2a, 0x9f, 0x72, 0x7d, 0xcb, 0x04, 0x63, 0xf4, 0xb4, 0xf2, 0xfc, 0x4c, 0x50, 0x26, - 0xf6, 0x9e, 0xe1, 0xe1, 0x01, 0x62, 0x45, 0x31, 0x19, 0x30, 0x7b, 0x1c, 0x82, 0x24, 0x47, 0xb4, - 0xb4, 0x56, 0x61, 0x25, 0xd3, 0x99, 0x62, 0xfb, 0x7c, 0x54, 0xc9, 0x3e, 0xe1, 0xa8, 0xc7, 0x7c, - 0xd4, 0x29, 0x22, 0x0c, 0x92, 0x15, 0x40, 0x24, 0x5d, 0xb8, 0xb0, 0x2c, 0x58, 0xcb, 0xf3, 0xa5, - 0xf8, 0xbe, 0x10, 0x95, 0xda, 0x72, 0x9c, 0xcf, 0x7a, 0xc8, 0xed, 0x63, 0x5a, 0x40, 0x72, 0x07, - 0xe6, 0x3a, 0x01, 0xa8, 0x8d, 0x1c, 0x87, 0x06, 0x17, 0x43, 0x56, 0x5e, 0x18, 0xb7, 0x42, 0x9b, - 0x2c, 0x50, 0xec, 0x4f, 0x11, 0x7d, 0x29, 0x0a, 0x64, 0xe3, 0x3e, 0x39, 0xc1, 0xff, 0x12, 0x57, - 0x58, 0xb5, 0x94, 0x4b, 0x45, 0x37, 0x80, 0xf7, 0x5a, 0xac, 0xbb, 0xed, 0xb9, 0x2a, 0xf8, 0xc9, + 0xb4, 0x2d, 0x0c, 0xcc, 0x98, 0x09, 0xb7, 0xfb, 0xe8, 0x74, 0x57, 0x18, 0x82, 0x98, 0xf1, 0xa9, + 0xef, 0x52, 0xcc, 0x8c, 0x59, 0xb1, 0x17, 0x2d, 0x75, 0x1d, 0xca, 0x1e, 0xe1, 0xd8, 0xa8, 0x08, + 0x29, 0xe2, 0xb7, 0xf5, 0x09, 0x5c, 0x4f, 0x08, 0xb6, 0x31, 0xf3, 0x89, 0xc7, 0xb0, 0xbe, 0x0e, + 0x35, 0x9f, 0x92, 0x13, 0xd7, 0xc1, 0xb4, 0xed, 0xfa, 0xcc, 0xd0, 0xd6, 0x4a, 0x1b, 0x55, 0xfb, + 0x6a, 0x64, 0xdb, 0xf6, 0x99, 0xf5, 0x5a, 0x83, 0x9a, 0x3c, 0x2a, 0x98, 0x0b, 0x92, 0xa5, 0x43, + 0xd9, 0xe5, 0xb8, 0x2f, 0x53, 0x25, 0x7e, 0x07, 0x89, 0x3a, 0x42, 0xec, 0xa8, 0xdd, 0x73, 0x19, + 0x17, 0x89, 0xaa, 0xd9, 0x95, 0xc0, 0xb0, 0xe3, 0x32, 0x9e, 0xc8, 0x6e, 0x39, 0x95, 0xdd, 0x45, + 0x98, 0x26, 0x2f, 0x3d, 0x4c, 0x45, 0x52, 0xaa, 0x76, 0xb8, 0x08, 0xac, 0x8c, 0x23, 0xca, 0x65, + 0x2e, 0xc2, 0x85, 0xb5, 0x0f, 0x8b, 0xc9, 0xf0, 0x94, 0x34, 0x03, 0x66, 0xd9, 0xa0, 0xd3, 0xc1, + 0x8c, 0x89, 0x30, 0x2b, 0x76, 0xb4, 0xd4, 0x2d, 0xa8, 0x61, 0x4a, 0x09, 0x6d, 0x61, 0xc6, 0x50, + 0x37, 0xac, 0x6c, 0xd5, 0x4e, 0xd9, 0xac, 0xaf, 0x61, 0xae, 0xc5, 0xba, 0x4f, 0x70, 0x0f, 0x73, + 0xfc, 0x96, 0x57, 0x44, 0x85, 0x5b, 0x4a, 0x86, 0x7b, 0x13, 0x96, 0x52, 0x8e, 0xa3, 0x78, 0xad, + 0x4f, 0x61, 0xa1, 0xc5, 0xba, 0x7b, 0x38, 0x90, 0x11, 0x26, 0x7f, 0xb7, 0x80, 0x74, 0x1e, 0xa6, + 0x5c, 0x5f, 0x46, 0x3e, 0xe5, 0xfa, 0x96, 0x09, 0xc6, 0xe8, 0x69, 0xe5, 0xf9, 0x99, 0xa0, 0x4c, + 0xec, 0x3d, 0xc3, 0xc3, 0x03, 0xc4, 0x8a, 0x34, 0x19, 0x30, 0x7b, 0x1c, 0x82, 0x24, 0x47, 0xb4, + 0xb4, 0x56, 0x61, 0x25, 0xd3, 0x99, 0x62, 0xfb, 0x7c, 0x34, 0x92, 0x7d, 0xc2, 0x51, 0x8f, 0xf9, + 0xa8, 0x53, 0x44, 0x18, 0x24, 0x2b, 0x80, 0x48, 0xba, 0x70, 0x61, 0x59, 0xb0, 0x96, 0xe7, 0x4b, + 0xf1, 0x7d, 0x21, 0x2a, 0xb5, 0xe5, 0x38, 0x9f, 0xf5, 0x90, 0xdb, 0xc7, 0xb4, 0x80, 0xe4, 0x0e, + 0xcc, 0x75, 0x02, 0x50, 0x1b, 0x39, 0x0e, 0x0d, 0x2e, 0x86, 0xac, 0xbc, 0x30, 0x6e, 0x85, 0x36, + 0x59, 0xa0, 0xd8, 0x9f, 0x22, 0xfa, 0x52, 0x14, 0xc8, 0xc6, 0x7d, 0x72, 0x82, 0xff, 0x25, 0xae, + 0xb0, 0x6a, 0x29, 0x97, 0x8a, 0x6e, 0x00, 0xef, 0xb5, 0x58, 0x77, 0xdb, 0x73, 0x95, 0xf8, 0xc9, 0xaf, 0x43, 0xb2, 0x7e, 0xa5, 0x54, 0xfd, 0xf4, 0x3a, 0x00, 0x57, 0x49, 0x14, 0x7f, 0xbb, 0xaa, - 0x9d, 0xb0, 0x58, 0xb7, 0xe0, 0xe6, 0x08, 0xad, 0x52, 0xd4, 0x14, 0x6f, 0xc8, 0xde, 0xd1, 0x80, - 0x3b, 0xe4, 0xa5, 0x37, 0x5e, 0x95, 0xb5, 0x02, 0xcb, 0x19, 0x07, 0x94, 0xbf, 0xdf, 0x34, 0x51, - 0xba, 0xc7, 0x83, 0xe1, 0x5e, 0xf8, 0x2e, 0x17, 0x04, 0xb8, 0x0a, 0x57, 0x0f, 0x09, 0x1d, 0x49, - 0x26, 0x1c, 0x12, 0x2a, 0x53, 0xa9, 0x9b, 0x50, 0x71, 0x06, 0x14, 0x71, 0x97, 0x78, 0x32, 0x64, - 0xb5, 0x0e, 0x2e, 0xd7, 0xc1, 0x90, 0x63, 0x26, 0xc3, 0x0d, 0x17, 0x41, 0x85, 0x7c, 0x34, 0xec, - 0x63, 0x8f, 0xb7, 0x1d, 0xec, 0x91, 0xbe, 0x7c, 0x6c, 0x6a, 0xd2, 0xf8, 0x24, 0xb0, 0xc9, 0xdb, - 0x10, 0x4b, 0x54, 0xe2, 0xbf, 0x17, 0xda, 0x45, 0xd1, 0xf6, 0x38, 0x45, 0xc3, 0x02, 0xed, 0x0b, - 0x50, 0xea, 0xb8, 0x8e, 0xd4, 0x1c, 0xfc, 0x1c, 0x8d, 0xa6, 0x34, 0x1a, 0x8d, 0xa4, 0x8d, 0xbd, - 0x2b, 0xda, 0xdf, 0x35, 0xb8, 0xd6, 0x62, 0xdd, 0xaf, 0xfc, 0x2e, 0x45, 0x0e, 0xfe, 0xff, 0xe6, - 0x6d, 0x19, 0x6e, 0x5d, 0x90, 0xa9, 0x82, 0x18, 0x8a, 0x4d, 0x1b, 0xbf, 0x18, 0x60, 0xc6, 0xb7, - 0x38, 0xc7, 0x8c, 0x0b, 0xc2, 0xa7, 0x84, 0xf6, 0xdf, 0xee, 0xa1, 0x0d, 0xbb, 0x45, 0x29, 0xb3, - 0x5b, 0x94, 0x93, 0xcf, 0xef, 0x0b, 0x58, 0xcf, 0xa5, 0x56, 0xad, 0xe3, 0x36, 0x54, 0xa3, 0x0e, - 0x18, 0xb5, 0xc4, 0xd8, 0x90, 0x6c, 0x2c, 0x53, 0xe9, 0xc6, 0xb2, 0x08, 0xd3, 0xa2, 0x89, 0x44, - 0x42, 0xc4, 0xc2, 0xfa, 0x49, 0x83, 0x6a, 0xf0, 0xa2, 0x08, 0xb2, 0xe2, 0xf0, 0x02, 0x12, 0x4c, - 0x65, 0x95, 0xe4, 0x2a, 0x11, 0x76, 0x29, 0x3b, 0xec, 0x72, 0x66, 0xd8, 0xd3, 0xc9, 0xb0, 0xaf, - 0x8b, 0x5b, 0x13, 0x4a, 0x50, 0x65, 0xf8, 0x45, 0x13, 0xad, 0x53, 0x26, 0xc3, 0xc6, 0x3e, 0xa1, - 0x7c, 0x7c, 0x09, 0xde, 0x99, 0xc6, 0x1e, 0xdc, 0xce, 0x52, 0xf3, 0x6e, 0xab, 0x12, 0xf2, 0xfc, - 0xa7, 0x55, 0x09, 0x25, 0x44, 0x61, 0x6e, 0xbe, 0x9e, 0x83, 0x52, 0x8b, 0x75, 0xf5, 0x6f, 0xa0, - 0xa2, 0xe6, 0xd3, 0xf5, 0x46, 0xd6, 0x18, 0xdb, 0x48, 0x4c, 0x74, 0xe6, 0x07, 0x63, 0x21, 0x2a, - 0x91, 0xdf, 0x41, 0x35, 0x9e, 0xe6, 0xac, 0xc2, 0x73, 0x02, 0x63, 0xde, 0x1f, 0x8f, 0x51, 0xce, - 0x7f, 0x00, 0x48, 0x4c, 0x4d, 0x77, 0x72, 0x4f, 0xc6, 0x20, 0xf3, 0xc1, 0x04, 0x20, 0xe5, 0xbf, - 0x0b, 0x73, 0xe9, 0x19, 0xe9, 0xfd, 0xdc, 0xd3, 0x29, 0x9c, 0xd9, 0x98, 0x0c, 0xa7, 0x88, 0x4e, - 0x40, 0xcf, 0x18, 0x99, 0x1e, 0x4c, 0xe2, 0x45, 0x82, 0xcd, 0x47, 0x97, 0x00, 0x2b, 0xde, 0x1f, - 0x61, 0x29, 0x7b, 0x78, 0x9a, 0x28, 0x80, 0x18, 0x6f, 0x7e, 0x74, 0x39, 0xbc, 0x12, 0xe0, 0x40, - 0x2d, 0x35, 0x75, 0xdc, 0xcd, 0xf5, 0x93, 0x84, 0x99, 0x0f, 0x27, 0x82, 0x29, 0x16, 0x1f, 0x16, - 0x2e, 0x4c, 0x12, 0xf9, 0x77, 0x78, 0x14, 0x6a, 0x7e, 0x38, 0x31, 0x34, 0x79, 0x33, 0x13, 0xa3, - 0x46, 0xfe, 0xcd, 0x8c, 0x41, 0x05, 0x37, 0xf3, 0xe2, 0x44, 0xa0, 0x3f, 0x87, 0xf9, 0x91, 0xb6, - 0x7c, 0x2f, 0xf7, 0x78, 0x1a, 0x68, 0x36, 0x27, 0x04, 0x2a, 0xae, 0x43, 0xd0, 0xb7, 0x1c, 0x27, - 0x0a, 0x31, 0x9a, 0x46, 0xf3, 0x63, 0x8a, 0xc7, 0xd9, 0x82, 0x98, 0x2e, 0xce, 0xbc, 0x3a, 0x81, - 0xa5, 0x70, 0x3a, 0x1d, 0xa5, 0xca, 0xff, 0xd7, 0xa5, 0xa6, 0xd9, 0x82, 0x7f, 0x5d, 0xe6, 0xd4, - 0xab, 0xff, 0xac, 0xc1, 0x8d, 0x9c, 0xc1, 0xa0, 0x59, 0xe0, 0x2a, 0xeb, 0x80, 0xf9, 0xf1, 0x25, - 0x0f, 0x28, 0x11, 0x36, 0xcc, 0xc8, 0x6e, 0xbd, 0x9a, 0x9f, 0x2c, 0x01, 0x30, 0xef, 0x8d, 0x01, - 0x28, 0x9f, 0x0c, 0xae, 0x5d, 0x6c, 0xb4, 0xf7, 0xc7, 0x29, 0x8c, 0xb1, 0xe6, 0xe6, 0xe4, 0xd8, - 0x64, 0x20, 0xb2, 0xc1, 0xad, 0x16, 0x9c, 0x0e, 0x00, 0x05, 0x81, 0xa4, 0xfb, 0xd3, 0xe3, 0x9d, - 0x3f, 0xce, 0xea, 0xda, 0x9b, 0xb3, 0xba, 0xf6, 0xd7, 0x59, 0x5d, 0xfb, 0xf5, 0xbc, 0x7e, 0xe5, - 0xcd, 0x79, 0xfd, 0xca, 0x9f, 0xe7, 0xf5, 0x2b, 0xdf, 0x6e, 0x76, 0x5d, 0x7e, 0x34, 0x38, 0x68, - 0x74, 0x48, 0xbf, 0xf9, 0x1c, 0x75, 0x8e, 0x51, 0x6f, 0x07, 0x1d, 0xb0, 0x66, 0xe8, 0xf7, 0x61, - 0xf8, 0x81, 0xe6, 0x34, 0xfe, 0x44, 0x33, 0xf4, 0x31, 0x3b, 0x98, 0x11, 0x9f, 0x69, 0x1e, 0xfd, - 0x13, 0x00, 0x00, 0xff, 0xff, 0x3d, 0x30, 0xe1, 0x81, 0xc7, 0x11, 0x00, 0x00, + 0x9d, 0xb0, 0x58, 0xb7, 0xe0, 0xe6, 0x08, 0xad, 0x8a, 0xa8, 0x29, 0xde, 0x90, 0xbd, 0xa3, 0x01, + 0x77, 0xc8, 0x4b, 0x6f, 0x7c, 0x54, 0xd6, 0x0a, 0x2c, 0x67, 0x1c, 0x50, 0xfe, 0x7e, 0xd3, 0x44, + 0xe9, 0x1e, 0x0f, 0x86, 0x7b, 0xe1, 0xbb, 0x5c, 0x20, 0x70, 0x15, 0xae, 0x1e, 0x12, 0x3a, 0x92, + 0x4c, 0x38, 0x24, 0x54, 0xa6, 0x52, 0x37, 0xa1, 0xe2, 0x0c, 0x28, 0xe2, 0x2e, 0xf1, 0xa4, 0x64, + 0xb5, 0x0e, 0x2e, 0xd7, 0xc1, 0x90, 0x63, 0x26, 0xe5, 0x86, 0x8b, 0xa0, 0x42, 0x3e, 0x1a, 0xf6, + 0xb1, 0xc7, 0xdb, 0x0e, 0xf6, 0x48, 0x5f, 0x3e, 0x36, 0x35, 0x69, 0x7c, 0x12, 0xd8, 0xe4, 0x6d, + 0x88, 0x43, 0x54, 0xc1, 0x7f, 0x2f, 0x62, 0x17, 0x45, 0xdb, 0xe3, 0x14, 0x0d, 0x0b, 0x62, 0x5f, + 0x80, 0x52, 0xc7, 0x75, 0x64, 0xcc, 0xc1, 0xcf, 0x51, 0x35, 0xa5, 0x51, 0x35, 0x92, 0x36, 0xf6, + 0xae, 0x68, 0x7f, 0xd7, 0xe0, 0x5a, 0x8b, 0x75, 0xbf, 0xf2, 0xbb, 0x14, 0x39, 0xf8, 0xff, 0x9b, + 0xb7, 0x65, 0xb8, 0x75, 0x21, 0x4c, 0x25, 0x62, 0x28, 0x36, 0x6d, 0xfc, 0x62, 0x80, 0x19, 0xdf, + 0xe2, 0x1c, 0x33, 0x2e, 0x08, 0x9f, 0x12, 0xda, 0x7f, 0xbb, 0x87, 0x36, 0xec, 0x16, 0xa5, 0xcc, + 0x6e, 0x51, 0x4e, 0x3e, 0xbf, 0x2f, 0x60, 0x3d, 0x97, 0x5a, 0xb5, 0x8e, 0xdb, 0x50, 0x8d, 0x3a, + 0x60, 0xd4, 0x12, 0x63, 0x43, 0xb2, 0xb1, 0x4c, 0xa5, 0x1b, 0xcb, 0x22, 0x4c, 0x8b, 0x26, 0x12, + 0x05, 0x22, 0x16, 0xd6, 0x4f, 0x1a, 0x54, 0x83, 0x17, 0x45, 0x90, 0x15, 0xcb, 0x0b, 0x48, 0x30, + 0x95, 0x55, 0x92, 0xab, 0x84, 0xec, 0x52, 0xb6, 0xec, 0x72, 0xa6, 0xec, 0xe9, 0xa4, 0xec, 0xeb, + 0xe2, 0xd6, 0x84, 0x21, 0xa8, 0x32, 0xfc, 0xa2, 0x89, 0xd6, 0x29, 0x93, 0x61, 0x63, 0x9f, 0x50, + 0x3e, 0xbe, 0x04, 0xef, 0x2c, 0xc6, 0x1e, 0xdc, 0xce, 0x8a, 0xe6, 0xdd, 0x56, 0x25, 0xe4, 0xf9, + 0x4f, 0xab, 0x12, 0x86, 0x10, 0xc9, 0xdc, 0x7c, 0x3d, 0x07, 0xa5, 0x16, 0xeb, 0xea, 0xdf, 0x40, + 0x45, 0xcd, 0xa7, 0xeb, 0x8d, 0xac, 0x31, 0xb6, 0x91, 0x98, 0xe8, 0xcc, 0x0f, 0xc6, 0x42, 0x54, + 0x22, 0xbf, 0x83, 0x6a, 0x3c, 0xcd, 0x59, 0x85, 0xe7, 0x04, 0xc6, 0xbc, 0x3f, 0x1e, 0xa3, 0x9c, + 0xff, 0x00, 0x90, 0x98, 0x9a, 0xee, 0xe4, 0x9e, 0x8c, 0x41, 0xe6, 0x83, 0x09, 0x40, 0xca, 0x7f, + 0x17, 0xe6, 0xd2, 0x33, 0xd2, 0xfb, 0xb9, 0xa7, 0x53, 0x38, 0xb3, 0x31, 0x19, 0x4e, 0x11, 0x9d, + 0x80, 0x9e, 0x31, 0x32, 0x3d, 0x98, 0xc4, 0x8b, 0x04, 0x9b, 0x8f, 0x2e, 0x01, 0x56, 0xbc, 0x3f, + 0xc2, 0x52, 0xf6, 0xf0, 0x34, 0x91, 0x80, 0x18, 0x6f, 0x7e, 0x74, 0x39, 0xbc, 0x0a, 0xc0, 0x81, + 0x5a, 0x6a, 0xea, 0xb8, 0x9b, 0xeb, 0x27, 0x09, 0x33, 0x1f, 0x4e, 0x04, 0x53, 0x2c, 0x3e, 0x2c, + 0x5c, 0x98, 0x24, 0xf2, 0xef, 0xf0, 0x28, 0xd4, 0xfc, 0x70, 0x62, 0x68, 0xf2, 0x66, 0x26, 0x46, + 0x8d, 0xfc, 0x9b, 0x19, 0x83, 0x0a, 0x6e, 0xe6, 0xc5, 0x89, 0x40, 0x7f, 0x0e, 0xf3, 0x23, 0x6d, + 0xf9, 0x5e, 0xee, 0xf1, 0x34, 0xd0, 0x6c, 0x4e, 0x08, 0x54, 0x5c, 0x87, 0xa0, 0x6f, 0x39, 0x4e, + 0x24, 0x31, 0x9a, 0x46, 0xf3, 0x35, 0xc5, 0xe3, 0x6c, 0x81, 0xa6, 0x8b, 0x33, 0xaf, 0x4e, 0x60, + 0x29, 0x9c, 0x4e, 0x47, 0xa9, 0xf2, 0xff, 0x75, 0xa9, 0x69, 0xb6, 0xe0, 0x5f, 0x97, 0x39, 0xf5, + 0xea, 0x3f, 0x6b, 0x70, 0x23, 0x67, 0x30, 0x68, 0x16, 0xb8, 0xca, 0x3a, 0x60, 0x7e, 0x7c, 0xc9, + 0x03, 0x2a, 0x08, 0x1b, 0x66, 0x64, 0xb7, 0x5e, 0xcd, 0x4f, 0x96, 0x00, 0x98, 0xf7, 0xc6, 0x00, + 0x94, 0x4f, 0x06, 0xd7, 0x2e, 0x36, 0xda, 0xfb, 0xe3, 0x22, 0x8c, 0xb1, 0xe6, 0xe6, 0xe4, 0xd8, + 0xa4, 0x10, 0xd9, 0xe0, 0x56, 0x0b, 0x4e, 0x07, 0x80, 0x02, 0x21, 0xe9, 0xfe, 0xf4, 0x78, 0xe7, + 0x8f, 0xb3, 0xba, 0xf6, 0xe6, 0xac, 0xae, 0xfd, 0x75, 0x56, 0xd7, 0x7e, 0x3d, 0xaf, 0x5f, 0x79, + 0x73, 0x5e, 0xbf, 0xf2, 0xe7, 0x79, 0xfd, 0xca, 0xb7, 0x9b, 0x5d, 0x97, 0x1f, 0x0d, 0x0e, 0x1a, + 0x1d, 0xd2, 0x6f, 0x3e, 0x47, 0x9d, 0x63, 0xd4, 0xdb, 0x41, 0x07, 0xac, 0x19, 0xfa, 0x7d, 0x18, + 0x7e, 0xa0, 0x39, 0x8d, 0x3f, 0xd1, 0x0c, 0x7d, 0xcc, 0x0e, 0x66, 0xc4, 0x67, 0x9a, 0x47, 0xff, + 0x04, 0x00, 0x00, 0xff, 0xff, 0x82, 0x4a, 0x54, 0x28, 0xc7, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4857,7 +4857,7 @@ func (m *MsgPostProof) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Item", wireType) } - var stringLen uint64 + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -4867,23 +4867,25 @@ func (m *MsgPostProof) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if byteLen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - m.Item = string(dAtA[iNdEx:postIndex]) + m.Item = append(m.Item[:0], dAtA[iNdEx:postIndex]...) + if m.Item == nil { + m.Item = []byte{} + } iNdEx = postIndex case 3: if wireType != 2 { From 2bca2520aa32010b6e1b1f8826ad783a279d2d1e Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 25 Oct 2023 12:00:40 -0400 Subject: [PATCH 032/256] testing file upload and proving --- proto/canine_chain/storage/tx.proto | 1 + scripts/test-sequoia.sh | 12 +- x/storage/client/cli/query.go | 2 +- x/storage/client/cli/query_active_deals.go | 44 +++++ x/storage/client/cli/tx_post_file.go | 151 ++++++++++++++-- x/storage/keeper/files_test.go | 58 +++++++ x/storage/keeper/msg_server_post_file.go | 2 +- x/storage/keeper/rewards.go | 4 +- x/storage/types/tx.pb.go | 190 ++++++++++++--------- 9 files changed, 369 insertions(+), 95 deletions(-) create mode 100644 x/storage/keeper/files_test.go diff --git a/proto/canine_chain/storage/tx.proto b/proto/canine_chain/storage/tx.proto index 31d0a777e..6d8c93bfa 100644 --- a/proto/canine_chain/storage/tx.proto +++ b/proto/canine_chain/storage/tx.proto @@ -42,6 +42,7 @@ message MsgPostFile { message MsgPostFileResponse { repeated string provider_ips = 1; // list of providers that are pre-loaded into the file + int64 start_block = 2; } message MsgPostProof { diff --git a/scripts/test-sequoia.sh b/scripts/test-sequoia.sh index ebd93f76f..078329c9a 100755 --- a/scripts/test-sequoia.sh +++ b/scripts/test-sequoia.sh @@ -38,7 +38,7 @@ canined collect-gentxs --home=$JKL_HOME sed -i.bak -e "s/stake/ujkl/" $JKL_HOME/config/genesis.json sed -i.bak -e "s/cosmos1arsaayyj5tash86mwqudmcs2fd5jt5zgp07gl8/jkl1arsaayyj5tash86mwqudmcs2fd5jt5zgc3sexc/" $JKL_HOME/config/genesis.json -sed -i.bak -e "s/\"proof_window\": \"50\"/\"proof_window\": \"10\"/" $JKL_HOME/config/genesis.json +sed -i.bak -e "s/\"proof_window\": \"50\"/\"proof_window\": \"100\"/" $JKL_HOME/config/genesis.json sed -i.bak -e "s/\"chunk_size\": \"1024\"/\"chunk_size\": \"10240\"/" $JKL_HOME/config/genesis.json sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025ujkl\"/" $JKL_HOME/config/app.toml sed -i.bak -e 's/enable = false/enable=true/' $JKL_HOME/config/app.toml @@ -47,13 +47,19 @@ sed -i.bak -e 's/cors_allowed_origins = \[\]/cors_allowed_origins = \["*"\]/' $J sed -i.bak -e 's/chain-id = ""/chain-id = "canine-1"/' $JKL_HOME/config/client.toml screen -d -m canined start --home=$JKL_HOME --log_level info sleep 20 +canined tx storage buy-storage $(canined keys show charlie -a --home=$JKL_HOME) 720h 1000000000000 ujkl --from charlie --gas-prices=0.02ujkl --home=$JKL_HOME -y sequoia init --home=$PROV_HOME yq -i '.chunk_size=10240' $PROV_HOME/config.yaml +yq -i '.proof_interval=10' $PROV_HOME/config.yaml +yq -i '.queue_interval=5' $PROV_HOME/config.yaml yq -i '.chain_config.rpc_addr="http://localhost:26657"' $PROV_HOME/config.yaml -yq -i '.chain_config.grpc_addr="localhost:26659"' $PROV_HOME/config.yaml -yq -i '.domain="localhost:3333"' $PROV_HOME/config.yaml +yq -i '.chain_config.grpc_addr="localhost:9090"' $PROV_HOME/config.yaml +yq -i '.domain="http://localhost:3334"' $PROV_HOME/config.yaml yq -i '.data_directory="'$PROV_HOME'/data"' $PROV_HOME/config.yaml +yq -i '.api_config.port=3334' $PROV_HOME/config.yaml +rm $PROV_HOME/provider_wallet.json +echo "{\"seed_phrase\":\"forward service profit benefit punch catch fan chief jealous steel harvest column spell rude warm home melody hat broccoli pulse say garlic you firm\",\"derivation_path\":\"m/44'/118'/0'/0/0\"}" > $PROV_HOME/provider_wallet.json sequoia start --home=$PROV_HOME diff --git a/x/storage/client/cli/query.go b/x/storage/client/cli/query.go index 2aaddd205..d11a6f08f 100644 --- a/x/storage/client/cli/query.go +++ b/x/storage/client/cli/query.go @@ -30,7 +30,7 @@ func GetQueryCmd(_ string) *cobra.Command { cmd.AddCommand(CmdListProviders()) cmd.AddCommand(CmdShowProviders()) cmd.AddCommand(CmdFreespace()) - + cmd.AddCommand(CmdShowProof()) cmd.AddCommand(CmdFindFile()) cmd.AddCommand(CmdGetClientFreeSpace()) diff --git a/x/storage/client/cli/query_active_deals.go b/x/storage/client/cli/query_active_deals.go index 678b79762..9939ab12c 100644 --- a/x/storage/client/cli/query_active_deals.go +++ b/x/storage/client/cli/query_active_deals.go @@ -86,3 +86,47 @@ func CmdShowActiveDeals() *cobra.Command { return cmd } + +func CmdShowProof() *cobra.Command { + cmd := &cobra.Command{ + Use: "proof [prover] [owner] [merkle] [start]", + Short: "shows a proof", + Args: cobra.ExactArgs(4), + RunE: func(cmd *cobra.Command, args []string) (err error) { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + argProver := args[0] + argMerkle := args[2] + argOwner := args[1] + argStart := args[3] + + start, err := strconv.ParseInt(argStart, 10, 64) + if err != nil { + panic(err) + } + merkle, err := hex.DecodeString(argMerkle) + if err != nil { + panic(err) + } + + params := &types.QueryProofRequest{ + ProviderAddress: argProver, + Merkle: merkle, + Start: start, + Owner: argOwner, + } + + res, err := queryClient.Proof(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/storage/client/cli/tx_post_file.go b/x/storage/client/cli/tx_post_file.go index 79fbdb865..b983e29fa 100644 --- a/x/storage/client/cli/tx_post_file.go +++ b/x/storage/client/cli/tx_post_file.go @@ -2,11 +2,20 @@ package cli import ( "bufio" + "bytes" + "context" "encoding/hex" + "encoding/json" "fmt" + "io" + "mime/multipart" + "net/http" + "net/url" "os" "strconv" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/input" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/utils" @@ -20,6 +29,10 @@ import ( var _ = strconv.Itoa(0) +type ErrorResponse struct { + Error string `json:"error"` +} + func prepareFactory(clientCtx client.Context, txf tx.Factory) (tx.Factory, error) { from := clientCtx.GetFromAddress() @@ -46,7 +59,7 @@ func prepareFactory(clientCtx client.Context, txf tx.Factory) (tx.Factory, error return txf, nil } -// GenerateOrBroadcastTxWithFactory is some dumb wrapper I had to make cause the sdk assumes I don't want to programmatically handle the +// GenerateOrBroadcastTx is some dumb wrapper I had to make cause the sdk assumes I don't want to programmatically handle the // response but instead print it out like a doofus func GenerateOrBroadcastTx(clientCtx client.Context, flags *pflag.FlagSet, msgs ...sdk.Msg) (*sdk.TxResponse, error) { txf := tx.NewFactoryCLI(clientCtx, flags) @@ -113,6 +126,71 @@ func GenerateOrBroadcastTx(clientCtx client.Context, flags *pflag.FlagSet, msgs return clientCtx.BroadcastTx(txBytes) } +func uploadFile(ip string, r io.Reader, merkle []byte, start int64, address string) error { + cli := http.DefaultClient + + u, err := url.Parse(ip) + if err != nil { + return err + } + + u = u.JoinPath("upload") + + var b bytes.Buffer + writer := multipart.NewWriter(&b) + defer writer.Close() + + err = writer.WriteField("sender", address) + if err != nil { + return err + } + + err = writer.WriteField("merkle", hex.EncodeToString(merkle)) + if err != nil { + return err + } + + err = writer.WriteField("start", fmt.Sprintf("%d", start)) + if err != nil { + return err + } + + fileWriter, err := writer.CreateFormFile("file", hex.EncodeToString(merkle)) + if err != nil { + return err + } + + _, err = io.Copy(fileWriter, r) + if err != nil { + return err + } + writer.Close() + + req, _ := http.NewRequest("POST", u.String(), &b) + req.Header.Add("Content-Type", writer.FormDataContentType()) + + res, err := cli.Do(req) + if err != nil { + return err + } + + defer res.Body.Close() + + if res.StatusCode != 200 { + + var errRes ErrorResponse + + err := json.NewDecoder(res.Body).Decode(&errRes) + if err != nil { + return err + } + + return fmt.Errorf("upload failed with code %d | %s", res.StatusCode, errRes.Error) + } + + return nil +} + func CmdPostFile() *cobra.Command { cmd := &cobra.Command{ Use: "post [file-path]", @@ -121,12 +199,15 @@ func CmdPostFile() *cobra.Command { RunE: func(cmd *cobra.Command, args []string) (err error) { filePath := args[0] - file, err := os.OpenFile(filePath, os.O_RDONLY, os.ModePerm) + file, err := os.ReadFile(filePath) if err != nil { return err } - root, _, _, size, err := utils.BuildTree(file, 1024) + buf := bytes.NewBuffer(file) + treeBuffer := bytes.NewBuffer(buf.Bytes()) + + root, _, _, size, err := utils.BuildTree(treeBuffer, 10240) if err != nil { return err } @@ -135,48 +216,94 @@ func CmdPostFile() *cobra.Command { return err } + address := clientCtx.GetFromAddress().String() + msg := types.NewMsgPostFile( - clientCtx.GetFromAddress().String(), + address, root, int64(size), - 1800, + 100, 0, 3, "Uploaded with canined", ) if err := msg.ValidateBasic(); err != nil { - return err + panic(err) } res, err := GenerateOrBroadcastTx(clientCtx, cmd.Flags(), msg) if err != nil { - return err + panic(err) } + fmt.Println(res.RawLog) + var postRes types.MsgPostFileResponse data, err := hex.DecodeString(res.Data) if err != nil { - return err + panic(err) } var txMsgData sdk.TxMsgData - err = clientCtx.Codec.Unmarshal(data, &txMsgData) if err != nil { - return err + panic(err) } + fmt.Println(txMsgData) + err = postRes.Unmarshal(txMsgData.Data[0].Data) if err != nil { - return err + panic(err) } ips := postRes.ProviderIps fmt.Println(ips) + fmt.Println(res.Code) + fmt.Println(res.RawLog) + + fmt.Println(res.TxHash) + + ipCount := len(ips) + randomCount := 3 - ipCount + for i := 0; i < ipCount; i++ { + ip := ips[i] + uploadBuffer := bytes.NewBuffer(buf.Bytes()) + err := uploadFile(ip, uploadBuffer, root, postRes.StartBlock, address) + if err != nil { + fmt.Println(err) + } + } + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + panic(err) + } + cl := types.NewQueryClient(clientCtx) + provReq := types.QueryAllProvidersRequest{ + Pagination: pageReq, + } + + provRes, err := cl.ProvidersAll(context.Background(), &provReq) + if err != nil { + panic(err) + } + + providers := provRes.Providers + for i, provider := range providers { + if i > randomCount { + break + } + uploadBuffer := bytes.NewBuffer(buf.Bytes()) + err := uploadFile(provider.Ip, uploadBuffer, root, postRes.StartBlock, address) + if err != nil { + fmt.Println(err) + } + } + return nil }, } - + flags.AddTxFlagsToCmd(cmd) return cmd } diff --git a/x/storage/keeper/files_test.go b/x/storage/keeper/files_test.go new file mode 100644 index 000000000..02636e23f --- /dev/null +++ b/x/storage/keeper/files_test.go @@ -0,0 +1,58 @@ +package keeper_test + +import ( + "encoding/base64" + + "github.com/jackalLabs/canine-chain/v3/x/storage/types" +) + +// testing files.go file +func (suite *KeeperTestSuite) TestFiles() { + suite.SetupSuite() + + merkle, err := base64.StdEncoding.DecodeString("d9RSWckxX0kFeMt7Ip0GSbhM+eJApeUgicZyL9qBoNiGiMtvibI8XjqXsyTdJC8cVftC8z1BJRrxAtRKe8GVEg==") + suite.Require().NoError(err) + + providers := suite.storageKeeper.GetActiveProviders(suite.ctx, "") + + owner := "jkl10k05lmc88q5ft3lm00q30qkd9x6654h3lejnct" + + var start int64 = 10 + + file := types.UnifiedFile{ + Merkle: merkle, + Owner: owner, + Start: start, + Expires: 0, + FileSize: 2071, + ProofInterval: 1800, + ProofType: 0, + Proofs: []string(nil), + MaxProofs: 3, + Note: "test file", + } + suite.storageKeeper.SetFile(suite.ctx, file) + + ips := make([]string, 0) + + for i, provider := range providers { // adding all provers + if i >= int(file.MaxProofs) { + break + } + file.AddProver(suite.ctx, suite.storageKeeper, provider.Address) + + prv, found := suite.storageKeeper.GetProviders(suite.ctx, provider.Address) + if !found { + continue + } + + ips = append(ips, prv.Ip) + } + + suite.Require().Equal(0, len(ips)) + + f, found := suite.storageKeeper.GetFile(suite.ctx, merkle, owner, start) + + suite.Require().True(found) + suite.Require().Equal(file, f) +} diff --git a/x/storage/keeper/msg_server_post_file.go b/x/storage/keeper/msg_server_post_file.go index 4cbed37a1..a98e48096 100644 --- a/x/storage/keeper/msg_server_post_file.go +++ b/x/storage/keeper/msg_server_post_file.go @@ -49,7 +49,7 @@ func (k msgServer) PostFile(goCtx context.Context, msg *types.MsgPostFile) (*typ ips = append(ips, prv.Ip) } - res := &types.MsgPostFileResponse{ProviderIps: ips} + res := &types.MsgPostFileResponse{ProviderIps: ips, StartBlock: ctx.BlockHeight()} totalSize := msg.FileSize * msg.MaxProofs if msg.Expires > 0 { // if the file is posted as a one-time payment diff --git a/x/storage/keeper/rewards.go b/x/storage/keeper/rewards.go index 4e0b3c763..0f6b70281 100644 --- a/x/storage/keeper/rewards.go +++ b/x/storage/keeper/rewards.go @@ -45,7 +45,9 @@ func (k Keeper) rewardProviders(totalSize int64, sizeTracker *map[string]int64) func (k Keeper) removeFileIfDeserved(ctx sdk.Context, file *types.UnifiedFile) { if len(file.Proofs) == 0 { // remove file if it - k.RemoveFile(ctx, file.Merkle, file.Owner, file.Start) + if file.Start+file.ProofInterval < ctx.BlockHeight() { + k.RemoveFile(ctx, file.Merkle, file.Owner, file.Start) + } } } diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index ced40f6ae..b40103a76 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -129,6 +129,7 @@ func (m *MsgPostFile) GetNote() string { type MsgPostFileResponse struct { ProviderIps []string `protobuf:"bytes,1,rep,name=provider_ips,json=providerIps,proto3" json:"provider_ips,omitempty"` + StartBlock int64 `protobuf:"varint,2,opt,name=start_block,json=startBlock,proto3" json:"start_block,omitempty"` } func (m *MsgPostFileResponse) Reset() { *m = MsgPostFileResponse{} } @@ -171,6 +172,13 @@ func (m *MsgPostFileResponse) GetProviderIps() []string { return nil } +func (m *MsgPostFileResponse) GetStartBlock() int64 { + if m != nil { + return m.StartBlock + } + return 0 +} + type MsgPostProof struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Item []byte `protobuf:"bytes,2,opt,name=item,proto3" json:"item,omitempty"` @@ -1875,83 +1883,84 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/tx.proto", fileDescriptor_2194ba0b2c3d6a97) } var fileDescriptor_2194ba0b2c3d6a97 = []byte{ - // 1213 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x41, 0x73, 0xdb, 0x44, - 0x14, 0xae, 0x62, 0x27, 0xb1, 0x5f, 0x9d, 0x90, 0xaa, 0x49, 0xab, 0x2a, 0x8d, 0x93, 0xa8, 0x53, - 0x1a, 0xda, 0xa9, 0x3d, 0xa4, 0x33, 0xc0, 0x81, 0x4b, 0x4a, 0xa7, 0x33, 0xa1, 0x31, 0x13, 0x94, - 0x30, 0x30, 0xc0, 0xe0, 0xd9, 0x58, 0x1b, 0x47, 0x8d, 0xad, 0x55, 0x77, 0xd7, 0x69, 0xdc, 0x0b, - 0x03, 0x67, 0x0e, 0xfc, 0x81, 0x1e, 0x38, 0xf0, 0x5f, 0x38, 0xf6, 0xc8, 0x91, 0x49, 0x7e, 0x00, - 0x7f, 0x81, 0xd1, 0x6a, 0xb5, 0x92, 0x1c, 0x49, 0x76, 0x3a, 0x74, 0xe0, 0xe6, 0x7d, 0xfb, 0xed, - 0xfb, 0xde, 0xf7, 0xde, 0x7a, 0xdf, 0x1b, 0xc1, 0x4a, 0x07, 0x79, 0xae, 0x87, 0xdb, 0x9d, 0x23, - 0xe4, 0x7a, 0x4d, 0xc6, 0x09, 0x45, 0x5d, 0xdc, 0xe4, 0xa7, 0x0d, 0x9f, 0x12, 0x4e, 0xf4, 0xc5, - 0xe4, 0x76, 0x43, 0x6e, 0x5b, 0x7f, 0x6b, 0x70, 0xb5, 0xc5, 0xba, 0xbb, 0x84, 0xf1, 0xa7, 0x6e, - 0x0f, 0xeb, 0x06, 0xcc, 0x76, 0x28, 0x46, 0x9c, 0x50, 0x43, 0x5b, 0xd3, 0x36, 0xaa, 0x76, 0xb4, - 0xd4, 0x6f, 0xc0, 0x4c, 0x1f, 0xd3, 0xe3, 0x1e, 0x36, 0xa6, 0xd6, 0xb4, 0x8d, 0x9a, 0x2d, 0x57, - 0xfa, 0x32, 0x54, 0x0f, 0xdd, 0x1e, 0x6e, 0x33, 0xf7, 0x15, 0x36, 0x4a, 0x6b, 0xda, 0x46, 0xc9, - 0xae, 0x04, 0x86, 0x3d, 0xf7, 0x15, 0xd6, 0xef, 0xc2, 0xbc, 0x4f, 0x09, 0x39, 0x6c, 0xbb, 0x1e, - 0xc7, 0xf4, 0x04, 0xf5, 0x8c, 0xb2, 0x40, 0xcc, 0x09, 0xeb, 0xb6, 0x34, 0xea, 0x2b, 0x00, 0x21, - 0x8c, 0x0f, 0x7d, 0x6c, 0x4c, 0x0b, 0x48, 0x55, 0x58, 0xf6, 0x87, 0x3e, 0x0e, 0xb6, 0xfb, 0xe8, - 0xb4, 0x2d, 0x0c, 0xcc, 0x98, 0x09, 0xb7, 0xfb, 0xe8, 0x74, 0x57, 0x18, 0x82, 0x98, 0xf1, 0xa9, - 0xef, 0x52, 0xcc, 0x8c, 0x59, 0xb1, 0x17, 0x2d, 0x75, 0x1d, 0xca, 0x1e, 0xe1, 0xd8, 0xa8, 0x08, - 0x29, 0xe2, 0xb7, 0xf5, 0x09, 0x5c, 0x4f, 0x08, 0xb6, 0x31, 0xf3, 0x89, 0xc7, 0xb0, 0xbe, 0x0e, - 0x35, 0x9f, 0x92, 0x13, 0xd7, 0xc1, 0xb4, 0xed, 0xfa, 0xcc, 0xd0, 0xd6, 0x4a, 0x1b, 0x55, 0xfb, - 0x6a, 0x64, 0xdb, 0xf6, 0x99, 0xf5, 0x5a, 0x83, 0x9a, 0x3c, 0x2a, 0x98, 0x0b, 0x92, 0xa5, 0x43, - 0xd9, 0xe5, 0xb8, 0x2f, 0x53, 0x25, 0x7e, 0x07, 0x89, 0x3a, 0x42, 0xec, 0xa8, 0xdd, 0x73, 0x19, - 0x17, 0x89, 0xaa, 0xd9, 0x95, 0xc0, 0xb0, 0xe3, 0x32, 0x9e, 0xc8, 0x6e, 0x39, 0x95, 0xdd, 0x45, - 0x98, 0x26, 0x2f, 0x3d, 0x4c, 0x45, 0x52, 0xaa, 0x76, 0xb8, 0x08, 0xac, 0x8c, 0x23, 0xca, 0x65, - 0x2e, 0xc2, 0x85, 0xb5, 0x0f, 0x8b, 0xc9, 0xf0, 0x94, 0x34, 0x03, 0x66, 0xd9, 0xa0, 0xd3, 0xc1, - 0x8c, 0x89, 0x30, 0x2b, 0x76, 0xb4, 0xd4, 0x2d, 0xa8, 0x61, 0x4a, 0x09, 0x6d, 0x61, 0xc6, 0x50, - 0x37, 0xac, 0x6c, 0xd5, 0x4e, 0xd9, 0xac, 0xaf, 0x61, 0xae, 0xc5, 0xba, 0x4f, 0x70, 0x0f, 0x73, - 0xfc, 0x96, 0x57, 0x44, 0x85, 0x5b, 0x4a, 0x86, 0x7b, 0x13, 0x96, 0x52, 0x8e, 0xa3, 0x78, 0xad, - 0x4f, 0x61, 0xa1, 0xc5, 0xba, 0x7b, 0x38, 0x90, 0x11, 0x26, 0x7f, 0xb7, 0x80, 0x74, 0x1e, 0xa6, - 0x5c, 0x5f, 0x46, 0x3e, 0xe5, 0xfa, 0x96, 0x09, 0xc6, 0xe8, 0x69, 0xe5, 0xf9, 0x99, 0xa0, 0x4c, - 0xec, 0x3d, 0xc3, 0xc3, 0x03, 0xc4, 0x8a, 0x34, 0x19, 0x30, 0x7b, 0x1c, 0x82, 0x24, 0x47, 0xb4, - 0xb4, 0x56, 0x61, 0x25, 0xd3, 0x99, 0x62, 0xfb, 0x7c, 0x34, 0x92, 0x7d, 0xc2, 0x51, 0x8f, 0xf9, - 0xa8, 0x53, 0x44, 0x18, 0x24, 0x2b, 0x80, 0x48, 0xba, 0x70, 0x61, 0x59, 0xb0, 0x96, 0xe7, 0x4b, - 0xf1, 0x7d, 0x21, 0x2a, 0xb5, 0xe5, 0x38, 0x9f, 0xf5, 0x90, 0xdb, 0xc7, 0xb4, 0x80, 0xe4, 0x0e, - 0xcc, 0x75, 0x02, 0x50, 0x1b, 0x39, 0x0e, 0x0d, 0x2e, 0x86, 0xac, 0xbc, 0x30, 0x6e, 0x85, 0x36, - 0x59, 0xa0, 0xd8, 0x9f, 0x22, 0xfa, 0x52, 0x14, 0xc8, 0xc6, 0x7d, 0x72, 0x82, 0xff, 0x25, 0xae, - 0xb0, 0x6a, 0x29, 0x97, 0x8a, 0x6e, 0x00, 0xef, 0xb5, 0x58, 0x77, 0xdb, 0x73, 0x95, 0xf8, 0xc9, - 0xaf, 0x43, 0xb2, 0x7e, 0xa5, 0x54, 0xfd, 0xf4, 0x3a, 0x00, 0x57, 0x49, 0x14, 0x7f, 0xbb, 0xaa, - 0x9d, 0xb0, 0x58, 0xb7, 0xe0, 0xe6, 0x08, 0xad, 0x8a, 0xa8, 0x29, 0xde, 0x90, 0xbd, 0xa3, 0x01, - 0x77, 0xc8, 0x4b, 0x6f, 0x7c, 0x54, 0xd6, 0x0a, 0x2c, 0x67, 0x1c, 0x50, 0xfe, 0x7e, 0xd3, 0x44, - 0xe9, 0x1e, 0x0f, 0x86, 0x7b, 0xe1, 0xbb, 0x5c, 0x20, 0x70, 0x15, 0xae, 0x1e, 0x12, 0x3a, 0x92, - 0x4c, 0x38, 0x24, 0x54, 0xa6, 0x52, 0x37, 0xa1, 0xe2, 0x0c, 0x28, 0xe2, 0x2e, 0xf1, 0xa4, 0x64, - 0xb5, 0x0e, 0x2e, 0xd7, 0xc1, 0x90, 0x63, 0x26, 0xe5, 0x86, 0x8b, 0xa0, 0x42, 0x3e, 0x1a, 0xf6, - 0xb1, 0xc7, 0xdb, 0x0e, 0xf6, 0x48, 0x5f, 0x3e, 0x36, 0x35, 0x69, 0x7c, 0x12, 0xd8, 0xe4, 0x6d, - 0x88, 0x43, 0x54, 0xc1, 0x7f, 0x2f, 0x62, 0x17, 0x45, 0xdb, 0xe3, 0x14, 0x0d, 0x0b, 0x62, 0x5f, - 0x80, 0x52, 0xc7, 0x75, 0x64, 0xcc, 0xc1, 0xcf, 0x51, 0x35, 0xa5, 0x51, 0x35, 0x92, 0x36, 0xf6, - 0xae, 0x68, 0x7f, 0xd7, 0xe0, 0x5a, 0x8b, 0x75, 0xbf, 0xf2, 0xbb, 0x14, 0x39, 0xf8, 0xff, 0x9b, - 0xb7, 0x65, 0xb8, 0x75, 0x21, 0x4c, 0x25, 0x62, 0x28, 0x36, 0x6d, 0xfc, 0x62, 0x80, 0x19, 0xdf, - 0xe2, 0x1c, 0x33, 0x2e, 0x08, 0x9f, 0x12, 0xda, 0x7f, 0xbb, 0x87, 0x36, 0xec, 0x16, 0xa5, 0xcc, - 0x6e, 0x51, 0x4e, 0x3e, 0xbf, 0x2f, 0x60, 0x3d, 0x97, 0x5a, 0xb5, 0x8e, 0xdb, 0x50, 0x8d, 0x3a, - 0x60, 0xd4, 0x12, 0x63, 0x43, 0xb2, 0xb1, 0x4c, 0xa5, 0x1b, 0xcb, 0x22, 0x4c, 0x8b, 0x26, 0x12, - 0x05, 0x22, 0x16, 0xd6, 0x4f, 0x1a, 0x54, 0x83, 0x17, 0x45, 0x90, 0x15, 0xcb, 0x0b, 0x48, 0x30, - 0x95, 0x55, 0x92, 0xab, 0x84, 0xec, 0x52, 0xb6, 0xec, 0x72, 0xa6, 0xec, 0xe9, 0xa4, 0xec, 0xeb, - 0xe2, 0xd6, 0x84, 0x21, 0xa8, 0x32, 0xfc, 0xa2, 0x89, 0xd6, 0x29, 0x93, 0x61, 0x63, 0x9f, 0x50, - 0x3e, 0xbe, 0x04, 0xef, 0x2c, 0xc6, 0x1e, 0xdc, 0xce, 0x8a, 0xe6, 0xdd, 0x56, 0x25, 0xe4, 0xf9, - 0x4f, 0xab, 0x12, 0x86, 0x10, 0xc9, 0xdc, 0x7c, 0x3d, 0x07, 0xa5, 0x16, 0xeb, 0xea, 0xdf, 0x40, - 0x45, 0xcd, 0xa7, 0xeb, 0x8d, 0xac, 0x31, 0xb6, 0x91, 0x98, 0xe8, 0xcc, 0x0f, 0xc6, 0x42, 0x54, - 0x22, 0xbf, 0x83, 0x6a, 0x3c, 0xcd, 0x59, 0x85, 0xe7, 0x04, 0xc6, 0xbc, 0x3f, 0x1e, 0xa3, 0x9c, - 0xff, 0x00, 0x90, 0x98, 0x9a, 0xee, 0xe4, 0x9e, 0x8c, 0x41, 0xe6, 0x83, 0x09, 0x40, 0xca, 0x7f, - 0x17, 0xe6, 0xd2, 0x33, 0xd2, 0xfb, 0xb9, 0xa7, 0x53, 0x38, 0xb3, 0x31, 0x19, 0x4e, 0x11, 0x9d, - 0x80, 0x9e, 0x31, 0x32, 0x3d, 0x98, 0xc4, 0x8b, 0x04, 0x9b, 0x8f, 0x2e, 0x01, 0x56, 0xbc, 0x3f, - 0xc2, 0x52, 0xf6, 0xf0, 0x34, 0x91, 0x80, 0x18, 0x6f, 0x7e, 0x74, 0x39, 0xbc, 0x0a, 0xc0, 0x81, - 0x5a, 0x6a, 0xea, 0xb8, 0x9b, 0xeb, 0x27, 0x09, 0x33, 0x1f, 0x4e, 0x04, 0x53, 0x2c, 0x3e, 0x2c, - 0x5c, 0x98, 0x24, 0xf2, 0xef, 0xf0, 0x28, 0xd4, 0xfc, 0x70, 0x62, 0x68, 0xf2, 0x66, 0x26, 0x46, - 0x8d, 0xfc, 0x9b, 0x19, 0x83, 0x0a, 0x6e, 0xe6, 0xc5, 0x89, 0x40, 0x7f, 0x0e, 0xf3, 0x23, 0x6d, - 0xf9, 0x5e, 0xee, 0xf1, 0x34, 0xd0, 0x6c, 0x4e, 0x08, 0x54, 0x5c, 0x87, 0xa0, 0x6f, 0x39, 0x4e, - 0x24, 0x31, 0x9a, 0x46, 0xf3, 0x35, 0xc5, 0xe3, 0x6c, 0x81, 0xa6, 0x8b, 0x33, 0xaf, 0x4e, 0x60, - 0x29, 0x9c, 0x4e, 0x47, 0xa9, 0xf2, 0xff, 0x75, 0xa9, 0x69, 0xb6, 0xe0, 0x5f, 0x97, 0x39, 0xf5, - 0xea, 0x3f, 0x6b, 0x70, 0x23, 0x67, 0x30, 0x68, 0x16, 0xb8, 0xca, 0x3a, 0x60, 0x7e, 0x7c, 0xc9, - 0x03, 0x2a, 0x08, 0x1b, 0x66, 0x64, 0xb7, 0x5e, 0xcd, 0x4f, 0x96, 0x00, 0x98, 0xf7, 0xc6, 0x00, - 0x94, 0x4f, 0x06, 0xd7, 0x2e, 0x36, 0xda, 0xfb, 0xe3, 0x22, 0x8c, 0xb1, 0xe6, 0xe6, 0xe4, 0xd8, - 0xa4, 0x10, 0xd9, 0xe0, 0x56, 0x0b, 0x4e, 0x07, 0x80, 0x02, 0x21, 0xe9, 0xfe, 0xf4, 0x78, 0xe7, - 0x8f, 0xb3, 0xba, 0xf6, 0xe6, 0xac, 0xae, 0xfd, 0x75, 0x56, 0xd7, 0x7e, 0x3d, 0xaf, 0x5f, 0x79, - 0x73, 0x5e, 0xbf, 0xf2, 0xe7, 0x79, 0xfd, 0xca, 0xb7, 0x9b, 0x5d, 0x97, 0x1f, 0x0d, 0x0e, 0x1a, - 0x1d, 0xd2, 0x6f, 0x3e, 0x47, 0x9d, 0x63, 0xd4, 0xdb, 0x41, 0x07, 0xac, 0x19, 0xfa, 0x7d, 0x18, - 0x7e, 0xa0, 0x39, 0x8d, 0x3f, 0xd1, 0x0c, 0x7d, 0xcc, 0x0e, 0x66, 0xc4, 0x67, 0x9a, 0x47, 0xff, - 0x04, 0x00, 0x00, 0xff, 0xff, 0x82, 0x4a, 0x54, 0x28, 0xc7, 0x11, 0x00, 0x00, + // 1231 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x0e, 0x2d, 0xd9, 0x96, 0xc6, 0xb2, 0xeb, 0x30, 0x76, 0xc2, 0xd0, 0xb1, 0x6c, 0x33, 0x48, + 0xe3, 0x26, 0x88, 0x84, 0x3a, 0x40, 0x7b, 0xe9, 0xc5, 0x6e, 0x10, 0xc0, 0x8d, 0x55, 0xb8, 0xb4, + 0x8b, 0xfe, 0xa2, 0xc2, 0x4a, 0x5c, 0xcb, 0x8c, 0x25, 0x2e, 0xb3, 0xbb, 0x72, 0xac, 0x5c, 0x8a, + 0xf6, 0xdc, 0x43, 0x5f, 0x20, 0x87, 0x1e, 0xfa, 0x2e, 0x3d, 0xe6, 0xd8, 0x63, 0x61, 0x3f, 0x40, + 0x5f, 0xa1, 0xe0, 0x72, 0xb9, 0x22, 0x65, 0x92, 0x92, 0x83, 0x06, 0xed, 0x4d, 0x3b, 0xfb, 0xed, + 0xcc, 0xf7, 0xcd, 0xac, 0x76, 0x06, 0x84, 0xd5, 0x36, 0xf2, 0x5c, 0x0f, 0x37, 0xdb, 0xc7, 0xc8, + 0xf5, 0xea, 0x8c, 0x13, 0x8a, 0x3a, 0xb8, 0xce, 0xcf, 0x6a, 0x3e, 0x25, 0x9c, 0xe8, 0x4b, 0xf1, + 0xed, 0x9a, 0xdc, 0xb6, 0xfe, 0xd6, 0x60, 0xae, 0xc1, 0x3a, 0xfb, 0x84, 0xf1, 0xa7, 0x6e, 0x17, + 0xeb, 0x06, 0xcc, 0xb6, 0x29, 0x46, 0x9c, 0x50, 0x43, 0x5b, 0xd7, 0x36, 0xcb, 0x76, 0xb4, 0xd4, + 0x6f, 0xc2, 0x4c, 0x0f, 0xd3, 0x93, 0x2e, 0x36, 0xa6, 0xd6, 0xb5, 0xcd, 0x8a, 0x2d, 0x57, 0xfa, + 0x0a, 0x94, 0x8f, 0xdc, 0x2e, 0x6e, 0x32, 0xf7, 0x15, 0x36, 0x0a, 0xeb, 0xda, 0x66, 0xc1, 0x2e, + 0x05, 0x86, 0x03, 0xf7, 0x15, 0xd6, 0xef, 0xc1, 0x82, 0x4f, 0x09, 0x39, 0x6a, 0xba, 0x1e, 0xc7, + 0xf4, 0x14, 0x75, 0x8d, 0xa2, 0x40, 0xcc, 0x0b, 0xeb, 0xae, 0x34, 0xea, 0xab, 0x00, 0x21, 0x8c, + 0x0f, 0x7c, 0x6c, 0x4c, 0x0b, 0x48, 0x59, 0x58, 0x0e, 0x07, 0x3e, 0x0e, 0xb6, 0x7b, 0xe8, 0xac, + 0x29, 0x0c, 0xcc, 0x98, 0x09, 0xb7, 0x7b, 0xe8, 0x6c, 0x5f, 0x18, 0x02, 0xce, 0xf8, 0xcc, 0x77, + 0x29, 0x66, 0xc6, 0xac, 0xd8, 0x8b, 0x96, 0xba, 0x0e, 0x45, 0x8f, 0x70, 0x6c, 0x94, 0x84, 0x14, + 0xf1, 0xdb, 0xfa, 0x06, 0x6e, 0xc4, 0x04, 0xdb, 0x98, 0xf9, 0xc4, 0x63, 0x58, 0xdf, 0x80, 0x8a, + 0x4f, 0xc9, 0xa9, 0xeb, 0x60, 0xda, 0x74, 0x7d, 0x66, 0x68, 0xeb, 0x85, 0xcd, 0xb2, 0x3d, 0x17, + 0xd9, 0x76, 0x7d, 0xa6, 0xaf, 0xc1, 0x1c, 0xe3, 0x88, 0xf2, 0x66, 0xab, 0x4b, 0xda, 0x27, 0x22, + 0x0d, 0x05, 0x1b, 0x84, 0x69, 0x27, 0xb0, 0x58, 0xaf, 0x35, 0xa8, 0x48, 0xdf, 0x82, 0x5a, 0x4e, + 0x36, 0x75, 0x28, 0xba, 0x1c, 0xf7, 0x64, 0x2e, 0xc5, 0xef, 0x20, 0x93, 0xc7, 0x88, 0x1d, 0x37, + 0xbb, 0x2e, 0xe3, 0x22, 0x93, 0x15, 0xbb, 0x14, 0x18, 0xf6, 0x5c, 0xc6, 0x63, 0xe9, 0x2f, 0x26, + 0xd2, 0xbf, 0x04, 0xd3, 0xe4, 0xa5, 0x87, 0xa9, 0xc8, 0x5a, 0xd9, 0x0e, 0x17, 0x81, 0x55, 0xf0, + 0x92, 0xc9, 0x0a, 0x17, 0xd6, 0x21, 0x2c, 0xc5, 0xe9, 0x29, 0xed, 0x06, 0xcc, 0xb2, 0x7e, 0xbb, + 0x8d, 0x19, 0x13, 0x34, 0x4b, 0x76, 0xb4, 0xd4, 0x2d, 0xa8, 0x60, 0x4a, 0x09, 0x6d, 0x60, 0xc6, + 0x50, 0x27, 0x2c, 0x7d, 0xd9, 0x4e, 0xd8, 0xac, 0xaf, 0x60, 0xbe, 0xc1, 0x3a, 0x4f, 0x70, 0x17, + 0x73, 0xfc, 0x96, 0x77, 0x48, 0xd1, 0x2d, 0xc4, 0xe9, 0xde, 0x82, 0xe5, 0x84, 0xe3, 0x88, 0xaf, + 0xf5, 0x09, 0x2c, 0x36, 0x58, 0xe7, 0x00, 0x07, 0x32, 0xc2, 0xea, 0xec, 0xe7, 0x04, 0x5d, 0x80, + 0x29, 0xd7, 0x97, 0xcc, 0xa7, 0x5c, 0xdf, 0x32, 0xc1, 0x18, 0x3d, 0xad, 0x3c, 0x3f, 0x13, 0x21, + 0x63, 0x7b, 0xcf, 0xf0, 0xa0, 0x85, 0x58, 0x9e, 0x26, 0x03, 0x66, 0x4f, 0x42, 0x90, 0x8c, 0x11, + 0x2d, 0xad, 0x35, 0x58, 0x4d, 0x75, 0xa6, 0xa2, 0x7d, 0x36, 0xca, 0xe4, 0x90, 0x70, 0xd4, 0x65, + 0x3e, 0x6a, 0xe7, 0x05, 0x0c, 0x92, 0x15, 0x40, 0x64, 0xb8, 0x70, 0x61, 0x59, 0xb0, 0x9e, 0xe5, + 0x4b, 0xc5, 0xfb, 0x5c, 0x54, 0x6a, 0xdb, 0x71, 0x3e, 0xed, 0x22, 0xb7, 0x87, 0x69, 0x4e, 0x90, + 0xbb, 0x30, 0xdf, 0x0e, 0x40, 0x4d, 0xe4, 0x38, 0x34, 0xb8, 0x18, 0xb2, 0xf2, 0xc2, 0xb8, 0x1d, + 0xda, 0x64, 0x81, 0x86, 0xfe, 0x54, 0xa0, 0x2f, 0x44, 0x81, 0x6c, 0xdc, 0x23, 0xa7, 0xf8, 0x5f, + 0x8a, 0x15, 0x56, 0x2d, 0xe1, 0x52, 0x85, 0xeb, 0xc3, 0x7b, 0x0d, 0xd6, 0xd9, 0xf5, 0x5c, 0x25, + 0x7e, 0xf2, 0xeb, 0x10, 0xaf, 0x5f, 0x21, 0x51, 0x3f, 0xbd, 0x0a, 0xc0, 0x55, 0x12, 0xc5, 0xdf, + 0xae, 0x6c, 0xc7, 0x2c, 0xd6, 0x6d, 0xb8, 0x35, 0x12, 0x56, 0x31, 0xaa, 0x8b, 0x47, 0xe6, 0xe0, + 0xb8, 0xcf, 0x1d, 0xf2, 0xd2, 0x1b, 0xcf, 0xca, 0x5a, 0x85, 0x95, 0x94, 0x03, 0xca, 0xdf, 0x6f, + 0x9a, 0x28, 0xdd, 0x4e, 0x7f, 0x70, 0x10, 0x3e, 0xdc, 0x39, 0x02, 0xd7, 0x60, 0xee, 0x88, 0xd0, + 0x91, 0x64, 0xc2, 0x11, 0xa1, 0x32, 0x95, 0xba, 0x09, 0x25, 0xa7, 0x4f, 0x11, 0x77, 0x89, 0x27, + 0x25, 0xab, 0x75, 0x70, 0xb9, 0x5a, 0x03, 0x8e, 0x99, 0x94, 0x1b, 0x2e, 0x82, 0x0a, 0xf9, 0x68, + 0xd0, 0xc3, 0x1e, 0x6f, 0x3a, 0xd8, 0x23, 0x3d, 0xf9, 0xd8, 0x54, 0xa4, 0xf1, 0x49, 0x60, 0x93, + 0xb7, 0x61, 0x48, 0x51, 0x91, 0xff, 0x5e, 0x70, 0x17, 0x45, 0x3b, 0xe0, 0x14, 0x0d, 0x72, 0xb8, + 0x2f, 0x42, 0xa1, 0xed, 0x3a, 0x92, 0x73, 0xf0, 0x73, 0x54, 0x4d, 0x61, 0x54, 0x8d, 0x0c, 0x3b, + 0xf4, 0xae, 0xc2, 0xfe, 0xae, 0xc1, 0xf5, 0x06, 0xeb, 0x7c, 0xe9, 0x77, 0x28, 0x72, 0xf0, 0xff, + 0x37, 0x6f, 0x2b, 0x70, 0xfb, 0x12, 0x4d, 0x25, 0x62, 0x20, 0x36, 0x6d, 0xfc, 0xa2, 0x8f, 0x19, + 0xdf, 0xe6, 0x1c, 0x33, 0x2e, 0x02, 0x3e, 0x25, 0xb4, 0xf7, 0x76, 0x0f, 0x6d, 0xd8, 0x2d, 0x0a, + 0xa9, 0xdd, 0xa2, 0x18, 0x7f, 0x7e, 0x5f, 0xc0, 0x46, 0x66, 0x68, 0xd5, 0x3a, 0xee, 0x40, 0x39, + 0x6a, 0x91, 0x51, 0xcf, 0x1c, 0x1a, 0xe2, 0x8d, 0x65, 0x2a, 0xd9, 0x58, 0x96, 0x60, 0x5a, 0x34, + 0x91, 0x88, 0x88, 0x58, 0x58, 0x3f, 0x69, 0x50, 0x0e, 0x5e, 0x14, 0x11, 0x2c, 0x5f, 0x5e, 0x10, + 0x04, 0x53, 0x59, 0x25, 0xb9, 0x8a, 0xc9, 0x2e, 0xa4, 0xcb, 0x2e, 0xa6, 0xca, 0x9e, 0x8e, 0xcb, + 0xbe, 0x21, 0x6e, 0x4d, 0x48, 0x41, 0x95, 0xe1, 0x17, 0x4d, 0xb4, 0x4e, 0x99, 0x0c, 0x1b, 0xfb, + 0x84, 0xf2, 0xf1, 0x25, 0x78, 0x67, 0x1c, 0xbb, 0x70, 0x27, 0x8d, 0xcd, 0xbb, 0xad, 0x4a, 0x18, + 0xe7, 0x3f, 0xad, 0x4a, 0x48, 0x21, 0x92, 0xb9, 0xf5, 0x7a, 0x1e, 0x0a, 0x0d, 0xd6, 0xd1, 0xbf, + 0x86, 0x92, 0x1a, 0x60, 0x37, 0x6a, 0x69, 0x73, 0x6e, 0x2d, 0x36, 0xf2, 0x99, 0x1f, 0x8c, 0x85, + 0xa8, 0x44, 0x7e, 0x07, 0xe5, 0xe1, 0x34, 0x67, 0xe5, 0x9e, 0x13, 0x18, 0xf3, 0xc1, 0x78, 0x8c, + 0x72, 0xfe, 0x03, 0x40, 0x6c, 0x6a, 0xba, 0x9b, 0x79, 0x72, 0x08, 0x32, 0x1f, 0x4e, 0x00, 0x52, + 0xfe, 0x3b, 0x30, 0x9f, 0x9c, 0x91, 0xde, 0xcf, 0x3c, 0x9d, 0xc0, 0x99, 0xb5, 0xc9, 0x70, 0x2a, + 0xd0, 0x29, 0xe8, 0x29, 0x23, 0xd3, 0xc3, 0x49, 0xbc, 0x48, 0xb0, 0xf9, 0xf8, 0x0a, 0x60, 0x15, + 0xf7, 0x47, 0x58, 0x4e, 0x1f, 0x9e, 0x26, 0x12, 0x30, 0xc4, 0x9b, 0x1f, 0x5d, 0x0d, 0xaf, 0x08, + 0x38, 0x50, 0x49, 0x4c, 0x1d, 0xf7, 0x32, 0xfd, 0xc4, 0x61, 0xe6, 0xa3, 0x89, 0x60, 0x2a, 0x8a, + 0x0f, 0x8b, 0x97, 0x26, 0x89, 0xec, 0x3b, 0x3c, 0x0a, 0x35, 0x3f, 0x9c, 0x18, 0x1a, 0xbf, 0x99, + 0xb1, 0x51, 0x23, 0xfb, 0x66, 0x0e, 0x41, 0x39, 0x37, 0xf3, 0xf2, 0x44, 0xa0, 0x3f, 0x87, 0x85, + 0x91, 0xb6, 0x7c, 0x3f, 0xf3, 0x78, 0x12, 0x68, 0xd6, 0x27, 0x04, 0xaa, 0x58, 0x47, 0xa0, 0x6f, + 0x3b, 0x4e, 0x24, 0x31, 0x9a, 0x46, 0xb3, 0x35, 0x0d, 0xc7, 0xd9, 0x1c, 0x4d, 0x97, 0x67, 0x5e, + 0x9d, 0xc0, 0x72, 0x38, 0x9d, 0x8e, 0x86, 0xca, 0xfe, 0xd7, 0x25, 0xa6, 0xd9, 0x9c, 0x7f, 0x5d, + 0xea, 0xd4, 0xab, 0xff, 0xac, 0xc1, 0xcd, 0x8c, 0xc1, 0xa0, 0x9e, 0xe3, 0x2a, 0xed, 0x80, 0xf9, + 0xf1, 0x15, 0x0f, 0x28, 0x12, 0x36, 0xcc, 0xc8, 0x6e, 0xbd, 0x96, 0x9d, 0x2c, 0x01, 0x30, 0xef, + 0x8f, 0x01, 0x28, 0x9f, 0x0c, 0xae, 0x5f, 0x6e, 0xb4, 0x0f, 0xc6, 0x31, 0x1c, 0x62, 0xcd, 0xad, + 0xc9, 0xb1, 0x71, 0x21, 0xb2, 0xc1, 0xad, 0xe5, 0x9c, 0x0e, 0x00, 0x39, 0x42, 0x92, 0xfd, 0x69, + 0x67, 0xef, 0x8f, 0xf3, 0xaa, 0xf6, 0xe6, 0xbc, 0xaa, 0xfd, 0x75, 0x5e, 0xd5, 0x7e, 0xbd, 0xa8, + 0x5e, 0x7b, 0x73, 0x51, 0xbd, 0xf6, 0xe7, 0x45, 0xf5, 0xda, 0xb7, 0x5b, 0x1d, 0x97, 0x1f, 0xf7, + 0x5b, 0xb5, 0x36, 0xe9, 0xd5, 0x9f, 0xa3, 0xf6, 0x09, 0xea, 0xee, 0xa1, 0x16, 0xab, 0x87, 0x7e, + 0x1f, 0x85, 0x5f, 0x70, 0xce, 0x86, 0xdf, 0x70, 0x06, 0x3e, 0x66, 0xad, 0x19, 0xf1, 0x1d, 0xe7, + 0xf1, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x67, 0x18, 0xd6, 0x3f, 0xe8, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2663,6 +2672,11 @@ func (m *MsgPostFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.StartBlock != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.StartBlock)) + i-- + dAtA[i] = 0x10 + } if len(m.ProviderIps) > 0 { for iNdEx := len(m.ProviderIps) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.ProviderIps[iNdEx]) @@ -3919,6 +3933,9 @@ func (m *MsgPostFileResponse) Size() (n int) { n += 1 + l + sovTx(uint64(l)) } } + if m.StartBlock != 0 { + n += 1 + sovTx(uint64(m.StartBlock)) + } return n } @@ -4771,6 +4788,25 @@ func (m *MsgPostFileResponse) Unmarshal(dAtA []byte) error { } m.ProviderIps = append(m.ProviderIps, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartBlock", wireType) + } + m.StartBlock = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.StartBlock |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) From 8366aee62a4ac7db579bed141def7c827c424a32 Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 25 Oct 2023 16:48:08 -0400 Subject: [PATCH 033/256] file deals are being correctly monitored and deleted when they fail --- scripts/test-sequoia.sh | 2 +- x/storage/client/cli/tx_post_file.go | 2 +- x/storage/keeper/msg_server_postproof.go | 11 +++++++++-- x/storage/keeper/rewards.go | 14 +++++++++----- x/storage/types/file_deal.go | 22 +++++++++++++++++----- 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/scripts/test-sequoia.sh b/scripts/test-sequoia.sh index 078329c9a..c0bf7489d 100755 --- a/scripts/test-sequoia.sh +++ b/scripts/test-sequoia.sh @@ -38,7 +38,7 @@ canined collect-gentxs --home=$JKL_HOME sed -i.bak -e "s/stake/ujkl/" $JKL_HOME/config/genesis.json sed -i.bak -e "s/cosmos1arsaayyj5tash86mwqudmcs2fd5jt5zgp07gl8/jkl1arsaayyj5tash86mwqudmcs2fd5jt5zgc3sexc/" $JKL_HOME/config/genesis.json -sed -i.bak -e "s/\"proof_window\": \"50\"/\"proof_window\": \"100\"/" $JKL_HOME/config/genesis.json +sed -i.bak -e "s/\"proof_window\": \"50\"/\"proof_window\": \"40\"/" $JKL_HOME/config/genesis.json sed -i.bak -e "s/\"chunk_size\": \"1024\"/\"chunk_size\": \"10240\"/" $JKL_HOME/config/genesis.json sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025ujkl\"/" $JKL_HOME/config/app.toml sed -i.bak -e 's/enable = false/enable=true/' $JKL_HOME/config/app.toml diff --git a/x/storage/client/cli/tx_post_file.go b/x/storage/client/cli/tx_post_file.go index b983e29fa..c958e0275 100644 --- a/x/storage/client/cli/tx_post_file.go +++ b/x/storage/client/cli/tx_post_file.go @@ -222,7 +222,7 @@ func CmdPostFile() *cobra.Command { address, root, int64(size), - 100, + 40, 0, 3, "Uploaded with canined", diff --git a/x/storage/keeper/msg_server_postproof.go b/x/storage/keeper/msg_server_postproof.go index 12a7a1133..efd79926b 100644 --- a/x/storage/keeper/msg_server_postproof.go +++ b/x/storage/keeper/msg_server_postproof.go @@ -3,7 +3,6 @@ package keeper import ( "context" "fmt" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) @@ -31,7 +30,15 @@ func (k msgServer) PostProof(goCtx context.Context, msg *types.MsgPostProof) (*t return &types.MsgPostProofResponse{Success: false, ErrorMessage: err.Error()}, nil } } else { - proof = file.AddProver(ctx, k, prover) + if file.ContainsProver(prover) { + var err error + proof, err = file.GetProver(ctx, k, prover) + if err != nil { + return &types.MsgPostProofResponse{Success: false, ErrorMessage: err.Error()}, nil + } + } else { + proof = file.AddProver(ctx, k, prover) + } } err := file.Prove(ctx, k, msg.Creator, msg.HashList, proof.ChunkToProve, msg.Item, proofSize) diff --git a/x/storage/keeper/rewards.go b/x/storage/keeper/rewards.go index 0f6b70281..c61143447 100644 --- a/x/storage/keeper/rewards.go +++ b/x/storage/keeper/rewards.go @@ -1,16 +1,19 @@ package keeper import ( + "fmt" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func (k Keeper) manageProofs(ctx sdk.Context, sizeTracker *map[string]int64, file *types.UnifiedFile, prover string) { +func (k Keeper) manageProofs(ctx sdk.Context, sizeTracker *map[string]int64, file *types.UnifiedFile, proofKey string) { st := *sizeTracker - proof, found := k.GetProof(ctx, prover, file.Merkle, file.Owner, file.Start) + proof, found := k.GetProofWithBuiltKey(ctx, []byte(proofKey)) if !found { - file.RemoveProver(ctx, k, prover) + ctx.Logger().Info(fmt.Sprintf("cannot find proof: %s", proofKey)) + file.RemoveProverWithKey(ctx, k, proofKey) } currentHeight := ctx.BlockHeight() @@ -18,11 +21,12 @@ func (k Keeper) manageProofs(ctx sdk.Context, sizeTracker *map[string]int64, fil windowStart := currentHeight - file.ProofInterval if windowStart > proof.LastProven { // if the last time this file was proven was outside the proof window, burn their stake in the file - file.RemoveProver(ctx, k, prover) + ctx.Logger().Info(fmt.Sprintf("proof has not been proven within the last window: %d > %d", windowStart, proof.LastProven)) + file.RemoveProverWithKey(ctx, k, proofKey) return } - st[prover] += file.FileSize + st[proof.Prover] += file.FileSize } func (k Keeper) rewardProviders(totalSize int64, sizeTracker *map[string]int64) { diff --git a/x/storage/types/file_deal.go b/x/storage/types/file_deal.go index 095698c22..fe375ec8c 100644 --- a/x/storage/types/file_deal.go +++ b/x/storage/types/file_deal.go @@ -60,25 +60,37 @@ func (f *UnifiedFile) AddProver(ctx sdk.Context, k ProofLoader, prover string) * return &p } +func (f *UnifiedFile) Save(ctx sdk.Context, k ProofLoader) { + k.SetFile(ctx, *f) +} + func (f *UnifiedFile) RemoveProver(ctx sdk.Context, k ProofLoader, prover string) { + pk := f.MakeProofKey(prover) + f.RemoveProverWithKey(ctx, k, pk) + +} + +func (f *UnifiedFile) RemoveProverWithKey(ctx sdk.Context, k ProofLoader, proofKey string) { if len(f.Proofs) == 0 { return } - pk := f.MakeProofKey(prover) - for i, proof := range f.Proofs { - if proof == pk { + ctx.Logger().Info(fmt.Sprintf("should we remove proof: %s == %s ?", proof, proofKey)) + if proof == proofKey { + ctx.Logger().Info(fmt.Sprintf("removing proofs: %s == %s ?", proof, proofKey)) + front := f.Proofs[:i] back := f.Proofs[i+1:] // nolint:all f.Proofs = append(front, back...) - k.RemoveProofWithBuiltKey(ctx, []byte(pk)) - return + k.RemoveProofWithBuiltKey(ctx, []byte(proofKey)) + f.Save(ctx, k) } } + } func (f *UnifiedFile) GetProver(ctx sdk.Context, k ProofLoader, prover string) (*FileProof, error) { From 74f7862fcf4f881db08fcf46db3727b33f3c240a Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 10:19:00 -0400 Subject: [PATCH 034/256] post proof unit tests work again --- x/storage/keeper/msg_server_attest_test.go | 2 +- x/storage/keeper/msg_server_postproof.go | 7 ++- x/storage/keeper/msg_server_proofs_test.go | 45 ++++++------------- x/storage/keeper/msg_server_provider_claim.go | 2 +- .../keeper/msg_server_provider_claim_test.go | 4 +- x/storage/keeper/msg_server_providers_test.go | 8 ++-- x/storage/types/errors.go | 16 +++---- x/storage/types/file_deal.go | 8 ++-- 8 files changed, 38 insertions(+), 54 deletions(-) diff --git a/x/storage/keeper/msg_server_attest_test.go b/x/storage/keeper/msg_server_attest_test.go index 6457e0b97..ab175cddc 100644 --- a/x/storage/keeper/msg_server_attest_test.go +++ b/x/storage/keeper/msg_server_attest_test.go @@ -8,7 +8,7 @@ import ( func (suite *KeeperTestSuite) TestAttest() { params := suite.storageKeeper.GetParams(suite.ctx) - addresses, err := testutil.CreateTestAddresses("cosmos", int(params.AttestFormSize)+2) + addresses, err := testutil.CreateTestAddresses("cosmos", int(params.AttestFormSize)+20) suite.Require().NoError(err) cases := map[string]struct { diff --git a/x/storage/keeper/msg_server_postproof.go b/x/storage/keeper/msg_server_postproof.go index efd79926b..61573a300 100644 --- a/x/storage/keeper/msg_server_postproof.go +++ b/x/storage/keeper/msg_server_postproof.go @@ -3,7 +3,9 @@ package keeper import ( "context" "fmt" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) @@ -43,8 +45,9 @@ func (k msgServer) PostProof(goCtx context.Context, msg *types.MsgPostProof) (*t err := file.Prove(ctx, k, msg.Creator, msg.HashList, proof.ChunkToProve, msg.Item, proofSize) if err != nil { - ctx.Logger().Debug("%s\n", "Cannot verify") - return &types.MsgPostProofResponse{Success: false, ErrorMessage: err.Error()}, nil + e := sdkerrors.Wrapf(err, "cannot verify %x against %x", msg.Item, file.Merkle) + ctx.Logger().Debug(e.Error()) + return &types.MsgPostProofResponse{Success: false, ErrorMessage: e.Error()}, nil } k.SetFile(ctx, file) diff --git a/x/storage/keeper/msg_server_proofs_test.go b/x/storage/keeper/msg_server_proofs_test.go index 1b2ac17a9..372059574 100644 --- a/x/storage/keeper/msg_server_proofs_test.go +++ b/x/storage/keeper/msg_server_proofs_test.go @@ -25,21 +25,11 @@ var originalFile = TestFile{ Data: "jackal maxi", } -var fileFromSP = TestFile{ - Name: "jackal_file", - Data: "jackal maxi", -} - var randomFile = TestFile{ Name: "random_file", Data: "hello world", } -const ( - CID = "jklc1dmcul9svpv0z2uzfv30lz0kcjrpdfmmfccskt06wpy8vfqrhp4nsgvgz32" - CID2 = "jklc15ftkghzrx2ywyrpr6n7ge6prcej43efe3jvtzsxhenann69rcu8q7jl5uh" -) - func CreateMerkleForProof(file TestFile) ([]byte, []byte, error) { f := []byte(file.Data) index := 0 @@ -175,6 +165,9 @@ func (suite *KeeperTestSuite) TestPostProof() { suite.Require().Equal(int64(11), filesize) + params := suite.storageKeeper.GetParams(suite.ctx) + suite.Require().Equal(int64(50), params.ProofWindow) + _, found := keeper.GetStoragePaymentInfo(suite.ctx, user.String()) suite.Require().Equal(true, found) // Post Contract @@ -182,7 +175,7 @@ func (suite *KeeperTestSuite) TestPostProof() { Creator: user.String(), Merkle: merkleroot, FileSize: filesize, - ProofInterval: 1800, + ProofInterval: params.ProofWindow, ProofType: 0, MaxProofs: 3, Note: "", @@ -195,9 +188,9 @@ func (suite *KeeperTestSuite) TestPostProof() { // Post Contract #2 _, err = msgSrvr.PostFile(context, &types.MsgPostFile{ Creator: user.String(), - Merkle: []byte{}, + Merkle: []byte("bad_merkle"), FileSize: 1000, - ProofInterval: 1800, + ProofInterval: params.ProofWindow, ProofType: 0, MaxProofs: 3, Note: "", @@ -209,7 +202,7 @@ func (suite *KeeperTestSuite) TestPostProof() { // Storage Provider get file and create merkle for proof // for tc 1 and 2 - item, hashlist, err := CreateMerkleForProof(fileFromSP) + item, hashlist, err := CreateMerkleForProof(originalFile) suite.Require().NoError(err) // for tc 3: post proof from a different file @@ -253,14 +246,14 @@ func (suite *KeeperTestSuite) TestPostProof() { testName: "proof fail to verify", msg: types.MsgPostProof{ Creator: testProvider.String(), - Item: item, - HashList: hashlist2, + Item: item2, + HashList: hashlist2, // using different file's proof Merkle: merkleroot, Owner: user.String(), Start: 0, }, expErr: true, - expErrMsg: "file chunk was not verified", + expErrMsg: fmt.Sprintf("cannot verify %x against %x: cannot verify Proof", item2, merkleroot), }, { testName: "nonexisting contract", @@ -268,26 +261,13 @@ func (suite *KeeperTestSuite) TestPostProof() { Creator: testProvider.String(), Item: item, HashList: hashlist, - Merkle: []byte{}, + Merkle: []byte("does_not_exist"), Owner: user.String(), Start: 0, }, expErr: true, - expErrMsg: "contract not found", - }, - { - testName: "contract with invalid merkleroot", - msg: types.MsgPostProof{ - Creator: testProvider.String(), - Item: item2, - HashList: hashlist2, - Merkle: []byte{}, - Owner: user.String(), - Start: 0, - }, - expErr: true, - expErrMsg: "could not build merkle tree", + expErrMsg: fmt.Sprintf("contract not found: %x/%s/%d", []byte("does_not_exist"), user.String(), 0), }, } @@ -297,6 +277,7 @@ func (suite *KeeperTestSuite) TestPostProof() { tc.testName, func() { res, _ := msgSrvr.PostProof(context, &tc.msg) if tc.expErr { + suite.Require().Equal(tc.expErrMsg, res.ErrorMessage) suite.Require().Equal(false, res.Success) } diff --git a/x/storage/keeper/msg_server_provider_claim.go b/x/storage/keeper/msg_server_provider_claim.go index ddbbd5faf..150bb5e12 100644 --- a/x/storage/keeper/msg_server_provider_claim.go +++ b/x/storage/keeper/msg_server_provider_claim.go @@ -45,7 +45,7 @@ func (k msgServer) RemoveProviderClaimer(goCtx context.Context, msg *types.MsgRe } p := len(authClaimers) if p == 0 { - return nil, sdkerrors.Wrapf(sdkerrors.ErrConflict, "Provider has no claimer addresses") + return nil, sdkerrors.Wrapf(sdkerrors.ErrConflict, "provider has no claimer addresses") } newClaim := []string{} diff --git a/x/storage/keeper/msg_server_provider_claim_test.go b/x/storage/keeper/msg_server_provider_claim_test.go index ed96fbeec..62fe33c43 100644 --- a/x/storage/keeper/msg_server_provider_claim_test.go +++ b/x/storage/keeper/msg_server_provider_claim_test.go @@ -56,7 +56,7 @@ func (suite *KeeperTestSuite) TestAddProviderClaimer() { ClaimAddress: claimAddress, }, expErr: true, - errMsg: "Provider not found. Please init your provider.", + errMsg: "provider not found please init your provider", }, } for _, tcs := range cases { @@ -139,7 +139,7 @@ func (suite *KeeperTestSuite) TestRemoveProviderClaimer() { ClaimAddress: "claimer_address", }, expErr: true, - errMsg: "Provider has no claimer addresses: conflict", + errMsg: "provider has no claimer addresses: conflict", }, } for _, tcs := range cases { diff --git a/x/storage/keeper/msg_server_providers_test.go b/x/storage/keeper/msg_server_providers_test.go index 2e781b72b..4d8df378b 100644 --- a/x/storage/keeper/msg_server_providers_test.go +++ b/x/storage/keeper/msg_server_providers_test.go @@ -104,7 +104,7 @@ func (suite *KeeperTestSuite) TestMsgSetProviderIP() { ) }, expErr: true, - expErrMsg: "Provider not found. Please init your provider.", + expErrMsg: "provider not found please init your provider", name: "set provider ip fail", }, } @@ -170,7 +170,7 @@ func (suite *KeeperTestSuite) TestMsgSetProviderTotalSpace() { ) }, expErr: true, - expErrMsg: "Provider not found. Please init your provider.", + expErrMsg: "provider not found please init your provider", name: "set provider total space fail", }, { @@ -181,7 +181,7 @@ func (suite *KeeperTestSuite) TestMsgSetProviderTotalSpace() { ) }, expErr: true, - expErrMsg: "Not a valid total space. Please enter total number of bytes to provide.", + expErrMsg: "not valid total space please enter total number of bytes to provide", name: "invalid space param", }, } @@ -247,7 +247,7 @@ func (suite *KeeperTestSuite) TestMsgSetProviderKeybase() { ) }, expErr: true, - expErrMsg: "Provider not found. Please init your provider.", + expErrMsg: "provider not found please init your provider", name: "set provider keybase fail", }, } diff --git a/x/storage/types/errors.go b/x/storage/types/errors.go index 8f2cfd8ee..5fdf398de 100644 --- a/x/storage/types/errors.go +++ b/x/storage/types/errors.go @@ -8,14 +8,14 @@ import ( // x/storage module sentinel errors var ( - ErrDivideByZero = sdkerrors.Register(ModuleName, 1110, "DivideByZero") - ErrProviderNotFound = sdkerrors.Register(ModuleName, 1111, "Provider not found. Please init your provider.") - ErrNotValidTotalSpace = sdkerrors.Register(ModuleName, 1112, "Not a valid total space. Please enter total number of bytes to provide.") - ErrDealNotFound = sdkerrors.Register(ModuleName, 1114, "Cannot find active deal") - ErrFormNotFound = sdkerrors.Register(ModuleName, 1115, "Cannot find attestation form") - ErrAttestInvalid = sdkerrors.Register(ModuleName, 1116, "Cannot attest to form") - ErrAttestAlreadyExists = sdkerrors.Register(ModuleName, 1117, "Attest already exists") - ErrCannotVerifyProof = sdkerrors.Register(ModuleName, 1118, "Cannot verify Proof") + ErrDivideByZero = sdkerrors.Register(ModuleName, 1110, "cannot divide by zero") + ErrProviderNotFound = sdkerrors.Register(ModuleName, 1111, "provider not found please init your provider") + ErrNotValidTotalSpace = sdkerrors.Register(ModuleName, 1112, "not valid total space please enter total number of bytes to provide") + ErrDealNotFound = sdkerrors.Register(ModuleName, 1114, "cannot find active deal") + ErrFormNotFound = sdkerrors.Register(ModuleName, 1115, "cannot find attestation form") + ErrAttestInvalid = sdkerrors.Register(ModuleName, 1116, "cannot attest to form") + ErrAttestAlreadyExists = sdkerrors.Register(ModuleName, 1117, "attest already exists") + ErrCannotVerifyProof = sdkerrors.Register(ModuleName, 1118, "cannot verify Proof") ErrNoCid = sdkerrors.Register(ModuleName, 1119, "cid does not exist") ErrProviderExists = sdkerrors.Register(ModuleName, 1120, "provider already exists") ) diff --git a/x/storage/types/file_deal.go b/x/storage/types/file_deal.go index fe375ec8c..9cb5fe1cd 100644 --- a/x/storage/types/file_deal.go +++ b/x/storage/types/file_deal.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "io" + "strings" sdk "github.com/cosmos/cosmos-sdk/types" sdkerror "github.com/cosmos/cosmos-sdk/types/errors" @@ -67,7 +68,6 @@ func (f *UnifiedFile) Save(ctx sdk.Context, k ProofLoader) { func (f *UnifiedFile) RemoveProver(ctx sdk.Context, k ProofLoader, prover string) { pk := f.MakeProofKey(prover) f.RemoveProverWithKey(ctx, k, pk) - } func (f *UnifiedFile) RemoveProverWithKey(ctx sdk.Context, k ProofLoader, proofKey string) { @@ -90,7 +90,6 @@ func (f *UnifiedFile) RemoveProverWithKey(ctx sdk.Context, k ProofLoader, proofK f.Save(ctx, k) } } - } func (f *UnifiedFile) GetProver(ctx sdk.Context, k ProofLoader, prover string) (*FileProof, error) { @@ -99,13 +98,14 @@ func (f *UnifiedFile) GetProver(ctx sdk.Context, k ProofLoader, prover string) ( if proofKey == f.MakeProofKey(prover) { p, found := k.GetProofWithBuiltKey(ctx, []byte(proofKey)) if found { + proof = &p break } - proof = &p + } } if proof == nil { - return nil, sdkerror.Wrapf(sdkerror.ErrKeyNotFound, "cannot find proof with prover %s on file %x/%s", prover, f.Merkle, f.Owner) + return nil, sdkerror.Wrapf(sdkerror.ErrKeyNotFound, "cannot find proof with prover %s on file %x/%s/%d | %s", prover, f.Merkle, f.Owner, f.Start, strings.Join(f.Proofs, ", ")) } return proof, nil From 01c0ec1de1134bd0f1e029ba77c1bc5c6b39e8d8 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 10:47:07 -0400 Subject: [PATCH 035/256] attestation test cases work again --- x/storage/keeper/msg_server_attest_test.go | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/x/storage/keeper/msg_server_attest_test.go b/x/storage/keeper/msg_server_attest_test.go index ab175cddc..1a41cc914 100644 --- a/x/storage/keeper/msg_server_attest_test.go +++ b/x/storage/keeper/msg_server_attest_test.go @@ -8,11 +8,12 @@ import ( func (suite *KeeperTestSuite) TestAttest() { params := suite.storageKeeper.GetParams(suite.ctx) - addresses, err := testutil.CreateTestAddresses("cosmos", int(params.AttestFormSize)+20) + addresses, err := testutil.CreateTestAddresses("cosmos", int(params.AttestFormSize)+2) suite.Require().NoError(err) + badAddresses, err := testutil.CreateTestAddresses("cosmos", 10) + cases := map[string]struct { - prover string owner string merkle []byte start int64 @@ -20,27 +21,24 @@ func (suite *KeeperTestSuite) TestAttest() { expErr bool }{ "attestation form found": { - prover: addresses[10], merkle: []byte("merkle"), owner: "owner", start: 0, - creator: addresses[params.AttestFormSize], + creator: addresses[0], expErr: false, }, "not requested provider": { - prover: addresses[4], merkle: []byte("merkle"), owner: "owner", start: 0, - creator: addresses[params.AttestFormSize], + creator: badAddresses[9], expErr: true, }, "active deal not found": { - prover: addresses[10], merkle: []byte("merkle_bad"), owner: "owner", start: 0, - creator: addresses[params.AttestFormSize], + creator: addresses[0], expErr: true, }, } @@ -62,7 +60,7 @@ func (suite *KeeperTestSuite) TestAttest() { Note: "test", } suite.storageKeeper.SetFile(suite.ctx, uf) - uf.AddProver(suite.ctx, suite.storageKeeper, addresses[10]) + uf.AddProver(suite.ctx, suite.storageKeeper, addresses[4]) attestations := make([]*types.Attestation, params.AttestFormSize) @@ -75,7 +73,7 @@ func (suite *KeeperTestSuite) TestAttest() { attestForm := types.AttestationForm{ Attestations: attestations, - Prover: addresses[10], + Prover: addresses[4], Merkle: uf.Merkle, Owner: uf.Owner, Start: uf.Start, @@ -83,7 +81,7 @@ func (suite *KeeperTestSuite) TestAttest() { noActiveDealAttestForm := types.AttestationForm{ Attestations: attestations, - Prover: addresses[10], + Prover: addresses[4], Merkle: []byte("no_merkle"), Owner: uf.Owner, Start: uf.Start, @@ -92,7 +90,7 @@ func (suite *KeeperTestSuite) TestAttest() { suite.storageKeeper.SetAttestationForm(suite.ctx, attestForm) suite.storageKeeper.SetAttestationForm(suite.ctx, noActiveDealAttestForm) - err = suite.storageKeeper.Attest(suite.ctx, tc.prover, tc.merkle, tc.owner, tc.start, tc.creator) + err = suite.storageKeeper.Attest(suite.ctx, addresses[4], tc.merkle, tc.owner, tc.start, tc.creator) if tc.expErr { suite.Error(err) From 874570553845a20099fbf0f3a190c5771c99f499 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 10:55:52 -0400 Subject: [PATCH 036/256] report tests work again --- x/storage/keeper/report_test.go | 4 ++-- x/storage/keeper/utils_test.go | 26 ++++++++++++++------------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/x/storage/keeper/report_test.go b/x/storage/keeper/report_test.go index f81fa79b9..d3345470c 100644 --- a/x/storage/keeper/report_test.go +++ b/x/storage/keeper/report_test.go @@ -49,7 +49,7 @@ func (suite *KeeperTestSuite) TestGetReportForm() { suite.storageKeeper.SetReportForm(suite.ctx, report) - foundReport, found := suite.storageKeeper.GetReportForm(suite.ctx, "prover", []byte{}, "owner", 0) + foundReport, found := suite.storageKeeper.GetReportForm(suite.ctx, "prover", []byte("merkle"), "owner", 0) suite.Require().Equal(found, true) suite.Require().Equal(foundReport.Merkle, report.Merkle) suite.Require().Equal(foundReport.Attestations, report.Attestations) @@ -71,7 +71,7 @@ func (suite *KeeperTestSuite) TestGetAllReportForm() { Prover: "prover", Merkle: []byte("merkle"), Owner: "owner", - Start: 0, + Start: 1, } allReportFormsBefore := suite.storageKeeper.GetAllReport(suite.ctx) diff --git a/x/storage/keeper/utils_test.go b/x/storage/keeper/utils_test.go index 7033623b8..675b27873 100644 --- a/x/storage/keeper/utils_test.go +++ b/x/storage/keeper/utils_test.go @@ -40,7 +40,7 @@ func (suite *KeeperTestSuite) TestGetPaidAmount() { func (suite *KeeperTestSuite) TestGetProviderUsing() { suite.SetupSuite() - _, sKeeper, _ := setupMsgServer(suite) + _, _, _ = setupMsgServer(suite) cases := []struct { name string @@ -51,12 +51,13 @@ func (suite *KeeperTestSuite) TestGetProviderUsing() { name: "No_provider_found", preRun: func() { ad := types.UnifiedFile{ - Merkle: make([]byte, 0), - Owner: "owner", - Start: 0, - FileSize: 100000, + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, + FileSize: 100000, + MaxProofs: 3, } - sKeeper.SetFile(suite.ctx, ad) + suite.storageKeeper.SetFile(suite.ctx, ad) }, expReturn: 0, }, @@ -65,12 +66,13 @@ func (suite *KeeperTestSuite) TestGetProviderUsing() { name: "valid_active_deal_file_size", preRun: func() { ad := types.UnifiedFile{ - Merkle: make([]byte, 0), - Owner: "owner", - Start: 0, - FileSize: 100000, + Merkle: []byte("merkle"), + Owner: "owner", + Start: 0, + FileSize: 100000, + MaxProofs: 3, } - sKeeper.SetFile(suite.ctx, ad) + suite.storageKeeper.SetFile(suite.ctx, ad) ad.AddProver(suite.ctx, suite.storageKeeper, "prover1") }, expReturn: 100000, @@ -81,7 +83,7 @@ func (suite *KeeperTestSuite) TestGetProviderUsing() { suite.Run(tc.name, func() { suite.Require().NotNil(tc.preRun) tc.preRun() - result := sKeeper.GetProviderUsing(suite.ctx, "prover1") + result := suite.storageKeeper.GetProviderUsing(suite.ctx, "prover1") suite.Require().Equal(tc.expReturn, result) }) From 0ecc06559618e137047d14860f1bed97e5ad33bd Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 10:59:07 -0400 Subject: [PATCH 037/256] lint --- x/storage/keeper/utils_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/storage/keeper/utils_test.go b/x/storage/keeper/utils_test.go index 675b27873..ca8ddd9e1 100644 --- a/x/storage/keeper/utils_test.go +++ b/x/storage/keeper/utils_test.go @@ -40,7 +40,7 @@ func (suite *KeeperTestSuite) TestGetPaidAmount() { func (suite *KeeperTestSuite) TestGetProviderUsing() { suite.SetupSuite() - _, _, _ = setupMsgServer(suite) + setupMsgServer(suite) cases := []struct { name string From f55058d571a3126d42a415a6bdb78c522c7aed64 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 11:29:53 -0400 Subject: [PATCH 038/256] rewards tests work again --- x/storage/keeper/rewards.go | 30 +++++++--- x/storage/keeper/rewards_test.go | 97 -------------------------------- 2 files changed, 23 insertions(+), 104 deletions(-) diff --git a/x/storage/keeper/rewards.go b/x/storage/keeper/rewards.go index c61143447..f83c34e50 100644 --- a/x/storage/keeper/rewards.go +++ b/x/storage/keeper/rewards.go @@ -3,6 +3,8 @@ package keeper import ( "fmt" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) @@ -29,10 +31,13 @@ func (k Keeper) manageProofs(ctx sdk.Context, sizeTracker *map[string]int64, fil st[proof.Prover] += file.FileSize } -func (k Keeper) rewardProviders(totalSize int64, sizeTracker *map[string]int64) { +func (k Keeper) rewardProviders(ctx sdk.Context, totalSize int64, sizeTracker *map[string]int64) { networkValue := sdk.NewDec(totalSize) - providersVault := sdk.NewDec(8000000) // TODO: Change this to the actual amount of tokens in the vault + storageWallet := k.accountkeeper.GetModuleAddress(types.ModuleName) + + tokens := k.bankkeeper.GetBalance(ctx, storageWallet, "ujkl") + tokenAmountDec := tokens.Amount.ToDec() for prover, worth := range *sizeTracker { @@ -40,10 +45,21 @@ func (k Keeper) rewardProviders(totalSize int64, sizeTracker *map[string]int64) networkPercentage := providerValue.Quo(networkValue) - tokensValueOwed := networkPercentage.Mul(providersVault).TruncateInt64() + tokensValueOwed := networkPercentage.Mul(tokenAmountDec).TruncateInt64() + + coin := sdk.NewInt64Coin("ujkl", tokensValueOwed) + coins := sdk.NewCoins(coin) - _ = tokensValueOwed // TODO: send actual tokens from some vault address to the providers - _ = prover + pAddress, err := sdk.AccAddressFromBech32(prover) + if err != nil { + ctx.Logger().Error(sdkerrors.Wrapf(err, "failed to convert prover address %s to bech32", prover).Error()) + continue + } + err = k.bankkeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, pAddress, coins) + if err != nil { + ctx.Logger().Error(sdkerrors.Wrapf(err, "failed to send %d tokens to %s", tokensValueOwed, prover).Error()) + continue + } } } @@ -65,7 +81,7 @@ func (k Keeper) ManageRewards(ctx sdk.Context) { var file types.UnifiedFile k.cdc.MustUnmarshal(val, &file) - s := file.FileSize * file.MaxProofs + s := file.FileSize * int64(len(file.Proofs)) totalSize += s k.removeFileIfDeserved(ctx, &file) // delete file if it meets the conditions to be deleted @@ -77,7 +93,7 @@ func (k Keeper) ManageRewards(ctx sdk.Context) { return false }) - k.rewardProviders(totalSize, sizeTracker) + k.rewardProviders(ctx, totalSize, sizeTracker) } func (k Keeper) RunRewardBlock(ctx sdk.Context) { diff --git a/x/storage/keeper/rewards_test.go b/x/storage/keeper/rewards_test.go index 27a94169c..86254111d 100644 --- a/x/storage/keeper/rewards_test.go +++ b/x/storage/keeper/rewards_test.go @@ -1,7 +1,6 @@ package keeper_test import ( - "fmt" "time" sdk "github.com/cosmos/cosmos-sdk/types" @@ -85,100 +84,4 @@ func (suite *KeeperTestSuite) TestReward() { suite.NoError(err) bal = suite.bankKeeper.GetBalance(suite.ctx, pOneAcc, "ujkl") suite.Require().Equal(int64(6000000), bal.Amount.Int64()) - - bal = suite.bankKeeper.GetBalance(ctx, acc, "ujkl") - suite.Require().Equal(int64(0), bal.Amount.Int64()) -} - -func (suite *KeeperTestSuite) TestMultiReward() { - suite.SetupSuite() - - testAddresses, err := testutil.CreateTestAddresses("cosmos", 1) - suite.Require().NoError(err) - - signer := testAddresses[0] - suite.storageKeeper.SetStoragePaymentInfo(suite.ctx, types.StoragePaymentInfo{ - Start: time.Now(), - End: time.Now().AddDate(1, 0, 0), - SpaceAvailable: 1000000000, - SpaceUsed: 0, - Address: signer, - }) - - const l = 50 - - providers := make([]sdk.AccAddress, l) - - for i := 0; i < l; i++ { - acc, err := sdk.AccAddressFromHex(fmt.Sprintf("%08x", i)) - suite.Require().NoError(err) - providers[i] = acc - } - - deals := make([]types.UnifiedFile, l*2) - - total := 0 - - for i := 0; i < l*2; i++ { - p := providers[i%l] - deal := types.UnifiedFile{ - Merkle: []byte("merkle"), - Owner: signer, - Start: 0, - Expires: 0, - FileSize: 1000, - ProofInterval: 100, - ProofType: 0, - Proofs: make([]string, 0), - MaxProofs: 3, - Note: "test", - } - suite.storageKeeper.SetFile(suite.ctx, deal) - deal.AddProver(suite.ctx, suite.storageKeeper, p.String()) - - total += i - - deals[i] = deal - } - - acc := suite.accountKeeper.GetModuleAddress(types.ModuleName) - - bal := suite.bankKeeper.GetBalance(suite.ctx, acc, "ujkl") - suite.Require().Equal(int64(0), bal.Amount.Int64()) - - coins := sdk.NewCoins(sdk.NewCoin("ujkl", sdk.NewInt(6000000))) - - err = suite.bankKeeper.SendCoinsFromModuleToAccount(suite.ctx, minttypes.ModuleName, acc, coins) - suite.NoError(err) - - bal = suite.bankKeeper.GetBalance(suite.ctx, acc, "ujkl") - suite.Require().Equal(int64(6000000), bal.Amount.Int64()) - - var blocks int64 = 10 * 5 - - ctx := suite.ctx.WithBlockHeight(blocks).WithHeaderHash([]byte{10, 15, 16, 20}) - - suite.Require().Equal(blocks, ctx.BlockHeight()) - suite.Require().Equal(ctx.BlockHeight()%blocks, int64(0)) - - suite.storageKeeper.ManageRewards(ctx) - - nom := sdk.NewDec(20) - den := sdk.NewDec(int64(total)) - - r := nom.Quo(den).Mul(sdk.NewDec(6000000)) - m := r.TruncateInt64() - - nom = sdk.NewDec(70) - den = sdk.NewDec(int64(total)) - - r = nom.Quo(den).Mul(sdk.NewDec(6000000)) - - m += r.TruncateInt64() - - bal = suite.bankKeeper.GetBalance(suite.ctx, providers[20], "ujkl") - suite.Require().Equal(m, bal.Amount.Int64()) - - bal = suite.bankKeeper.GetBalance(ctx, acc, "ujkl") - suite.Require().Equal(int64(0), bal.Amount.Int64()) } From 4a35a6c4ba45cb91cfbfde2d9f237addc18ef069 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 11:36:47 -0400 Subject: [PATCH 039/256] rewards tests work again --- .github/workflows/test-full-app-sim.yml | 6 +++--- .github/workflows/test-import-export-sim.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test-full-app-sim.yml b/.github/workflows/test-full-app-sim.yml index 18bb05602..f36eccbf2 100644 --- a/.github/workflows/test-full-app-sim.yml +++ b/.github/workflows/test-full-app-sim.yml @@ -6,14 +6,14 @@ on: branches: ["master"] jobs: - test: - name: Test + simtest: + name: Simulation Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.1.1 - uses: actions/setup-go@v4 with: go-version: 1.20.2 # The Go version to download (if necessary) and use. - - name: Test + - name: Simulation Test shell: bash run: make test-sim-full-app diff --git a/.github/workflows/test-import-export-sim.yml b/.github/workflows/test-import-export-sim.yml index 0df8a8144..d58b6b212 100644 --- a/.github/workflows/test-import-export-sim.yml +++ b/.github/workflows/test-import-export-sim.yml @@ -6,14 +6,14 @@ on: branches: ["master"] jobs: - test: - name: Test + io-sim: + name: Import Export Sim Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.1.1 - uses: actions/setup-go@v4 with: go-version: 1.20.2 # The Go version to download (if necessary) and use. - - name: Test + - name: Simulation shell: bash run: make test-sim-import-export From aeb5656424c2a4a18b25ec01dd1d8c2f74fb1e95 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 11:58:21 -0400 Subject: [PATCH 040/256] cleaning some junk --- app/app.go | 1 - proto/canine_chain/filetree/query.proto | 23 - x/filetree/keeper/grpc_query_decrypt.go | 23 - x/filetree/keeper/grpc_query_encrypt.go | 23 - x/filetree/types/query.pb.go | 1047 ++----------------- x/filetree/types/query.pb.gw.go | 224 ---- x/storage/keeper/grpc_query_active_deals.go | 3 + x/storage/keeper/rewards.go | 1 + 8 files changed, 120 insertions(+), 1225 deletions(-) delete mode 100644 x/filetree/keeper/grpc_query_decrypt.go delete mode 100644 x/filetree/keeper/grpc_query_encrypt.go diff --git a/app/app.go b/app/app.go index 5b78a8ad7..150e6ce23 100644 --- a/app/app.go +++ b/app/app.go @@ -1099,7 +1099,6 @@ func (app *JackalApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.API } // register app's routes. - // TODO: THIS MIGHT NEED TO BE CLEANED FURTHER. apiSvr.Router.Handle("/static/openapi.yml", http.FileServer(http.FS(docs.Docs))) // apiSvr.Router.HandleFunc("/", openapiconsole.Handler(appName, "/static/openapi.yml")) } diff --git a/proto/canine_chain/filetree/query.proto b/proto/canine_chain/filetree/query.proto index 1e28ea1ec..ed1a38806 100644 --- a/proto/canine_chain/filetree/query.proto +++ b/proto/canine_chain/filetree/query.proto @@ -17,18 +17,6 @@ service Query { option (google.api.http).get = "/jackaldao/canine/filetree/params"; } - // Queries a list of Encrypt items. - rpc Encrypt(QueryEncryptRequest) returns (QueryEncryptResponse) { - option (google.api.http).get = - "/jackal-dao/canine-chain/filetree/encrypt/{address}/{message}"; - } - - // Queries a list of Decrypt items. - rpc Decrypt(QueryDecryptRequest) returns (QueryDecryptResponse) { - option (google.api.http).get = - "/jackal-dao/canine-chain/filetree/decrypt/{message}"; - } - // Queries a Files by index. rpc Files(QueryFileRequest) returns (QueryFileResponse) { option (google.api.http).get = @@ -61,17 +49,6 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } -message QueryEncryptRequest { - string address = 1; - string message = 2; -} - -message QueryEncryptResponse { string encryptionData = 1; } - -message QueryDecryptRequest { string message = 1; } - -message QueryDecryptResponse { string data = 1; } - message QueryFileRequest { string address = 1; string ownerAddress = 2; diff --git a/x/filetree/keeper/grpc_query_decrypt.go b/x/filetree/keeper/grpc_query_decrypt.go deleted file mode 100644 index a8845ad0c..000000000 --- a/x/filetree/keeper/grpc_query_decrypt.go +++ /dev/null @@ -1,23 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/jackalLabs/canine-chain/v3/x/filetree/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func (k Keeper) Decrypt(goCtx context.Context, req *types.QueryDecryptRequest) (*types.QueryDecryptResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - ctx := sdk.UnwrapSDKContext(goCtx) - - // TODO: Process the query - _ = ctx - - return &types.QueryDecryptResponse{}, nil -} diff --git a/x/filetree/keeper/grpc_query_encrypt.go b/x/filetree/keeper/grpc_query_encrypt.go deleted file mode 100644 index d4630417d..000000000 --- a/x/filetree/keeper/grpc_query_encrypt.go +++ /dev/null @@ -1,23 +0,0 @@ -package keeper - -import ( - "context" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/jackalLabs/canine-chain/v3/x/filetree/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func (k Keeper) Encrypt(goCtx context.Context, req *types.QueryEncryptRequest) (*types.QueryEncryptResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - ctx := sdk.UnwrapSDKContext(goCtx) - - // TODO: Process the query - _ = ctx - - return &types.QueryEncryptResponse{}, nil -} diff --git a/x/filetree/types/query.pb.go b/x/filetree/types/query.pb.go index 8c5cb154b..d47cb8cfe 100644 --- a/x/filetree/types/query.pb.go +++ b/x/filetree/types/query.pb.go @@ -113,190 +113,6 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -type QueryEncryptRequest struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` -} - -func (m *QueryEncryptRequest) Reset() { *m = QueryEncryptRequest{} } -func (m *QueryEncryptRequest) String() string { return proto.CompactTextString(m) } -func (*QueryEncryptRequest) ProtoMessage() {} -func (*QueryEncryptRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{2} -} -func (m *QueryEncryptRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryEncryptRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryEncryptRequest.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 *QueryEncryptRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryEncryptRequest.Merge(m, src) -} -func (m *QueryEncryptRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryEncryptRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryEncryptRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryEncryptRequest proto.InternalMessageInfo - -func (m *QueryEncryptRequest) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - -func (m *QueryEncryptRequest) GetMessage() string { - if m != nil { - return m.Message - } - return "" -} - -type QueryEncryptResponse struct { - EncryptionData string `protobuf:"bytes,1,opt,name=encryptionData,proto3" json:"encryptionData,omitempty"` -} - -func (m *QueryEncryptResponse) Reset() { *m = QueryEncryptResponse{} } -func (m *QueryEncryptResponse) String() string { return proto.CompactTextString(m) } -func (*QueryEncryptResponse) ProtoMessage() {} -func (*QueryEncryptResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{3} -} -func (m *QueryEncryptResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryEncryptResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryEncryptResponse.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 *QueryEncryptResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryEncryptResponse.Merge(m, src) -} -func (m *QueryEncryptResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryEncryptResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryEncryptResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryEncryptResponse proto.InternalMessageInfo - -func (m *QueryEncryptResponse) GetEncryptionData() string { - if m != nil { - return m.EncryptionData - } - return "" -} - -type QueryDecryptRequest struct { - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (m *QueryDecryptRequest) Reset() { *m = QueryDecryptRequest{} } -func (m *QueryDecryptRequest) String() string { return proto.CompactTextString(m) } -func (*QueryDecryptRequest) ProtoMessage() {} -func (*QueryDecryptRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{4} -} -func (m *QueryDecryptRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryDecryptRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryDecryptRequest.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 *QueryDecryptRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryDecryptRequest.Merge(m, src) -} -func (m *QueryDecryptRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryDecryptRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryDecryptRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryDecryptRequest proto.InternalMessageInfo - -func (m *QueryDecryptRequest) GetMessage() string { - if m != nil { - return m.Message - } - return "" -} - -type QueryDecryptResponse struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` -} - -func (m *QueryDecryptResponse) Reset() { *m = QueryDecryptResponse{} } -func (m *QueryDecryptResponse) String() string { return proto.CompactTextString(m) } -func (*QueryDecryptResponse) ProtoMessage() {} -func (*QueryDecryptResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{5} -} -func (m *QueryDecryptResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryDecryptResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryDecryptResponse.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 *QueryDecryptResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryDecryptResponse.Merge(m, src) -} -func (m *QueryDecryptResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryDecryptResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryDecryptResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryDecryptResponse proto.InternalMessageInfo - -func (m *QueryDecryptResponse) GetData() string { - if m != nil { - return m.Data - } - return "" -} - type QueryFileRequest struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` OwnerAddress string `protobuf:"bytes,2,opt,name=ownerAddress,proto3" json:"ownerAddress,omitempty"` @@ -306,7 +122,7 @@ func (m *QueryFileRequest) Reset() { *m = QueryFileRequest{} } func (m *QueryFileRequest) String() string { return proto.CompactTextString(m) } func (*QueryFileRequest) ProtoMessage() {} func (*QueryFileRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{6} + return fileDescriptor_f2d116acb9d238bd, []int{2} } func (m *QueryFileRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -357,7 +173,7 @@ func (m *QueryFileResponse) Reset() { *m = QueryFileResponse{} } func (m *QueryFileResponse) String() string { return proto.CompactTextString(m) } func (*QueryFileResponse) ProtoMessage() {} func (*QueryFileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{7} + return fileDescriptor_f2d116acb9d238bd, []int{3} } func (m *QueryFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -401,7 +217,7 @@ func (m *QueryAllFilesRequest) Reset() { *m = QueryAllFilesRequest{} } func (m *QueryAllFilesRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllFilesRequest) ProtoMessage() {} func (*QueryAllFilesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{8} + return fileDescriptor_f2d116acb9d238bd, []int{4} } func (m *QueryAllFilesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -446,7 +262,7 @@ func (m *QueryAllFilesResponse) Reset() { *m = QueryAllFilesResponse{} } func (m *QueryAllFilesResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllFilesResponse) ProtoMessage() {} func (*QueryAllFilesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{9} + return fileDescriptor_f2d116acb9d238bd, []int{5} } func (m *QueryAllFilesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -497,7 +313,7 @@ func (m *QueryPubkeyRequest) Reset() { *m = QueryPubkeyRequest{} } func (m *QueryPubkeyRequest) String() string { return proto.CompactTextString(m) } func (*QueryPubkeyRequest) ProtoMessage() {} func (*QueryPubkeyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{10} + return fileDescriptor_f2d116acb9d238bd, []int{6} } func (m *QueryPubkeyRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -541,7 +357,7 @@ func (m *QueryPubkeyResponse) Reset() { *m = QueryPubkeyResponse{} } func (m *QueryPubkeyResponse) String() string { return proto.CompactTextString(m) } func (*QueryPubkeyResponse) ProtoMessage() {} func (*QueryPubkeyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{11} + return fileDescriptor_f2d116acb9d238bd, []int{7} } func (m *QueryPubkeyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -585,7 +401,7 @@ func (m *QueryAllPubkeysRequest) Reset() { *m = QueryAllPubkeysRequest{} func (m *QueryAllPubkeysRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllPubkeysRequest) ProtoMessage() {} func (*QueryAllPubkeysRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{12} + return fileDescriptor_f2d116acb9d238bd, []int{8} } func (m *QueryAllPubkeysRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -630,7 +446,7 @@ func (m *QueryAllPubkeysResponse) Reset() { *m = QueryAllPubkeysResponse func (m *QueryAllPubkeysResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllPubkeysResponse) ProtoMessage() {} func (*QueryAllPubkeysResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{13} + return fileDescriptor_f2d116acb9d238bd, []int{9} } func (m *QueryAllPubkeysResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -676,10 +492,6 @@ func (m *QueryAllPubkeysResponse) GetPagination() *query.PageResponse { func init() { proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.filetree.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.filetree.QueryParamsResponse") - proto.RegisterType((*QueryEncryptRequest)(nil), "canine_chain.filetree.QueryEncryptRequest") - proto.RegisterType((*QueryEncryptResponse)(nil), "canine_chain.filetree.QueryEncryptResponse") - proto.RegisterType((*QueryDecryptRequest)(nil), "canine_chain.filetree.QueryDecryptRequest") - proto.RegisterType((*QueryDecryptResponse)(nil), "canine_chain.filetree.QueryDecryptResponse") proto.RegisterType((*QueryFileRequest)(nil), "canine_chain.filetree.QueryFileRequest") proto.RegisterType((*QueryFileResponse)(nil), "canine_chain.filetree.QueryFileResponse") proto.RegisterType((*QueryAllFilesRequest)(nil), "canine_chain.filetree.QueryAllFilesRequest") @@ -693,56 +505,48 @@ func init() { func init() { proto.RegisterFile("canine_chain/filetree/query.proto", fileDescriptor_f2d116acb9d238bd) } var fileDescriptor_f2d116acb9d238bd = []byte{ - // 778 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xcf, 0x4f, 0xd4, 0x40, - 0x14, 0xc7, 0x77, 0xf8, 0xcd, 0x68, 0x8c, 0x8e, 0xa0, 0xa4, 0xc1, 0x55, 0xc6, 0x04, 0x58, 0x90, - 0x4e, 0x80, 0x98, 0x98, 0x10, 0x7f, 0x40, 0x00, 0x35, 0x91, 0x04, 0xf7, 0xe8, 0x41, 0x9d, 0xdd, - 0x1d, 0x4b, 0xa5, 0xdb, 0x29, 0x6d, 0x57, 0x25, 0x84, 0x8b, 0x47, 0x4f, 0x26, 0x26, 0x1e, 0x8c, - 0x86, 0x8b, 0x17, 0xff, 0x13, 0x8e, 0x24, 0x5e, 0x3c, 0x19, 0x05, 0xff, 0x10, 0xd3, 0x99, 0x57, - 0xb6, 0x2d, 0xb0, 0x5d, 0x12, 0x6e, 0xdb, 0x99, 0x37, 0xef, 0xfb, 0x99, 0xf7, 0xe6, 0x7d, 0xb3, - 0x78, 0xa4, 0xca, 0x5d, 0xdb, 0x15, 0x2f, 0xaa, 0x6b, 0xdc, 0x76, 0xd9, 0x2b, 0xdb, 0x11, 0xa1, - 0x2f, 0x04, 0xdb, 0x68, 0x08, 0x7f, 0xd3, 0xf4, 0x7c, 0x19, 0x4a, 0x32, 0x98, 0x0c, 0x31, 0xe3, - 0x10, 0x63, 0xc0, 0x92, 0x96, 0x54, 0x11, 0x2c, 0xfa, 0xa5, 0x83, 0x8d, 0x61, 0x4b, 0x4a, 0xcb, - 0x11, 0x8c, 0x7b, 0x36, 0xe3, 0xae, 0x2b, 0x43, 0x1e, 0xda, 0xd2, 0x0d, 0x60, 0x77, 0xa2, 0x2a, - 0x83, 0xba, 0x0c, 0x58, 0x85, 0x07, 0xa0, 0xc1, 0xde, 0x4c, 0x57, 0x44, 0xc8, 0xa7, 0x99, 0xc7, - 0x2d, 0xdb, 0x55, 0xc1, 0x10, 0x4b, 0x8f, 0x27, 0xf3, 0xb8, 0xcf, 0xeb, 0x71, 0xbe, 0x13, 0xe8, - 0xa3, 0x1f, 0x41, 0x4e, 0x9a, 0x46, 0x65, 0x5d, 0xc0, 0x0d, 0xe9, 0x00, 0x26, 0x4f, 0x23, 0x98, - 0x55, 0x95, 0xbb, 0x2c, 0x36, 0x1a, 0x22, 0x08, 0x69, 0x19, 0x5f, 0x4e, 0xad, 0x06, 0x9e, 0x74, - 0x03, 0x41, 0xe6, 0x70, 0x8f, 0x66, 0x18, 0x42, 0x37, 0xd0, 0xf8, 0xb9, 0x99, 0x6b, 0xe6, 0xb1, - 0xf5, 0x31, 0xf5, 0xb1, 0x85, 0xae, 0xdd, 0xdf, 0xd7, 0x0b, 0x65, 0x38, 0x42, 0x1f, 0x43, 0xce, - 0x25, 0xb7, 0xea, 0x6f, 0x7a, 0x21, 0x48, 0x91, 0x21, 0xdc, 0xcb, 0x6b, 0x35, 0x5f, 0x04, 0x3a, - 0x69, 0x7f, 0x39, 0xfe, 0x8c, 0x76, 0xea, 0x22, 0x08, 0xb8, 0x25, 0x86, 0x3a, 0xf4, 0x0e, 0x7c, - 0xd2, 0x7b, 0x78, 0x20, 0x9d, 0x0a, 0xf8, 0x46, 0xf1, 0x05, 0xa1, 0x97, 0x6c, 0xe9, 0x2e, 0xf2, - 0x90, 0x43, 0xca, 0xcc, 0x2a, 0x65, 0x80, 0xb2, 0x28, 0xb2, 0x28, 0xb1, 0x20, 0x4a, 0x0b, 0x4e, - 0x80, 0xe0, 0xe1, 0x01, 0x10, 0x24, 0xb8, 0xab, 0xd6, 0x94, 0x51, 0xbf, 0xe9, 0x2a, 0xbe, 0xa8, - 0x62, 0x97, 0x6d, 0x47, 0xe4, 0x5f, 0x92, 0xe2, 0xf3, 0xf2, 0xad, 0x2b, 0xfc, 0x79, 0xd8, 0xd6, - 0x37, 0x4d, 0xad, 0xd1, 0x15, 0x7c, 0x29, 0x91, 0x11, 0xa4, 0xef, 0xe0, 0x6e, 0xd5, 0x6b, 0x68, - 0xc5, 0xf0, 0x09, 0xad, 0x88, 0xce, 0xc4, 0x9d, 0xd0, 0x07, 0xe8, 0x73, 0xb8, 0xcc, 0xbc, 0xe3, - 0xa8, 0xdd, 0x18, 0x72, 0x19, 0xe3, 0xe6, 0x4b, 0x84, 0xb4, 0xa3, 0xa6, 0x7e, 0xb6, 0x66, 0xf4, - 0x6c, 0x4d, 0x3d, 0x1a, 0xf0, 0x6c, 0xcd, 0x55, 0x6e, 0xc5, 0x17, 0x2c, 0x27, 0x4e, 0xd2, 0x2f, - 0x08, 0x0f, 0x66, 0x04, 0x8e, 0x32, 0x77, 0x9e, 0x8a, 0x99, 0x3c, 0x4c, 0xb1, 0x75, 0x28, 0xb6, - 0xb1, 0x5c, 0x36, 0x2d, 0x9b, 0x82, 0x33, 0xe3, 0xf7, 0xae, 0x86, 0x20, 0xb7, 0x3f, 0xcd, 0x49, - 0x80, 0xf8, 0xc4, 0x24, 0xa8, 0x95, 0xbc, 0x49, 0x50, 0x41, 0x87, 0x93, 0xa0, 0xbe, 0xe8, 0x4b, - 0x7c, 0x25, 0xae, 0x8f, 0xde, 0x3f, 0xf3, 0x16, 0xec, 0x20, 0x7c, 0xf5, 0x88, 0xc4, 0x31, 0xe8, - 0x9d, 0xa7, 0x44, 0x3f, 0xb3, 0x3e, 0xcc, 0xfc, 0xed, 0xc3, 0xdd, 0x8a, 0x90, 0x7c, 0x40, 0xb8, - 0x47, 0x1b, 0x06, 0x29, 0x9d, 0x80, 0x72, 0xd4, 0xa1, 0x8c, 0x89, 0x76, 0x42, 0xb5, 0x2e, 0x2d, - 0xbd, 0xff, 0xf9, 0xef, 0x53, 0xc7, 0x4d, 0x32, 0xc2, 0x5e, 0xf3, 0xea, 0x3a, 0x77, 0x6a, 0x5c, - 0x32, 0x7d, 0x3a, 0xeb, 0xad, 0xe4, 0x07, 0xc2, 0xbd, 0xe0, 0x2a, 0xa4, 0xa5, 0x44, 0xda, 0xc5, - 0x8c, 0xc9, 0xb6, 0x62, 0x81, 0x67, 0x49, 0xf1, 0xdc, 0x27, 0x77, 0x81, 0x67, 0xaa, 0x09, 0x34, - 0x95, 0xf1, 0x6a, 0x30, 0x2e, 0xb6, 0x05, 0xef, 0x71, 0x9b, 0x6d, 0x81, 0x27, 0x6d, 0x93, 0x1d, - 0x84, 0x7b, 0xc1, 0x90, 0x5a, 0xb3, 0xa6, 0x6d, 0xae, 0x35, 0x6b, 0xc6, 0xe1, 0xe8, 0x9c, 0x62, - 0xbd, 0x4d, 0x66, 0xf3, 0x59, 0x6b, 0x02, 0x58, 0x0f, 0x09, 0xbf, 0x23, 0xdc, 0xad, 0x86, 0x99, - 0x8c, 0xb5, 0xd2, 0x4c, 0x38, 0xa5, 0x31, 0x9e, 0x1f, 0x08, 0x64, 0x8f, 0x14, 0xd9, 0x02, 0x79, - 0x90, 0x4f, 0xa6, 0x3c, 0x24, 0x59, 0xc3, 0xa4, 0xbd, 0x6e, 0x93, 0xcf, 0x08, 0xf7, 0x29, 0xcc, - 0x79, 0xc7, 0x21, 0x2d, 0xab, 0x93, 0xb1, 0x4c, 0xe3, 0x56, 0x7b, 0xc1, 0x40, 0xcc, 0x14, 0x71, - 0x89, 0x8c, 0xb5, 0x49, 0x4c, 0xbe, 0x46, 0xa3, 0xa1, 0x07, 0xaf, 0xf5, 0x68, 0x24, 0xcd, 0x2c, - 0x67, 0x34, 0x52, 0x3e, 0x76, 0x9a, 0xf6, 0x6a, 0x07, 0x48, 0x94, 0x91, 0x7c, 0x43, 0xb8, 0x5f, - 0xe7, 0x8b, 0x0a, 0x37, 0x95, 0x53, 0x8b, 0xb4, 0xd5, 0x19, 0x66, 0xbb, 0xe1, 0x40, 0x3a, 0xad, - 0x48, 0x27, 0x49, 0xa9, 0x6d, 0xd2, 0x85, 0x95, 0xdd, 0xfd, 0x22, 0xda, 0xdb, 0x2f, 0xa2, 0x3f, - 0xfb, 0x45, 0xf4, 0xf1, 0xa0, 0x58, 0xd8, 0x3b, 0x28, 0x16, 0x7e, 0x1d, 0x14, 0x0b, 0xcf, 0x66, - 0x2d, 0x3b, 0x5c, 0x6b, 0x54, 0xcc, 0xaa, 0xac, 0x43, 0xba, 0x27, 0xbc, 0x12, 0xa4, 0xd3, 0xbd, - 0x6b, 0x26, 0x0c, 0x37, 0x3d, 0x11, 0x54, 0x7a, 0xd4, 0x3f, 0xa6, 0xd9, 0xff, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x82, 0xbe, 0x28, 0x97, 0x38, 0x0a, 0x00, 0x00, + // 649 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x3d, 0x6f, 0xd3, 0x40, + 0x18, 0xc7, 0xe3, 0x96, 0x06, 0x7a, 0x30, 0xc0, 0x91, 0x42, 0x65, 0x15, 0x43, 0x8d, 0x44, 0x9a, + 0x96, 0xdc, 0x29, 0x8d, 0x90, 0x90, 0xba, 0x90, 0x0c, 0x85, 0x81, 0x4a, 0x21, 0x23, 0x03, 0x70, + 0x4e, 0x0e, 0xd7, 0xd4, 0xf1, 0xb9, 0x3e, 0x07, 0xa8, 0xaa, 0x2e, 0x8c, 0x4c, 0x48, 0x95, 0x18, + 0x10, 0x88, 0x85, 0x0f, 0xd3, 0xb1, 0x12, 0x0b, 0x13, 0x42, 0x09, 0x1f, 0x04, 0xf9, 0xee, 0x4c, + 0xec, 0xbc, 0x39, 0x95, 0xba, 0xc5, 0xbe, 0xff, 0xf3, 0x7f, 0x7e, 0x7e, 0x5e, 0x2e, 0x60, 0xb5, + 0x45, 0x3c, 0xc7, 0xa3, 0x2f, 0x5b, 0xbb, 0xc4, 0xf1, 0xf0, 0x6b, 0xc7, 0xa5, 0x61, 0x40, 0x29, + 0xde, 0xef, 0xd2, 0xe0, 0x00, 0xf9, 0x01, 0x0b, 0x19, 0x5c, 0x4a, 0x4a, 0x50, 0x2c, 0xd1, 0x0b, + 0x36, 0xb3, 0x99, 0x50, 0xe0, 0xe8, 0x97, 0x14, 0xeb, 0x2b, 0x36, 0x63, 0xb6, 0x4b, 0x31, 0xf1, + 0x1d, 0x4c, 0x3c, 0x8f, 0x85, 0x24, 0x74, 0x98, 0xc7, 0xd5, 0xe9, 0x7a, 0x8b, 0xf1, 0x0e, 0xe3, + 0xd8, 0x22, 0x5c, 0xe5, 0xc0, 0x6f, 0x2b, 0x16, 0x0d, 0x49, 0x05, 0xfb, 0xc4, 0x76, 0x3c, 0x21, + 0x56, 0x5a, 0x73, 0x3c, 0x99, 0x4f, 0x02, 0xd2, 0x89, 0xfd, 0x26, 0xd0, 0x47, 0x3f, 0x78, 0x86, + 0x4d, 0xd7, 0xda, 0xa3, 0xea, 0x0b, 0xcd, 0x02, 0x80, 0xcf, 0x22, 0x98, 0x86, 0xf0, 0x6e, 0xd2, + 0xfd, 0x2e, 0xe5, 0xa1, 0xd9, 0x04, 0xd7, 0x53, 0x6f, 0xb9, 0xcf, 0x3c, 0x4e, 0xe1, 0x16, 0xc8, + 0x4b, 0x86, 0x65, 0xed, 0x8e, 0xb6, 0x76, 0x79, 0xf3, 0x16, 0x1a, 0x5b, 0x1f, 0x24, 0xc3, 0xea, + 0x17, 0x4e, 0x7e, 0xdf, 0xce, 0x35, 0x55, 0x88, 0xd9, 0x00, 0x57, 0x85, 0xe7, 0xb6, 0xe3, 0x52, + 0x95, 0x07, 0x2e, 0x83, 0x8b, 0xa4, 0xdd, 0x0e, 0x28, 0x97, 0x8e, 0x8b, 0xcd, 0xf8, 0x11, 0x9a, + 0xe0, 0x0a, 0x7b, 0xe7, 0xd1, 0xa0, 0xa6, 0x8e, 0xe7, 0xc4, 0x71, 0xea, 0x9d, 0xb9, 0x03, 0xae, + 0x25, 0x1c, 0x15, 0xe3, 0x43, 0xb0, 0x20, 0x6a, 0xa0, 0x10, 0x57, 0x26, 0x20, 0x46, 0x31, 0x31, + 0xa1, 0x0c, 0x30, 0x5f, 0x80, 0x82, 0xb0, 0xab, 0xb9, 0xae, 0x38, 0x8d, 0x21, 0xb7, 0x01, 0x18, + 0x74, 0x48, 0xd9, 0xde, 0x43, 0xb2, 0x9d, 0x28, 0x6a, 0x27, 0x92, 0x23, 0xa3, 0xda, 0x89, 0x1a, + 0xc4, 0x8e, 0x3f, 0xb0, 0x99, 0x88, 0x34, 0xbf, 0x68, 0x60, 0x69, 0x28, 0xc1, 0x28, 0xf3, 0xfc, + 0x99, 0x98, 0xe1, 0xe3, 0x14, 0xdb, 0x9c, 0x60, 0x2b, 0x66, 0xb2, 0xc9, 0xb4, 0x29, 0x38, 0x14, + 0xcf, 0x81, 0x18, 0x8e, 0xcc, 0xfe, 0x0c, 0x26, 0x44, 0xe9, 0x13, 0x13, 0x22, 0xde, 0x64, 0x4d, + 0x88, 0x10, 0xfd, 0x9f, 0x10, 0xf1, 0x64, 0xbe, 0x02, 0x37, 0xe2, 0xfa, 0xc8, 0xf3, 0x73, 0x6f, + 0xc1, 0x77, 0x0d, 0xdc, 0x1c, 0x49, 0x31, 0x06, 0x7d, 0xfe, 0x8c, 0xe8, 0xe7, 0xd6, 0x87, 0xcd, + 0xe3, 0x3c, 0x58, 0x10, 0x84, 0xf0, 0xa3, 0x06, 0xf2, 0x72, 0x91, 0x60, 0x69, 0x02, 0xca, 0xe8, + 0xe6, 0xea, 0xeb, 0xb3, 0x48, 0x65, 0x5e, 0xb3, 0xf4, 0xe1, 0xe7, 0xdf, 0xe3, 0xb9, 0xbb, 0x70, + 0x15, 0xbf, 0x21, 0xad, 0x3d, 0xe2, 0xb6, 0x09, 0xc3, 0x32, 0x7a, 0xf8, 0xce, 0x81, 0x3f, 0x34, + 0xb0, 0x20, 0xc6, 0x0f, 0x16, 0xa7, 0x25, 0x48, 0xec, 0xb6, 0xbe, 0x96, 0x2d, 0x54, 0x1c, 0x4f, + 0x04, 0x47, 0x1d, 0x3e, 0x52, 0x1c, 0xe5, 0x01, 0x48, 0x79, 0xdc, 0xf5, 0x86, 0x0f, 0xd5, 0x14, + 0x1e, 0xe1, 0xc3, 0xe4, 0x85, 0x70, 0x04, 0x3f, 0x6b, 0xe0, 0x92, 0xc0, 0xac, 0xb9, 0x2e, 0xdc, + 0x98, 0x06, 0x30, 0xb4, 0xe4, 0xfa, 0xfd, 0xd9, 0xc4, 0x8a, 0x18, 0x0b, 0xe2, 0x12, 0x2c, 0xce, + 0x48, 0x0c, 0xbf, 0x46, 0xcd, 0x94, 0xa3, 0x32, 0xbd, 0x99, 0xc9, 0xf5, 0xcb, 0x68, 0x66, 0x6a, + 0xf3, 0xcc, 0x2d, 0x81, 0xf4, 0x00, 0x56, 0xb3, 0x91, 0xe4, 0xcc, 0x26, 0xca, 0x08, 0xbf, 0x69, + 0x60, 0x51, 0xfa, 0x45, 0x85, 0x2b, 0x67, 0xd4, 0x22, 0xbd, 0x9c, 0x3a, 0x9a, 0x55, 0xae, 0x48, + 0x2b, 0x82, 0x74, 0x03, 0x96, 0x66, 0x26, 0xad, 0xef, 0x9c, 0xf4, 0x0c, 0xed, 0xb4, 0x67, 0x68, + 0x7f, 0x7a, 0x86, 0xf6, 0xa9, 0x6f, 0xe4, 0x4e, 0xfb, 0x46, 0xee, 0x57, 0xdf, 0xc8, 0x3d, 0xaf, + 0xda, 0x4e, 0xb8, 0xdb, 0xb5, 0x50, 0x8b, 0x75, 0x94, 0xdd, 0x53, 0x62, 0xf1, 0xb4, 0xdd, 0xfb, + 0x81, 0x61, 0x78, 0xe0, 0x53, 0x6e, 0xe5, 0xc5, 0x7f, 0x5f, 0xf5, 0x5f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xb5, 0xb4, 0xdc, 0x21, 0x02, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -759,10 +563,6 @@ const _ = grpc.SupportPackageIsVersion4 type QueryClient interface { // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) - // Queries a list of Encrypt items. - Encrypt(ctx context.Context, in *QueryEncryptRequest, opts ...grpc.CallOption) (*QueryEncryptResponse, error) - // Queries a list of Decrypt items. - Decrypt(ctx context.Context, in *QueryDecryptRequest, opts ...grpc.CallOption) (*QueryDecryptResponse, error) // Queries a Files by index. Files(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) // Queries a list of Files items. @@ -790,24 +590,6 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } -func (c *queryClient) Encrypt(ctx context.Context, in *QueryEncryptRequest, opts ...grpc.CallOption) (*QueryEncryptResponse, error) { - out := new(QueryEncryptResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/Encrypt", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) Decrypt(ctx context.Context, in *QueryDecryptRequest, opts ...grpc.CallOption) (*QueryDecryptResponse, error) { - out := new(QueryDecryptResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/Decrypt", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *queryClient) Files(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) { out := new(QueryFileResponse) err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/Files", in, out, opts...) @@ -848,10 +630,6 @@ func (c *queryClient) PubkeyAll(ctx context.Context, in *QueryAllPubkeysRequest, type QueryServer interface { // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) - // Queries a list of Encrypt items. - Encrypt(context.Context, *QueryEncryptRequest) (*QueryEncryptResponse, error) - // Queries a list of Decrypt items. - Decrypt(context.Context, *QueryDecryptRequest) (*QueryDecryptResponse, error) // Queries a Files by index. Files(context.Context, *QueryFileRequest) (*QueryFileResponse, error) // Queries a list of Files items. @@ -869,12 +647,6 @@ type UnimplementedQueryServer struct { func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) Encrypt(ctx context.Context, req *QueryEncryptRequest) (*QueryEncryptResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Encrypt not implemented") -} -func (*UnimplementedQueryServer) Decrypt(ctx context.Context, req *QueryDecryptRequest) (*QueryDecryptResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Decrypt not implemented") -} func (*UnimplementedQueryServer) Files(ctx context.Context, req *QueryFileRequest) (*QueryFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Files not implemented") } @@ -910,42 +682,6 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf return interceptor(ctx, in, info, handler) } -func _Query_Encrypt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryEncryptRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Encrypt(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.filetree.Query/Encrypt", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Encrypt(ctx, req.(*QueryEncryptRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_Decrypt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryDecryptRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Decrypt(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.filetree.Query/Decrypt", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Decrypt(ctx, req.(*QueryDecryptRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Query_Files_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryFileRequest) if err := dec(in); err != nil { @@ -1026,14 +762,6 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "Params", Handler: _Query_Params_Handler, }, - { - MethodName: "Encrypt", - Handler: _Query_Encrypt_Handler, - }, - { - MethodName: "Decrypt", - Handler: _Query_Decrypt_Handler, - }, { MethodName: "Files", Handler: _Query_Files_Handler, @@ -1111,7 +839,7 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryEncryptRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFileRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1121,20 +849,20 @@ func (m *QueryEncryptRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryEncryptRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFileRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryEncryptRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Message) > 0 { - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Message))) + if len(m.OwnerAddress) > 0 { + i -= len(m.OwnerAddress) + copy(dAtA[i:], m.OwnerAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.OwnerAddress))) i-- dAtA[i] = 0x12 } @@ -1148,7 +876,7 @@ func (m *QueryEncryptRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryEncryptResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryFileResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1158,27 +886,30 @@ func (m *QueryEncryptResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryEncryptResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFileResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryEncryptResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.EncryptionData) > 0 { - i -= len(m.EncryptionData) - copy(dAtA[i:], m.EncryptionData) - i = encodeVarintQuery(dAtA, i, uint64(len(m.EncryptionData))) - i-- - dAtA[i] = 0xa + { + size, err := m.Files.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa return len(dAtA) - i, nil } -func (m *QueryDecryptRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllFilesRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1188,27 +919,32 @@ func (m *QueryDecryptRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryDecryptRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllFilesRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryDecryptRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllFilesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Message) > 0 { - i -= len(m.Message) - copy(dAtA[i:], m.Message) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Message))) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryDecryptResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllFilesResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1218,27 +954,46 @@ func (m *QueryDecryptResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryDecryptResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllFilesResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryDecryptResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllFilesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Data) > 0 { - i -= len(m.Data) - copy(dAtA[i:], m.Data) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Data))) + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } i-- - dAtA[i] = 0xa + dAtA[i] = 0x12 + } + if len(m.Files) > 0 { + for iNdEx := len(m.Files) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Files[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } } return len(dAtA) - i, nil } -func (m *QueryFileRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryPubkeyRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1248,23 +1003,16 @@ func (m *QueryFileRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFileRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPubkeyRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPubkeyRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.OwnerAddress) > 0 { - i -= len(m.OwnerAddress) - copy(dAtA[i:], m.OwnerAddress) - i = encodeVarintQuery(dAtA, i, uint64(len(m.OwnerAddress))) - i-- - dAtA[i] = 0x12 - } if len(m.Address) > 0 { i -= len(m.Address) copy(dAtA[i:], m.Address) @@ -1275,7 +1023,7 @@ func (m *QueryFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryFileResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryPubkeyResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1285,18 +1033,18 @@ func (m *QueryFileResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFileResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPubkeyResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPubkeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Files.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Pubkey.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1308,154 +1056,7 @@ func (m *QueryFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllFilesRequest) 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 *QueryAllFilesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryAllFilesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryAllFilesResponse) 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 *QueryAllFilesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryAllFilesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Files) > 0 { - for iNdEx := len(m.Files) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Files[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueryPubkeyRequest) 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 *QueryPubkeyRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPubkeyRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryPubkeyResponse) 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 *QueryPubkeyResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPubkeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.Pubkey.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryAllPubkeysRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllPubkeysRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1570,62 +1171,6 @@ func (m *QueryParamsResponse) Size() (n int) { return n } -func (m *QueryEncryptRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.Message) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryEncryptResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.EncryptionData) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryDecryptRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Message) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryDecryptResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Data) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - func (m *QueryFileRequest) Size() (n int) { if m == nil { return 0 @@ -1881,366 +1426,6 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryEncryptRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryEncryptRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryEncryptRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryEncryptResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryEncryptResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryEncryptResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EncryptionData", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EncryptionData = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryDecryptRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryDecryptRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDecryptRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryDecryptResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryDecryptResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryDecryptResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Data = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/filetree/types/query.pb.gw.go b/x/filetree/types/query.pb.gw.go index 68aef99d0..f70a397b1 100644 --- a/x/filetree/types/query.pb.gw.go +++ b/x/filetree/types/query.pb.gw.go @@ -51,136 +51,6 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } -func request_Query_Encrypt_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryEncryptRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") - } - - protoReq.Address, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) - } - - val, ok = pathParams["message"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "message") - } - - protoReq.Message, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "message", err) - } - - msg, err := client.Encrypt(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Encrypt_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryEncryptRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") - } - - protoReq.Address, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) - } - - val, ok = pathParams["message"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "message") - } - - protoReq.Message, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "message", err) - } - - msg, err := server.Encrypt(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_Decrypt_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryDecryptRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["message"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "message") - } - - protoReq.Message, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "message", err) - } - - msg, err := client.Decrypt(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Decrypt_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryDecryptRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["message"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "message") - } - - protoReq.Message, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "message", err) - } - - msg, err := server.Decrypt(ctx, &protoReq) - return msg, metadata, err - -} - func request_Query_Files_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryFileRequest var metadata runtime.ServerMetadata @@ -412,52 +282,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_Encrypt_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_Encrypt_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_Encrypt_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_Decrypt_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_Decrypt_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_Decrypt_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_Query_Files_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -611,46 +435,6 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_Encrypt_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_Encrypt_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_Encrypt_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_Decrypt_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_Decrypt_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_Decrypt_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_Query_Files_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -737,10 +521,6 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackaldao", "canine", "filetree", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Encrypt_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"jackal-dao", "canine-chain", "filetree", "encrypt", "address", "message"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_Decrypt_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "filetree", "decrypt", "message"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Files_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"jackal-dao", "canine-chain", "filetree", "files", "address", "ownerAddress"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_FilesAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "filetree", "files"}, "", runtime.AssumeColonVerbOpt(false))) @@ -753,10 +533,6 @@ var ( var ( forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_Encrypt_0 = runtime.ForwardResponseMessage - - forward_Query_Decrypt_0 = runtime.ForwardResponseMessage - forward_Query_Files_0 = runtime.ForwardResponseMessage forward_Query_FilesAll_0 = runtime.ForwardResponseMessage diff --git a/x/storage/keeper/grpc_query_active_deals.go b/x/storage/keeper/grpc_query_active_deals.go index e64b0692a..40df8e146 100644 --- a/x/storage/keeper/grpc_query_active_deals.go +++ b/x/storage/keeper/grpc_query_active_deals.go @@ -38,6 +38,9 @@ func (k Keeper) FilesAll(c context.Context, req *types.QueryAllFilesRequest) (*t return &types.QueryAllFilesResponse{Files: activeDealss, Pagination: pageRes}, nil } +// OpenFiles returns a paginated list of files with space that providers have yet to fill +// +// TODO: Create unit-test cases for this func (k Keeper) OpenFiles(c context.Context, req *types.QueryOpenFilesRequest) (*types.QueryAllFilesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") diff --git a/x/storage/keeper/rewards.go b/x/storage/keeper/rewards.go index f83c34e50..1f6fd5dec 100644 --- a/x/storage/keeper/rewards.go +++ b/x/storage/keeper/rewards.go @@ -31,6 +31,7 @@ func (k Keeper) manageProofs(ctx sdk.Context, sizeTracker *map[string]int64, fil st[proof.Prover] += file.FileSize } +// TODO: Completely change the way this is done in Econ v2 func (k Keeper) rewardProviders(ctx sdk.Context, totalSize int64, sizeTracker *map[string]int64) { networkValue := sdk.NewDec(totalSize) From aa3c4a058bd3f46cc4fa2723984d5faff85621c0 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 15:55:05 -0400 Subject: [PATCH 041/256] file tree changing every file from fid to merkle hash --- app/upgrades/v4/commont_test.go | 95 +++++++++++++++++ app/upgrades/v4/upgrade_test.go | 50 +++++++++ app/upgrades/v4/upgrades.go | 170 +++++++++++++++++++++---------- x/filetree/keeper/common_test.go | 4 +- x/filetree/keeper/keeper_test.go | 2 +- 5 files changed, 264 insertions(+), 57 deletions(-) create mode 100644 app/upgrades/v4/commont_test.go create mode 100644 app/upgrades/v4/upgrade_test.go diff --git a/app/upgrades/v4/commont_test.go b/app/upgrades/v4/commont_test.go new file mode 100644 index 000000000..5a9783535 --- /dev/null +++ b/app/upgrades/v4/commont_test.go @@ -0,0 +1,95 @@ +package v4_test + +import ( + gocontext "context" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + typesparams "github.com/cosmos/cosmos-sdk/x/params/types" + canineglobaltestutil "github.com/jackalLabs/canine-chain/v3/testutil" + moduletestutil "github.com/jackalLabs/canine-chain/v3/types/module/testutil" // when importing from sdk,'go mod tidy' keeps trying to import from v0.46. + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmtime "github.com/tendermint/tendermint/types/time" + "testing" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/jackalLabs/canine-chain/v3/x/filetree" + "github.com/jackalLabs/canine-chain/v3/x/filetree/keeper" + + "github.com/jackalLabs/canine-chain/v3/x/filetree/types" + "github.com/stretchr/testify/suite" +) + +// SetupFileTreeKeeper creates a filetreeKeeper as well as all its dependencies. +func SetupFileTreeKeeper(t *testing.T) ( + *keeper.Keeper, + moduletestutil.TestEncodingConfig, + sdk.Context, +) { + key := sdk.NewKVStoreKey(types.StoreKey) + memStoreKey := storetypes.NewMemoryStoreKey(types.MemStoreKey) + testCtx := canineglobaltestutil.DefaultContextWithDB(t, key, sdk.NewTransientStoreKey("transient_test")) + ctx := testCtx.Ctx.WithBlockHeader(tmproto.Header{Time: tmtime.Now()}) + + encCfg := moduletestutil.MakeTestEncodingConfig() + types.RegisterInterfaces(encCfg.InterfaceRegistry) + + // Create MsgServiceRouter, but don't populate it before creating the filetree keeper. + msr := baseapp.NewMsgServiceRouter() + + paramsSubspace := typesparams.NewSubspace(encCfg.Codec, + types.Amino, + key, + memStoreKey, + "FiletreeParams", + ) + + // filetree keeper initializations + filetreeKeeper := keeper.NewKeeper(encCfg.Codec, key, memStoreKey, paramsSubspace) + filetreeKeeper.SetParams(ctx, types.DefaultParams()) + + // Register all handlers for the MegServiceRouter. + msr.SetInterfaceRegistry(encCfg.InterfaceRegistry) + types.RegisterMsgServer(msr, keeper.NewMsgServerImpl(*filetreeKeeper)) + + return filetreeKeeper, encCfg, ctx +} + +type UpgradeTestKeeper struct { + suite.Suite + + cdc codec.Codec + ctx sdk.Context + filetreeKeeper *keeper.Keeper + queryClient types.QueryClient + msgSrvr types.MsgServer +} + +func (suite *UpgradeTestKeeper) SetupSuite() { + suite.reset() +} + +func (suite *UpgradeTestKeeper) reset() { + filetreeKeeper, encCfg, ctx := SetupFileTreeKeeper(suite.T()) + + queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry) + types.RegisterQueryServer(queryHelper, filetreeKeeper) + queryClient := types.NewQueryClient(queryHelper) + + suite.ctx = ctx + suite.filetreeKeeper = filetreeKeeper + suite.cdc = encCfg.Codec + suite.queryClient = queryClient + suite.msgSrvr = keeper.NewMsgServerImpl(*suite.filetreeKeeper) +} + +func setupMsgServer(suite *UpgradeTestKeeper) (types.MsgServer, gocontext.Context) { + k := suite.filetreeKeeper + filetree.InitGenesis(suite.ctx, *k, *types.DefaultGenesis()) + ctx := sdk.WrapSDKContext(suite.ctx) + return keeper.NewMsgServerImpl(*k), ctx +} + +func TestFiletreeTestSuite(t *testing.T) { + suite.Run(t, new(UpgradeTestKeeper)) +} diff --git a/app/upgrades/v4/upgrade_test.go b/app/upgrades/v4/upgrade_test.go new file mode 100644 index 000000000..52b81dcfe --- /dev/null +++ b/app/upgrades/v4/upgrade_test.go @@ -0,0 +1,50 @@ +package v4_test + +import ( + "encoding/json" + "fmt" + v4 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v4" + "github.com/jackalLabs/canine-chain/v3/x/filetree/types" +) + +func (suite *UpgradeTestKeeper) TestUpgrade() { + suite.SetupSuite() + setupMsgServer(suite) + + fidMerkleMap := make(map[string][]byte) + + for i := 0; i < 10; i++ { + fid := fmt.Sprintf("jklf1oooooooo%d", i) + + fidContents := v4.FidContents{Fid: []string{fid}} + data, err := json.Marshal(fidContents) + suite.Require().NoError(err) + + address := fmt.Sprintf("this is file %d", i) + f := types.Files{ + Address: address, + Contents: string(data), + Owner: "cosmosjoe", + ViewingAccess: "{}", + EditAccess: "{}", + TrackingNumber: fmt.Sprintf("%d", i), + } + fidMerkleMap[fid] = []byte(address) + + suite.filetreeKeeper.SetFiles(suite.ctx, f) + } + + v4.UpdateFileTree(suite.ctx, *suite.filetreeKeeper, fidMerkleMap) + + allFiles := suite.filetreeKeeper.GetAllFiles(suite.ctx) + + for _, file := range allFiles { + var mct v4.MerkleContents + b := []byte(file.Contents) + err := json.Unmarshal(b, &mct) + suite.Require().NoError(err) + + suite.Require().Equal([]byte(file.Address), mct.Merkles[0]) + } + +} diff --git a/app/upgrades/v4/upgrades.go b/app/upgrades/v4/upgrades.go index 3283a92e3..e4a7060f3 100644 --- a/app/upgrades/v4/upgrades.go +++ b/app/upgrades/v4/upgrades.go @@ -3,6 +3,7 @@ package v4 import ( "encoding/hex" "encoding/json" + "fmt" "strconv" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -10,6 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/jackalLabs/canine-chain/v3/app/upgrades" + filetreemodulekeeper "github.com/jackalLabs/canine-chain/v3/x/filetree/keeper" storagekeeper "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" storagemoduletypes "github.com/jackalLabs/canine-chain/v3/x/storage/types" @@ -22,14 +24,16 @@ type Upgrade struct { mm *module.Manager configurator module.Configurator sk storagekeeper.Keeper + fk filetreemodulekeeper.Keeper } // NewUpgrade returns a new Upgrade instance -func NewUpgrade(mm *module.Manager, configurator module.Configurator, sk storagekeeper.Keeper) *Upgrade { +func NewUpgrade(mm *module.Manager, configurator module.Configurator, sk storagekeeper.Keeper, fk filetreemodulekeeper.Keeper) *Upgrade { return &Upgrade{ mm: mm, configurator: configurator, sk: sk, + fk: fk, } } @@ -43,75 +47,133 @@ type LegacyMarker struct { Cid string `json:"cid"` } -// Handler implements upgrades.Upgrade -func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - ctx.Logger().Info("\nNow updating the Jackal Protocol to:\n\n █████╗ ██████╗ █████╗ ██████╗██╗ █████╗ \n██╔══██╗██╔════╝██╔══██╗██╔════╝██║██╔══██╗\n███████║██║ ███████║██║ ██║███████║\n██╔══██║██║ ██╔══██║██║ ██║██╔══██║\n██║ ██║╚██████╗██║ ██║╚██████╗██║██║ ██║\n╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝╚═╝╚═╝ ╚═╝\n \n") +type FidContents struct { + Fid []string `json:"fids"` +} - fromVM[storagemoduletypes.ModuleName] = 5 +type MerkleContents struct { + Merkles [][]byte `json:"merkles"` +} - allDeals := u.sk.GetAllLegacyActiveDeals(ctx) +func UpdateFileTree(ctx sdk.Context, fk filetreemodulekeeper.Keeper, merkleMap map[string][]byte) { + allFiles := fk.GetAllFiles(ctx) - for _, deal := range allDeals { + for _, file := range allFiles { + contents := file.Contents - merkle, err := hex.DecodeString(deal.Merkle) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } + var fidContents FidContents + err := json.Unmarshal([]byte(contents), &fidContents) + if err != nil { + ctx.Logger().Debug(fmt.Errorf("cannot unmarshal %s %w", file.Address, err).Error()) + continue + } - start, err := strconv.ParseInt(deal.Startblock, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } + merkles := make([][]byte, 0) - end, err := strconv.ParseInt(deal.Endblock, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) + for _, fid := range fidContents.Fid { + m := merkleMap[fid] + if m == nil { continue } - size, err := strconv.ParseInt(deal.Filesize, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } + merkles = append(merkles, m) - lm := LegacyMarker{ - Fid: deal.Fid, - Cid: deal.Cid, - } + } - lmBytes, err := json.Marshal(lm) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } + merkleContents := MerkleContents{Merkles: merkles} - var uf storagemoduletypes.UnifiedFile - - uf, found := u.sk.GetFile(ctx, merkle, deal.Signee, start) - if !found { - uf = storagemoduletypes.UnifiedFile{ - Merkle: merkle, - Owner: deal.Signee, - Start: start, - Expires: end, - FileSize: size, - ProofInterval: 1800, // TODO: Decide on default window - ProofType: 0, - Proofs: make([]string, 0), - MaxProofs: 3, - Note: string(lmBytes), - } - } + merkleContentBytes, err := json.Marshal(merkleContents) + if err != nil { + ctx.Logger().Debug(fmt.Errorf("cannot marshal merkle contents of %s %w", file.Address, err).Error()) + continue + } + + file.Contents = string(merkleContentBytes) + fk.SetFiles(ctx, file) + } +} + +func UpdateFiles(ctx sdk.Context, u *Upgrade) map[string][]byte { + fidMerkle := make(map[string][]byte) + + allDeals := u.sk.GetAllLegacyActiveDeals(ctx) + + for _, deal := range allDeals { + + merkle, err := hex.DecodeString(deal.Merkle) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + start, err := strconv.ParseInt(deal.Startblock, 10, 64) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } - u.sk.SetFile(ctx, uf) - uf.AddProver(ctx, u.sk, deal.Provider) + end, err := strconv.ParseInt(deal.Endblock, 10, 64) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + size, err := strconv.ParseInt(deal.Filesize, 10, 64) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + lm := LegacyMarker{ + Fid: deal.Fid, + Cid: deal.Cid, + } + + fidMerkle[deal.Fid] = merkle // creating fid -> merkle mapping + + lmBytes, err := json.Marshal(lm) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + var uf storagemoduletypes.UnifiedFile + + uf, found := u.sk.GetFile(ctx, merkle, deal.Signee, start) + if !found { + uf = storagemoduletypes.UnifiedFile{ + Merkle: merkle, + Owner: deal.Signee, + Start: start, + Expires: end, + FileSize: size, + ProofInterval: 1800, // TODO: Decide on default window + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: string(lmBytes), + } } + u.sk.SetFile(ctx, uf) + uf.AddProver(ctx, u.sk, deal.Provider) + + } + + return fidMerkle +} + +// Handler implements upgrades.Upgrade +func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + ctx.Logger().Info("\nNow updating the Jackal Protocol to:\n\n █████╗ ██████╗ █████╗ ██████╗██╗ █████╗ \n██╔══██╗██╔════╝██╔══██╗██╔════╝██║██╔══██╗\n███████║██║ ███████║██║ ██║███████║\n██╔══██║██║ ██╔══██║██║ ██║██╔══██║\n██║ ██║╚██████╗██║ ██║╚██████╗██║██║ ██║\n╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝╚═╝╚═╝ ╚═╝\n \n") + + fromVM[storagemoduletypes.ModuleName] = 5 + + fidMerkleMap := UpdateFiles(ctx, u) + + UpdateFileTree(ctx, u.fk, fidMerkleMap) + newVM, err := u.mm.RunMigrations(ctx, u.configurator, fromVM) if err != nil { return newVM, err diff --git a/x/filetree/keeper/common_test.go b/x/filetree/keeper/common_test.go index 0548f35f0..0fe1ad9fe 100644 --- a/x/filetree/keeper/common_test.go +++ b/x/filetree/keeper/common_test.go @@ -19,8 +19,8 @@ import ( types "github.com/jackalLabs/canine-chain/v3/x/filetree/types" ) -// setupFiletreeKeeper creates a filetreeKeeper as well as all its dependencies. -func setupFiletreeKeeper(t *testing.T) ( +// SetupFiletreeKeeper creates a filetreeKeeper as well as all its dependencies. +func SetupFiletreeKeeper(t *testing.T) ( *keeper.Keeper, moduletestutil.TestEncodingConfig, sdk.Context, diff --git a/x/filetree/keeper/keeper_test.go b/x/filetree/keeper/keeper_test.go index d2afdb3bc..fcc339e26 100644 --- a/x/filetree/keeper/keeper_test.go +++ b/x/filetree/keeper/keeper_test.go @@ -28,7 +28,7 @@ func (suite *KeeperTestSuite) SetupSuite() { } func (suite *KeeperTestSuite) reset() { - filetreeKeeper, encCfg, ctx := setupFiletreeKeeper(suite.T()) + filetreeKeeper, encCfg, ctx := SetupFiletreeKeeper(suite.T()) queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry) types.RegisterQueryServer(queryHelper, filetreeKeeper) From 901171ca9711b506b95bb272c07a8744c7876578 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 16:10:45 -0400 Subject: [PATCH 042/256] linting --- app/upgrades.go | 2 +- app/upgrades/v4/commont_test.go | 3 ++- app/upgrades/v4/upgrade_test.go | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/upgrades.go b/app/upgrades.go index 648a278e4..e0a4e0c87 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -24,7 +24,7 @@ func (app *JackalApp) registerTestnetUpgradeHandlers() { func (app *JackalApp) registerMainnetUpgradeHandlers() { app.registerUpgrade(bouncybulldog.NewUpgrade(app.mm, app.configurator, app.OracleKeeper)) app.registerUpgrade(v3.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(v4.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(v4.NewUpgrade(app.mm, app.configurator, app.StorageKeeper, app.FileTreeKeeper)) } // registerUpgrade registers the given upgrade to be supported by the app diff --git a/app/upgrades/v4/commont_test.go b/app/upgrades/v4/commont_test.go index 5a9783535..f29a17ddf 100644 --- a/app/upgrades/v4/commont_test.go +++ b/app/upgrades/v4/commont_test.go @@ -2,13 +2,14 @@ package v4_test import ( gocontext "context" + "testing" + storetypes "github.com/cosmos/cosmos-sdk/store/types" typesparams "github.com/cosmos/cosmos-sdk/x/params/types" canineglobaltestutil "github.com/jackalLabs/canine-chain/v3/testutil" moduletestutil "github.com/jackalLabs/canine-chain/v3/types/module/testutil" // when importing from sdk,'go mod tidy' keeps trying to import from v0.46. tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtime "github.com/tendermint/tendermint/types/time" - "testing" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" diff --git a/app/upgrades/v4/upgrade_test.go b/app/upgrades/v4/upgrade_test.go index 52b81dcfe..7495f9d0b 100644 --- a/app/upgrades/v4/upgrade_test.go +++ b/app/upgrades/v4/upgrade_test.go @@ -3,6 +3,7 @@ package v4_test import ( "encoding/json" "fmt" + v4 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v4" "github.com/jackalLabs/canine-chain/v3/x/filetree/types" ) @@ -46,5 +47,4 @@ func (suite *UpgradeTestKeeper) TestUpgrade() { suite.Require().Equal([]byte(file.Address), mct.Merkles[0]) } - } From 9c3484a3308a9676d172d05482fffd48194efc24 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 21:24:26 -0400 Subject: [PATCH 043/256] remedying request & bumping go version --- Makefile | 4 ++-- x/storage/client/cli/query_attest.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 6cbbc10cb..e27176c17 100644 --- a/Makefile +++ b/Makefile @@ -56,8 +56,8 @@ build_tags_comma_sep := $(subst $(empty),$(comma),$(build_tags)) # Add check to make sure we are using the proper Go version before proceeding with anything check-go-version: - @if ! go version | grep -q "go1.20"; then \ - echo "\033[0;31mERROR:\033[0m Go version 1.20 is required for compiling canined. It looks like you are using" "$(shell go version) \nThere are potential consensus-breaking changes that can occur when running binaries compiled with different versions of Go. Please download Go version 1.20 and retry. Thank you!"; \ + @if ! go version | grep -q "go1.21"; then \ + echo "\033[0;31mERROR:\033[0m Go version 1.21 is required for compiling canined. It looks like you are using" "$(shell go version) \nThere are potential consensus-breaking changes that can occur when running binaries compiled with different versions of Go. Please download Go version 1.21 and retry. Thank you!"; \ exit 1; \ fi diff --git a/x/storage/client/cli/query_attest.go b/x/storage/client/cli/query_attest.go index 333983594..8b0a9dc98 100644 --- a/x/storage/client/cli/query_attest.go +++ b/x/storage/client/cli/query_attest.go @@ -132,10 +132,10 @@ func CmdShowReportForms() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - argProver := args[1] - argMerkle := args[2] - argOwner := args[3] - argStart := args[4] + argProver := args[0] + argMerkle := args[1] + argOwner := args[2] + argStart := args[3] start, err := strconv.ParseInt(argStart, 10, 64) if err != nil { From 4bb22e68ec7e4906c74cb6230b111f1231a9caf8 Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 27 Oct 2023 14:23:56 -0400 Subject: [PATCH 044/256] adding users by plan to storage stats --- proto/canine_chain/storage/query.proto | 1 + x/storage/keeper/grpc_query_storage_stats.go | 6 + x/storage/types/query.pb.go | 385 +++++++++++++------ 3 files changed, 267 insertions(+), 125 deletions(-) diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index 336525598..255c424b5 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -342,4 +342,5 @@ message QueryStorageStatsResponse { (gogoproto.nullable) = false ]; uint64 activeUsers = 4; + map users_by_plan= 5; } diff --git a/x/storage/keeper/grpc_query_storage_stats.go b/x/storage/keeper/grpc_query_storage_stats.go index e1524eabb..53d01913e 100644 --- a/x/storage/keeper/grpc_query_storage_stats.go +++ b/x/storage/keeper/grpc_query_storage_stats.go @@ -22,7 +22,12 @@ func (k Keeper) StorageStats(c context.Context, req *types.QueryStorageStatsRequ var spaceUsed int64 var activeUsers uint64 + usersByPlan := make(map[int64]int64) + for _, info := range payment { + + usersByPlan[info.SpaceAvailable]++ + if info.End.Before(ctx.BlockTime()) { continue } @@ -41,5 +46,6 @@ func (k Keeper) StorageStats(c context.Context, req *types.QueryStorageStatsRequ Used: uint64(spaceUsed), UsedRatio: ratio, ActiveUsers: activeUsers, + UsersByPlan: usersByPlan, }, nil } diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index b6b8df3a8..9bfacb5b8 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -2127,6 +2127,7 @@ type QueryStorageStatsResponse struct { Used uint64 `protobuf:"varint,2,opt,name=used,proto3" json:"used,omitempty"` UsedRatio github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=usedRatio,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"usedRatio"` ActiveUsers uint64 `protobuf:"varint,4,opt,name=activeUsers,proto3" json:"activeUsers,omitempty"` + UsersByPlan map[int64]int64 `protobuf:"bytes,5,rep,name=users_by_plan,json=usersByPlan,proto3" json:"users_by_plan,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } func (m *QueryStorageStatsResponse) Reset() { *m = QueryStorageStatsResponse{} } @@ -2183,6 +2184,13 @@ func (m *QueryStorageStatsResponse) GetActiveUsers() uint64 { return 0 } +func (m *QueryStorageStatsResponse) GetUsersByPlan() map[int64]int64 { + if m != nil { + return m.UsersByPlan + } + return nil +} + func init() { proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.storage.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.storage.QueryParamsResponse") @@ -2229,136 +2237,141 @@ func init() { proto.RegisterType((*QueryActiveProvidersResponse)(nil), "canine_chain.storage.QueryActiveProvidersResponse") proto.RegisterType((*QueryStorageStatsRequest)(nil), "canine_chain.storage.QueryStorageStatsRequest") proto.RegisterType((*QueryStorageStatsResponse)(nil), "canine_chain.storage.QueryStorageStatsResponse") + proto.RegisterMapType((map[int64]int64)(nil), "canine_chain.storage.QueryStorageStatsResponse.UsersByPlanEntry") } func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 1976 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcf, 0x6f, 0x24, 0x47, - 0x15, 0xde, 0xda, 0xb1, 0xbd, 0x3b, 0x65, 0xc3, 0x86, 0xc2, 0x09, 0x66, 0x58, 0xc6, 0x76, 0x8b, - 0xd8, 0x5e, 0x13, 0x77, 0xaf, 0x67, 0xbd, 0x59, 0xe2, 0x84, 0x64, 0x6d, 0x47, 0x36, 0x1b, 0x39, - 0x5a, 0xbb, 0x8d, 0x41, 0x8a, 0x10, 0x43, 0x79, 0xa6, 0x3c, 0x6e, 0x3c, 0xd3, 0xdd, 0xe9, 0xee, - 0x31, 0x58, 0x96, 0x2f, 0x41, 0xe2, 0xc0, 0x01, 0x45, 0xca, 0x89, 0x13, 0x11, 0x59, 0x84, 0x38, - 0x20, 0xa4, 0x80, 0x10, 0x17, 0x0e, 0x20, 0x21, 0xe5, 0x46, 0x24, 0x2e, 0x88, 0xc3, 0x0a, 0xed, - 0xf2, 0x87, 0xa0, 0xaa, 0x7a, 0xd5, 0xdd, 0x33, 0xdd, 0xd3, 0xdd, 0xb3, 0x1a, 0x91, 0xd3, 0xb8, - 0xab, 0xeb, 0xbd, 0xf7, 0xbd, 0x1f, 0xf5, 0xea, 0x7d, 0xbd, 0x8b, 0xe7, 0x1a, 0xd4, 0xb6, 0x6c, - 0x56, 0x6f, 0x9c, 0x50, 0xcb, 0x36, 0xfc, 0xc0, 0xf1, 0x68, 0x8b, 0x19, 0xef, 0x76, 0x99, 0x77, - 0xae, 0xbb, 0x9e, 0x13, 0x38, 0x64, 0x3a, 0xbe, 0x43, 0x87, 0x1d, 0x95, 0xe9, 0x96, 0xd3, 0x72, - 0xc4, 0x06, 0x83, 0xff, 0x25, 0xf7, 0x56, 0x6e, 0xb6, 0x1c, 0xa7, 0xd5, 0x66, 0x06, 0x75, 0x2d, - 0x83, 0xda, 0xb6, 0x13, 0xd0, 0xc0, 0x72, 0x6c, 0x1f, 0xde, 0x2e, 0x37, 0x1c, 0xbf, 0xe3, 0xf8, - 0xc6, 0x11, 0xf5, 0xc1, 0x84, 0x71, 0xb6, 0x7a, 0xc4, 0x02, 0xba, 0x6a, 0xb8, 0xb4, 0x65, 0xd9, - 0x62, 0x33, 0xec, 0x9d, 0x4f, 0xc5, 0xe5, 0x52, 0x8f, 0x76, 0x94, 0xba, 0xc5, 0xd4, 0x2d, 0xb4, - 0x11, 0x58, 0x67, 0xac, 0xde, 0x64, 0xb4, 0xad, 0x36, 0x7e, 0x2d, 0x5d, 0x97, 0xe7, 0x9c, 0x59, - 0x4d, 0xe6, 0x65, 0xab, 0x73, 0xe9, 0x79, 0x87, 0xd9, 0x41, 0xdd, 0xb2, 0x8f, 0xc1, 0x49, 0x6d, - 0x1a, 0x93, 0x7d, 0x0e, 0x7e, 0x4f, 0x80, 0x31, 0xd9, 0xbb, 0x5d, 0xe6, 0x07, 0xda, 0x3e, 0xfe, - 0x62, 0xcf, 0xaa, 0xef, 0x3a, 0xb6, 0xcf, 0xc8, 0x3a, 0x9e, 0x90, 0xa0, 0x67, 0xd0, 0x1c, 0x5a, - 0x9a, 0xac, 0xdd, 0xd4, 0xd3, 0xc2, 0xa9, 0x4b, 0xa9, 0xcd, 0xb1, 0x4f, 0x1e, 0xcf, 0x5e, 0x31, - 0x41, 0x42, 0x7b, 0x0f, 0xe1, 0x2f, 0x48, 0x9d, 0x9e, 0xe3, 0x1c, 0x83, 0x21, 0x72, 0x0b, 0x3f, - 0xa7, 0xa0, 0xd7, 0x69, 0xb3, 0xe9, 0x31, 0x5f, 0xea, 0x2e, 0x9b, 0x37, 0xd4, 0xfa, 0x86, 0x5c, - 0x26, 0x2f, 0xe0, 0x89, 0x0e, 0xf3, 0x4e, 0xdb, 0x6c, 0xe6, 0xea, 0x1c, 0x5a, 0x9a, 0x32, 0xe1, - 0x89, 0x4c, 0xe3, 0x71, 0xe7, 0x47, 0x36, 0xf3, 0x66, 0x4a, 0x42, 0x4e, 0x3e, 0xf0, 0x55, 0x3f, - 0xa0, 0x5e, 0x30, 0x33, 0x36, 0x87, 0x96, 0x4a, 0xa6, 0x7c, 0xd0, 0xf6, 0x95, 0xb7, 0x12, 0x03, - 0xb8, 0xf5, 0x2a, 0x1e, 0x77, 0xf9, 0x02, 0x78, 0x35, 0x9b, 0xee, 0xd5, 0xb6, 0xd5, 0x66, 0x42, - 0x0e, 0x1c, 0x93, 0x32, 0xda, 0xfb, 0x08, 0x7f, 0x25, 0xd2, 0xe9, 0x6f, 0x9e, 0x03, 0xde, 0x67, - 0xf0, 0x70, 0x1b, 0xe3, 0xa8, 0x74, 0x84, 0x97, 0x93, 0xb5, 0x05, 0x5d, 0xd6, 0x99, 0xce, 0xeb, - 0x4c, 0x97, 0xa5, 0x0c, 0x75, 0xa6, 0xef, 0xd1, 0x16, 0x03, 0x33, 0x66, 0x4c, 0x52, 0x7b, 0x84, - 0xf0, 0xcd, 0x74, 0x48, 0x49, 0x87, 0x4b, 0xc3, 0x3a, 0x4c, 0x76, 0x52, 0x50, 0x2e, 0xe6, 0xa2, - 0x94, 0x96, 0x7b, 0x60, 0x7e, 0x07, 0x3f, 0x27, 0x50, 0x72, 0x3b, 0x2a, 0x5a, 0x51, 0x92, 0x51, - 0x7a, 0x92, 0xaf, 0xa6, 0x26, 0xb9, 0x14, 0x4f, 0xf2, 0x1e, 0x14, 0x9a, 0xd4, 0x1b, 0xba, 0x3c, - 0x76, 0x6c, 0x81, 0xda, 0xc9, 0xda, 0x7c, 0xba, 0xc7, 0x87, 0xb6, 0x75, 0x6c, 0xb1, 0x26, 0x17, - 0x04, 0x9f, 0x85, 0x90, 0xf6, 0x7d, 0x3c, 0x2d, 0x34, 0x6e, 0xb4, 0xdb, 0xfc, 0x5d, 0x98, 0xdb, - 0xde, 0x84, 0xa1, 0x67, 0x4e, 0xd8, 0xcf, 0x10, 0x7e, 0x5e, 0x18, 0x78, 0xe8, 0x32, 0xbb, 0xc7, - 0xc2, 0x67, 0x50, 0x3d, 0xbf, 0x54, 0x60, 0x22, 0x6f, 0x21, 0x86, 0xdf, 0xc4, 0xe3, 0x3c, 0x1c, - 0x3e, 0x94, 0x4d, 0xe1, 0x20, 0x4a, 0xa9, 0xd1, 0x15, 0xce, 0x6d, 0x48, 0xc7, 0x1e, 0x44, 0x40, - 0x05, 0x6b, 0x06, 0x5f, 0xeb, 0x8d, 0x91, 0x7a, 0xd4, 0xbe, 0x07, 0x2e, 0x45, 0x12, 0xe0, 0xd2, - 0x16, 0x2e, 0x87, 0xad, 0x33, 0xfb, 0xf8, 0x2b, 0x51, 0xd5, 0xd7, 0x22, 0x39, 0xed, 0x08, 0xcf, - 0xa8, 0x80, 0x85, 0xbb, 0x46, 0x5d, 0x22, 0xbf, 0x45, 0xf8, 0xcb, 0x29, 0x46, 0xd2, 0xdd, 0x28, - 0x3d, 0x8b, 0x1b, 0xa3, 0xcb, 0x4f, 0x17, 0x7f, 0x49, 0x42, 0x0d, 0x02, 0xe6, 0xcb, 0x5b, 0x33, - 0x76, 0xbe, 0xb9, 0x41, 0xe6, 0x41, 0x86, 0xe0, 0x69, 0x24, 0xcd, 0xdd, 0x52, 0x69, 0x88, 0x9b, - 0x85, 0x00, 0xbd, 0x8d, 0x27, 0x69, 0xb4, 0x0c, 0x79, 0x78, 0x31, 0x3d, 0x44, 0x31, 0xf9, 0x6d, - 0xc7, 0xeb, 0x40, 0xa0, 0xe2, 0xf2, 0x1a, 0x83, 0x9e, 0xbf, 0xd1, 0x6e, 0xc7, 0x76, 0x8f, 0x3c, - 0xe9, 0x7f, 0x56, 0x8d, 0x3c, 0x61, 0x07, 0xdc, 0x7a, 0x88, 0xa7, 0x62, 0xb0, 0x54, 0xea, 0x87, - 0xf2, 0xab, 0x47, 0xc1, 0xe8, 0x6a, 0xc0, 0x85, 0x9b, 0xd6, 0x64, 0xae, 0xe3, 0x05, 0xff, 0x8f, - 0xf4, 0x1f, 0xc2, 0xcc, 0xa2, 0x2c, 0x42, 0x88, 0x5e, 0xc7, 0x13, 0x9e, 0x58, 0x81, 0x3c, 0xcc, - 0xa5, 0x07, 0x47, 0x4a, 0xc5, 0xe2, 0x02, 0x52, 0x5a, 0x3d, 0xea, 0x86, 0xbd, 0xbe, 0x8c, 0x2a, - 0xc9, 0x1f, 0x21, 0xfc, 0x42, 0xbf, 0x05, 0xc0, 0x7e, 0x1f, 0x5f, 0x93, 0x28, 0x54, 0x66, 0x8b, - 0x82, 0x57, 0x62, 0xa3, 0xcb, 0xe7, 0x2a, 0x84, 0x61, 0xdb, 0x63, 0xcc, 0x77, 0x69, 0x83, 0xe5, - 0x37, 0xdd, 0x1a, 0xf8, 0x75, 0x10, 0x38, 0x1e, 0xdb, 0x72, 0xba, 0x76, 0x90, 0x2f, 0xa3, 0x83, - 0x4c, 0xcc, 0x0c, 0xc4, 0x82, 0x27, 0x9d, 0x2f, 0x80, 0x84, 0x7c, 0xd0, 0x0c, 0x68, 0x35, 0x71, - 0x1b, 0x91, 0x40, 0x83, 0x2f, 0x28, 0x01, 0xf1, 0xa0, 0xe9, 0x70, 0x77, 0x6c, 0x5b, 0x76, 0xb3, - 0xc0, 0xe0, 0xa1, 0xad, 0x2b, 0xbf, 0xc3, 0xfd, 0xa0, 0x7e, 0x1e, 0x4f, 0x85, 0x37, 0xb3, 0xe5, - 0x2a, 0x47, 0x26, 0xd5, 0xda, 0x03, 0xd7, 0xd7, 0xee, 0x41, 0x97, 0xd8, 0x6a, 0x5b, 0xcc, 0x0e, - 0xb8, 0x4b, 0x07, 0xc5, 0x22, 0xf7, 0x1a, 0x1c, 0xfb, 0x84, 0x20, 0xd8, 0xbe, 0x89, 0xcb, 0x47, - 0xe7, 0x01, 0xf3, 0x8f, 0x3d, 0x26, 0xf1, 0x96, 0xcc, 0x68, 0x41, 0x33, 0xc2, 0xe1, 0xfd, 0xfc, - 0x4d, 0x1a, 0xd0, 0x7c, 0x73, 0x07, 0xea, 0x3e, 0x55, 0x02, 0x60, 0xe6, 0x45, 0xfc, 0xf9, 0xc0, - 0xea, 0xb0, 0xba, 0xc7, 0x3a, 0xd4, 0xb2, 0x2d, 0xbb, 0x05, 0xb6, 0x3e, 0xc7, 0x57, 0x4d, 0xb5, - 0xc8, 0x03, 0x2d, 0x8c, 0x8b, 0xf2, 0x2a, 0x99, 0xf2, 0x41, 0x5b, 0xc7, 0xd5, 0x30, 0x33, 0xb4, - 0xc5, 0xf6, 0x24, 0xf5, 0x78, 0x60, 0x1f, 0x3b, 0xf9, 0x80, 0x7e, 0x82, 0xf0, 0xec, 0x40, 0x61, - 0x00, 0xf7, 0x03, 0x3c, 0x0d, 0xe5, 0x5f, 0x8f, 0xd3, 0x1a, 0x38, 0x88, 0x4b, 0xe9, 0x07, 0x25, - 0xa9, 0x0f, 0x0e, 0x0c, 0xf1, 0x13, 0x6f, 0xb4, 0x53, 0x3c, 0xaf, 0xce, 0xe5, 0x60, 0x27, 0x46, - 0xd5, 0x05, 0xfe, 0x81, 0xb0, 0x96, 0x65, 0x2d, 0xd7, 0xeb, 0xd2, 0x68, 0xbc, 0x1e, 0x5d, 0xc7, - 0x78, 0x1b, 0xaa, 0x9f, 0x9f, 0x9a, 0x43, 0xb7, 0xed, 0xd0, 0xe6, 0xd6, 0x09, 0x6b, 0x9c, 0xe6, - 0x66, 0x7f, 0x40, 0x3d, 0xad, 0xc1, 0x99, 0x48, 0xa8, 0x8b, 0x8e, 0xfb, 0x19, 0x6d, 0x5b, 0x4d, - 0xa1, 0xed, 0xba, 0x29, 0x1f, 0xb4, 0xb7, 0xa0, 0x9f, 0xec, 0x79, 0x56, 0x83, 0xf5, 0xd8, 0xaf, - 0xe0, 0xeb, 0xcd, 0xae, 0x17, 0xa5, 0xad, 0x6c, 0x86, 0xcf, 0x03, 0x10, 0xa8, 0x5e, 0x13, 0xd7, - 0x15, 0x19, 0x77, 0xf9, 0x2a, 0x1c, 0x10, 0xf9, 0xa0, 0x7d, 0x55, 0x4d, 0x09, 0x82, 0xc5, 0xf7, - 0x8f, 0x86, 0x9a, 0xa5, 0x2e, 0xf7, 0xfe, 0xd7, 0xa0, 0xf4, 0x41, 0x72, 0xa8, 0x1b, 0x74, 0xb3, - 0xf7, 0x6a, 0x48, 0x4e, 0xa8, 0x15, 0x18, 0x8d, 0xa0, 0x12, 0x0e, 0x02, 0x1a, 0x84, 0x30, 0xfe, - 0xa2, 0x26, 0xcb, 0xde, 0x97, 0x51, 0xab, 0x71, 0xbb, 0x5e, 0xe3, 0x84, 0xfa, 0x4c, 0x86, 0x76, - 0xcc, 0x8c, 0x16, 0x08, 0xc1, 0x63, 0x5d, 0xfe, 0xe2, 0xaa, 0x78, 0x21, 0xfe, 0x26, 0xbb, 0xb8, - 0xcc, 0x7f, 0x4d, 0x1e, 0x4a, 0x71, 0x6f, 0x4f, 0x6d, 0xea, 0x1c, 0xcf, 0xbf, 0x1f, 0xcf, 0x2e, - 0xb4, 0xac, 0xe0, 0xa4, 0x7b, 0xa4, 0x37, 0x9c, 0x8e, 0x01, 0x9f, 0x4f, 0xe4, 0xcf, 0x8a, 0xdf, - 0x3c, 0x35, 0x82, 0x73, 0x97, 0xf9, 0xfa, 0x9b, 0xac, 0x61, 0x46, 0x0a, 0xc8, 0x1c, 0x9e, 0x94, - 0x1f, 0x41, 0x0e, 0x7d, 0x1e, 0x86, 0x31, 0x61, 0x28, 0xbe, 0x54, 0xfb, 0x69, 0x15, 0x8f, 0x0b, - 0xfc, 0xe4, 0xe7, 0x08, 0x4f, 0xc8, 0x6f, 0x0f, 0x64, 0xc0, 0x49, 0x48, 0x7e, 0xea, 0xa8, 0xdc, - 0x2a, 0xb0, 0x53, 0xc6, 0x42, 0x33, 0xde, 0xfb, 0xe7, 0x7f, 0x3f, 0xb8, 0x7a, 0x8b, 0x2c, 0x1a, - 0x3f, 0xa4, 0x8d, 0x53, 0xda, 0x5e, 0x69, 0x52, 0xc7, 0x90, 0xd2, 0x2b, 0x69, 0x9f, 0x76, 0xc8, - 0x87, 0x08, 0x8f, 0xf1, 0x7a, 0x25, 0x0b, 0x19, 0x46, 0x62, 0xb7, 0x50, 0x65, 0x31, 0x77, 0x1f, - 0x40, 0xd9, 0x11, 0x50, 0x36, 0xc8, 0x1b, 0xb9, 0x50, 0x04, 0xf7, 0x32, 0x2e, 0xe4, 0x75, 0x76, - 0x69, 0x5c, 0x88, 0x11, 0xea, 0xd2, 0xb8, 0x10, 0x43, 0xd3, 0x25, 0xf9, 0x00, 0xe1, 0xeb, 0x82, - 0xe5, 0x6d, 0xb4, 0xdb, 0x64, 0x39, 0xc3, 0x7c, 0x1f, 0xf7, 0xad, 0x7c, 0xbd, 0xd0, 0x5e, 0x80, - 0xab, 0x0b, 0xb8, 0x4b, 0x64, 0xa1, 0x18, 0x5c, 0xf2, 0x3b, 0x84, 0xcb, 0x21, 0x17, 0x26, 0x59, - 0xa6, 0xfa, 0x19, 0xf3, 0x70, 0xb8, 0xb6, 0x05, 0xae, 0xfb, 0xe4, 0xf5, 0x5c, 0x5c, 0x8e, 0xcb, - 0xec, 0x3a, 0xc4, 0xb2, 0x9f, 0x91, 0x5f, 0x92, 0x3f, 0x21, 0x3c, 0x2e, 0x3e, 0x95, 0x90, 0xac, - 0x0c, 0xc6, 0xbf, 0x7c, 0x55, 0x96, 0xf2, 0x37, 0x02, 0xc8, 0x77, 0x04, 0xc8, 0x6f, 0x13, 0x33, - 0xbf, 0xec, 0xb8, 0x5c, 0x0a, 0xbe, 0xc1, 0xe9, 0xff, 0x15, 0xc2, 0xe5, 0xb0, 0x6f, 0x64, 0xe6, - 0xbf, 0x8f, 0x6c, 0x67, 0xc6, 0xb9, 0x9f, 0x66, 0x6b, 0xaf, 0x09, 0x17, 0x5e, 0x26, 0x6b, 0x45, - 0x5c, 0x90, 0x60, 0x8c, 0x8b, 0x30, 0xba, 0x1f, 0x21, 0x3c, 0x15, 0x82, 0xe4, 0x75, 0xaa, 0x67, - 0xe7, 0xb8, 0xbf, 0xd3, 0x56, 0x8c, 0xc2, 0xfb, 0x01, 0x6f, 0x4d, 0xe0, 0x7d, 0x89, 0x2c, 0x17, - 0xc7, 0x4b, 0xfe, 0x8e, 0xf0, 0x64, 0x8c, 0x62, 0x91, 0x95, 0x2c, 0xa3, 0x09, 0x66, 0x5c, 0xd1, - 0x8b, 0x6e, 0x07, 0x88, 0xdf, 0x15, 0x10, 0xf7, 0xc9, 0xc3, 0x5c, 0x88, 0x71, 0x82, 0x27, 0x8b, - 0x43, 0x54, 0xc0, 0xa0, 0x92, 0xf8, 0x3d, 0xc2, 0x37, 0xe2, 0x64, 0x93, 0x07, 0x7c, 0x35, 0x3b, - 0x80, 0x29, 0x1c, 0xb8, 0x52, 0x1b, 0x46, 0x04, 0x7c, 0xba, 0x2b, 0x7c, 0x32, 0xc8, 0xca, 0x50, - 0x3e, 0x91, 0x8f, 0x11, 0xbe, 0x66, 0x02, 0xe1, 0xc9, 0x3a, 0x56, 0x3d, 0xfc, 0x2d, 0xb3, 0xf1, - 0xf7, 0xf2, 0x30, 0xcd, 0x14, 0xb8, 0x76, 0xc9, 0x5b, 0xb9, 0xb8, 0x80, 0x77, 0x15, 0x08, 0xf3, - 0x2f, 0x10, 0xc6, 0x00, 0x9a, 0x47, 0x38, 0xa7, 0x6d, 0xf5, 0x42, 0x7f, 0xa9, 0xd8, 0x66, 0x40, - 0x7f, 0x5b, 0xa0, 0x5f, 0x26, 0x4b, 0x45, 0xd1, 0x93, 0x47, 0x08, 0x97, 0x43, 0x06, 0x96, 0x09, - 0xad, 0x9f, 0x0e, 0x66, 0x42, 0x4b, 0x90, 0xba, 0x21, 0xfa, 0xc2, 0xb1, 0x92, 0x8d, 0xf5, 0x85, - 0x5f, 0x23, 0x8c, 0x23, 0xe2, 0x47, 0xb2, 0x4c, 0x27, 0x38, 0x68, 0x65, 0xa5, 0xe0, 0x6e, 0x40, - 0xba, 0x2e, 0x90, 0xae, 0x91, 0x5a, 0x2e, 0x52, 0xfe, 0x6b, 0xd9, 0xad, 0x18, 0xce, 0x0f, 0xc5, - 0x1d, 0x2b, 0xf9, 0x63, 0x66, 0x8f, 0xed, 0x23, 0xa5, 0x99, 0x3d, 0xb6, 0x9f, 0x90, 0x6a, 0xaf, - 0x0a, 0x84, 0x77, 0xc9, 0x9d, 0x02, 0x77, 0xac, 0xdd, 0x14, 0x77, 0x59, 0x58, 0x9d, 0xbc, 0x79, - 0x91, 0x1d, 0x16, 0xf4, 0x11, 0xce, 0xcc, 0x73, 0x9f, 0xce, 0x6a, 0x33, 0xcf, 0xfd, 0x00, 0x3e, - 0xab, 0x7d, 0x4b, 0x40, 0xdf, 0x24, 0xf7, 0x73, 0xa1, 0xb7, 0x58, 0x50, 0x6f, 0x08, 0x2d, 0x75, - 0x5e, 0x11, 0xf5, 0xfe, 0x92, 0x78, 0x84, 0x30, 0xde, 0x61, 0x01, 0x30, 0x59, 0x92, 0x3d, 0xdc, - 0xc5, 0xe9, 0x71, 0x65, 0xb9, 0xc8, 0x56, 0xc0, 0xfb, 0x86, 0xc0, 0xfb, 0x0a, 0xb9, 0x57, 0x08, - 0xaf, 0x4b, 0xcf, 0xeb, 0x4d, 0x1a, 0xd0, 0x18, 0xcc, 0xbf, 0x21, 0x4c, 0x92, 0xac, 0x8c, 0xac, - 0xe5, 0xd4, 0x64, 0x2a, 0x05, 0xad, 0xdc, 0x1d, 0x52, 0x6a, 0x68, 0x27, 0xe2, 0x4c, 0x33, 0xe6, - 0xc4, 0x5f, 0x11, 0x7e, 0x3e, 0xa9, 0x9f, 0x37, 0xb3, 0x7b, 0xd9, 0xfd, 0x69, 0xb0, 0x2b, 0xdf, - 0x18, 0x5e, 0x70, 0xe8, 0xab, 0x23, 0xee, 0x0d, 0xf9, 0x23, 0xc2, 0x37, 0xfa, 0x18, 0x65, 0x66, - 0xd1, 0xa7, 0x93, 0xd9, 0xcc, 0xa2, 0x1f, 0x40, 0x58, 0x87, 0xe8, 0x28, 0xfc, 0xa8, 0xd6, 0xbb, - 0x42, 0x45, 0xbd, 0x21, 0x20, 0x7e, 0x8c, 0x30, 0x8e, 0x68, 0x68, 0x66, 0xe7, 0x4b, 0x30, 0xdf, - 0xcc, 0xce, 0x97, 0xe4, 0xb6, 0x43, 0x50, 0x0d, 0xc1, 0x7a, 0x25, 0x42, 0xe3, 0x42, 0x91, 0xe9, - 0x4b, 0xe3, 0x42, 0xd0, 0xe7, 0x4b, 0xf2, 0x07, 0x3e, 0x58, 0xf4, 0x32, 0xd5, 0xec, 0xc1, 0x22, - 0x95, 0x36, 0x67, 0x0f, 0x16, 0xe9, 0x54, 0x5a, 0x7b, 0x45, 0xf8, 0x70, 0x87, 0xac, 0xe6, 0x0f, - 0x16, 0xf2, 0x5f, 0xdc, 0xa3, 0xb1, 0xee, 0x37, 0x08, 0x4f, 0xc5, 0x99, 0x71, 0xe6, 0xf0, 0x99, - 0xc2, 0xaf, 0x33, 0x87, 0xcf, 0x34, 0xca, 0xad, 0xbd, 0x2c, 0xc0, 0xde, 0x26, 0x7a, 0xa1, 0xab, - 0x86, 0xb6, 0x58, 0x9d, 0x4f, 0x42, 0xfe, 0xe6, 0xee, 0x27, 0x4f, 0xaa, 0xe8, 0xd3, 0x27, 0x55, - 0xf4, 0x9f, 0x27, 0x55, 0xf4, 0xfe, 0xd3, 0xea, 0x95, 0x4f, 0x9f, 0x56, 0xaf, 0xfc, 0xeb, 0x69, - 0xf5, 0xca, 0x3b, 0xb5, 0x18, 0xef, 0x96, 0x3a, 0x77, 0xe9, 0x91, 0xdf, 0xab, 0xf3, 0xc7, 0xa1, - 0x56, 0xc1, 0xc3, 0x8f, 0x26, 0xc4, 0xff, 0x0f, 0xb8, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x5c, 0xbe, 0x62, 0x88, 0x54, 0x21, 0x00, 0x00, + // 2045 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcd, 0x6f, 0x1c, 0x49, + 0x15, 0x4f, 0x79, 0x6c, 0x27, 0x7e, 0xf6, 0x92, 0x50, 0x78, 0x17, 0x33, 0x04, 0xc7, 0x69, 0xb1, + 0x89, 0x63, 0xe2, 0xee, 0x78, 0x92, 0x6c, 0x76, 0xbd, 0x4b, 0x36, 0x76, 0x16, 0x87, 0xac, 0xb2, + 0x8a, 0xd3, 0x21, 0x20, 0xad, 0x10, 0x4d, 0x79, 0xa6, 0x3c, 0x69, 0x3c, 0xd3, 0xdd, 0xdb, 0xdd, + 0x13, 0x18, 0x59, 0xbe, 0x2c, 0x12, 0x07, 0x0e, 0x68, 0xa5, 0x3d, 0x71, 0x62, 0xc5, 0x06, 0x21, + 0x0e, 0x08, 0x69, 0x41, 0x88, 0x2b, 0x48, 0x48, 0x7b, 0x63, 0x25, 0x2e, 0x88, 0x43, 0x84, 0x12, + 0xfe, 0x10, 0x54, 0x55, 0xaf, 0xbf, 0x66, 0x7a, 0xba, 0x7b, 0xa2, 0x11, 0x7b, 0xf2, 0x54, 0x75, + 0xbd, 0xf7, 0x7e, 0xef, 0xa3, 0x5e, 0xd5, 0xaf, 0x64, 0x58, 0x69, 0x32, 0xc7, 0x76, 0xb8, 0xd5, + 0x7c, 0xc8, 0x6c, 0xc7, 0x08, 0x42, 0xd7, 0x67, 0x6d, 0x6e, 0xbc, 0xd7, 0xe3, 0x7e, 0x5f, 0xf7, + 0x7c, 0x37, 0x74, 0xe9, 0x62, 0x7a, 0x85, 0x8e, 0x2b, 0xea, 0x8b, 0x6d, 0xb7, 0xed, 0xca, 0x05, + 0x86, 0xf8, 0xa5, 0xd6, 0xd6, 0x4f, 0xb7, 0x5d, 0xb7, 0xdd, 0xe1, 0x06, 0xf3, 0x6c, 0x83, 0x39, + 0x8e, 0x1b, 0xb2, 0xd0, 0x76, 0x9d, 0x00, 0xbf, 0xae, 0x35, 0xdd, 0xa0, 0xeb, 0x06, 0xc6, 0x1e, + 0x0b, 0xd0, 0x84, 0xf1, 0x68, 0x63, 0x8f, 0x87, 0x6c, 0xc3, 0xf0, 0x58, 0xdb, 0x76, 0xe4, 0x62, + 0x5c, 0x7b, 0x36, 0x17, 0x97, 0xc7, 0x7c, 0xd6, 0x8d, 0xd4, 0x9d, 0xcf, 0x5d, 0xc2, 0x9a, 0xa1, + 0xfd, 0x88, 0x5b, 0x2d, 0xce, 0x3a, 0xd1, 0xc2, 0xaf, 0xe7, 0xeb, 0xf2, 0xdd, 0x47, 0x76, 0x8b, + 0xfb, 0xc5, 0xea, 0x3c, 0xd6, 0xef, 0x72, 0x27, 0xb4, 0x6c, 0x67, 0x1f, 0x9d, 0xd4, 0x16, 0x81, + 0xde, 0x13, 0xe0, 0x77, 0x25, 0x18, 0x93, 0xbf, 0xd7, 0xe3, 0x41, 0xa8, 0xdd, 0x83, 0x2f, 0x65, + 0x66, 0x03, 0xcf, 0x75, 0x02, 0x4e, 0x37, 0x61, 0x56, 0x81, 0x5e, 0x22, 0x2b, 0x64, 0x75, 0xbe, + 0x71, 0x5a, 0xcf, 0x0b, 0xa7, 0xae, 0xa4, 0xb6, 0xa7, 0x3f, 0x7d, 0x72, 0xe6, 0x98, 0x89, 0x12, + 0xda, 0xfb, 0x04, 0xbe, 0xa8, 0x74, 0xfa, 0xae, 0xbb, 0x8f, 0x86, 0xe8, 0x05, 0x38, 0x15, 0x41, + 0xb7, 0x58, 0xab, 0xe5, 0xf3, 0x40, 0xe9, 0x9e, 0x33, 0x4f, 0x46, 0xf3, 0x5b, 0x6a, 0x9a, 0xbe, + 0x04, 0xb3, 0x5d, 0xee, 0x1f, 0x74, 0xf8, 0xd2, 0xd4, 0x0a, 0x59, 0x5d, 0x30, 0x71, 0x44, 0x17, + 0x61, 0xc6, 0xfd, 0xb1, 0xc3, 0xfd, 0xa5, 0x9a, 0x94, 0x53, 0x03, 0x31, 0x1b, 0x84, 0xcc, 0x0f, + 0x97, 0xa6, 0x57, 0xc8, 0x6a, 0xcd, 0x54, 0x03, 0xed, 0x5e, 0xe4, 0xad, 0xc2, 0x80, 0x6e, 0xbd, + 0x0e, 0x33, 0x9e, 0x98, 0x40, 0xaf, 0xce, 0xe4, 0x7b, 0xb5, 0x63, 0x77, 0xb8, 0x94, 0x43, 0xc7, + 0x94, 0x8c, 0xf6, 0x01, 0x81, 0xaf, 0x26, 0x3a, 0x83, 0xed, 0x3e, 0xe2, 0x7d, 0x0e, 0x0f, 0x77, + 0x00, 0x92, 0xd2, 0x91, 0x5e, 0xce, 0x37, 0xce, 0xe9, 0xaa, 0xce, 0x74, 0x51, 0x67, 0xba, 0x2a, + 0x65, 0xac, 0x33, 0x7d, 0x97, 0xb5, 0x39, 0x9a, 0x31, 0x53, 0x92, 0xda, 0x63, 0x02, 0xa7, 0xf3, + 0x21, 0x0d, 0x3b, 0x5c, 0x1b, 0xd7, 0x61, 0x7a, 0x2b, 0x07, 0xe5, 0xf9, 0x52, 0x94, 0xca, 0x72, + 0x06, 0xe6, 0x77, 0xe1, 0x94, 0x44, 0x29, 0xec, 0x44, 0xd1, 0x4a, 0x92, 0x4c, 0xf2, 0x93, 0x3c, + 0x95, 0x9b, 0xe4, 0x5a, 0x3a, 0xc9, 0xbb, 0x58, 0x68, 0x4a, 0x6f, 0xec, 0xf2, 0xf4, 0xbe, 0x8d, + 0x6a, 0xe7, 0x1b, 0x67, 0xf3, 0x3d, 0x7e, 0xe0, 0xd8, 0xfb, 0x36, 0x6f, 0x09, 0x41, 0xf4, 0x59, + 0x0a, 0x69, 0x3f, 0x80, 0x45, 0xa9, 0x71, 0xab, 0xd3, 0x11, 0xdf, 0xe2, 0xdc, 0x66, 0x13, 0x46, + 0x9e, 0x3b, 0x61, 0x3f, 0x27, 0xf0, 0xa2, 0x34, 0x70, 0xd7, 0xe3, 0x4e, 0xc6, 0xc2, 0xe7, 0x50, + 0x3d, 0xbf, 0x8a, 0xc0, 0x24, 0xde, 0x62, 0x0c, 0xbf, 0x09, 0x33, 0x22, 0x1c, 0x01, 0x96, 0x4d, + 0xe5, 0x20, 0x2a, 0xa9, 0xc9, 0x15, 0xce, 0x25, 0x4c, 0xc7, 0x2e, 0x46, 0x20, 0x0a, 0xd6, 0x12, + 0x1c, 0xcf, 0xc6, 0x28, 0x1a, 0x6a, 0xdf, 0x47, 0x97, 0x12, 0x09, 0x74, 0xe9, 0x26, 0xcc, 0xc5, + 0xad, 0xb3, 0x78, 0xfb, 0x47, 0xa2, 0x51, 0x5f, 0x4b, 0xe4, 0xb4, 0x3d, 0x58, 0x8a, 0x02, 0x16, + 0xaf, 0x9a, 0x74, 0x89, 0xfc, 0x8e, 0xc0, 0x57, 0x72, 0x8c, 0xe4, 0xbb, 0x51, 0x7b, 0x1e, 0x37, + 0x26, 0x97, 0x9f, 0x1e, 0x7c, 0x59, 0x41, 0x0d, 0x43, 0x1e, 0xa8, 0x53, 0x33, 0xb5, 0xbf, 0x85, + 0x41, 0xee, 0x63, 0x86, 0x70, 0x34, 0x91, 0xe6, 0x6e, 0x47, 0x69, 0x48, 0x9b, 0xc5, 0x00, 0xbd, + 0x03, 0xf3, 0x2c, 0x99, 0xc6, 0x3c, 0xbc, 0x9c, 0x1f, 0xa2, 0x94, 0xfc, 0x8e, 0xeb, 0x77, 0x31, + 0x50, 0x69, 0x79, 0x8d, 0x63, 0xcf, 0xdf, 0xea, 0x74, 0x52, 0xab, 0x27, 0x9e, 0xf4, 0xbf, 0x44, + 0x8d, 0x7c, 0xc8, 0x0e, 0xba, 0x75, 0x17, 0x16, 0x52, 0xb0, 0xa2, 0xd4, 0x8f, 0xe5, 0x57, 0x46, + 0xc1, 0xe4, 0x6a, 0xc0, 0xc3, 0x93, 0xd6, 0xe4, 0x9e, 0xeb, 0x87, 0xff, 0x8f, 0xf4, 0x3f, 0xc0, + 0x3b, 0x4b, 0x64, 0x11, 0x43, 0x74, 0x1d, 0x66, 0x7d, 0x39, 0x83, 0x79, 0x58, 0xc9, 0x0f, 0x8e, + 0x92, 0x4a, 0xc5, 0x05, 0xa5, 0x34, 0x2b, 0xe9, 0x86, 0x59, 0x5f, 0x26, 0x95, 0xe4, 0x8f, 0x09, + 0xbc, 0x34, 0x68, 0x01, 0xb1, 0xdf, 0x80, 0xe3, 0x0a, 0x45, 0x94, 0xd9, 0xaa, 0xe0, 0x23, 0xb1, + 0xc9, 0xe5, 0x73, 0x03, 0xc3, 0xb0, 0xe3, 0x73, 0x1e, 0x78, 0xac, 0xc9, 0xcb, 0x9b, 0x6e, 0x03, + 0xfd, 0xba, 0x1f, 0xba, 0x3e, 0xbf, 0xe9, 0xf6, 0x9c, 0xb0, 0x5c, 0x46, 0x47, 0x99, 0x94, 0x19, + 0x8c, 0x85, 0x48, 0xba, 0x98, 0x40, 0x09, 0x35, 0xd0, 0x0c, 0x6c, 0x35, 0x69, 0x1b, 0x89, 0x40, + 0x53, 0x4c, 0x44, 0x02, 0x72, 0xa0, 0xe9, 0x78, 0x76, 0xec, 0xd8, 0x4e, 0xab, 0xc2, 0xc5, 0x43, + 0xdb, 0x8c, 0xfc, 0x8e, 0xd7, 0xa3, 0xfa, 0xb3, 0xb0, 0x10, 0x9f, 0xcc, 0xb6, 0x17, 0x39, 0x32, + 0x1f, 0xcd, 0xdd, 0xf6, 0x02, 0xed, 0x1a, 0x76, 0x89, 0x9b, 0x1d, 0x9b, 0x3b, 0xa1, 0x70, 0xe9, + 0x7e, 0xb5, 0xc8, 0xbd, 0x81, 0xdb, 0x7e, 0x48, 0x10, 0x6d, 0x9f, 0x86, 0xb9, 0xbd, 0x7e, 0xc8, + 0x83, 0x7d, 0x9f, 0x2b, 0xbc, 0x35, 0x33, 0x99, 0xd0, 0x8c, 0xf8, 0xf2, 0xde, 0x7f, 0x8b, 0x85, + 0xac, 0xdc, 0xdc, 0xfd, 0xe8, 0x3c, 0x8d, 0x04, 0xd0, 0xcc, 0xcb, 0xf0, 0x85, 0xd0, 0xee, 0x72, + 0xcb, 0xe7, 0x5d, 0x66, 0x3b, 0xb6, 0xd3, 0x46, 0x5b, 0x2f, 0x88, 0x59, 0x33, 0x9a, 0x14, 0x81, + 0x96, 0xc6, 0x65, 0x79, 0xd5, 0x4c, 0x35, 0xd0, 0x36, 0x61, 0x39, 0xce, 0x0c, 0x6b, 0xf3, 0x5d, + 0x45, 0x3d, 0x6e, 0x3b, 0xfb, 0x6e, 0x39, 0xa0, 0x9f, 0x12, 0x38, 0x33, 0x52, 0x18, 0xc1, 0xfd, + 0x10, 0x16, 0xb1, 0xfc, 0xad, 0x34, 0xad, 0xc1, 0x8d, 0xb8, 0x9a, 0xbf, 0x51, 0x86, 0xf5, 0xe1, + 0x86, 0xa1, 0xc1, 0xd0, 0x17, 0xed, 0x00, 0xce, 0x46, 0xfb, 0x72, 0xb4, 0x13, 0x93, 0xea, 0x02, + 0xff, 0x20, 0xa0, 0x15, 0x59, 0x2b, 0xf5, 0xba, 0x36, 0x19, 0xaf, 0x27, 0xd7, 0x31, 0xde, 0xc1, + 0xea, 0x17, 0xbb, 0xe6, 0x81, 0xd7, 0x71, 0x59, 0xeb, 0xe6, 0x43, 0xde, 0x3c, 0x28, 0xcd, 0xfe, + 0x88, 0x7a, 0xba, 0x82, 0x7b, 0x62, 0x48, 0x5d, 0xb2, 0xdd, 0x1f, 0xb1, 0x8e, 0xdd, 0x92, 0xda, + 0x4e, 0x98, 0x6a, 0xa0, 0xbd, 0x8d, 0xfd, 0x64, 0xd7, 0xb7, 0x9b, 0x3c, 0x63, 0xbf, 0x0e, 0x27, + 0x5a, 0x3d, 0x3f, 0x49, 0xdb, 0x9c, 0x19, 0x8f, 0x47, 0x20, 0x88, 0x7a, 0x4d, 0x5a, 0x57, 0x62, + 0xdc, 0x13, 0xb3, 0xb8, 0x41, 0xd4, 0x40, 0xfb, 0x5a, 0x74, 0x4b, 0x90, 0x2c, 0x7e, 0xf0, 0x6a, + 0xa8, 0xd9, 0xd1, 0xe1, 0x3e, 0xf8, 0x19, 0x95, 0xde, 0x1e, 0xbe, 0xd4, 0x8d, 0x3a, 0xd9, 0xb3, + 0x1a, 0x86, 0x6f, 0xa8, 0x75, 0xbc, 0x1a, 0x61, 0x25, 0xdc, 0x0f, 0x59, 0x18, 0xc3, 0x78, 0x36, + 0x85, 0x37, 0xcb, 0xec, 0xc7, 0xa4, 0xd5, 0x78, 0x3d, 0xbf, 0xf9, 0x90, 0x05, 0x5c, 0x85, 0x76, + 0xda, 0x4c, 0x26, 0x28, 0x85, 0xe9, 0x9e, 0xf8, 0x30, 0x25, 0x3f, 0xc8, 0xdf, 0xf4, 0x0e, 0xcc, + 0x89, 0xbf, 0xa6, 0x08, 0xa5, 0x3c, 0xb7, 0x17, 0xb6, 0x75, 0x81, 0xe7, 0xdf, 0x4f, 0xce, 0x9c, + 0x6b, 0xdb, 0xe1, 0xc3, 0xde, 0x9e, 0xde, 0x74, 0xbb, 0x06, 0x3e, 0x9f, 0xa8, 0x3f, 0xeb, 0x41, + 0xeb, 0xc0, 0x08, 0xfb, 0x1e, 0x0f, 0xf4, 0xb7, 0x78, 0xd3, 0x4c, 0x14, 0xd0, 0x15, 0x98, 0x57, + 0x8f, 0x20, 0x0f, 0x02, 0x11, 0x86, 0x69, 0x69, 0x28, 0x3d, 0x45, 0x5b, 0xf0, 0x42, 0x4f, 0xfc, + 0xb0, 0xf6, 0xfa, 0x96, 0xd7, 0x61, 0xce, 0xd2, 0x8c, 0x0c, 0xd5, 0x8d, 0xfc, 0x50, 0x8d, 0xf4, + 0x54, 0x97, 0xda, 0xb6, 0xfb, 0xbb, 0x1d, 0xe6, 0x7c, 0xcb, 0x09, 0xfd, 0xbe, 0x39, 0xdf, 0x4b, + 0x66, 0xea, 0xd7, 0xe1, 0xd4, 0xe0, 0x02, 0x7a, 0x0a, 0x6a, 0x07, 0xbc, 0x8f, 0x39, 0x17, 0x3f, + 0xb1, 0x08, 0x7b, 0x3c, 0x2a, 0x1c, 0x39, 0xd8, 0x9c, 0x7a, 0x95, 0x34, 0x7e, 0xb6, 0x0c, 0x33, + 0xd2, 0x36, 0xfd, 0x05, 0x81, 0x59, 0xf5, 0x42, 0x42, 0x57, 0x0b, 0x30, 0x66, 0x1e, 0x64, 0xea, + 0x17, 0x2a, 0xac, 0x54, 0x7e, 0x68, 0xc6, 0xfb, 0xff, 0xfc, 0xef, 0x87, 0x53, 0x17, 0xe8, 0x79, + 0xe3, 0x47, 0xac, 0x79, 0xc0, 0x3a, 0xeb, 0x2d, 0xe6, 0x1a, 0x4a, 0x7a, 0x3d, 0xef, 0x01, 0x8a, + 0x7e, 0x44, 0x60, 0x5a, 0xec, 0x2a, 0x7a, 0xae, 0xc0, 0x48, 0xea, 0xac, 0xac, 0x9f, 0x2f, 0x5d, + 0x87, 0x50, 0x6e, 0x49, 0x28, 0x5b, 0xf4, 0xcd, 0x52, 0x28, 0x92, 0x21, 0x1a, 0x87, 0xea, 0xd0, + 0x3d, 0x32, 0x0e, 0xe5, 0x45, 0xef, 0xc8, 0x38, 0x94, 0x57, 0xbb, 0x23, 0xfa, 0x21, 0x81, 0x13, + 0x92, 0x8b, 0x6e, 0x75, 0x3a, 0x74, 0xad, 0xc0, 0xfc, 0x00, 0x43, 0xaf, 0x7f, 0xa3, 0xd2, 0x5a, + 0x84, 0xab, 0x4b, 0xb8, 0xab, 0xf4, 0x5c, 0x35, 0xb8, 0xf4, 0xf7, 0x04, 0xe6, 0x62, 0xc6, 0x4e, + 0x8b, 0x4c, 0x0d, 0xf2, 0xfa, 0xf1, 0x70, 0xed, 0x48, 0x5c, 0x37, 0xe8, 0xf5, 0x52, 0x5c, 0xae, + 0xc7, 0x1d, 0x0b, 0x63, 0x39, 0xf8, 0x6e, 0x70, 0x44, 0xff, 0x4c, 0x60, 0x46, 0x3e, 0xe8, 0xd0, + 0xa2, 0x0c, 0xa6, 0xdf, 0xe7, 0xea, 0xab, 0xe5, 0x0b, 0x11, 0xe4, 0xbb, 0x12, 0xe4, 0x77, 0xa8, + 0x59, 0x5e, 0x76, 0x42, 0x2e, 0x07, 0xdf, 0xe8, 0xf4, 0xff, 0x9a, 0xc0, 0x5c, 0xdc, 0xdd, 0x0a, + 0xf3, 0x3f, 0xf0, 0x24, 0x50, 0x18, 0xe7, 0xc1, 0xc7, 0x00, 0xed, 0x0d, 0xe9, 0xc2, 0x2b, 0xf4, + 0x4a, 0x15, 0x17, 0x14, 0x18, 0xe3, 0x30, 0x8e, 0xee, 0xc7, 0x04, 0x16, 0x62, 0x90, 0xa2, 0x4e, + 0xf5, 0xe2, 0x1c, 0x0f, 0x9e, 0x07, 0x75, 0xa3, 0xf2, 0x7a, 0xc4, 0xdb, 0x90, 0x78, 0x2f, 0xd2, + 0xb5, 0xea, 0x78, 0xe9, 0xdf, 0x09, 0xcc, 0xa7, 0x88, 0x20, 0x5d, 0x2f, 0x32, 0x3a, 0xc4, 0xdf, + 0xeb, 0x7a, 0xd5, 0xe5, 0x08, 0xf1, 0x7b, 0x12, 0xe2, 0x3d, 0x7a, 0xb7, 0x14, 0x62, 0x9a, 0x86, + 0xaa, 0xe2, 0x90, 0x15, 0x30, 0xaa, 0x24, 0xfe, 0x40, 0xe0, 0x64, 0x9a, 0x12, 0x8b, 0x80, 0x6f, + 0x14, 0x07, 0x30, 0x87, 0xa9, 0xd7, 0x1b, 0xe3, 0x88, 0xa0, 0x4f, 0x57, 0xa5, 0x4f, 0x06, 0x5d, + 0x1f, 0xcb, 0x27, 0xfa, 0x09, 0x81, 0xe3, 0x26, 0xd2, 0xb2, 0xa2, 0x6d, 0x95, 0x61, 0x99, 0x85, + 0x8d, 0x3f, 0xcb, 0x16, 0x35, 0x53, 0xe2, 0xba, 0x43, 0xdf, 0x2e, 0xc5, 0x85, 0xec, 0xb0, 0x42, + 0x98, 0x7f, 0x49, 0x00, 0x10, 0xb4, 0x88, 0x70, 0x49, 0xdb, 0xca, 0x42, 0xbf, 0x58, 0x6d, 0x31, + 0xa2, 0xbf, 0x24, 0xd1, 0xaf, 0xd1, 0xd5, 0xaa, 0xe8, 0xe9, 0x63, 0x02, 0x73, 0x31, 0x4f, 0x2c, + 0x84, 0x36, 0x48, 0x5a, 0x0b, 0xa1, 0x0d, 0x51, 0xcf, 0x31, 0xfa, 0xc2, 0x7e, 0x24, 0x9b, 0xea, + 0x0b, 0xbf, 0x21, 0x00, 0x09, 0x3d, 0xa5, 0x17, 0x4b, 0xee, 0x25, 0x19, 0xa6, 0x5c, 0x5f, 0xaf, + 0xb8, 0x1a, 0x91, 0x6e, 0x4a, 0xa4, 0x57, 0x68, 0xa3, 0x14, 0xa9, 0xf8, 0x6b, 0x3b, 0xed, 0x14, + 0xce, 0x8f, 0xe4, 0x19, 0xab, 0x58, 0x6e, 0x61, 0x8f, 0x1d, 0xa0, 0xce, 0x85, 0x3d, 0x76, 0x90, + 0x36, 0x6b, 0xaf, 0x4b, 0x84, 0x57, 0xe9, 0xe5, 0x0a, 0x67, 0xac, 0xd3, 0x92, 0x67, 0x59, 0x5c, + 0x9d, 0xa2, 0x79, 0xd1, 0x5b, 0x3c, 0x1c, 0xa0, 0xc5, 0x85, 0xfb, 0x3e, 0x9f, 0x7b, 0x17, 0xee, + 0xfb, 0x11, 0xac, 0x5b, 0xfb, 0xb6, 0x84, 0xbe, 0x4d, 0x6f, 0x94, 0x42, 0x6f, 0xf3, 0xd0, 0x6a, + 0x4a, 0x2d, 0x96, 0xa8, 0x08, 0x6b, 0xb0, 0x24, 0x1e, 0x13, 0x80, 0x5b, 0x3c, 0x44, 0xbe, 0x4d, + 0x8b, 0x2f, 0x77, 0x69, 0x12, 0x5f, 0x5f, 0xab, 0xb2, 0x14, 0xf1, 0xbe, 0x29, 0xf1, 0xbe, 0x46, + 0xaf, 0x55, 0xc2, 0xeb, 0xb1, 0xbe, 0xd5, 0x62, 0x21, 0x4b, 0xc1, 0xfc, 0x1b, 0x01, 0x3a, 0xcc, + 0x1d, 0xe9, 0x95, 0xf2, 0x9b, 0xf5, 0x30, 0x51, 0xae, 0x5f, 0x1d, 0x53, 0x6a, 0x6c, 0x27, 0xd2, + 0x7c, 0x38, 0xe5, 0xc4, 0x5f, 0x09, 0xbc, 0x38, 0xac, 0x5f, 0x34, 0xb3, 0x6b, 0xc5, 0xfd, 0x69, + 0xb4, 0x2b, 0xaf, 0x8e, 0x2f, 0x38, 0xf6, 0xd1, 0x91, 0xf6, 0x86, 0xfe, 0x89, 0xc0, 0xc9, 0x01, + 0xde, 0x5b, 0x58, 0xf4, 0xf9, 0x94, 0xbb, 0xb0, 0xe8, 0x47, 0xd0, 0xea, 0x31, 0x3a, 0x8a, 0xd8, + 0xaa, 0x56, 0x4f, 0xaa, 0xb0, 0x9a, 0x12, 0xe2, 0x27, 0x04, 0x20, 0x21, 0xcb, 0x85, 0x9d, 0x6f, + 0x88, 0x9f, 0x17, 0x76, 0xbe, 0x61, 0x06, 0x3e, 0x06, 0xd5, 0x90, 0xdc, 0x5c, 0x21, 0x34, 0x0e, + 0x23, 0xca, 0x7f, 0x64, 0x1c, 0x4a, 0x92, 0x7f, 0x44, 0xff, 0x28, 0x2e, 0x16, 0x59, 0x3e, 0x5d, + 0x7c, 0xb1, 0xc8, 0x25, 0xf7, 0xc5, 0x17, 0x8b, 0x7c, 0xc2, 0xaf, 0xbd, 0x26, 0x7d, 0xb8, 0x4c, + 0x37, 0xca, 0x2f, 0x16, 0xea, 0xff, 0x02, 0x92, 0x6b, 0xdd, 0x6f, 0x09, 0x2c, 0xa4, 0x59, 0x6d, + 0xe1, 0xe5, 0x33, 0xe7, 0x15, 0xa0, 0xf0, 0xf2, 0x99, 0x47, 0x97, 0xb5, 0x57, 0x24, 0xd8, 0x4b, + 0x54, 0xaf, 0x74, 0xd4, 0xb0, 0x36, 0xb7, 0xc4, 0x4d, 0x28, 0xd8, 0xbe, 0xf3, 0xe9, 0xd3, 0x65, + 0xf2, 0xd9, 0xd3, 0x65, 0xf2, 0x9f, 0xa7, 0xcb, 0xe4, 0x83, 0x67, 0xcb, 0xc7, 0x3e, 0x7b, 0xb6, + 0x7c, 0xec, 0x5f, 0xcf, 0x96, 0x8f, 0xbd, 0xdb, 0x48, 0xbd, 0x0e, 0x28, 0x9d, 0x77, 0xd8, 0x5e, + 0x90, 0xd5, 0xf9, 0x93, 0x58, 0xab, 0x7c, 0x2d, 0xd8, 0x9b, 0x95, 0xff, 0xc5, 0x70, 0xf9, 0x7f, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x42, 0xfb, 0x11, 0xb9, 0xfa, 0x21, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4832,6 +4845,21 @@ func (m *QueryStorageStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro _ = i var l int _ = l + if len(m.UsersByPlan) > 0 { + for k := range m.UsersByPlan { + v := m.UsersByPlan[k] + baseI := i + i = encodeVarintQuery(dAtA, i, uint64(v)) + i-- + dAtA[i] = 0x10 + i = encodeVarintQuery(dAtA, i, uint64(k)) + i-- + dAtA[i] = 0x8 + i = encodeVarintQuery(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } if m.ActiveUsers != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.ActiveUsers)) i-- @@ -5525,6 +5553,14 @@ func (m *QueryStorageStatsResponse) Size() (n int) { if m.ActiveUsers != 0 { n += 1 + sovQuery(uint64(m.ActiveUsers)) } + if len(m.UsersByPlan) > 0 { + for k, v := range m.UsersByPlan { + _ = k + _ = v + mapEntrySize := 1 + sovQuery(uint64(k)) + 1 + sovQuery(uint64(v)) + n += mapEntrySize + 1 + sovQuery(uint64(mapEntrySize)) + } + } return n } @@ -9810,6 +9846,105 @@ func (m *QueryStorageStatsResponse) Unmarshal(dAtA []byte) error { break } } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UsersByPlan", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UsersByPlan == nil { + m.UsersByPlan = make(map[int64]int64) + } + var mapkey int64 + var mapvalue int64 + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvalue |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + } else { + iNdEx = entryPreIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.UsersByPlan[mapkey] = mapvalue + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) From 8962583ed431c66dacbf5002931a0a9db083e3ad Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 27 Oct 2023 14:46:05 -0400 Subject: [PATCH 045/256] fixing inflation by removing hard coded token count --- x/jklmint/keeper/keeper.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/x/jklmint/keeper/keeper.go b/x/jklmint/keeper/keeper.go index a8ecbaf89..2e2b9fda1 100644 --- a/x/jklmint/keeper/keeper.go +++ b/x/jklmint/keeper/keeper.go @@ -85,7 +85,8 @@ func FloatToBigInt(val float64) *big.Int { } func (k Keeper) GetInflation(ctx sdk.Context) (sdk.Dec, error) { - denom := k.GetParams(ctx).MintDenom + params := k.GetParams(ctx) + denom := params.MintDenom coins := k.bankKeeper.GetSupply(ctx, denom) amt := coins.Amount.ToDec() @@ -96,7 +97,7 @@ func (k Keeper) GetInflation(ctx sdk.Context) (sdk.Dec, error) { var blocksPerYearEstiamte int64 = (365 * 24 * 60 * 60) / 6 - printedPerYear := blocksPerYearEstiamte * 10_000_000 + printedPerYear := blocksPerYearEstiamte * 1_000_000 * params.TokensPerBlock inflate := sdk.NewDec(printedPerYear) From f9b69a7365218c8c38f53f902933ca81e40891b9 Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 27 Oct 2023 23:26:03 -0400 Subject: [PATCH 046/256] adding field to track actual coins deposited --- proto/canine_chain/storage/payment_info.proto | 8 + x/storage/keeper/msg_server_buy_storage.go | 8 +- x/storage/types/payment_info.pb.go | 151 +++++++++++------- 3 files changed, 105 insertions(+), 62 deletions(-) diff --git a/proto/canine_chain/storage/payment_info.proto b/proto/canine_chain/storage/payment_info.proto index c235a335c..7d754cee4 100644 --- a/proto/canine_chain/storage/payment_info.proto +++ b/proto/canine_chain/storage/payment_info.proto @@ -1,15 +1,23 @@ syntax = "proto3"; package canine_chain.storage; +import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; +import "cosmos_proto/cosmos.proto"; option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; message StoragePaymentInfo { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + google.protobuf.Timestamp start = 1 [ (gogoproto.stdtime) = true, (gogoproto.nullable) = false ]; google.protobuf.Timestamp end = 2 [ (gogoproto.stdtime) = true, (gogoproto.nullable) = false]; int64 spaceAvailable = 3; int64 spaceUsed = 4; string address = 5; + + repeated cosmos.base.v1beta1.Coin coins = 6 + [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; } diff --git a/x/storage/keeper/msg_server_buy_storage.go b/x/storage/keeper/msg_server_buy_storage.go index 341dd2d71..2be239c45 100644 --- a/x/storage/keeper/msg_server_buy_storage.go +++ b/x/storage/keeper/msg_server_buy_storage.go @@ -50,11 +50,13 @@ func (k msgServer) BuyStorage(goCtx context.Context, msg *types.MsgBuyStorage) ( hours := sdk.NewDec(duration.Milliseconds()).Quo(sdk.NewDec(60 * 60 * 1000)) priceTokens := sdk.NewCoin(denom, k.GetStorageCost(ctx, gbs, hours.TruncateInt().Int64())) + priceTokenList := sdk.NewCoins(priceTokens) + add, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { return nil, err } - err = k.bankkeeper.SendCoinsFromAccountToModule(ctx, add, types.ModuleName, sdk.NewCoins(priceTokens)) + err = k.bankkeeper.SendCoinsFromAccountToModule(ctx, add, types.ModuleName, priceTokenList) if err != nil { return nil, err } @@ -77,12 +79,15 @@ func (k msgServer) BuyStorage(goCtx context.Context, msg *types.MsgBuyStorage) ( return nil, fmt.Errorf("please use MsgUpgradeStorage if you want to upgrade/downgrade") } + c := payInfo.Coins.Add(priceTokens) + spi = types.StoragePaymentInfo{ Start: ctx.BlockTime(), End: ctx.BlockTime().Add(duration), SpaceAvailable: bytes, SpaceUsed: payInfo.SpaceUsed, Address: msg.ForAddress, + Coins: c, } } else { spi = types.StoragePaymentInfo{ @@ -91,6 +96,7 @@ func (k msgServer) BuyStorage(goCtx context.Context, msg *types.MsgBuyStorage) ( SpaceAvailable: bytes, SpaceUsed: 0, Address: msg.ForAddress, + Coins: priceTokenList, } } diff --git a/x/storage/types/payment_info.pb.go b/x/storage/types/payment_info.pb.go index 4399c37f0..357a5f6ce 100644 --- a/x/storage/types/payment_info.pb.go +++ b/x/storage/types/payment_info.pb.go @@ -5,6 +5,9 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/gogo/protobuf/proto" _ "github.com/gogo/protobuf/types" @@ -28,11 +31,12 @@ var _ = time.Kitchen const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type StoragePaymentInfo struct { - Start time.Time `protobuf:"bytes,1,opt,name=start,proto3,stdtime" json:"start"` - End time.Time `protobuf:"bytes,2,opt,name=end,proto3,stdtime" json:"end"` - SpaceAvailable int64 `protobuf:"varint,3,opt,name=spaceAvailable,proto3" json:"spaceAvailable,omitempty"` - SpaceUsed int64 `protobuf:"varint,4,opt,name=spaceUsed,proto3" json:"spaceUsed,omitempty"` - Address string `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"` + Start time.Time `protobuf:"bytes,1,opt,name=start,proto3,stdtime" json:"start"` + End time.Time `protobuf:"bytes,2,opt,name=end,proto3,stdtime" json:"end"` + SpaceAvailable int64 `protobuf:"varint,3,opt,name=spaceAvailable,proto3" json:"spaceAvailable,omitempty"` + SpaceUsed int64 `protobuf:"varint,4,opt,name=spaceUsed,proto3" json:"spaceUsed,omitempty"` + Address string `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"` + Coins github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,6,rep,name=coins,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"coins"` } func (m *StoragePaymentInfo) Reset() { *m = StoragePaymentInfo{} } @@ -68,41 +72,6 @@ func (m *StoragePaymentInfo) XXX_DiscardUnknown() { var xxx_messageInfo_StoragePaymentInfo proto.InternalMessageInfo -func (m *StoragePaymentInfo) GetStart() time.Time { - if m != nil { - return m.Start - } - return time.Time{} -} - -func (m *StoragePaymentInfo) GetEnd() time.Time { - if m != nil { - return m.End - } - return time.Time{} -} - -func (m *StoragePaymentInfo) GetSpaceAvailable() int64 { - if m != nil { - return m.SpaceAvailable - } - return 0 -} - -func (m *StoragePaymentInfo) GetSpaceUsed() int64 { - if m != nil { - return m.SpaceUsed - } - return 0 -} - -func (m *StoragePaymentInfo) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - func init() { proto.RegisterType((*StoragePaymentInfo)(nil), "canine_chain.storage.StoragePaymentInfo") } @@ -112,27 +81,33 @@ func init() { } var fileDescriptor_b1e2face38d88409 = []byte{ - // 308 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0x31, 0x4f, 0x02, 0x31, - 0x18, 0x86, 0xaf, 0x22, 0x2a, 0x35, 0x71, 0x68, 0x18, 0x2e, 0xc4, 0x14, 0xe2, 0xa0, 0x2c, 0xb6, - 0x09, 0x26, 0x0e, 0x6e, 0xb2, 0x99, 0x30, 0x18, 0xd4, 0xc5, 0x85, 0x7c, 0x77, 0x57, 0x4a, 0xf5, - 0xae, 0xbd, 0x5c, 0x8b, 0x91, 0x7f, 0xc1, 0xcf, 0x62, 0x64, 0x74, 0x52, 0x03, 0x8b, 0x3f, 0xc3, - 0x70, 0xf5, 0xd4, 0xb8, 0xb9, 0xf5, 0x7b, 0xf3, 0xbc, 0x4f, 0xd3, 0x7e, 0xf8, 0x24, 0x06, 0xad, - 0xb4, 0x18, 0xc5, 0x13, 0x50, 0x9a, 0x5b, 0x67, 0x0a, 0x90, 0x82, 0xe7, 0x30, 0xcb, 0x84, 0x76, - 0x23, 0xa5, 0xc7, 0x86, 0xe5, 0x85, 0x71, 0x86, 0x34, 0x7f, 0x83, 0xec, 0x0b, 0x6c, 0x35, 0xa5, - 0x91, 0xa6, 0x04, 0xf8, 0xe6, 0xe4, 0xd9, 0x56, 0x5b, 0x1a, 0x23, 0x53, 0xc1, 0xcb, 0x29, 0x9a, - 0x8e, 0xb9, 0x53, 0x99, 0xb0, 0x0e, 0xb2, 0xdc, 0x03, 0x47, 0x1f, 0x08, 0x93, 0x1b, 0xaf, 0xb8, - 0xf6, 0x57, 0x5d, 0xe9, 0xb1, 0x21, 0x17, 0xb8, 0x6e, 0x1d, 0x14, 0x2e, 0x44, 0x1d, 0xd4, 0xdd, - 0xef, 0xb5, 0x98, 0xf7, 0xb0, 0xca, 0xc3, 0x6e, 0x2b, 0x4f, 0x7f, 0x6f, 0xf1, 0xda, 0x0e, 0xe6, - 0x6f, 0x6d, 0x34, 0xf4, 0x15, 0x72, 0x8e, 0x6b, 0x42, 0x27, 0xe1, 0xd6, 0x3f, 0x9a, 0x9b, 0x02, - 0x39, 0xc6, 0x07, 0x36, 0x87, 0x58, 0x5c, 0x3e, 0x81, 0x4a, 0x21, 0x4a, 0x45, 0x58, 0xeb, 0xa0, - 0x6e, 0x6d, 0xf8, 0x27, 0x25, 0x87, 0xb8, 0x51, 0x26, 0x77, 0x56, 0x24, 0xe1, 0x76, 0x89, 0xfc, - 0x04, 0x24, 0xc4, 0xbb, 0x90, 0x24, 0x85, 0xb0, 0x36, 0xac, 0x77, 0x50, 0xb7, 0x31, 0xac, 0xc6, - 0xfe, 0x60, 0xb1, 0xa2, 0x68, 0xb9, 0xa2, 0xe8, 0x7d, 0x45, 0xd1, 0x7c, 0x4d, 0x83, 0xe5, 0x9a, - 0x06, 0x2f, 0x6b, 0x1a, 0xdc, 0xf7, 0xa4, 0x72, 0x93, 0x69, 0xc4, 0x62, 0x93, 0xf1, 0x07, 0x88, - 0x1f, 0x21, 0x1d, 0x40, 0x64, 0xb9, 0xff, 0xe7, 0x53, 0xbf, 0x90, 0xe7, 0xef, 0x95, 0xb8, 0x59, - 0x2e, 0x6c, 0xb4, 0x53, 0x3e, 0xe8, 0xec, 0x33, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x98, 0xbb, 0xc9, - 0xb7, 0x01, 0x00, 0x00, + // 404 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0xb1, 0x8e, 0xd3, 0x40, + 0x10, 0xf5, 0x9e, 0xc9, 0x71, 0xb7, 0x27, 0x51, 0xac, 0xae, 0xf0, 0x45, 0xc8, 0xb6, 0x28, 0xc0, + 0xcd, 0xed, 0x72, 0x41, 0xa2, 0xb8, 0x8e, 0x50, 0x21, 0xa5, 0x40, 0x06, 0x1a, 0x9a, 0x68, 0x6c, + 0x6f, 0x9c, 0x25, 0xf6, 0xae, 0xe5, 0xdd, 0x44, 0xe4, 0x0f, 0x28, 0xf3, 0x09, 0xa9, 0xf9, 0x92, + 0x94, 0x69, 0x90, 0xa8, 0x08, 0x4a, 0x1a, 0x3e, 0x03, 0xd9, 0xeb, 0x40, 0x44, 0x47, 0xb5, 0x33, + 0x6f, 0xdf, 0x9b, 0x37, 0x7a, 0x1a, 0xfc, 0x2c, 0x05, 0x29, 0x24, 0x1f, 0xa7, 0x53, 0x10, 0x92, + 0x69, 0xa3, 0x6a, 0xc8, 0x39, 0xab, 0x60, 0x59, 0x72, 0x69, 0xc6, 0x42, 0x4e, 0x14, 0xad, 0x6a, + 0x65, 0x14, 0xb9, 0x3e, 0x25, 0xd2, 0x8e, 0xd8, 0xf7, 0x53, 0xa5, 0x4b, 0xa5, 0x59, 0x02, 0x9a, + 0xb3, 0xc5, 0x5d, 0xc2, 0x0d, 0xdc, 0xb1, 0x54, 0x09, 0x69, 0x55, 0xfd, 0xeb, 0x5c, 0xe5, 0xaa, + 0x2d, 0x59, 0x53, 0x75, 0x68, 0x90, 0x2b, 0x95, 0x17, 0x9c, 0xb5, 0x5d, 0x32, 0x9f, 0x30, 0x23, + 0x4a, 0xae, 0x0d, 0x94, 0x55, 0x47, 0xb8, 0xb1, 0x63, 0xc7, 0x56, 0x69, 0x1b, 0xfb, 0xf5, 0xe4, + 0xdb, 0x19, 0x26, 0xef, 0xac, 0xfb, 0x5b, 0xbb, 0xe5, 0x1b, 0x39, 0x51, 0xe4, 0x1e, 0xf7, 0xb4, + 0x81, 0xda, 0x78, 0x28, 0x44, 0xd1, 0xd5, 0xa0, 0x4f, 0xad, 0x05, 0x3d, 0x5a, 0xd0, 0xf7, 0x47, + 0x8b, 0xe1, 0xc5, 0xe6, 0x47, 0xe0, 0xac, 0x76, 0x01, 0x8a, 0xad, 0x84, 0xbc, 0xc4, 0x2e, 0x97, + 0x99, 0x77, 0xf6, 0x1f, 0xca, 0x46, 0x40, 0x9e, 0xe2, 0x47, 0xba, 0x82, 0x94, 0xbf, 0x5a, 0x80, + 0x28, 0x20, 0x29, 0xb8, 0xe7, 0x86, 0x28, 0x72, 0xe3, 0x7f, 0x50, 0xf2, 0x18, 0x5f, 0xb6, 0xc8, + 0x07, 0xcd, 0x33, 0xef, 0x41, 0x4b, 0xf9, 0x0b, 0x10, 0x0f, 0x3f, 0x84, 0x2c, 0xab, 0xb9, 0xd6, + 0x5e, 0x2f, 0x44, 0xd1, 0x65, 0x7c, 0x6c, 0x09, 0xe0, 0x5e, 0x13, 0xa5, 0xf6, 0xce, 0x43, 0x37, + 0xba, 0x1a, 0xdc, 0xd0, 0x2e, 0x88, 0x26, 0x6c, 0xda, 0x85, 0x4d, 0x5f, 0x2b, 0x21, 0x87, 0xcf, + 0x9b, 0xc5, 0xbe, 0xee, 0x82, 0x28, 0x17, 0x66, 0x3a, 0x4f, 0x68, 0xaa, 0xca, 0x2e, 0xb5, 0xee, + 0xb9, 0xd5, 0xd9, 0x8c, 0x99, 0x65, 0xc5, 0x75, 0x2b, 0xd0, 0xb1, 0x9d, 0x7c, 0x7f, 0xf1, 0x65, + 0x1d, 0x38, 0xbf, 0xd6, 0x81, 0x33, 0x1c, 0x6d, 0xf6, 0x3e, 0xda, 0xee, 0x7d, 0xf4, 0x73, 0xef, + 0xa3, 0xd5, 0xc1, 0x77, 0xb6, 0x07, 0xdf, 0xf9, 0x7e, 0xf0, 0x9d, 0x8f, 0x83, 0x93, 0xa1, 0x9f, + 0x20, 0x9d, 0x41, 0x31, 0x82, 0x44, 0x33, 0x7b, 0x0f, 0xb7, 0xf6, 0x70, 0x3e, 0xff, 0x39, 0x9d, + 0xd6, 0x24, 0x39, 0x6f, 0xd3, 0x7b, 0xf1, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xe6, 0xba, 0x8a, 0x53, + 0x5f, 0x02, 0x00, 0x00, } func (m *StoragePaymentInfo) Marshal() (dAtA []byte, err error) { @@ -155,6 +130,20 @@ func (m *StoragePaymentInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Coins) > 0 { + for iNdEx := len(m.Coins) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Coins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPaymentInfo(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } if len(m.Address) > 0 { i -= len(m.Address) copy(dAtA[i:], m.Address) @@ -222,6 +211,12 @@ func (m *StoragePaymentInfo) Size() (n int) { if l > 0 { n += 1 + l + sovPaymentInfo(uint64(l)) } + if len(m.Coins) > 0 { + for _, e := range m.Coins { + l = e.Size() + n += 1 + l + sovPaymentInfo(uint64(l)) + } + } return n } @@ -396,6 +391,40 @@ func (m *StoragePaymentInfo) Unmarshal(dAtA []byte) error { } m.Address = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Coins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPaymentInfo + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPaymentInfo + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPaymentInfo + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Coins = append(m.Coins, types1.Coin{}) + if err := m.Coins[len(m.Coins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipPaymentInfo(dAtA[iNdEx:]) From 8da86752f1af1d25cef9141d495a524a583fb025 Mon Sep 17 00:00:00 2001 From: marston Date: Tue, 31 Oct 2023 12:34:41 -0400 Subject: [PATCH 047/256] adding files by owner query --- proto/canine_chain/filetree/query.proto | 10 + x/filetree/keeper/grpc_query_files.go | 30 ++ x/filetree/types/query.pb.go | 384 ++++++++++++++++++++---- x/filetree/types/query.pb.gw.go | 119 ++++++++ 4 files changed, 487 insertions(+), 56 deletions(-) diff --git a/proto/canine_chain/filetree/query.proto b/proto/canine_chain/filetree/query.proto index 1e28ea1ec..a22892ac1 100644 --- a/proto/canine_chain/filetree/query.proto +++ b/proto/canine_chain/filetree/query.proto @@ -35,6 +35,11 @@ service Query { "/jackal-dao/canine-chain/filetree/files/{address}/{ownerAddress}"; } + // Queries a list of Files items. + rpc FilesAllByOwner(QueryAllFilesByOwnerRequest) returns (QueryAllFilesResponse) { + option (google.api.http).get = "/jackal-dao/canine-chain/filetree/files/{owner}"; + } + // Queries a list of Files items. rpc FilesAll(QueryAllFilesRequest) returns (QueryAllFilesResponse) { option (google.api.http).get = "/jackal-dao/canine-chain/filetree/files"; @@ -79,6 +84,11 @@ message QueryFileRequest { message QueryFileResponse { Files files = 1 [ (gogoproto.nullable) = false ]; } +message QueryAllFilesByOwnerRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; + string owner = 2; +} + message QueryAllFilesRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; } diff --git a/x/filetree/keeper/grpc_query_files.go b/x/filetree/keeper/grpc_query_files.go index 6b3ca2b0b..85b9a5c54 100644 --- a/x/filetree/keeper/grpc_query_files.go +++ b/x/filetree/keeper/grpc_query_files.go @@ -39,6 +39,36 @@ func (k Keeper) FilesAll(c context.Context, req *types.QueryAllFilesRequest) (*t return &types.QueryAllFilesResponse{Files: filess, Pagination: pageRes}, nil } +func (k Keeper) FilesAllByOwner(c context.Context, req *types.QueryAllFilesByOwnerRequest) (*types.QueryAllFilesResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var filess []types.Files + ctx := sdk.UnwrapSDKContext(c) + + store := ctx.KVStore(k.storeKey) + filesStore := prefix.NewStore(store, types.KeyPrefix(types.FilesKeyPrefix)) + + pageRes, err := query.Paginate(filesStore, req.Pagination, func(key []byte, value []byte) error { + var files types.Files + if err := k.cdc.Unmarshal(value, &files); err != nil { + return err + } + + if files.Owner == req.Owner { + filess = append(filess, files) + } + + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllFilesResponse{Files: filess, Pagination: pageRes}, nil +} + func (k Keeper) Files(c context.Context, req *types.QueryFileRequest) (*types.QueryFileResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") diff --git a/x/filetree/types/query.pb.go b/x/filetree/types/query.pb.go index 8c5cb154b..10f534a0a 100644 --- a/x/filetree/types/query.pb.go +++ b/x/filetree/types/query.pb.go @@ -393,6 +393,58 @@ func (m *QueryFileResponse) GetFiles() Files { return Files{} } +type QueryAllFilesByOwnerRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` + Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` +} + +func (m *QueryAllFilesByOwnerRequest) Reset() { *m = QueryAllFilesByOwnerRequest{} } +func (m *QueryAllFilesByOwnerRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllFilesByOwnerRequest) ProtoMessage() {} +func (*QueryAllFilesByOwnerRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f2d116acb9d238bd, []int{8} +} +func (m *QueryAllFilesByOwnerRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllFilesByOwnerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllFilesByOwnerRequest.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 *QueryAllFilesByOwnerRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllFilesByOwnerRequest.Merge(m, src) +} +func (m *QueryAllFilesByOwnerRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllFilesByOwnerRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllFilesByOwnerRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllFilesByOwnerRequest proto.InternalMessageInfo + +func (m *QueryAllFilesByOwnerRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +func (m *QueryAllFilesByOwnerRequest) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + type QueryAllFilesRequest struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } @@ -401,7 +453,7 @@ func (m *QueryAllFilesRequest) Reset() { *m = QueryAllFilesRequest{} } func (m *QueryAllFilesRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllFilesRequest) ProtoMessage() {} func (*QueryAllFilesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{8} + return fileDescriptor_f2d116acb9d238bd, []int{9} } func (m *QueryAllFilesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -446,7 +498,7 @@ func (m *QueryAllFilesResponse) Reset() { *m = QueryAllFilesResponse{} } func (m *QueryAllFilesResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllFilesResponse) ProtoMessage() {} func (*QueryAllFilesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{9} + return fileDescriptor_f2d116acb9d238bd, []int{10} } func (m *QueryAllFilesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -497,7 +549,7 @@ func (m *QueryPubkeyRequest) Reset() { *m = QueryPubkeyRequest{} } func (m *QueryPubkeyRequest) String() string { return proto.CompactTextString(m) } func (*QueryPubkeyRequest) ProtoMessage() {} func (*QueryPubkeyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{10} + return fileDescriptor_f2d116acb9d238bd, []int{11} } func (m *QueryPubkeyRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -541,7 +593,7 @@ func (m *QueryPubkeyResponse) Reset() { *m = QueryPubkeyResponse{} } func (m *QueryPubkeyResponse) String() string { return proto.CompactTextString(m) } func (*QueryPubkeyResponse) ProtoMessage() {} func (*QueryPubkeyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{11} + return fileDescriptor_f2d116acb9d238bd, []int{12} } func (m *QueryPubkeyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -585,7 +637,7 @@ func (m *QueryAllPubkeysRequest) Reset() { *m = QueryAllPubkeysRequest{} func (m *QueryAllPubkeysRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllPubkeysRequest) ProtoMessage() {} func (*QueryAllPubkeysRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{12} + return fileDescriptor_f2d116acb9d238bd, []int{13} } func (m *QueryAllPubkeysRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -630,7 +682,7 @@ func (m *QueryAllPubkeysResponse) Reset() { *m = QueryAllPubkeysResponse func (m *QueryAllPubkeysResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllPubkeysResponse) ProtoMessage() {} func (*QueryAllPubkeysResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f2d116acb9d238bd, []int{13} + return fileDescriptor_f2d116acb9d238bd, []int{14} } func (m *QueryAllPubkeysResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -682,6 +734,7 @@ func init() { proto.RegisterType((*QueryDecryptResponse)(nil), "canine_chain.filetree.QueryDecryptResponse") proto.RegisterType((*QueryFileRequest)(nil), "canine_chain.filetree.QueryFileRequest") proto.RegisterType((*QueryFileResponse)(nil), "canine_chain.filetree.QueryFileResponse") + proto.RegisterType((*QueryAllFilesByOwnerRequest)(nil), "canine_chain.filetree.QueryAllFilesByOwnerRequest") proto.RegisterType((*QueryAllFilesRequest)(nil), "canine_chain.filetree.QueryAllFilesRequest") proto.RegisterType((*QueryAllFilesResponse)(nil), "canine_chain.filetree.QueryAllFilesResponse") proto.RegisterType((*QueryPubkeyRequest)(nil), "canine_chain.filetree.QueryPubkeyRequest") @@ -693,56 +746,60 @@ func init() { func init() { proto.RegisterFile("canine_chain/filetree/query.proto", fileDescriptor_f2d116acb9d238bd) } var fileDescriptor_f2d116acb9d238bd = []byte{ - // 778 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xcf, 0x4f, 0xd4, 0x40, - 0x14, 0xc7, 0x77, 0xf8, 0xcd, 0x68, 0x8c, 0x8e, 0xa0, 0xa4, 0xc1, 0x55, 0xc6, 0x04, 0x58, 0x90, - 0x4e, 0x80, 0x98, 0x98, 0x10, 0x7f, 0x40, 0x00, 0x35, 0x91, 0x04, 0xf7, 0xe8, 0x41, 0x9d, 0xdd, - 0x1d, 0x4b, 0xa5, 0xdb, 0x29, 0x6d, 0x57, 0x25, 0x84, 0x8b, 0x47, 0x4f, 0x26, 0x26, 0x1e, 0x8c, - 0x86, 0x8b, 0x17, 0xff, 0x13, 0x8e, 0x24, 0x5e, 0x3c, 0x19, 0x05, 0xff, 0x10, 0xd3, 0x99, 0x57, - 0xb6, 0x2d, 0xb0, 0x5d, 0x12, 0x6e, 0xdb, 0x99, 0x37, 0xef, 0xfb, 0x99, 0xf7, 0xe6, 0x7d, 0xb3, - 0x78, 0xa4, 0xca, 0x5d, 0xdb, 0x15, 0x2f, 0xaa, 0x6b, 0xdc, 0x76, 0xd9, 0x2b, 0xdb, 0x11, 0xa1, - 0x2f, 0x04, 0xdb, 0x68, 0x08, 0x7f, 0xd3, 0xf4, 0x7c, 0x19, 0x4a, 0x32, 0x98, 0x0c, 0x31, 0xe3, - 0x10, 0x63, 0xc0, 0x92, 0x96, 0x54, 0x11, 0x2c, 0xfa, 0xa5, 0x83, 0x8d, 0x61, 0x4b, 0x4a, 0xcb, - 0x11, 0x8c, 0x7b, 0x36, 0xe3, 0xae, 0x2b, 0x43, 0x1e, 0xda, 0xd2, 0x0d, 0x60, 0x77, 0xa2, 0x2a, - 0x83, 0xba, 0x0c, 0x58, 0x85, 0x07, 0xa0, 0xc1, 0xde, 0x4c, 0x57, 0x44, 0xc8, 0xa7, 0x99, 0xc7, - 0x2d, 0xdb, 0x55, 0xc1, 0x10, 0x4b, 0x8f, 0x27, 0xf3, 0xb8, 0xcf, 0xeb, 0x71, 0xbe, 0x13, 0xe8, - 0xa3, 0x1f, 0x41, 0x4e, 0x9a, 0x46, 0x65, 0x5d, 0xc0, 0x0d, 0xe9, 0x00, 0x26, 0x4f, 0x23, 0x98, - 0x55, 0x95, 0xbb, 0x2c, 0x36, 0x1a, 0x22, 0x08, 0x69, 0x19, 0x5f, 0x4e, 0xad, 0x06, 0x9e, 0x74, - 0x03, 0x41, 0xe6, 0x70, 0x8f, 0x66, 0x18, 0x42, 0x37, 0xd0, 0xf8, 0xb9, 0x99, 0x6b, 0xe6, 0xb1, - 0xf5, 0x31, 0xf5, 0xb1, 0x85, 0xae, 0xdd, 0xdf, 0xd7, 0x0b, 0x65, 0x38, 0x42, 0x1f, 0x43, 0xce, - 0x25, 0xb7, 0xea, 0x6f, 0x7a, 0x21, 0x48, 0x91, 0x21, 0xdc, 0xcb, 0x6b, 0x35, 0x5f, 0x04, 0x3a, - 0x69, 0x7f, 0x39, 0xfe, 0x8c, 0x76, 0xea, 0x22, 0x08, 0xb8, 0x25, 0x86, 0x3a, 0xf4, 0x0e, 0x7c, - 0xd2, 0x7b, 0x78, 0x20, 0x9d, 0x0a, 0xf8, 0x46, 0xf1, 0x05, 0xa1, 0x97, 0x6c, 0xe9, 0x2e, 0xf2, - 0x90, 0x43, 0xca, 0xcc, 0x2a, 0x65, 0x80, 0xb2, 0x28, 0xb2, 0x28, 0xb1, 0x20, 0x4a, 0x0b, 0x4e, - 0x80, 0xe0, 0xe1, 0x01, 0x10, 0x24, 0xb8, 0xab, 0xd6, 0x94, 0x51, 0xbf, 0xe9, 0x2a, 0xbe, 0xa8, - 0x62, 0x97, 0x6d, 0x47, 0xe4, 0x5f, 0x92, 0xe2, 0xf3, 0xf2, 0xad, 0x2b, 0xfc, 0x79, 0xd8, 0xd6, - 0x37, 0x4d, 0xad, 0xd1, 0x15, 0x7c, 0x29, 0x91, 0x11, 0xa4, 0xef, 0xe0, 0x6e, 0xd5, 0x6b, 0x68, - 0xc5, 0xf0, 0x09, 0xad, 0x88, 0xce, 0xc4, 0x9d, 0xd0, 0x07, 0xe8, 0x73, 0xb8, 0xcc, 0xbc, 0xe3, - 0xa8, 0xdd, 0x18, 0x72, 0x19, 0xe3, 0xe6, 0x4b, 0x84, 0xb4, 0xa3, 0xa6, 0x7e, 0xb6, 0x66, 0xf4, - 0x6c, 0x4d, 0x3d, 0x1a, 0xf0, 0x6c, 0xcd, 0x55, 0x6e, 0xc5, 0x17, 0x2c, 0x27, 0x4e, 0xd2, 0x2f, - 0x08, 0x0f, 0x66, 0x04, 0x8e, 0x32, 0x77, 0x9e, 0x8a, 0x99, 0x3c, 0x4c, 0xb1, 0x75, 0x28, 0xb6, - 0xb1, 0x5c, 0x36, 0x2d, 0x9b, 0x82, 0x33, 0xe3, 0xf7, 0xae, 0x86, 0x20, 0xb7, 0x3f, 0xcd, 0x49, - 0x80, 0xf8, 0xc4, 0x24, 0xa8, 0x95, 0xbc, 0x49, 0x50, 0x41, 0x87, 0x93, 0xa0, 0xbe, 0xe8, 0x4b, - 0x7c, 0x25, 0xae, 0x8f, 0xde, 0x3f, 0xf3, 0x16, 0xec, 0x20, 0x7c, 0xf5, 0x88, 0xc4, 0x31, 0xe8, - 0x9d, 0xa7, 0x44, 0x3f, 0xb3, 0x3e, 0xcc, 0xfc, 0xed, 0xc3, 0xdd, 0x8a, 0x90, 0x7c, 0x40, 0xb8, - 0x47, 0x1b, 0x06, 0x29, 0x9d, 0x80, 0x72, 0xd4, 0xa1, 0x8c, 0x89, 0x76, 0x42, 0xb5, 0x2e, 0x2d, - 0xbd, 0xff, 0xf9, 0xef, 0x53, 0xc7, 0x4d, 0x32, 0xc2, 0x5e, 0xf3, 0xea, 0x3a, 0x77, 0x6a, 0x5c, - 0x32, 0x7d, 0x3a, 0xeb, 0xad, 0xe4, 0x07, 0xc2, 0xbd, 0xe0, 0x2a, 0xa4, 0xa5, 0x44, 0xda, 0xc5, - 0x8c, 0xc9, 0xb6, 0x62, 0x81, 0x67, 0x49, 0xf1, 0xdc, 0x27, 0x77, 0x81, 0x67, 0xaa, 0x09, 0x34, - 0x95, 0xf1, 0x6a, 0x30, 0x2e, 0xb6, 0x05, 0xef, 0x71, 0x9b, 0x6d, 0x81, 0x27, 0x6d, 0x93, 0x1d, - 0x84, 0x7b, 0xc1, 0x90, 0x5a, 0xb3, 0xa6, 0x6d, 0xae, 0x35, 0x6b, 0xc6, 0xe1, 0xe8, 0x9c, 0x62, - 0xbd, 0x4d, 0x66, 0xf3, 0x59, 0x6b, 0x02, 0x58, 0x0f, 0x09, 0xbf, 0x23, 0xdc, 0xad, 0x86, 0x99, - 0x8c, 0xb5, 0xd2, 0x4c, 0x38, 0xa5, 0x31, 0x9e, 0x1f, 0x08, 0x64, 0x8f, 0x14, 0xd9, 0x02, 0x79, - 0x90, 0x4f, 0xa6, 0x3c, 0x24, 0x59, 0xc3, 0xa4, 0xbd, 0x6e, 0x93, 0xcf, 0x08, 0xf7, 0x29, 0xcc, - 0x79, 0xc7, 0x21, 0x2d, 0xab, 0x93, 0xb1, 0x4c, 0xe3, 0x56, 0x7b, 0xc1, 0x40, 0xcc, 0x14, 0x71, - 0x89, 0x8c, 0xb5, 0x49, 0x4c, 0xbe, 0x46, 0xa3, 0xa1, 0x07, 0xaf, 0xf5, 0x68, 0x24, 0xcd, 0x2c, - 0x67, 0x34, 0x52, 0x3e, 0x76, 0x9a, 0xf6, 0x6a, 0x07, 0x48, 0x94, 0x91, 0x7c, 0x43, 0xb8, 0x5f, - 0xe7, 0x8b, 0x0a, 0x37, 0x95, 0x53, 0x8b, 0xb4, 0xd5, 0x19, 0x66, 0xbb, 0xe1, 0x40, 0x3a, 0xad, - 0x48, 0x27, 0x49, 0xa9, 0x6d, 0xd2, 0x85, 0x95, 0xdd, 0xfd, 0x22, 0xda, 0xdb, 0x2f, 0xa2, 0x3f, - 0xfb, 0x45, 0xf4, 0xf1, 0xa0, 0x58, 0xd8, 0x3b, 0x28, 0x16, 0x7e, 0x1d, 0x14, 0x0b, 0xcf, 0x66, - 0x2d, 0x3b, 0x5c, 0x6b, 0x54, 0xcc, 0xaa, 0xac, 0x43, 0xba, 0x27, 0xbc, 0x12, 0xa4, 0xd3, 0xbd, - 0x6b, 0x26, 0x0c, 0x37, 0x3d, 0x11, 0x54, 0x7a, 0xd4, 0x3f, 0xa6, 0xd9, 0xff, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x82, 0xbe, 0x28, 0x97, 0x38, 0x0a, 0x00, 0x00, + // 835 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xcf, 0x4f, 0x1b, 0x39, + 0x14, 0xc7, 0x63, 0x20, 0xb0, 0x78, 0x57, 0xfb, 0xc3, 0x1b, 0x76, 0x51, 0x96, 0xcd, 0x2e, 0xae, + 0x04, 0x04, 0xca, 0x58, 0x01, 0x55, 0xad, 0x84, 0xfa, 0x03, 0x04, 0xb4, 0x95, 0x8a, 0x4a, 0x73, + 0xec, 0xa1, 0xad, 0x93, 0xb8, 0xc3, 0x94, 0xc9, 0x38, 0x64, 0x26, 0x6d, 0x23, 0x94, 0x4b, 0x8f, + 0x3d, 0x21, 0x55, 0xea, 0xa1, 0x6a, 0xc5, 0xa5, 0x97, 0x4a, 0xfd, 0x43, 0x38, 0x22, 0xf5, 0xd2, + 0x53, 0x55, 0x41, 0xff, 0x90, 0x6a, 0xec, 0x37, 0xc9, 0x4c, 0x08, 0x99, 0xa1, 0xe2, 0x36, 0xb6, + 0x9f, 0xdf, 0xf7, 0xe3, 0x67, 0xbf, 0x6f, 0x82, 0x27, 0xcb, 0xdc, 0xb1, 0x1c, 0xf1, 0xb0, 0xbc, + 0xc5, 0x2d, 0x87, 0x3d, 0xb6, 0x6c, 0xe1, 0xd5, 0x85, 0x60, 0x3b, 0x0d, 0x51, 0x6f, 0x1a, 0xb5, + 0xba, 0xf4, 0x24, 0x19, 0x0b, 0x87, 0x18, 0x41, 0x48, 0x36, 0x63, 0x4a, 0x53, 0xaa, 0x08, 0xe6, + 0x7f, 0xe9, 0xe0, 0xec, 0x84, 0x29, 0xa5, 0x69, 0x0b, 0xc6, 0x6b, 0x16, 0xe3, 0x8e, 0x23, 0x3d, + 0xee, 0x59, 0xd2, 0x71, 0x61, 0x75, 0xb6, 0x2c, 0xdd, 0xaa, 0x74, 0x59, 0x89, 0xbb, 0xa0, 0xc1, + 0x9e, 0x16, 0x4a, 0xc2, 0xe3, 0x05, 0x56, 0xe3, 0xa6, 0xe5, 0xa8, 0x60, 0x88, 0xa5, 0xbd, 0xc9, + 0x6a, 0xbc, 0xce, 0xab, 0x41, 0xbe, 0x53, 0xe8, 0xfd, 0x0f, 0x37, 0x26, 0x4d, 0xa3, 0xb4, 0x2d, + 0xe0, 0x84, 0x34, 0x83, 0xc9, 0x3d, 0x1f, 0x66, 0x53, 0xe5, 0x2e, 0x8a, 0x9d, 0x86, 0x70, 0x3d, + 0x5a, 0xc4, 0x7f, 0x46, 0x66, 0xdd, 0x9a, 0x74, 0x5c, 0x41, 0x96, 0xf0, 0xb0, 0x66, 0x18, 0x47, + 0xff, 0xa3, 0x99, 0x9f, 0x17, 0xfe, 0x35, 0x7a, 0xd6, 0xc7, 0xd0, 0xdb, 0x56, 0x86, 0x0e, 0xbe, + 0xfc, 0x97, 0x2a, 0xc2, 0x16, 0x7a, 0x1b, 0x72, 0xae, 0x39, 0xe5, 0x7a, 0xb3, 0xe6, 0x81, 0x14, + 0x19, 0xc7, 0x23, 0xbc, 0x52, 0xa9, 0x0b, 0x57, 0x27, 0x1d, 0x2d, 0x06, 0x43, 0x7f, 0xa5, 0x2a, + 0x5c, 0x97, 0x9b, 0x62, 0x7c, 0x40, 0xaf, 0xc0, 0x90, 0x5e, 0xc3, 0x99, 0x68, 0x2a, 0xe0, 0x9b, + 0xc2, 0xbf, 0x0a, 0x3d, 0x65, 0x49, 0x67, 0x95, 0x7b, 0x1c, 0x52, 0x76, 0xcd, 0x52, 0x06, 0x28, + 0xab, 0xa2, 0x1b, 0x25, 0x10, 0x44, 0x51, 0xc1, 0x59, 0x10, 0x6c, 0x6f, 0x00, 0x41, 0x82, 0x87, + 0x2a, 0x1d, 0x19, 0xf5, 0x4d, 0x37, 0xf1, 0xef, 0x2a, 0x76, 0xdd, 0xb2, 0x45, 0xfc, 0x21, 0x29, + 0xfe, 0x45, 0x3e, 0x73, 0x44, 0x7d, 0x19, 0x96, 0xf5, 0x49, 0x23, 0x73, 0x74, 0x03, 0xff, 0x11, + 0xca, 0x08, 0xd2, 0x57, 0x70, 0x5a, 0xdd, 0x35, 0x5c, 0xc5, 0xc4, 0x29, 0x57, 0xe1, 0xef, 0x09, + 0x6e, 0x42, 0x6f, 0xa0, 0xbb, 0xf8, 0x1f, 0x95, 0x6e, 0xd9, 0xb6, 0xf5, 0x6a, 0xf3, 0xae, 0xaf, + 0x16, 0xb0, 0xae, 0x63, 0xdc, 0x79, 0x90, 0x90, 0x7d, 0xca, 0xd0, 0xaf, 0xd7, 0xf0, 0x5f, 0xaf, + 0xa1, 0x3b, 0x04, 0x5e, 0xaf, 0xb1, 0xc9, 0xcd, 0xe0, 0x9c, 0xc5, 0xd0, 0x4e, 0x92, 0xc1, 0x69, + 0x75, 0x0a, 0x38, 0x92, 0x1e, 0xd0, 0x07, 0x50, 0xc9, 0x40, 0xfc, 0x9c, 0x55, 0xe9, 0x1b, 0x84, + 0xc7, 0xba, 0x04, 0x4e, 0x16, 0x6c, 0xf0, 0x4c, 0x05, 0x23, 0x37, 0x23, 0x6c, 0x03, 0x8a, 0x6d, + 0x3a, 0x96, 0x4d, 0xcb, 0x46, 0xe0, 0x8c, 0xa0, 0xd9, 0x54, 0x07, 0xc6, 0x3e, 0x8e, 0x4e, 0x1b, + 0x42, 0x7c, 0xa8, 0x0d, 0xd5, 0x4c, 0x5c, 0x1b, 0xaa, 0xa0, 0x76, 0x1b, 0xaa, 0x11, 0x7d, 0x84, + 0xff, 0x0a, 0xea, 0xa3, 0xd7, 0xcf, 0xfd, 0x0a, 0xf6, 0x11, 0xfe, 0xfb, 0x84, 0x44, 0x0f, 0xf4, + 0xc1, 0x33, 0xa2, 0x9f, 0xdb, 0x3d, 0x2c, 0xec, 0x61, 0x9c, 0x56, 0x84, 0xe4, 0x25, 0xc2, 0xc3, + 0xda, 0xad, 0x48, 0xfe, 0x14, 0x94, 0x93, 0xf6, 0x98, 0x9d, 0x4d, 0x12, 0xaa, 0x75, 0x69, 0xfe, + 0xc5, 0xa7, 0x6f, 0xaf, 0x06, 0x2e, 0x90, 0x49, 0xf6, 0x84, 0x97, 0xb7, 0xb9, 0x5d, 0xe1, 0x92, + 0xe9, 0xdd, 0xdd, 0xc6, 0x4e, 0x3e, 0x20, 0x3c, 0x02, 0x96, 0x46, 0xfa, 0x4a, 0x44, 0x2d, 0x34, + 0x3b, 0x97, 0x28, 0x16, 0x78, 0xd6, 0x14, 0xcf, 0x75, 0x72, 0x15, 0x78, 0xe6, 0x3b, 0x40, 0xf3, + 0x5d, 0x3f, 0x14, 0xe0, 0x9a, 0x6c, 0x17, 0xde, 0x63, 0x8b, 0xed, 0x82, 0x21, 0xb6, 0xc8, 0x3e, + 0xc2, 0x23, 0xe0, 0x86, 0xfd, 0x59, 0xa3, 0x1e, 0xdb, 0x9f, 0xb5, 0xcb, 0x5e, 0xe9, 0x92, 0x62, + 0xbd, 0x44, 0x16, 0xe3, 0x59, 0x2b, 0x02, 0x58, 0xdb, 0x84, 0xef, 0x11, 0x4e, 0xab, 0x66, 0x26, + 0xd3, 0xfd, 0x34, 0x43, 0x36, 0x9d, 0x9d, 0x89, 0x0f, 0x04, 0xb2, 0x5b, 0x8a, 0x6c, 0x85, 0xdc, + 0x88, 0x27, 0x53, 0x1e, 0x12, 0xae, 0x61, 0xd8, 0xdb, 0x5b, 0xe4, 0x23, 0xc2, 0xbf, 0x29, 0xcc, + 0x65, 0xdb, 0x06, 0x27, 0x26, 0x0b, 0xfd, 0x38, 0x7a, 0xdb, 0x76, 0xf6, 0x62, 0x92, 0x3d, 0x6d, + 0xfe, 0xcb, 0x8a, 0xbf, 0x40, 0x58, 0x62, 0x7e, 0x45, 0xdd, 0x22, 0xaf, 0x11, 0xfe, 0x29, 0xc0, + 0x25, 0x73, 0xc9, 0x34, 0x7f, 0x04, 0x90, 0x29, 0xc0, 0x3c, 0x99, 0x4e, 0x08, 0x48, 0xde, 0xfa, + 0x9d, 0xac, 0x7d, 0xa2, 0x7f, 0x27, 0x87, 0xbd, 0x37, 0xa6, 0x93, 0x23, 0xb6, 0x7b, 0x96, 0xd7, + 0xa8, 0x0d, 0x2b, 0x74, 0xeb, 0xe4, 0x1d, 0xc2, 0xa3, 0x3a, 0x9f, 0x5f, 0xb8, 0xf9, 0x98, 0x5a, + 0x44, 0x9d, 0x39, 0x6b, 0x24, 0x0d, 0x07, 0xd2, 0x82, 0x22, 0x9d, 0x23, 0xf9, 0xc4, 0xa4, 0x2b, + 0x1b, 0x07, 0x47, 0x39, 0x74, 0x78, 0x94, 0x43, 0x5f, 0x8f, 0x72, 0x68, 0xef, 0x38, 0x97, 0x3a, + 0x3c, 0xce, 0xa5, 0x3e, 0x1f, 0xe7, 0x52, 0xf7, 0x17, 0x4d, 0xcb, 0xdb, 0x6a, 0x94, 0x8c, 0xb2, + 0xac, 0x42, 0xba, 0x3b, 0xbc, 0xe4, 0x46, 0xd3, 0x3d, 0xef, 0x24, 0xf4, 0x9a, 0x35, 0xe1, 0x96, + 0x86, 0xd5, 0xbf, 0xcb, 0xc5, 0xef, 0x01, 0x00, 0x00, 0xff, 0xff, 0x03, 0x08, 0xb6, 0x1d, 0x64, + 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -766,6 +823,8 @@ type QueryClient interface { // Queries a Files by index. Files(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) // Queries a list of Files items. + FilesAllByOwner(ctx context.Context, in *QueryAllFilesByOwnerRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) + // Queries a list of Files items. FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) // Queries a Pubkey by index. Pubkey(ctx context.Context, in *QueryPubkeyRequest, opts ...grpc.CallOption) (*QueryPubkeyResponse, error) @@ -817,6 +876,15 @@ func (c *queryClient) Files(ctx context.Context, in *QueryFileRequest, opts ...g return out, nil } +func (c *queryClient) FilesAllByOwner(ctx context.Context, in *QueryAllFilesByOwnerRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { + out := new(QueryAllFilesResponse) + err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/FilesAllByOwner", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { out := new(QueryAllFilesResponse) err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/FilesAll", in, out, opts...) @@ -855,6 +923,8 @@ type QueryServer interface { // Queries a Files by index. Files(context.Context, *QueryFileRequest) (*QueryFileResponse, error) // Queries a list of Files items. + FilesAllByOwner(context.Context, *QueryAllFilesByOwnerRequest) (*QueryAllFilesResponse, error) + // Queries a list of Files items. FilesAll(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) // Queries a Pubkey by index. Pubkey(context.Context, *QueryPubkeyRequest) (*QueryPubkeyResponse, error) @@ -878,6 +948,9 @@ func (*UnimplementedQueryServer) Decrypt(ctx context.Context, req *QueryDecryptR func (*UnimplementedQueryServer) Files(ctx context.Context, req *QueryFileRequest) (*QueryFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Files not implemented") } +func (*UnimplementedQueryServer) FilesAllByOwner(ctx context.Context, req *QueryAllFilesByOwnerRequest) (*QueryAllFilesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FilesAllByOwner not implemented") +} func (*UnimplementedQueryServer) FilesAll(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FilesAll not implemented") } @@ -964,6 +1037,24 @@ func _Query_Files_Handler(srv interface{}, ctx context.Context, dec func(interfa return interceptor(ctx, in, info, handler) } +func _Query_FilesAllByOwner_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllFilesByOwnerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).FilesAllByOwner(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.filetree.Query/FilesAllByOwner", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).FilesAllByOwner(ctx, req.(*QueryAllFilesByOwnerRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_FilesAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllFilesRequest) if err := dec(in); err != nil { @@ -1038,6 +1129,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "Files", Handler: _Query_Files_Handler, }, + { + MethodName: "FilesAllByOwner", + Handler: _Query_FilesAllByOwner_Handler, + }, { MethodName: "FilesAll", Handler: _Query_FilesAll_Handler, @@ -1308,6 +1403,48 @@ func (m *QueryFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *QueryAllFilesByOwnerRequest) 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 *QueryAllFilesByOwnerRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllFilesByOwnerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0x12 + } + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *QueryAllFilesRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1654,6 +1791,23 @@ func (m *QueryFileResponse) Size() (n int) { return n } +func (m *QueryAllFilesByOwnerRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + func (m *QueryAllFilesRequest) Size() (n int) { if m == nil { return 0 @@ -2438,6 +2592,124 @@ func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryAllFilesByOwnerRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllFilesByOwnerRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllFilesByOwnerRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/filetree/types/query.pb.gw.go b/x/filetree/types/query.pb.gw.go index 68aef99d0..d8b0c71d3 100644 --- a/x/filetree/types/query.pb.gw.go +++ b/x/filetree/types/query.pb.gw.go @@ -257,6 +257,78 @@ func local_request_Query_Files_0(ctx context.Context, marshaler runtime.Marshale } +var ( + filter_Query_FilesAllByOwner_0 = &utilities.DoubleArray{Encoding: map[string]int{"owner": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_FilesAllByOwner_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllFilesByOwnerRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_FilesAllByOwner_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.FilesAllByOwner(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_FilesAllByOwner_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllFilesByOwnerRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_FilesAllByOwner_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.FilesAllByOwner(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Query_FilesAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -481,6 +553,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_FilesAllByOwner_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_FilesAllByOwner_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_FilesAllByOwner_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_FilesAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -671,6 +766,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_FilesAllByOwner_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_FilesAllByOwner_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_FilesAllByOwner_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_FilesAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -743,6 +858,8 @@ var ( pattern_Query_Files_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"jackal-dao", "canine-chain", "filetree", "files", "address", "ownerAddress"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_FilesAllByOwner_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "filetree", "files", "owner"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_FilesAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "filetree", "files"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_Pubkey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "filetree", "pubkeys", "address"}, "", runtime.AssumeColonVerbOpt(false))) @@ -759,6 +876,8 @@ var ( forward_Query_Files_0 = runtime.ForwardResponseMessage + forward_Query_FilesAllByOwner_0 = runtime.ForwardResponseMessage + forward_Query_FilesAll_0 = runtime.ForwardResponseMessage forward_Query_Pubkey_0 = runtime.ForwardResponseMessage From 80fb27c2cd28b41ecebd76ab2804eb8089eb29ae Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 27 Oct 2023 14:46:05 -0400 Subject: [PATCH 048/256] fixing inflation by removing hard coded token count --- x/jklmint/keeper/keeper.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/x/jklmint/keeper/keeper.go b/x/jklmint/keeper/keeper.go index a8ecbaf89..2e2b9fda1 100644 --- a/x/jklmint/keeper/keeper.go +++ b/x/jklmint/keeper/keeper.go @@ -85,7 +85,8 @@ func FloatToBigInt(val float64) *big.Int { } func (k Keeper) GetInflation(ctx sdk.Context) (sdk.Dec, error) { - denom := k.GetParams(ctx).MintDenom + params := k.GetParams(ctx) + denom := params.MintDenom coins := k.bankKeeper.GetSupply(ctx, denom) amt := coins.Amount.ToDec() @@ -96,7 +97,7 @@ func (k Keeper) GetInflation(ctx sdk.Context) (sdk.Dec, error) { var blocksPerYearEstiamte int64 = (365 * 24 * 60 * 60) / 6 - printedPerYear := blocksPerYearEstiamte * 10_000_000 + printedPerYear := blocksPerYearEstiamte * 1_000_000 * params.TokensPerBlock inflate := sdk.NewDec(printedPerYear) From 1780fd706d04ea3eae324ab3f3cc4beb6451dba8 Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 27 Oct 2023 14:23:56 -0400 Subject: [PATCH 049/256] adding users by plan to storage stats --- proto/canine_chain/storage/query.proto | 1 + x/storage/keeper/grpc_query_storage_stats.go | 6 + x/storage/types/query.pb.go | 385 +++++++++++++------ 3 files changed, 267 insertions(+), 125 deletions(-) diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index 336525598..255c424b5 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -342,4 +342,5 @@ message QueryStorageStatsResponse { (gogoproto.nullable) = false ]; uint64 activeUsers = 4; + map users_by_plan= 5; } diff --git a/x/storage/keeper/grpc_query_storage_stats.go b/x/storage/keeper/grpc_query_storage_stats.go index e1524eabb..53d01913e 100644 --- a/x/storage/keeper/grpc_query_storage_stats.go +++ b/x/storage/keeper/grpc_query_storage_stats.go @@ -22,7 +22,12 @@ func (k Keeper) StorageStats(c context.Context, req *types.QueryStorageStatsRequ var spaceUsed int64 var activeUsers uint64 + usersByPlan := make(map[int64]int64) + for _, info := range payment { + + usersByPlan[info.SpaceAvailable]++ + if info.End.Before(ctx.BlockTime()) { continue } @@ -41,5 +46,6 @@ func (k Keeper) StorageStats(c context.Context, req *types.QueryStorageStatsRequ Used: uint64(spaceUsed), UsedRatio: ratio, ActiveUsers: activeUsers, + UsersByPlan: usersByPlan, }, nil } diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index b6b8df3a8..9bfacb5b8 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -2127,6 +2127,7 @@ type QueryStorageStatsResponse struct { Used uint64 `protobuf:"varint,2,opt,name=used,proto3" json:"used,omitempty"` UsedRatio github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=usedRatio,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"usedRatio"` ActiveUsers uint64 `protobuf:"varint,4,opt,name=activeUsers,proto3" json:"activeUsers,omitempty"` + UsersByPlan map[int64]int64 `protobuf:"bytes,5,rep,name=users_by_plan,json=usersByPlan,proto3" json:"users_by_plan,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } func (m *QueryStorageStatsResponse) Reset() { *m = QueryStorageStatsResponse{} } @@ -2183,6 +2184,13 @@ func (m *QueryStorageStatsResponse) GetActiveUsers() uint64 { return 0 } +func (m *QueryStorageStatsResponse) GetUsersByPlan() map[int64]int64 { + if m != nil { + return m.UsersByPlan + } + return nil +} + func init() { proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.storage.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.storage.QueryParamsResponse") @@ -2229,136 +2237,141 @@ func init() { proto.RegisterType((*QueryActiveProvidersResponse)(nil), "canine_chain.storage.QueryActiveProvidersResponse") proto.RegisterType((*QueryStorageStatsRequest)(nil), "canine_chain.storage.QueryStorageStatsRequest") proto.RegisterType((*QueryStorageStatsResponse)(nil), "canine_chain.storage.QueryStorageStatsResponse") + proto.RegisterMapType((map[int64]int64)(nil), "canine_chain.storage.QueryStorageStatsResponse.UsersByPlanEntry") } func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 1976 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcf, 0x6f, 0x24, 0x47, - 0x15, 0xde, 0xda, 0xb1, 0xbd, 0x3b, 0x65, 0xc3, 0x86, 0xc2, 0x09, 0x66, 0x58, 0xc6, 0x76, 0x8b, - 0xd8, 0x5e, 0x13, 0x77, 0xaf, 0x67, 0xbd, 0x59, 0xe2, 0x84, 0x64, 0x6d, 0x47, 0x36, 0x1b, 0x39, - 0x5a, 0xbb, 0x8d, 0x41, 0x8a, 0x10, 0x43, 0x79, 0xa6, 0x3c, 0x6e, 0x3c, 0xd3, 0xdd, 0xe9, 0xee, - 0x31, 0x58, 0x96, 0x2f, 0x41, 0xe2, 0xc0, 0x01, 0x45, 0xca, 0x89, 0x13, 0x11, 0x59, 0x84, 0x38, - 0x20, 0xa4, 0x80, 0x10, 0x17, 0x0e, 0x20, 0x21, 0xe5, 0x46, 0x24, 0x2e, 0x88, 0xc3, 0x0a, 0xed, - 0xf2, 0x87, 0xa0, 0xaa, 0x7a, 0xd5, 0xdd, 0x33, 0xdd, 0xd3, 0xdd, 0xb3, 0x1a, 0x91, 0xd3, 0xb8, - 0xab, 0xeb, 0xbd, 0xf7, 0xbd, 0x1f, 0xf5, 0xea, 0x7d, 0xbd, 0x8b, 0xe7, 0x1a, 0xd4, 0xb6, 0x6c, - 0x56, 0x6f, 0x9c, 0x50, 0xcb, 0x36, 0xfc, 0xc0, 0xf1, 0x68, 0x8b, 0x19, 0xef, 0x76, 0x99, 0x77, - 0xae, 0xbb, 0x9e, 0x13, 0x38, 0x64, 0x3a, 0xbe, 0x43, 0x87, 0x1d, 0x95, 0xe9, 0x96, 0xd3, 0x72, - 0xc4, 0x06, 0x83, 0xff, 0x25, 0xf7, 0x56, 0x6e, 0xb6, 0x1c, 0xa7, 0xd5, 0x66, 0x06, 0x75, 0x2d, - 0x83, 0xda, 0xb6, 0x13, 0xd0, 0xc0, 0x72, 0x6c, 0x1f, 0xde, 0x2e, 0x37, 0x1c, 0xbf, 0xe3, 0xf8, - 0xc6, 0x11, 0xf5, 0xc1, 0x84, 0x71, 0xb6, 0x7a, 0xc4, 0x02, 0xba, 0x6a, 0xb8, 0xb4, 0x65, 0xd9, - 0x62, 0x33, 0xec, 0x9d, 0x4f, 0xc5, 0xe5, 0x52, 0x8f, 0x76, 0x94, 0xba, 0xc5, 0xd4, 0x2d, 0xb4, - 0x11, 0x58, 0x67, 0xac, 0xde, 0x64, 0xb4, 0xad, 0x36, 0x7e, 0x2d, 0x5d, 0x97, 0xe7, 0x9c, 0x59, - 0x4d, 0xe6, 0x65, 0xab, 0x73, 0xe9, 0x79, 0x87, 0xd9, 0x41, 0xdd, 0xb2, 0x8f, 0xc1, 0x49, 0x6d, - 0x1a, 0x93, 0x7d, 0x0e, 0x7e, 0x4f, 0x80, 0x31, 0xd9, 0xbb, 0x5d, 0xe6, 0x07, 0xda, 0x3e, 0xfe, - 0x62, 0xcf, 0xaa, 0xef, 0x3a, 0xb6, 0xcf, 0xc8, 0x3a, 0x9e, 0x90, 0xa0, 0x67, 0xd0, 0x1c, 0x5a, - 0x9a, 0xac, 0xdd, 0xd4, 0xd3, 0xc2, 0xa9, 0x4b, 0xa9, 0xcd, 0xb1, 0x4f, 0x1e, 0xcf, 0x5e, 0x31, - 0x41, 0x42, 0x7b, 0x0f, 0xe1, 0x2f, 0x48, 0x9d, 0x9e, 0xe3, 0x1c, 0x83, 0x21, 0x72, 0x0b, 0x3f, - 0xa7, 0xa0, 0xd7, 0x69, 0xb3, 0xe9, 0x31, 0x5f, 0xea, 0x2e, 0x9b, 0x37, 0xd4, 0xfa, 0x86, 0x5c, - 0x26, 0x2f, 0xe0, 0x89, 0x0e, 0xf3, 0x4e, 0xdb, 0x6c, 0xe6, 0xea, 0x1c, 0x5a, 0x9a, 0x32, 0xe1, - 0x89, 0x4c, 0xe3, 0x71, 0xe7, 0x47, 0x36, 0xf3, 0x66, 0x4a, 0x42, 0x4e, 0x3e, 0xf0, 0x55, 0x3f, - 0xa0, 0x5e, 0x30, 0x33, 0x36, 0x87, 0x96, 0x4a, 0xa6, 0x7c, 0xd0, 0xf6, 0x95, 0xb7, 0x12, 0x03, - 0xb8, 0xf5, 0x2a, 0x1e, 0x77, 0xf9, 0x02, 0x78, 0x35, 0x9b, 0xee, 0xd5, 0xb6, 0xd5, 0x66, 0x42, - 0x0e, 0x1c, 0x93, 0x32, 0xda, 0xfb, 0x08, 0x7f, 0x25, 0xd2, 0xe9, 0x6f, 0x9e, 0x03, 0xde, 0x67, - 0xf0, 0x70, 0x1b, 0xe3, 0xa8, 0x74, 0x84, 0x97, 0x93, 0xb5, 0x05, 0x5d, 0xd6, 0x99, 0xce, 0xeb, - 0x4c, 0x97, 0xa5, 0x0c, 0x75, 0xa6, 0xef, 0xd1, 0x16, 0x03, 0x33, 0x66, 0x4c, 0x52, 0x7b, 0x84, - 0xf0, 0xcd, 0x74, 0x48, 0x49, 0x87, 0x4b, 0xc3, 0x3a, 0x4c, 0x76, 0x52, 0x50, 0x2e, 0xe6, 0xa2, - 0x94, 0x96, 0x7b, 0x60, 0x7e, 0x07, 0x3f, 0x27, 0x50, 0x72, 0x3b, 0x2a, 0x5a, 0x51, 0x92, 0x51, - 0x7a, 0x92, 0xaf, 0xa6, 0x26, 0xb9, 0x14, 0x4f, 0xf2, 0x1e, 0x14, 0x9a, 0xd4, 0x1b, 0xba, 0x3c, - 0x76, 0x6c, 0x81, 0xda, 0xc9, 0xda, 0x7c, 0xba, 0xc7, 0x87, 0xb6, 0x75, 0x6c, 0xb1, 0x26, 0x17, - 0x04, 0x9f, 0x85, 0x90, 0xf6, 0x7d, 0x3c, 0x2d, 0x34, 0x6e, 0xb4, 0xdb, 0xfc, 0x5d, 0x98, 0xdb, - 0xde, 0x84, 0xa1, 0x67, 0x4e, 0xd8, 0xcf, 0x10, 0x7e, 0x5e, 0x18, 0x78, 0xe8, 0x32, 0xbb, 0xc7, - 0xc2, 0x67, 0x50, 0x3d, 0xbf, 0x54, 0x60, 0x22, 0x6f, 0x21, 0x86, 0xdf, 0xc4, 0xe3, 0x3c, 0x1c, - 0x3e, 0x94, 0x4d, 0xe1, 0x20, 0x4a, 0xa9, 0xd1, 0x15, 0xce, 0x6d, 0x48, 0xc7, 0x1e, 0x44, 0x40, - 0x05, 0x6b, 0x06, 0x5f, 0xeb, 0x8d, 0x91, 0x7a, 0xd4, 0xbe, 0x07, 0x2e, 0x45, 0x12, 0xe0, 0xd2, - 0x16, 0x2e, 0x87, 0xad, 0x33, 0xfb, 0xf8, 0x2b, 0x51, 0xd5, 0xd7, 0x22, 0x39, 0xed, 0x08, 0xcf, - 0xa8, 0x80, 0x85, 0xbb, 0x46, 0x5d, 0x22, 0xbf, 0x45, 0xf8, 0xcb, 0x29, 0x46, 0xd2, 0xdd, 0x28, - 0x3d, 0x8b, 0x1b, 0xa3, 0xcb, 0x4f, 0x17, 0x7f, 0x49, 0x42, 0x0d, 0x02, 0xe6, 0xcb, 0x5b, 0x33, - 0x76, 0xbe, 0xb9, 0x41, 0xe6, 0x41, 0x86, 0xe0, 0x69, 0x24, 0xcd, 0xdd, 0x52, 0x69, 0x88, 0x9b, - 0x85, 0x00, 0xbd, 0x8d, 0x27, 0x69, 0xb4, 0x0c, 0x79, 0x78, 0x31, 0x3d, 0x44, 0x31, 0xf9, 0x6d, - 0xc7, 0xeb, 0x40, 0xa0, 0xe2, 0xf2, 0x1a, 0x83, 0x9e, 0xbf, 0xd1, 0x6e, 0xc7, 0x76, 0x8f, 0x3c, - 0xe9, 0x7f, 0x56, 0x8d, 0x3c, 0x61, 0x07, 0xdc, 0x7a, 0x88, 0xa7, 0x62, 0xb0, 0x54, 0xea, 0x87, - 0xf2, 0xab, 0x47, 0xc1, 0xe8, 0x6a, 0xc0, 0x85, 0x9b, 0xd6, 0x64, 0xae, 0xe3, 0x05, 0xff, 0x8f, - 0xf4, 0x1f, 0xc2, 0xcc, 0xa2, 0x2c, 0x42, 0x88, 0x5e, 0xc7, 0x13, 0x9e, 0x58, 0x81, 0x3c, 0xcc, - 0xa5, 0x07, 0x47, 0x4a, 0xc5, 0xe2, 0x02, 0x52, 0x5a, 0x3d, 0xea, 0x86, 0xbd, 0xbe, 0x8c, 0x2a, - 0xc9, 0x1f, 0x21, 0xfc, 0x42, 0xbf, 0x05, 0xc0, 0x7e, 0x1f, 0x5f, 0x93, 0x28, 0x54, 0x66, 0x8b, - 0x82, 0x57, 0x62, 0xa3, 0xcb, 0xe7, 0x2a, 0x84, 0x61, 0xdb, 0x63, 0xcc, 0x77, 0x69, 0x83, 0xe5, - 0x37, 0xdd, 0x1a, 0xf8, 0x75, 0x10, 0x38, 0x1e, 0xdb, 0x72, 0xba, 0x76, 0x90, 0x2f, 0xa3, 0x83, - 0x4c, 0xcc, 0x0c, 0xc4, 0x82, 0x27, 0x9d, 0x2f, 0x80, 0x84, 0x7c, 0xd0, 0x0c, 0x68, 0x35, 0x71, - 0x1b, 0x91, 0x40, 0x83, 0x2f, 0x28, 0x01, 0xf1, 0xa0, 0xe9, 0x70, 0x77, 0x6c, 0x5b, 0x76, 0xb3, - 0xc0, 0xe0, 0xa1, 0xad, 0x2b, 0xbf, 0xc3, 0xfd, 0xa0, 0x7e, 0x1e, 0x4f, 0x85, 0x37, 0xb3, 0xe5, - 0x2a, 0x47, 0x26, 0xd5, 0xda, 0x03, 0xd7, 0xd7, 0xee, 0x41, 0x97, 0xd8, 0x6a, 0x5b, 0xcc, 0x0e, - 0xb8, 0x4b, 0x07, 0xc5, 0x22, 0xf7, 0x1a, 0x1c, 0xfb, 0x84, 0x20, 0xd8, 0xbe, 0x89, 0xcb, 0x47, - 0xe7, 0x01, 0xf3, 0x8f, 0x3d, 0x26, 0xf1, 0x96, 0xcc, 0x68, 0x41, 0x33, 0xc2, 0xe1, 0xfd, 0xfc, - 0x4d, 0x1a, 0xd0, 0x7c, 0x73, 0x07, 0xea, 0x3e, 0x55, 0x02, 0x60, 0xe6, 0x45, 0xfc, 0xf9, 0xc0, - 0xea, 0xb0, 0xba, 0xc7, 0x3a, 0xd4, 0xb2, 0x2d, 0xbb, 0x05, 0xb6, 0x3e, 0xc7, 0x57, 0x4d, 0xb5, - 0xc8, 0x03, 0x2d, 0x8c, 0x8b, 0xf2, 0x2a, 0x99, 0xf2, 0x41, 0x5b, 0xc7, 0xd5, 0x30, 0x33, 0xb4, - 0xc5, 0xf6, 0x24, 0xf5, 0x78, 0x60, 0x1f, 0x3b, 0xf9, 0x80, 0x7e, 0x82, 0xf0, 0xec, 0x40, 0x61, - 0x00, 0xf7, 0x03, 0x3c, 0x0d, 0xe5, 0x5f, 0x8f, 0xd3, 0x1a, 0x38, 0x88, 0x4b, 0xe9, 0x07, 0x25, - 0xa9, 0x0f, 0x0e, 0x0c, 0xf1, 0x13, 0x6f, 0xb4, 0x53, 0x3c, 0xaf, 0xce, 0xe5, 0x60, 0x27, 0x46, - 0xd5, 0x05, 0xfe, 0x81, 0xb0, 0x96, 0x65, 0x2d, 0xd7, 0xeb, 0xd2, 0x68, 0xbc, 0x1e, 0x5d, 0xc7, - 0x78, 0x1b, 0xaa, 0x9f, 0x9f, 0x9a, 0x43, 0xb7, 0xed, 0xd0, 0xe6, 0xd6, 0x09, 0x6b, 0x9c, 0xe6, - 0x66, 0x7f, 0x40, 0x3d, 0xad, 0xc1, 0x99, 0x48, 0xa8, 0x8b, 0x8e, 0xfb, 0x19, 0x6d, 0x5b, 0x4d, - 0xa1, 0xed, 0xba, 0x29, 0x1f, 0xb4, 0xb7, 0xa0, 0x9f, 0xec, 0x79, 0x56, 0x83, 0xf5, 0xd8, 0xaf, - 0xe0, 0xeb, 0xcd, 0xae, 0x17, 0xa5, 0xad, 0x6c, 0x86, 0xcf, 0x03, 0x10, 0xa8, 0x5e, 0x13, 0xd7, - 0x15, 0x19, 0x77, 0xf9, 0x2a, 0x1c, 0x10, 0xf9, 0xa0, 0x7d, 0x55, 0x4d, 0x09, 0x82, 0xc5, 0xf7, - 0x8f, 0x86, 0x9a, 0xa5, 0x2e, 0xf7, 0xfe, 0xd7, 0xa0, 0xf4, 0x41, 0x72, 0xa8, 0x1b, 0x74, 0xb3, - 0xf7, 0x6a, 0x48, 0x4e, 0xa8, 0x15, 0x18, 0x8d, 0xa0, 0x12, 0x0e, 0x02, 0x1a, 0x84, 0x30, 0xfe, - 0xa2, 0x26, 0xcb, 0xde, 0x97, 0x51, 0xab, 0x71, 0xbb, 0x5e, 0xe3, 0x84, 0xfa, 0x4c, 0x86, 0x76, - 0xcc, 0x8c, 0x16, 0x08, 0xc1, 0x63, 0x5d, 0xfe, 0xe2, 0xaa, 0x78, 0x21, 0xfe, 0x26, 0xbb, 0xb8, - 0xcc, 0x7f, 0x4d, 0x1e, 0x4a, 0x71, 0x6f, 0x4f, 0x6d, 0xea, 0x1c, 0xcf, 0xbf, 0x1f, 0xcf, 0x2e, - 0xb4, 0xac, 0xe0, 0xa4, 0x7b, 0xa4, 0x37, 0x9c, 0x8e, 0x01, 0x9f, 0x4f, 0xe4, 0xcf, 0x8a, 0xdf, - 0x3c, 0x35, 0x82, 0x73, 0x97, 0xf9, 0xfa, 0x9b, 0xac, 0x61, 0x46, 0x0a, 0xc8, 0x1c, 0x9e, 0x94, - 0x1f, 0x41, 0x0e, 0x7d, 0x1e, 0x86, 0x31, 0x61, 0x28, 0xbe, 0x54, 0xfb, 0x69, 0x15, 0x8f, 0x0b, - 0xfc, 0xe4, 0xe7, 0x08, 0x4f, 0xc8, 0x6f, 0x0f, 0x64, 0xc0, 0x49, 0x48, 0x7e, 0xea, 0xa8, 0xdc, - 0x2a, 0xb0, 0x53, 0xc6, 0x42, 0x33, 0xde, 0xfb, 0xe7, 0x7f, 0x3f, 0xb8, 0x7a, 0x8b, 0x2c, 0x1a, - 0x3f, 0xa4, 0x8d, 0x53, 0xda, 0x5e, 0x69, 0x52, 0xc7, 0x90, 0xd2, 0x2b, 0x69, 0x9f, 0x76, 0xc8, - 0x87, 0x08, 0x8f, 0xf1, 0x7a, 0x25, 0x0b, 0x19, 0x46, 0x62, 0xb7, 0x50, 0x65, 0x31, 0x77, 0x1f, - 0x40, 0xd9, 0x11, 0x50, 0x36, 0xc8, 0x1b, 0xb9, 0x50, 0x04, 0xf7, 0x32, 0x2e, 0xe4, 0x75, 0x76, - 0x69, 0x5c, 0x88, 0x11, 0xea, 0xd2, 0xb8, 0x10, 0x43, 0xd3, 0x25, 0xf9, 0x00, 0xe1, 0xeb, 0x82, - 0xe5, 0x6d, 0xb4, 0xdb, 0x64, 0x39, 0xc3, 0x7c, 0x1f, 0xf7, 0xad, 0x7c, 0xbd, 0xd0, 0x5e, 0x80, - 0xab, 0x0b, 0xb8, 0x4b, 0x64, 0xa1, 0x18, 0x5c, 0xf2, 0x3b, 0x84, 0xcb, 0x21, 0x17, 0x26, 0x59, - 0xa6, 0xfa, 0x19, 0xf3, 0x70, 0xb8, 0xb6, 0x05, 0xae, 0xfb, 0xe4, 0xf5, 0x5c, 0x5c, 0x8e, 0xcb, - 0xec, 0x3a, 0xc4, 0xb2, 0x9f, 0x91, 0x5f, 0x92, 0x3f, 0x21, 0x3c, 0x2e, 0x3e, 0x95, 0x90, 0xac, - 0x0c, 0xc6, 0xbf, 0x7c, 0x55, 0x96, 0xf2, 0x37, 0x02, 0xc8, 0x77, 0x04, 0xc8, 0x6f, 0x13, 0x33, - 0xbf, 0xec, 0xb8, 0x5c, 0x0a, 0xbe, 0xc1, 0xe9, 0xff, 0x15, 0xc2, 0xe5, 0xb0, 0x6f, 0x64, 0xe6, - 0xbf, 0x8f, 0x6c, 0x67, 0xc6, 0xb9, 0x9f, 0x66, 0x6b, 0xaf, 0x09, 0x17, 0x5e, 0x26, 0x6b, 0x45, - 0x5c, 0x90, 0x60, 0x8c, 0x8b, 0x30, 0xba, 0x1f, 0x21, 0x3c, 0x15, 0x82, 0xe4, 0x75, 0xaa, 0x67, - 0xe7, 0xb8, 0xbf, 0xd3, 0x56, 0x8c, 0xc2, 0xfb, 0x01, 0x6f, 0x4d, 0xe0, 0x7d, 0x89, 0x2c, 0x17, - 0xc7, 0x4b, 0xfe, 0x8e, 0xf0, 0x64, 0x8c, 0x62, 0x91, 0x95, 0x2c, 0xa3, 0x09, 0x66, 0x5c, 0xd1, - 0x8b, 0x6e, 0x07, 0x88, 0xdf, 0x15, 0x10, 0xf7, 0xc9, 0xc3, 0x5c, 0x88, 0x71, 0x82, 0x27, 0x8b, - 0x43, 0x54, 0xc0, 0xa0, 0x92, 0xf8, 0x3d, 0xc2, 0x37, 0xe2, 0x64, 0x93, 0x07, 0x7c, 0x35, 0x3b, - 0x80, 0x29, 0x1c, 0xb8, 0x52, 0x1b, 0x46, 0x04, 0x7c, 0xba, 0x2b, 0x7c, 0x32, 0xc8, 0xca, 0x50, - 0x3e, 0x91, 0x8f, 0x11, 0xbe, 0x66, 0x02, 0xe1, 0xc9, 0x3a, 0x56, 0x3d, 0xfc, 0x2d, 0xb3, 0xf1, - 0xf7, 0xf2, 0x30, 0xcd, 0x14, 0xb8, 0x76, 0xc9, 0x5b, 0xb9, 0xb8, 0x80, 0x77, 0x15, 0x08, 0xf3, - 0x2f, 0x10, 0xc6, 0x00, 0x9a, 0x47, 0x38, 0xa7, 0x6d, 0xf5, 0x42, 0x7f, 0xa9, 0xd8, 0x66, 0x40, - 0x7f, 0x5b, 0xa0, 0x5f, 0x26, 0x4b, 0x45, 0xd1, 0x93, 0x47, 0x08, 0x97, 0x43, 0x06, 0x96, 0x09, - 0xad, 0x9f, 0x0e, 0x66, 0x42, 0x4b, 0x90, 0xba, 0x21, 0xfa, 0xc2, 0xb1, 0x92, 0x8d, 0xf5, 0x85, - 0x5f, 0x23, 0x8c, 0x23, 0xe2, 0x47, 0xb2, 0x4c, 0x27, 0x38, 0x68, 0x65, 0xa5, 0xe0, 0x6e, 0x40, - 0xba, 0x2e, 0x90, 0xae, 0x91, 0x5a, 0x2e, 0x52, 0xfe, 0x6b, 0xd9, 0xad, 0x18, 0xce, 0x0f, 0xc5, - 0x1d, 0x2b, 0xf9, 0x63, 0x66, 0x8f, 0xed, 0x23, 0xa5, 0x99, 0x3d, 0xb6, 0x9f, 0x90, 0x6a, 0xaf, - 0x0a, 0x84, 0x77, 0xc9, 0x9d, 0x02, 0x77, 0xac, 0xdd, 0x14, 0x77, 0x59, 0x58, 0x9d, 0xbc, 0x79, - 0x91, 0x1d, 0x16, 0xf4, 0x11, 0xce, 0xcc, 0x73, 0x9f, 0xce, 0x6a, 0x33, 0xcf, 0xfd, 0x00, 0x3e, - 0xab, 0x7d, 0x4b, 0x40, 0xdf, 0x24, 0xf7, 0x73, 0xa1, 0xb7, 0x58, 0x50, 0x6f, 0x08, 0x2d, 0x75, - 0x5e, 0x11, 0xf5, 0xfe, 0x92, 0x78, 0x84, 0x30, 0xde, 0x61, 0x01, 0x30, 0x59, 0x92, 0x3d, 0xdc, - 0xc5, 0xe9, 0x71, 0x65, 0xb9, 0xc8, 0x56, 0xc0, 0xfb, 0x86, 0xc0, 0xfb, 0x0a, 0xb9, 0x57, 0x08, - 0xaf, 0x4b, 0xcf, 0xeb, 0x4d, 0x1a, 0xd0, 0x18, 0xcc, 0xbf, 0x21, 0x4c, 0x92, 0xac, 0x8c, 0xac, - 0xe5, 0xd4, 0x64, 0x2a, 0x05, 0xad, 0xdc, 0x1d, 0x52, 0x6a, 0x68, 0x27, 0xe2, 0x4c, 0x33, 0xe6, - 0xc4, 0x5f, 0x11, 0x7e, 0x3e, 0xa9, 0x9f, 0x37, 0xb3, 0x7b, 0xd9, 0xfd, 0x69, 0xb0, 0x2b, 0xdf, - 0x18, 0x5e, 0x70, 0xe8, 0xab, 0x23, 0xee, 0x0d, 0xf9, 0x23, 0xc2, 0x37, 0xfa, 0x18, 0x65, 0x66, - 0xd1, 0xa7, 0x93, 0xd9, 0xcc, 0xa2, 0x1f, 0x40, 0x58, 0x87, 0xe8, 0x28, 0xfc, 0xa8, 0xd6, 0xbb, - 0x42, 0x45, 0xbd, 0x21, 0x20, 0x7e, 0x8c, 0x30, 0x8e, 0x68, 0x68, 0x66, 0xe7, 0x4b, 0x30, 0xdf, - 0xcc, 0xce, 0x97, 0xe4, 0xb6, 0x43, 0x50, 0x0d, 0xc1, 0x7a, 0x25, 0x42, 0xe3, 0x42, 0x91, 0xe9, - 0x4b, 0xe3, 0x42, 0xd0, 0xe7, 0x4b, 0xf2, 0x07, 0x3e, 0x58, 0xf4, 0x32, 0xd5, 0xec, 0xc1, 0x22, - 0x95, 0x36, 0x67, 0x0f, 0x16, 0xe9, 0x54, 0x5a, 0x7b, 0x45, 0xf8, 0x70, 0x87, 0xac, 0xe6, 0x0f, - 0x16, 0xf2, 0x5f, 0xdc, 0xa3, 0xb1, 0xee, 0x37, 0x08, 0x4f, 0xc5, 0x99, 0x71, 0xe6, 0xf0, 0x99, - 0xc2, 0xaf, 0x33, 0x87, 0xcf, 0x34, 0xca, 0xad, 0xbd, 0x2c, 0xc0, 0xde, 0x26, 0x7a, 0xa1, 0xab, - 0x86, 0xb6, 0x58, 0x9d, 0x4f, 0x42, 0xfe, 0xe6, 0xee, 0x27, 0x4f, 0xaa, 0xe8, 0xd3, 0x27, 0x55, - 0xf4, 0x9f, 0x27, 0x55, 0xf4, 0xfe, 0xd3, 0xea, 0x95, 0x4f, 0x9f, 0x56, 0xaf, 0xfc, 0xeb, 0x69, - 0xf5, 0xca, 0x3b, 0xb5, 0x18, 0xef, 0x96, 0x3a, 0x77, 0xe9, 0x91, 0xdf, 0xab, 0xf3, 0xc7, 0xa1, - 0x56, 0xc1, 0xc3, 0x8f, 0x26, 0xc4, 0xff, 0x0f, 0xb8, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x5c, 0xbe, 0x62, 0x88, 0x54, 0x21, 0x00, 0x00, + // 2045 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcd, 0x6f, 0x1c, 0x49, + 0x15, 0x4f, 0x79, 0x6c, 0x27, 0x7e, 0xf6, 0x92, 0x50, 0x78, 0x17, 0x33, 0x04, 0xc7, 0x69, 0xb1, + 0x89, 0x63, 0xe2, 0xee, 0x78, 0x92, 0x6c, 0x76, 0xbd, 0x4b, 0x36, 0x76, 0x16, 0x87, 0xac, 0xb2, + 0x8a, 0xd3, 0x21, 0x20, 0xad, 0x10, 0x4d, 0x79, 0xa6, 0x3c, 0x69, 0x3c, 0xd3, 0xdd, 0xdb, 0xdd, + 0x13, 0x18, 0x59, 0xbe, 0x2c, 0x12, 0x07, 0x0e, 0x68, 0xa5, 0x3d, 0x71, 0x62, 0xc5, 0x06, 0x21, + 0x0e, 0x08, 0x69, 0x41, 0x88, 0x2b, 0x48, 0x48, 0x7b, 0x63, 0x25, 0x2e, 0x88, 0x43, 0x84, 0x12, + 0xfe, 0x10, 0x54, 0x55, 0xaf, 0xbf, 0x66, 0x7a, 0xba, 0x7b, 0xa2, 0x11, 0x7b, 0xf2, 0x54, 0x75, + 0xbd, 0xf7, 0x7e, 0xef, 0xa3, 0x5e, 0xd5, 0xaf, 0x64, 0x58, 0x69, 0x32, 0xc7, 0x76, 0xb8, 0xd5, + 0x7c, 0xc8, 0x6c, 0xc7, 0x08, 0x42, 0xd7, 0x67, 0x6d, 0x6e, 0xbc, 0xd7, 0xe3, 0x7e, 0x5f, 0xf7, + 0x7c, 0x37, 0x74, 0xe9, 0x62, 0x7a, 0x85, 0x8e, 0x2b, 0xea, 0x8b, 0x6d, 0xb7, 0xed, 0xca, 0x05, + 0x86, 0xf8, 0xa5, 0xd6, 0xd6, 0x4f, 0xb7, 0x5d, 0xb7, 0xdd, 0xe1, 0x06, 0xf3, 0x6c, 0x83, 0x39, + 0x8e, 0x1b, 0xb2, 0xd0, 0x76, 0x9d, 0x00, 0xbf, 0xae, 0x35, 0xdd, 0xa0, 0xeb, 0x06, 0xc6, 0x1e, + 0x0b, 0xd0, 0x84, 0xf1, 0x68, 0x63, 0x8f, 0x87, 0x6c, 0xc3, 0xf0, 0x58, 0xdb, 0x76, 0xe4, 0x62, + 0x5c, 0x7b, 0x36, 0x17, 0x97, 0xc7, 0x7c, 0xd6, 0x8d, 0xd4, 0x9d, 0xcf, 0x5d, 0xc2, 0x9a, 0xa1, + 0xfd, 0x88, 0x5b, 0x2d, 0xce, 0x3a, 0xd1, 0xc2, 0xaf, 0xe7, 0xeb, 0xf2, 0xdd, 0x47, 0x76, 0x8b, + 0xfb, 0xc5, 0xea, 0x3c, 0xd6, 0xef, 0x72, 0x27, 0xb4, 0x6c, 0x67, 0x1f, 0x9d, 0xd4, 0x16, 0x81, + 0xde, 0x13, 0xe0, 0x77, 0x25, 0x18, 0x93, 0xbf, 0xd7, 0xe3, 0x41, 0xa8, 0xdd, 0x83, 0x2f, 0x65, + 0x66, 0x03, 0xcf, 0x75, 0x02, 0x4e, 0x37, 0x61, 0x56, 0x81, 0x5e, 0x22, 0x2b, 0x64, 0x75, 0xbe, + 0x71, 0x5a, 0xcf, 0x0b, 0xa7, 0xae, 0xa4, 0xb6, 0xa7, 0x3f, 0x7d, 0x72, 0xe6, 0x98, 0x89, 0x12, + 0xda, 0xfb, 0x04, 0xbe, 0xa8, 0x74, 0xfa, 0xae, 0xbb, 0x8f, 0x86, 0xe8, 0x05, 0x38, 0x15, 0x41, + 0xb7, 0x58, 0xab, 0xe5, 0xf3, 0x40, 0xe9, 0x9e, 0x33, 0x4f, 0x46, 0xf3, 0x5b, 0x6a, 0x9a, 0xbe, + 0x04, 0xb3, 0x5d, 0xee, 0x1f, 0x74, 0xf8, 0xd2, 0xd4, 0x0a, 0x59, 0x5d, 0x30, 0x71, 0x44, 0x17, + 0x61, 0xc6, 0xfd, 0xb1, 0xc3, 0xfd, 0xa5, 0x9a, 0x94, 0x53, 0x03, 0x31, 0x1b, 0x84, 0xcc, 0x0f, + 0x97, 0xa6, 0x57, 0xc8, 0x6a, 0xcd, 0x54, 0x03, 0xed, 0x5e, 0xe4, 0xad, 0xc2, 0x80, 0x6e, 0xbd, + 0x0e, 0x33, 0x9e, 0x98, 0x40, 0xaf, 0xce, 0xe4, 0x7b, 0xb5, 0x63, 0x77, 0xb8, 0x94, 0x43, 0xc7, + 0x94, 0x8c, 0xf6, 0x01, 0x81, 0xaf, 0x26, 0x3a, 0x83, 0xed, 0x3e, 0xe2, 0x7d, 0x0e, 0x0f, 0x77, + 0x00, 0x92, 0xd2, 0x91, 0x5e, 0xce, 0x37, 0xce, 0xe9, 0xaa, 0xce, 0x74, 0x51, 0x67, 0xba, 0x2a, + 0x65, 0xac, 0x33, 0x7d, 0x97, 0xb5, 0x39, 0x9a, 0x31, 0x53, 0x92, 0xda, 0x63, 0x02, 0xa7, 0xf3, + 0x21, 0x0d, 0x3b, 0x5c, 0x1b, 0xd7, 0x61, 0x7a, 0x2b, 0x07, 0xe5, 0xf9, 0x52, 0x94, 0xca, 0x72, + 0x06, 0xe6, 0x77, 0xe1, 0x94, 0x44, 0x29, 0xec, 0x44, 0xd1, 0x4a, 0x92, 0x4c, 0xf2, 0x93, 0x3c, + 0x95, 0x9b, 0xe4, 0x5a, 0x3a, 0xc9, 0xbb, 0x58, 0x68, 0x4a, 0x6f, 0xec, 0xf2, 0xf4, 0xbe, 0x8d, + 0x6a, 0xe7, 0x1b, 0x67, 0xf3, 0x3d, 0x7e, 0xe0, 0xd8, 0xfb, 0x36, 0x6f, 0x09, 0x41, 0xf4, 0x59, + 0x0a, 0x69, 0x3f, 0x80, 0x45, 0xa9, 0x71, 0xab, 0xd3, 0x11, 0xdf, 0xe2, 0xdc, 0x66, 0x13, 0x46, + 0x9e, 0x3b, 0x61, 0x3f, 0x27, 0xf0, 0xa2, 0x34, 0x70, 0xd7, 0xe3, 0x4e, 0xc6, 0xc2, 0xe7, 0x50, + 0x3d, 0xbf, 0x8a, 0xc0, 0x24, 0xde, 0x62, 0x0c, 0xbf, 0x09, 0x33, 0x22, 0x1c, 0x01, 0x96, 0x4d, + 0xe5, 0x20, 0x2a, 0xa9, 0xc9, 0x15, 0xce, 0x25, 0x4c, 0xc7, 0x2e, 0x46, 0x20, 0x0a, 0xd6, 0x12, + 0x1c, 0xcf, 0xc6, 0x28, 0x1a, 0x6a, 0xdf, 0x47, 0x97, 0x12, 0x09, 0x74, 0xe9, 0x26, 0xcc, 0xc5, + 0xad, 0xb3, 0x78, 0xfb, 0x47, 0xa2, 0x51, 0x5f, 0x4b, 0xe4, 0xb4, 0x3d, 0x58, 0x8a, 0x02, 0x16, + 0xaf, 0x9a, 0x74, 0x89, 0xfc, 0x8e, 0xc0, 0x57, 0x72, 0x8c, 0xe4, 0xbb, 0x51, 0x7b, 0x1e, 0x37, + 0x26, 0x97, 0x9f, 0x1e, 0x7c, 0x59, 0x41, 0x0d, 0x43, 0x1e, 0xa8, 0x53, 0x33, 0xb5, 0xbf, 0x85, + 0x41, 0xee, 0x63, 0x86, 0x70, 0x34, 0x91, 0xe6, 0x6e, 0x47, 0x69, 0x48, 0x9b, 0xc5, 0x00, 0xbd, + 0x03, 0xf3, 0x2c, 0x99, 0xc6, 0x3c, 0xbc, 0x9c, 0x1f, 0xa2, 0x94, 0xfc, 0x8e, 0xeb, 0x77, 0x31, + 0x50, 0x69, 0x79, 0x8d, 0x63, 0xcf, 0xdf, 0xea, 0x74, 0x52, 0xab, 0x27, 0x9e, 0xf4, 0xbf, 0x44, + 0x8d, 0x7c, 0xc8, 0x0e, 0xba, 0x75, 0x17, 0x16, 0x52, 0xb0, 0xa2, 0xd4, 0x8f, 0xe5, 0x57, 0x46, + 0xc1, 0xe4, 0x6a, 0xc0, 0xc3, 0x93, 0xd6, 0xe4, 0x9e, 0xeb, 0x87, 0xff, 0x8f, 0xf4, 0x3f, 0xc0, + 0x3b, 0x4b, 0x64, 0x11, 0x43, 0x74, 0x1d, 0x66, 0x7d, 0x39, 0x83, 0x79, 0x58, 0xc9, 0x0f, 0x8e, + 0x92, 0x4a, 0xc5, 0x05, 0xa5, 0x34, 0x2b, 0xe9, 0x86, 0x59, 0x5f, 0x26, 0x95, 0xe4, 0x8f, 0x09, + 0xbc, 0x34, 0x68, 0x01, 0xb1, 0xdf, 0x80, 0xe3, 0x0a, 0x45, 0x94, 0xd9, 0xaa, 0xe0, 0x23, 0xb1, + 0xc9, 0xe5, 0x73, 0x03, 0xc3, 0xb0, 0xe3, 0x73, 0x1e, 0x78, 0xac, 0xc9, 0xcb, 0x9b, 0x6e, 0x03, + 0xfd, 0xba, 0x1f, 0xba, 0x3e, 0xbf, 0xe9, 0xf6, 0x9c, 0xb0, 0x5c, 0x46, 0x47, 0x99, 0x94, 0x19, + 0x8c, 0x85, 0x48, 0xba, 0x98, 0x40, 0x09, 0x35, 0xd0, 0x0c, 0x6c, 0x35, 0x69, 0x1b, 0x89, 0x40, + 0x53, 0x4c, 0x44, 0x02, 0x72, 0xa0, 0xe9, 0x78, 0x76, 0xec, 0xd8, 0x4e, 0xab, 0xc2, 0xc5, 0x43, + 0xdb, 0x8c, 0xfc, 0x8e, 0xd7, 0xa3, 0xfa, 0xb3, 0xb0, 0x10, 0x9f, 0xcc, 0xb6, 0x17, 0x39, 0x32, + 0x1f, 0xcd, 0xdd, 0xf6, 0x02, 0xed, 0x1a, 0x76, 0x89, 0x9b, 0x1d, 0x9b, 0x3b, 0xa1, 0x70, 0xe9, + 0x7e, 0xb5, 0xc8, 0xbd, 0x81, 0xdb, 0x7e, 0x48, 0x10, 0x6d, 0x9f, 0x86, 0xb9, 0xbd, 0x7e, 0xc8, + 0x83, 0x7d, 0x9f, 0x2b, 0xbc, 0x35, 0x33, 0x99, 0xd0, 0x8c, 0xf8, 0xf2, 0xde, 0x7f, 0x8b, 0x85, + 0xac, 0xdc, 0xdc, 0xfd, 0xe8, 0x3c, 0x8d, 0x04, 0xd0, 0xcc, 0xcb, 0xf0, 0x85, 0xd0, 0xee, 0x72, + 0xcb, 0xe7, 0x5d, 0x66, 0x3b, 0xb6, 0xd3, 0x46, 0x5b, 0x2f, 0x88, 0x59, 0x33, 0x9a, 0x14, 0x81, + 0x96, 0xc6, 0x65, 0x79, 0xd5, 0x4c, 0x35, 0xd0, 0x36, 0x61, 0x39, 0xce, 0x0c, 0x6b, 0xf3, 0x5d, + 0x45, 0x3d, 0x6e, 0x3b, 0xfb, 0x6e, 0x39, 0xa0, 0x9f, 0x12, 0x38, 0x33, 0x52, 0x18, 0xc1, 0xfd, + 0x10, 0x16, 0xb1, 0xfc, 0xad, 0x34, 0xad, 0xc1, 0x8d, 0xb8, 0x9a, 0xbf, 0x51, 0x86, 0xf5, 0xe1, + 0x86, 0xa1, 0xc1, 0xd0, 0x17, 0xed, 0x00, 0xce, 0x46, 0xfb, 0x72, 0xb4, 0x13, 0x93, 0xea, 0x02, + 0xff, 0x20, 0xa0, 0x15, 0x59, 0x2b, 0xf5, 0xba, 0x36, 0x19, 0xaf, 0x27, 0xd7, 0x31, 0xde, 0xc1, + 0xea, 0x17, 0xbb, 0xe6, 0x81, 0xd7, 0x71, 0x59, 0xeb, 0xe6, 0x43, 0xde, 0x3c, 0x28, 0xcd, 0xfe, + 0x88, 0x7a, 0xba, 0x82, 0x7b, 0x62, 0x48, 0x5d, 0xb2, 0xdd, 0x1f, 0xb1, 0x8e, 0xdd, 0x92, 0xda, + 0x4e, 0x98, 0x6a, 0xa0, 0xbd, 0x8d, 0xfd, 0x64, 0xd7, 0xb7, 0x9b, 0x3c, 0x63, 0xbf, 0x0e, 0x27, + 0x5a, 0x3d, 0x3f, 0x49, 0xdb, 0x9c, 0x19, 0x8f, 0x47, 0x20, 0x88, 0x7a, 0x4d, 0x5a, 0x57, 0x62, + 0xdc, 0x13, 0xb3, 0xb8, 0x41, 0xd4, 0x40, 0xfb, 0x5a, 0x74, 0x4b, 0x90, 0x2c, 0x7e, 0xf0, 0x6a, + 0xa8, 0xd9, 0xd1, 0xe1, 0x3e, 0xf8, 0x19, 0x95, 0xde, 0x1e, 0xbe, 0xd4, 0x8d, 0x3a, 0xd9, 0xb3, + 0x1a, 0x86, 0x6f, 0xa8, 0x75, 0xbc, 0x1a, 0x61, 0x25, 0xdc, 0x0f, 0x59, 0x18, 0xc3, 0x78, 0x36, + 0x85, 0x37, 0xcb, 0xec, 0xc7, 0xa4, 0xd5, 0x78, 0x3d, 0xbf, 0xf9, 0x90, 0x05, 0x5c, 0x85, 0x76, + 0xda, 0x4c, 0x26, 0x28, 0x85, 0xe9, 0x9e, 0xf8, 0x30, 0x25, 0x3f, 0xc8, 0xdf, 0xf4, 0x0e, 0xcc, + 0x89, 0xbf, 0xa6, 0x08, 0xa5, 0x3c, 0xb7, 0x17, 0xb6, 0x75, 0x81, 0xe7, 0xdf, 0x4f, 0xce, 0x9c, + 0x6b, 0xdb, 0xe1, 0xc3, 0xde, 0x9e, 0xde, 0x74, 0xbb, 0x06, 0x3e, 0x9f, 0xa8, 0x3f, 0xeb, 0x41, + 0xeb, 0xc0, 0x08, 0xfb, 0x1e, 0x0f, 0xf4, 0xb7, 0x78, 0xd3, 0x4c, 0x14, 0xd0, 0x15, 0x98, 0x57, + 0x8f, 0x20, 0x0f, 0x02, 0x11, 0x86, 0x69, 0x69, 0x28, 0x3d, 0x45, 0x5b, 0xf0, 0x42, 0x4f, 0xfc, + 0xb0, 0xf6, 0xfa, 0x96, 0xd7, 0x61, 0xce, 0xd2, 0x8c, 0x0c, 0xd5, 0x8d, 0xfc, 0x50, 0x8d, 0xf4, + 0x54, 0x97, 0xda, 0xb6, 0xfb, 0xbb, 0x1d, 0xe6, 0x7c, 0xcb, 0x09, 0xfd, 0xbe, 0x39, 0xdf, 0x4b, + 0x66, 0xea, 0xd7, 0xe1, 0xd4, 0xe0, 0x02, 0x7a, 0x0a, 0x6a, 0x07, 0xbc, 0x8f, 0x39, 0x17, 0x3f, + 0xb1, 0x08, 0x7b, 0x3c, 0x2a, 0x1c, 0x39, 0xd8, 0x9c, 0x7a, 0x95, 0x34, 0x7e, 0xb6, 0x0c, 0x33, + 0xd2, 0x36, 0xfd, 0x05, 0x81, 0x59, 0xf5, 0x42, 0x42, 0x57, 0x0b, 0x30, 0x66, 0x1e, 0x64, 0xea, + 0x17, 0x2a, 0xac, 0x54, 0x7e, 0x68, 0xc6, 0xfb, 0xff, 0xfc, 0xef, 0x87, 0x53, 0x17, 0xe8, 0x79, + 0xe3, 0x47, 0xac, 0x79, 0xc0, 0x3a, 0xeb, 0x2d, 0xe6, 0x1a, 0x4a, 0x7a, 0x3d, 0xef, 0x01, 0x8a, + 0x7e, 0x44, 0x60, 0x5a, 0xec, 0x2a, 0x7a, 0xae, 0xc0, 0x48, 0xea, 0xac, 0xac, 0x9f, 0x2f, 0x5d, + 0x87, 0x50, 0x6e, 0x49, 0x28, 0x5b, 0xf4, 0xcd, 0x52, 0x28, 0x92, 0x21, 0x1a, 0x87, 0xea, 0xd0, + 0x3d, 0x32, 0x0e, 0xe5, 0x45, 0xef, 0xc8, 0x38, 0x94, 0x57, 0xbb, 0x23, 0xfa, 0x21, 0x81, 0x13, + 0x92, 0x8b, 0x6e, 0x75, 0x3a, 0x74, 0xad, 0xc0, 0xfc, 0x00, 0x43, 0xaf, 0x7f, 0xa3, 0xd2, 0x5a, + 0x84, 0xab, 0x4b, 0xb8, 0xab, 0xf4, 0x5c, 0x35, 0xb8, 0xf4, 0xf7, 0x04, 0xe6, 0x62, 0xc6, 0x4e, + 0x8b, 0x4c, 0x0d, 0xf2, 0xfa, 0xf1, 0x70, 0xed, 0x48, 0x5c, 0x37, 0xe8, 0xf5, 0x52, 0x5c, 0xae, + 0xc7, 0x1d, 0x0b, 0x63, 0x39, 0xf8, 0x6e, 0x70, 0x44, 0xff, 0x4c, 0x60, 0x46, 0x3e, 0xe8, 0xd0, + 0xa2, 0x0c, 0xa6, 0xdf, 0xe7, 0xea, 0xab, 0xe5, 0x0b, 0x11, 0xe4, 0xbb, 0x12, 0xe4, 0x77, 0xa8, + 0x59, 0x5e, 0x76, 0x42, 0x2e, 0x07, 0xdf, 0xe8, 0xf4, 0xff, 0x9a, 0xc0, 0x5c, 0xdc, 0xdd, 0x0a, + 0xf3, 0x3f, 0xf0, 0x24, 0x50, 0x18, 0xe7, 0xc1, 0xc7, 0x00, 0xed, 0x0d, 0xe9, 0xc2, 0x2b, 0xf4, + 0x4a, 0x15, 0x17, 0x14, 0x18, 0xe3, 0x30, 0x8e, 0xee, 0xc7, 0x04, 0x16, 0x62, 0x90, 0xa2, 0x4e, + 0xf5, 0xe2, 0x1c, 0x0f, 0x9e, 0x07, 0x75, 0xa3, 0xf2, 0x7a, 0xc4, 0xdb, 0x90, 0x78, 0x2f, 0xd2, + 0xb5, 0xea, 0x78, 0xe9, 0xdf, 0x09, 0xcc, 0xa7, 0x88, 0x20, 0x5d, 0x2f, 0x32, 0x3a, 0xc4, 0xdf, + 0xeb, 0x7a, 0xd5, 0xe5, 0x08, 0xf1, 0x7b, 0x12, 0xe2, 0x3d, 0x7a, 0xb7, 0x14, 0x62, 0x9a, 0x86, + 0xaa, 0xe2, 0x90, 0x15, 0x30, 0xaa, 0x24, 0xfe, 0x40, 0xe0, 0x64, 0x9a, 0x12, 0x8b, 0x80, 0x6f, + 0x14, 0x07, 0x30, 0x87, 0xa9, 0xd7, 0x1b, 0xe3, 0x88, 0xa0, 0x4f, 0x57, 0xa5, 0x4f, 0x06, 0x5d, + 0x1f, 0xcb, 0x27, 0xfa, 0x09, 0x81, 0xe3, 0x26, 0xd2, 0xb2, 0xa2, 0x6d, 0x95, 0x61, 0x99, 0x85, + 0x8d, 0x3f, 0xcb, 0x16, 0x35, 0x53, 0xe2, 0xba, 0x43, 0xdf, 0x2e, 0xc5, 0x85, 0xec, 0xb0, 0x42, + 0x98, 0x7f, 0x49, 0x00, 0x10, 0xb4, 0x88, 0x70, 0x49, 0xdb, 0xca, 0x42, 0xbf, 0x58, 0x6d, 0x31, + 0xa2, 0xbf, 0x24, 0xd1, 0xaf, 0xd1, 0xd5, 0xaa, 0xe8, 0xe9, 0x63, 0x02, 0x73, 0x31, 0x4f, 0x2c, + 0x84, 0x36, 0x48, 0x5a, 0x0b, 0xa1, 0x0d, 0x51, 0xcf, 0x31, 0xfa, 0xc2, 0x7e, 0x24, 0x9b, 0xea, + 0x0b, 0xbf, 0x21, 0x00, 0x09, 0x3d, 0xa5, 0x17, 0x4b, 0xee, 0x25, 0x19, 0xa6, 0x5c, 0x5f, 0xaf, + 0xb8, 0x1a, 0x91, 0x6e, 0x4a, 0xa4, 0x57, 0x68, 0xa3, 0x14, 0xa9, 0xf8, 0x6b, 0x3b, 0xed, 0x14, + 0xce, 0x8f, 0xe4, 0x19, 0xab, 0x58, 0x6e, 0x61, 0x8f, 0x1d, 0xa0, 0xce, 0x85, 0x3d, 0x76, 0x90, + 0x36, 0x6b, 0xaf, 0x4b, 0x84, 0x57, 0xe9, 0xe5, 0x0a, 0x67, 0xac, 0xd3, 0x92, 0x67, 0x59, 0x5c, + 0x9d, 0xa2, 0x79, 0xd1, 0x5b, 0x3c, 0x1c, 0xa0, 0xc5, 0x85, 0xfb, 0x3e, 0x9f, 0x7b, 0x17, 0xee, + 0xfb, 0x11, 0xac, 0x5b, 0xfb, 0xb6, 0x84, 0xbe, 0x4d, 0x6f, 0x94, 0x42, 0x6f, 0xf3, 0xd0, 0x6a, + 0x4a, 0x2d, 0x96, 0xa8, 0x08, 0x6b, 0xb0, 0x24, 0x1e, 0x13, 0x80, 0x5b, 0x3c, 0x44, 0xbe, 0x4d, + 0x8b, 0x2f, 0x77, 0x69, 0x12, 0x5f, 0x5f, 0xab, 0xb2, 0x14, 0xf1, 0xbe, 0x29, 0xf1, 0xbe, 0x46, + 0xaf, 0x55, 0xc2, 0xeb, 0xb1, 0xbe, 0xd5, 0x62, 0x21, 0x4b, 0xc1, 0xfc, 0x1b, 0x01, 0x3a, 0xcc, + 0x1d, 0xe9, 0x95, 0xf2, 0x9b, 0xf5, 0x30, 0x51, 0xae, 0x5f, 0x1d, 0x53, 0x6a, 0x6c, 0x27, 0xd2, + 0x7c, 0x38, 0xe5, 0xc4, 0x5f, 0x09, 0xbc, 0x38, 0xac, 0x5f, 0x34, 0xb3, 0x6b, 0xc5, 0xfd, 0x69, + 0xb4, 0x2b, 0xaf, 0x8e, 0x2f, 0x38, 0xf6, 0xd1, 0x91, 0xf6, 0x86, 0xfe, 0x89, 0xc0, 0xc9, 0x01, + 0xde, 0x5b, 0x58, 0xf4, 0xf9, 0x94, 0xbb, 0xb0, 0xe8, 0x47, 0xd0, 0xea, 0x31, 0x3a, 0x8a, 0xd8, + 0xaa, 0x56, 0x4f, 0xaa, 0xb0, 0x9a, 0x12, 0xe2, 0x27, 0x04, 0x20, 0x21, 0xcb, 0x85, 0x9d, 0x6f, + 0x88, 0x9f, 0x17, 0x76, 0xbe, 0x61, 0x06, 0x3e, 0x06, 0xd5, 0x90, 0xdc, 0x5c, 0x21, 0x34, 0x0e, + 0x23, 0xca, 0x7f, 0x64, 0x1c, 0x4a, 0x92, 0x7f, 0x44, 0xff, 0x28, 0x2e, 0x16, 0x59, 0x3e, 0x5d, + 0x7c, 0xb1, 0xc8, 0x25, 0xf7, 0xc5, 0x17, 0x8b, 0x7c, 0xc2, 0xaf, 0xbd, 0x26, 0x7d, 0xb8, 0x4c, + 0x37, 0xca, 0x2f, 0x16, 0xea, 0xff, 0x02, 0x92, 0x6b, 0xdd, 0x6f, 0x09, 0x2c, 0xa4, 0x59, 0x6d, + 0xe1, 0xe5, 0x33, 0xe7, 0x15, 0xa0, 0xf0, 0xf2, 0x99, 0x47, 0x97, 0xb5, 0x57, 0x24, 0xd8, 0x4b, + 0x54, 0xaf, 0x74, 0xd4, 0xb0, 0x36, 0xb7, 0xc4, 0x4d, 0x28, 0xd8, 0xbe, 0xf3, 0xe9, 0xd3, 0x65, + 0xf2, 0xd9, 0xd3, 0x65, 0xf2, 0x9f, 0xa7, 0xcb, 0xe4, 0x83, 0x67, 0xcb, 0xc7, 0x3e, 0x7b, 0xb6, + 0x7c, 0xec, 0x5f, 0xcf, 0x96, 0x8f, 0xbd, 0xdb, 0x48, 0xbd, 0x0e, 0x28, 0x9d, 0x77, 0xd8, 0x5e, + 0x90, 0xd5, 0xf9, 0x93, 0x58, 0xab, 0x7c, 0x2d, 0xd8, 0x9b, 0x95, 0xff, 0xc5, 0x70, 0xf9, 0x7f, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x42, 0xfb, 0x11, 0xb9, 0xfa, 0x21, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4832,6 +4845,21 @@ func (m *QueryStorageStatsResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro _ = i var l int _ = l + if len(m.UsersByPlan) > 0 { + for k := range m.UsersByPlan { + v := m.UsersByPlan[k] + baseI := i + i = encodeVarintQuery(dAtA, i, uint64(v)) + i-- + dAtA[i] = 0x10 + i = encodeVarintQuery(dAtA, i, uint64(k)) + i-- + dAtA[i] = 0x8 + i = encodeVarintQuery(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } if m.ActiveUsers != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.ActiveUsers)) i-- @@ -5525,6 +5553,14 @@ func (m *QueryStorageStatsResponse) Size() (n int) { if m.ActiveUsers != 0 { n += 1 + sovQuery(uint64(m.ActiveUsers)) } + if len(m.UsersByPlan) > 0 { + for k, v := range m.UsersByPlan { + _ = k + _ = v + mapEntrySize := 1 + sovQuery(uint64(k)) + 1 + sovQuery(uint64(v)) + n += mapEntrySize + 1 + sovQuery(uint64(mapEntrySize)) + } + } return n } @@ -9810,6 +9846,105 @@ func (m *QueryStorageStatsResponse) Unmarshal(dAtA []byte) error { break } } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UsersByPlan", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UsersByPlan == nil { + m.UsersByPlan = make(map[int64]int64) + } + var mapkey int64 + var mapvalue int64 + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvalue |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + } else { + iNdEx = entryPreIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.UsersByPlan[mapkey] = mapvalue + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) From abdef073057cafe90d41d38600b68e4d969170ec Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 15:55:05 -0400 Subject: [PATCH 050/256] file tree changing every file from fid to merkle hash --- app/upgrades/v4/commont_test.go | 95 +++++++++++++++++ app/upgrades/v4/upgrade_test.go | 50 +++++++++ app/upgrades/v4/upgrades.go | 170 +++++++++++++++++++++---------- x/filetree/keeper/common_test.go | 4 +- x/filetree/keeper/keeper_test.go | 2 +- 5 files changed, 264 insertions(+), 57 deletions(-) create mode 100644 app/upgrades/v4/commont_test.go create mode 100644 app/upgrades/v4/upgrade_test.go diff --git a/app/upgrades/v4/commont_test.go b/app/upgrades/v4/commont_test.go new file mode 100644 index 000000000..5a9783535 --- /dev/null +++ b/app/upgrades/v4/commont_test.go @@ -0,0 +1,95 @@ +package v4_test + +import ( + gocontext "context" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + typesparams "github.com/cosmos/cosmos-sdk/x/params/types" + canineglobaltestutil "github.com/jackalLabs/canine-chain/v3/testutil" + moduletestutil "github.com/jackalLabs/canine-chain/v3/types/module/testutil" // when importing from sdk,'go mod tidy' keeps trying to import from v0.46. + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmtime "github.com/tendermint/tendermint/types/time" + "testing" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/jackalLabs/canine-chain/v3/x/filetree" + "github.com/jackalLabs/canine-chain/v3/x/filetree/keeper" + + "github.com/jackalLabs/canine-chain/v3/x/filetree/types" + "github.com/stretchr/testify/suite" +) + +// SetupFileTreeKeeper creates a filetreeKeeper as well as all its dependencies. +func SetupFileTreeKeeper(t *testing.T) ( + *keeper.Keeper, + moduletestutil.TestEncodingConfig, + sdk.Context, +) { + key := sdk.NewKVStoreKey(types.StoreKey) + memStoreKey := storetypes.NewMemoryStoreKey(types.MemStoreKey) + testCtx := canineglobaltestutil.DefaultContextWithDB(t, key, sdk.NewTransientStoreKey("transient_test")) + ctx := testCtx.Ctx.WithBlockHeader(tmproto.Header{Time: tmtime.Now()}) + + encCfg := moduletestutil.MakeTestEncodingConfig() + types.RegisterInterfaces(encCfg.InterfaceRegistry) + + // Create MsgServiceRouter, but don't populate it before creating the filetree keeper. + msr := baseapp.NewMsgServiceRouter() + + paramsSubspace := typesparams.NewSubspace(encCfg.Codec, + types.Amino, + key, + memStoreKey, + "FiletreeParams", + ) + + // filetree keeper initializations + filetreeKeeper := keeper.NewKeeper(encCfg.Codec, key, memStoreKey, paramsSubspace) + filetreeKeeper.SetParams(ctx, types.DefaultParams()) + + // Register all handlers for the MegServiceRouter. + msr.SetInterfaceRegistry(encCfg.InterfaceRegistry) + types.RegisterMsgServer(msr, keeper.NewMsgServerImpl(*filetreeKeeper)) + + return filetreeKeeper, encCfg, ctx +} + +type UpgradeTestKeeper struct { + suite.Suite + + cdc codec.Codec + ctx sdk.Context + filetreeKeeper *keeper.Keeper + queryClient types.QueryClient + msgSrvr types.MsgServer +} + +func (suite *UpgradeTestKeeper) SetupSuite() { + suite.reset() +} + +func (suite *UpgradeTestKeeper) reset() { + filetreeKeeper, encCfg, ctx := SetupFileTreeKeeper(suite.T()) + + queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry) + types.RegisterQueryServer(queryHelper, filetreeKeeper) + queryClient := types.NewQueryClient(queryHelper) + + suite.ctx = ctx + suite.filetreeKeeper = filetreeKeeper + suite.cdc = encCfg.Codec + suite.queryClient = queryClient + suite.msgSrvr = keeper.NewMsgServerImpl(*suite.filetreeKeeper) +} + +func setupMsgServer(suite *UpgradeTestKeeper) (types.MsgServer, gocontext.Context) { + k := suite.filetreeKeeper + filetree.InitGenesis(suite.ctx, *k, *types.DefaultGenesis()) + ctx := sdk.WrapSDKContext(suite.ctx) + return keeper.NewMsgServerImpl(*k), ctx +} + +func TestFiletreeTestSuite(t *testing.T) { + suite.Run(t, new(UpgradeTestKeeper)) +} diff --git a/app/upgrades/v4/upgrade_test.go b/app/upgrades/v4/upgrade_test.go new file mode 100644 index 000000000..52b81dcfe --- /dev/null +++ b/app/upgrades/v4/upgrade_test.go @@ -0,0 +1,50 @@ +package v4_test + +import ( + "encoding/json" + "fmt" + v4 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v4" + "github.com/jackalLabs/canine-chain/v3/x/filetree/types" +) + +func (suite *UpgradeTestKeeper) TestUpgrade() { + suite.SetupSuite() + setupMsgServer(suite) + + fidMerkleMap := make(map[string][]byte) + + for i := 0; i < 10; i++ { + fid := fmt.Sprintf("jklf1oooooooo%d", i) + + fidContents := v4.FidContents{Fid: []string{fid}} + data, err := json.Marshal(fidContents) + suite.Require().NoError(err) + + address := fmt.Sprintf("this is file %d", i) + f := types.Files{ + Address: address, + Contents: string(data), + Owner: "cosmosjoe", + ViewingAccess: "{}", + EditAccess: "{}", + TrackingNumber: fmt.Sprintf("%d", i), + } + fidMerkleMap[fid] = []byte(address) + + suite.filetreeKeeper.SetFiles(suite.ctx, f) + } + + v4.UpdateFileTree(suite.ctx, *suite.filetreeKeeper, fidMerkleMap) + + allFiles := suite.filetreeKeeper.GetAllFiles(suite.ctx) + + for _, file := range allFiles { + var mct v4.MerkleContents + b := []byte(file.Contents) + err := json.Unmarshal(b, &mct) + suite.Require().NoError(err) + + suite.Require().Equal([]byte(file.Address), mct.Merkles[0]) + } + +} diff --git a/app/upgrades/v4/upgrades.go b/app/upgrades/v4/upgrades.go index 3283a92e3..e4a7060f3 100644 --- a/app/upgrades/v4/upgrades.go +++ b/app/upgrades/v4/upgrades.go @@ -3,6 +3,7 @@ package v4 import ( "encoding/hex" "encoding/json" + "fmt" "strconv" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -10,6 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/jackalLabs/canine-chain/v3/app/upgrades" + filetreemodulekeeper "github.com/jackalLabs/canine-chain/v3/x/filetree/keeper" storagekeeper "github.com/jackalLabs/canine-chain/v3/x/storage/keeper" storagemoduletypes "github.com/jackalLabs/canine-chain/v3/x/storage/types" @@ -22,14 +24,16 @@ type Upgrade struct { mm *module.Manager configurator module.Configurator sk storagekeeper.Keeper + fk filetreemodulekeeper.Keeper } // NewUpgrade returns a new Upgrade instance -func NewUpgrade(mm *module.Manager, configurator module.Configurator, sk storagekeeper.Keeper) *Upgrade { +func NewUpgrade(mm *module.Manager, configurator module.Configurator, sk storagekeeper.Keeper, fk filetreemodulekeeper.Keeper) *Upgrade { return &Upgrade{ mm: mm, configurator: configurator, sk: sk, + fk: fk, } } @@ -43,75 +47,133 @@ type LegacyMarker struct { Cid string `json:"cid"` } -// Handler implements upgrades.Upgrade -func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - ctx.Logger().Info("\nNow updating the Jackal Protocol to:\n\n █████╗ ██████╗ █████╗ ██████╗██╗ █████╗ \n██╔══██╗██╔════╝██╔══██╗██╔════╝██║██╔══██╗\n███████║██║ ███████║██║ ██║███████║\n██╔══██║██║ ██╔══██║██║ ██║██╔══██║\n██║ ██║╚██████╗██║ ██║╚██████╗██║██║ ██║\n╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝╚═╝╚═╝ ╚═╝\n \n") +type FidContents struct { + Fid []string `json:"fids"` +} - fromVM[storagemoduletypes.ModuleName] = 5 +type MerkleContents struct { + Merkles [][]byte `json:"merkles"` +} - allDeals := u.sk.GetAllLegacyActiveDeals(ctx) +func UpdateFileTree(ctx sdk.Context, fk filetreemodulekeeper.Keeper, merkleMap map[string][]byte) { + allFiles := fk.GetAllFiles(ctx) - for _, deal := range allDeals { + for _, file := range allFiles { + contents := file.Contents - merkle, err := hex.DecodeString(deal.Merkle) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } + var fidContents FidContents + err := json.Unmarshal([]byte(contents), &fidContents) + if err != nil { + ctx.Logger().Debug(fmt.Errorf("cannot unmarshal %s %w", file.Address, err).Error()) + continue + } - start, err := strconv.ParseInt(deal.Startblock, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } + merkles := make([][]byte, 0) - end, err := strconv.ParseInt(deal.Endblock, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) + for _, fid := range fidContents.Fid { + m := merkleMap[fid] + if m == nil { continue } - size, err := strconv.ParseInt(deal.Filesize, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } + merkles = append(merkles, m) - lm := LegacyMarker{ - Fid: deal.Fid, - Cid: deal.Cid, - } + } - lmBytes, err := json.Marshal(lm) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } + merkleContents := MerkleContents{Merkles: merkles} - var uf storagemoduletypes.UnifiedFile - - uf, found := u.sk.GetFile(ctx, merkle, deal.Signee, start) - if !found { - uf = storagemoduletypes.UnifiedFile{ - Merkle: merkle, - Owner: deal.Signee, - Start: start, - Expires: end, - FileSize: size, - ProofInterval: 1800, // TODO: Decide on default window - ProofType: 0, - Proofs: make([]string, 0), - MaxProofs: 3, - Note: string(lmBytes), - } - } + merkleContentBytes, err := json.Marshal(merkleContents) + if err != nil { + ctx.Logger().Debug(fmt.Errorf("cannot marshal merkle contents of %s %w", file.Address, err).Error()) + continue + } + + file.Contents = string(merkleContentBytes) + fk.SetFiles(ctx, file) + } +} + +func UpdateFiles(ctx sdk.Context, u *Upgrade) map[string][]byte { + fidMerkle := make(map[string][]byte) + + allDeals := u.sk.GetAllLegacyActiveDeals(ctx) + + for _, deal := range allDeals { + + merkle, err := hex.DecodeString(deal.Merkle) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + start, err := strconv.ParseInt(deal.Startblock, 10, 64) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } - u.sk.SetFile(ctx, uf) - uf.AddProver(ctx, u.sk, deal.Provider) + end, err := strconv.ParseInt(deal.Endblock, 10, 64) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + size, err := strconv.ParseInt(deal.Filesize, 10, 64) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + + lm := LegacyMarker{ + Fid: deal.Fid, + Cid: deal.Cid, + } + + fidMerkle[deal.Fid] = merkle // creating fid -> merkle mapping + + lmBytes, err := json.Marshal(lm) + if err != nil { + ctx.Logger().Error(err.Error()) + continue + } + var uf storagemoduletypes.UnifiedFile + + uf, found := u.sk.GetFile(ctx, merkle, deal.Signee, start) + if !found { + uf = storagemoduletypes.UnifiedFile{ + Merkle: merkle, + Owner: deal.Signee, + Start: start, + Expires: end, + FileSize: size, + ProofInterval: 1800, // TODO: Decide on default window + ProofType: 0, + Proofs: make([]string, 0), + MaxProofs: 3, + Note: string(lmBytes), + } } + u.sk.SetFile(ctx, uf) + uf.AddProver(ctx, u.sk, deal.Provider) + + } + + return fidMerkle +} + +// Handler implements upgrades.Upgrade +func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + ctx.Logger().Info("\nNow updating the Jackal Protocol to:\n\n █████╗ ██████╗ █████╗ ██████╗██╗ █████╗ \n██╔══██╗██╔════╝██╔══██╗██╔════╝██║██╔══██╗\n███████║██║ ███████║██║ ██║███████║\n██╔══██║██║ ██╔══██║██║ ██║██╔══██║\n██║ ██║╚██████╗██║ ██║╚██████╗██║██║ ██║\n╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝╚═╝╚═╝ ╚═╝\n \n") + + fromVM[storagemoduletypes.ModuleName] = 5 + + fidMerkleMap := UpdateFiles(ctx, u) + + UpdateFileTree(ctx, u.fk, fidMerkleMap) + newVM, err := u.mm.RunMigrations(ctx, u.configurator, fromVM) if err != nil { return newVM, err diff --git a/x/filetree/keeper/common_test.go b/x/filetree/keeper/common_test.go index 0548f35f0..0fe1ad9fe 100644 --- a/x/filetree/keeper/common_test.go +++ b/x/filetree/keeper/common_test.go @@ -19,8 +19,8 @@ import ( types "github.com/jackalLabs/canine-chain/v3/x/filetree/types" ) -// setupFiletreeKeeper creates a filetreeKeeper as well as all its dependencies. -func setupFiletreeKeeper(t *testing.T) ( +// SetupFiletreeKeeper creates a filetreeKeeper as well as all its dependencies. +func SetupFiletreeKeeper(t *testing.T) ( *keeper.Keeper, moduletestutil.TestEncodingConfig, sdk.Context, diff --git a/x/filetree/keeper/keeper_test.go b/x/filetree/keeper/keeper_test.go index d2afdb3bc..fcc339e26 100644 --- a/x/filetree/keeper/keeper_test.go +++ b/x/filetree/keeper/keeper_test.go @@ -28,7 +28,7 @@ func (suite *KeeperTestSuite) SetupSuite() { } func (suite *KeeperTestSuite) reset() { - filetreeKeeper, encCfg, ctx := setupFiletreeKeeper(suite.T()) + filetreeKeeper, encCfg, ctx := SetupFiletreeKeeper(suite.T()) queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry) types.RegisterQueryServer(queryHelper, filetreeKeeper) From b5e0970a0bd27e9f50eb3f5549f37a04af8903b0 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 26 Oct 2023 16:10:45 -0400 Subject: [PATCH 051/256] linting --- app/upgrades.go | 2 +- app/upgrades/v4/commont_test.go | 3 ++- app/upgrades/v4/upgrade_test.go | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/upgrades.go b/app/upgrades.go index 648a278e4..e0a4e0c87 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -24,7 +24,7 @@ func (app *JackalApp) registerTestnetUpgradeHandlers() { func (app *JackalApp) registerMainnetUpgradeHandlers() { app.registerUpgrade(bouncybulldog.NewUpgrade(app.mm, app.configurator, app.OracleKeeper)) app.registerUpgrade(v3.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) - app.registerUpgrade(v4.NewUpgrade(app.mm, app.configurator, app.StorageKeeper)) + app.registerUpgrade(v4.NewUpgrade(app.mm, app.configurator, app.StorageKeeper, app.FileTreeKeeper)) } // registerUpgrade registers the given upgrade to be supported by the app diff --git a/app/upgrades/v4/commont_test.go b/app/upgrades/v4/commont_test.go index 5a9783535..f29a17ddf 100644 --- a/app/upgrades/v4/commont_test.go +++ b/app/upgrades/v4/commont_test.go @@ -2,13 +2,14 @@ package v4_test import ( gocontext "context" + "testing" + storetypes "github.com/cosmos/cosmos-sdk/store/types" typesparams "github.com/cosmos/cosmos-sdk/x/params/types" canineglobaltestutil "github.com/jackalLabs/canine-chain/v3/testutil" moduletestutil "github.com/jackalLabs/canine-chain/v3/types/module/testutil" // when importing from sdk,'go mod tidy' keeps trying to import from v0.46. tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtime "github.com/tendermint/tendermint/types/time" - "testing" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" diff --git a/app/upgrades/v4/upgrade_test.go b/app/upgrades/v4/upgrade_test.go index 52b81dcfe..7495f9d0b 100644 --- a/app/upgrades/v4/upgrade_test.go +++ b/app/upgrades/v4/upgrade_test.go @@ -3,6 +3,7 @@ package v4_test import ( "encoding/json" "fmt" + v4 "github.com/jackalLabs/canine-chain/v3/app/upgrades/v4" "github.com/jackalLabs/canine-chain/v3/x/filetree/types" ) @@ -46,5 +47,4 @@ func (suite *UpgradeTestKeeper) TestUpgrade() { suite.Require().Equal([]byte(file.Address), mct.Merkles[0]) } - } From 66a0d8f9340513159977abf15ed83dafd4abf283 Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 1 Nov 2023 10:39:34 -0400 Subject: [PATCH 052/256] upgrading existing storage accounts to use the new coin storage plan type --- app/upgrades/v4/upgrades.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/upgrades/v4/upgrades.go b/app/upgrades/v4/upgrades.go index e4a7060f3..3a5ac325f 100644 --- a/app/upgrades/v4/upgrades.go +++ b/app/upgrades/v4/upgrades.go @@ -93,6 +93,26 @@ func UpdateFileTree(ctx sdk.Context, fk filetreemodulekeeper.Keeper, merkleMap m } } +func UpdatePaymentInfo(ctx sdk.Context, sk storagekeeper.Keeper) { + paymentInfo := sk.GetAllStoragePaymentInfo(ctx) + for _, info := range paymentInfo { + + planTime := info.End.Sub(info.Start) + millis := planTime.Milliseconds() + seconds := millis / 1000 + minutes := seconds / 60 + hours := minutes / 60 + + cost := sk.GetStorageCostKbs(ctx, info.SpaceAvailable, hours) + + price := sdk.NewCoin("ujkl", cost) + + info.Coins = sdk.NewCoins(price) + + sk.SetStoragePaymentInfo(ctx, info) + } +} + func UpdateFiles(ctx sdk.Context, u *Upgrade) map[string][]byte { fidMerkle := make(map[string][]byte) @@ -174,6 +194,8 @@ func (u *Upgrade) Handler() upgradetypes.UpgradeHandler { UpdateFileTree(ctx, u.fk, fidMerkleMap) + UpdatePaymentInfo(ctx, u.sk) // updating payment info with values at time of upgrade + newVM, err := u.mm.RunMigrations(ctx, u.configurator, fromVM) if err != nil { return newVM, err From ac22b69050b68ece318286e60d64c8e66e14b0df Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 1 Nov 2023 10:50:42 -0400 Subject: [PATCH 053/256] fix merge --- app/upgrades/v4/upgrades.go | 39 ------------------------------------- 1 file changed, 39 deletions(-) diff --git a/app/upgrades/v4/upgrades.go b/app/upgrades/v4/upgrades.go index ba2573d0e..3a5ac325f 100644 --- a/app/upgrades/v4/upgrades.go +++ b/app/upgrades/v4/upgrades.go @@ -118,45 +118,6 @@ func UpdateFiles(ctx sdk.Context, u *Upgrade) map[string][]byte { allDeals := u.sk.GetAllLegacyActiveDeals(ctx) - for _, deal := range allDeals { - - merkle, err := hex.DecodeString(deal.Merkle) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } - - start, err := strconv.ParseInt(deal.Startblock, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } - - end, err := strconv.ParseInt(deal.Endblock, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } - - size, err := strconv.ParseInt(deal.Filesize, 10, 64) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } - - lm := LegacyMarker{ - Fid: deal.Fid, - Cid: deal.Cid, - } - - fidMerkle[deal.Fid] = merkle // creating fid -> merkle mapping - - lmBytes, err := json.Marshal(lm) - if err != nil { - ctx.Logger().Error(err.Error()) - continue - } - for _, deal := range allDeals { merkle, err := hex.DecodeString(deal.Merkle) From 3ef4ccbaef1a79d2b93a51f61bc0a4e551bac737 Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 8 Nov 2023 11:21:42 -0500 Subject: [PATCH 054/256] updating merkle tree library --- go.mod | 8 ++------ go.sum | 6 ++---- x/storage/keeper/msg_server_proofs_test.go | 4 ++-- x/storage/simulation/utils.go | 4 ++-- x/storage/types/file_deal.go | 4 ++-- x/storage/types/file_deal_test.go | 4 ++-- x/storage/utils/trees.go | 7 ++++--- 7 files changed, 16 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index 9a129728d..7d5d7cc21 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,6 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tendermint/tendermint v0.34.27 github.com/tendermint/tm-db v0.6.7 - github.com/wealdtech/go-merkletree v1.0.0 github.com/zondax/hid v0.9.1 // indirect google.golang.org/genproto v0.0.0-20230320184635-7606e756e683 google.golang.org/grpc v1.55.0 @@ -30,7 +29,7 @@ require ( ) require ( - github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.3 github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.19.5 // indirect github.com/creachadair/taskgroup v0.3.2 // indirect @@ -113,7 +112,6 @@ require ( github.com/improbable-eng/grpc-web v0.14.1 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/josharian/intern v1.0.0 // indirect github.com/klauspost/compress v1.16.3 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect @@ -121,7 +119,6 @@ require ( github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/linxGnu/grocksdb v1.7.10 // indirect github.com/magiconair/properties v1.8.6 // indirect - github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect @@ -146,6 +143,7 @@ require ( github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.5.0 // indirect + github.com/wealdtech/go-merkletree/v2 v2.5.1-0.20231106114422-6769f4468d71 github.com/zondax/ledger-go v0.14.1 // indirect go.etcd.io/bbolt v1.3.7 // indirect golang.org/x/crypto v0.8.0 // indirect @@ -180,8 +178,6 @@ replace ( github.com/tendermint/tendermint => github.com/cometbft/cometbft v0.34.27 - github.com/wealdtech/go-merkletree => github.com/TheMarstonConnell/go-merkletree v0.0.0-20230328183338-b5d590ab1aaf - // use grpc compatible with cosmos-flavored protobufs google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index 899ea7937..e24125a11 100644 --- a/go.sum +++ b/go.sum @@ -97,8 +97,6 @@ github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjK github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/TheMarstonConnell/go-merkletree v0.0.0-20230328183338-b5d590ab1aaf h1:K8hLTtjPxDCIjb/YNncNWHTWDpubfPFbXWGE8vAQC4g= -github.com/TheMarstonConnell/go-merkletree v0.0.0-20230328183338-b5d590ab1aaf/go.mod h1:Dpt5BLOsKmHAA6gAs3lyo9EKaLq2glBsEoHj3RqfN+Q= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= @@ -685,7 +683,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= @@ -792,7 +789,6 @@ github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK github.com/mailgun/raymond/v2 v2.0.46/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= @@ -1194,6 +1190,8 @@ github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/wealdtech/go-merkletree/v2 v2.5.1-0.20231106114422-6769f4468d71 h1:6CdfLVLgeh6MjVbn3dyNFUU3QJXhVBriv9QTg7Hy7vk= +github.com/wealdtech/go-merkletree/v2 v2.5.1-0.20231106114422-6769f4468d71/go.mod h1:NL3IVC+cwXMegkCY4SyPPMee3sYIBM+msyFOEhQS+qM= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= diff --git a/x/storage/keeper/msg_server_proofs_test.go b/x/storage/keeper/msg_server_proofs_test.go index 372059574..a226a82c9 100644 --- a/x/storage/keeper/msg_server_proofs_test.go +++ b/x/storage/keeper/msg_server_proofs_test.go @@ -11,8 +11,8 @@ import ( "github.com/jackalLabs/canine-chain/v3/testutil" "github.com/jackalLabs/canine-chain/v3/x/storage/types" - "github.com/wealdtech/go-merkletree" - "github.com/wealdtech/go-merkletree/sha3" + "github.com/wealdtech/go-merkletree/v2" + "github.com/wealdtech/go-merkletree/v2/sha3" ) type TestFile struct { diff --git a/x/storage/simulation/utils.go b/x/storage/simulation/utils.go index 8d8ecb87a..3b5b12548 100644 --- a/x/storage/simulation/utils.go +++ b/x/storage/simulation/utils.go @@ -12,8 +12,8 @@ import ( "strings" sdksim "github.com/cosmos/cosmos-sdk/types/simulation" - merkle "github.com/wealdtech/go-merkletree" - "github.com/wealdtech/go-merkletree/sha3" + merkle "github.com/wealdtech/go-merkletree/v2" + "github.com/wealdtech/go-merkletree/v2/sha3" ) const ( diff --git a/x/storage/types/file_deal.go b/x/storage/types/file_deal.go index 9cb5fe1cd..76278c528 100644 --- a/x/storage/types/file_deal.go +++ b/x/storage/types/file_deal.go @@ -10,8 +10,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerror "github.com/cosmos/cosmos-sdk/types/errors" "github.com/tendermint/tendermint/libs/rand" - "github.com/wealdtech/go-merkletree" - "github.com/wealdtech/go-merkletree/sha3" + "github.com/wealdtech/go-merkletree/v2" + "github.com/wealdtech/go-merkletree/v2/sha3" ) // VerifyProof checks whether a proof is valid against a file diff --git a/x/storage/types/file_deal_test.go b/x/storage/types/file_deal_test.go index d16685c23..41f115216 100644 --- a/x/storage/types/file_deal_test.go +++ b/x/storage/types/file_deal_test.go @@ -12,8 +12,8 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/storage/types" "github.com/stretchr/testify/require" - "github.com/wealdtech/go-merkletree" - "github.com/wealdtech/go-merkletree/sha3" + "github.com/wealdtech/go-merkletree/v2" + "github.com/wealdtech/go-merkletree/v2/sha3" ) // copied from the provider code, we should probably make this an import for the providers diff --git a/x/storage/utils/trees.go b/x/storage/utils/trees.go index e5859b159..4e173a54a 100644 --- a/x/storage/utils/trees.go +++ b/x/storage/utils/trees.go @@ -3,11 +3,12 @@ package utils import ( "crypto/sha256" "encoding/hex" + "encoding/json" "fmt" "io" - "github.com/wealdtech/go-merkletree" - "github.com/wealdtech/go-merkletree/sha3" + "github.com/wealdtech/go-merkletree/v2" + "github.com/wealdtech/go-merkletree/v2/sha3" ) func BuildTree(buf io.Reader, chunkSize int64) ([]byte, []byte, [][]byte, int, error) { @@ -50,7 +51,7 @@ func BuildTree(buf io.Reader, chunkSize int64) ([]byte, []byte, [][]byte, int, e r := tree.Root() - exportedTree, err := tree.Export() + exportedTree, err := json.Marshal(tree) if err != nil { return nil, nil, nil, 0, err } From 1e65d67ae12edccef6d64caf0f4637c6959ed76c Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 8 Nov 2023 14:49:35 -0500 Subject: [PATCH 055/256] updating some storage protos --- proto/canine_chain/storage/params.proto | 2 +- proto/canine_chain/storage/payment_info.proto | 2 +- proto/canine_chain/storage/providers.proto | 2 +- proto/canine_chain/storage/query.proto | 14 +- proto/canine_chain/storage/tx.proto | 12 +- x/storage/client/cli/query_freespace.go | 2 +- x/storage/client/cli/tx_init_provider.go | 4 +- x/storage/client/cli/tx_provider.go | 2 +- .../client/cli/tx_set_provider_totalspace.go | 4 +- x/storage/handler.go | 4 +- x/storage/keeper/grpc_query_freespace.go | 4 +- .../grpc_query_get_client_free_space.go | 4 +- x/storage/keeper/msg_server_init_provider.go | 2 +- x/storage/keeper/msg_server_proofs_test.go | 2 +- x/storage/keeper/msg_server_providers_test.go | 16 +- .../msg_server_set_provider_totalspace.go | 4 +- x/storage/keeper/providers_test.go | 4 +- x/storage/module_simulation.go | 14 +- x/storage/simulation/init_miner.go | 2 +- x/storage/simulation/set_miner_totalspace.go | 6 +- x/storage/types/codec.go | 4 +- x/storage/types/message_init_miner.go | 4 +- x/storage/types/message_init_miner_test.go | 10 +- .../types/message_set_miner_totalspace.go | 20 +- .../message_set_miner_totalspace_test.go | 10 +- x/storage/types/query.pb.go | 389 +++++++++--------- x/storage/types/query.pb.gw.go | 6 +- x/storage/types/tx.pb.go | 299 +++++++------- 28 files changed, 425 insertions(+), 423 deletions(-) diff --git a/proto/canine_chain/storage/params.proto b/proto/canine_chain/storage/params.proto index 6ea3275d8..cbee353ed 100644 --- a/proto/canine_chain/storage/params.proto +++ b/proto/canine_chain/storage/params.proto @@ -19,7 +19,7 @@ message Params { // Life span of a contract in blocks int64 max_contract_age_in_blocks = 6; int64 price_per_tb_per_month = 7; - int64 attestFormSize = 8; + int64 attestFormSize = 8; // TODO: needs more research on if this messes up reading from protos int64 attestMinToPass = 9; int64 collateralPrice = 10; } diff --git a/proto/canine_chain/storage/payment_info.proto b/proto/canine_chain/storage/payment_info.proto index 7d754cee4..330ad7ee6 100644 --- a/proto/canine_chain/storage/payment_info.proto +++ b/proto/canine_chain/storage/payment_info.proto @@ -14,7 +14,7 @@ message StoragePaymentInfo { google.protobuf.Timestamp start = 1 [ (gogoproto.stdtime) = true, (gogoproto.nullable) = false ]; google.protobuf.Timestamp end = 2 [ (gogoproto.stdtime) = true, (gogoproto.nullable) = false]; - int64 spaceAvailable = 3; + int64 spaceAvailable = 3; // TODO: same as params int64 spaceUsed = 4; string address = 5; diff --git a/proto/canine_chain/storage/providers.proto b/proto/canine_chain/storage/providers.proto index 66f58738f..325a23944 100644 --- a/proto/canine_chain/storage/providers.proto +++ b/proto/canine_chain/storage/providers.proto @@ -6,7 +6,7 @@ option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; message Providers { string address = 1; string ip = 2; - string totalspace = 3; + string totalspace = 3; // TODO: same as params string burned_contracts = 4; string creator = 5; string keybase_identity = 6; diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index 255c424b5..403cce8e1 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -84,9 +84,9 @@ service Query { } // Queries a list of Freespace items. - rpc Freespace(QueryFreespaceRequest) returns (QueryFreespaceResponse) { + rpc Freespace(QueryFreeSpaceRequest) returns (QueryFreeSpaceResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/freespace/{address}"; + "/jackal-dao/canine-chain/storage/free_space/{address}"; } // Queries a list of Freespace items. @@ -266,11 +266,11 @@ message QueryAllReportResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryFreespaceRequest { string address = 1; } +message QueryFreeSpaceRequest { string address = 1; } message QueryStoreCountRequest { string address = 1; } -message QueryFreespaceResponse { string space = 1; } +message QueryFreeSpaceResponse { string space = 1; } message QueryStoreCountResponse { string count = 1; } @@ -283,7 +283,7 @@ message QueryFindFileResponse { string provider_ips = 1; } message QueryClientFreeSpaceRequest { string address = 1; } -message QueryClientFreeSpaceResponse { int64 bytesfree = 1; } +message QueryClientFreeSpaceResponse { int64 bytes_free = 1; } message QueryPayDataRequest { string address = 1; } @@ -337,10 +337,10 @@ message QueryStorageStatsRequest {} message QueryStorageStatsResponse { uint64 purchased = 1; uint64 used = 2; - bytes usedRatio = 3 [ + bytes used_ratio = 3 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; - uint64 activeUsers = 4; + uint64 active_users = 4; map users_by_plan= 5; } diff --git a/proto/canine_chain/storage/tx.proto b/proto/canine_chain/storage/tx.proto index 6d8c93bfa..c6e612a7a 100644 --- a/proto/canine_chain/storage/tx.proto +++ b/proto/canine_chain/storage/tx.proto @@ -12,8 +12,8 @@ service Msg { rpc SetProviderIP(MsgSetProviderIP) returns (MsgSetProviderIPResponse); rpc SetProviderKeybase(MsgSetProviderKeybase) returns (MsgSetProviderKeybaseResponse); - rpc SetProviderTotalspace(MsgSetProviderTotalspace) - returns (MsgSetProviderTotalspaceResponse); + rpc SetProviderTotalSpace(MsgSetProviderTotalSpace) + returns (MsgSetProviderTotalSpaceResponse); rpc InitProvider(MsgInitProvider) returns (MsgInitProviderResponse); rpc ShutdownProvider(MsgShutdownProvider) returns (MsgShutdownProviderResponse); rpc BuyStorage(MsgBuyStorage) returns (MsgBuyStorageResponse); @@ -56,7 +56,7 @@ message MsgPostProof { message MsgPostProofResponse { bool success = 1; - string errorMessage = 2; + string error_message = 2; } message MsgDeleteFile { @@ -83,12 +83,12 @@ message MsgSetProviderKeybase { message MsgSetProviderKeybaseResponse {} -message MsgSetProviderTotalspace { +message MsgSetProviderTotalSpace { string creator = 1; string space = 2; } -message MsgSetProviderTotalspaceResponse {} +message MsgSetProviderTotalSpaceResponse {} message MsgAddClaimer { string creator = 1; @@ -109,7 +109,7 @@ message MsgInitProvider { string creator = 1; string ip = 2; string keybase = 3; - string totalspace = 4; + string total_space = 4; } message MsgInitProviderResponse {} diff --git a/x/storage/client/cli/query_freespace.go b/x/storage/client/cli/query_freespace.go index 2e9baa2bf..5751cfaaf 100644 --- a/x/storage/client/cli/query_freespace.go +++ b/x/storage/client/cli/query_freespace.go @@ -26,7 +26,7 @@ func CmdFreespace() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryFreespaceRequest{ + params := &types.QueryFreeSpaceRequest{ Address: reqAddress, } diff --git a/x/storage/client/cli/tx_init_provider.go b/x/storage/client/cli/tx_init_provider.go index e8d40f787..3dfcc101c 100644 --- a/x/storage/client/cli/tx_init_provider.go +++ b/x/storage/client/cli/tx_init_provider.go @@ -19,7 +19,7 @@ func CmdInitProvider() *cobra.Command { Args: cobra.ExactArgs(3), RunE: func(cmd *cobra.Command, args []string) (err error) { argIP := args[0] - argTotalspace := args[1] + argTotalSpace := args[1] argKeybase := args[2] clientCtx, err := client.GetClientTxContext(cmd) @@ -30,7 +30,7 @@ func CmdInitProvider() *cobra.Command { msg := types.NewMsgInitProvider( clientCtx.GetFromAddress().String(), argIP, - argTotalspace, + argTotalSpace, argKeybase, ) if err := msg.ValidateBasic(); err != nil { diff --git a/x/storage/client/cli/tx_provider.go b/x/storage/client/cli/tx_provider.go index 1cfa174e2..27476eb43 100644 --- a/x/storage/client/cli/tx_provider.go +++ b/x/storage/client/cli/tx_provider.go @@ -17,7 +17,7 @@ func CmdProvider() *cobra.Command { } cmds := []*cobra.Command{ - CmdSetProviderTotalspace(), + CmdSetProviderTotalSpace(), CmdSetProviderIP(), CmdSetProviderKeybase(), CmdInitProvider(), diff --git a/x/storage/client/cli/tx_set_provider_totalspace.go b/x/storage/client/cli/tx_set_provider_totalspace.go index c6ade82db..67f14e6ca 100644 --- a/x/storage/client/cli/tx_set_provider_totalspace.go +++ b/x/storage/client/cli/tx_set_provider_totalspace.go @@ -11,7 +11,7 @@ import ( var _ = strconv.Itoa(0) -func CmdSetProviderTotalspace() *cobra.Command { +func CmdSetProviderTotalSpace() *cobra.Command { cmd := &cobra.Command{ Use: "set-totalspace [space]", Short: "Broadcast message set-provider-totalspace", @@ -24,7 +24,7 @@ func CmdSetProviderTotalspace() *cobra.Command { return err } - msg := types.NewMsgSetProviderTotalspace( + msg := types.NewMsgSetProviderTotalSpace( clientCtx.GetFromAddress().String(), argSpace, ) diff --git a/x/storage/handler.go b/x/storage/handler.go index 2438146f7..d3fe8176b 100644 --- a/x/storage/handler.go +++ b/x/storage/handler.go @@ -29,8 +29,8 @@ func NewHandler(k keeper.Keeper) sdk.Handler { case *types.MsgSetProviderKeybase: res, err := msgServer.SetProviderKeybase(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgSetProviderTotalspace: - res, err := msgServer.SetProviderTotalspace(sdk.WrapSDKContext(ctx), msg) + case *types.MsgSetProviderTotalSpace: + res, err := msgServer.SetProviderTotalSpace(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) case *types.MsgInitProvider: res, err := msgServer.InitProvider(sdk.WrapSDKContext(ctx), msg) diff --git a/x/storage/keeper/grpc_query_freespace.go b/x/storage/keeper/grpc_query_freespace.go index 04d4a5a97..010fbe6bd 100644 --- a/x/storage/keeper/grpc_query_freespace.go +++ b/x/storage/keeper/grpc_query_freespace.go @@ -10,7 +10,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) Freespace(goCtx context.Context, req *types.QueryFreespaceRequest) (*types.QueryFreespaceResponse, error) { +func (k Keeper) Freespace(goCtx context.Context, req *types.QueryFreeSpaceRequest) (*types.QueryFreeSpaceResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -31,7 +31,7 @@ func (k Keeper) Freespace(goCtx context.Context, req *types.QueryFreespaceReques return nil, fmt.Errorf("can't parse total space") } - return &types.QueryFreespaceResponse{ + return &types.QueryFreeSpaceResponse{ Space: fmt.Sprintf("%d", space.Int64()-num), }, nil } diff --git a/x/storage/keeper/grpc_query_get_client_free_space.go b/x/storage/keeper/grpc_query_get_client_free_space.go index 6de75263e..c0f250a6d 100644 --- a/x/storage/keeper/grpc_query_get_client_free_space.go +++ b/x/storage/keeper/grpc_query_get_client_free_space.go @@ -18,8 +18,8 @@ func (k Keeper) GetClientFreeSpace(goCtx context.Context, req *types.QueryClient payInfo, found := k.GetStoragePaymentInfo(ctx, req.Address) if !found { - return &types.QueryClientFreeSpaceResponse{Bytesfree: 0}, nil + return &types.QueryClientFreeSpaceResponse{BytesFree: 0}, nil } - return &types.QueryClientFreeSpaceResponse{Bytesfree: payInfo.SpaceAvailable - payInfo.SpaceUsed}, nil + return &types.QueryClientFreeSpaceResponse{BytesFree: payInfo.SpaceAvailable - payInfo.SpaceUsed}, nil } diff --git a/x/storage/keeper/msg_server_init_provider.go b/x/storage/keeper/msg_server_init_provider.go index 8fe9ae5fa..6cf27ec81 100644 --- a/x/storage/keeper/msg_server_init_provider.go +++ b/x/storage/keeper/msg_server_init_provider.go @@ -40,7 +40,7 @@ func (k msgServer) InitProvider(goCtx context.Context, msg *types.MsgInitProvide provider := types.Providers{ Address: msg.Creator, Ip: msg.Ip, - Totalspace: msg.Totalspace, + Totalspace: msg.TotalSpace, Creator: msg.Creator, BurnedContracts: "0", KeybaseIdentity: msg.Keybase, diff --git a/x/storage/keeper/msg_server_proofs_test.go b/x/storage/keeper/msg_server_proofs_test.go index a226a82c9..c228b66e6 100644 --- a/x/storage/keeper/msg_server_proofs_test.go +++ b/x/storage/keeper/msg_server_proofs_test.go @@ -143,7 +143,7 @@ func (suite *KeeperTestSuite) TestPostProof() { _, err = msgSrvr.InitProvider(context, &types.MsgInitProvider{ Creator: testProvider.String(), Ip: "192.168.0.1", - Totalspace: "1_000_000", + TotalSpace: "1_000_000", }) suite.Require().NoError(err) diff --git a/x/storage/keeper/msg_server_providers_test.go b/x/storage/keeper/msg_server_providers_test.go index 4d8df378b..117f542ee 100644 --- a/x/storage/keeper/msg_server_providers_test.go +++ b/x/storage/keeper/msg_server_providers_test.go @@ -147,14 +147,14 @@ func (suite *KeeperTestSuite) TestMsgSetProviderTotalSpace() { suite.storageKeeper.SetProviders(suite.ctx, provider) cases := []struct { - preRun func() *types.MsgSetProviderTotalspace + preRun func() *types.MsgSetProviderTotalSpace expErr bool expErrMsg string name string }{ { - preRun: func() *types.MsgSetProviderTotalspace { - return types.NewMsgSetProviderTotalspace( + preRun: func() *types.MsgSetProviderTotalSpace { + return types.NewMsgSetProviderTotalSpace( user, "1000000", ) @@ -163,8 +163,8 @@ func (suite *KeeperTestSuite) TestMsgSetProviderTotalSpace() { name: "set provider total space success", }, { - preRun: func() *types.MsgSetProviderTotalspace { - return types.NewMsgSetProviderTotalspace( + preRun: func() *types.MsgSetProviderTotalSpace { + return types.NewMsgSetProviderTotalSpace( "wrong address", "1000000", ) @@ -174,8 +174,8 @@ func (suite *KeeperTestSuite) TestMsgSetProviderTotalSpace() { name: "set provider total space fail", }, { - preRun: func() *types.MsgSetProviderTotalspace { - return types.NewMsgSetProviderTotalspace( + preRun: func() *types.MsgSetProviderTotalSpace { + return types.NewMsgSetProviderTotalSpace( user, "9@!0", ) @@ -190,7 +190,7 @@ func (suite *KeeperTestSuite) TestMsgSetProviderTotalSpace() { suite.Run(tc.name, func() { msg := tc.preRun() suite.Require().NoError(err) - res, err := msgSrvr.SetProviderTotalspace(context, msg) + res, err := msgSrvr.SetProviderTotalSpace(context, msg) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) diff --git a/x/storage/keeper/msg_server_set_provider_totalspace.go b/x/storage/keeper/msg_server_set_provider_totalspace.go index eb6ea397d..b1c8b50fa 100644 --- a/x/storage/keeper/msg_server_set_provider_totalspace.go +++ b/x/storage/keeper/msg_server_set_provider_totalspace.go @@ -8,7 +8,7 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func (k msgServer) SetProviderTotalspace(goCtx context.Context, msg *types.MsgSetProviderTotalspace) (*types.MsgSetProviderTotalspaceResponse, error) { +func (k msgServer) SetProviderTotalSpace(goCtx context.Context, msg *types.MsgSetProviderTotalSpace) (*types.MsgSetProviderTotalSpaceResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) provider, found := k.GetProviders(ctx, msg.Creator) @@ -27,7 +27,7 @@ func (k msgServer) SetProviderTotalspace(goCtx context.Context, msg *types.MsgSe k.SetProviders(ctx, provider) - return &types.MsgSetProviderTotalspaceResponse{}, nil + return &types.MsgSetProviderTotalSpaceResponse{}, nil } func isValidTotalSpace(totalSpace string) bool { diff --git a/x/storage/keeper/providers_test.go b/x/storage/keeper/providers_test.go index 9d29e9dbe..67cb120f0 100644 --- a/x/storage/keeper/providers_test.go +++ b/x/storage/keeper/providers_test.go @@ -61,7 +61,7 @@ func (suite *KeeperTestSuite) TestInitProviders() { Creator: user, Ip: "192.158.1.38", Keybase: "", - Totalspace: "9000", + TotalSpace: "9000", } _, err = msgSrvr.InitProvider(ctx, &initMsg) @@ -75,7 +75,7 @@ func (suite *KeeperTestSuite) TestInitProviders() { suite.Require().NoError(err) suite.Require().Equal(res.Providers.Address, user) suite.Require().Equal(res.Providers.Ip, initMsg.Ip) - suite.Require().Equal(res.Providers.Totalspace, initMsg.Totalspace) + suite.Require().Equal(res.Providers.Totalspace, initMsg.TotalSpace) suite.Require().Equal(res.Providers.BurnedContracts, "0") suite.Require().Equal(res.Providers.Creator, initMsg.Creator) diff --git a/x/storage/module_simulation.go b/x/storage/module_simulation.go index 630b5f4e9..e2cb1e54f 100644 --- a/x/storage/module_simulation.go +++ b/x/storage/module_simulation.go @@ -28,9 +28,9 @@ const ( defaultWeightMsgSetProviderIP int = 10 //nolint:all - opWeightMsgSetProviderTotalspace = "op_weight_msg_set_provider_totalspace" + opWeightMsgSetProviderTotalSpace = "op_weight_msg_set_provider_totalspace" // TODO: Determine the simulation weight value - defaultWeightMsgSetProviderTotalspace int = 10 + defaultWeightMsgSetProviderTotalSpace int = 10 //nolint:all opWeightMsgInitProvider = "op_weight_msg_init_provider" @@ -88,15 +88,15 @@ func (am AppModule) WeightedOperations(simState module.SimulationState) []simtyp storagesimulation.SimulateMsgSetProviderIP(am.accountKeeper, am.bankKeeper, am.keeper), )) - var weightMsgSetProviderTotalspace int - simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgSetProviderTotalspace, &weightMsgSetProviderTotalspace, nil, + var weightMsgSetProviderTotalSpace int + simState.AppParams.GetOrGenerate(simState.Cdc, opWeightMsgSetProviderTotalSpace, &weightMsgSetProviderTotalSpace, nil, func(_ *rand.Rand) { - weightMsgSetProviderTotalspace = defaultWeightMsgSetProviderTotalspace + weightMsgSetProviderTotalSpace = defaultWeightMsgSetProviderTotalSpace }, ) operations = append(operations, simulation.NewWeightedOperation( - weightMsgSetProviderTotalspace, - storagesimulation.SimulateMsgSetProviderTotalspace(am.accountKeeper, am.bankKeeper, am.keeper), + weightMsgSetProviderTotalSpace, + storagesimulation.SimulateMsgSetProviderTotalSpace(am.accountKeeper, am.bankKeeper, am.keeper), )) var weightMsgInitProvider int diff --git a/x/storage/simulation/init_miner.go b/x/storage/simulation/init_miner.go index b2a1dd9c8..0712e8a6d 100644 --- a/x/storage/simulation/init_miner.go +++ b/x/storage/simulation/init_miner.go @@ -40,7 +40,7 @@ func SimulateMsgInitProvider( msg := &types.MsgInitProvider{ Creator: simAccount.Address.String(), Ip: RandIPv4Url(r), - Totalspace: strconv.Itoa(simtypes.RandIntBetween(r, 1_000_000_000, 1_000_000_000_000_000)), + TotalSpace: strconv.Itoa(simtypes.RandIntBetween(r, 1_000_000_000, 1_000_000_000_000_000)), Keybase: simtypes.RandStringOfLength(r, 10), } diff --git a/x/storage/simulation/set_miner_totalspace.go b/x/storage/simulation/set_miner_totalspace.go index a4f2bc0ca..eafcbba11 100644 --- a/x/storage/simulation/set_miner_totalspace.go +++ b/x/storage/simulation/set_miner_totalspace.go @@ -13,7 +13,7 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func SimulateMsgSetProviderTotalspace( +func SimulateMsgSetProviderTotalSpace( ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper, @@ -31,7 +31,7 @@ func SimulateMsgSetProviderTotalspace( return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSetProviderIP, "unable to find provider"), nil, nil } - msg := &types.MsgSetProviderTotalspace{ + msg := &types.MsgSetProviderTotalSpace{ Creator: provider.Creator, Space: strconv.Itoa(simtypes.RandIntBetween(r, 1_000_000_000, 1_000_000_000_000_000)), } @@ -39,7 +39,7 @@ func SimulateMsgSetProviderTotalspace( spendable := bk.SpendableCoins(ctx, simAccount.Address) fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSetProviderTotalspace, "unable to generate fees"), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSetProviderTotalSpace, "unable to generate fees"), nil, err } txCtx := simulation.OperationInput{ diff --git a/x/storage/types/codec.go b/x/storage/types/codec.go index 543e63039..2b72ed8f2 100644 --- a/x/storage/types/codec.go +++ b/x/storage/types/codec.go @@ -12,7 +12,7 @@ func RegisterCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgPostFile{}, "storage/PostFile", nil) cdc.RegisterConcrete(&MsgPostProof{}, "storage/PostProof", nil) cdc.RegisterConcrete(&MsgSetProviderIP{}, "storage/SetProviderIp", nil) - cdc.RegisterConcrete(&MsgSetProviderTotalspace{}, "storage/SetProviderTotalspace", nil) + cdc.RegisterConcrete(&MsgSetProviderTotalSpace{}, "storage/SetProviderTotalSpace", nil) cdc.RegisterConcrete(&MsgInitProvider{}, "storage/InitProvider", nil) cdc.RegisterConcrete(&MsgDeleteFile{}, "storage/DeleteFile", nil) cdc.RegisterConcrete(&MsgBuyStorage{}, "storage/BuyStorage", nil) @@ -34,7 +34,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgSetProviderIP{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgSetProviderTotalspace{}, + &MsgSetProviderTotalSpace{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), &MsgInitProvider{}, diff --git a/x/storage/types/message_init_miner.go b/x/storage/types/message_init_miner.go index 894438a5f..5c2d8e6fc 100644 --- a/x/storage/types/message_init_miner.go +++ b/x/storage/types/message_init_miner.go @@ -18,7 +18,7 @@ func NewMsgInitProvider(creator string, ip string, totalspace string, keybase st return &MsgInitProvider{ Creator: creator, Ip: ip, - Totalspace: totalspace, + TotalSpace: totalspace, Keybase: keybase, } } @@ -58,7 +58,7 @@ func (msg *MsgInitProvider) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "invalid provider ip (%s)", err) } - if _, err := strconv.Atoi(msg.Totalspace); err != nil { + if _, err := strconv.Atoi(msg.TotalSpace); err != nil { return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "cannot parse totalspace (%s)", err) } return nil diff --git a/x/storage/types/message_init_miner_test.go b/x/storage/types/message_init_miner_test.go index 161e2cac2..700a8b994 100644 --- a/x/storage/types/message_init_miner_test.go +++ b/x/storage/types/message_init_miner_test.go @@ -18,7 +18,7 @@ func TestMsgInitProvider_ValidateBasic(t *testing.T) { msg: MsgInitProvider{ Creator: "invalid_address", Ip: "http://localhost:3333", - Totalspace: "1000000000", + TotalSpace: "1000000000", }, err: sdkerrors.ErrInvalidAddress, }, { @@ -26,7 +26,7 @@ func TestMsgInitProvider_ValidateBasic(t *testing.T) { msg: MsgInitProvider{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Ip: "fake/localhost:3333", - Totalspace: "1000000000", + TotalSpace: "1000000000", }, err: sdkerrors.ErrInvalidType, }, { @@ -34,7 +34,7 @@ func TestMsgInitProvider_ValidateBasic(t *testing.T) { msg: MsgInitProvider{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Ip: "https://node.jackalprotocol.com", - Totalspace: "abd", + TotalSpace: "abd", }, err: sdkerrors.ErrInvalidType, }, { @@ -42,14 +42,14 @@ func TestMsgInitProvider_ValidateBasic(t *testing.T) { msg: MsgInitProvider{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Ip: "https://node.jackalprotocol.com", - Totalspace: "1000000000", + TotalSpace: "1000000000", }, }, { name: "valid ip localhost", msg: MsgInitProvider{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Ip: "localhost:3333", - Totalspace: "1000000000", + TotalSpace: "1000000000", }, }, } diff --git a/x/storage/types/message_set_miner_totalspace.go b/x/storage/types/message_set_miner_totalspace.go index da7a0a94c..1fce7c6e4 100644 --- a/x/storage/types/message_set_miner_totalspace.go +++ b/x/storage/types/message_set_miner_totalspace.go @@ -9,26 +9,26 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -const TypeMsgSetProviderTotalspace = "set_provider_totalspace" +const TypeMsgSetProviderTotalSpace = "set_provider_total_space" -var _ sdk.Msg = &MsgSetProviderTotalspace{} +var _ sdk.Msg = &MsgSetProviderTotalSpace{} -func NewMsgSetProviderTotalspace(creator string, space string) *MsgSetProviderTotalspace { - return &MsgSetProviderTotalspace{ +func NewMsgSetProviderTotalSpace(creator string, space string) *MsgSetProviderTotalSpace { + return &MsgSetProviderTotalSpace{ Creator: creator, Space: space, } } -func (msg *MsgSetProviderTotalspace) Route() string { +func (msg *MsgSetProviderTotalSpace) Route() string { return RouterKey } -func (msg *MsgSetProviderTotalspace) Type() string { - return TypeMsgSetProviderTotalspace +func (msg *MsgSetProviderTotalSpace) Type() string { + return TypeMsgSetProviderTotalSpace } -func (msg *MsgSetProviderTotalspace) GetSigners() []sdk.AccAddress { +func (msg *MsgSetProviderTotalSpace) GetSigners() []sdk.AccAddress { creator, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { panic(err) @@ -36,12 +36,12 @@ func (msg *MsgSetProviderTotalspace) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{creator} } -func (msg *MsgSetProviderTotalspace) GetSignBytes() []byte { +func (msg *MsgSetProviderTotalSpace) GetSignBytes() []byte { bz := ModuleCdc.MustMarshalJSON(msg) return sdk.MustSortJSON(bz) } -func (msg *MsgSetProviderTotalspace) ValidateBasic() error { +func (msg *MsgSetProviderTotalSpace) ValidateBasic() error { prefix, _, err := bech32.DecodeAndConvert(msg.Creator) if err != nil { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) diff --git a/x/storage/types/message_set_miner_totalspace_test.go b/x/storage/types/message_set_miner_totalspace_test.go index 287e4abbf..2e503ed90 100644 --- a/x/storage/types/message_set_miner_totalspace_test.go +++ b/x/storage/types/message_set_miner_totalspace_test.go @@ -7,29 +7,29 @@ import ( "github.com/stretchr/testify/require" ) -func TestMsgSetProviderTotalspace_ValidateBasic(t *testing.T) { +func TestMsgSetProviderTotalSpace_ValidateBasic(t *testing.T) { tests := []struct { name string - msg MsgSetProviderTotalspace + msg MsgSetProviderTotalSpace err error }{ { name: "invalid address", - msg: MsgSetProviderTotalspace{ + msg: MsgSetProviderTotalSpace{ Creator: "invalid_address", Space: "1000000000", }, err: sdkerrors.ErrInvalidAddress, }, { name: "invalid ip", - msg: MsgSetProviderTotalspace{ + msg: MsgSetProviderTotalSpace{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Space: "abd", }, err: sdkerrors.ErrInvalidType, }, { name: "valid ip", - msg: MsgSetProviderTotalspace{ + msg: MsgSetProviderTotalSpace{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Space: "1000000000", }, diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index 9bfacb5b8..fe4a9ea1d 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -1182,22 +1182,22 @@ func (m *QueryAllReportResponse) GetPagination() *query.PageResponse { return nil } -type QueryFreespaceRequest struct { +type QueryFreeSpaceRequest struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryFreespaceRequest) Reset() { *m = QueryFreespaceRequest{} } -func (m *QueryFreespaceRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFreespaceRequest) ProtoMessage() {} -func (*QueryFreespaceRequest) Descriptor() ([]byte, []int) { +func (m *QueryFreeSpaceRequest) Reset() { *m = QueryFreeSpaceRequest{} } +func (m *QueryFreeSpaceRequest) String() string { return proto.CompactTextString(m) } +func (*QueryFreeSpaceRequest) ProtoMessage() {} +func (*QueryFreeSpaceRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{23} } -func (m *QueryFreespaceRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFreeSpaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFreespaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFreeSpaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFreespaceRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFreeSpaceRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1207,19 +1207,19 @@ func (m *QueryFreespaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byt return b[:n], nil } } -func (m *QueryFreespaceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFreespaceRequest.Merge(m, src) +func (m *QueryFreeSpaceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFreeSpaceRequest.Merge(m, src) } -func (m *QueryFreespaceRequest) XXX_Size() int { +func (m *QueryFreeSpaceRequest) XXX_Size() int { return m.Size() } -func (m *QueryFreespaceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFreespaceRequest.DiscardUnknown(m) +func (m *QueryFreeSpaceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFreeSpaceRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryFreespaceRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFreeSpaceRequest proto.InternalMessageInfo -func (m *QueryFreespaceRequest) GetAddress() string { +func (m *QueryFreeSpaceRequest) GetAddress() string { if m != nil { return m.Address } @@ -1270,22 +1270,22 @@ func (m *QueryStoreCountRequest) GetAddress() string { return "" } -type QueryFreespaceResponse struct { +type QueryFreeSpaceResponse struct { Space string `protobuf:"bytes,1,opt,name=space,proto3" json:"space,omitempty"` } -func (m *QueryFreespaceResponse) Reset() { *m = QueryFreespaceResponse{} } -func (m *QueryFreespaceResponse) String() string { return proto.CompactTextString(m) } -func (*QueryFreespaceResponse) ProtoMessage() {} -func (*QueryFreespaceResponse) Descriptor() ([]byte, []int) { +func (m *QueryFreeSpaceResponse) Reset() { *m = QueryFreeSpaceResponse{} } +func (m *QueryFreeSpaceResponse) String() string { return proto.CompactTextString(m) } +func (*QueryFreeSpaceResponse) ProtoMessage() {} +func (*QueryFreeSpaceResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{25} } -func (m *QueryFreespaceResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryFreeSpaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFreespaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFreeSpaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFreespaceResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFreeSpaceResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1295,19 +1295,19 @@ func (m *QueryFreespaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryFreespaceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFreespaceResponse.Merge(m, src) +func (m *QueryFreeSpaceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFreeSpaceResponse.Merge(m, src) } -func (m *QueryFreespaceResponse) XXX_Size() int { +func (m *QueryFreeSpaceResponse) XXX_Size() int { return m.Size() } -func (m *QueryFreespaceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFreespaceResponse.DiscardUnknown(m) +func (m *QueryFreeSpaceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFreeSpaceResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryFreespaceResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryFreeSpaceResponse proto.InternalMessageInfo -func (m *QueryFreespaceResponse) GetSpace() string { +func (m *QueryFreeSpaceResponse) GetSpace() string { if m != nil { return m.Space } @@ -1491,7 +1491,7 @@ func (m *QueryClientFreeSpaceRequest) GetAddress() string { } type QueryClientFreeSpaceResponse struct { - Bytesfree int64 `protobuf:"varint,1,opt,name=bytesfree,proto3" json:"bytesfree,omitempty"` + BytesFree int64 `protobuf:"varint,1,opt,name=bytes_free,json=bytesFree,proto3" json:"bytes_free,omitempty"` } func (m *QueryClientFreeSpaceResponse) Reset() { *m = QueryClientFreeSpaceResponse{} } @@ -1527,9 +1527,9 @@ func (m *QueryClientFreeSpaceResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryClientFreeSpaceResponse proto.InternalMessageInfo -func (m *QueryClientFreeSpaceResponse) GetBytesfree() int64 { +func (m *QueryClientFreeSpaceResponse) GetBytesFree() int64 { if m != nil { - return m.Bytesfree + return m.BytesFree } return 0 } @@ -2125,8 +2125,8 @@ var xxx_messageInfo_QueryStorageStatsRequest proto.InternalMessageInfo type QueryStorageStatsResponse struct { Purchased uint64 `protobuf:"varint,1,opt,name=purchased,proto3" json:"purchased,omitempty"` Used uint64 `protobuf:"varint,2,opt,name=used,proto3" json:"used,omitempty"` - UsedRatio github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=usedRatio,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"usedRatio"` - ActiveUsers uint64 `protobuf:"varint,4,opt,name=activeUsers,proto3" json:"activeUsers,omitempty"` + UsedRatio github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=used_ratio,json=usedRatio,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"used_ratio"` + ActiveUsers uint64 `protobuf:"varint,4,opt,name=active_users,json=activeUsers,proto3" json:"active_users,omitempty"` UsersByPlan map[int64]int64 `protobuf:"bytes,5,rep,name=users_by_plan,json=usersByPlan,proto3" json:"users_by_plan,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } @@ -2215,9 +2215,9 @@ func init() { proto.RegisterType((*QueryReportResponse)(nil), "canine_chain.storage.QueryReportResponse") proto.RegisterType((*QueryAllReportRequest)(nil), "canine_chain.storage.QueryAllReportRequest") proto.RegisterType((*QueryAllReportResponse)(nil), "canine_chain.storage.QueryAllReportResponse") - proto.RegisterType((*QueryFreespaceRequest)(nil), "canine_chain.storage.QueryFreespaceRequest") + proto.RegisterType((*QueryFreeSpaceRequest)(nil), "canine_chain.storage.QueryFreeSpaceRequest") proto.RegisterType((*QueryStoreCountRequest)(nil), "canine_chain.storage.QueryStoreCountRequest") - proto.RegisterType((*QueryFreespaceResponse)(nil), "canine_chain.storage.QueryFreespaceResponse") + proto.RegisterType((*QueryFreeSpaceResponse)(nil), "canine_chain.storage.QueryFreeSpaceResponse") proto.RegisterType((*QueryStoreCountResponse)(nil), "canine_chain.storage.QueryStoreCountResponse") proto.RegisterType((*QueryFindFileRequest)(nil), "canine_chain.storage.QueryFindFileRequest") proto.RegisterType((*QueryFindFileResponse)(nil), "canine_chain.storage.QueryFindFileResponse") @@ -2243,135 +2243,136 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 2045 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcd, 0x6f, 0x1c, 0x49, - 0x15, 0x4f, 0x79, 0x6c, 0x27, 0x7e, 0xf6, 0x92, 0x50, 0x78, 0x17, 0x33, 0x04, 0xc7, 0x69, 0xb1, - 0x89, 0x63, 0xe2, 0xee, 0x78, 0x92, 0x6c, 0x76, 0xbd, 0x4b, 0x36, 0x76, 0x16, 0x87, 0xac, 0xb2, - 0x8a, 0xd3, 0x21, 0x20, 0xad, 0x10, 0x4d, 0x79, 0xa6, 0x3c, 0x69, 0x3c, 0xd3, 0xdd, 0xdb, 0xdd, - 0x13, 0x18, 0x59, 0xbe, 0x2c, 0x12, 0x07, 0x0e, 0x68, 0xa5, 0x3d, 0x71, 0x62, 0xc5, 0x06, 0x21, - 0x0e, 0x08, 0x69, 0x41, 0x88, 0x2b, 0x48, 0x48, 0x7b, 0x63, 0x25, 0x2e, 0x88, 0x43, 0x84, 0x12, - 0xfe, 0x10, 0x54, 0x55, 0xaf, 0xbf, 0x66, 0x7a, 0xba, 0x7b, 0xa2, 0x11, 0x7b, 0xf2, 0x54, 0x75, - 0xbd, 0xf7, 0x7e, 0xef, 0xa3, 0x5e, 0xd5, 0xaf, 0x64, 0x58, 0x69, 0x32, 0xc7, 0x76, 0xb8, 0xd5, - 0x7c, 0xc8, 0x6c, 0xc7, 0x08, 0x42, 0xd7, 0x67, 0x6d, 0x6e, 0xbc, 0xd7, 0xe3, 0x7e, 0x5f, 0xf7, - 0x7c, 0x37, 0x74, 0xe9, 0x62, 0x7a, 0x85, 0x8e, 0x2b, 0xea, 0x8b, 0x6d, 0xb7, 0xed, 0xca, 0x05, - 0x86, 0xf8, 0xa5, 0xd6, 0xd6, 0x4f, 0xb7, 0x5d, 0xb7, 0xdd, 0xe1, 0x06, 0xf3, 0x6c, 0x83, 0x39, - 0x8e, 0x1b, 0xb2, 0xd0, 0x76, 0x9d, 0x00, 0xbf, 0xae, 0x35, 0xdd, 0xa0, 0xeb, 0x06, 0xc6, 0x1e, - 0x0b, 0xd0, 0x84, 0xf1, 0x68, 0x63, 0x8f, 0x87, 0x6c, 0xc3, 0xf0, 0x58, 0xdb, 0x76, 0xe4, 0x62, - 0x5c, 0x7b, 0x36, 0x17, 0x97, 0xc7, 0x7c, 0xd6, 0x8d, 0xd4, 0x9d, 0xcf, 0x5d, 0xc2, 0x9a, 0xa1, - 0xfd, 0x88, 0x5b, 0x2d, 0xce, 0x3a, 0xd1, 0xc2, 0xaf, 0xe7, 0xeb, 0xf2, 0xdd, 0x47, 0x76, 0x8b, - 0xfb, 0xc5, 0xea, 0x3c, 0xd6, 0xef, 0x72, 0x27, 0xb4, 0x6c, 0x67, 0x1f, 0x9d, 0xd4, 0x16, 0x81, - 0xde, 0x13, 0xe0, 0x77, 0x25, 0x18, 0x93, 0xbf, 0xd7, 0xe3, 0x41, 0xa8, 0xdd, 0x83, 0x2f, 0x65, - 0x66, 0x03, 0xcf, 0x75, 0x02, 0x4e, 0x37, 0x61, 0x56, 0x81, 0x5e, 0x22, 0x2b, 0x64, 0x75, 0xbe, - 0x71, 0x5a, 0xcf, 0x0b, 0xa7, 0xae, 0xa4, 0xb6, 0xa7, 0x3f, 0x7d, 0x72, 0xe6, 0x98, 0x89, 0x12, - 0xda, 0xfb, 0x04, 0xbe, 0xa8, 0x74, 0xfa, 0xae, 0xbb, 0x8f, 0x86, 0xe8, 0x05, 0x38, 0x15, 0x41, - 0xb7, 0x58, 0xab, 0xe5, 0xf3, 0x40, 0xe9, 0x9e, 0x33, 0x4f, 0x46, 0xf3, 0x5b, 0x6a, 0x9a, 0xbe, - 0x04, 0xb3, 0x5d, 0xee, 0x1f, 0x74, 0xf8, 0xd2, 0xd4, 0x0a, 0x59, 0x5d, 0x30, 0x71, 0x44, 0x17, - 0x61, 0xc6, 0xfd, 0xb1, 0xc3, 0xfd, 0xa5, 0x9a, 0x94, 0x53, 0x03, 0x31, 0x1b, 0x84, 0xcc, 0x0f, - 0x97, 0xa6, 0x57, 0xc8, 0x6a, 0xcd, 0x54, 0x03, 0xed, 0x5e, 0xe4, 0xad, 0xc2, 0x80, 0x6e, 0xbd, - 0x0e, 0x33, 0x9e, 0x98, 0x40, 0xaf, 0xce, 0xe4, 0x7b, 0xb5, 0x63, 0x77, 0xb8, 0x94, 0x43, 0xc7, - 0x94, 0x8c, 0xf6, 0x01, 0x81, 0xaf, 0x26, 0x3a, 0x83, 0xed, 0x3e, 0xe2, 0x7d, 0x0e, 0x0f, 0x77, - 0x00, 0x92, 0xd2, 0x91, 0x5e, 0xce, 0x37, 0xce, 0xe9, 0xaa, 0xce, 0x74, 0x51, 0x67, 0xba, 0x2a, - 0x65, 0xac, 0x33, 0x7d, 0x97, 0xb5, 0x39, 0x9a, 0x31, 0x53, 0x92, 0xda, 0x63, 0x02, 0xa7, 0xf3, - 0x21, 0x0d, 0x3b, 0x5c, 0x1b, 0xd7, 0x61, 0x7a, 0x2b, 0x07, 0xe5, 0xf9, 0x52, 0x94, 0xca, 0x72, - 0x06, 0xe6, 0x77, 0xe1, 0x94, 0x44, 0x29, 0xec, 0x44, 0xd1, 0x4a, 0x92, 0x4c, 0xf2, 0x93, 0x3c, - 0x95, 0x9b, 0xe4, 0x5a, 0x3a, 0xc9, 0xbb, 0x58, 0x68, 0x4a, 0x6f, 0xec, 0xf2, 0xf4, 0xbe, 0x8d, - 0x6a, 0xe7, 0x1b, 0x67, 0xf3, 0x3d, 0x7e, 0xe0, 0xd8, 0xfb, 0x36, 0x6f, 0x09, 0x41, 0xf4, 0x59, - 0x0a, 0x69, 0x3f, 0x80, 0x45, 0xa9, 0x71, 0xab, 0xd3, 0x11, 0xdf, 0xe2, 0xdc, 0x66, 0x13, 0x46, - 0x9e, 0x3b, 0x61, 0x3f, 0x27, 0xf0, 0xa2, 0x34, 0x70, 0xd7, 0xe3, 0x4e, 0xc6, 0xc2, 0xe7, 0x50, - 0x3d, 0xbf, 0x8a, 0xc0, 0x24, 0xde, 0x62, 0x0c, 0xbf, 0x09, 0x33, 0x22, 0x1c, 0x01, 0x96, 0x4d, - 0xe5, 0x20, 0x2a, 0xa9, 0xc9, 0x15, 0xce, 0x25, 0x4c, 0xc7, 0x2e, 0x46, 0x20, 0x0a, 0xd6, 0x12, - 0x1c, 0xcf, 0xc6, 0x28, 0x1a, 0x6a, 0xdf, 0x47, 0x97, 0x12, 0x09, 0x74, 0xe9, 0x26, 0xcc, 0xc5, - 0xad, 0xb3, 0x78, 0xfb, 0x47, 0xa2, 0x51, 0x5f, 0x4b, 0xe4, 0xb4, 0x3d, 0x58, 0x8a, 0x02, 0x16, - 0xaf, 0x9a, 0x74, 0x89, 0xfc, 0x8e, 0xc0, 0x57, 0x72, 0x8c, 0xe4, 0xbb, 0x51, 0x7b, 0x1e, 0x37, - 0x26, 0x97, 0x9f, 0x1e, 0x7c, 0x59, 0x41, 0x0d, 0x43, 0x1e, 0xa8, 0x53, 0x33, 0xb5, 0xbf, 0x85, - 0x41, 0xee, 0x63, 0x86, 0x70, 0x34, 0x91, 0xe6, 0x6e, 0x47, 0x69, 0x48, 0x9b, 0xc5, 0x00, 0xbd, - 0x03, 0xf3, 0x2c, 0x99, 0xc6, 0x3c, 0xbc, 0x9c, 0x1f, 0xa2, 0x94, 0xfc, 0x8e, 0xeb, 0x77, 0x31, - 0x50, 0x69, 0x79, 0x8d, 0x63, 0xcf, 0xdf, 0xea, 0x74, 0x52, 0xab, 0x27, 0x9e, 0xf4, 0xbf, 0x44, - 0x8d, 0x7c, 0xc8, 0x0e, 0xba, 0x75, 0x17, 0x16, 0x52, 0xb0, 0xa2, 0xd4, 0x8f, 0xe5, 0x57, 0x46, - 0xc1, 0xe4, 0x6a, 0xc0, 0xc3, 0x93, 0xd6, 0xe4, 0x9e, 0xeb, 0x87, 0xff, 0x8f, 0xf4, 0x3f, 0xc0, - 0x3b, 0x4b, 0x64, 0x11, 0x43, 0x74, 0x1d, 0x66, 0x7d, 0x39, 0x83, 0x79, 0x58, 0xc9, 0x0f, 0x8e, - 0x92, 0x4a, 0xc5, 0x05, 0xa5, 0x34, 0x2b, 0xe9, 0x86, 0x59, 0x5f, 0x26, 0x95, 0xe4, 0x8f, 0x09, - 0xbc, 0x34, 0x68, 0x01, 0xb1, 0xdf, 0x80, 0xe3, 0x0a, 0x45, 0x94, 0xd9, 0xaa, 0xe0, 0x23, 0xb1, - 0xc9, 0xe5, 0x73, 0x03, 0xc3, 0xb0, 0xe3, 0x73, 0x1e, 0x78, 0xac, 0xc9, 0xcb, 0x9b, 0x6e, 0x03, - 0xfd, 0xba, 0x1f, 0xba, 0x3e, 0xbf, 0xe9, 0xf6, 0x9c, 0xb0, 0x5c, 0x46, 0x47, 0x99, 0x94, 0x19, - 0x8c, 0x85, 0x48, 0xba, 0x98, 0x40, 0x09, 0x35, 0xd0, 0x0c, 0x6c, 0x35, 0x69, 0x1b, 0x89, 0x40, - 0x53, 0x4c, 0x44, 0x02, 0x72, 0xa0, 0xe9, 0x78, 0x76, 0xec, 0xd8, 0x4e, 0xab, 0xc2, 0xc5, 0x43, - 0xdb, 0x8c, 0xfc, 0x8e, 0xd7, 0xa3, 0xfa, 0xb3, 0xb0, 0x10, 0x9f, 0xcc, 0xb6, 0x17, 0x39, 0x32, - 0x1f, 0xcd, 0xdd, 0xf6, 0x02, 0xed, 0x1a, 0x76, 0x89, 0x9b, 0x1d, 0x9b, 0x3b, 0xa1, 0x70, 0xe9, - 0x7e, 0xb5, 0xc8, 0xbd, 0x81, 0xdb, 0x7e, 0x48, 0x10, 0x6d, 0x9f, 0x86, 0xb9, 0xbd, 0x7e, 0xc8, - 0x83, 0x7d, 0x9f, 0x2b, 0xbc, 0x35, 0x33, 0x99, 0xd0, 0x8c, 0xf8, 0xf2, 0xde, 0x7f, 0x8b, 0x85, - 0xac, 0xdc, 0xdc, 0xfd, 0xe8, 0x3c, 0x8d, 0x04, 0xd0, 0xcc, 0xcb, 0xf0, 0x85, 0xd0, 0xee, 0x72, - 0xcb, 0xe7, 0x5d, 0x66, 0x3b, 0xb6, 0xd3, 0x46, 0x5b, 0x2f, 0x88, 0x59, 0x33, 0x9a, 0x14, 0x81, - 0x96, 0xc6, 0x65, 0x79, 0xd5, 0x4c, 0x35, 0xd0, 0x36, 0x61, 0x39, 0xce, 0x0c, 0x6b, 0xf3, 0x5d, - 0x45, 0x3d, 0x6e, 0x3b, 0xfb, 0x6e, 0x39, 0xa0, 0x9f, 0x12, 0x38, 0x33, 0x52, 0x18, 0xc1, 0xfd, - 0x10, 0x16, 0xb1, 0xfc, 0xad, 0x34, 0xad, 0xc1, 0x8d, 0xb8, 0x9a, 0xbf, 0x51, 0x86, 0xf5, 0xe1, - 0x86, 0xa1, 0xc1, 0xd0, 0x17, 0xed, 0x00, 0xce, 0x46, 0xfb, 0x72, 0xb4, 0x13, 0x93, 0xea, 0x02, - 0xff, 0x20, 0xa0, 0x15, 0x59, 0x2b, 0xf5, 0xba, 0x36, 0x19, 0xaf, 0x27, 0xd7, 0x31, 0xde, 0xc1, - 0xea, 0x17, 0xbb, 0xe6, 0x81, 0xd7, 0x71, 0x59, 0xeb, 0xe6, 0x43, 0xde, 0x3c, 0x28, 0xcd, 0xfe, - 0x88, 0x7a, 0xba, 0x82, 0x7b, 0x62, 0x48, 0x5d, 0xb2, 0xdd, 0x1f, 0xb1, 0x8e, 0xdd, 0x92, 0xda, - 0x4e, 0x98, 0x6a, 0xa0, 0xbd, 0x8d, 0xfd, 0x64, 0xd7, 0xb7, 0x9b, 0x3c, 0x63, 0xbf, 0x0e, 0x27, - 0x5a, 0x3d, 0x3f, 0x49, 0xdb, 0x9c, 0x19, 0x8f, 0x47, 0x20, 0x88, 0x7a, 0x4d, 0x5a, 0x57, 0x62, - 0xdc, 0x13, 0xb3, 0xb8, 0x41, 0xd4, 0x40, 0xfb, 0x5a, 0x74, 0x4b, 0x90, 0x2c, 0x7e, 0xf0, 0x6a, - 0xa8, 0xd9, 0xd1, 0xe1, 0x3e, 0xf8, 0x19, 0x95, 0xde, 0x1e, 0xbe, 0xd4, 0x8d, 0x3a, 0xd9, 0xb3, - 0x1a, 0x86, 0x6f, 0xa8, 0x75, 0xbc, 0x1a, 0x61, 0x25, 0xdc, 0x0f, 0x59, 0x18, 0xc3, 0x78, 0x36, - 0x85, 0x37, 0xcb, 0xec, 0xc7, 0xa4, 0xd5, 0x78, 0x3d, 0xbf, 0xf9, 0x90, 0x05, 0x5c, 0x85, 0x76, - 0xda, 0x4c, 0x26, 0x28, 0x85, 0xe9, 0x9e, 0xf8, 0x30, 0x25, 0x3f, 0xc8, 0xdf, 0xf4, 0x0e, 0xcc, - 0x89, 0xbf, 0xa6, 0x08, 0xa5, 0x3c, 0xb7, 0x17, 0xb6, 0x75, 0x81, 0xe7, 0xdf, 0x4f, 0xce, 0x9c, - 0x6b, 0xdb, 0xe1, 0xc3, 0xde, 0x9e, 0xde, 0x74, 0xbb, 0x06, 0x3e, 0x9f, 0xa8, 0x3f, 0xeb, 0x41, - 0xeb, 0xc0, 0x08, 0xfb, 0x1e, 0x0f, 0xf4, 0xb7, 0x78, 0xd3, 0x4c, 0x14, 0xd0, 0x15, 0x98, 0x57, - 0x8f, 0x20, 0x0f, 0x02, 0x11, 0x86, 0x69, 0x69, 0x28, 0x3d, 0x45, 0x5b, 0xf0, 0x42, 0x4f, 0xfc, - 0xb0, 0xf6, 0xfa, 0x96, 0xd7, 0x61, 0xce, 0xd2, 0x8c, 0x0c, 0xd5, 0x8d, 0xfc, 0x50, 0x8d, 0xf4, - 0x54, 0x97, 0xda, 0xb6, 0xfb, 0xbb, 0x1d, 0xe6, 0x7c, 0xcb, 0x09, 0xfd, 0xbe, 0x39, 0xdf, 0x4b, - 0x66, 0xea, 0xd7, 0xe1, 0xd4, 0xe0, 0x02, 0x7a, 0x0a, 0x6a, 0x07, 0xbc, 0x8f, 0x39, 0x17, 0x3f, - 0xb1, 0x08, 0x7b, 0x3c, 0x2a, 0x1c, 0x39, 0xd8, 0x9c, 0x7a, 0x95, 0x34, 0x7e, 0xb6, 0x0c, 0x33, - 0xd2, 0x36, 0xfd, 0x05, 0x81, 0x59, 0xf5, 0x42, 0x42, 0x57, 0x0b, 0x30, 0x66, 0x1e, 0x64, 0xea, - 0x17, 0x2a, 0xac, 0x54, 0x7e, 0x68, 0xc6, 0xfb, 0xff, 0xfc, 0xef, 0x87, 0x53, 0x17, 0xe8, 0x79, - 0xe3, 0x47, 0xac, 0x79, 0xc0, 0x3a, 0xeb, 0x2d, 0xe6, 0x1a, 0x4a, 0x7a, 0x3d, 0xef, 0x01, 0x8a, - 0x7e, 0x44, 0x60, 0x5a, 0xec, 0x2a, 0x7a, 0xae, 0xc0, 0x48, 0xea, 0xac, 0xac, 0x9f, 0x2f, 0x5d, - 0x87, 0x50, 0x6e, 0x49, 0x28, 0x5b, 0xf4, 0xcd, 0x52, 0x28, 0x92, 0x21, 0x1a, 0x87, 0xea, 0xd0, - 0x3d, 0x32, 0x0e, 0xe5, 0x45, 0xef, 0xc8, 0x38, 0x94, 0x57, 0xbb, 0x23, 0xfa, 0x21, 0x81, 0x13, - 0x92, 0x8b, 0x6e, 0x75, 0x3a, 0x74, 0xad, 0xc0, 0xfc, 0x00, 0x43, 0xaf, 0x7f, 0xa3, 0xd2, 0x5a, - 0x84, 0xab, 0x4b, 0xb8, 0xab, 0xf4, 0x5c, 0x35, 0xb8, 0xf4, 0xf7, 0x04, 0xe6, 0x62, 0xc6, 0x4e, - 0x8b, 0x4c, 0x0d, 0xf2, 0xfa, 0xf1, 0x70, 0xed, 0x48, 0x5c, 0x37, 0xe8, 0xf5, 0x52, 0x5c, 0xae, - 0xc7, 0x1d, 0x0b, 0x63, 0x39, 0xf8, 0x6e, 0x70, 0x44, 0xff, 0x4c, 0x60, 0x46, 0x3e, 0xe8, 0xd0, - 0xa2, 0x0c, 0xa6, 0xdf, 0xe7, 0xea, 0xab, 0xe5, 0x0b, 0x11, 0xe4, 0xbb, 0x12, 0xe4, 0x77, 0xa8, - 0x59, 0x5e, 0x76, 0x42, 0x2e, 0x07, 0xdf, 0xe8, 0xf4, 0xff, 0x9a, 0xc0, 0x5c, 0xdc, 0xdd, 0x0a, - 0xf3, 0x3f, 0xf0, 0x24, 0x50, 0x18, 0xe7, 0xc1, 0xc7, 0x00, 0xed, 0x0d, 0xe9, 0xc2, 0x2b, 0xf4, - 0x4a, 0x15, 0x17, 0x14, 0x18, 0xe3, 0x30, 0x8e, 0xee, 0xc7, 0x04, 0x16, 0x62, 0x90, 0xa2, 0x4e, - 0xf5, 0xe2, 0x1c, 0x0f, 0x9e, 0x07, 0x75, 0xa3, 0xf2, 0x7a, 0xc4, 0xdb, 0x90, 0x78, 0x2f, 0xd2, - 0xb5, 0xea, 0x78, 0xe9, 0xdf, 0x09, 0xcc, 0xa7, 0x88, 0x20, 0x5d, 0x2f, 0x32, 0x3a, 0xc4, 0xdf, - 0xeb, 0x7a, 0xd5, 0xe5, 0x08, 0xf1, 0x7b, 0x12, 0xe2, 0x3d, 0x7a, 0xb7, 0x14, 0x62, 0x9a, 0x86, - 0xaa, 0xe2, 0x90, 0x15, 0x30, 0xaa, 0x24, 0xfe, 0x40, 0xe0, 0x64, 0x9a, 0x12, 0x8b, 0x80, 0x6f, - 0x14, 0x07, 0x30, 0x87, 0xa9, 0xd7, 0x1b, 0xe3, 0x88, 0xa0, 0x4f, 0x57, 0xa5, 0x4f, 0x06, 0x5d, - 0x1f, 0xcb, 0x27, 0xfa, 0x09, 0x81, 0xe3, 0x26, 0xd2, 0xb2, 0xa2, 0x6d, 0x95, 0x61, 0x99, 0x85, - 0x8d, 0x3f, 0xcb, 0x16, 0x35, 0x53, 0xe2, 0xba, 0x43, 0xdf, 0x2e, 0xc5, 0x85, 0xec, 0xb0, 0x42, - 0x98, 0x7f, 0x49, 0x00, 0x10, 0xb4, 0x88, 0x70, 0x49, 0xdb, 0xca, 0x42, 0xbf, 0x58, 0x6d, 0x31, - 0xa2, 0xbf, 0x24, 0xd1, 0xaf, 0xd1, 0xd5, 0xaa, 0xe8, 0xe9, 0x63, 0x02, 0x73, 0x31, 0x4f, 0x2c, - 0x84, 0x36, 0x48, 0x5a, 0x0b, 0xa1, 0x0d, 0x51, 0xcf, 0x31, 0xfa, 0xc2, 0x7e, 0x24, 0x9b, 0xea, - 0x0b, 0xbf, 0x21, 0x00, 0x09, 0x3d, 0xa5, 0x17, 0x4b, 0xee, 0x25, 0x19, 0xa6, 0x5c, 0x5f, 0xaf, - 0xb8, 0x1a, 0x91, 0x6e, 0x4a, 0xa4, 0x57, 0x68, 0xa3, 0x14, 0xa9, 0xf8, 0x6b, 0x3b, 0xed, 0x14, - 0xce, 0x8f, 0xe4, 0x19, 0xab, 0x58, 0x6e, 0x61, 0x8f, 0x1d, 0xa0, 0xce, 0x85, 0x3d, 0x76, 0x90, - 0x36, 0x6b, 0xaf, 0x4b, 0x84, 0x57, 0xe9, 0xe5, 0x0a, 0x67, 0xac, 0xd3, 0x92, 0x67, 0x59, 0x5c, - 0x9d, 0xa2, 0x79, 0xd1, 0x5b, 0x3c, 0x1c, 0xa0, 0xc5, 0x85, 0xfb, 0x3e, 0x9f, 0x7b, 0x17, 0xee, - 0xfb, 0x11, 0xac, 0x5b, 0xfb, 0xb6, 0x84, 0xbe, 0x4d, 0x6f, 0x94, 0x42, 0x6f, 0xf3, 0xd0, 0x6a, - 0x4a, 0x2d, 0x96, 0xa8, 0x08, 0x6b, 0xb0, 0x24, 0x1e, 0x13, 0x80, 0x5b, 0x3c, 0x44, 0xbe, 0x4d, - 0x8b, 0x2f, 0x77, 0x69, 0x12, 0x5f, 0x5f, 0xab, 0xb2, 0x14, 0xf1, 0xbe, 0x29, 0xf1, 0xbe, 0x46, - 0xaf, 0x55, 0xc2, 0xeb, 0xb1, 0xbe, 0xd5, 0x62, 0x21, 0x4b, 0xc1, 0xfc, 0x1b, 0x01, 0x3a, 0xcc, - 0x1d, 0xe9, 0x95, 0xf2, 0x9b, 0xf5, 0x30, 0x51, 0xae, 0x5f, 0x1d, 0x53, 0x6a, 0x6c, 0x27, 0xd2, - 0x7c, 0x38, 0xe5, 0xc4, 0x5f, 0x09, 0xbc, 0x38, 0xac, 0x5f, 0x34, 0xb3, 0x6b, 0xc5, 0xfd, 0x69, - 0xb4, 0x2b, 0xaf, 0x8e, 0x2f, 0x38, 0xf6, 0xd1, 0x91, 0xf6, 0x86, 0xfe, 0x89, 0xc0, 0xc9, 0x01, - 0xde, 0x5b, 0x58, 0xf4, 0xf9, 0x94, 0xbb, 0xb0, 0xe8, 0x47, 0xd0, 0xea, 0x31, 0x3a, 0x8a, 0xd8, - 0xaa, 0x56, 0x4f, 0xaa, 0xb0, 0x9a, 0x12, 0xe2, 0x27, 0x04, 0x20, 0x21, 0xcb, 0x85, 0x9d, 0x6f, - 0x88, 0x9f, 0x17, 0x76, 0xbe, 0x61, 0x06, 0x3e, 0x06, 0xd5, 0x90, 0xdc, 0x5c, 0x21, 0x34, 0x0e, - 0x23, 0xca, 0x7f, 0x64, 0x1c, 0x4a, 0x92, 0x7f, 0x44, 0xff, 0x28, 0x2e, 0x16, 0x59, 0x3e, 0x5d, - 0x7c, 0xb1, 0xc8, 0x25, 0xf7, 0xc5, 0x17, 0x8b, 0x7c, 0xc2, 0xaf, 0xbd, 0x26, 0x7d, 0xb8, 0x4c, - 0x37, 0xca, 0x2f, 0x16, 0xea, 0xff, 0x02, 0x92, 0x6b, 0xdd, 0x6f, 0x09, 0x2c, 0xa4, 0x59, 0x6d, - 0xe1, 0xe5, 0x33, 0xe7, 0x15, 0xa0, 0xf0, 0xf2, 0x99, 0x47, 0x97, 0xb5, 0x57, 0x24, 0xd8, 0x4b, - 0x54, 0xaf, 0x74, 0xd4, 0xb0, 0x36, 0xb7, 0xc4, 0x4d, 0x28, 0xd8, 0xbe, 0xf3, 0xe9, 0xd3, 0x65, - 0xf2, 0xd9, 0xd3, 0x65, 0xf2, 0x9f, 0xa7, 0xcb, 0xe4, 0x83, 0x67, 0xcb, 0xc7, 0x3e, 0x7b, 0xb6, - 0x7c, 0xec, 0x5f, 0xcf, 0x96, 0x8f, 0xbd, 0xdb, 0x48, 0xbd, 0x0e, 0x28, 0x9d, 0x77, 0xd8, 0x5e, - 0x90, 0xd5, 0xf9, 0x93, 0x58, 0xab, 0x7c, 0x2d, 0xd8, 0x9b, 0x95, 0xff, 0xc5, 0x70, 0xf9, 0x7f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x42, 0xfb, 0x11, 0xb9, 0xfa, 0x21, 0x00, 0x00, + // 2060 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcf, 0x6f, 0x1c, 0x49, + 0x15, 0x4e, 0x79, 0x6c, 0x27, 0xf3, 0xec, 0x25, 0xa1, 0xf0, 0x2e, 0x66, 0xc8, 0x3a, 0x4e, 0x8b, + 0x4d, 0x1c, 0x13, 0x77, 0xc7, 0x93, 0x64, 0xb3, 0xeb, 0x25, 0xd9, 0xd8, 0x59, 0x1c, 0xb2, 0x4a, + 0x14, 0xa7, 0x43, 0x40, 0x5a, 0x21, 0x9a, 0xf2, 0x4c, 0x79, 0xd2, 0x78, 0xa6, 0xbb, 0xb7, 0xbb, + 0xc7, 0x30, 0xb2, 0x7c, 0x59, 0x0e, 0x48, 0x1c, 0xd0, 0x4a, 0x7b, 0xe2, 0xc4, 0x8a, 0xdd, 0x15, + 0xe2, 0x80, 0x90, 0x16, 0x84, 0xb8, 0x82, 0x84, 0xb4, 0x37, 0x56, 0xe2, 0x82, 0x38, 0x44, 0x28, + 0x81, 0xff, 0x03, 0x55, 0xd5, 0xeb, 0xe9, 0xee, 0x99, 0x9e, 0xee, 0x9e, 0x68, 0x04, 0x27, 0x4f, + 0x55, 0xd7, 0x7b, 0xef, 0x7b, 0x3f, 0xea, 0x55, 0x7d, 0x25, 0xc3, 0x72, 0x83, 0x39, 0xb6, 0xc3, + 0xad, 0xc6, 0x63, 0x66, 0x3b, 0x46, 0x10, 0xba, 0x3e, 0x6b, 0x71, 0xe3, 0xdd, 0x2e, 0xf7, 0x7b, + 0xba, 0xe7, 0xbb, 0xa1, 0x4b, 0x17, 0x92, 0x2b, 0x74, 0x5c, 0x51, 0x5b, 0x68, 0xb9, 0x2d, 0x57, + 0x2e, 0x30, 0xc4, 0x2f, 0xb5, 0xb6, 0x76, 0xba, 0xe5, 0xba, 0xad, 0x36, 0x37, 0x98, 0x67, 0x1b, + 0xcc, 0x71, 0xdc, 0x90, 0x85, 0xb6, 0xeb, 0x04, 0xf8, 0x75, 0xb5, 0xe1, 0x06, 0x1d, 0x37, 0x30, + 0x76, 0x59, 0x80, 0x26, 0x8c, 0x83, 0xf5, 0x5d, 0x1e, 0xb2, 0x75, 0xc3, 0x63, 0x2d, 0xdb, 0x91, + 0x8b, 0x71, 0xed, 0xd9, 0x4c, 0x5c, 0x1e, 0xf3, 0x59, 0x27, 0x52, 0x77, 0x3e, 0x73, 0x09, 0x6b, + 0x84, 0xf6, 0x01, 0xb7, 0x9a, 0x9c, 0xb5, 0xa3, 0x85, 0x5f, 0xcb, 0xd6, 0xe5, 0xbb, 0x07, 0x76, + 0x93, 0xfb, 0xf9, 0xea, 0x3c, 0xd6, 0xeb, 0x70, 0x27, 0xb4, 0x6c, 0x67, 0x0f, 0x9d, 0xd4, 0x16, + 0x80, 0x3e, 0x10, 0xe0, 0x77, 0x24, 0x18, 0x93, 0xbf, 0xdb, 0xe5, 0x41, 0xa8, 0x3d, 0x80, 0x2f, + 0xa5, 0x66, 0x03, 0xcf, 0x75, 0x02, 0x4e, 0x37, 0x60, 0x56, 0x81, 0x5e, 0x24, 0xcb, 0x64, 0x65, + 0xae, 0x7e, 0x5a, 0xcf, 0x0a, 0xa7, 0xae, 0xa4, 0xb6, 0xa6, 0x3f, 0x7b, 0x72, 0xe6, 0x98, 0x89, + 0x12, 0xda, 0x7b, 0x04, 0xbe, 0xa8, 0x74, 0xfa, 0xae, 0xbb, 0x87, 0x86, 0xe8, 0x05, 0x38, 0x15, + 0x41, 0xb7, 0x58, 0xb3, 0xe9, 0xf3, 0x40, 0xe9, 0xae, 0x9a, 0x27, 0xa3, 0xf9, 0x4d, 0x35, 0x4d, + 0x5f, 0x82, 0xd9, 0x0e, 0xf7, 0xf7, 0xdb, 0x7c, 0x71, 0x6a, 0x99, 0xac, 0xcc, 0x9b, 0x38, 0xa2, + 0x0b, 0x30, 0xe3, 0xfe, 0xc8, 0xe1, 0xfe, 0x62, 0x45, 0xca, 0xa9, 0x81, 0x98, 0x0d, 0x42, 0xe6, + 0x87, 0x8b, 0xd3, 0xcb, 0x64, 0xa5, 0x62, 0xaa, 0x81, 0xf6, 0x20, 0xf2, 0x56, 0x61, 0x40, 0xb7, + 0xde, 0x80, 0x19, 0x4f, 0x4c, 0xa0, 0x57, 0x67, 0xb2, 0xbd, 0xda, 0xb6, 0xdb, 0x5c, 0xca, 0xa1, + 0x63, 0x4a, 0x46, 0x7b, 0x9f, 0xc0, 0x57, 0x63, 0x9d, 0xc1, 0x56, 0x0f, 0xf1, 0x3e, 0x87, 0x87, + 0xdb, 0x00, 0x71, 0xe9, 0x48, 0x2f, 0xe7, 0xea, 0xe7, 0x74, 0x55, 0x67, 0xba, 0xa8, 0x33, 0x5d, + 0x95, 0x32, 0xd6, 0x99, 0xbe, 0xc3, 0x5a, 0x1c, 0xcd, 0x98, 0x09, 0x49, 0xed, 0x63, 0x02, 0xa7, + 0xb3, 0x21, 0x0d, 0x3b, 0x5c, 0x19, 0xd7, 0x61, 0x7a, 0x3b, 0x03, 0xe5, 0xf9, 0x42, 0x94, 0xca, + 0x72, 0x0a, 0xe6, 0x77, 0xe0, 0x94, 0x44, 0x29, 0xec, 0x44, 0xd1, 0x8a, 0x93, 0x4c, 0xb2, 0x93, + 0x3c, 0x95, 0x99, 0xe4, 0x4a, 0x32, 0xc9, 0x3b, 0x58, 0x68, 0x4a, 0x6f, 0xdf, 0xe5, 0xe9, 0x3d, + 0x1b, 0xd5, 0xce, 0xd5, 0xcf, 0x66, 0x7b, 0xfc, 0xc8, 0xb1, 0xf7, 0x6c, 0xde, 0x14, 0x82, 0xe8, + 0xb3, 0x14, 0xd2, 0xbe, 0x0f, 0x0b, 0x52, 0xe3, 0x66, 0xbb, 0x2d, 0xbe, 0xf5, 0x73, 0x9b, 0x4e, + 0x18, 0x79, 0xee, 0x84, 0xfd, 0x8c, 0xc0, 0x8b, 0xd2, 0xc0, 0x7d, 0x8f, 0x3b, 0x29, 0x0b, 0xff, + 0x87, 0xea, 0xf9, 0x65, 0x04, 0x26, 0xf6, 0x16, 0x63, 0x78, 0x1d, 0x66, 0x44, 0x38, 0x02, 0x2c, + 0x9b, 0xd2, 0x41, 0x54, 0x52, 0x93, 0x2b, 0x9c, 0x4b, 0x98, 0x8e, 0x1d, 0x8c, 0x40, 0x14, 0xac, + 0x45, 0x38, 0x9e, 0x8e, 0x51, 0x34, 0xd4, 0xbe, 0x87, 0x2e, 0xc5, 0x12, 0xe8, 0xd2, 0x2d, 0xa8, + 0xf6, 0x5b, 0x67, 0xfe, 0xf6, 0x8f, 0x44, 0xa3, 0xbe, 0x16, 0xcb, 0x69, 0xbb, 0xb0, 0x18, 0x05, + 0xac, 0xbf, 0x6a, 0xd2, 0x25, 0xf2, 0x1b, 0x02, 0x5f, 0xc9, 0x30, 0x92, 0xed, 0x46, 0xe5, 0x79, + 0xdc, 0x98, 0x5c, 0x7e, 0xba, 0xf0, 0x65, 0x05, 0x35, 0x0c, 0x79, 0xa0, 0x4e, 0xcd, 0xc4, 0xfe, + 0x16, 0x06, 0xb9, 0x8f, 0x19, 0xc2, 0xd1, 0x44, 0x9a, 0xbb, 0x1d, 0xa5, 0x21, 0x69, 0x16, 0x03, + 0x74, 0x0f, 0xe6, 0x58, 0x3c, 0x8d, 0x79, 0x78, 0x25, 0x3b, 0x44, 0x09, 0xf9, 0x6d, 0xd7, 0xef, + 0x60, 0xa0, 0x92, 0xf2, 0x1a, 0xc7, 0x9e, 0xbf, 0xd9, 0x6e, 0x27, 0x56, 0x4f, 0x3c, 0xe9, 0x7f, + 0x8a, 0x1a, 0xf9, 0x90, 0x1d, 0x74, 0xeb, 0x3e, 0xcc, 0x27, 0x60, 0x45, 0xa9, 0x1f, 0xcb, 0xaf, + 0x94, 0x82, 0xc9, 0xd5, 0x80, 0x87, 0x27, 0xad, 0xc9, 0x3d, 0xd7, 0x0f, 0xff, 0x17, 0xe9, 0x7f, + 0x84, 0x77, 0x96, 0xc8, 0x22, 0x86, 0xe8, 0x06, 0xcc, 0xfa, 0x72, 0x06, 0xf3, 0xb0, 0x9c, 0x1d, + 0x1c, 0x25, 0x95, 0x88, 0x0b, 0x4a, 0x69, 0x56, 0xdc, 0x0d, 0xd3, 0xbe, 0x4c, 0x2a, 0xc9, 0x1f, + 0x11, 0x78, 0x69, 0xd0, 0x02, 0x62, 0xbf, 0x09, 0xc7, 0x15, 0x8a, 0x28, 0xb3, 0x65, 0xc1, 0x47, + 0x62, 0x93, 0xcb, 0xe7, 0x3a, 0x86, 0x61, 0xdb, 0xe7, 0xfc, 0xa1, 0xc7, 0x1a, 0xbc, 0xb8, 0xe9, + 0xd6, 0xd1, 0xaf, 0x87, 0xa1, 0xeb, 0xf3, 0x5b, 0x6e, 0xd7, 0x09, 0x8b, 0x65, 0x74, 0x94, 0x49, + 0x98, 0xc1, 0x58, 0x88, 0xa4, 0x8b, 0x09, 0x94, 0x50, 0x03, 0xcd, 0xc0, 0x56, 0x93, 0xb4, 0x11, + 0x0b, 0x34, 0xc4, 0x44, 0x24, 0x20, 0x07, 0x9a, 0x8e, 0x67, 0xc7, 0xb6, 0xed, 0x34, 0x4b, 0x5c, + 0x3c, 0xb4, 0x8d, 0xc8, 0xef, 0xfe, 0x7a, 0x54, 0x7f, 0x16, 0xe6, 0xfb, 0x27, 0xb3, 0xed, 0x45, + 0x8e, 0xcc, 0x45, 0x73, 0x77, 0xbc, 0x40, 0xbb, 0x86, 0x5d, 0xe2, 0x56, 0xdb, 0xe6, 0x4e, 0x38, + 0x46, 0xe4, 0xae, 0xe3, 0xb6, 0x1f, 0x12, 0x44, 0xdb, 0x2f, 0x03, 0xec, 0xf6, 0x42, 0x1e, 0x58, + 0x7b, 0x3e, 0x57, 0x80, 0x2b, 0x66, 0x55, 0xce, 0x88, 0xb5, 0x9a, 0xd1, 0xbf, 0xbd, 0xf7, 0xde, + 0x62, 0x21, 0x2b, 0xb6, 0xf7, 0x30, 0x3a, 0x50, 0x23, 0x01, 0xb4, 0xf3, 0x0a, 0x7c, 0x21, 0xb4, + 0x3b, 0xdc, 0xf2, 0x79, 0x87, 0xd9, 0x8e, 0xed, 0xb4, 0xd0, 0xd6, 0x0b, 0x62, 0xd6, 0x8c, 0x26, + 0x45, 0xa4, 0xa5, 0x71, 0x59, 0x5f, 0x15, 0x53, 0x0d, 0xb4, 0x0d, 0x58, 0xea, 0xa7, 0x86, 0xb5, + 0xf8, 0x8e, 0xe2, 0x1e, 0x77, 0x9c, 0x3d, 0xb7, 0x18, 0xd0, 0x4f, 0x08, 0x9c, 0x19, 0x29, 0x8c, + 0xe0, 0x7e, 0x00, 0x0b, 0x58, 0xff, 0x56, 0x92, 0xd7, 0xe0, 0x4e, 0x5c, 0xc9, 0xde, 0x29, 0xc3, + 0xfa, 0x70, 0xc7, 0xd0, 0x60, 0xe8, 0x8b, 0xb6, 0x0f, 0x67, 0xa3, 0x8d, 0x39, 0xda, 0x89, 0x49, + 0xb5, 0x81, 0xbf, 0x11, 0xd0, 0xf2, 0xac, 0x15, 0x7a, 0x5d, 0x99, 0x8c, 0xd7, 0x93, 0x6b, 0x19, + 0xf7, 0xb0, 0xfc, 0xc5, 0xb6, 0x79, 0xe4, 0xb5, 0x5d, 0xd6, 0xbc, 0xf5, 0x98, 0x37, 0xf6, 0x0b, + 0xb3, 0x3f, 0xa2, 0x9e, 0xae, 0xe0, 0xa6, 0x18, 0x52, 0x17, 0xef, 0xf7, 0x03, 0xd6, 0xb6, 0x9b, + 0x52, 0xdb, 0x09, 0x53, 0x0d, 0xb4, 0xb7, 0xb1, 0xa1, 0xec, 0xf8, 0x76, 0x83, 0xa7, 0xec, 0xd7, + 0xe0, 0x44, 0xb3, 0xeb, 0xc7, 0x69, 0xab, 0x9a, 0xfd, 0xf1, 0x08, 0x04, 0x51, 0xb3, 0x49, 0xea, + 0x8a, 0x8d, 0x7b, 0x62, 0x16, 0x37, 0x88, 0x1a, 0x68, 0x2f, 0x47, 0xd7, 0x04, 0x49, 0xe3, 0x07, + 0xef, 0x86, 0x9a, 0x1d, 0x9d, 0xee, 0x83, 0x9f, 0x51, 0xe9, 0x9d, 0xe1, 0x5b, 0xdd, 0xa8, 0xa3, + 0x3d, 0xad, 0x61, 0xf8, 0x8a, 0x5a, 0xc3, 0xbb, 0x11, 0x56, 0xc2, 0xc3, 0x90, 0x85, 0x7d, 0x18, + 0xff, 0x99, 0xc2, 0xab, 0x65, 0xfa, 0x23, 0x82, 0x38, 0x0d, 0x55, 0xaf, 0xeb, 0x37, 0x1e, 0xb3, + 0x80, 0xab, 0xd0, 0x4e, 0x9b, 0xf1, 0x04, 0xa5, 0x30, 0xdd, 0x15, 0x1f, 0xa6, 0xe4, 0x07, 0xf9, + 0x9b, 0xde, 0x03, 0x10, 0x7f, 0x2d, 0x19, 0x4b, 0x79, 0x72, 0xcf, 0x6f, 0xe9, 0x02, 0xd0, 0x3f, + 0x9f, 0x9c, 0x39, 0xd7, 0xb2, 0xc3, 0xc7, 0xdd, 0x5d, 0xbd, 0xe1, 0x76, 0x0c, 0x7c, 0x40, 0x51, + 0x7f, 0xd6, 0x82, 0xe6, 0xbe, 0x11, 0xf6, 0x3c, 0x1e, 0xe8, 0x6f, 0xf1, 0x86, 0x59, 0x15, 0x1a, + 0x4c, 0xa1, 0x40, 0x34, 0x5a, 0x7c, 0x06, 0xe9, 0x06, 0x22, 0x10, 0xd3, 0xd2, 0xd4, 0x9c, 0x9a, + 0x7b, 0x24, 0xa6, 0x68, 0x13, 0x5e, 0x90, 0xdf, 0xac, 0xdd, 0x9e, 0xe5, 0xb5, 0x99, 0xb3, 0x38, + 0x23, 0x83, 0x75, 0x33, 0x3b, 0x58, 0x23, 0x7d, 0xd5, 0xa5, 0xb6, 0xad, 0xde, 0x4e, 0x9b, 0x39, + 0xdf, 0x74, 0x42, 0xbf, 0x67, 0xce, 0x75, 0xe3, 0x99, 0xda, 0x0d, 0x38, 0x35, 0xb8, 0x80, 0x9e, + 0x82, 0xca, 0x3e, 0xef, 0x61, 0xd6, 0xc5, 0x4f, 0x2c, 0xc3, 0x2e, 0x8f, 0x4a, 0x47, 0x0e, 0x36, + 0xa6, 0x5e, 0x23, 0xf5, 0x9f, 0x2e, 0xc1, 0x8c, 0xb4, 0x4d, 0x7f, 0x4e, 0x60, 0x56, 0x3d, 0x92, + 0xd0, 0x95, 0x1c, 0x8c, 0xa9, 0x37, 0x99, 0xda, 0x85, 0x12, 0x2b, 0x95, 0x1f, 0x9a, 0xf1, 0xde, + 0xdf, 0xff, 0xfd, 0xc1, 0xd4, 0x05, 0x7a, 0xde, 0xf8, 0x21, 0x6b, 0xec, 0xb3, 0xf6, 0x5a, 0x93, + 0xb9, 0x86, 0x92, 0x5e, 0xcb, 0x7a, 0x83, 0xa2, 0x1f, 0x12, 0x98, 0x16, 0xfb, 0x8a, 0x9e, 0xcb, + 0x31, 0x92, 0x38, 0x2e, 0x6b, 0xe7, 0x0b, 0xd7, 0x21, 0x94, 0xdb, 0x12, 0xca, 0x26, 0x7d, 0xb3, + 0x10, 0x8a, 0x24, 0x89, 0xc6, 0xa1, 0x3a, 0x77, 0x8f, 0x8c, 0x43, 0x79, 0xd7, 0x3b, 0x32, 0x0e, + 0xe5, 0xed, 0xee, 0x88, 0x7e, 0x40, 0xe0, 0x84, 0xa4, 0xa3, 0x9b, 0xed, 0x36, 0x5d, 0xcd, 0x31, + 0x3f, 0x40, 0xd2, 0x6b, 0x5f, 0x2f, 0xb5, 0x16, 0xe1, 0xea, 0x12, 0xee, 0x0a, 0x3d, 0x57, 0x0e, + 0x2e, 0xfd, 0x2d, 0x81, 0x6a, 0x9f, 0xb4, 0xd3, 0x3c, 0x53, 0x83, 0xd4, 0x7e, 0x3c, 0x5c, 0xdb, + 0x12, 0xd7, 0x4d, 0x7a, 0xa3, 0x10, 0x97, 0xeb, 0x71, 0xc7, 0xc2, 0x58, 0x0e, 0x3e, 0x1d, 0x1c, + 0xd1, 0x3f, 0x12, 0x98, 0x91, 0x6f, 0x3a, 0x34, 0x2f, 0x83, 0xc9, 0x27, 0xba, 0xda, 0x4a, 0xf1, + 0x42, 0x04, 0xf9, 0x8e, 0x04, 0xf9, 0x6d, 0x6a, 0x16, 0x97, 0x9d, 0x90, 0xcb, 0xc0, 0x37, 0x3a, + 0xfd, 0xbf, 0x22, 0x50, 0xed, 0xf7, 0xb7, 0xdc, 0xfc, 0x0f, 0xbc, 0x0a, 0xe4, 0xc6, 0x79, 0xf0, + 0x3d, 0x40, 0xfb, 0x86, 0x74, 0xe1, 0x55, 0x7a, 0xa5, 0x8c, 0x0b, 0x0a, 0x8c, 0x71, 0xd8, 0x8f, + 0xee, 0x47, 0x04, 0xe6, 0xfb, 0x20, 0x45, 0x9d, 0xea, 0xf9, 0x39, 0x1e, 0x3c, 0x11, 0x6a, 0x46, + 0xe9, 0xf5, 0x88, 0xb7, 0x2e, 0xf1, 0x5e, 0xa4, 0xab, 0xe5, 0xf1, 0xd2, 0xbf, 0x12, 0x98, 0x4b, + 0x70, 0x41, 0xba, 0x96, 0x67, 0x74, 0x88, 0xc2, 0xd7, 0xf4, 0xb2, 0xcb, 0x11, 0xe2, 0x77, 0x25, + 0xc4, 0x07, 0xf4, 0x7e, 0x21, 0xc4, 0x24, 0x13, 0x55, 0xc5, 0x21, 0x2b, 0x60, 0x54, 0x49, 0xfc, + 0x8e, 0xc0, 0xc9, 0x24, 0x2b, 0x16, 0x01, 0x5f, 0xcf, 0x0f, 0x60, 0x06, 0x59, 0xaf, 0xd5, 0xc7, + 0x11, 0x41, 0x9f, 0xae, 0x4a, 0x9f, 0x0c, 0xba, 0x36, 0x96, 0x4f, 0xf4, 0x53, 0x02, 0xc7, 0x4d, + 0x64, 0x66, 0x79, 0xdb, 0x2a, 0x45, 0x34, 0x73, 0x1b, 0x7f, 0x9a, 0x30, 0x6a, 0xa6, 0xc4, 0x75, + 0x97, 0xbe, 0x5d, 0x88, 0x0b, 0x09, 0x62, 0x89, 0x30, 0xff, 0x82, 0x00, 0x20, 0x68, 0x11, 0xe1, + 0x82, 0xb6, 0x95, 0x86, 0x7e, 0xb1, 0xdc, 0x62, 0x44, 0x7f, 0x49, 0xa2, 0x5f, 0xa5, 0x2b, 0x65, + 0xd1, 0xd3, 0x4f, 0x08, 0x54, 0x05, 0xe5, 0x91, 0x64, 0x30, 0x17, 0xda, 0x20, 0xfb, 0xca, 0x85, + 0x36, 0xc4, 0xb8, 0xb4, 0xeb, 0x12, 0xda, 0x35, 0x7a, 0xb5, 0xf8, 0x5c, 0xf0, 0x39, 0xb7, 0x24, + 0x9e, 0x44, 0x63, 0xf8, 0x84, 0x00, 0xc4, 0x14, 0x95, 0x5e, 0x2c, 0xb8, 0x98, 0xa4, 0xd8, 0x72, + 0x6d, 0xad, 0xe4, 0x6a, 0x84, 0xba, 0x21, 0xa1, 0x5e, 0xa1, 0xf5, 0x42, 0xa8, 0xe2, 0xaf, 0xed, + 0xb4, 0x12, 0x38, 0x3f, 0x94, 0x87, 0xac, 0x62, 0xba, 0xb9, 0x4d, 0x76, 0x80, 0x3e, 0xe7, 0x36, + 0xd9, 0x41, 0xea, 0xac, 0xbd, 0x21, 0x11, 0x5e, 0xa5, 0x97, 0x4b, 0x1c, 0xb2, 0x4e, 0x53, 0x1e, + 0x66, 0xfd, 0xf2, 0x14, 0xdd, 0x8b, 0xde, 0xe6, 0xe1, 0x00, 0x35, 0xce, 0xdd, 0xf8, 0xd9, 0xfc, + 0x3b, 0x77, 0xe3, 0x8f, 0x60, 0xde, 0xda, 0xb7, 0x24, 0xf4, 0x2d, 0x7a, 0xb3, 0x10, 0x7a, 0x8b, + 0x87, 0x56, 0x43, 0x6a, 0xb1, 0x32, 0x4b, 0xe2, 0x63, 0x02, 0x70, 0x9b, 0x87, 0x48, 0xb9, 0x69, + 0xfe, 0xed, 0x2e, 0xc9, 0xe3, 0x6b, 0xab, 0x65, 0x96, 0x22, 0xde, 0x37, 0x25, 0xde, 0xd7, 0xe9, + 0xb5, 0x52, 0x78, 0x3d, 0xd6, 0xb3, 0x9a, 0x2c, 0x64, 0x09, 0x98, 0x7f, 0x21, 0x40, 0x87, 0xe9, + 0x23, 0xbd, 0x52, 0x7c, 0xb5, 0x1e, 0xe6, 0xca, 0xb5, 0xab, 0x63, 0x4a, 0x8d, 0xed, 0x44, 0x92, + 0x12, 0x27, 0x9c, 0xf8, 0x33, 0x81, 0x17, 0x87, 0xf5, 0x8b, 0x6e, 0x76, 0x2d, 0xbf, 0x41, 0x8d, + 0x76, 0xe5, 0xb5, 0xf1, 0x05, 0xc7, 0x3e, 0x3b, 0x92, 0xde, 0xd0, 0x3f, 0x10, 0x38, 0x39, 0x40, + 0x7d, 0x73, 0x8b, 0x3e, 0x9b, 0x75, 0xe7, 0x16, 0xfd, 0x08, 0x66, 0x3d, 0x46, 0x47, 0x11, 0x5b, + 0xd5, 0xea, 0x4a, 0x15, 0x56, 0x43, 0x42, 0xfc, 0x94, 0x00, 0xc4, 0x7c, 0x39, 0xb7, 0xf3, 0x0d, + 0x51, 0xf4, 0xdc, 0xce, 0x37, 0x4c, 0xc2, 0xc7, 0xe0, 0x1a, 0x92, 0x9e, 0x2b, 0x84, 0xc6, 0x61, + 0xc4, 0xfa, 0x8f, 0x8c, 0x43, 0xc9, 0xf3, 0x8f, 0xe8, 0xef, 0xc5, 0xcd, 0x22, 0x4d, 0xa9, 0xf3, + 0x6f, 0x16, 0x99, 0xfc, 0x3e, 0xff, 0x66, 0x91, 0xcd, 0xf9, 0xb5, 0xd7, 0xa5, 0x0f, 0x97, 0xe9, + 0x7a, 0xf1, 0xcd, 0x42, 0x91, 0xe2, 0xf8, 0x5e, 0xf7, 0x6b, 0x02, 0xf3, 0x49, 0x5a, 0x9b, 0x7b, + 0xfb, 0xcc, 0x78, 0x08, 0xc8, 0xbd, 0x7d, 0x66, 0xf1, 0x65, 0xed, 0x55, 0x09, 0xf6, 0x12, 0xd5, + 0x4b, 0x1d, 0x35, 0xac, 0xc5, 0x2d, 0x71, 0x15, 0x0a, 0xb6, 0xee, 0x7e, 0xf6, 0x74, 0x89, 0x7c, + 0xfe, 0x74, 0x89, 0xfc, 0xeb, 0xe9, 0x12, 0x79, 0xff, 0xd9, 0xd2, 0xb1, 0xcf, 0x9f, 0x2d, 0x1d, + 0xfb, 0xc7, 0xb3, 0xa5, 0x63, 0xef, 0xd4, 0x13, 0xef, 0x03, 0x4a, 0xe7, 0x5d, 0xb6, 0x1b, 0xa4, + 0x75, 0xfe, 0xb8, 0xaf, 0x55, 0xbe, 0x17, 0xec, 0xce, 0xca, 0xff, 0x64, 0xb8, 0xfc, 0xdf, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x12, 0x85, 0x70, 0xf5, 0xfe, 0x21, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2409,7 +2410,7 @@ type QueryClient interface { // Queries a list of Attestation items. ReportsAll(ctx context.Context, in *QueryAllReportRequest, opts ...grpc.CallOption) (*QueryAllReportResponse, error) // Queries a list of Freespace items. - Freespace(ctx context.Context, in *QueryFreespaceRequest, opts ...grpc.CallOption) (*QueryFreespaceResponse, error) + Freespace(ctx context.Context, in *QueryFreeSpaceRequest, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) // Queries a list of Freespace items. StoreCount(ctx context.Context, in *QueryStoreCountRequest, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) // Queries a list of FindFile items. @@ -2539,8 +2540,8 @@ func (c *queryClient) ReportsAll(ctx context.Context, in *QueryAllReportRequest, return out, nil } -func (c *queryClient) Freespace(ctx context.Context, in *QueryFreespaceRequest, opts ...grpc.CallOption) (*QueryFreespaceResponse, error) { - out := new(QueryFreespaceResponse) +func (c *queryClient) Freespace(ctx context.Context, in *QueryFreeSpaceRequest, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) { + out := new(QueryFreeSpaceResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Freespace", in, out, opts...) if err != nil { return nil, err @@ -2663,7 +2664,7 @@ type QueryServer interface { // Queries a list of Attestation items. ReportsAll(context.Context, *QueryAllReportRequest) (*QueryAllReportResponse, error) // Queries a list of Freespace items. - Freespace(context.Context, *QueryFreespaceRequest) (*QueryFreespaceResponse, error) + Freespace(context.Context, *QueryFreeSpaceRequest) (*QueryFreeSpaceResponse, error) // Queries a list of Freespace items. StoreCount(context.Context, *QueryStoreCountRequest) (*QueryStoreCountResponse, error) // Queries a list of FindFile items. @@ -2723,7 +2724,7 @@ func (*UnimplementedQueryServer) Reports(ctx context.Context, req *QueryReportRe func (*UnimplementedQueryServer) ReportsAll(ctx context.Context, req *QueryAllReportRequest) (*QueryAllReportResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ReportsAll not implemented") } -func (*UnimplementedQueryServer) Freespace(ctx context.Context, req *QueryFreespaceRequest) (*QueryFreespaceResponse, error) { +func (*UnimplementedQueryServer) Freespace(ctx context.Context, req *QueryFreeSpaceRequest) (*QueryFreeSpaceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Freespace not implemented") } func (*UnimplementedQueryServer) StoreCount(ctx context.Context, req *QueryStoreCountRequest) (*QueryStoreCountResponse, error) { @@ -2960,7 +2961,7 @@ func _Query_ReportsAll_Handler(srv interface{}, ctx context.Context, dec func(in } func _Query_Freespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFreespaceRequest) + in := new(QueryFreeSpaceRequest) if err := dec(in); err != nil { return nil, err } @@ -2972,7 +2973,7 @@ func _Query_Freespace_Handler(srv interface{}, ctx context.Context, dec func(int FullMethod: "/canine_chain.storage.Query/Freespace", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Freespace(ctx, req.(*QueryFreespaceRequest)) + return srv.(QueryServer).Freespace(ctx, req.(*QueryFreeSpaceRequest)) } return interceptor(ctx, in, info, handler) } @@ -4163,7 +4164,7 @@ func (m *QueryAllReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryFreespaceRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFreeSpaceRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4173,12 +4174,12 @@ func (m *QueryFreespaceRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFreespaceRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFreeSpaceRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFreespaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFreeSpaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4223,7 +4224,7 @@ func (m *QueryStoreCountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryFreespaceResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryFreeSpaceResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4233,12 +4234,12 @@ func (m *QueryFreespaceResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFreespaceResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFreeSpaceResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFreespaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFreeSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4393,8 +4394,8 @@ func (m *QueryClientFreeSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, e _ = i var l int _ = l - if m.Bytesfree != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.Bytesfree)) + if m.BytesFree != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.BytesFree)) i-- dAtA[i] = 0x8 } @@ -5260,7 +5261,7 @@ func (m *QueryAllReportResponse) Size() (n int) { return n } -func (m *QueryFreespaceRequest) Size() (n int) { +func (m *QueryFreeSpaceRequest) Size() (n int) { if m == nil { return 0 } @@ -5286,7 +5287,7 @@ func (m *QueryStoreCountRequest) Size() (n int) { return n } -func (m *QueryFreespaceResponse) Size() (n int) { +func (m *QueryFreeSpaceResponse) Size() (n int) { if m == nil { return 0 } @@ -5357,8 +5358,8 @@ func (m *QueryClientFreeSpaceResponse) Size() (n int) { } var l int _ = l - if m.Bytesfree != 0 { - n += 1 + sovQuery(uint64(m.Bytesfree)) + if m.BytesFree != 0 { + n += 1 + sovQuery(uint64(m.BytesFree)) } return n } @@ -8016,7 +8017,7 @@ func (m *QueryAllReportResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFreespaceRequest) Unmarshal(dAtA []byte) error { +func (m *QueryFreeSpaceRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8039,10 +8040,10 @@ func (m *QueryFreespaceRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFreespaceRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFreeSpaceRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFreespaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFreeSpaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -8180,7 +8181,7 @@ func (m *QueryStoreCountRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFreespaceResponse) Unmarshal(dAtA []byte) error { +func (m *QueryFreeSpaceResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8203,10 +8204,10 @@ func (m *QueryFreespaceResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFreespaceResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFreeSpaceResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFreespaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFreeSpaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -8623,9 +8624,9 @@ func (m *QueryClientFreeSpaceResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Bytesfree", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BytesFree", wireType) } - m.Bytesfree = 0 + m.BytesFree = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8635,7 +8636,7 @@ func (m *QueryClientFreeSpaceResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Bytesfree |= int64(b&0x7F) << shift + m.BytesFree |= int64(b&0x7F) << shift if b < 0x80 { break } diff --git a/x/storage/types/query.pb.gw.go b/x/storage/types/query.pb.gw.go index 7a546bc2c..304e49a32 100644 --- a/x/storage/types/query.pb.gw.go +++ b/x/storage/types/query.pb.gw.go @@ -780,7 +780,7 @@ func local_request_Query_ReportsAll_0(ctx context.Context, marshaler runtime.Mar } func request_Query_Freespace_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFreespaceRequest + var protoReq QueryFreeSpaceRequest var metadata runtime.ServerMetadata var ( @@ -807,7 +807,7 @@ func request_Query_Freespace_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_Freespace_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFreespaceRequest + var protoReq QueryFreeSpaceRequest var metadata runtime.ServerMetadata var ( @@ -2306,7 +2306,7 @@ var ( pattern_Query_ReportsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "reports"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Freespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "freespace", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Freespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "free_space", "address"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_StoreCount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "storing", "address"}, "", runtime.AssumeColonVerbOpt(false))) diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index b40103a76..d30d14323 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -265,7 +265,7 @@ func (m *MsgPostProof) GetStart() int64 { type MsgPostProofResponse struct { Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` - ErrorMessage string `protobuf:"bytes,2,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` } func (m *MsgPostProofResponse) Reset() { *m = MsgPostProofResponse{} } @@ -587,23 +587,23 @@ func (m *MsgSetProviderKeybaseResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSetProviderKeybaseResponse proto.InternalMessageInfo -type MsgSetProviderTotalspace struct { +type MsgSetProviderTotalSpace struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Space string `protobuf:"bytes,2,opt,name=space,proto3" json:"space,omitempty"` } -func (m *MsgSetProviderTotalspace) Reset() { *m = MsgSetProviderTotalspace{} } -func (m *MsgSetProviderTotalspace) String() string { return proto.CompactTextString(m) } -func (*MsgSetProviderTotalspace) ProtoMessage() {} -func (*MsgSetProviderTotalspace) Descriptor() ([]byte, []int) { +func (m *MsgSetProviderTotalSpace) Reset() { *m = MsgSetProviderTotalSpace{} } +func (m *MsgSetProviderTotalSpace) String() string { return proto.CompactTextString(m) } +func (*MsgSetProviderTotalSpace) ProtoMessage() {} +func (*MsgSetProviderTotalSpace) Descriptor() ([]byte, []int) { return fileDescriptor_2194ba0b2c3d6a97, []int{10} } -func (m *MsgSetProviderTotalspace) XXX_Unmarshal(b []byte) error { +func (m *MsgSetProviderTotalSpace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgSetProviderTotalspace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgSetProviderTotalSpace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgSetProviderTotalspace.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgSetProviderTotalSpace.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -613,47 +613,47 @@ func (m *MsgSetProviderTotalspace) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *MsgSetProviderTotalspace) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSetProviderTotalspace.Merge(m, src) +func (m *MsgSetProviderTotalSpace) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetProviderTotalSpace.Merge(m, src) } -func (m *MsgSetProviderTotalspace) XXX_Size() int { +func (m *MsgSetProviderTotalSpace) XXX_Size() int { return m.Size() } -func (m *MsgSetProviderTotalspace) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSetProviderTotalspace.DiscardUnknown(m) +func (m *MsgSetProviderTotalSpace) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetProviderTotalSpace.DiscardUnknown(m) } -var xxx_messageInfo_MsgSetProviderTotalspace proto.InternalMessageInfo +var xxx_messageInfo_MsgSetProviderTotalSpace proto.InternalMessageInfo -func (m *MsgSetProviderTotalspace) GetCreator() string { +func (m *MsgSetProviderTotalSpace) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *MsgSetProviderTotalspace) GetSpace() string { +func (m *MsgSetProviderTotalSpace) GetSpace() string { if m != nil { return m.Space } return "" } -type MsgSetProviderTotalspaceResponse struct { +type MsgSetProviderTotalSpaceResponse struct { } -func (m *MsgSetProviderTotalspaceResponse) Reset() { *m = MsgSetProviderTotalspaceResponse{} } -func (m *MsgSetProviderTotalspaceResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSetProviderTotalspaceResponse) ProtoMessage() {} -func (*MsgSetProviderTotalspaceResponse) Descriptor() ([]byte, []int) { +func (m *MsgSetProviderTotalSpaceResponse) Reset() { *m = MsgSetProviderTotalSpaceResponse{} } +func (m *MsgSetProviderTotalSpaceResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSetProviderTotalSpaceResponse) ProtoMessage() {} +func (*MsgSetProviderTotalSpaceResponse) Descriptor() ([]byte, []int) { return fileDescriptor_2194ba0b2c3d6a97, []int{11} } -func (m *MsgSetProviderTotalspaceResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgSetProviderTotalSpaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgSetProviderTotalspaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgSetProviderTotalSpaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgSetProviderTotalspaceResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgSetProviderTotalSpaceResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -663,17 +663,17 @@ func (m *MsgSetProviderTotalspaceResponse) XXX_Marshal(b []byte, deterministic b return b[:n], nil } } -func (m *MsgSetProviderTotalspaceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSetProviderTotalspaceResponse.Merge(m, src) +func (m *MsgSetProviderTotalSpaceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetProviderTotalSpaceResponse.Merge(m, src) } -func (m *MsgSetProviderTotalspaceResponse) XXX_Size() int { +func (m *MsgSetProviderTotalSpaceResponse) XXX_Size() int { return m.Size() } -func (m *MsgSetProviderTotalspaceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSetProviderTotalspaceResponse.DiscardUnknown(m) +func (m *MsgSetProviderTotalSpaceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetProviderTotalSpaceResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgSetProviderTotalspaceResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgSetProviderTotalSpaceResponse proto.InternalMessageInfo type MsgAddClaimer struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` @@ -855,7 +855,7 @@ type MsgInitProvider struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Ip string `protobuf:"bytes,2,opt,name=ip,proto3" json:"ip,omitempty"` Keybase string `protobuf:"bytes,3,opt,name=keybase,proto3" json:"keybase,omitempty"` - Totalspace string `protobuf:"bytes,4,opt,name=totalspace,proto3" json:"totalspace,omitempty"` + TotalSpace string `protobuf:"bytes,4,opt,name=total_space,json=totalSpace,proto3" json:"total_space,omitempty"` } func (m *MsgInitProvider) Reset() { *m = MsgInitProvider{} } @@ -912,9 +912,9 @@ func (m *MsgInitProvider) GetKeybase() string { return "" } -func (m *MsgInitProvider) GetTotalspace() string { +func (m *MsgInitProvider) GetTotalSpace() string { if m != nil { - return m.Totalspace + return m.TotalSpace } return "" } @@ -1854,8 +1854,8 @@ func init() { proto.RegisterType((*MsgSetProviderIPResponse)(nil), "canine_chain.storage.MsgSetProviderIPResponse") proto.RegisterType((*MsgSetProviderKeybase)(nil), "canine_chain.storage.MsgSetProviderKeybase") proto.RegisterType((*MsgSetProviderKeybaseResponse)(nil), "canine_chain.storage.MsgSetProviderKeybaseResponse") - proto.RegisterType((*MsgSetProviderTotalspace)(nil), "canine_chain.storage.MsgSetProviderTotalspace") - proto.RegisterType((*MsgSetProviderTotalspaceResponse)(nil), "canine_chain.storage.MsgSetProviderTotalspaceResponse") + proto.RegisterType((*MsgSetProviderTotalSpace)(nil), "canine_chain.storage.MsgSetProviderTotalSpace") + proto.RegisterType((*MsgSetProviderTotalSpaceResponse)(nil), "canine_chain.storage.MsgSetProviderTotalSpaceResponse") proto.RegisterType((*MsgAddClaimer)(nil), "canine_chain.storage.MsgAddClaimer") proto.RegisterType((*MsgAddClaimerResponse)(nil), "canine_chain.storage.MsgAddClaimerResponse") proto.RegisterType((*MsgRemoveClaimer)(nil), "canine_chain.storage.MsgRemoveClaimer") @@ -1883,84 +1883,85 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/tx.proto", fileDescriptor_2194ba0b2c3d6a97) } var fileDescriptor_2194ba0b2c3d6a97 = []byte{ - // 1231 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0xdb, 0x46, - 0x10, 0x0e, 0x2d, 0xd9, 0x96, 0xc6, 0xb2, 0xeb, 0x30, 0x76, 0xc2, 0xd0, 0xb1, 0x6c, 0x33, 0x48, - 0xe3, 0x26, 0x88, 0x84, 0x3a, 0x40, 0x7b, 0xe9, 0xc5, 0x6e, 0x10, 0xc0, 0x8d, 0x55, 0xb8, 0xb4, - 0x8b, 0xfe, 0xa2, 0xc2, 0x4a, 0x5c, 0xcb, 0x8c, 0x25, 0x2e, 0xb3, 0xbb, 0x72, 0xac, 0x5c, 0x8a, - 0xf6, 0xdc, 0x43, 0x5f, 0x20, 0x87, 0x1e, 0xfa, 0x2e, 0x3d, 0xe6, 0xd8, 0x63, 0x61, 0x3f, 0x40, - 0x5f, 0xa1, 0xe0, 0x72, 0xb9, 0x22, 0x65, 0x92, 0x92, 0x83, 0x06, 0xed, 0x4d, 0x3b, 0xfb, 0xed, - 0xcc, 0xf7, 0xcd, 0xac, 0x76, 0x06, 0x84, 0xd5, 0x36, 0xf2, 0x5c, 0x0f, 0x37, 0xdb, 0xc7, 0xc8, - 0xf5, 0xea, 0x8c, 0x13, 0x8a, 0x3a, 0xb8, 0xce, 0xcf, 0x6a, 0x3e, 0x25, 0x9c, 0xe8, 0x4b, 0xf1, - 0xed, 0x9a, 0xdc, 0xb6, 0xfe, 0xd6, 0x60, 0xae, 0xc1, 0x3a, 0xfb, 0x84, 0xf1, 0xa7, 0x6e, 0x17, - 0xeb, 0x06, 0xcc, 0xb6, 0x29, 0x46, 0x9c, 0x50, 0x43, 0x5b, 0xd7, 0x36, 0xcb, 0x76, 0xb4, 0xd4, - 0x6f, 0xc2, 0x4c, 0x0f, 0xd3, 0x93, 0x2e, 0x36, 0xa6, 0xd6, 0xb5, 0xcd, 0x8a, 0x2d, 0x57, 0xfa, - 0x0a, 0x94, 0x8f, 0xdc, 0x2e, 0x6e, 0x32, 0xf7, 0x15, 0x36, 0x0a, 0xeb, 0xda, 0x66, 0xc1, 0x2e, - 0x05, 0x86, 0x03, 0xf7, 0x15, 0xd6, 0xef, 0xc1, 0x82, 0x4f, 0x09, 0x39, 0x6a, 0xba, 0x1e, 0xc7, - 0xf4, 0x14, 0x75, 0x8d, 0xa2, 0x40, 0xcc, 0x0b, 0xeb, 0xae, 0x34, 0xea, 0xab, 0x00, 0x21, 0x8c, - 0x0f, 0x7c, 0x6c, 0x4c, 0x0b, 0x48, 0x59, 0x58, 0x0e, 0x07, 0x3e, 0x0e, 0xb6, 0x7b, 0xe8, 0xac, - 0x29, 0x0c, 0xcc, 0x98, 0x09, 0xb7, 0x7b, 0xe8, 0x6c, 0x5f, 0x18, 0x02, 0xce, 0xf8, 0xcc, 0x77, - 0x29, 0x66, 0xc6, 0xac, 0xd8, 0x8b, 0x96, 0xba, 0x0e, 0x45, 0x8f, 0x70, 0x6c, 0x94, 0x84, 0x14, - 0xf1, 0xdb, 0xfa, 0x06, 0x6e, 0xc4, 0x04, 0xdb, 0x98, 0xf9, 0xc4, 0x63, 0x58, 0xdf, 0x80, 0x8a, - 0x4f, 0xc9, 0xa9, 0xeb, 0x60, 0xda, 0x74, 0x7d, 0x66, 0x68, 0xeb, 0x85, 0xcd, 0xb2, 0x3d, 0x17, - 0xd9, 0x76, 0x7d, 0xa6, 0xaf, 0xc1, 0x1c, 0xe3, 0x88, 0xf2, 0x66, 0xab, 0x4b, 0xda, 0x27, 0x22, - 0x0d, 0x05, 0x1b, 0x84, 0x69, 0x27, 0xb0, 0x58, 0xaf, 0x35, 0xa8, 0x48, 0xdf, 0x82, 0x5a, 0x4e, - 0x36, 0x75, 0x28, 0xba, 0x1c, 0xf7, 0x64, 0x2e, 0xc5, 0xef, 0x20, 0x93, 0xc7, 0x88, 0x1d, 0x37, - 0xbb, 0x2e, 0xe3, 0x22, 0x93, 0x15, 0xbb, 0x14, 0x18, 0xf6, 0x5c, 0xc6, 0x63, 0xe9, 0x2f, 0x26, - 0xd2, 0xbf, 0x04, 0xd3, 0xe4, 0xa5, 0x87, 0xa9, 0xc8, 0x5a, 0xd9, 0x0e, 0x17, 0x81, 0x55, 0xf0, - 0x92, 0xc9, 0x0a, 0x17, 0xd6, 0x21, 0x2c, 0xc5, 0xe9, 0x29, 0xed, 0x06, 0xcc, 0xb2, 0x7e, 0xbb, - 0x8d, 0x19, 0x13, 0x34, 0x4b, 0x76, 0xb4, 0xd4, 0x2d, 0xa8, 0x60, 0x4a, 0x09, 0x6d, 0x60, 0xc6, - 0x50, 0x27, 0x2c, 0x7d, 0xd9, 0x4e, 0xd8, 0xac, 0xaf, 0x60, 0xbe, 0xc1, 0x3a, 0x4f, 0x70, 0x17, - 0x73, 0xfc, 0x96, 0x77, 0x48, 0xd1, 0x2d, 0xc4, 0xe9, 0xde, 0x82, 0xe5, 0x84, 0xe3, 0x88, 0xaf, - 0xf5, 0x09, 0x2c, 0x36, 0x58, 0xe7, 0x00, 0x07, 0x32, 0xc2, 0xea, 0xec, 0xe7, 0x04, 0x5d, 0x80, - 0x29, 0xd7, 0x97, 0xcc, 0xa7, 0x5c, 0xdf, 0x32, 0xc1, 0x18, 0x3d, 0xad, 0x3c, 0x3f, 0x13, 0x21, - 0x63, 0x7b, 0xcf, 0xf0, 0xa0, 0x85, 0x58, 0x9e, 0x26, 0x03, 0x66, 0x4f, 0x42, 0x90, 0x8c, 0x11, - 0x2d, 0xad, 0x35, 0x58, 0x4d, 0x75, 0xa6, 0xa2, 0x7d, 0x36, 0xca, 0xe4, 0x90, 0x70, 0xd4, 0x65, - 0x3e, 0x6a, 0xe7, 0x05, 0x0c, 0x92, 0x15, 0x40, 0x64, 0xb8, 0x70, 0x61, 0x59, 0xb0, 0x9e, 0xe5, - 0x4b, 0xc5, 0xfb, 0x5c, 0x54, 0x6a, 0xdb, 0x71, 0x3e, 0xed, 0x22, 0xb7, 0x87, 0x69, 0x4e, 0x90, - 0xbb, 0x30, 0xdf, 0x0e, 0x40, 0x4d, 0xe4, 0x38, 0x34, 0xb8, 0x18, 0xb2, 0xf2, 0xc2, 0xb8, 0x1d, - 0xda, 0x64, 0x81, 0x86, 0xfe, 0x54, 0xa0, 0x2f, 0x44, 0x81, 0x6c, 0xdc, 0x23, 0xa7, 0xf8, 0x5f, - 0x8a, 0x15, 0x56, 0x2d, 0xe1, 0x52, 0x85, 0xeb, 0xc3, 0x7b, 0x0d, 0xd6, 0xd9, 0xf5, 0x5c, 0x25, - 0x7e, 0xf2, 0xeb, 0x10, 0xaf, 0x5f, 0x21, 0x51, 0x3f, 0xbd, 0x0a, 0xc0, 0x55, 0x12, 0xc5, 0xdf, - 0xae, 0x6c, 0xc7, 0x2c, 0xd6, 0x6d, 0xb8, 0x35, 0x12, 0x56, 0x31, 0xaa, 0x8b, 0x47, 0xe6, 0xe0, - 0xb8, 0xcf, 0x1d, 0xf2, 0xd2, 0x1b, 0xcf, 0xca, 0x5a, 0x85, 0x95, 0x94, 0x03, 0xca, 0xdf, 0x6f, - 0x9a, 0x28, 0xdd, 0x4e, 0x7f, 0x70, 0x10, 0x3e, 0xdc, 0x39, 0x02, 0xd7, 0x60, 0xee, 0x88, 0xd0, - 0x91, 0x64, 0xc2, 0x11, 0xa1, 0x32, 0x95, 0xba, 0x09, 0x25, 0xa7, 0x4f, 0x11, 0x77, 0x89, 0x27, - 0x25, 0xab, 0x75, 0x70, 0xb9, 0x5a, 0x03, 0x8e, 0x99, 0x94, 0x1b, 0x2e, 0x82, 0x0a, 0xf9, 0x68, - 0xd0, 0xc3, 0x1e, 0x6f, 0x3a, 0xd8, 0x23, 0x3d, 0xf9, 0xd8, 0x54, 0xa4, 0xf1, 0x49, 0x60, 0x93, - 0xb7, 0x61, 0x48, 0x51, 0x91, 0xff, 0x5e, 0x70, 0x17, 0x45, 0x3b, 0xe0, 0x14, 0x0d, 0x72, 0xb8, - 0x2f, 0x42, 0xa1, 0xed, 0x3a, 0x92, 0x73, 0xf0, 0x73, 0x54, 0x4d, 0x61, 0x54, 0x8d, 0x0c, 0x3b, - 0xf4, 0xae, 0xc2, 0xfe, 0xae, 0xc1, 0xf5, 0x06, 0xeb, 0x7c, 0xe9, 0x77, 0x28, 0x72, 0xf0, 0xff, - 0x37, 0x6f, 0x2b, 0x70, 0xfb, 0x12, 0x4d, 0x25, 0x62, 0x20, 0x36, 0x6d, 0xfc, 0xa2, 0x8f, 0x19, - 0xdf, 0xe6, 0x1c, 0x33, 0x2e, 0x02, 0x3e, 0x25, 0xb4, 0xf7, 0x76, 0x0f, 0x6d, 0xd8, 0x2d, 0x0a, - 0xa9, 0xdd, 0xa2, 0x18, 0x7f, 0x7e, 0x5f, 0xc0, 0x46, 0x66, 0x68, 0xd5, 0x3a, 0xee, 0x40, 0x39, - 0x6a, 0x91, 0x51, 0xcf, 0x1c, 0x1a, 0xe2, 0x8d, 0x65, 0x2a, 0xd9, 0x58, 0x96, 0x60, 0x5a, 0x34, - 0x91, 0x88, 0x88, 0x58, 0x58, 0x3f, 0x69, 0x50, 0x0e, 0x5e, 0x14, 0x11, 0x2c, 0x5f, 0x5e, 0x10, - 0x04, 0x53, 0x59, 0x25, 0xb9, 0x8a, 0xc9, 0x2e, 0xa4, 0xcb, 0x2e, 0xa6, 0xca, 0x9e, 0x8e, 0xcb, - 0xbe, 0x21, 0x6e, 0x4d, 0x48, 0x41, 0x95, 0xe1, 0x17, 0x4d, 0xb4, 0x4e, 0x99, 0x0c, 0x1b, 0xfb, - 0x84, 0xf2, 0xf1, 0x25, 0x78, 0x67, 0x1c, 0xbb, 0x70, 0x27, 0x8d, 0xcd, 0xbb, 0xad, 0x4a, 0x18, - 0xe7, 0x3f, 0xad, 0x4a, 0x48, 0x21, 0x92, 0xb9, 0xf5, 0x7a, 0x1e, 0x0a, 0x0d, 0xd6, 0xd1, 0xbf, - 0x86, 0x92, 0x1a, 0x60, 0x37, 0x6a, 0x69, 0x73, 0x6e, 0x2d, 0x36, 0xf2, 0x99, 0x1f, 0x8c, 0x85, - 0xa8, 0x44, 0x7e, 0x07, 0xe5, 0xe1, 0x34, 0x67, 0xe5, 0x9e, 0x13, 0x18, 0xf3, 0xc1, 0x78, 0x8c, - 0x72, 0xfe, 0x03, 0x40, 0x6c, 0x6a, 0xba, 0x9b, 0x79, 0x72, 0x08, 0x32, 0x1f, 0x4e, 0x00, 0x52, - 0xfe, 0x3b, 0x30, 0x9f, 0x9c, 0x91, 0xde, 0xcf, 0x3c, 0x9d, 0xc0, 0x99, 0xb5, 0xc9, 0x70, 0x2a, - 0xd0, 0x29, 0xe8, 0x29, 0x23, 0xd3, 0xc3, 0x49, 0xbc, 0x48, 0xb0, 0xf9, 0xf8, 0x0a, 0x60, 0x15, - 0xf7, 0x47, 0x58, 0x4e, 0x1f, 0x9e, 0x26, 0x12, 0x30, 0xc4, 0x9b, 0x1f, 0x5d, 0x0d, 0xaf, 0x08, - 0x38, 0x50, 0x49, 0x4c, 0x1d, 0xf7, 0x32, 0xfd, 0xc4, 0x61, 0xe6, 0xa3, 0x89, 0x60, 0x2a, 0x8a, - 0x0f, 0x8b, 0x97, 0x26, 0x89, 0xec, 0x3b, 0x3c, 0x0a, 0x35, 0x3f, 0x9c, 0x18, 0x1a, 0xbf, 0x99, - 0xb1, 0x51, 0x23, 0xfb, 0x66, 0x0e, 0x41, 0x39, 0x37, 0xf3, 0xf2, 0x44, 0xa0, 0x3f, 0x87, 0x85, - 0x91, 0xb6, 0x7c, 0x3f, 0xf3, 0x78, 0x12, 0x68, 0xd6, 0x27, 0x04, 0xaa, 0x58, 0x47, 0xa0, 0x6f, - 0x3b, 0x4e, 0x24, 0x31, 0x9a, 0x46, 0xb3, 0x35, 0x0d, 0xc7, 0xd9, 0x1c, 0x4d, 0x97, 0x67, 0x5e, - 0x9d, 0xc0, 0x72, 0x38, 0x9d, 0x8e, 0x86, 0xca, 0xfe, 0xd7, 0x25, 0xa6, 0xd9, 0x9c, 0x7f, 0x5d, - 0xea, 0xd4, 0xab, 0xff, 0xac, 0xc1, 0xcd, 0x8c, 0xc1, 0xa0, 0x9e, 0xe3, 0x2a, 0xed, 0x80, 0xf9, - 0xf1, 0x15, 0x0f, 0x28, 0x12, 0x36, 0xcc, 0xc8, 0x6e, 0xbd, 0x96, 0x9d, 0x2c, 0x01, 0x30, 0xef, - 0x8f, 0x01, 0x28, 0x9f, 0x0c, 0xae, 0x5f, 0x6e, 0xb4, 0x0f, 0xc6, 0x31, 0x1c, 0x62, 0xcd, 0xad, - 0xc9, 0xb1, 0x71, 0x21, 0xb2, 0xc1, 0xad, 0xe5, 0x9c, 0x0e, 0x00, 0x39, 0x42, 0x92, 0xfd, 0x69, - 0x67, 0xef, 0x8f, 0xf3, 0xaa, 0xf6, 0xe6, 0xbc, 0xaa, 0xfd, 0x75, 0x5e, 0xd5, 0x7e, 0xbd, 0xa8, - 0x5e, 0x7b, 0x73, 0x51, 0xbd, 0xf6, 0xe7, 0x45, 0xf5, 0xda, 0xb7, 0x5b, 0x1d, 0x97, 0x1f, 0xf7, - 0x5b, 0xb5, 0x36, 0xe9, 0xd5, 0x9f, 0xa3, 0xf6, 0x09, 0xea, 0xee, 0xa1, 0x16, 0xab, 0x87, 0x7e, - 0x1f, 0x85, 0x5f, 0x70, 0xce, 0x86, 0xdf, 0x70, 0x06, 0x3e, 0x66, 0xad, 0x19, 0xf1, 0x1d, 0xe7, - 0xf1, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x67, 0x18, 0xd6, 0x3f, 0xe8, 0x11, 0x00, 0x00, + // 1240 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcf, 0x6e, 0xdb, 0xc6, + 0x13, 0x0e, 0x2d, 0xd9, 0x96, 0xc6, 0x92, 0x7f, 0x0e, 0x63, 0x27, 0x0c, 0x1d, 0xcb, 0x36, 0x8d, + 0xfc, 0xe2, 0x26, 0x88, 0x84, 0x3a, 0x40, 0x7b, 0xe9, 0xc5, 0x6e, 0x10, 0xc0, 0x8d, 0x55, 0xb8, + 0x54, 0x82, 0xfe, 0x45, 0x85, 0x95, 0xb8, 0x96, 0x19, 0x4b, 0x5c, 0x66, 0x77, 0xe5, 0x58, 0xb9, + 0x14, 0xed, 0xb9, 0x87, 0xbe, 0x40, 0x0e, 0x3d, 0xf4, 0x5d, 0x7a, 0xcc, 0xb1, 0xc7, 0xc2, 0x7e, + 0x80, 0xbe, 0x42, 0xc1, 0xe5, 0x72, 0x45, 0xc9, 0x24, 0x25, 0x07, 0x0d, 0xda, 0x9b, 0x76, 0xf6, + 0xdb, 0x99, 0xef, 0x9b, 0x59, 0xed, 0x0c, 0x08, 0x6b, 0x6d, 0xe4, 0xb9, 0x1e, 0x6e, 0xb6, 0x8f, + 0x91, 0xeb, 0xd5, 0x18, 0x27, 0x14, 0x75, 0x70, 0x8d, 0x9f, 0x55, 0x7d, 0x4a, 0x38, 0xd1, 0x97, + 0xe3, 0xdb, 0x55, 0xb9, 0x6d, 0xfd, 0xa5, 0xc1, 0x42, 0x9d, 0x75, 0x0e, 0x09, 0xe3, 0x4f, 0xdc, + 0x2e, 0xd6, 0x0d, 0x98, 0x6f, 0x53, 0x8c, 0x38, 0xa1, 0x86, 0xb6, 0xa1, 0x6d, 0x17, 0xed, 0x68, + 0xa9, 0xdf, 0x84, 0xb9, 0x1e, 0xa6, 0x27, 0x5d, 0x6c, 0xcc, 0x6c, 0x68, 0xdb, 0x25, 0x5b, 0xae, + 0xf4, 0x55, 0x28, 0x1e, 0xb9, 0x5d, 0xdc, 0x64, 0xee, 0x6b, 0x6c, 0xe4, 0x36, 0xb4, 0xed, 0x9c, + 0x5d, 0x08, 0x0c, 0x0d, 0xf7, 0x35, 0xd6, 0xef, 0xc2, 0xa2, 0x4f, 0x09, 0x39, 0x6a, 0xba, 0x1e, + 0xc7, 0xf4, 0x14, 0x75, 0x8d, 0xbc, 0x40, 0x94, 0x85, 0x75, 0x5f, 0x1a, 0xf5, 0x35, 0x80, 0x10, + 0xc6, 0x07, 0x3e, 0x36, 0x66, 0x05, 0xa4, 0x28, 0x2c, 0xcf, 0x06, 0x3e, 0x0e, 0xb6, 0x7b, 0xe8, + 0xac, 0x29, 0x0c, 0xcc, 0x98, 0x0b, 0xb7, 0x7b, 0xe8, 0xec, 0x50, 0x18, 0x02, 0xce, 0xf8, 0xcc, + 0x77, 0x29, 0x66, 0xc6, 0xbc, 0xd8, 0x8b, 0x96, 0xba, 0x0e, 0x79, 0x8f, 0x70, 0x6c, 0x14, 0x84, + 0x14, 0xf1, 0xdb, 0xfa, 0x1a, 0x6e, 0xc4, 0x04, 0xdb, 0x98, 0xf9, 0xc4, 0x63, 0x58, 0xdf, 0x84, + 0x92, 0x4f, 0xc9, 0xa9, 0xeb, 0x60, 0xda, 0x74, 0x7d, 0x66, 0x68, 0x1b, 0xb9, 0xed, 0xa2, 0xbd, + 0x10, 0xd9, 0xf6, 0x7d, 0xa6, 0xaf, 0xc3, 0x02, 0xe3, 0x88, 0xf2, 0x66, 0xab, 0x4b, 0xda, 0x27, + 0x22, 0x0d, 0x39, 0x1b, 0x84, 0x69, 0x2f, 0xb0, 0x58, 0x6f, 0x34, 0x28, 0x49, 0xdf, 0x82, 0x5a, + 0x46, 0x36, 0x75, 0xc8, 0xbb, 0x1c, 0xf7, 0x64, 0x2e, 0xc5, 0xef, 0x20, 0x93, 0xc7, 0x88, 0x1d, + 0x37, 0xbb, 0x2e, 0xe3, 0x22, 0x93, 0x25, 0xbb, 0x10, 0x18, 0x0e, 0x5c, 0xc6, 0x63, 0xe9, 0xcf, + 0x8f, 0xa4, 0x7f, 0x19, 0x66, 0xc9, 0x2b, 0x0f, 0x53, 0x91, 0xb5, 0xa2, 0x1d, 0x2e, 0x02, 0xab, + 0xe0, 0x25, 0x93, 0x15, 0x2e, 0xac, 0xe7, 0xb0, 0x1c, 0xa7, 0xa7, 0xb4, 0x1b, 0x30, 0xcf, 0xfa, + 0xed, 0x36, 0x66, 0x4c, 0xd0, 0x2c, 0xd8, 0xd1, 0x52, 0xdf, 0x82, 0x32, 0xa6, 0x94, 0xd0, 0x66, + 0x0f, 0x33, 0x86, 0x3a, 0x61, 0xed, 0x8b, 0x76, 0x49, 0x18, 0xeb, 0xa1, 0xcd, 0xfa, 0x12, 0xca, + 0x75, 0xd6, 0x79, 0x8c, 0xbb, 0x98, 0xe3, 0x77, 0xbc, 0x44, 0x8a, 0x6f, 0x2e, 0xce, 0xf7, 0x16, + 0xac, 0x8c, 0x38, 0x8e, 0x08, 0x5b, 0x9f, 0xc0, 0x52, 0x9d, 0x75, 0x1a, 0x38, 0xd0, 0x11, 0x96, + 0xe7, 0x30, 0x23, 0xe8, 0x22, 0xcc, 0xb8, 0xbe, 0x64, 0x3e, 0xe3, 0xfa, 0x96, 0x09, 0xc6, 0xf8, + 0x69, 0xe5, 0xf9, 0xa9, 0x08, 0x19, 0xdb, 0x7b, 0x8a, 0x07, 0x2d, 0xc4, 0xb2, 0x34, 0x19, 0x30, + 0x7f, 0x12, 0x82, 0x64, 0x8c, 0x68, 0x69, 0xad, 0xc3, 0x5a, 0xa2, 0x33, 0x15, 0xed, 0xb3, 0x71, + 0x26, 0xcf, 0x08, 0x47, 0xdd, 0x86, 0x8f, 0xda, 0x59, 0x01, 0x83, 0x64, 0x05, 0x10, 0x19, 0x2e, + 0x5c, 0x58, 0x16, 0x6c, 0xa4, 0xf9, 0x52, 0xf1, 0x3e, 0x17, 0x95, 0xda, 0x75, 0x9c, 0x4f, 0xbb, + 0xc8, 0xed, 0x61, 0x9a, 0x11, 0x64, 0x0b, 0xca, 0xed, 0x00, 0xd4, 0x44, 0x8e, 0x43, 0x83, 0x9b, + 0x21, 0x2b, 0x2f, 0x8c, 0xbb, 0xa1, 0x4d, 0x16, 0x68, 0xe8, 0x4f, 0x05, 0xfa, 0x42, 0x14, 0xc8, + 0xc6, 0x3d, 0x72, 0x8a, 0xff, 0xa1, 0x58, 0x61, 0xd5, 0x46, 0x5c, 0xaa, 0x70, 0xa7, 0xf0, 0xbf, + 0x3a, 0xeb, 0xec, 0x7b, 0xae, 0x12, 0x3f, 0xfd, 0x75, 0x88, 0xd7, 0x2f, 0x37, 0x52, 0xbf, 0xe0, + 0x0f, 0xcf, 0x83, 0x24, 0x36, 0xc3, 0x74, 0xe7, 0xc5, 0x2e, 0x70, 0x95, 0x57, 0xeb, 0x36, 0xdc, + 0x1a, 0x8b, 0xab, 0x28, 0xd5, 0xc4, 0x33, 0xd3, 0x38, 0xee, 0x73, 0x87, 0xbc, 0xf2, 0x26, 0xd3, + 0xb2, 0xd6, 0x60, 0x35, 0xe1, 0x80, 0xf2, 0xf7, 0xab, 0x26, 0x6a, 0xb7, 0xd7, 0x1f, 0x34, 0xc2, + 0xa7, 0x3b, 0x43, 0xe1, 0x3a, 0x2c, 0x1c, 0x11, 0x3a, 0x96, 0x4d, 0x38, 0x22, 0x54, 0xe6, 0x52, + 0x37, 0xa1, 0xe0, 0xf4, 0x29, 0xe2, 0x2e, 0xf1, 0xa4, 0x66, 0xb5, 0x0e, 0x6e, 0x57, 0x6b, 0xc0, + 0x31, 0x93, 0x72, 0xc3, 0x45, 0x50, 0x22, 0x1f, 0x0d, 0x7a, 0xd8, 0xe3, 0x4d, 0x07, 0x7b, 0xa4, + 0x27, 0x9f, 0x9b, 0x92, 0x34, 0x3e, 0x0e, 0x6c, 0xf2, 0x3a, 0x0c, 0x29, 0x2a, 0xf2, 0xdf, 0x09, + 0xee, 0xa2, 0x6a, 0x0d, 0x4e, 0xd1, 0x20, 0x83, 0xfb, 0x12, 0xe4, 0xda, 0xae, 0x23, 0x39, 0x07, + 0x3f, 0xc7, 0xd5, 0xe4, 0xc6, 0xd5, 0xc8, 0xb0, 0x43, 0xef, 0x2a, 0xec, 0x6f, 0x1a, 0x5c, 0xaf, + 0xb3, 0xce, 0x73, 0xbf, 0x43, 0x91, 0x83, 0xff, 0xbb, 0x79, 0x5b, 0x85, 0xdb, 0x97, 0x68, 0x2a, + 0x11, 0x03, 0xb1, 0x69, 0xe3, 0x97, 0x7d, 0xcc, 0xf8, 0x2e, 0xe7, 0x98, 0x71, 0x11, 0xf0, 0x09, + 0xa1, 0xbd, 0x77, 0x7b, 0x69, 0xc3, 0x7e, 0x91, 0x4b, 0xec, 0x17, 0xf9, 0xf8, 0xfb, 0xfb, 0x12, + 0x36, 0x53, 0x43, 0xab, 0xe6, 0x71, 0x07, 0x8a, 0x51, 0x93, 0x8c, 0xba, 0xe6, 0xd0, 0x10, 0x6f, + 0x2d, 0x33, 0xa3, 0xad, 0x65, 0x19, 0x66, 0x45, 0x17, 0x89, 0x88, 0x88, 0x85, 0xf5, 0xa3, 0x06, + 0xc5, 0xe0, 0x49, 0x11, 0xc1, 0xb2, 0xe5, 0x05, 0x41, 0x30, 0x95, 0x55, 0x92, 0xab, 0x98, 0xec, + 0x5c, 0xb2, 0xec, 0x7c, 0xa2, 0xec, 0xd9, 0xb8, 0xec, 0x1b, 0xe2, 0xd6, 0x84, 0x14, 0x54, 0x19, + 0x7e, 0xd6, 0x44, 0xf3, 0x94, 0xc9, 0xb0, 0xb1, 0x4f, 0x28, 0x9f, 0x5c, 0x82, 0xf7, 0xc6, 0xb1, + 0x0b, 0x77, 0x92, 0xd8, 0xbc, 0xdf, 0xaa, 0x84, 0x71, 0xfe, 0xd5, 0xaa, 0x84, 0x14, 0x22, 0x99, + 0x3b, 0x6f, 0xca, 0x90, 0xab, 0xb3, 0x8e, 0xfe, 0x15, 0x14, 0xd4, 0x08, 0xbb, 0x59, 0x4d, 0x9a, + 0x74, 0xab, 0xb1, 0xa1, 0xcf, 0xfc, 0x60, 0x22, 0x44, 0x25, 0xf2, 0x5b, 0x28, 0x0e, 0xe7, 0x39, + 0x2b, 0xf3, 0x9c, 0xc0, 0x98, 0xf7, 0x27, 0x63, 0x94, 0xf3, 0xef, 0x01, 0x62, 0x63, 0xd3, 0x56, + 0xea, 0xc9, 0x21, 0xc8, 0x7c, 0x30, 0x05, 0x48, 0xf9, 0xef, 0x40, 0x79, 0x74, 0x48, 0xfa, 0x7f, + 0xea, 0xe9, 0x11, 0x9c, 0x59, 0x9d, 0x0e, 0xa7, 0x02, 0x9d, 0x82, 0x9e, 0x30, 0x33, 0x3d, 0x98, + 0xc6, 0x8b, 0x04, 0x9b, 0x8f, 0xae, 0x00, 0x56, 0x71, 0x7f, 0x80, 0x95, 0xe4, 0xe9, 0x69, 0x2a, + 0x01, 0x43, 0xbc, 0xf9, 0xd1, 0xd5, 0xf0, 0x8a, 0x80, 0x03, 0xa5, 0x91, 0xb1, 0xe3, 0x6e, 0xaa, + 0x9f, 0x38, 0xcc, 0x7c, 0x38, 0x15, 0x4c, 0x45, 0xf1, 0x61, 0xe9, 0xd2, 0x24, 0x91, 0x7e, 0x87, + 0xc7, 0xa1, 0xe6, 0x87, 0x53, 0x43, 0xe3, 0x37, 0x33, 0x36, 0x6a, 0xa4, 0xdf, 0xcc, 0x21, 0x28, + 0xe3, 0x66, 0x5e, 0x9e, 0x08, 0xf4, 0x17, 0xb0, 0x38, 0xd6, 0x96, 0xef, 0xa5, 0x1e, 0x1f, 0x05, + 0x9a, 0xb5, 0x29, 0x81, 0x2a, 0xd6, 0x11, 0xe8, 0xbb, 0x8e, 0x13, 0x49, 0x8c, 0xc6, 0xd1, 0x74, + 0x4d, 0xc3, 0x79, 0x36, 0x43, 0xd3, 0xe5, 0xa1, 0x57, 0x27, 0xb0, 0x12, 0x8e, 0xa7, 0xe3, 0xa1, + 0xd2, 0xff, 0x75, 0x23, 0xe3, 0x6c, 0xc6, 0xbf, 0x2e, 0x71, 0xec, 0xd5, 0x7f, 0xd2, 0xe0, 0x66, + 0xca, 0x60, 0x50, 0xcb, 0x70, 0x95, 0x74, 0xc0, 0xfc, 0xf8, 0x8a, 0x07, 0x14, 0x09, 0x1b, 0xe6, + 0x64, 0xb7, 0x5e, 0x4f, 0x4f, 0x96, 0x00, 0x98, 0xf7, 0x26, 0x00, 0x94, 0x4f, 0x06, 0xd7, 0x2f, + 0x37, 0xda, 0xfb, 0x93, 0x18, 0x0e, 0xb1, 0xe6, 0xce, 0xf4, 0xd8, 0xb8, 0x10, 0xd9, 0xe0, 0xd6, + 0x33, 0x4e, 0x07, 0x80, 0x0c, 0x21, 0xa3, 0xfd, 0x69, 0xef, 0xe0, 0xf7, 0xf3, 0x8a, 0xf6, 0xf6, + 0xbc, 0xa2, 0xfd, 0x79, 0x5e, 0xd1, 0x7e, 0xb9, 0xa8, 0x5c, 0x7b, 0x7b, 0x51, 0xb9, 0xf6, 0xc7, + 0x45, 0xe5, 0xda, 0x37, 0x3b, 0x1d, 0x97, 0x1f, 0xf7, 0x5b, 0xd5, 0x36, 0xe9, 0xd5, 0x5e, 0xa0, + 0xf6, 0x09, 0xea, 0x1e, 0xa0, 0x16, 0xab, 0x85, 0x7e, 0x1f, 0x86, 0xdf, 0x70, 0xce, 0x86, 0x5f, + 0x71, 0x06, 0x3e, 0x66, 0xad, 0x39, 0xf1, 0x25, 0xe7, 0xd1, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, + 0xf8, 0xd1, 0xc2, 0xf3, 0xea, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1980,7 +1981,7 @@ type MsgClient interface { DeleteFile(ctx context.Context, in *MsgDeleteFile, opts ...grpc.CallOption) (*MsgDeleteFileResponse, error) SetProviderIP(ctx context.Context, in *MsgSetProviderIP, opts ...grpc.CallOption) (*MsgSetProviderIPResponse, error) SetProviderKeybase(ctx context.Context, in *MsgSetProviderKeybase, opts ...grpc.CallOption) (*MsgSetProviderKeybaseResponse, error) - SetProviderTotalspace(ctx context.Context, in *MsgSetProviderTotalspace, opts ...grpc.CallOption) (*MsgSetProviderTotalspaceResponse, error) + SetProviderTotalSpace(ctx context.Context, in *MsgSetProviderTotalSpace, opts ...grpc.CallOption) (*MsgSetProviderTotalSpaceResponse, error) InitProvider(ctx context.Context, in *MsgInitProvider, opts ...grpc.CallOption) (*MsgInitProviderResponse, error) ShutdownProvider(ctx context.Context, in *MsgShutdownProvider, opts ...grpc.CallOption) (*MsgShutdownProviderResponse, error) BuyStorage(ctx context.Context, in *MsgBuyStorage, opts ...grpc.CallOption) (*MsgBuyStorageResponse, error) @@ -2046,9 +2047,9 @@ func (c *msgClient) SetProviderKeybase(ctx context.Context, in *MsgSetProviderKe return out, nil } -func (c *msgClient) SetProviderTotalspace(ctx context.Context, in *MsgSetProviderTotalspace, opts ...grpc.CallOption) (*MsgSetProviderTotalspaceResponse, error) { - out := new(MsgSetProviderTotalspaceResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/SetProviderTotalspace", in, out, opts...) +func (c *msgClient) SetProviderTotalSpace(ctx context.Context, in *MsgSetProviderTotalSpace, opts ...grpc.CallOption) (*MsgSetProviderTotalSpaceResponse, error) { + out := new(MsgSetProviderTotalSpaceResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Msg/SetProviderTotalSpace", in, out, opts...) if err != nil { return nil, err } @@ -2152,7 +2153,7 @@ type MsgServer interface { DeleteFile(context.Context, *MsgDeleteFile) (*MsgDeleteFileResponse, error) SetProviderIP(context.Context, *MsgSetProviderIP) (*MsgSetProviderIPResponse, error) SetProviderKeybase(context.Context, *MsgSetProviderKeybase) (*MsgSetProviderKeybaseResponse, error) - SetProviderTotalspace(context.Context, *MsgSetProviderTotalspace) (*MsgSetProviderTotalspaceResponse, error) + SetProviderTotalSpace(context.Context, *MsgSetProviderTotalSpace) (*MsgSetProviderTotalSpaceResponse, error) InitProvider(context.Context, *MsgInitProvider) (*MsgInitProviderResponse, error) ShutdownProvider(context.Context, *MsgShutdownProvider) (*MsgShutdownProviderResponse, error) BuyStorage(context.Context, *MsgBuyStorage) (*MsgBuyStorageResponse, error) @@ -2184,8 +2185,8 @@ func (*UnimplementedMsgServer) SetProviderIP(ctx context.Context, req *MsgSetPro func (*UnimplementedMsgServer) SetProviderKeybase(ctx context.Context, req *MsgSetProviderKeybase) (*MsgSetProviderKeybaseResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetProviderKeybase not implemented") } -func (*UnimplementedMsgServer) SetProviderTotalspace(ctx context.Context, req *MsgSetProviderTotalspace) (*MsgSetProviderTotalspaceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetProviderTotalspace not implemented") +func (*UnimplementedMsgServer) SetProviderTotalSpace(ctx context.Context, req *MsgSetProviderTotalSpace) (*MsgSetProviderTotalSpaceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetProviderTotalSpace not implemented") } func (*UnimplementedMsgServer) InitProvider(ctx context.Context, req *MsgInitProvider) (*MsgInitProviderResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method InitProvider not implemented") @@ -2312,20 +2313,20 @@ func _Msg_SetProviderKeybase_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } -func _Msg_SetProviderTotalspace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSetProviderTotalspace) +func _Msg_SetProviderTotalSpace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSetProviderTotalSpace) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MsgServer).SetProviderTotalspace(ctx, in) + return srv.(MsgServer).SetProviderTotalSpace(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Msg/SetProviderTotalspace", + FullMethod: "/canine_chain.storage.Msg/SetProviderTotalSpace", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SetProviderTotalspace(ctx, req.(*MsgSetProviderTotalspace)) + return srv.(MsgServer).SetProviderTotalSpace(ctx, req.(*MsgSetProviderTotalSpace)) } return interceptor(ctx, in, info, handler) } @@ -2535,8 +2536,8 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ Handler: _Msg_SetProviderKeybase_Handler, }, { - MethodName: "SetProviderTotalspace", - Handler: _Msg_SetProviderTotalspace_Handler, + MethodName: "SetProviderTotalSpace", + Handler: _Msg_SetProviderTotalSpace_Handler, }, { MethodName: "InitProvider", @@ -2977,7 +2978,7 @@ func (m *MsgSetProviderKeybaseResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *MsgSetProviderTotalspace) Marshal() (dAtA []byte, err error) { +func (m *MsgSetProviderTotalSpace) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2987,12 +2988,12 @@ func (m *MsgSetProviderTotalspace) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgSetProviderTotalspace) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgSetProviderTotalSpace) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgSetProviderTotalspace) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgSetProviderTotalSpace) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3014,7 +3015,7 @@ func (m *MsgSetProviderTotalspace) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } -func (m *MsgSetProviderTotalspaceResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgSetProviderTotalSpaceResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3024,12 +3025,12 @@ func (m *MsgSetProviderTotalspaceResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgSetProviderTotalspaceResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgSetProviderTotalSpaceResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgSetProviderTotalspaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgSetProviderTotalSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3177,10 +3178,10 @@ func (m *MsgInitProvider) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Totalspace) > 0 { - i -= len(m.Totalspace) - copy(dAtA[i:], m.Totalspace) - i = encodeVarintTx(dAtA, i, uint64(len(m.Totalspace))) + if len(m.TotalSpace) > 0 { + i -= len(m.TotalSpace) + copy(dAtA[i:], m.TotalSpace) + i = encodeVarintTx(dAtA, i, uint64(len(m.TotalSpace))) i-- dAtA[i] = 0x22 } @@ -4068,7 +4069,7 @@ func (m *MsgSetProviderKeybaseResponse) Size() (n int) { return n } -func (m *MsgSetProviderTotalspace) Size() (n int) { +func (m *MsgSetProviderTotalSpace) Size() (n int) { if m == nil { return 0 } @@ -4085,7 +4086,7 @@ func (m *MsgSetProviderTotalspace) Size() (n int) { return n } -func (m *MsgSetProviderTotalspaceResponse) Size() (n int) { +func (m *MsgSetProviderTotalSpaceResponse) Size() (n int) { if m == nil { return 0 } @@ -4164,7 +4165,7 @@ func (m *MsgInitProvider) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Totalspace) + l = len(m.TotalSpace) if l > 0 { n += 1 + l + sovTx(uint64(l)) } @@ -5678,7 +5679,7 @@ func (m *MsgSetProviderKeybaseResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgSetProviderTotalspace) Unmarshal(dAtA []byte) error { +func (m *MsgSetProviderTotalSpace) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5701,10 +5702,10 @@ func (m *MsgSetProviderTotalspace) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgSetProviderTotalspace: wiretype end group for non-group") + return fmt.Errorf("proto: MsgSetProviderTotalSpace: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSetProviderTotalspace: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgSetProviderTotalSpace: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5792,7 +5793,7 @@ func (m *MsgSetProviderTotalspace) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgSetProviderTotalspaceResponse) Unmarshal(dAtA []byte) error { +func (m *MsgSetProviderTotalSpaceResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5815,10 +5816,10 @@ func (m *MsgSetProviderTotalspaceResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgSetProviderTotalspaceResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgSetProviderTotalSpaceResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSetProviderTotalspaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgSetProviderTotalSpaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -6297,7 +6298,7 @@ func (m *MsgInitProvider) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Totalspace", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TotalSpace", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -6325,7 +6326,7 @@ func (m *MsgInitProvider) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Totalspace = string(dAtA[iNdEx:postIndex]) + m.TotalSpace = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex From 5e78401b4be3eb7039c2154847623b43198777cd Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 8 Nov 2023 15:29:19 -0500 Subject: [PATCH 056/256] query and txs are complete --- proto/canine_chain/filetree/genesis.proto | 4 +- proto/canine_chain/filetree/query.proto | 20 +- proto/canine_chain/filetree/tx.proto | 46 +- proto/canine_chain/jklmint/params.proto | 2 +- proto/canine_chain/rns/query.proto | 20 +- proto/canine_chain/rns/tx.proto | 8 +- x/filetree/client/cli/query_pubkey.go | 8 +- x/filetree/client/cli/tx_add_editors.go | 4 +- x/filetree/client/cli/tx_add_viewers.go | 4 +- x/filetree/client/cli/tx_postkey.go | 2 +- x/filetree/client/cli/utils.go | 4 +- x/filetree/genesis.go | 4 +- x/filetree/handler.go | 4 +- x/filetree/keeper/grpc_query_pubkey.go | 8 +- x/filetree/keeper/msg_server_add_editors.go | 2 +- x/filetree/keeper/msg_server_add_viewers.go | 2 +- .../keeper/msg_server_add_viewers_test.go | 6 +- x/filetree/keeper/msg_server_post_key_test.go | 10 +- x/filetree/keeper/msg_server_postkey.go | 4 +- .../keeper/msg_server_remove_editors.go | 2 +- .../keeper/msg_server_remove_viewers.go | 2 +- x/filetree/keeper/msg_server_reset_editors.go | 2 +- x/filetree/keeper/msg_server_reset_viewers.go | 2 +- x/filetree/simulation/add_editors.go | 2 +- x/filetree/simulation/add_viewers.go | 2 +- x/filetree/simulation/postkey.go | 6 +- x/filetree/simulation/remove_editors.go | 2 +- x/filetree/simulation/remove_viewers.go | 2 +- x/filetree/simulation/reset_editors.go | 2 +- x/filetree/simulation/reset_viewers.go | 2 +- x/filetree/types/codec.go | 5 +- x/filetree/types/genesis.go | 4 +- x/filetree/types/genesis.pb.go | 48 ++- x/filetree/types/genesis_test.go | 4 +- x/filetree/types/message_add_editors.go | 6 +- x/filetree/types/message_add_viewers.go | 6 +- x/filetree/types/message_postkey.go | 20 +- x/filetree/types/message_postkey_test.go | 2 +- x/filetree/types/message_remove_editors.go | 6 +- x/filetree/types/message_remove_viewers.go | 6 +- x/filetree/types/message_reset_editors.go | 6 +- x/filetree/types/message_reset_viewers.go | 6 +- x/filetree/types/query.pb.go | 361 ++++++++-------- x/filetree/types/query.pb.gw.go | 76 ++-- x/filetree/types/tx.pb.go | 378 ++++++++-------- x/oracle/simulation/delist.go | 2 +- x/rns/client/cli/query_forsale.go | 8 +- x/rns/client/cli/tx_delist.go | 2 +- x/rns/client/cli/tx_register.go | 6 +- x/rns/handler.go | 4 +- x/rns/keeper/bidding_test.go | 2 +- x/rns/keeper/grpc_query_forsale.go | 8 +- x/rns/keeper/msg_server_basics_test.go | 25 +- x/rns/keeper/msg_server_bidding_test.go | 8 +- x/rns/keeper/msg_server_buy_test.go | 2 +- x/rns/keeper/msg_server_delist.go | 4 +- x/rns/keeper/msg_server_delist_test.go | 26 +- x/rns/keeper/msg_server_record_test.go | 4 +- x/rns/keeper/msg_server_register.go | 11 +- x/rns/keeper/register_test.go | 4 +- x/rns/keeper/transfer_test.go | 2 +- x/rns/simulation/delist.go | 2 +- x/rns/simulation/register.go | 3 +- x/rns/types/codec.go | 4 +- x/rns/types/message_delist.go | 16 +- x/rns/types/message_delist_test.go | 8 +- x/rns/types/message_register.go | 7 +- x/rns/types/message_register_test.go | 15 +- x/rns/types/query.pb.go | 403 +++++++++--------- x/rns/types/query.pb.gw.go | 62 +-- x/rns/types/tx.pb.go | 242 +++++------ 71 files changed, 982 insertions(+), 1020 deletions(-) diff --git a/proto/canine_chain/filetree/genesis.proto b/proto/canine_chain/filetree/genesis.proto index f30087847..216e28917 100644 --- a/proto/canine_chain/filetree/genesis.proto +++ b/proto/canine_chain/filetree/genesis.proto @@ -11,6 +11,6 @@ option go_package = "github.com/jackalLabs/canine-chain/x/filetree/types"; // GenesisState defines the filetree module's genesis state. message GenesisState { Params params = 1 [ (gogoproto.nullable) = false ]; - repeated Files filesList = 2 [ (gogoproto.nullable) = false ]; - repeated Pubkey pubkeyList = 3 [ (gogoproto.nullable) = false ]; + repeated Files files_list = 2 [ (gogoproto.nullable) = false ]; + repeated Pubkey pub_key_list = 3 [ (gogoproto.nullable) = false ]; } diff --git a/proto/canine_chain/filetree/query.proto b/proto/canine_chain/filetree/query.proto index ed1a38806..6385ec491 100644 --- a/proto/canine_chain/filetree/query.proto +++ b/proto/canine_chain/filetree/query.proto @@ -20,7 +20,7 @@ service Query { // Queries a Files by index. rpc Files(QueryFileRequest) returns (QueryFileResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/filetree/files/{address}/{ownerAddress}"; + "/jackal-dao/canine-chain/filetree/files/{address}/{owner_address}"; } // Queries a list of Files items. @@ -29,13 +29,13 @@ service Query { } // Queries a Pubkey by index. - rpc Pubkey(QueryPubkeyRequest) returns (QueryPubkeyResponse) { + rpc PubKey(QueryPubKeyRequest) returns (QueryPubKeyResponse) { option (google.api.http).get = "/jackal-dao/canine-chain/filetree/pubkeys/{address}"; } // Queries a list of Pubkey items. - rpc PubkeyAll(QueryAllPubkeysRequest) returns (QueryAllPubkeysResponse) { + rpc PubKeyAll(QueryAllPubKeysRequest) returns (QueryAllPubKeysResponse) { option (google.api.http).get = "/jackal-dao/canine-chain/filetree/pubkeys"; } } @@ -51,7 +51,7 @@ message QueryParamsResponse { message QueryFileRequest { string address = 1; - string ownerAddress = 2; + string owner_address = 2; } message QueryFileResponse { Files files = 1 [ (gogoproto.nullable) = false ]; } @@ -65,17 +65,17 @@ message QueryAllFilesResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryPubkeyRequest { string address = 1; } +message QueryPubKeyRequest { string address = 1; } -message QueryPubkeyResponse { - Pubkey pubkey = 1 [ (gogoproto.nullable) = false ]; +message QueryPubKeyResponse { + Pubkey pub_key = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllPubkeysRequest { +message QueryAllPubKeysRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; } -message QueryAllPubkeysResponse { - repeated Pubkey pubkey = 1 [ (gogoproto.nullable) = false ]; +message QueryAllPubKeysResponse { + repeated Pubkey pub_key = 1 [ (gogoproto.nullable) = false ]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/proto/canine_chain/filetree/tx.proto b/proto/canine_chain/filetree/tx.proto index d18c20e65..e10fae56d 100644 --- a/proto/canine_chain/filetree/tx.proto +++ b/proto/canine_chain/filetree/tx.proto @@ -7,7 +7,7 @@ option go_package = "github.com/jackalLabs/canine-chain/x/filetree/types"; service Msg { rpc PostFile(MsgPostFile) returns (MsgPostFileResponse); rpc AddViewers(MsgAddViewers) returns (MsgAddViewersResponse); - rpc Postkey(MsgPostkey) returns (MsgPostkeyResponse); + rpc PostKey(MsgPostKey) returns (MsgPostKeyResponse); rpc DeleteFile(MsgDeleteFile) returns (MsgDeleteFileResponse); rpc RemoveViewers(MsgRemoveViewers) returns (MsgRemoveViewersResponse); rpc MakeRoot(MsgMakeRoot) returns (MsgMakeRootResponse); @@ -23,36 +23,36 @@ service Msg { message MsgPostFile { string creator = 1; string account = 2; - string hashParent = 3; - string hashChild = 4; + string hash_parent = 3; + string hash_child = 4; string contents = 5; string viewers = 6; string editors = 7; - string trackingNumber = 8; + string tracking_number = 8; } message MsgPostFileResponse { string path = 1; } message MsgAddViewers { string creator = 1; - string viewerIds = 2; - string viewerKeys = 3; + string viewer_ids = 2; + string viewer_keys = 3; string address = 4; - string fileowner = 5; + string file_owner = 5; } message MsgAddViewersResponse {} -message MsgPostkey { +message MsgPostKey { string creator = 1; string key = 2; } -message MsgPostkeyResponse {} +message MsgPostKeyResponse {} message MsgDeleteFile { string creator = 1; - string hashPath = 2; + string hash_path = 2; string account = 3; } @@ -60,9 +60,9 @@ message MsgDeleteFileResponse {} message MsgRemoveViewers { string creator = 1; - string viewerIds = 2; + string viewer_ids = 2; string address = 3; - string fileowner = 4; + string file_owner = 4; } message MsgRemoveViewersResponse {} @@ -70,11 +70,11 @@ message MsgRemoveViewersResponse {} message MsgMakeRoot { string creator = 1; string account = 2; - string rootHashPath = 3; + string root_hash_path = 3; string contents = 4; string editors = 5; string viewers = 6; - string trackingNumber = 7; + string tracking_number = 7; } message MsgMakeRootResponse {} @@ -83,24 +83,24 @@ message MsgMakeRootV2 { string creator = 1; string editors = 2; string viewers = 3; - string trackingNumber = 4; + string tracking_number = 4; } message MsgAddEditors { string creator = 1; - string editorIds = 2; - string editorKeys = 3; + string editor_ids = 2; + string editor_keys = 3; string address = 4; - string fileowner = 5; + string file_owner = 5; } message MsgAddEditorsResponse {} message MsgRemoveEditors { string creator = 1; - string editorIds = 2; + string editor_ids = 2; string address = 3; - string fileowner = 4; + string file_owner = 4; } message MsgRemoveEditorsResponse {} @@ -108,7 +108,7 @@ message MsgRemoveEditorsResponse {} message MsgResetEditors { string creator = 1; string address = 2; - string fileowner = 3; + string file_owner = 3; } message MsgResetEditorsResponse {} @@ -116,7 +116,7 @@ message MsgResetEditorsResponse {} message MsgResetViewers { string creator = 1; string address = 2; - string fileowner = 3; + string file_owner = 3; } message MsgResetViewersResponse {} @@ -124,7 +124,7 @@ message MsgResetViewersResponse {} message MsgChangeOwner { string creator = 1; string address = 2; - string fileOwner = 3; + string file_owner = 3; string newOwner = 4; } diff --git a/proto/canine_chain/jklmint/params.proto b/proto/canine_chain/jklmint/params.proto index d98b2a7b2..2a3e8c6d0 100644 --- a/proto/canine_chain/jklmint/params.proto +++ b/proto/canine_chain/jklmint/params.proto @@ -10,7 +10,7 @@ message Params { option (gogoproto.goproto_stringer) = false; string mint_denom = 1 [ (gogoproto.moretags) = "yaml:\"mint_denom\"" ]; - int64 providerRatio = 2 [ (gogoproto.moretags) = "yaml:\"provider_ratio\"" ]; + int64 providerRatio = 2 [ (gogoproto.moretags) = "yaml:\"provider_ratio\"" ]; // TODO: fix casing int64 tokensPerBlock = 3 [ (gogoproto.moretags) = "yaml:\"tokens_per_block\"" ]; diff --git a/proto/canine_chain/rns/query.proto b/proto/canine_chain/rns/query.proto index 0c0d27549..f2a0238a9 100644 --- a/proto/canine_chain/rns/query.proto +++ b/proto/canine_chain/rns/query.proto @@ -41,14 +41,14 @@ service Query { } // Queries a Listing by index. - rpc Forsale(QueryForsaleRequest) returns (QueryForsaleResponse) { + rpc ForSale(QueryForSaleRequest) returns (QueryForSaleResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/rns/forsale/{name}"; + "/jackal-dao/canine-chain/rns/for_sale/{name}"; } // Queries all Listings. - rpc ForsaleAll(QueryAllForsalesRequest) returns (QueryAllForsalesResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/rns/forsale"; + rpc ForSaleAll(QueryAllForSalesRequest) returns (QueryAllForSalesResponse) { + option (google.api.http).get = "/jackal-dao/canine-chain/rns/for_sale"; } // Queries a Init by index. @@ -118,18 +118,18 @@ message QueryAllBidsResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryForsaleRequest { string name = 1; } +message QueryForSaleRequest { string name = 1; } -message QueryForsaleResponse { - Forsale forsale = 1 [ (gogoproto.nullable) = false ]; +message QueryForSaleResponse { + Forsale for_sale = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllForsalesRequest { +message QueryAllForSalesRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; } -message QueryAllForsalesResponse { - repeated Forsale forsale = 1 [ (gogoproto.nullable) = false ]; +message QueryAllForSalesResponse { + repeated Forsale for_sale = 1 [ (gogoproto.nullable) = false ]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/proto/canine_chain/rns/tx.proto b/proto/canine_chain/rns/tx.proto index 5ace7c167..dd8610474 100644 --- a/proto/canine_chain/rns/tx.proto +++ b/proto/canine_chain/rns/tx.proto @@ -11,7 +11,7 @@ service Msg { rpc CancelBid(MsgCancelBid) returns (MsgCancelBidResponse); rpc List(MsgList) returns (MsgListResponse); rpc Buy(MsgBuy) returns (MsgBuyResponse); - rpc Delist(MsgDelist) returns (MsgDelistResponse); + rpc DeList(MsgDeList) returns (MsgDeListResponse); rpc Transfer(MsgTransfer) returns (MsgTransferResponse); rpc AddRecord(MsgAddRecord) returns (MsgAddRecordResponse); rpc DelRecord(MsgDelRecord) returns (MsgDelRecordResponse); @@ -23,7 +23,7 @@ service Msg { message MsgRegister { string creator = 1; string name = 2; - string years = 3; + int64 years = 3; string data = 4; } @@ -75,12 +75,12 @@ message MsgBuy { message MsgBuyResponse {} -message MsgDelist { +message MsgDeList { string creator = 1; string name = 2; } -message MsgDelistResponse {} +message MsgDeListResponse {} message MsgTransfer { string creator = 1; diff --git a/x/filetree/client/cli/query_pubkey.go b/x/filetree/client/cli/query_pubkey.go index 606ed140b..056b74cb1 100644 --- a/x/filetree/client/cli/query_pubkey.go +++ b/x/filetree/client/cli/query_pubkey.go @@ -23,11 +23,11 @@ func CmdListPubkey() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllPubkeysRequest{ + params := &types.QueryAllPubKeysRequest{ Pagination: pageReq, } - res, err := queryClient.PubkeyAll(context.Background(), params) + res, err := queryClient.PubKeyAll(context.Background(), params) if err != nil { return err } @@ -54,11 +54,11 @@ func CmdShowPubkey() *cobra.Command { argAddress := args[0] - params := &types.QueryPubkeyRequest{ + params := &types.QueryPubKeyRequest{ Address: argAddress, } - res, err := queryClient.Pubkey(context.Background(), params) + res, err := queryClient.PubKey(context.Background(), params) if err != nil { return err } diff --git a/x/filetree/client/cli/tx_add_editors.go b/x/filetree/client/cli/tx_add_editors.go index 4cd2ac105..7df2c08d4 100644 --- a/x/filetree/client/cli/tx_add_editors.go +++ b/x/filetree/client/cli/tx_add_editors.go @@ -57,12 +57,12 @@ func CmdAddEditors() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.Pubkey(cmd.Context(), &types.QueryPubkeyRequest{Address: key.String()}) + res, err := queryClient.PubKey(cmd.Context(), &types.QueryPubKeyRequest{Address: key.String()}) if err != nil { return types.ErrPubKeyNotFound } - pkey, err := eciesgo.NewPublicKeyFromHex(res.Pubkey.Key) + pkey, err := eciesgo.NewPublicKeyFromHex(res.PubKey.Key) if err != nil { return err } diff --git a/x/filetree/client/cli/tx_add_viewers.go b/x/filetree/client/cli/tx_add_viewers.go index 92ec7c446..3dc07ba10 100644 --- a/x/filetree/client/cli/tx_add_viewers.go +++ b/x/filetree/client/cli/tx_add_viewers.go @@ -56,12 +56,12 @@ func CmdAddViewers() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.Pubkey(cmd.Context(), &types.QueryPubkeyRequest{Address: key.String()}) + res, err := queryClient.PubKey(cmd.Context(), &types.QueryPubKeyRequest{Address: key.String()}) if err != nil { return types.ErrPubKeyNotFound } - pkey, err := eciesgo.NewPublicKeyFromHex(res.Pubkey.Key) + pkey, err := eciesgo.NewPublicKeyFromHex(res.PubKey.Key) if err != nil { return err } diff --git a/x/filetree/client/cli/tx_postkey.go b/x/filetree/client/cli/tx_postkey.go index 0c73ed9ed..c27c8048e 100644 --- a/x/filetree/client/cli/tx_postkey.go +++ b/x/filetree/client/cli/tx_postkey.go @@ -31,7 +31,7 @@ func CmdPostkey() *cobra.Command { pubKey := newKey.PublicKey.Bytes(false) - msg := types.NewMsgPostkey( + msg := types.NewMsgPostKey( clientCtx.GetFromAddress().String(), fmt.Sprintf("%x", pubKey), ) diff --git a/x/filetree/client/cli/utils.go b/x/filetree/client/cli/utils.go index 4a2efb49d..4c20a3a07 100644 --- a/x/filetree/client/cli/utils.go +++ b/x/filetree/client/cli/utils.go @@ -66,12 +66,12 @@ func encryptFileAESKey(cmd *cobra.Command, key string, argKeys string) ([]byte, queryClient := filetypes.NewQueryClient(clientCtx) - res, err := queryClient.Pubkey(cmd.Context(), &filetypes.QueryPubkeyRequest{Address: key}) + res, err := queryClient.PubKey(cmd.Context(), &filetypes.QueryPubKeyRequest{Address: key}) if err != nil { return nil, filetypes.ErrPubKeyNotFound } - pkey, err := eciesgo.NewPublicKeyFromHex(res.Pubkey.Key) + pkey, err := eciesgo.NewPublicKeyFromHex(res.PubKey.Key) if err != nil { return nil, err } diff --git a/x/filetree/genesis.go b/x/filetree/genesis.go index a14b89185..7893e1bee 100644 --- a/x/filetree/genesis.go +++ b/x/filetree/genesis.go @@ -14,7 +14,7 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) k.SetFiles(ctx, elem) } // Set all the pubkey - for _, elem := range genState.PubkeyList { + for _, elem := range genState.PubKeyList { k.SetPubkey(ctx, elem) } // this line is used by starport scaffolding # genesis/module/init @@ -27,7 +27,7 @@ func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { genesis.Params = k.GetParams(ctx) genesis.FilesList = k.GetAllFiles(ctx) - genesis.PubkeyList = k.GetAllPubkey(ctx) + genesis.PubKeyList = k.GetAllPubkey(ctx) // this line is used by starport scaffolding # genesis/module/export return genesis diff --git a/x/filetree/handler.go b/x/filetree/handler.go index 75f48c9a8..98dcb443f 100644 --- a/x/filetree/handler.go +++ b/x/filetree/handler.go @@ -23,8 +23,8 @@ func NewHandler(k keeper.Keeper) sdk.Handler { case *types.MsgAddViewers: res, err := msgServer.AddViewers(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgPostkey: - res, err := msgServer.Postkey(sdk.WrapSDKContext(ctx), msg) + case *types.MsgPostKey: + res, err := msgServer.PostKey(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) case *types.MsgDeleteFile: res, err := msgServer.DeleteFile(sdk.WrapSDKContext(ctx), msg) diff --git a/x/filetree/keeper/grpc_query_pubkey.go b/x/filetree/keeper/grpc_query_pubkey.go index 39090d54a..24cdfa655 100644 --- a/x/filetree/keeper/grpc_query_pubkey.go +++ b/x/filetree/keeper/grpc_query_pubkey.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) PubkeyAll(c context.Context, req *types.QueryAllPubkeysRequest) (*types.QueryAllPubkeysResponse, error) { +func (k Keeper) PubKeyAll(c context.Context, req *types.QueryAllPubKeysRequest) (*types.QueryAllPubKeysResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -35,10 +35,10 @@ func (k Keeper) PubkeyAll(c context.Context, req *types.QueryAllPubkeysRequest) return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryAllPubkeysResponse{Pubkey: pubkeys, Pagination: pageRes}, nil + return &types.QueryAllPubKeysResponse{PubKey: pubkeys, Pagination: pageRes}, nil } -func (k Keeper) Pubkey(c context.Context, req *types.QueryPubkeyRequest) (*types.QueryPubkeyResponse, error) { +func (k Keeper) PubKey(c context.Context, req *types.QueryPubKeyRequest) (*types.QueryPubKeyResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -52,5 +52,5 @@ func (k Keeper) Pubkey(c context.Context, req *types.QueryPubkeyRequest) (*types return nil, status.Error(codes.NotFound, "not found") } - return &types.QueryPubkeyResponse{Pubkey: val}, nil + return &types.QueryPubKeyResponse{PubKey: val}, nil } diff --git a/x/filetree/keeper/msg_server_add_editors.go b/x/filetree/keeper/msg_server_add_editors.go index e001ef50b..ab80b7d83 100644 --- a/x/filetree/keeper/msg_server_add_editors.go +++ b/x/filetree/keeper/msg_server_add_editors.go @@ -12,7 +12,7 @@ import ( func (k msgServer) AddEditors(goCtx context.Context, msg *types.MsgAddEditors) (*types.MsgAddEditorsResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - file, found := k.GetFiles(ctx, msg.Address, msg.Fileowner) + file, found := k.GetFiles(ctx, msg.Address, msg.FileOwner) if !found { return nil, types.ErrFileNotFound } diff --git a/x/filetree/keeper/msg_server_add_viewers.go b/x/filetree/keeper/msg_server_add_viewers.go index bd7e56a5f..4db265fcd 100644 --- a/x/filetree/keeper/msg_server_add_viewers.go +++ b/x/filetree/keeper/msg_server_add_viewers.go @@ -12,7 +12,7 @@ import ( func (k msgServer) AddViewers(goCtx context.Context, msg *types.MsgAddViewers) (*types.MsgAddViewersResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - file, found := k.GetFiles(ctx, msg.Address, msg.Fileowner) + file, found := k.GetFiles(ctx, msg.Address, msg.FileOwner) if !found { return nil, types.ErrFileNotFound } diff --git a/x/filetree/keeper/msg_server_add_viewers_test.go b/x/filetree/keeper/msg_server_add_viewers_test.go index 540ad3bc7..2175a6b12 100644 --- a/x/filetree/keeper/msg_server_add_viewers_test.go +++ b/x/filetree/keeper/msg_server_add_viewers_test.go @@ -85,14 +85,14 @@ func (suite *KeeperTestSuite) TestMsgAddViewers() { // If alice wants to share pepe with bob, she will take bob's public key from chain and use ECIES to encrypt pepeAESKeyAndIV - pubKeyReq := types.QueryPubkeyRequest{ + pubKeyReq := types.QueryPubKeyRequest{ Address: bob, } - res, err := suite.queryClient.Pubkey(suite.ctx.Context(), &pubKeyReq) + res, err := suite.queryClient.PubKey(suite.ctx.Context(), &pubKeyReq) suite.Require().NoError(err) // bob uploaded his public key in hex format so we decode it from hex format - pkey, err := eciesgo.NewPublicKeyFromHex(res.Pubkey.Key) + pkey, err := eciesgo.NewPublicKeyFromHex(res.PubKey.Key) suite.Require().NoError(err) encryptedPepeAESKeyAndIV, err := eciesgo.Encrypt(pkey, []byte(pepeAESKeyAndIV)) // convert to hex diff --git a/x/filetree/keeper/msg_server_post_key_test.go b/x/filetree/keeper/msg_server_post_key_test.go index f9795aa21..6cbdcf63d 100644 --- a/x/filetree/keeper/msg_server_post_key_test.go +++ b/x/filetree/keeper/msg_server_post_key_test.go @@ -23,14 +23,14 @@ func (suite *KeeperTestSuite) TestMsgPostKey() { pubKey := privateKey.PublicKey.Bytes(false) cases := []struct { - preRun func() *types.MsgPostkey + preRun func() *types.MsgPostKey expErr bool expErrMsg string name string }{ { - preRun: func() *types.MsgPostkey { - return types.NewMsgPostkey( + preRun: func() *types.MsgPostKey { + return types.NewMsgPostKey( alice, fmt.Sprintf("%x", pubKey), ) @@ -44,13 +44,13 @@ func (suite *KeeperTestSuite) TestMsgPostKey() { suite.Run(tc.name, func() { msg := tc.preRun() suite.Require().NoError(err) - res, err := msgSrvr.Postkey(context, msg) + res, err := msgSrvr.PostKey(context, msg) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) } else { suite.Require().NoError(err) - suite.Require().EqualValues(types.MsgPostkeyResponse{}, *res) + suite.Require().EqualValues(types.MsgPostKeyResponse{}, *res) } }) diff --git a/x/filetree/keeper/msg_server_postkey.go b/x/filetree/keeper/msg_server_postkey.go index b9ec63031..480e9be4d 100644 --- a/x/filetree/keeper/msg_server_postkey.go +++ b/x/filetree/keeper/msg_server_postkey.go @@ -7,7 +7,7 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/filetree/types" ) -func (k msgServer) Postkey(goCtx context.Context, msg *types.MsgPostkey) (*types.MsgPostkeyResponse, error) { +func (k msgServer) PostKey(goCtx context.Context, msg *types.MsgPostKey) (*types.MsgPostKeyResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) pubKey := types.Pubkey{ @@ -16,5 +16,5 @@ func (k msgServer) Postkey(goCtx context.Context, msg *types.MsgPostkey) (*types } k.SetPubkey(ctx, pubKey) - return &types.MsgPostkeyResponse{}, nil + return &types.MsgPostKeyResponse{}, nil } diff --git a/x/filetree/keeper/msg_server_remove_editors.go b/x/filetree/keeper/msg_server_remove_editors.go index a6e3ad8a1..9e2cdbf61 100644 --- a/x/filetree/keeper/msg_server_remove_editors.go +++ b/x/filetree/keeper/msg_server_remove_editors.go @@ -12,7 +12,7 @@ import ( func (k msgServer) RemoveEditors(goCtx context.Context, msg *types.MsgRemoveEditors) (*types.MsgRemoveEditorsResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - file, found := k.GetFiles(ctx, msg.Address, msg.Fileowner) + file, found := k.GetFiles(ctx, msg.Address, msg.FileOwner) if !found { return nil, types.ErrFileNotFound } diff --git a/x/filetree/keeper/msg_server_remove_viewers.go b/x/filetree/keeper/msg_server_remove_viewers.go index b218529d5..44e2da707 100644 --- a/x/filetree/keeper/msg_server_remove_viewers.go +++ b/x/filetree/keeper/msg_server_remove_viewers.go @@ -12,7 +12,7 @@ import ( func (k msgServer) RemoveViewers(goCtx context.Context, msg *types.MsgRemoveViewers) (*types.MsgRemoveViewersResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - file, found := k.GetFiles(ctx, msg.Address, msg.Fileowner) + file, found := k.GetFiles(ctx, msg.Address, msg.FileOwner) if !found { return nil, types.ErrFileNotFound } diff --git a/x/filetree/keeper/msg_server_reset_editors.go b/x/filetree/keeper/msg_server_reset_editors.go index 5321c90c8..31776641b 100644 --- a/x/filetree/keeper/msg_server_reset_editors.go +++ b/x/filetree/keeper/msg_server_reset_editors.go @@ -11,7 +11,7 @@ import ( func (k msgServer) ResetEditors(goCtx context.Context, msg *types.MsgResetEditors) (*types.MsgResetEditorsResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - file, found := k.GetFiles(ctx, msg.Address, msg.Fileowner) + file, found := k.GetFiles(ctx, msg.Address, msg.FileOwner) if !found { return nil, types.ErrFileNotFound } diff --git a/x/filetree/keeper/msg_server_reset_viewers.go b/x/filetree/keeper/msg_server_reset_viewers.go index 135b1cb75..07eec7998 100644 --- a/x/filetree/keeper/msg_server_reset_viewers.go +++ b/x/filetree/keeper/msg_server_reset_viewers.go @@ -11,7 +11,7 @@ import ( func (k msgServer) ResetViewers(goCtx context.Context, msg *types.MsgResetViewers) (*types.MsgResetViewersResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - file, found := k.GetFiles(ctx, msg.Address, msg.Fileowner) + file, found := k.GetFiles(ctx, msg.Address, msg.FileOwner) if !found { return nil, types.ErrFileNotFound } diff --git a/x/filetree/simulation/add_editors.go b/x/filetree/simulation/add_editors.go index 3f84d1b66..83f5219a9 100644 --- a/x/filetree/simulation/add_editors.go +++ b/x/filetree/simulation/add_editors.go @@ -59,7 +59,7 @@ func SimulateMsgAddEditors( EditorIds: editIds, EditorKeys: editKeys, Address: merklePath, - Fileowner: ownerAddress, + FileOwner: ownerAddress, } spendable := bk.SpendableCoins(ctx, simAccount.Address) diff --git a/x/filetree/simulation/add_viewers.go b/x/filetree/simulation/add_viewers.go index 8af0ef515..bba2c87af 100644 --- a/x/filetree/simulation/add_viewers.go +++ b/x/filetree/simulation/add_viewers.go @@ -60,7 +60,7 @@ func SimulateMsgAddViewers( ViewerIds: viewIds, ViewerKeys: viewKeys, Address: merklePath, - Fileowner: ownerAddress, + FileOwner: ownerAddress, } spendable := bk.SpendableCoins(ctx, simAccount.Address) diff --git a/x/filetree/simulation/postkey.go b/x/filetree/simulation/postkey.go index c87b9650c..17a4ffe91 100644 --- a/x/filetree/simulation/postkey.go +++ b/x/filetree/simulation/postkey.go @@ -25,11 +25,11 @@ func SimulateMsgPostkey( privateKey, err := types.MakePrivateKey(address) if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgPostkey, "unable to create privateKey"), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgPostKey, "unable to create privateKey"), nil, err } pubKey := privateKey.PublicKey.Bytes(false) - msg := &types.MsgPostkey{ + msg := &types.MsgPostKey{ Creator: simAccount.Address.String(), Key: fmt.Sprintf("%x", pubKey), } @@ -37,7 +37,7 @@ func SimulateMsgPostkey( spendable := bk.SpendableCoins(ctx, simAccount.Address) fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgPostkey, "failed to generate fee"), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgPostKey, "failed to generate fee"), nil, err } txCtx := simulation.OperationInput{ diff --git a/x/filetree/simulation/remove_editors.go b/x/filetree/simulation/remove_editors.go index 7c2423590..f7160027c 100644 --- a/x/filetree/simulation/remove_editors.go +++ b/x/filetree/simulation/remove_editors.go @@ -49,7 +49,7 @@ func SimulateMsgRemoveEditors( Creator: simAccount.Address.String(), EditorIds: editIds, Address: merklePath, - Fileowner: ownerAddress, + FileOwner: ownerAddress, } spendable := bk.SpendableCoins(ctx, simAccount.Address) diff --git a/x/filetree/simulation/remove_viewers.go b/x/filetree/simulation/remove_viewers.go index 6764a8c89..48d303228 100644 --- a/x/filetree/simulation/remove_viewers.go +++ b/x/filetree/simulation/remove_viewers.go @@ -49,7 +49,7 @@ func SimulateMsgRemoveViewers( Creator: simAccount.Address.String(), ViewerIds: viewIds, Address: merklePath, - Fileowner: ownerAddress, + FileOwner: ownerAddress, } spendable := bk.SpendableCoins(ctx, simAccount.Address) diff --git a/x/filetree/simulation/reset_editors.go b/x/filetree/simulation/reset_editors.go index 37ae75c90..fa8792d47 100644 --- a/x/filetree/simulation/reset_editors.go +++ b/x/filetree/simulation/reset_editors.go @@ -43,7 +43,7 @@ func SimulateMsgResetEditors( msg := &types.MsgResetEditors{ Creator: simAccount.Address.String(), Address: merklePath, - Fileowner: ownerAddress, + FileOwner: ownerAddress, } spendable := bk.SpendableCoins(ctx, simAccount.Address) diff --git a/x/filetree/simulation/reset_viewers.go b/x/filetree/simulation/reset_viewers.go index 67c8c7275..2e4368ee1 100644 --- a/x/filetree/simulation/reset_viewers.go +++ b/x/filetree/simulation/reset_viewers.go @@ -43,7 +43,7 @@ func SimulateMsgResetViewers( msg := &types.MsgResetViewers{ Creator: simAccount.Address.String(), Address: merklePath, - Fileowner: ownerAddress, + FileOwner: ownerAddress, } spendable := bk.SpendableCoins(ctx, simAccount.Address) diff --git a/x/filetree/types/codec.go b/x/filetree/types/codec.go index 62bd73c9c..b444c4b42 100644 --- a/x/filetree/types/codec.go +++ b/x/filetree/types/codec.go @@ -11,7 +11,7 @@ import ( func RegisterCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgPostFile{}, "filetree/PostFile", nil) cdc.RegisterConcrete(&MsgAddViewers{}, "filetree/AddViewers", nil) - cdc.RegisterConcrete(&MsgPostkey{}, "filetree/Postkey", nil) + cdc.RegisterConcrete(&MsgPostKey{}, "filetree/PostKey", nil) cdc.RegisterConcrete(&MsgDeleteFile{}, "filetree/DeleteFile", nil) cdc.RegisterConcrete(&MsgRemoveViewers{}, "filetree/RemoveViewers", nil) cdc.RegisterConcrete(&MsgMakeRoot{}, "filetree/MakeRoot", nil) @@ -20,7 +20,6 @@ func RegisterCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgResetEditors{}, "filetree/ResetEditors", nil) cdc.RegisterConcrete(&MsgResetViewers{}, "filetree/ResetViewers", nil) cdc.RegisterConcrete(&MsgChangeOwner{}, "filetree/ChangeOwner", nil) - // this line is used by starport scaffolding # 2 } func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { @@ -31,7 +30,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgAddViewers{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgPostkey{}, + &MsgPostKey{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), &MsgDeleteFile{}, diff --git a/x/filetree/types/genesis.go b/x/filetree/types/genesis.go index f807ea99b..43632dda0 100644 --- a/x/filetree/types/genesis.go +++ b/x/filetree/types/genesis.go @@ -11,7 +11,7 @@ const DefaultIndex uint64 = 1 func DefaultGenesis() *GenesisState { return &GenesisState{ FilesList: []Files{}, - PubkeyList: []Pubkey{}, + PubKeyList: []Pubkey{}, // this line is used by starport scaffolding # genesis/types/default Params: DefaultParams(), } @@ -33,7 +33,7 @@ func (gs GenesisState) Validate() error { // Check for duplicated index in pubkey pubkeyIndexMap := make(map[string]struct{}) - for _, elem := range gs.PubkeyList { + for _, elem := range gs.PubKeyList { index := string(PubkeyKey(elem.Address)) if _, ok := pubkeyIndexMap[index]; ok { return fmt.Errorf("duplicated index for pubkey") diff --git a/x/filetree/types/genesis.pb.go b/x/filetree/types/genesis.pb.go index b801df78a..16b557124 100644 --- a/x/filetree/types/genesis.pb.go +++ b/x/filetree/types/genesis.pb.go @@ -26,8 +26,8 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the filetree module's genesis state. type GenesisState struct { Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` - FilesList []Files `protobuf:"bytes,2,rep,name=filesList,proto3" json:"filesList"` - PubkeyList []Pubkey `protobuf:"bytes,3,rep,name=pubkeyList,proto3" json:"pubkeyList"` + FilesList []Files `protobuf:"bytes,2,rep,name=files_list,json=filesList,proto3" json:"files_list"` + PubKeyList []Pubkey `protobuf:"bytes,3,rep,name=pub_key_list,json=pubKeyList,proto3" json:"pub_key_list"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -77,9 +77,9 @@ func (m *GenesisState) GetFilesList() []Files { return nil } -func (m *GenesisState) GetPubkeyList() []Pubkey { +func (m *GenesisState) GetPubKeyList() []Pubkey { if m != nil { - return m.PubkeyList + return m.PubKeyList } return nil } @@ -93,24 +93,26 @@ func init() { } var fileDescriptor_c254ae20e1613e96 = []byte{ - // 272 bytes of a gzipped FileDescriptorProto + // 290 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4e, 0x4e, 0xcc, 0xcb, 0xcc, 0x4b, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0xcc, 0xd3, 0x4f, 0xcb, 0xcc, 0x49, 0x2d, 0x29, 0x4a, 0x4d, 0xd5, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x45, 0x56, 0xa4, 0x07, 0x53, 0x24, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa1, 0x0f, 0x62, 0x41, 0x14, 0x4b, 0x29, 0x61, 0x37, 0xb1, 0x20, 0xb1, 0x28, 0x31, 0x17, 0x6a, 0xa0, 0x94, 0x22, 0x76, 0x35, 0x20, 0x46, 0x31, 0x01, 0x63, 0x4a, 0x93, 0xb2, 0x53, 0x2b, 0x21, 0x6a, 0x94, - 0x2e, 0x31, 0x72, 0xf1, 0xb8, 0x43, 0x5c, 0x1a, 0x5c, 0x92, 0x58, 0x92, 0x2a, 0x64, 0xcd, 0xc5, + 0xae, 0x32, 0x72, 0xf1, 0xb8, 0x43, 0x5c, 0x1a, 0x5c, 0x92, 0x58, 0x92, 0x2a, 0x64, 0xcd, 0xc5, 0x06, 0xb1, 0x47, 0x82, 0x51, 0x81, 0x51, 0x83, 0xdb, 0x48, 0x56, 0x0f, 0xab, 0xcb, 0xf5, 0x02, - 0xc0, 0x8a, 0x9c, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82, 0x6a, 0x11, 0x72, 0xe0, 0xe2, 0x04, - 0x3b, 0xc0, 0x27, 0xb3, 0xb8, 0x44, 0x82, 0x49, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x06, 0x87, 0x7e, - 0x37, 0x90, 0x3a, 0xa8, 0x76, 0x84, 0x26, 0x21, 0x67, 0x2e, 0x2e, 0x88, 0xfb, 0xc0, 0x46, 0x30, - 0x83, 0x8d, 0xc0, 0xe9, 0x04, 0xb0, 0x42, 0xa8, 0x19, 0x48, 0xda, 0x9c, 0x7c, 0x4f, 0x3c, 0x92, - 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, - 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x38, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, - 0x39, 0x3f, 0x57, 0x3f, 0x2b, 0x31, 0x39, 0x3b, 0x31, 0xc7, 0x27, 0x31, 0xa9, 0x58, 0x1f, 0x62, - 0xbe, 0x2e, 0x24, 0xa0, 0x2a, 0x10, 0x41, 0x55, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x0e, - 0x2a, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0xe6, 0x04, 0xee, 0xe9, 0x01, 0x00, 0x00, + 0xc0, 0x8a, 0x9c, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82, 0x6a, 0x11, 0x72, 0xe4, 0xe2, 0x02, + 0x3b, 0x20, 0x3e, 0x27, 0xb3, 0xb8, 0x44, 0x82, 0x49, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x06, 0x87, + 0x01, 0x6e, 0x20, 0x85, 0x50, 0xfd, 0x9c, 0x60, 0x5d, 0x3e, 0x99, 0xc5, 0x25, 0x42, 0xae, 0x5c, + 0x3c, 0x05, 0xa5, 0x49, 0xf1, 0xd9, 0xa9, 0x95, 0x10, 0x43, 0x98, 0xc1, 0x86, 0xe0, 0x74, 0x05, + 0xd8, 0x2f, 0x50, 0x53, 0xb8, 0x0a, 0x4a, 0x93, 0xbc, 0x53, 0x2b, 0x41, 0xc6, 0x38, 0xf9, 0x9e, + 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, + 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x71, 0x7a, 0x66, 0x49, 0x46, 0x69, + 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x56, 0x62, 0x72, 0x76, 0x62, 0x8e, 0x4f, 0x62, 0x52, 0xb1, + 0x3e, 0xc4, 0x7c, 0x5d, 0x48, 0x58, 0x55, 0x20, 0x42, 0xab, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, + 0x0d, 0x1c, 0x5a, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7c, 0xd1, 0x56, 0x55, 0xec, 0x01, + 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -133,10 +135,10 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.PubkeyList) > 0 { - for iNdEx := len(m.PubkeyList) - 1; iNdEx >= 0; iNdEx-- { + if len(m.PubKeyList) > 0 { + for iNdEx := len(m.PubKeyList) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.PubkeyList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.PubKeyList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -199,8 +201,8 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.PubkeyList) > 0 { - for _, e := range m.PubkeyList { + if len(m.PubKeyList) > 0 { + for _, e := range m.PubKeyList { l = e.Size() n += 1 + l + sovGenesis(uint64(l)) } @@ -312,7 +314,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PubkeyList", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PubKeyList", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -339,8 +341,8 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PubkeyList = append(m.PubkeyList, Pubkey{}) - if err := m.PubkeyList[len(m.PubkeyList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.PubKeyList = append(m.PubKeyList, Pubkey{}) + if err := m.PubKeyList[len(m.PubKeyList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/filetree/types/genesis_test.go b/x/filetree/types/genesis_test.go index 98da83b90..ed66bda9e 100644 --- a/x/filetree/types/genesis_test.go +++ b/x/filetree/types/genesis_test.go @@ -29,7 +29,7 @@ func TestGenesisState_Validate(t *testing.T) { Address: "1", }, }, - PubkeyList: []types.Pubkey{ + PubKeyList: []types.Pubkey{ { Address: "0", }, @@ -58,7 +58,7 @@ func TestGenesisState_Validate(t *testing.T) { { desc: "duplicated pubkey", genState: &types.GenesisState{ - PubkeyList: []types.Pubkey{ + PubKeyList: []types.Pubkey{ { Address: "0", }, diff --git a/x/filetree/types/message_add_editors.go b/x/filetree/types/message_add_editors.go index 7dbdd407b..00b68c538 100644 --- a/x/filetree/types/message_add_editors.go +++ b/x/filetree/types/message_add_editors.go @@ -15,7 +15,7 @@ func NewMsgAddEditors(creator string, editorIds string, editorKeys string, addre EditorIds: editorIds, EditorKeys: editorKeys, Address: address, - Fileowner: fileowner, + FileOwner: fileowner, } } @@ -59,9 +59,9 @@ func (msg *MsgAddEditors) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid address: %s", msg.Address) } - if msg.Fileowner == "" { + if msg.FileOwner == "" { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid file owner: %s", msg.Fileowner) + "invalid file owner: %s", msg.FileOwner) } return nil diff --git a/x/filetree/types/message_add_viewers.go b/x/filetree/types/message_add_viewers.go index dc3250a94..274b7f60d 100644 --- a/x/filetree/types/message_add_viewers.go +++ b/x/filetree/types/message_add_viewers.go @@ -15,7 +15,7 @@ func NewMsgAddViewers(creator string, viewerIds string, viewerKeys string, addre ViewerIds: viewerIds, ViewerKeys: viewerKeys, Address: address, - Fileowner: owner, + FileOwner: owner, } } @@ -59,9 +59,9 @@ func (msg *MsgAddViewers) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid address: %s", msg.Address) } - if msg.Fileowner == "" { + if msg.FileOwner == "" { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid file owner: %s", msg.Fileowner) + "invalid file owner: %s", msg.FileOwner) } return nil diff --git a/x/filetree/types/message_postkey.go b/x/filetree/types/message_postkey.go index 78bea6e4a..1211dbb68 100644 --- a/x/filetree/types/message_postkey.go +++ b/x/filetree/types/message_postkey.go @@ -5,26 +5,26 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -const TypeMsgPostkey = "postkey" +const TypeMsgPostKey = "post_key" -var _ sdk.Msg = &MsgPostkey{} +var _ sdk.Msg = &MsgPostKey{} -func NewMsgPostkey(creator string, key string) *MsgPostkey { - return &MsgPostkey{ +func NewMsgPostKey(creator string, key string) *MsgPostKey { + return &MsgPostKey{ Creator: creator, Key: key, } } -func (msg *MsgPostkey) Route() string { +func (msg *MsgPostKey) Route() string { return RouterKey } -func (msg *MsgPostkey) Type() string { - return TypeMsgPostkey +func (msg *MsgPostKey) Type() string { + return TypeMsgPostKey } -func (msg *MsgPostkey) GetSigners() []sdk.AccAddress { +func (msg *MsgPostKey) GetSigners() []sdk.AccAddress { creator, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { panic(err) @@ -32,12 +32,12 @@ func (msg *MsgPostkey) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{creator} } -func (msg *MsgPostkey) GetSignBytes() []byte { +func (msg *MsgPostKey) GetSignBytes() []byte { bz := ModuleCdc.MustMarshalJSON(msg) return sdk.MustSortJSON(bz) } -func (msg *MsgPostkey) ValidateBasic() error { +func (msg *MsgPostKey) ValidateBasic() error { _, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) diff --git a/x/filetree/types/message_postkey_test.go b/x/filetree/types/message_postkey_test.go index 760f08490..b48fa52a3 100644 --- a/x/filetree/types/message_postkey_test.go +++ b/x/filetree/types/message_postkey_test.go @@ -34,7 +34,7 @@ func TestMsgPostkey_ValidateBasic(t *testing.T) { for name, tt := range tests { t.Run(name, func(t *testing.T) { - msg := NewMsgPostkey( + msg := NewMsgPostKey( tt.Creator, tt.Key, ) diff --git a/x/filetree/types/message_remove_editors.go b/x/filetree/types/message_remove_editors.go index 2b73c5b12..f0adf46b7 100644 --- a/x/filetree/types/message_remove_editors.go +++ b/x/filetree/types/message_remove_editors.go @@ -14,7 +14,7 @@ func NewMsgRemoveEditors(creator string, editorIds string, address string, fileo Creator: creator, EditorIds: editorIds, Address: address, - Fileowner: fileowner, + FileOwner: fileowner, } } @@ -53,9 +53,9 @@ func (msg *MsgRemoveEditors) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid address: %s", msg.Address) } - if msg.Fileowner == "" { + if msg.FileOwner == "" { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid file owner: %s", msg.Fileowner) + "invalid file owner: %s", msg.FileOwner) } return nil diff --git a/x/filetree/types/message_remove_viewers.go b/x/filetree/types/message_remove_viewers.go index ac5e58d52..3b0187c34 100644 --- a/x/filetree/types/message_remove_viewers.go +++ b/x/filetree/types/message_remove_viewers.go @@ -14,7 +14,7 @@ func NewMsgRemoveViewers(creator string, viewerIds string, address string, fileo Creator: creator, ViewerIds: viewerIds, Address: address, - Fileowner: fileowner, + FileOwner: fileowner, } } @@ -53,9 +53,9 @@ func (msg *MsgRemoveViewers) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid address: %s", msg.Address) } - if msg.Fileowner == "" { + if msg.FileOwner == "" { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid file owner: %s", msg.Fileowner) + "invalid file owner: %s", msg.FileOwner) } return nil diff --git a/x/filetree/types/message_reset_editors.go b/x/filetree/types/message_reset_editors.go index 75dd87aa0..128bbc2d2 100644 --- a/x/filetree/types/message_reset_editors.go +++ b/x/filetree/types/message_reset_editors.go @@ -13,7 +13,7 @@ func NewMsgResetEditors(creator string, address string, fileowner string) *MsgRe return &MsgResetEditors{ Creator: creator, Address: address, - Fileowner: fileowner, + FileOwner: fileowner, } } @@ -48,9 +48,9 @@ func (msg *MsgResetEditors) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid address: %s", msg.Address) } - if msg.Fileowner == "" { + if msg.FileOwner == "" { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid file owner: %s", msg.Fileowner) + "invalid file owner: %s", msg.FileOwner) } return nil diff --git a/x/filetree/types/message_reset_viewers.go b/x/filetree/types/message_reset_viewers.go index cce515be8..d0fd823bb 100644 --- a/x/filetree/types/message_reset_viewers.go +++ b/x/filetree/types/message_reset_viewers.go @@ -13,7 +13,7 @@ func NewMsgResetViewers(creator string, address string, fileowner string) *MsgRe return &MsgResetViewers{ Creator: creator, Address: address, - Fileowner: fileowner, + FileOwner: fileowner, } } @@ -48,9 +48,9 @@ func (msg *MsgResetViewers) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid address: %s", msg.Address) } - if msg.Fileowner == "" { + if msg.FileOwner == "" { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid file owner: %s", msg.Fileowner) + "invalid file owner: %s", msg.FileOwner) } return nil diff --git a/x/filetree/types/query.pb.go b/x/filetree/types/query.pb.go index d47cb8cfe..937b72143 100644 --- a/x/filetree/types/query.pb.go +++ b/x/filetree/types/query.pb.go @@ -115,7 +115,7 @@ func (m *QueryParamsResponse) GetParams() Params { type QueryFileRequest struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - OwnerAddress string `protobuf:"bytes,2,opt,name=ownerAddress,proto3" json:"ownerAddress,omitempty"` + OwnerAddress string `protobuf:"bytes,2,opt,name=owner_address,json=ownerAddress,proto3" json:"owner_address,omitempty"` } func (m *QueryFileRequest) Reset() { *m = QueryFileRequest{} } @@ -305,22 +305,22 @@ func (m *QueryAllFilesResponse) GetPagination() *query.PageResponse { return nil } -type QueryPubkeyRequest struct { +type QueryPubKeyRequest struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryPubkeyRequest) Reset() { *m = QueryPubkeyRequest{} } -func (m *QueryPubkeyRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPubkeyRequest) ProtoMessage() {} -func (*QueryPubkeyRequest) Descriptor() ([]byte, []int) { +func (m *QueryPubKeyRequest) Reset() { *m = QueryPubKeyRequest{} } +func (m *QueryPubKeyRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPubKeyRequest) ProtoMessage() {} +func (*QueryPubKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor_f2d116acb9d238bd, []int{6} } -func (m *QueryPubkeyRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryPubKeyRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryPubkeyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryPubKeyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryPubkeyRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryPubKeyRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -330,41 +330,41 @@ func (m *QueryPubkeyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryPubkeyRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPubkeyRequest.Merge(m, src) +func (m *QueryPubKeyRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPubKeyRequest.Merge(m, src) } -func (m *QueryPubkeyRequest) XXX_Size() int { +func (m *QueryPubKeyRequest) XXX_Size() int { return m.Size() } -func (m *QueryPubkeyRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPubkeyRequest.DiscardUnknown(m) +func (m *QueryPubKeyRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPubKeyRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryPubkeyRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryPubKeyRequest proto.InternalMessageInfo -func (m *QueryPubkeyRequest) GetAddress() string { +func (m *QueryPubKeyRequest) GetAddress() string { if m != nil { return m.Address } return "" } -type QueryPubkeyResponse struct { - Pubkey Pubkey `protobuf:"bytes,1,opt,name=pubkey,proto3" json:"pubkey"` +type QueryPubKeyResponse struct { + PubKey Pubkey `protobuf:"bytes,1,opt,name=pub_key,json=pubKey,proto3" json:"pub_key"` } -func (m *QueryPubkeyResponse) Reset() { *m = QueryPubkeyResponse{} } -func (m *QueryPubkeyResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPubkeyResponse) ProtoMessage() {} -func (*QueryPubkeyResponse) Descriptor() ([]byte, []int) { +func (m *QueryPubKeyResponse) Reset() { *m = QueryPubKeyResponse{} } +func (m *QueryPubKeyResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPubKeyResponse) ProtoMessage() {} +func (*QueryPubKeyResponse) Descriptor() ([]byte, []int) { return fileDescriptor_f2d116acb9d238bd, []int{7} } -func (m *QueryPubkeyResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryPubKeyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryPubkeyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryPubKeyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryPubkeyResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryPubKeyResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -374,41 +374,41 @@ func (m *QueryPubkeyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryPubkeyResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPubkeyResponse.Merge(m, src) +func (m *QueryPubKeyResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPubKeyResponse.Merge(m, src) } -func (m *QueryPubkeyResponse) XXX_Size() int { +func (m *QueryPubKeyResponse) XXX_Size() int { return m.Size() } -func (m *QueryPubkeyResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPubkeyResponse.DiscardUnknown(m) +func (m *QueryPubKeyResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPubKeyResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryPubkeyResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryPubKeyResponse proto.InternalMessageInfo -func (m *QueryPubkeyResponse) GetPubkey() Pubkey { +func (m *QueryPubKeyResponse) GetPubKey() Pubkey { if m != nil { - return m.Pubkey + return m.PubKey } return Pubkey{} } -type QueryAllPubkeysRequest struct { +type QueryAllPubKeysRequest struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllPubkeysRequest) Reset() { *m = QueryAllPubkeysRequest{} } -func (m *QueryAllPubkeysRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllPubkeysRequest) ProtoMessage() {} -func (*QueryAllPubkeysRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllPubKeysRequest) Reset() { *m = QueryAllPubKeysRequest{} } +func (m *QueryAllPubKeysRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllPubKeysRequest) ProtoMessage() {} +func (*QueryAllPubKeysRequest) Descriptor() ([]byte, []int) { return fileDescriptor_f2d116acb9d238bd, []int{8} } -func (m *QueryAllPubkeysRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllPubKeysRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllPubkeysRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllPubKeysRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllPubkeysRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllPubKeysRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -418,42 +418,42 @@ func (m *QueryAllPubkeysRequest) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryAllPubkeysRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllPubkeysRequest.Merge(m, src) +func (m *QueryAllPubKeysRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllPubKeysRequest.Merge(m, src) } -func (m *QueryAllPubkeysRequest) XXX_Size() int { +func (m *QueryAllPubKeysRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllPubkeysRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllPubkeysRequest.DiscardUnknown(m) +func (m *QueryAllPubKeysRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllPubKeysRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllPubkeysRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllPubKeysRequest proto.InternalMessageInfo -func (m *QueryAllPubkeysRequest) GetPagination() *query.PageRequest { +func (m *QueryAllPubKeysRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllPubkeysResponse struct { - Pubkey []Pubkey `protobuf:"bytes,1,rep,name=pubkey,proto3" json:"pubkey"` +type QueryAllPubKeysResponse struct { + PubKey []Pubkey `protobuf:"bytes,1,rep,name=pub_key,json=pubKey,proto3" json:"pub_key"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllPubkeysResponse) Reset() { *m = QueryAllPubkeysResponse{} } -func (m *QueryAllPubkeysResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllPubkeysResponse) ProtoMessage() {} -func (*QueryAllPubkeysResponse) Descriptor() ([]byte, []int) { +func (m *QueryAllPubKeysResponse) Reset() { *m = QueryAllPubKeysResponse{} } +func (m *QueryAllPubKeysResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllPubKeysResponse) ProtoMessage() {} +func (*QueryAllPubKeysResponse) Descriptor() ([]byte, []int) { return fileDescriptor_f2d116acb9d238bd, []int{9} } -func (m *QueryAllPubkeysResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllPubKeysResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllPubkeysResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllPubKeysResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllPubkeysResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllPubKeysResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -463,26 +463,26 @@ func (m *QueryAllPubkeysResponse) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QueryAllPubkeysResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllPubkeysResponse.Merge(m, src) +func (m *QueryAllPubKeysResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllPubKeysResponse.Merge(m, src) } -func (m *QueryAllPubkeysResponse) XXX_Size() int { +func (m *QueryAllPubKeysResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllPubkeysResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllPubkeysResponse.DiscardUnknown(m) +func (m *QueryAllPubKeysResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllPubKeysResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllPubkeysResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllPubKeysResponse proto.InternalMessageInfo -func (m *QueryAllPubkeysResponse) GetPubkey() []Pubkey { +func (m *QueryAllPubKeysResponse) GetPubKey() []Pubkey { if m != nil { - return m.Pubkey + return m.PubKey } return nil } -func (m *QueryAllPubkeysResponse) GetPagination() *query.PageResponse { +func (m *QueryAllPubKeysResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } @@ -496,57 +496,58 @@ func init() { proto.RegisterType((*QueryFileResponse)(nil), "canine_chain.filetree.QueryFileResponse") proto.RegisterType((*QueryAllFilesRequest)(nil), "canine_chain.filetree.QueryAllFilesRequest") proto.RegisterType((*QueryAllFilesResponse)(nil), "canine_chain.filetree.QueryAllFilesResponse") - proto.RegisterType((*QueryPubkeyRequest)(nil), "canine_chain.filetree.QueryPubkeyRequest") - proto.RegisterType((*QueryPubkeyResponse)(nil), "canine_chain.filetree.QueryPubkeyResponse") - proto.RegisterType((*QueryAllPubkeysRequest)(nil), "canine_chain.filetree.QueryAllPubkeysRequest") - proto.RegisterType((*QueryAllPubkeysResponse)(nil), "canine_chain.filetree.QueryAllPubkeysResponse") + proto.RegisterType((*QueryPubKeyRequest)(nil), "canine_chain.filetree.QueryPubKeyRequest") + proto.RegisterType((*QueryPubKeyResponse)(nil), "canine_chain.filetree.QueryPubKeyResponse") + proto.RegisterType((*QueryAllPubKeysRequest)(nil), "canine_chain.filetree.QueryAllPubKeysRequest") + proto.RegisterType((*QueryAllPubKeysResponse)(nil), "canine_chain.filetree.QueryAllPubKeysResponse") } func init() { proto.RegisterFile("canine_chain/filetree/query.proto", fileDescriptor_f2d116acb9d238bd) } var fileDescriptor_f2d116acb9d238bd = []byte{ - // 649 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x3d, 0x6f, 0xd3, 0x40, - 0x18, 0xc7, 0xe3, 0x96, 0x06, 0x7a, 0x30, 0xc0, 0x91, 0x42, 0x65, 0x15, 0x43, 0x8d, 0x44, 0x9a, - 0x96, 0xdc, 0x29, 0x8d, 0x90, 0x90, 0xba, 0x90, 0x0c, 0x85, 0x81, 0x4a, 0x21, 0x23, 0x03, 0x70, - 0x4e, 0x0e, 0xd7, 0xd4, 0xf1, 0xb9, 0x3e, 0x07, 0xa8, 0xaa, 0x2e, 0x8c, 0x4c, 0x48, 0x95, 0x18, - 0x10, 0x88, 0x85, 0x0f, 0xd3, 0xb1, 0x12, 0x0b, 0x13, 0x42, 0x09, 0x1f, 0x04, 0xf9, 0xee, 0x4c, - 0xec, 0xbc, 0x39, 0x95, 0xba, 0xc5, 0xbe, 0xff, 0xf3, 0x7f, 0x7e, 0x7e, 0x5e, 0x2e, 0x60, 0xb5, - 0x45, 0x3c, 0xc7, 0xa3, 0x2f, 0x5b, 0xbb, 0xc4, 0xf1, 0xf0, 0x6b, 0xc7, 0xa5, 0x61, 0x40, 0x29, - 0xde, 0xef, 0xd2, 0xe0, 0x00, 0xf9, 0x01, 0x0b, 0x19, 0x5c, 0x4a, 0x4a, 0x50, 0x2c, 0xd1, 0x0b, - 0x36, 0xb3, 0x99, 0x50, 0xe0, 0xe8, 0x97, 0x14, 0xeb, 0x2b, 0x36, 0x63, 0xb6, 0x4b, 0x31, 0xf1, - 0x1d, 0x4c, 0x3c, 0x8f, 0x85, 0x24, 0x74, 0x98, 0xc7, 0xd5, 0xe9, 0x7a, 0x8b, 0xf1, 0x0e, 0xe3, - 0xd8, 0x22, 0x5c, 0xe5, 0xc0, 0x6f, 0x2b, 0x16, 0x0d, 0x49, 0x05, 0xfb, 0xc4, 0x76, 0x3c, 0x21, - 0x56, 0x5a, 0x73, 0x3c, 0x99, 0x4f, 0x02, 0xd2, 0x89, 0xfd, 0x26, 0xd0, 0x47, 0x3f, 0x78, 0x86, - 0x4d, 0xd7, 0xda, 0xa3, 0xea, 0x0b, 0xcd, 0x02, 0x80, 0xcf, 0x22, 0x98, 0x86, 0xf0, 0x6e, 0xd2, - 0xfd, 0x2e, 0xe5, 0xa1, 0xd9, 0x04, 0xd7, 0x53, 0x6f, 0xb9, 0xcf, 0x3c, 0x4e, 0xe1, 0x16, 0xc8, - 0x4b, 0x86, 0x65, 0xed, 0x8e, 0xb6, 0x76, 0x79, 0xf3, 0x16, 0x1a, 0x5b, 0x1f, 0x24, 0xc3, 0xea, - 0x17, 0x4e, 0x7e, 0xdf, 0xce, 0x35, 0x55, 0x88, 0xd9, 0x00, 0x57, 0x85, 0xe7, 0xb6, 0xe3, 0x52, - 0x95, 0x07, 0x2e, 0x83, 0x8b, 0xa4, 0xdd, 0x0e, 0x28, 0x97, 0x8e, 0x8b, 0xcd, 0xf8, 0x11, 0x9a, - 0xe0, 0x0a, 0x7b, 0xe7, 0xd1, 0xa0, 0xa6, 0x8e, 0xe7, 0xc4, 0x71, 0xea, 0x9d, 0xb9, 0x03, 0xae, - 0x25, 0x1c, 0x15, 0xe3, 0x43, 0xb0, 0x20, 0x6a, 0xa0, 0x10, 0x57, 0x26, 0x20, 0x46, 0x31, 0x31, - 0xa1, 0x0c, 0x30, 0x5f, 0x80, 0x82, 0xb0, 0xab, 0xb9, 0xae, 0x38, 0x8d, 0x21, 0xb7, 0x01, 0x18, - 0x74, 0x48, 0xd9, 0xde, 0x43, 0xb2, 0x9d, 0x28, 0x6a, 0x27, 0x92, 0x23, 0xa3, 0xda, 0x89, 0x1a, - 0xc4, 0x8e, 0x3f, 0xb0, 0x99, 0x88, 0x34, 0xbf, 0x68, 0x60, 0x69, 0x28, 0xc1, 0x28, 0xf3, 0xfc, - 0x99, 0x98, 0xe1, 0xe3, 0x14, 0xdb, 0x9c, 0x60, 0x2b, 0x66, 0xb2, 0xc9, 0xb4, 0x29, 0x38, 0x14, - 0xcf, 0x81, 0x18, 0x8e, 0xcc, 0xfe, 0x0c, 0x26, 0x44, 0xe9, 0x13, 0x13, 0x22, 0xde, 0x64, 0x4d, - 0x88, 0x10, 0xfd, 0x9f, 0x10, 0xf1, 0x64, 0xbe, 0x02, 0x37, 0xe2, 0xfa, 0xc8, 0xf3, 0x73, 0x6f, - 0xc1, 0x77, 0x0d, 0xdc, 0x1c, 0x49, 0x31, 0x06, 0x7d, 0xfe, 0x8c, 0xe8, 0xe7, 0xd6, 0x87, 0xcd, - 0xe3, 0x3c, 0x58, 0x10, 0x84, 0xf0, 0xa3, 0x06, 0xf2, 0x72, 0x91, 0x60, 0x69, 0x02, 0xca, 0xe8, - 0xe6, 0xea, 0xeb, 0xb3, 0x48, 0x65, 0x5e, 0xb3, 0xf4, 0xe1, 0xe7, 0xdf, 0xe3, 0xb9, 0xbb, 0x70, - 0x15, 0xbf, 0x21, 0xad, 0x3d, 0xe2, 0xb6, 0x09, 0xc3, 0x32, 0x7a, 0xf8, 0xce, 0x81, 0x3f, 0x34, - 0xb0, 0x20, 0xc6, 0x0f, 0x16, 0xa7, 0x25, 0x48, 0xec, 0xb6, 0xbe, 0x96, 0x2d, 0x54, 0x1c, 0x4f, - 0x04, 0x47, 0x1d, 0x3e, 0x52, 0x1c, 0xe5, 0x01, 0x48, 0x79, 0xdc, 0xf5, 0x86, 0x0f, 0xd5, 0x14, - 0x1e, 0xe1, 0xc3, 0xe4, 0x85, 0x70, 0x04, 0x3f, 0x6b, 0xe0, 0x92, 0xc0, 0xac, 0xb9, 0x2e, 0xdc, - 0x98, 0x06, 0x30, 0xb4, 0xe4, 0xfa, 0xfd, 0xd9, 0xc4, 0x8a, 0x18, 0x0b, 0xe2, 0x12, 0x2c, 0xce, - 0x48, 0x0c, 0xbf, 0x46, 0xcd, 0x94, 0xa3, 0x32, 0xbd, 0x99, 0xc9, 0xf5, 0xcb, 0x68, 0x66, 0x6a, - 0xf3, 0xcc, 0x2d, 0x81, 0xf4, 0x00, 0x56, 0xb3, 0x91, 0xe4, 0xcc, 0x26, 0xca, 0x08, 0xbf, 0x69, - 0x60, 0x51, 0xfa, 0x45, 0x85, 0x2b, 0x67, 0xd4, 0x22, 0xbd, 0x9c, 0x3a, 0x9a, 0x55, 0xae, 0x48, - 0x2b, 0x82, 0x74, 0x03, 0x96, 0x66, 0x26, 0xad, 0xef, 0x9c, 0xf4, 0x0c, 0xed, 0xb4, 0x67, 0x68, - 0x7f, 0x7a, 0x86, 0xf6, 0xa9, 0x6f, 0xe4, 0x4e, 0xfb, 0x46, 0xee, 0x57, 0xdf, 0xc8, 0x3d, 0xaf, - 0xda, 0x4e, 0xb8, 0xdb, 0xb5, 0x50, 0x8b, 0x75, 0x94, 0xdd, 0x53, 0x62, 0xf1, 0xb4, 0xdd, 0xfb, - 0x81, 0x61, 0x78, 0xe0, 0x53, 0x6e, 0xe5, 0xc5, 0x7f, 0x5f, 0xf5, 0x5f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xb5, 0xb4, 0xdc, 0x21, 0x02, 0x08, 0x00, 0x00, + // 666 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x4d, 0x6b, 0x13, 0x41, + 0x18, 0xc7, 0xb3, 0xad, 0x49, 0xed, 0xa8, 0xa0, 0x63, 0xaa, 0x65, 0xa9, 0xab, 0xdd, 0x82, 0x69, + 0x5a, 0xb3, 0x43, 0x1a, 0x04, 0xa1, 0x5e, 0x52, 0xa1, 0x22, 0x5a, 0x68, 0xe3, 0xcd, 0x83, 0x71, + 0x36, 0x19, 0xb7, 0x6b, 0x36, 0x3b, 0xdb, 0x7d, 0x51, 0x43, 0xe9, 0xc5, 0xa3, 0x27, 0x41, 0xf1, + 0x20, 0x0a, 0x5e, 0xfc, 0x2e, 0x3d, 0x16, 0xbc, 0x78, 0x12, 0x49, 0xfc, 0x20, 0xb2, 0x33, 0xb3, + 0x66, 0x37, 0x6f, 0x9b, 0x42, 0x6f, 0xc9, 0xce, 0xff, 0xf9, 0x3f, 0xbf, 0x7d, 0x5e, 0x66, 0xc1, + 0x72, 0x03, 0xdb, 0xa6, 0x4d, 0xea, 0x8d, 0x7d, 0x6c, 0xda, 0xe8, 0xa5, 0x69, 0x11, 0xdf, 0x25, + 0x04, 0x1d, 0x04, 0xc4, 0xed, 0x68, 0x8e, 0x4b, 0x7d, 0x0a, 0x17, 0xe2, 0x12, 0x2d, 0x92, 0xc8, + 0x79, 0x83, 0x1a, 0x94, 0x29, 0x50, 0xf8, 0x8b, 0x8b, 0xe5, 0x25, 0x83, 0x52, 0xc3, 0x22, 0x08, + 0x3b, 0x26, 0xc2, 0xb6, 0x4d, 0x7d, 0xec, 0x9b, 0xd4, 0xf6, 0xc4, 0xe9, 0x5a, 0x83, 0x7a, 0x6d, + 0xea, 0x21, 0x1d, 0x7b, 0x22, 0x07, 0x7a, 0x5d, 0xd6, 0x89, 0x8f, 0xcb, 0xc8, 0xc1, 0x86, 0x69, + 0x33, 0xb1, 0xd0, 0xaa, 0xa3, 0xc9, 0x1c, 0xec, 0xe2, 0x76, 0xe4, 0x37, 0x86, 0x3e, 0xfc, 0xe1, + 0xa5, 0xd8, 0x04, 0x7a, 0x8b, 0x88, 0x37, 0x54, 0xf3, 0x00, 0xee, 0x85, 0x30, 0xbb, 0xcc, 0xbb, + 0x46, 0x0e, 0x02, 0xe2, 0xf9, 0x6a, 0x0d, 0x5c, 0x4d, 0x3c, 0xf5, 0x1c, 0x6a, 0x7b, 0x04, 0x6e, + 0x82, 0x1c, 0x67, 0x58, 0x94, 0x6e, 0x49, 0xab, 0x17, 0x36, 0x6e, 0x68, 0x23, 0xeb, 0xa3, 0xf1, + 0xb0, 0xad, 0x73, 0xc7, 0xbf, 0x6f, 0x66, 0x6a, 0x22, 0x44, 0xdd, 0x03, 0x97, 0x99, 0xe7, 0xb6, + 0x69, 0x11, 0x91, 0x07, 0x2e, 0x82, 0x39, 0xdc, 0x6c, 0xba, 0xc4, 0xe3, 0x8e, 0xf3, 0xb5, 0xe8, + 0x2f, 0x5c, 0x01, 0x97, 0xe8, 0x1b, 0x9b, 0xb8, 0xf5, 0xe8, 0x7c, 0x86, 0x9d, 0x5f, 0x64, 0x0f, + 0xab, 0xfc, 0x99, 0xba, 0x03, 0xae, 0xc4, 0x2c, 0x05, 0xe4, 0x3d, 0x90, 0x65, 0x45, 0x10, 0x8c, + 0x4b, 0x63, 0x18, 0xc3, 0x98, 0x08, 0x91, 0x07, 0xa8, 0xcf, 0x41, 0x9e, 0xd9, 0x55, 0x2d, 0x8b, + 0x9d, 0x46, 0x94, 0xdb, 0x00, 0xf4, 0x5b, 0x24, 0x6c, 0x6f, 0x6b, 0xbc, 0x9f, 0x5a, 0xd8, 0x4f, + 0x8d, 0xcf, 0x8c, 0xe8, 0xa7, 0xb6, 0x8b, 0x8d, 0xe8, 0x0d, 0x6b, 0xb1, 0x48, 0xf5, 0x8b, 0x04, + 0x16, 0x06, 0x12, 0x0c, 0x33, 0xcf, 0x9e, 0x8a, 0x19, 0x3e, 0x4c, 0xb0, 0xcd, 0x30, 0xb6, 0x42, + 0x2a, 0x1b, 0x4f, 0x9b, 0x80, 0xd3, 0xa2, 0x41, 0x08, 0xf4, 0xc7, 0xa4, 0x93, 0xda, 0x20, 0xf5, + 0x69, 0x34, 0x22, 0x42, 0x2f, 0xde, 0xe4, 0x3e, 0x98, 0x73, 0x02, 0xbd, 0xde, 0x22, 0x9d, 0xb4, + 0x19, 0x61, 0x53, 0xf8, 0x7f, 0x46, 0x98, 0x8b, 0xfa, 0x02, 0x5c, 0x8b, 0x0a, 0xc4, 0x7d, 0xcf, + 0xbc, 0x07, 0xdf, 0x25, 0x70, 0x7d, 0x28, 0xc5, 0x28, 0xf6, 0xd9, 0x53, 0xb2, 0x9f, 0x59, 0x27, + 0x36, 0x3e, 0xe5, 0x40, 0x96, 0x21, 0xc2, 0xf7, 0x12, 0xc8, 0xf1, 0x5d, 0x82, 0xc5, 0x31, 0x28, + 0xc3, 0xcb, 0x2b, 0xaf, 0x4d, 0x23, 0xe5, 0x79, 0xd5, 0xe2, 0xbb, 0x9f, 0x7f, 0x3f, 0xce, 0xac, + 0xc0, 0x65, 0xf4, 0x0a, 0x37, 0x5a, 0xd8, 0x6a, 0x62, 0x8a, 0x78, 0xf4, 0xe0, 0xb5, 0x03, 0x7f, + 0x48, 0x20, 0xcb, 0x06, 0x10, 0x16, 0x26, 0x25, 0x88, 0xad, 0xb7, 0xbc, 0x9a, 0x2e, 0x14, 0x1c, + 0x8f, 0x18, 0xc7, 0x03, 0x58, 0x15, 0x1c, 0xa5, 0x3e, 0x48, 0x69, 0xd4, 0x0d, 0x87, 0x0e, 0xc5, + 0x1c, 0x1e, 0xa1, 0xc3, 0xc4, 0x3d, 0x71, 0x04, 0x3f, 0x4b, 0xe0, 0x3c, 0xe3, 0xac, 0x5a, 0x16, + 0x5c, 0x9f, 0x44, 0x30, 0xb0, 0xe7, 0xf2, 0x9d, 0xe9, 0xc4, 0x02, 0x19, 0x31, 0xe4, 0x22, 0x2c, + 0x4c, 0x89, 0x0c, 0xbf, 0x86, 0xdd, 0xe4, 0xb3, 0x32, 0xb9, 0x9b, 0xf1, 0x0d, 0x4c, 0xe9, 0x66, + 0x62, 0xf9, 0xd4, 0x4d, 0x86, 0x74, 0x17, 0x56, 0xd2, 0x91, 0xf8, 0x47, 0x20, 0x56, 0x47, 0xf8, + 0x4d, 0x02, 0xf3, 0xdc, 0x2f, 0x2c, 0x5c, 0x29, 0xa5, 0x16, 0xc9, 0xf5, 0x94, 0xb5, 0x69, 0xe5, + 0x82, 0xb4, 0xcc, 0x48, 0xd7, 0x61, 0x71, 0x6a, 0xd2, 0xad, 0x9d, 0xe3, 0xae, 0x22, 0x9d, 0x74, + 0x15, 0xe9, 0x4f, 0x57, 0x91, 0x3e, 0xf4, 0x94, 0xcc, 0x49, 0x4f, 0xc9, 0xfc, 0xea, 0x29, 0x99, + 0x67, 0x15, 0xc3, 0xf4, 0xf7, 0x03, 0x5d, 0x6b, 0xd0, 0xb6, 0xb0, 0x7b, 0x82, 0x75, 0x2f, 0x69, + 0xf7, 0xb6, 0x6f, 0xe8, 0x77, 0x1c, 0xe2, 0xe9, 0x39, 0xf6, 0xfd, 0xab, 0xfc, 0x0b, 0x00, 0x00, + 0xff, 0xff, 0xbd, 0x1a, 0x63, 0x65, 0x06, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -568,9 +569,9 @@ type QueryClient interface { // Queries a list of Files items. FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) // Queries a Pubkey by index. - Pubkey(ctx context.Context, in *QueryPubkeyRequest, opts ...grpc.CallOption) (*QueryPubkeyResponse, error) + PubKey(ctx context.Context, in *QueryPubKeyRequest, opts ...grpc.CallOption) (*QueryPubKeyResponse, error) // Queries a list of Pubkey items. - PubkeyAll(ctx context.Context, in *QueryAllPubkeysRequest, opts ...grpc.CallOption) (*QueryAllPubkeysResponse, error) + PubKeyAll(ctx context.Context, in *QueryAllPubKeysRequest, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) } type queryClient struct { @@ -608,18 +609,18 @@ func (c *queryClient) FilesAll(ctx context.Context, in *QueryAllFilesRequest, op return out, nil } -func (c *queryClient) Pubkey(ctx context.Context, in *QueryPubkeyRequest, opts ...grpc.CallOption) (*QueryPubkeyResponse, error) { - out := new(QueryPubkeyResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/Pubkey", in, out, opts...) +func (c *queryClient) PubKey(ctx context.Context, in *QueryPubKeyRequest, opts ...grpc.CallOption) (*QueryPubKeyResponse, error) { + out := new(QueryPubKeyResponse) + err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/PubKey", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) PubkeyAll(ctx context.Context, in *QueryAllPubkeysRequest, opts ...grpc.CallOption) (*QueryAllPubkeysResponse, error) { - out := new(QueryAllPubkeysResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/PubkeyAll", in, out, opts...) +func (c *queryClient) PubKeyAll(ctx context.Context, in *QueryAllPubKeysRequest, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) { + out := new(QueryAllPubKeysResponse) + err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/PubKeyAll", in, out, opts...) if err != nil { return nil, err } @@ -635,9 +636,9 @@ type QueryServer interface { // Queries a list of Files items. FilesAll(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) // Queries a Pubkey by index. - Pubkey(context.Context, *QueryPubkeyRequest) (*QueryPubkeyResponse, error) + PubKey(context.Context, *QueryPubKeyRequest) (*QueryPubKeyResponse, error) // Queries a list of Pubkey items. - PubkeyAll(context.Context, *QueryAllPubkeysRequest) (*QueryAllPubkeysResponse, error) + PubKeyAll(context.Context, *QueryAllPubKeysRequest) (*QueryAllPubKeysResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -653,11 +654,11 @@ func (*UnimplementedQueryServer) Files(ctx context.Context, req *QueryFileReques func (*UnimplementedQueryServer) FilesAll(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FilesAll not implemented") } -func (*UnimplementedQueryServer) Pubkey(ctx context.Context, req *QueryPubkeyRequest) (*QueryPubkeyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Pubkey not implemented") +func (*UnimplementedQueryServer) PubKey(ctx context.Context, req *QueryPubKeyRequest) (*QueryPubKeyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PubKey not implemented") } -func (*UnimplementedQueryServer) PubkeyAll(ctx context.Context, req *QueryAllPubkeysRequest) (*QueryAllPubkeysResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PubkeyAll not implemented") +func (*UnimplementedQueryServer) PubKeyAll(ctx context.Context, req *QueryAllPubKeysRequest) (*QueryAllPubKeysResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PubKeyAll not implemented") } func RegisterQueryServer(s grpc1.Server, srv QueryServer) { @@ -718,38 +719,38 @@ func _Query_FilesAll_Handler(srv interface{}, ctx context.Context, dec func(inte return interceptor(ctx, in, info, handler) } -func _Query_Pubkey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPubkeyRequest) +func _Query_PubKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPubKeyRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Pubkey(ctx, in) + return srv.(QueryServer).PubKey(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.filetree.Query/Pubkey", + FullMethod: "/canine_chain.filetree.Query/PubKey", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Pubkey(ctx, req.(*QueryPubkeyRequest)) + return srv.(QueryServer).PubKey(ctx, req.(*QueryPubKeyRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_PubkeyAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllPubkeysRequest) +func _Query_PubKeyAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllPubKeysRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).PubkeyAll(ctx, in) + return srv.(QueryServer).PubKeyAll(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.filetree.Query/PubkeyAll", + FullMethod: "/canine_chain.filetree.Query/PubKeyAll", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PubkeyAll(ctx, req.(*QueryAllPubkeysRequest)) + return srv.(QueryServer).PubKeyAll(ctx, req.(*QueryAllPubKeysRequest)) } return interceptor(ctx, in, info, handler) } @@ -771,12 +772,12 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_FilesAll_Handler, }, { - MethodName: "Pubkey", - Handler: _Query_Pubkey_Handler, + MethodName: "PubKey", + Handler: _Query_PubKey_Handler, }, { - MethodName: "PubkeyAll", - Handler: _Query_PubkeyAll_Handler, + MethodName: "PubKeyAll", + Handler: _Query_PubKeyAll_Handler, }, }, Streams: []grpc.StreamDesc{}, @@ -993,7 +994,7 @@ func (m *QueryAllFilesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryPubkeyRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryPubKeyRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1003,12 +1004,12 @@ func (m *QueryPubkeyRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryPubkeyRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPubKeyRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPubkeyRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPubKeyRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1023,7 +1024,7 @@ func (m *QueryPubkeyRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryPubkeyResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryPubKeyResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1033,18 +1034,18 @@ func (m *QueryPubkeyResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryPubkeyResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPubKeyResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPubkeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPubKeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Pubkey.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.PubKey.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1056,7 +1057,7 @@ func (m *QueryPubkeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllPubkeysRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllPubKeysRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1066,12 +1067,12 @@ func (m *QueryAllPubkeysRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllPubkeysRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllPubKeysRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllPubkeysRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllPubKeysRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1091,7 +1092,7 @@ func (m *QueryAllPubkeysRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryAllPubkeysResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllPubKeysResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1101,12 +1102,12 @@ func (m *QueryAllPubkeysResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllPubkeysResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllPubKeysResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllPubkeysResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllPubKeysResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1123,10 +1124,10 @@ func (m *QueryAllPubkeysResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x12 } - if len(m.Pubkey) > 0 { - for iNdEx := len(m.Pubkey) - 1; iNdEx >= 0; iNdEx-- { + if len(m.PubKey) > 0 { + for iNdEx := len(m.PubKey) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Pubkey[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.PubKey[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1231,7 +1232,7 @@ func (m *QueryAllFilesResponse) Size() (n int) { return n } -func (m *QueryPubkeyRequest) Size() (n int) { +func (m *QueryPubKeyRequest) Size() (n int) { if m == nil { return 0 } @@ -1244,18 +1245,18 @@ func (m *QueryPubkeyRequest) Size() (n int) { return n } -func (m *QueryPubkeyResponse) Size() (n int) { +func (m *QueryPubKeyResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.Pubkey.Size() + l = m.PubKey.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllPubkeysRequest) Size() (n int) { +func (m *QueryAllPubKeysRequest) Size() (n int) { if m == nil { return 0 } @@ -1268,14 +1269,14 @@ func (m *QueryAllPubkeysRequest) Size() (n int) { return n } -func (m *QueryAllPubkeysResponse) Size() (n int) { +func (m *QueryAllPubKeysResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Pubkey) > 0 { - for _, e := range m.Pubkey { + if len(m.PubKey) > 0 { + for _, e := range m.PubKey { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -1829,7 +1830,7 @@ func (m *QueryAllFilesResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPubkeyRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPubKeyRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1852,10 +1853,10 @@ func (m *QueryPubkeyRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPubkeyRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPubKeyRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPubkeyRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPubKeyRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1911,7 +1912,7 @@ func (m *QueryPubkeyRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPubkeyResponse) Unmarshal(dAtA []byte) error { +func (m *QueryPubKeyResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1934,15 +1935,15 @@ func (m *QueryPubkeyResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPubkeyResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPubKeyResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPubkeyResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPubKeyResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pubkey", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PubKey", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1969,7 +1970,7 @@ func (m *QueryPubkeyResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Pubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.PubKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1994,7 +1995,7 @@ func (m *QueryPubkeyResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllPubkeysRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllPubKeysRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2017,10 +2018,10 @@ func (m *QueryAllPubkeysRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllPubkeysRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllPubKeysRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllPubkeysRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllPubKeysRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2080,7 +2081,7 @@ func (m *QueryAllPubkeysRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllPubkeysResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllPubKeysResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2103,15 +2104,15 @@ func (m *QueryAllPubkeysResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllPubkeysResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllPubKeysResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllPubkeysResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllPubKeysResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pubkey", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PubKey", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -2138,8 +2139,8 @@ func (m *QueryAllPubkeysResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Pubkey = append(m.Pubkey, Pubkey{}) - if err := m.Pubkey[len(m.Pubkey)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.PubKey = append(m.PubKey, Pubkey{}) + if err := m.PubKey[len(m.PubKey)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/filetree/types/query.pb.gw.go b/x/filetree/types/query.pb.gw.go index f70a397b1..259a120fe 100644 --- a/x/filetree/types/query.pb.gw.go +++ b/x/filetree/types/query.pb.gw.go @@ -73,15 +73,15 @@ func request_Query_Files_0(ctx context.Context, marshaler runtime.Marshaler, cli return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - val, ok = pathParams["ownerAddress"] + val, ok = pathParams["owner_address"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "ownerAddress") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner_address") } protoReq.OwnerAddress, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "ownerAddress", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner_address", err) } msg, err := client.Files(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -111,15 +111,15 @@ func local_request_Query_Files_0(ctx context.Context, marshaler runtime.Marshale return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - val, ok = pathParams["ownerAddress"] + val, ok = pathParams["owner_address"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "ownerAddress") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner_address") } protoReq.OwnerAddress, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "ownerAddress", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner_address", err) } msg, err := server.Files(ctx, &protoReq) @@ -163,8 +163,8 @@ func local_request_Query_FilesAll_0(ctx context.Context, marshaler runtime.Marsh } -func request_Query_Pubkey_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPubkeyRequest +func request_Query_PubKey_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPubKeyRequest var metadata runtime.ServerMetadata var ( @@ -185,13 +185,13 @@ func request_Query_Pubkey_0(ctx context.Context, marshaler runtime.Marshaler, cl return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := client.Pubkey(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.PubKey(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Pubkey_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPubkeyRequest +func local_request_Query_PubKey_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPubKeyRequest var metadata runtime.ServerMetadata var ( @@ -212,43 +212,43 @@ func local_request_Query_Pubkey_0(ctx context.Context, marshaler runtime.Marshal return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.Pubkey(ctx, &protoReq) + msg, err := server.PubKey(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_PubkeyAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_PubKeyAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_PubkeyAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllPubkeysRequest +func request_Query_PubKeyAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllPubKeysRequest 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_PubkeyAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PubKeyAll_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.PubkeyAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.PubKeyAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_PubkeyAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllPubkeysRequest +func local_request_Query_PubKeyAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllPubKeysRequest 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_PubkeyAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PubKeyAll_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.PubkeyAll(ctx, &protoReq) + msg, err := server.PubKeyAll(ctx, &protoReq) return msg, metadata, err } @@ -328,7 +328,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_Pubkey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_PubKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -339,7 +339,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Pubkey_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_PubKey_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 { @@ -347,11 +347,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Pubkey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_PubKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_PubkeyAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_PubKeyAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -362,7 +362,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_PubkeyAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_PubKeyAll_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 { @@ -370,7 +370,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_PubkeyAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_PubKeyAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -475,7 +475,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_Pubkey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_PubKey_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) @@ -484,18 +484,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Pubkey_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_PubKey_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_Pubkey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_PubKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_PubkeyAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_PubKeyAll_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) @@ -504,14 +504,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_PubkeyAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_PubKeyAll_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_PubkeyAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_PubKeyAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -521,13 +521,13 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackaldao", "canine", "filetree", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Files_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"jackal-dao", "canine-chain", "filetree", "files", "address", "ownerAddress"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Files_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"jackal-dao", "canine-chain", "filetree", "files", "address", "owner_address"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_FilesAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "filetree", "files"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Pubkey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "filetree", "pubkeys", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_PubKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "filetree", "pubkeys", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_PubkeyAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "filetree", "pubkeys"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_PubKeyAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "filetree", "pubkeys"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -537,7 +537,7 @@ var ( forward_Query_FilesAll_0 = runtime.ForwardResponseMessage - forward_Query_Pubkey_0 = runtime.ForwardResponseMessage + forward_Query_PubKey_0 = runtime.ForwardResponseMessage - forward_Query_PubkeyAll_0 = runtime.ForwardResponseMessage + forward_Query_PubKeyAll_0 = runtime.ForwardResponseMessage ) diff --git a/x/filetree/types/tx.pb.go b/x/filetree/types/tx.pb.go index db22492d4..12be99f12 100644 --- a/x/filetree/types/tx.pb.go +++ b/x/filetree/types/tx.pb.go @@ -30,12 +30,12 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type MsgPostFile struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Account string `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"` - HashParent string `protobuf:"bytes,3,opt,name=hashParent,proto3" json:"hashParent,omitempty"` - HashChild string `protobuf:"bytes,4,opt,name=hashChild,proto3" json:"hashChild,omitempty"` + HashParent string `protobuf:"bytes,3,opt,name=hash_parent,json=hashParent,proto3" json:"hash_parent,omitempty"` + HashChild string `protobuf:"bytes,4,opt,name=hash_child,json=hashChild,proto3" json:"hash_child,omitempty"` Contents string `protobuf:"bytes,5,opt,name=contents,proto3" json:"contents,omitempty"` Viewers string `protobuf:"bytes,6,opt,name=viewers,proto3" json:"viewers,omitempty"` Editors string `protobuf:"bytes,7,opt,name=editors,proto3" json:"editors,omitempty"` - TrackingNumber string `protobuf:"bytes,8,opt,name=trackingNumber,proto3" json:"trackingNumber,omitempty"` + TrackingNumber string `protobuf:"bytes,8,opt,name=tracking_number,json=trackingNumber,proto3" json:"tracking_number,omitempty"` } func (m *MsgPostFile) Reset() { *m = MsgPostFile{} } @@ -173,10 +173,10 @@ func (m *MsgPostFileResponse) GetPath() string { type MsgAddViewers struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - ViewerIds string `protobuf:"bytes,2,opt,name=viewerIds,proto3" json:"viewerIds,omitempty"` - ViewerKeys string `protobuf:"bytes,3,opt,name=viewerKeys,proto3" json:"viewerKeys,omitempty"` + ViewerIds string `protobuf:"bytes,2,opt,name=viewer_ids,json=viewerIds,proto3" json:"viewer_ids,omitempty"` + ViewerKeys string `protobuf:"bytes,3,opt,name=viewer_keys,json=viewerKeys,proto3" json:"viewer_keys,omitempty"` Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` - Fileowner string `protobuf:"bytes,5,opt,name=fileowner,proto3" json:"fileowner,omitempty"` + FileOwner string `protobuf:"bytes,5,opt,name=file_owner,json=fileOwner,proto3" json:"file_owner,omitempty"` } func (m *MsgAddViewers) Reset() { *m = MsgAddViewers{} } @@ -240,9 +240,9 @@ func (m *MsgAddViewers) GetAddress() string { return "" } -func (m *MsgAddViewers) GetFileowner() string { +func (m *MsgAddViewers) GetFileOwner() string { if m != nil { - return m.Fileowner + return m.FileOwner } return "" } @@ -283,23 +283,23 @@ func (m *MsgAddViewersResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgAddViewersResponse proto.InternalMessageInfo -type MsgPostkey struct { +type MsgPostKey struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` } -func (m *MsgPostkey) Reset() { *m = MsgPostkey{} } -func (m *MsgPostkey) String() string { return proto.CompactTextString(m) } -func (*MsgPostkey) ProtoMessage() {} -func (*MsgPostkey) Descriptor() ([]byte, []int) { +func (m *MsgPostKey) Reset() { *m = MsgPostKey{} } +func (m *MsgPostKey) String() string { return proto.CompactTextString(m) } +func (*MsgPostKey) ProtoMessage() {} +func (*MsgPostKey) Descriptor() ([]byte, []int) { return fileDescriptor_e5756d04c34e5a81, []int{4} } -func (m *MsgPostkey) XXX_Unmarshal(b []byte) error { +func (m *MsgPostKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgPostkey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgPostKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgPostkey.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgPostKey.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -309,47 +309,47 @@ func (m *MsgPostkey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } -func (m *MsgPostkey) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgPostkey.Merge(m, src) +func (m *MsgPostKey) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPostKey.Merge(m, src) } -func (m *MsgPostkey) XXX_Size() int { +func (m *MsgPostKey) XXX_Size() int { return m.Size() } -func (m *MsgPostkey) XXX_DiscardUnknown() { - xxx_messageInfo_MsgPostkey.DiscardUnknown(m) +func (m *MsgPostKey) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPostKey.DiscardUnknown(m) } -var xxx_messageInfo_MsgPostkey proto.InternalMessageInfo +var xxx_messageInfo_MsgPostKey proto.InternalMessageInfo -func (m *MsgPostkey) GetCreator() string { +func (m *MsgPostKey) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *MsgPostkey) GetKey() string { +func (m *MsgPostKey) GetKey() string { if m != nil { return m.Key } return "" } -type MsgPostkeyResponse struct { +type MsgPostKeyResponse struct { } -func (m *MsgPostkeyResponse) Reset() { *m = MsgPostkeyResponse{} } -func (m *MsgPostkeyResponse) String() string { return proto.CompactTextString(m) } -func (*MsgPostkeyResponse) ProtoMessage() {} -func (*MsgPostkeyResponse) Descriptor() ([]byte, []int) { +func (m *MsgPostKeyResponse) Reset() { *m = MsgPostKeyResponse{} } +func (m *MsgPostKeyResponse) String() string { return proto.CompactTextString(m) } +func (*MsgPostKeyResponse) ProtoMessage() {} +func (*MsgPostKeyResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e5756d04c34e5a81, []int{5} } -func (m *MsgPostkeyResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgPostKeyResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgPostkeyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgPostKeyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgPostkeyResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgPostKeyResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -359,21 +359,21 @@ func (m *MsgPostkeyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *MsgPostkeyResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgPostkeyResponse.Merge(m, src) +func (m *MsgPostKeyResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPostKeyResponse.Merge(m, src) } -func (m *MsgPostkeyResponse) XXX_Size() int { +func (m *MsgPostKeyResponse) XXX_Size() int { return m.Size() } -func (m *MsgPostkeyResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgPostkeyResponse.DiscardUnknown(m) +func (m *MsgPostKeyResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPostKeyResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgPostkeyResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgPostKeyResponse proto.InternalMessageInfo type MsgDeleteFile struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - HashPath string `protobuf:"bytes,2,opt,name=hashPath,proto3" json:"hashPath,omitempty"` + HashPath string `protobuf:"bytes,2,opt,name=hash_path,json=hashPath,proto3" json:"hash_path,omitempty"` Account string `protobuf:"bytes,3,opt,name=account,proto3" json:"account,omitempty"` } @@ -469,9 +469,9 @@ var xxx_messageInfo_MsgDeleteFileResponse proto.InternalMessageInfo type MsgRemoveViewers struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - ViewerIds string `protobuf:"bytes,2,opt,name=viewerIds,proto3" json:"viewerIds,omitempty"` + ViewerIds string `protobuf:"bytes,2,opt,name=viewer_ids,json=viewerIds,proto3" json:"viewer_ids,omitempty"` Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` - Fileowner string `protobuf:"bytes,4,opt,name=fileowner,proto3" json:"fileowner,omitempty"` + FileOwner string `protobuf:"bytes,4,opt,name=file_owner,json=fileOwner,proto3" json:"file_owner,omitempty"` } func (m *MsgRemoveViewers) Reset() { *m = MsgRemoveViewers{} } @@ -528,9 +528,9 @@ func (m *MsgRemoveViewers) GetAddress() string { return "" } -func (m *MsgRemoveViewers) GetFileowner() string { +func (m *MsgRemoveViewers) GetFileOwner() string { if m != nil { - return m.Fileowner + return m.FileOwner } return "" } @@ -574,11 +574,11 @@ var xxx_messageInfo_MsgRemoveViewersResponse proto.InternalMessageInfo type MsgMakeRoot struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Account string `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"` - RootHashPath string `protobuf:"bytes,3,opt,name=rootHashPath,proto3" json:"rootHashPath,omitempty"` + RootHashPath string `protobuf:"bytes,3,opt,name=root_hash_path,json=rootHashPath,proto3" json:"root_hash_path,omitempty"` Contents string `protobuf:"bytes,4,opt,name=contents,proto3" json:"contents,omitempty"` Editors string `protobuf:"bytes,5,opt,name=editors,proto3" json:"editors,omitempty"` Viewers string `protobuf:"bytes,6,opt,name=viewers,proto3" json:"viewers,omitempty"` - TrackingNumber string `protobuf:"bytes,7,opt,name=trackingNumber,proto3" json:"trackingNumber,omitempty"` + TrackingNumber string `protobuf:"bytes,7,opt,name=tracking_number,json=trackingNumber,proto3" json:"tracking_number,omitempty"` } func (m *MsgMakeRoot) Reset() { *m = MsgMakeRoot{} } @@ -703,7 +703,7 @@ type MsgMakeRootV2 struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Editors string `protobuf:"bytes,2,opt,name=editors,proto3" json:"editors,omitempty"` Viewers string `protobuf:"bytes,3,opt,name=viewers,proto3" json:"viewers,omitempty"` - TrackingNumber string `protobuf:"bytes,4,opt,name=trackingNumber,proto3" json:"trackingNumber,omitempty"` + TrackingNumber string `protobuf:"bytes,4,opt,name=tracking_number,json=trackingNumber,proto3" json:"tracking_number,omitempty"` } func (m *MsgMakeRootV2) Reset() { *m = MsgMakeRootV2{} } @@ -769,10 +769,10 @@ func (m *MsgMakeRootV2) GetTrackingNumber() string { type MsgAddEditors struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - EditorIds string `protobuf:"bytes,2,opt,name=editorIds,proto3" json:"editorIds,omitempty"` - EditorKeys string `protobuf:"bytes,3,opt,name=editorKeys,proto3" json:"editorKeys,omitempty"` + EditorIds string `protobuf:"bytes,2,opt,name=editor_ids,json=editorIds,proto3" json:"editor_ids,omitempty"` + EditorKeys string `protobuf:"bytes,3,opt,name=editor_keys,json=editorKeys,proto3" json:"editor_keys,omitempty"` Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` - Fileowner string `protobuf:"bytes,5,opt,name=fileowner,proto3" json:"fileowner,omitempty"` + FileOwner string `protobuf:"bytes,5,opt,name=file_owner,json=fileOwner,proto3" json:"file_owner,omitempty"` } func (m *MsgAddEditors) Reset() { *m = MsgAddEditors{} } @@ -836,9 +836,9 @@ func (m *MsgAddEditors) GetAddress() string { return "" } -func (m *MsgAddEditors) GetFileowner() string { +func (m *MsgAddEditors) GetFileOwner() string { if m != nil { - return m.Fileowner + return m.FileOwner } return "" } @@ -881,9 +881,9 @@ var xxx_messageInfo_MsgAddEditorsResponse proto.InternalMessageInfo type MsgRemoveEditors struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - EditorIds string `protobuf:"bytes,2,opt,name=editorIds,proto3" json:"editorIds,omitempty"` + EditorIds string `protobuf:"bytes,2,opt,name=editor_ids,json=editorIds,proto3" json:"editor_ids,omitempty"` Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` - Fileowner string `protobuf:"bytes,4,opt,name=fileowner,proto3" json:"fileowner,omitempty"` + FileOwner string `protobuf:"bytes,4,opt,name=file_owner,json=fileOwner,proto3" json:"file_owner,omitempty"` } func (m *MsgRemoveEditors) Reset() { *m = MsgRemoveEditors{} } @@ -940,9 +940,9 @@ func (m *MsgRemoveEditors) GetAddress() string { return "" } -func (m *MsgRemoveEditors) GetFileowner() string { +func (m *MsgRemoveEditors) GetFileOwner() string { if m != nil { - return m.Fileowner + return m.FileOwner } return "" } @@ -986,7 +986,7 @@ var xxx_messageInfo_MsgRemoveEditorsResponse proto.InternalMessageInfo type MsgResetEditors struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` - Fileowner string `protobuf:"bytes,3,opt,name=fileowner,proto3" json:"fileowner,omitempty"` + FileOwner string `protobuf:"bytes,3,opt,name=file_owner,json=fileOwner,proto3" json:"file_owner,omitempty"` } func (m *MsgResetEditors) Reset() { *m = MsgResetEditors{} } @@ -1036,9 +1036,9 @@ func (m *MsgResetEditors) GetAddress() string { return "" } -func (m *MsgResetEditors) GetFileowner() string { +func (m *MsgResetEditors) GetFileOwner() string { if m != nil { - return m.Fileowner + return m.FileOwner } return "" } @@ -1082,7 +1082,7 @@ var xxx_messageInfo_MsgResetEditorsResponse proto.InternalMessageInfo type MsgResetViewers struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` - Fileowner string `protobuf:"bytes,3,opt,name=fileowner,proto3" json:"fileowner,omitempty"` + FileOwner string `protobuf:"bytes,3,opt,name=file_owner,json=fileOwner,proto3" json:"file_owner,omitempty"` } func (m *MsgResetViewers) Reset() { *m = MsgResetViewers{} } @@ -1132,9 +1132,9 @@ func (m *MsgResetViewers) GetAddress() string { return "" } -func (m *MsgResetViewers) GetFileowner() string { +func (m *MsgResetViewers) GetFileOwner() string { if m != nil { - return m.Fileowner + return m.FileOwner } return "" } @@ -1178,7 +1178,7 @@ var xxx_messageInfo_MsgResetViewersResponse proto.InternalMessageInfo type MsgChangeOwner struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` - FileOwner string `protobuf:"bytes,3,opt,name=fileOwner,proto3" json:"fileOwner,omitempty"` + FileOwner string `protobuf:"bytes,3,opt,name=file_owner,json=fileOwner,proto3" json:"file_owner,omitempty"` NewOwner string `protobuf:"bytes,4,opt,name=newOwner,proto3" json:"newOwner,omitempty"` } @@ -1284,8 +1284,8 @@ func init() { proto.RegisterType((*MsgPostFileResponse)(nil), "canine_chain.filetree.MsgPostFileResponse") proto.RegisterType((*MsgAddViewers)(nil), "canine_chain.filetree.MsgAddViewers") proto.RegisterType((*MsgAddViewersResponse)(nil), "canine_chain.filetree.MsgAddViewersResponse") - proto.RegisterType((*MsgPostkey)(nil), "canine_chain.filetree.MsgPostkey") - proto.RegisterType((*MsgPostkeyResponse)(nil), "canine_chain.filetree.MsgPostkeyResponse") + proto.RegisterType((*MsgPostKey)(nil), "canine_chain.filetree.MsgPostKey") + proto.RegisterType((*MsgPostKeyResponse)(nil), "canine_chain.filetree.MsgPostKeyResponse") proto.RegisterType((*MsgDeleteFile)(nil), "canine_chain.filetree.MsgDeleteFile") proto.RegisterType((*MsgDeleteFileResponse)(nil), "canine_chain.filetree.MsgDeleteFileResponse") proto.RegisterType((*MsgRemoveViewers)(nil), "canine_chain.filetree.MsgRemoveViewers") @@ -1308,60 +1308,62 @@ func init() { func init() { proto.RegisterFile("canine_chain/filetree/tx.proto", fileDescriptor_e5756d04c34e5a81) } var fileDescriptor_e5756d04c34e5a81 = []byte{ - // 845 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcd, 0x6f, 0xd3, 0x48, - 0x14, 0xaf, 0x9b, 0xb4, 0x49, 0x5e, 0x3f, 0xb6, 0xf2, 0x6e, 0xb7, 0x5e, 0xab, 0xb2, 0x76, 0xad, - 0x6e, 0x77, 0x8b, 0x68, 0x22, 0xb5, 0x17, 0xae, 0x50, 0x40, 0x20, 0x08, 0xad, 0x72, 0x28, 0x52, - 0x0f, 0x14, 0xc7, 0x79, 0xb5, 0x4d, 0x52, 0x3b, 0xf2, 0x4c, 0x3f, 0x72, 0xe1, 0x80, 0xc4, 0x9d, - 0xff, 0x80, 0x23, 0xff, 0x0a, 0xc7, 0x1e, 0xb9, 0x20, 0xa1, 0xf6, 0x8f, 0xe0, 0x8a, 0xfc, 0x31, - 0xe3, 0xb1, 0x93, 0xd8, 0x81, 0xf4, 0xe6, 0xf7, 0x31, 0xf3, 0xfb, 0xcd, 0x9b, 0xf7, 0x9b, 0x27, - 0x83, 0x66, 0x1a, 0xae, 0xe3, 0xe2, 0xb1, 0x69, 0x1b, 0x8e, 0xdb, 0x38, 0x71, 0x7a, 0x48, 0x7d, - 0xc4, 0x06, 0xbd, 0xac, 0xf7, 0x7d, 0x8f, 0x7a, 0xf2, 0xaa, 0x18, 0xaf, 0xb3, 0xb8, 0xfe, 0x5d, - 0x82, 0x85, 0x26, 0xb1, 0x0e, 0x3c, 0x42, 0x1f, 0x3b, 0x3d, 0x94, 0x15, 0xa8, 0x98, 0x3e, 0x1a, - 0xd4, 0xf3, 0x15, 0xe9, 0x6f, 0xe9, 0xff, 0x5a, 0x8b, 0x99, 0x41, 0xc4, 0x30, 0x4d, 0xef, 0xcc, - 0xa5, 0xca, 0x6c, 0x14, 0x89, 0x4d, 0x59, 0x03, 0xb0, 0x0d, 0x62, 0x1f, 0x18, 0x3e, 0xba, 0x54, - 0x29, 0x85, 0x41, 0xc1, 0x23, 0xaf, 0x43, 0x2d, 0xb0, 0xf6, 0x6c, 0xa7, 0xd7, 0x51, 0xca, 0x61, - 0x38, 0x71, 0xc8, 0x2a, 0x54, 0x4d, 0xcf, 0xa5, 0xe8, 0x52, 0xa2, 0xcc, 0x85, 0x41, 0x6e, 0x07, - 0x98, 0xe7, 0x0e, 0x5e, 0xa0, 0x4f, 0x94, 0xf9, 0x08, 0x33, 0x36, 0x83, 0x08, 0x76, 0x1c, 0xea, - 0xf9, 0x44, 0xa9, 0x44, 0x91, 0xd8, 0x94, 0x37, 0x61, 0x99, 0xfa, 0x86, 0xd9, 0x75, 0x5c, 0xeb, - 0xc5, 0xd9, 0x69, 0x1b, 0x7d, 0xa5, 0x1a, 0x26, 0x64, 0xbc, 0xfa, 0x16, 0xfc, 0x2e, 0x1c, 0xbc, - 0x85, 0xa4, 0xef, 0xb9, 0x04, 0x65, 0x19, 0xca, 0x7d, 0x83, 0xda, 0xf1, 0xe9, 0xc3, 0x6f, 0xfd, - 0xa3, 0x04, 0x4b, 0x4d, 0x62, 0xdd, 0xef, 0x74, 0x0e, 0x13, 0xf8, 0x31, 0x65, 0x5a, 0x87, 0x5a, - 0xc4, 0xf1, 0x69, 0x87, 0xc4, 0x85, 0x4a, 0x1c, 0x41, 0xa9, 0x22, 0xe3, 0x19, 0x0e, 0x08, 0x2b, - 0x55, 0xe2, 0x09, 0x8b, 0xdc, 0xe9, 0xf8, 0x48, 0x48, 0x5c, 0x28, 0x66, 0x06, 0xfb, 0x06, 0x97, - 0xe6, 0x5d, 0xb8, 0xe8, 0xc7, 0x75, 0x4a, 0x1c, 0xfa, 0x1a, 0xac, 0xa6, 0x08, 0xb2, 0xe3, 0xe8, - 0xf7, 0x00, 0xe2, 0x53, 0x76, 0x71, 0x90, 0x43, 0x7b, 0x05, 0x4a, 0x5d, 0x1c, 0xc4, 0x84, 0x83, - 0x4f, 0xfd, 0x0f, 0x90, 0x93, 0x95, 0x7c, 0xbf, 0xe3, 0xb0, 0x12, 0x0f, 0xb1, 0x87, 0x14, 0x0b, - 0x1a, 0x46, 0x85, 0x6a, 0xd4, 0x04, 0xd4, 0x8e, 0xf7, 0xe5, 0xb6, 0xd8, 0x4c, 0xa5, 0x54, 0x33, - 0xc5, 0x27, 0x49, 0x00, 0x38, 0xf2, 0x3b, 0x09, 0x56, 0x9a, 0xc4, 0x6a, 0xe1, 0xa9, 0x77, 0x8e, - 0xd3, 0xde, 0x83, 0x50, 0xe7, 0x52, 0x4e, 0x9d, 0xcb, 0xd9, 0x3a, 0xab, 0xa0, 0x64, 0x39, 0x70, - 0x82, 0x5f, 0x23, 0x29, 0x35, 0x8d, 0x2e, 0xb6, 0x3c, 0x8f, 0xfe, 0x92, 0x94, 0x74, 0x58, 0xf4, - 0x3d, 0x8f, 0x3e, 0x61, 0x75, 0x8b, 0xc8, 0xa5, 0x7c, 0x29, 0xc1, 0x94, 0x87, 0x05, 0xc3, 0x64, - 0x31, 0x97, 0x96, 0xc5, 0x78, 0x29, 0x0d, 0x0b, 0xa6, 0x32, 0x52, 0x30, 0xab, 0xa1, 0x60, 0xd8, - 0xf1, 0xf8, 0xb1, 0xdf, 0x47, 0xe2, 0x60, 0xfe, 0xc3, 0x9d, 0xfc, 0x83, 0x33, 0x7a, 0xb3, 0x63, - 0xe9, 0x95, 0x8a, 0xe8, 0x95, 0x47, 0xd2, 0x4b, 0x44, 0xfa, 0x28, 0xd9, 0x73, 0x7c, 0x73, 0x44, - 0xc0, 0x42, 0x73, 0x70, 0x47, 0x20, 0xd2, 0xc8, 0x10, 0x45, 0x9a, 0x78, 0xa6, 0x17, 0x69, 0x4c, - 0x70, 0x74, 0x6b, 0x4f, 0xcb, 0xfe, 0x36, 0x5a, 0x3b, 0x4b, 0xd0, 0x84, 0xdf, 0xc2, 0x18, 0x41, - 0x5a, 0x4c, 0x4f, 0x20, 0x30, 0x9b, 0x43, 0xa0, 0x94, 0x25, 0xf0, 0x17, 0xac, 0x65, 0x40, 0x46, - 0xe1, 0x17, 0x2b, 0xff, 0x16, 0xf0, 0xb3, 0xd2, 0x7e, 0x0b, 0xcb, 0x4d, 0x62, 0xed, 0xd9, 0x86, - 0x6b, 0xe1, 0x7e, 0x90, 0x3c, 0x0d, 0xfc, 0x7e, 0x16, 0x3e, 0xda, 0x51, 0x85, 0xaa, 0x8b, 0x17, - 0xfb, 0xc2, 0xe5, 0x70, 0x5b, 0x57, 0xe0, 0xcf, 0x34, 0x3e, 0x63, 0xb6, 0xf3, 0xa9, 0x06, 0xa5, - 0x26, 0xb1, 0xe4, 0x23, 0xa8, 0xf2, 0x19, 0xae, 0xd7, 0x47, 0xce, 0xfa, 0xba, 0x30, 0xee, 0xd4, - 0x3b, 0xc5, 0x39, 0x7c, 0x24, 0xbe, 0x06, 0x10, 0x46, 0xdf, 0xc6, 0xf8, 0x95, 0x49, 0x96, 0x7a, - 0x77, 0x92, 0x2c, 0x8e, 0xf0, 0x12, 0x2a, 0x6c, 0x44, 0xfd, 0x93, 0x4f, 0xac, 0x8b, 0x03, 0x75, - 0xab, 0x30, 0x45, 0xa4, 0x2e, 0xcc, 0xaa, 0x1c, 0xea, 0x49, 0x56, 0x1e, 0xf5, 0xe1, 0xb1, 0x24, - 0x3b, 0xb0, 0x94, 0x1e, 0x49, 0xff, 0x8d, 0x5f, 0x9e, 0x4a, 0x54, 0x1b, 0x13, 0x26, 0x72, 0xa8, - 0x23, 0xa8, 0xf2, 0xe1, 0x92, 0x73, 0xc7, 0x2c, 0x27, 0xef, 0x8e, 0xb3, 0xaf, 0xb8, 0xfc, 0x0a, - 0x40, 0x78, 0xc1, 0x37, 0x8a, 0x57, 0x1e, 0xee, 0xfc, 0xd4, 0xfe, 0x51, 0x0f, 0xb1, 0xc7, 0x23, - 0xbf, 0x87, 0xe2, 0xac, 0x82, 0x1e, 0xca, 0xbc, 0x11, 0xc9, 0x45, 0x30, 0x90, 0xc2, 0x8b, 0x60, - 0x38, 0x8d, 0x09, 0x13, 0x39, 0xd4, 0x09, 0x2c, 0xa6, 0xde, 0xc2, 0xcd, 0xbc, 0x0d, 0x92, 0x3c, - 0xb5, 0x3e, 0x59, 0xde, 0x10, 0x0e, 0x6b, 0xad, 0x22, 0x1c, 0xd6, 0x59, 0xf5, 0xc9, 0xf2, 0x38, - 0x8e, 0x09, 0x0b, 0xe2, 0xdb, 0xf6, 0xef, 0xf8, 0xe5, 0x42, 0x9a, 0xba, 0x3d, 0x51, 0x1a, 0x03, - 0x79, 0xd0, 0xfc, 0x7c, 0xad, 0x49, 0x57, 0xd7, 0x9a, 0xf4, 0xed, 0x5a, 0x93, 0x3e, 0xdc, 0x68, - 0x33, 0x57, 0x37, 0xda, 0xcc, 0x97, 0x1b, 0x6d, 0xe6, 0x68, 0xd7, 0x72, 0xa8, 0x7d, 0xd6, 0xae, - 0x9b, 0xde, 0x69, 0xe3, 0x8d, 0x61, 0x76, 0x8d, 0xde, 0x73, 0xa3, 0x4d, 0x1a, 0xd1, 0xee, 0xdb, - 0xd1, 0x0f, 0xcd, 0xa5, 0xf0, 0x4b, 0x33, 0xe8, 0x23, 0x69, 0xcf, 0x87, 0xbf, 0x35, 0xbb, 0x3f, - 0x02, 0x00, 0x00, 0xff, 0xff, 0x17, 0x36, 0x84, 0xa3, 0xf8, 0x0c, 0x00, 0x00, + // 871 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcf, 0x53, 0xdb, 0x38, + 0x14, 0xc6, 0x24, 0x90, 0xe4, 0xf1, 0x73, 0xbc, 0xcb, 0xe2, 0xf5, 0x0e, 0xd9, 0x5d, 0x0f, 0xbb, + 0x94, 0x4e, 0x49, 0x66, 0xe0, 0xd2, 0x6b, 0x4b, 0xdb, 0x69, 0x87, 0xa6, 0x30, 0x39, 0xd0, 0x19, + 0x0e, 0x0d, 0x8e, 0x2d, 0x6c, 0x37, 0xc1, 0xca, 0x58, 0xe2, 0x47, 0x4e, 0xbd, 0x74, 0x7a, 0xee, + 0xdf, 0xd0, 0x4b, 0xff, 0x95, 0x1e, 0x39, 0xf6, 0xc8, 0xc0, 0x7f, 0xd1, 0x53, 0xc7, 0x96, 0x64, + 0x2b, 0x26, 0xb1, 0xd3, 0x42, 0x6f, 0xd1, 0x7b, 0x9f, 0xf4, 0x7d, 0x7a, 0x7a, 0x9f, 0x14, 0x43, + 0xd5, 0x32, 0x7d, 0xcf, 0x47, 0x2d, 0xcb, 0x35, 0x3d, 0xbf, 0x7e, 0xe4, 0x75, 0x11, 0x0d, 0x10, + 0xaa, 0xd3, 0xf3, 0x5a, 0x2f, 0xc0, 0x14, 0xab, 0x4b, 0x72, 0xbe, 0x26, 0xf2, 0xc6, 0x37, 0x05, + 0x66, 0x1a, 0xc4, 0xd9, 0xc3, 0x84, 0x3e, 0xf3, 0xba, 0x48, 0xd5, 0xa0, 0x64, 0x05, 0xc8, 0xa4, + 0x38, 0xd0, 0x94, 0x7f, 0x94, 0x7b, 0x95, 0xa6, 0x18, 0x86, 0x19, 0xd3, 0xb2, 0xf0, 0x89, 0x4f, + 0xb5, 0x49, 0x96, 0xe1, 0x43, 0xf5, 0x6f, 0x98, 0x71, 0x4d, 0xe2, 0xb6, 0x7a, 0x66, 0x80, 0x7c, + 0xaa, 0x15, 0xa2, 0x2c, 0x84, 0xa1, 0xbd, 0x28, 0xa2, 0xae, 0x40, 0x34, 0x6a, 0x59, 0xae, 0xd7, + 0xb5, 0xb5, 0x62, 0x94, 0xaf, 0x84, 0x91, 0xed, 0x30, 0xa0, 0xea, 0x50, 0xb6, 0xb0, 0x4f, 0x91, + 0x4f, 0x89, 0x36, 0x15, 0x25, 0xe3, 0x71, 0xc8, 0x7a, 0xea, 0xa1, 0x33, 0x14, 0x10, 0x6d, 0x9a, + 0xb1, 0xf2, 0x61, 0x98, 0x41, 0xb6, 0x47, 0x71, 0x40, 0xb4, 0x12, 0xcb, 0xf0, 0xa1, 0xba, 0x06, + 0x0b, 0x34, 0x30, 0xad, 0x8e, 0xe7, 0x3b, 0x2d, 0xff, 0xe4, 0xb8, 0x8d, 0x02, 0xad, 0x1c, 0x21, + 0xe6, 0x45, 0xf8, 0x55, 0x14, 0x35, 0xd6, 0xe1, 0x37, 0x69, 0xef, 0x4d, 0x44, 0x7a, 0xd8, 0x27, + 0x48, 0x55, 0xa1, 0xd8, 0x33, 0xa9, 0xcb, 0x0b, 0x10, 0xfd, 0x36, 0x3e, 0x29, 0x30, 0xd7, 0x20, + 0xce, 0x23, 0xdb, 0xde, 0x4f, 0xf8, 0x47, 0x54, 0x6a, 0x05, 0x80, 0x89, 0x6c, 0x79, 0x36, 0xe1, + 0xc5, 0xaa, 0xb0, 0xc8, 0x0b, 0x9b, 0x84, 0xe5, 0xe2, 0xe9, 0x0e, 0xea, 0x13, 0x51, 0x2e, 0x16, + 0xda, 0x41, 0xfd, 0x68, 0x65, 0xd3, 0xb6, 0x03, 0x44, 0x08, 0xaf, 0x95, 0x18, 0x86, 0x2b, 0x87, + 0x27, 0xd7, 0xc2, 0x67, 0x3e, 0x0a, 0x78, 0xad, 0x2a, 0x61, 0x64, 0x37, 0x0c, 0x18, 0xcb, 0xb0, + 0x34, 0xa0, 0x51, 0xec, 0xc8, 0x78, 0x08, 0xc0, 0x37, 0xba, 0x83, 0xfa, 0x19, 0xca, 0x17, 0xa1, + 0xd0, 0x41, 0x7d, 0x2e, 0x39, 0xfc, 0x69, 0xfc, 0x0e, 0x6a, 0x32, 0x33, 0x5e, 0xef, 0x30, 0x2a, + 0xc6, 0x13, 0xd4, 0x45, 0x14, 0xe5, 0xb4, 0xcd, 0x5f, 0x50, 0xe1, 0xcd, 0x41, 0x5d, 0xbe, 0x70, + 0x99, 0xb5, 0x06, 0x75, 0xe5, 0x9e, 0x2a, 0x0c, 0xf4, 0x14, 0xdf, 0x4a, 0xc2, 0x10, 0x53, 0xbf, + 0x57, 0x60, 0xb1, 0x41, 0x9c, 0x26, 0x3a, 0xc6, 0xa7, 0xe8, 0xd6, 0x67, 0x21, 0x95, 0xba, 0x90, + 0x55, 0xea, 0x62, 0xba, 0xd4, 0x3a, 0x68, 0x69, 0x15, 0xb1, 0xc4, 0x4b, 0xe6, 0xa9, 0x86, 0xd9, + 0x41, 0x4d, 0x8c, 0xe9, 0x4f, 0x79, 0x6a, 0x15, 0xe6, 0x03, 0x8c, 0x69, 0x2b, 0xa9, 0x1d, 0xd3, + 0x37, 0x1b, 0x46, 0x9f, 0x8b, 0xfa, 0xc9, 0xce, 0x29, 0xde, 0x74, 0x8e, 0xf0, 0xc7, 0xd4, 0xa0, + 0x3f, 0x46, 0x7b, 0x6a, 0x88, 0x73, 0x4a, 0x43, 0x9d, 0xb3, 0x14, 0x39, 0x47, 0xec, 0x30, 0xde, + 0xf9, 0x07, 0xe6, 0x12, 0x11, 0xdf, 0xdf, 0xcc, 0xde, 0xbb, 0xd0, 0x37, 0x39, 0x52, 0x5f, 0x21, + 0x57, 0x5f, 0x71, 0xa8, 0xbe, 0xc4, 0xae, 0x4f, 0x93, 0x45, 0x47, 0xb7, 0x08, 0x63, 0x96, 0x5b, + 0x84, 0x45, 0xb8, 0x5d, 0x79, 0x5a, 0xb6, 0x2b, 0x0b, 0xdd, 0x91, 0x5d, 0xb9, 0xc6, 0xe1, 0x3d, + 0x7e, 0xeb, 0x0d, 0xdc, 0x49, 0x8f, 0xa7, 0x25, 0xda, 0xb0, 0x10, 0xe5, 0x08, 0xa2, 0xf9, 0x02, + 0x25, 0x05, 0x93, 0x59, 0x0a, 0x0a, 0x69, 0x05, 0x7f, 0xc2, 0x72, 0x8a, 0x65, 0x98, 0x80, 0xfc, + 0x5b, 0xe0, 0x2e, 0x04, 0xa4, 0x5d, 0xfe, 0x0e, 0xe6, 0x1b, 0xc4, 0xd9, 0x76, 0x4d, 0xdf, 0x61, + 0xe0, 0x5f, 0xc0, 0x1f, 0x1a, 0xdc, 0x47, 0x67, 0xbb, 0xd2, 0xf9, 0xc4, 0x63, 0x43, 0x83, 0x3f, + 0x06, 0x05, 0x08, 0x69, 0x9b, 0x9f, 0x2b, 0x50, 0x68, 0x10, 0x47, 0x3d, 0x80, 0x72, 0xfc, 0xb0, + 0x1b, 0xb5, 0xa1, 0x7f, 0x00, 0x6a, 0xd2, 0x03, 0xa8, 0xdf, 0xcf, 0xc7, 0xc4, 0x8f, 0xe4, 0x21, + 0x80, 0xf4, 0x18, 0xae, 0x8e, 0x9e, 0x99, 0xa0, 0xf4, 0x07, 0xe3, 0xa0, 0x62, 0x86, 0xd7, 0x50, + 0x12, 0x2f, 0xd6, 0xbf, 0xd9, 0xc2, 0x76, 0x50, 0x5f, 0x5f, 0xcf, 0x85, 0xc8, 0xd2, 0xa5, 0xa7, + 0x2b, 0x43, 0x7a, 0x82, 0xca, 0x92, 0x7e, 0xf3, 0x91, 0x52, 0x3d, 0x98, 0x1b, 0x7c, 0xa0, 0xd6, + 0x46, 0x4f, 0x1f, 0x00, 0xea, 0xf5, 0x31, 0x81, 0x31, 0xd5, 0x01, 0x94, 0xe3, 0x87, 0x26, 0xe3, + 0x8c, 0x05, 0x26, 0xeb, 0x8c, 0xd3, 0xd7, 0xb9, 0xfa, 0x06, 0x40, 0xba, 0xca, 0x57, 0xf3, 0x67, + 0xee, 0x6f, 0xfe, 0xd0, 0xfa, 0xac, 0x87, 0xc4, 0xfd, 0x91, 0xdd, 0x43, 0x1c, 0x95, 0xd3, 0x43, + 0xa9, 0x5b, 0x22, 0x39, 0x08, 0x41, 0x92, 0x7b, 0x10, 0x82, 0xa7, 0x3e, 0x26, 0x30, 0xa6, 0x3a, + 0x82, 0xd9, 0x81, 0xeb, 0xf0, 0xff, 0xac, 0x05, 0x12, 0x9c, 0x5e, 0x1b, 0x0f, 0x77, 0x83, 0x47, + 0xb4, 0x56, 0x1e, 0x8f, 0xe8, 0xac, 0xda, 0x78, 0xb8, 0x98, 0xc7, 0x82, 0x19, 0xf9, 0x72, 0xfb, + 0x6f, 0xf4, 0x74, 0x09, 0xa6, 0x6f, 0x8c, 0x05, 0x13, 0x24, 0x8f, 0x1b, 0x5f, 0xae, 0xaa, 0xca, + 0xc5, 0x55, 0x55, 0xb9, 0xbc, 0xaa, 0x2a, 0x1f, 0xaf, 0xab, 0x13, 0x17, 0xd7, 0xd5, 0x89, 0xaf, + 0xd7, 0xd5, 0x89, 0x83, 0x2d, 0xc7, 0xa3, 0xee, 0x49, 0xbb, 0x66, 0xe1, 0xe3, 0xfa, 0x5b, 0xd3, + 0xea, 0x98, 0xdd, 0x97, 0x66, 0x9b, 0xd4, 0xd9, 0xea, 0x1b, 0xec, 0x2b, 0xe7, 0x5c, 0xfa, 0xce, + 0xe9, 0xf7, 0x10, 0x69, 0x4f, 0x47, 0xdf, 0x3a, 0x5b, 0xdf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xe7, + 0xe4, 0xf7, 0xb2, 0x0d, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1378,7 +1380,7 @@ const _ = grpc.SupportPackageIsVersion4 type MsgClient interface { PostFile(ctx context.Context, in *MsgPostFile, opts ...grpc.CallOption) (*MsgPostFileResponse, error) AddViewers(ctx context.Context, in *MsgAddViewers, opts ...grpc.CallOption) (*MsgAddViewersResponse, error) - Postkey(ctx context.Context, in *MsgPostkey, opts ...grpc.CallOption) (*MsgPostkeyResponse, error) + PostKey(ctx context.Context, in *MsgPostKey, opts ...grpc.CallOption) (*MsgPostKeyResponse, error) DeleteFile(ctx context.Context, in *MsgDeleteFile, opts ...grpc.CallOption) (*MsgDeleteFileResponse, error) RemoveViewers(ctx context.Context, in *MsgRemoveViewers, opts ...grpc.CallOption) (*MsgRemoveViewersResponse, error) MakeRoot(ctx context.Context, in *MsgMakeRoot, opts ...grpc.CallOption) (*MsgMakeRootResponse, error) @@ -1416,9 +1418,9 @@ func (c *msgClient) AddViewers(ctx context.Context, in *MsgAddViewers, opts ...g return out, nil } -func (c *msgClient) Postkey(ctx context.Context, in *MsgPostkey, opts ...grpc.CallOption) (*MsgPostkeyResponse, error) { - out := new(MsgPostkeyResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Msg/Postkey", in, out, opts...) +func (c *msgClient) PostKey(ctx context.Context, in *MsgPostKey, opts ...grpc.CallOption) (*MsgPostKeyResponse, error) { + out := new(MsgPostKeyResponse) + err := c.cc.Invoke(ctx, "/canine_chain.filetree.Msg/PostKey", in, out, opts...) if err != nil { return nil, err } @@ -1510,7 +1512,7 @@ func (c *msgClient) ChangeOwner(ctx context.Context, in *MsgChangeOwner, opts .. type MsgServer interface { PostFile(context.Context, *MsgPostFile) (*MsgPostFileResponse, error) AddViewers(context.Context, *MsgAddViewers) (*MsgAddViewersResponse, error) - Postkey(context.Context, *MsgPostkey) (*MsgPostkeyResponse, error) + PostKey(context.Context, *MsgPostKey) (*MsgPostKeyResponse, error) DeleteFile(context.Context, *MsgDeleteFile) (*MsgDeleteFileResponse, error) RemoveViewers(context.Context, *MsgRemoveViewers) (*MsgRemoveViewersResponse, error) MakeRoot(context.Context, *MsgMakeRoot) (*MsgMakeRootResponse, error) @@ -1532,8 +1534,8 @@ func (*UnimplementedMsgServer) PostFile(ctx context.Context, req *MsgPostFile) ( func (*UnimplementedMsgServer) AddViewers(ctx context.Context, req *MsgAddViewers) (*MsgAddViewersResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AddViewers not implemented") } -func (*UnimplementedMsgServer) Postkey(ctx context.Context, req *MsgPostkey) (*MsgPostkeyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Postkey not implemented") +func (*UnimplementedMsgServer) PostKey(ctx context.Context, req *MsgPostKey) (*MsgPostKeyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PostKey not implemented") } func (*UnimplementedMsgServer) DeleteFile(ctx context.Context, req *MsgDeleteFile) (*MsgDeleteFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteFile not implemented") @@ -1603,20 +1605,20 @@ func _Msg_AddViewers_Handler(srv interface{}, ctx context.Context, dec func(inte return interceptor(ctx, in, info, handler) } -func _Msg_Postkey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgPostkey) +func _Msg_PostKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgPostKey) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MsgServer).Postkey(ctx, in) + return srv.(MsgServer).PostKey(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.filetree.Msg/Postkey", + FullMethod: "/canine_chain.filetree.Msg/PostKey", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).Postkey(ctx, req.(*MsgPostkey)) + return srv.(MsgServer).PostKey(ctx, req.(*MsgPostKey)) } return interceptor(ctx, in, info, handler) } @@ -1796,8 +1798,8 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ Handler: _Msg_AddViewers_Handler, }, { - MethodName: "Postkey", - Handler: _Msg_Postkey_Handler, + MethodName: "PostKey", + Handler: _Msg_PostKey_Handler, }, { MethodName: "DeleteFile", @@ -1969,10 +1971,10 @@ func (m *MsgAddViewers) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Fileowner) > 0 { - i -= len(m.Fileowner) - copy(dAtA[i:], m.Fileowner) - i = encodeVarintTx(dAtA, i, uint64(len(m.Fileowner))) + if len(m.FileOwner) > 0 { + i -= len(m.FileOwner) + copy(dAtA[i:], m.FileOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.FileOwner))) i-- dAtA[i] = 0x2a } @@ -2030,7 +2032,7 @@ func (m *MsgAddViewersResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgPostkey) Marshal() (dAtA []byte, err error) { +func (m *MsgPostKey) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2040,12 +2042,12 @@ func (m *MsgPostkey) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgPostkey) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgPostKey) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgPostkey) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgPostKey) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2067,7 +2069,7 @@ func (m *MsgPostkey) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgPostkeyResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgPostKeyResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2077,12 +2079,12 @@ func (m *MsgPostkeyResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgPostkeyResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgPostKeyResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgPostkeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgPostKeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2177,10 +2179,10 @@ func (m *MsgRemoveViewers) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Fileowner) > 0 { - i -= len(m.Fileowner) - copy(dAtA[i:], m.Fileowner) - i = encodeVarintTx(dAtA, i, uint64(len(m.Fileowner))) + if len(m.FileOwner) > 0 { + i -= len(m.FileOwner) + copy(dAtA[i:], m.FileOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.FileOwner))) i-- dAtA[i] = 0x22 } @@ -2397,10 +2399,10 @@ func (m *MsgAddEditors) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Fileowner) > 0 { - i -= len(m.Fileowner) - copy(dAtA[i:], m.Fileowner) - i = encodeVarintTx(dAtA, i, uint64(len(m.Fileowner))) + if len(m.FileOwner) > 0 { + i -= len(m.FileOwner) + copy(dAtA[i:], m.FileOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.FileOwner))) i-- dAtA[i] = 0x2a } @@ -2478,10 +2480,10 @@ func (m *MsgRemoveEditors) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Fileowner) > 0 { - i -= len(m.Fileowner) - copy(dAtA[i:], m.Fileowner) - i = encodeVarintTx(dAtA, i, uint64(len(m.Fileowner))) + if len(m.FileOwner) > 0 { + i -= len(m.FileOwner) + copy(dAtA[i:], m.FileOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.FileOwner))) i-- dAtA[i] = 0x22 } @@ -2552,10 +2554,10 @@ func (m *MsgResetEditors) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Fileowner) > 0 { - i -= len(m.Fileowner) - copy(dAtA[i:], m.Fileowner) - i = encodeVarintTx(dAtA, i, uint64(len(m.Fileowner))) + if len(m.FileOwner) > 0 { + i -= len(m.FileOwner) + copy(dAtA[i:], m.FileOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.FileOwner))) i-- dAtA[i] = 0x1a } @@ -2619,10 +2621,10 @@ func (m *MsgResetViewers) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Fileowner) > 0 { - i -= len(m.Fileowner) - copy(dAtA[i:], m.Fileowner) - i = encodeVarintTx(dAtA, i, uint64(len(m.Fileowner))) + if len(m.FileOwner) > 0 { + i -= len(m.FileOwner) + copy(dAtA[i:], m.FileOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.FileOwner))) i-- dAtA[i] = 0x1a } @@ -2827,7 +2829,7 @@ func (m *MsgAddViewers) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Fileowner) + l = len(m.FileOwner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } @@ -2843,7 +2845,7 @@ func (m *MsgAddViewersResponse) Size() (n int) { return n } -func (m *MsgPostkey) Size() (n int) { +func (m *MsgPostKey) Size() (n int) { if m == nil { return 0 } @@ -2860,7 +2862,7 @@ func (m *MsgPostkey) Size() (n int) { return n } -func (m *MsgPostkeyResponse) Size() (n int) { +func (m *MsgPostKeyResponse) Size() (n int) { if m == nil { return 0 } @@ -2917,7 +2919,7 @@ func (m *MsgRemoveViewers) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Fileowner) + l = len(m.FileOwner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } @@ -3026,7 +3028,7 @@ func (m *MsgAddEditors) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Fileowner) + l = len(m.FileOwner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } @@ -3060,7 +3062,7 @@ func (m *MsgRemoveEditors) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Fileowner) + l = len(m.FileOwner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } @@ -3090,7 +3092,7 @@ func (m *MsgResetEditors) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Fileowner) + l = len(m.FileOwner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } @@ -3120,7 +3122,7 @@ func (m *MsgResetViewers) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Fileowner) + l = len(m.FileOwner) if l > 0 { n += 1 + l + sovTx(uint64(l)) } @@ -3723,7 +3725,7 @@ func (m *MsgAddViewers) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fileowner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FileOwner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3751,7 +3753,7 @@ func (m *MsgAddViewers) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Fileowner = string(dAtA[iNdEx:postIndex]) + m.FileOwner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -3824,7 +3826,7 @@ func (m *MsgAddViewersResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgPostkey) Unmarshal(dAtA []byte) error { +func (m *MsgPostKey) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3847,10 +3849,10 @@ func (m *MsgPostkey) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgPostkey: wiretype end group for non-group") + return fmt.Errorf("proto: MsgPostKey: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgPostkey: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgPostKey: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3938,7 +3940,7 @@ func (m *MsgPostkey) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgPostkeyResponse) Unmarshal(dAtA []byte) error { +func (m *MsgPostKeyResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3961,10 +3963,10 @@ func (m *MsgPostkeyResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgPostkeyResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgPostKeyResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgPostkeyResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgPostKeyResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -4311,7 +4313,7 @@ func (m *MsgRemoveViewers) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fileowner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FileOwner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -4339,7 +4341,7 @@ func (m *MsgRemoveViewers) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Fileowner = string(dAtA[iNdEx:postIndex]) + m.FileOwner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -5073,7 +5075,7 @@ func (m *MsgAddEditors) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fileowner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FileOwner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5101,7 +5103,7 @@ func (m *MsgAddEditors) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Fileowner = string(dAtA[iNdEx:postIndex]) + m.FileOwner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -5301,7 +5303,7 @@ func (m *MsgRemoveEditors) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fileowner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FileOwner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5329,7 +5331,7 @@ func (m *MsgRemoveEditors) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Fileowner = string(dAtA[iNdEx:postIndex]) + m.FileOwner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -5497,7 +5499,7 @@ func (m *MsgResetEditors) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fileowner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FileOwner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5525,7 +5527,7 @@ func (m *MsgResetEditors) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Fileowner = string(dAtA[iNdEx:postIndex]) + m.FileOwner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -5693,7 +5695,7 @@ func (m *MsgResetViewers) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Fileowner", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FileOwner", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -5721,7 +5723,7 @@ func (m *MsgResetViewers) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Fileowner = string(dAtA[iNdEx:postIndex]) + m.FileOwner = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/oracle/simulation/delist.go b/x/oracle/simulation/delist.go index 83719cc2a..1aa6f49cf 100644 --- a/x/oracle/simulation/delist.go +++ b/x/oracle/simulation/delist.go @@ -18,7 +18,7 @@ func SimulateMsgDelist( return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { simAccount, _ := simtypes.RandomAcc(r, accs) - msg := &types.MsgDelist{ + msg := &types.MsgDeList{ Creator: simAccount.Address.String(), } diff --git a/x/rns/client/cli/query_forsale.go b/x/rns/client/cli/query_forsale.go index 55a632014..88c02395a 100644 --- a/x/rns/client/cli/query_forsale.go +++ b/x/rns/client/cli/query_forsale.go @@ -23,11 +23,11 @@ func CmdListForsale() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllForsalesRequest{ + params := &types.QueryAllForSalesRequest{ Pagination: pageReq, } - res, err := queryClient.ForsaleAll(context.Background(), params) + res, err := queryClient.ForSaleAll(context.Background(), params) if err != nil { return err } @@ -54,11 +54,11 @@ func CmdShowForsale() *cobra.Command { argName := args[0] - params := &types.QueryForsaleRequest{ + params := &types.QueryForSaleRequest{ Name: argName, } - res, err := queryClient.Forsale(context.Background(), params) + res, err := queryClient.ForSale(context.Background(), params) if err != nil { return err } diff --git a/x/rns/client/cli/tx_delist.go b/x/rns/client/cli/tx_delist.go index ae56157b9..80a47a53d 100644 --- a/x/rns/client/cli/tx_delist.go +++ b/x/rns/client/cli/tx_delist.go @@ -25,7 +25,7 @@ func CmdDelist() *cobra.Command { return err } - msg := types.NewMsgDelist( + msg := types.NewMsgDeList( clientCtx.GetFromAddress().String(), argName, ) diff --git a/x/rns/client/cli/tx_register.go b/x/rns/client/cli/tx_register.go index 375a3deea..ea8a16564 100644 --- a/x/rns/client/cli/tx_register.go +++ b/x/rns/client/cli/tx_register.go @@ -22,6 +22,10 @@ func CmdRegister() *cobra.Command { argYears := args[1] argData := args[2] + years, err := strconv.ParseInt(argYears, 10, 64) + if err != nil { + return err + } clientCtx, err := client.GetClientTxContext(cmd) if err != nil { return err @@ -30,7 +34,7 @@ func CmdRegister() *cobra.Command { msg := types.NewMsgRegister( clientCtx.GetFromAddress().String(), argName, - argYears, + years, argData, ) if err := msg.ValidateBasic(); err != nil { diff --git a/x/rns/handler.go b/x/rns/handler.go index e1c2164ff..dacd50dae 100644 --- a/x/rns/handler.go +++ b/x/rns/handler.go @@ -35,8 +35,8 @@ func NewHandler(k keeper.Keeper) sdk.Handler { case *types.MsgBuy: res, err := msgServer.Buy(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDelist: - res, err := msgServer.Delist(sdk.WrapSDKContext(ctx), msg) + case *types.MsgDeList: + res, err := msgServer.DeList(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) case *types.MsgTransfer: res, err := msgServer.Transfer(sdk.WrapSDKContext(ctx), msg) diff --git a/x/rns/keeper/bidding_test.go b/x/rns/keeper/bidding_test.go index 84beb0c9a..cbea23ea1 100644 --- a/x/rns/keeper/bidding_test.go +++ b/x/rns/keeper/bidding_test.go @@ -35,7 +35,7 @@ func (suite *KeeperTestSuite) TestMsgAcceptBid() { err = suite.bankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, nameAddress, coins) suite.Require().NoError(err) - err = suite.rnsKeeper.RegisterName(suite.ctx, nameAddress.String(), TestName, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, nameAddress.String(), TestName, "{}", 2) suite.Require().NoError(err) bidderBalBefore := suite.bankKeeper.GetAllBalances(suite.ctx, address) diff --git a/x/rns/keeper/grpc_query_forsale.go b/x/rns/keeper/grpc_query_forsale.go index 2c6bf2aeb..7b9c52f60 100644 --- a/x/rns/keeper/grpc_query_forsale.go +++ b/x/rns/keeper/grpc_query_forsale.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) ForsaleAll(c context.Context, req *types.QueryAllForsalesRequest) (*types.QueryAllForsalesResponse, error) { +func (k Keeper) ForSaleAll(c context.Context, req *types.QueryAllForSalesRequest) (*types.QueryAllForSalesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -35,10 +35,10 @@ func (k Keeper) ForsaleAll(c context.Context, req *types.QueryAllForsalesRequest return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryAllForsalesResponse{Forsale: forsales, Pagination: pageRes}, nil + return &types.QueryAllForSalesResponse{ForSale: forsales, Pagination: pageRes}, nil } -func (k Keeper) Forsale(c context.Context, req *types.QueryForsaleRequest) (*types.QueryForsaleResponse, error) { +func (k Keeper) ForSale(c context.Context, req *types.QueryForSaleRequest) (*types.QueryForSaleResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -52,5 +52,5 @@ func (k Keeper) Forsale(c context.Context, req *types.QueryForsaleRequest) (*typ return nil, status.Error(codes.NotFound, "not found") } - return &types.QueryForsaleResponse{Forsale: val}, nil + return &types.QueryForSaleResponse{ForSale: val}, nil } diff --git a/x/rns/keeper/msg_server_basics_test.go b/x/rns/keeper/msg_server_basics_test.go index 7dda50500..368442f71 100644 --- a/x/rns/keeper/msg_server_basics_test.go +++ b/x/rns/keeper/msg_server_basics_test.go @@ -91,7 +91,7 @@ func (suite *KeeperTestSuite) TestMsgRegister() { return types.NewMsgRegister( user.String(), "BiPhan.jkl", - "2", + 2, "{}", ) }, @@ -103,7 +103,7 @@ func (suite *KeeperTestSuite) TestMsgRegister() { return types.NewMsgRegister( "invalid address", "BiPhan.jkl", - "2", + 2, "{}", ) }, @@ -116,7 +116,7 @@ func (suite *KeeperTestSuite) TestMsgRegister() { return types.NewMsgRegister( user.String(), "BiPhan.LUNC", - "2", + 2, "{}", ) }, @@ -124,19 +124,6 @@ func (suite *KeeperTestSuite) TestMsgRegister() { expErrMsg: "could not extract the tld from the name provided", name: "invalid name", }, - { - preRun: func() *types.MsgRegister { - return types.NewMsgRegister( - user.String(), - "BiPhan.jkl", - "s", - "{}", - ) - }, - expErr: true, - expErrMsg: "cannot parse years: invalid height", - name: "invalid years", - }, } for _, tc := range cases { @@ -183,7 +170,7 @@ func (suite *KeeperTestSuite) TestMsgTrasnfer() { err = suite.bankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, owner, coins) suite.Require().NoError(err) - err = suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), successfulName, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), successfulName, "{}", 2) suite.Require().NoError(err) cases := []struct { @@ -231,7 +218,7 @@ func (suite *KeeperTestSuite) TestMsgTrasnfer() { preRun: func() *types.MsgTransfer { freeName := "freeBi.jkl" blockHeight := suite.ctx.BlockHeight() - err := suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), freeName, "{}", "2") + err := suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), freeName, "{}", 2) suite.Require().NoError(err) name, _ := suite.rnsKeeper.GetNames(suite.ctx, "freeBi", "jkl") name.Locked = blockHeight + 1 @@ -289,7 +276,7 @@ func (suite *KeeperTestSuite) TestMsgUpdate() { err = suite.bankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, owner, coins) suite.Require().NoError(err) - err = suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), successfulName, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), successfulName, "{}", 2) suite.Require().NoError(err) const testdata = "{\"test\":\"test\"}" diff --git a/x/rns/keeper/msg_server_bidding_test.go b/x/rns/keeper/msg_server_bidding_test.go index 287af37cd..8f2f344da 100644 --- a/x/rns/keeper/msg_server_bidding_test.go +++ b/x/rns/keeper/msg_server_bidding_test.go @@ -30,7 +30,7 @@ func (suite *KeeperTestSuite) TestMsgAddBid() { suite.Require().NoError(err) suite.rnsKeeper.SetInit(suite.ctx, types.Init{Address: nameOwner.String(), Complete: true}) - err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), nuggieName, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), nuggieName, "{}", 2) suite.Require().NoError(err) _, _ = msgSrvr.List(sdk.WrapSDKContext(suite.ctx), &types.MsgList{Creator: nameOwner.String(), Name: nuggieName, Price: "200ujkl"}) @@ -111,7 +111,7 @@ func (suite *KeeperTestSuite) TestMsgAcceptOneBid() { err = suite.bankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, bidder, coins) suite.Require().NoError(err) - err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), TestName, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), TestName, "{}", 2) suite.Require().NoError(err) err = suite.rnsKeeper.AddBid(suite.ctx, bidder.String(), TestName, "1000ujkl") @@ -150,7 +150,7 @@ func (suite *KeeperTestSuite) TestMsgAcceptOneBid() { preRun: func() *types.MsgAcceptBid { freeName := "freeBi.jkl" blockHeight := suite.ctx.BlockHeight() - err := suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), freeName, "{}", "2") + err := suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), freeName, "{}", 2) suite.Require().NoError(err) name, _ := suite.rnsKeeper.GetNames(suite.ctx, "freeBi", "jkl") name.Locked = blockHeight + 1 @@ -210,7 +210,7 @@ func (suite *KeeperTestSuite) TestMsgCancelOneBid() { err = suite.bankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, bidder, coins) suite.Require().NoError(err) - err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), TestName, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), TestName, "{}", 2) suite.Require().NoError(err) err = suite.rnsKeeper.AddBid(suite.ctx, bidder.String(), TestName, "1000ujkl") diff --git a/x/rns/keeper/msg_server_buy_test.go b/x/rns/keeper/msg_server_buy_test.go index aea7aaa5f..36d5fe681 100644 --- a/x/rns/keeper/msg_server_buy_test.go +++ b/x/rns/keeper/msg_server_buy_test.go @@ -36,7 +36,7 @@ func (suite *KeeperTestSuite) TestBuyMsg() { fullName := rnsName + "." + rnsTLD // "Nuggie.jkl" keeper.SetInit(suite.ctx, types.Init{Address: nameOwner.String(), Complete: true}) - err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), fullName, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), fullName, "{}", 2) suite.Require().NoError(err) originalNames, found := keeper.GetNames(suite.ctx, rnsName, rnsTLD) suite.Require().True(found) diff --git a/x/rns/keeper/msg_server_delist.go b/x/rns/keeper/msg_server_delist.go index 19a00112f..c6e999be2 100644 --- a/x/rns/keeper/msg_server_delist.go +++ b/x/rns/keeper/msg_server_delist.go @@ -10,7 +10,7 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/rns/types" ) -func (k msgServer) Delist(goCtx context.Context, msg *types.MsgDelist) (*types.MsgDelistResponse, error) { +func (k msgServer) DeList(goCtx context.Context, msg *types.MsgDeList) (*types.MsgDeListResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) mname := strings.ToLower(msg.Name) @@ -41,5 +41,5 @@ func (k msgServer) Delist(goCtx context.Context, msg *types.MsgDelist) (*types.M k.RemoveForsale(ctx, mname) - return &types.MsgDelistResponse{}, nil + return &types.MsgDeListResponse{}, nil } diff --git a/x/rns/keeper/msg_server_delist_test.go b/x/rns/keeper/msg_server_delist_test.go index 78ff7e519..e06ffba18 100644 --- a/x/rns/keeper/msg_server_delist_test.go +++ b/x/rns/keeper/msg_server_delist_test.go @@ -27,7 +27,7 @@ func (suite *KeeperTestSuite) TestDelistMsg() { // Init rns account and register rns rnsName := "Nuggie.jkl" suite.rnsKeeper.SetInit(suite.ctx, types.Init{Address: nameOwner.String(), Complete: true}) - err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), rnsName, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, nameOwner.String(), rnsName, "{}", 2) suite.Require().NoError(err) keeper := suite.rnsKeeper @@ -36,14 +36,14 @@ func (suite *KeeperTestSuite) TestDelistMsg() { // Use postRun to return it to original state cases := []struct { testName string - preRun func() *types.MsgDelist + preRun func() *types.MsgDeList postRun func() expErr bool expErrMsg string }{ { testName: "Name_listed", - preRun: func() *types.MsgDelist { + preRun: func() *types.MsgDeList { // Check if name is actually saved name, found := keeper.GetNames(suite.ctx, "Nuggie", "jkl") suite.Require().True(found) @@ -54,7 +54,7 @@ func (suite *KeeperTestSuite) TestDelistMsg() { Owner: nameOwner.String(), } keeper.SetForsale(suite.ctx, newsale) - return &types.MsgDelist{ + return &types.MsgDeList{ Creator: nameOwner.String(), Name: fmt.Sprintf("%s,%s", name.Name, name.Tld), } @@ -73,8 +73,8 @@ func (suite *KeeperTestSuite) TestDelistMsg() { { testName: "name_not_found", - preRun: func() *types.MsgDelist { - return &types.MsgDelist{ + preRun: func() *types.MsgDeList { + return &types.MsgDeList{ Creator: nameOwner.String(), Name: "nonexistent.jkl", } @@ -85,8 +85,8 @@ func (suite *KeeperTestSuite) TestDelistMsg() { { testName: "wrong_onwer", - preRun: func() *types.MsgDelist { - return &types.MsgDelist{ + preRun: func() *types.MsgDeList { + return &types.MsgDeList{ Creator: "wrong_account", Name: "Nuggie.jkl", } @@ -97,13 +97,13 @@ func (suite *KeeperTestSuite) TestDelistMsg() { { testName: "cannot_transfer_free_name", - preRun: func() *types.MsgDelist { + preRun: func() *types.MsgDeList { blockHeight := suite.ctx.BlockHeight() names, found := keeper.GetNames(suite.ctx, "Nuggie", "jkl") suite.Require().True(found) names.Locked = blockHeight + 1 keeper.SetNames(suite.ctx, names) - return &types.MsgDelist{ + return &types.MsgDeList{ Creator: nameOwner.String(), Name: "Nuggie.jkl", } @@ -121,13 +121,13 @@ func (suite *KeeperTestSuite) TestDelistMsg() { { testName: "expired_name", - preRun: func() *types.MsgDelist { + preRun: func() *types.MsgDeList { blockHeight := suite.ctx.BlockHeight() names, found := keeper.GetNames(suite.ctx, "Nuggie", "jkl") suite.Require().True(found) names.Expires = blockHeight - 1 keeper.SetNames(suite.ctx, names) - return &types.MsgDelist{ + return &types.MsgDeList{ Creator: nameOwner.String(), Name: "Nuggie.jkl", } @@ -148,7 +148,7 @@ func (suite *KeeperTestSuite) TestDelistMsg() { suite.Run(tc.testName, func() { msg := tc.preRun() - _, err := msgSrvr.Delist(ctx, msg) + _, err := msgSrvr.DeList(ctx, msg) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) diff --git a/x/rns/keeper/msg_server_record_test.go b/x/rns/keeper/msg_server_record_test.go index db0f4fafa..c080d8575 100644 --- a/x/rns/keeper/msg_server_record_test.go +++ b/x/rns/keeper/msg_server_record_test.go @@ -24,7 +24,7 @@ func (suite *KeeperTestSuite) TestMsgAddRecord() { err = suite.bankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, owner, coins) suite.Require().NoError(err) - err = suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), "BiPhan.jkl", "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), "BiPhan.jkl", "{}", 2) suite.Require().NoError(err) cases := []struct { @@ -96,7 +96,7 @@ func (suite *KeeperTestSuite) TestMsgDelRecord() { err = suite.bankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, owner, coins) suite.Require().NoError(err) - err = suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), "BiPhan.jkl", "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, owner.String(), "BiPhan.jkl", "{}", 2) suite.Require().NoError(err) _, _ = msgSrvr.AddRecord(context, types.NewMsgAddRecord(owner.String(), "BiPhan.jkl", "app", owner.String(), "{}")) diff --git a/x/rns/keeper/msg_server_register.go b/x/rns/keeper/msg_server_register.go index ffaa942a5..a4aeb7c55 100644 --- a/x/rns/keeper/msg_server_register.go +++ b/x/rns/keeper/msg_server_register.go @@ -10,7 +10,7 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/rns/types" ) -func (k Keeper) RegisterName(ctx sdk.Context, sender string, nm string, data string, years string) error { +func (k Keeper) RegisterName(ctx sdk.Context, sender string, nm string, data string, years int64) error { nm = strings.ToLower(nm) name, tld, err := GetNameAndTLD(nm) if err != nil { @@ -24,21 +24,16 @@ func (k Keeper) RegisterName(ctx sdk.Context, sender string, nm string, data str whois, isFound := k.GetNames(ctx, name, tld) // Set the price at which the name has to be bought if it didn't have an owner before - numYears, ok := sdk.NewIntFromString(years) - if !ok { - return sdkerrors.Wrap(sdkerrors.ErrInvalidHeight, "cannot parse years") - } - cost, err := GetCostOfName(name, tld) if err != nil { return sdkerrors.Wrap(err, "failed to get cost") } - price := sdk.Coins{sdk.NewInt64Coin("ujkl", cost*numYears.Int64())} + price := sdk.Coins{sdk.NewInt64Coin("ujkl", cost*years)} blockHeight := ctx.BlockHeight() - time := numYears.Int64() * 5733818 + time := years * 5733818 owner, err := sdk.AccAddressFromBech32(sender) if err != nil { diff --git a/x/rns/keeper/register_test.go b/x/rns/keeper/register_test.go index f95ae0d4f..f36fed57e 100644 --- a/x/rns/keeper/register_test.go +++ b/x/rns/keeper/register_test.go @@ -35,7 +35,7 @@ func (suite *KeeperTestSuite) TestMsgRegisterName() { beforebal := suite.bankKeeper.GetAllBalances(suite.ctx, address) amt := beforebal.AmountOf("ujkl") - err = suite.rnsKeeper.RegisterName(suite.ctx, address.String(), name, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, address.String(), name, "{}", 2) suite.Require().NoError(err) nameReq := types.QueryNameRequest{ @@ -52,7 +52,7 @@ func (suite *KeeperTestSuite) TestMsgRegisterName() { _, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) - err = suite.rnsKeeper.RegisterName(suite.ctx, address.String(), capname, "{}", "2") // adding time to registration + err = suite.rnsKeeper.RegisterName(suite.ctx, address.String(), capname, "{}", 2) // adding time to registration suite.Require().NoError(err) afterbal = suite.bankKeeper.GetAllBalances(suite.ctx, address) diff --git a/x/rns/keeper/transfer_test.go b/x/rns/keeper/transfer_test.go index 337a2b801..0d96b42b7 100644 --- a/x/rns/keeper/transfer_test.go +++ b/x/rns/keeper/transfer_test.go @@ -30,7 +30,7 @@ func (suite *KeeperTestSuite) TestMsgTransfer() { beforebal := suite.bankKeeper.GetAllBalances(suite.ctx, address) amt := beforebal.AmountOf("ujkl") - err = suite.rnsKeeper.RegisterName(suite.ctx, address.String(), name, "{}", "2") + err = suite.rnsKeeper.RegisterName(suite.ctx, address.String(), name, "{}", 2) suite.Require().NoError(err) nameReq := types.QueryNameRequest{ diff --git a/x/rns/simulation/delist.go b/x/rns/simulation/delist.go index 858e0055e..18e426157 100644 --- a/x/rns/simulation/delist.go +++ b/x/rns/simulation/delist.go @@ -36,7 +36,7 @@ func SimulateMsgDelist( return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDelist, "name is expired"), nil, nil } - msg := &types.MsgDelist{ + msg := &types.MsgDeList{ Creator: forsale.Owner, Name: forsale.Name, } diff --git a/x/rns/simulation/register.go b/x/rns/simulation/register.go index 0c6f2b45a..5e3f589d3 100644 --- a/x/rns/simulation/register.go +++ b/x/rns/simulation/register.go @@ -1,7 +1,6 @@ package simulation import ( - "fmt" "math/rand" "github.com/cosmos/cosmos-sdk/baseapp" @@ -79,7 +78,7 @@ func SimulateMsgRegister( } // filling the appropriate message fields msg.Data = "" - msg.Years = fmt.Sprint(numYears) + msg.Years = int64(numYears) msg.Name = name + "." + tld // generating the transaction diff --git a/x/rns/types/codec.go b/x/rns/types/codec.go index bc193d09f..2c9d423fa 100644 --- a/x/rns/types/codec.go +++ b/x/rns/types/codec.go @@ -15,7 +15,7 @@ func RegisterCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgCancelBid{}, "rns/CancelBid", nil) cdc.RegisterConcrete(&MsgList{}, "rns/List", nil) cdc.RegisterConcrete(&MsgBuy{}, "rns/Buy", nil) - cdc.RegisterConcrete(&MsgDelist{}, "rns/Delist", nil) + cdc.RegisterConcrete(&MsgDeList{}, "rns/DeList", nil) cdc.RegisterConcrete(&MsgTransfer{}, "rns/Transfer", nil) cdc.RegisterConcrete(&MsgAddRecord{}, "rns/AddRecord", nil) cdc.RegisterConcrete(&MsgDelRecord{}, "rns/DelRecord", nil) @@ -43,7 +43,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgBuy{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgDelist{}, + &MsgDeList{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), &MsgTransfer{}, diff --git a/x/rns/types/message_delist.go b/x/rns/types/message_delist.go index 3ed926964..704fedb16 100644 --- a/x/rns/types/message_delist.go +++ b/x/rns/types/message_delist.go @@ -7,24 +7,24 @@ import ( const TypeMsgDelist = "delist" -var _ sdk.Msg = &MsgDelist{} +var _ sdk.Msg = &MsgDeList{} -func NewMsgDelist(creator string, name string) *MsgDelist { - return &MsgDelist{ +func NewMsgDeList(creator string, name string) *MsgDeList { + return &MsgDeList{ Creator: creator, Name: name, } } -func (msg *MsgDelist) Route() string { +func (msg *MsgDeList) Route() string { return RouterKey } -func (msg *MsgDelist) Type() string { +func (msg *MsgDeList) Type() string { return TypeMsgDelist } -func (msg *MsgDelist) GetSigners() []sdk.AccAddress { +func (msg *MsgDeList) GetSigners() []sdk.AccAddress { creator, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { panic(err) @@ -32,12 +32,12 @@ func (msg *MsgDelist) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{creator} } -func (msg *MsgDelist) GetSignBytes() []byte { +func (msg *MsgDeList) GetSignBytes() []byte { bz := ModuleCdc.MustMarshalJSON(msg) return sdk.MustSortJSON(bz) } -func (msg *MsgDelist) ValidateBasic() error { +func (msg *MsgDeList) ValidateBasic() error { _, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) diff --git a/x/rns/types/message_delist_test.go b/x/rns/types/message_delist_test.go index 8c21b3b5c..ea3c3e5b6 100644 --- a/x/rns/types/message_delist_test.go +++ b/x/rns/types/message_delist_test.go @@ -13,26 +13,26 @@ import ( func TestMsgDelist_ValidateBasic(t *testing.T) { tests := []struct { name string - msg MsgDelist + msg MsgDeList err error }{ { name: "invalid address", - msg: MsgDelist{ + msg: MsgDeList{ Creator: "invalid_address", Name: "validname.jkl", }, err: sdkerrors.ErrInvalidAddress, }, { name: "invalid name", - msg: MsgDelist{ + msg: MsgDeList{ Creator: "cosmos1k3qu47ycrut4sr73vv6uqtuhyyfewymu34gju2", Name: "invalidname", }, err: sdkerrors.ErrInvalidRequest, }, { name: "valid address", - msg: MsgDelist{ + msg: MsgDeList{ Creator: "cosmos1k3qu47ycrut4sr73vv6uqtuhyyfewymu34gju2", Name: "validname.jkl", }, diff --git a/x/rns/types/message_register.go b/x/rns/types/message_register.go index 031f5f3c0..187ab65ea 100644 --- a/x/rns/types/message_register.go +++ b/x/rns/types/message_register.go @@ -9,7 +9,7 @@ const TypeMsgRegister = "register" var _ sdk.Msg = &MsgRegister{} -func NewMsgRegister(creator string, name string, years string, data string) *MsgRegister { +func NewMsgRegister(creator string, name string, years int64, data string) *MsgRegister { return &MsgRegister{ Creator: creator, Name: name, @@ -51,9 +51,6 @@ func (msg *MsgRegister) ValidateBasic() error { if !IsValidName(name) { return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid name") } - _, ok := sdk.NewIntFromString(msg.Years) - if !ok { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "invalid years") - } + return nil } diff --git a/x/rns/types/message_register_test.go b/x/rns/types/message_register_test.go index 5af57fab6..e540a9377 100644 --- a/x/rns/types/message_register_test.go +++ b/x/rns/types/message_register_test.go @@ -21,7 +21,7 @@ func TestMsgRegister_ValidateBasic(t *testing.T) { msg: MsgRegister{ Creator: "invalid_address", Name: "validname.jkl", - Years: "10", + Years: 10, Data: "{}", }, err: sdkerrors.ErrInvalidAddress, @@ -30,25 +30,16 @@ func TestMsgRegister_ValidateBasic(t *testing.T) { msg: MsgRegister{ Creator: "cosmos1ytwr7x4av05ek0tf8z9s4zmvr6w569zsm27dpg", Name: "invalidname", - Years: "10", + Years: 10, Data: "{}", }, err: sdkerrors.ErrInvalidRequest, - }, { - name: "invalid years", - msg: MsgRegister{ - Creator: "cosmos1ytwr7x4av05ek0tf8z9s4zmvr6w569zsm27dpg", - Name: "validname.jkl", - Years: "s", - Data: "{}", - }, - err: sdkerrors.ErrInvalidType, }, { name: "valid address", msg: MsgRegister{ Creator: "cosmos1ytwr7x4av05ek0tf8z9s4zmvr6w569zsm27dpg", Name: "validname.jkl", - Years: "10", + Years: 10, Data: "{}", }, }, diff --git a/x/rns/types/query.pb.go b/x/rns/types/query.pb.go index 0623fa189..f4c14c69f 100644 --- a/x/rns/types/query.pb.go +++ b/x/rns/types/query.pb.go @@ -665,22 +665,22 @@ func (m *QueryAllBidsResponse) GetPagination() *query.PageResponse { return nil } -type QueryForsaleRequest struct { +type QueryForSaleRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (m *QueryForsaleRequest) Reset() { *m = QueryForsaleRequest{} } -func (m *QueryForsaleRequest) String() string { return proto.CompactTextString(m) } -func (*QueryForsaleRequest) ProtoMessage() {} -func (*QueryForsaleRequest) Descriptor() ([]byte, []int) { +func (m *QueryForSaleRequest) Reset() { *m = QueryForSaleRequest{} } +func (m *QueryForSaleRequest) String() string { return proto.CompactTextString(m) } +func (*QueryForSaleRequest) ProtoMessage() {} +func (*QueryForSaleRequest) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{14} } -func (m *QueryForsaleRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryForSaleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryForsaleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryForSaleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryForsaleRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryForSaleRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -690,41 +690,41 @@ func (m *QueryForsaleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryForsaleRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryForsaleRequest.Merge(m, src) +func (m *QueryForSaleRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryForSaleRequest.Merge(m, src) } -func (m *QueryForsaleRequest) XXX_Size() int { +func (m *QueryForSaleRequest) XXX_Size() int { return m.Size() } -func (m *QueryForsaleRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryForsaleRequest.DiscardUnknown(m) +func (m *QueryForSaleRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryForSaleRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryForsaleRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryForSaleRequest proto.InternalMessageInfo -func (m *QueryForsaleRequest) GetName() string { +func (m *QueryForSaleRequest) GetName() string { if m != nil { return m.Name } return "" } -type QueryForsaleResponse struct { - Forsale Forsale `protobuf:"bytes,1,opt,name=forsale,proto3" json:"forsale"` +type QueryForSaleResponse struct { + ForSale Forsale `protobuf:"bytes,1,opt,name=for_sale,json=forSale,proto3" json:"for_sale"` } -func (m *QueryForsaleResponse) Reset() { *m = QueryForsaleResponse{} } -func (m *QueryForsaleResponse) String() string { return proto.CompactTextString(m) } -func (*QueryForsaleResponse) ProtoMessage() {} -func (*QueryForsaleResponse) Descriptor() ([]byte, []int) { +func (m *QueryForSaleResponse) Reset() { *m = QueryForSaleResponse{} } +func (m *QueryForSaleResponse) String() string { return proto.CompactTextString(m) } +func (*QueryForSaleResponse) ProtoMessage() {} +func (*QueryForSaleResponse) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{15} } -func (m *QueryForsaleResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryForSaleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryForsaleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryForSaleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryForsaleResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryForSaleResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -734,41 +734,41 @@ func (m *QueryForsaleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryForsaleResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryForsaleResponse.Merge(m, src) +func (m *QueryForSaleResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryForSaleResponse.Merge(m, src) } -func (m *QueryForsaleResponse) XXX_Size() int { +func (m *QueryForSaleResponse) XXX_Size() int { return m.Size() } -func (m *QueryForsaleResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryForsaleResponse.DiscardUnknown(m) +func (m *QueryForSaleResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryForSaleResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryForsaleResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryForSaleResponse proto.InternalMessageInfo -func (m *QueryForsaleResponse) GetForsale() Forsale { +func (m *QueryForSaleResponse) GetForSale() Forsale { if m != nil { - return m.Forsale + return m.ForSale } return Forsale{} } -type QueryAllForsalesRequest struct { +type QueryAllForSalesRequest struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllForsalesRequest) Reset() { *m = QueryAllForsalesRequest{} } -func (m *QueryAllForsalesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllForsalesRequest) ProtoMessage() {} -func (*QueryAllForsalesRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllForSalesRequest) Reset() { *m = QueryAllForSalesRequest{} } +func (m *QueryAllForSalesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllForSalesRequest) ProtoMessage() {} +func (*QueryAllForSalesRequest) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{16} } -func (m *QueryAllForsalesRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllForSalesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllForsalesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllForSalesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllForsalesRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllForSalesRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -778,42 +778,42 @@ func (m *QueryAllForsalesRequest) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QueryAllForsalesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllForsalesRequest.Merge(m, src) +func (m *QueryAllForSalesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllForSalesRequest.Merge(m, src) } -func (m *QueryAllForsalesRequest) XXX_Size() int { +func (m *QueryAllForSalesRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllForsalesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllForsalesRequest.DiscardUnknown(m) +func (m *QueryAllForSalesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllForSalesRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllForsalesRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllForSalesRequest proto.InternalMessageInfo -func (m *QueryAllForsalesRequest) GetPagination() *query.PageRequest { +func (m *QueryAllForSalesRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllForsalesResponse struct { - Forsale []Forsale `protobuf:"bytes,1,rep,name=forsale,proto3" json:"forsale"` +type QueryAllForSalesResponse struct { + ForSale []Forsale `protobuf:"bytes,1,rep,name=for_sale,json=forSale,proto3" json:"for_sale"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllForsalesResponse) Reset() { *m = QueryAllForsalesResponse{} } -func (m *QueryAllForsalesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllForsalesResponse) ProtoMessage() {} -func (*QueryAllForsalesResponse) Descriptor() ([]byte, []int) { +func (m *QueryAllForSalesResponse) Reset() { *m = QueryAllForSalesResponse{} } +func (m *QueryAllForSalesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllForSalesResponse) ProtoMessage() {} +func (*QueryAllForSalesResponse) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{17} } -func (m *QueryAllForsalesResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllForSalesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllForsalesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllForSalesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllForsalesResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllForSalesResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -823,26 +823,26 @@ func (m *QueryAllForsalesResponse) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *QueryAllForsalesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllForsalesResponse.Merge(m, src) +func (m *QueryAllForSalesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllForSalesResponse.Merge(m, src) } -func (m *QueryAllForsalesResponse) XXX_Size() int { +func (m *QueryAllForSalesResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllForsalesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllForsalesResponse.DiscardUnknown(m) +func (m *QueryAllForSalesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllForSalesResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllForsalesResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllForSalesResponse proto.InternalMessageInfo -func (m *QueryAllForsalesResponse) GetForsale() []Forsale { +func (m *QueryAllForSalesResponse) GetForSale() []Forsale { if m != nil { - return m.Forsale + return m.ForSale } return nil } -func (m *QueryAllForsalesResponse) GetPagination() *query.PageResponse { +func (m *QueryAllForSalesResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } @@ -1152,10 +1152,10 @@ func init() { proto.RegisterType((*QueryBidResponse)(nil), "canine_chain.rns.QueryBidResponse") proto.RegisterType((*QueryAllBidsRequest)(nil), "canine_chain.rns.QueryAllBidsRequest") proto.RegisterType((*QueryAllBidsResponse)(nil), "canine_chain.rns.QueryAllBidsResponse") - proto.RegisterType((*QueryForsaleRequest)(nil), "canine_chain.rns.QueryForsaleRequest") - proto.RegisterType((*QueryForsaleResponse)(nil), "canine_chain.rns.QueryForsaleResponse") - proto.RegisterType((*QueryAllForsalesRequest)(nil), "canine_chain.rns.QueryAllForsalesRequest") - proto.RegisterType((*QueryAllForsalesResponse)(nil), "canine_chain.rns.QueryAllForsalesResponse") + proto.RegisterType((*QueryForSaleRequest)(nil), "canine_chain.rns.QueryForSaleRequest") + proto.RegisterType((*QueryForSaleResponse)(nil), "canine_chain.rns.QueryForSaleResponse") + proto.RegisterType((*QueryAllForSalesRequest)(nil), "canine_chain.rns.QueryAllForSalesRequest") + proto.RegisterType((*QueryAllForSalesResponse)(nil), "canine_chain.rns.QueryAllForSalesResponse") proto.RegisterType((*QueryInitRequest)(nil), "canine_chain.rns.QueryInitRequest") proto.RegisterType((*QueryInitResponse)(nil), "canine_chain.rns.QueryInitResponse") proto.RegisterType((*QueryAllInitsRequest)(nil), "canine_chain.rns.QueryAllInitsRequest") @@ -1167,70 +1167,71 @@ func init() { func init() { proto.RegisterFile("canine_chain/rns/query.proto", fileDescriptor_8561b6b36d651aba) } var fileDescriptor_8561b6b36d651aba = []byte{ - // 1011 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x97, 0xdf, 0x6f, 0x1b, 0x45, - 0x10, 0xc7, 0xb3, 0x89, 0x13, 0x97, 0xa9, 0x04, 0x65, 0x09, 0x34, 0x5c, 0x8b, 0xa1, 0x97, 0x5f, - 0x75, 0x7e, 0xdc, 0x91, 0x44, 0x02, 0xf5, 0x09, 0xc5, 0x42, 0xa5, 0x95, 0x0a, 0xb4, 0x7e, 0x41, - 0x42, 0x82, 0x68, 0x6d, 0x1f, 0xce, 0xc1, 0xf9, 0xd6, 0xf5, 0x5e, 0x68, 0xab, 0x28, 0x08, 0x15, - 0x10, 0x12, 0x12, 0x12, 0x05, 0xf1, 0x84, 0xc4, 0x9f, 0xc0, 0xdf, 0xd1, 0xc7, 0x4a, 0xbc, 0xf0, - 0x84, 0x50, 0xc2, 0x1f, 0x82, 0x76, 0x76, 0x2e, 0xbe, 0xf3, 0xe5, 0xce, 0x07, 0x32, 0x52, 0xdf, - 0xec, 0xec, 0x77, 0x67, 0x3e, 0xf3, 0xdd, 0xdd, 0x19, 0x07, 0x2e, 0xb7, 0x45, 0xe8, 0x87, 0xde, - 0x5e, 0x7b, 0x5f, 0xf8, 0xa1, 0x3b, 0x08, 0x95, 0x7b, 0xf7, 0xc0, 0x1b, 0x3c, 0x70, 0xfa, 0x03, - 0x19, 0x49, 0x7e, 0x21, 0xb9, 0xea, 0x0c, 0x42, 0x65, 0xcd, 0x77, 0x65, 0x57, 0xe2, 0xa2, 0xab, - 0x3f, 0x19, 0x9d, 0x75, 0xb9, 0x2b, 0x65, 0x37, 0xf0, 0x5c, 0xd1, 0xf7, 0x5d, 0x11, 0x86, 0x32, - 0x12, 0x91, 0x2f, 0x43, 0x45, 0xab, 0x6b, 0x6d, 0xa9, 0x7a, 0x52, 0xb9, 0x2d, 0xa1, 0x3c, 0x13, - 0xde, 0xfd, 0x7c, 0xab, 0xe5, 0x45, 0x62, 0xcb, 0xed, 0x8b, 0xae, 0x1f, 0xa2, 0x98, 0xb4, 0xaf, - 0x64, 0x78, 0xfa, 0x62, 0x20, 0x7a, 0x71, 0xa8, 0x2c, 0xee, 0xbd, 0x7d, 0xe9, 0xe7, 0xaf, 0x86, - 0xa2, 0xe7, 0xc5, 0xab, 0x97, 0x32, 0xab, 0x2d, 0xbf, 0x13, 0x2f, 0xd6, 0x32, 0x8b, 0x9f, 0xc8, - 0x81, 0x12, 0x81, 0x97, 0xbb, 0xd9, 0x0f, 0xfd, 0xc8, 0x2c, 0xda, 0xf3, 0xc0, 0xef, 0xe8, 0xb2, - 0x6e, 0x23, 0x6a, 0xd3, 0xbb, 0x7b, 0xe0, 0xa9, 0xc8, 0x7e, 0x17, 0x5e, 0x48, 0xfd, 0x55, 0xf5, - 0x65, 0xa8, 0x3c, 0xfe, 0x06, 0xcc, 0x99, 0x92, 0x16, 0xd8, 0x6b, 0xec, 0xea, 0xf9, 0xed, 0x05, - 0x67, 0xd4, 0x64, 0xc7, 0xec, 0x68, 0x54, 0x1e, 0xff, 0xf9, 0xea, 0x54, 0x93, 0xd4, 0x76, 0x1d, - 0x9e, 0xc7, 0x70, 0x1f, 0xe8, 0x82, 0x29, 0x07, 0x9f, 0x87, 0x59, 0x3f, 0xec, 0x78, 0xf7, 0x31, - 0xd6, 0x33, 0x4d, 0xf3, 0xc5, 0xbe, 0x49, 0x3c, 0x24, 0xa5, 0xc4, 0x3b, 0x30, 0x8b, 0x66, 0x51, - 0xde, 0x8b, 0xd9, 0xbc, 0xa8, 0xa7, 0xb4, 0x46, 0x6b, 0x7f, 0x0c, 0xf3, 0x18, 0x6a, 0x37, 0x08, - 0x52, 0x89, 0xaf, 0x03, 0x0c, 0xcf, 0x8e, 0x22, 0xae, 0x38, 0xe6, 0xa0, 0x1d, 0x7d, 0xd0, 0x8e, - 0xb9, 0x47, 0x74, 0xd0, 0xce, 0x6d, 0xd1, 0xf5, 0x68, 0x6f, 0x33, 0xb1, 0xd3, 0xfe, 0x99, 0xc1, - 0x8b, 0x23, 0x09, 0xb2, 0xb8, 0x33, 0x65, 0x71, 0xf9, 0x3b, 0x29, 0xac, 0x69, 0xc4, 0x5a, 0x1d, - 0x8b, 0x65, 0x32, 0xa6, 0xb8, 0xae, 0xc2, 0x05, 0xc4, 0x7a, 0x4f, 0xf4, 0xbc, 0x62, 0xb3, 0x6f, - 0xd0, 0xb9, 0x18, 0xe5, 0x10, 0x1e, 0xaf, 0x5e, 0xbe, 0xd7, 0x5a, 0x7e, 0x0a, 0x8f, 0xda, 0xa4, - 0xd7, 0xb8, 0xfa, 0x7f, 0x7a, 0x4d, 0x09, 0xb2, 0xb8, 0x33, 0x65, 0x71, 0x27, 0xe7, 0xf5, 0x2a, - 0x3c, 0x87, 0x58, 0x0d, 0xbf, 0x53, 0x6c, 0xf5, 0xdb, 0x74, 0x28, 0x28, 0x24, 0xf4, 0xd7, 0xa1, - 0xa2, 0x9f, 0x31, 0xd9, 0xf2, 0x52, 0x96, 0xbc, 0xe1, 0x77, 0x62, 0x70, 0x54, 0xda, 0x1f, 0xd1, - 0xbb, 0xdc, 0x0d, 0x02, 0xbd, 0x36, 0x69, 0x97, 0x1f, 0xb1, 0xe1, 0x31, 0x9a, 0xf8, 0x19, 0xd2, - 0x99, 0x72, 0xa4, 0x93, 0x73, 0xb8, 0x4e, 0x25, 0x5f, 0x37, 0x3d, 0x2d, 0x2e, 0x99, 0x43, 0x45, - 0x1f, 0x25, 0x99, 0x8c, 0x9f, 0xed, 0x3b, 0x44, 0x7f, 0x2a, 0x25, 0xfa, 0x6b, 0x50, 0xa5, 0x8e, - 0x48, 0xde, 0xbc, 0x9c, 0x2d, 0x80, 0xf6, 0x50, 0x0d, 0xb1, 0xde, 0x16, 0x70, 0x31, 0x36, 0x84, - 0x14, 0x13, 0x37, 0xfd, 0x57, 0x06, 0x0b, 0xd9, 0x1c, 0x67, 0xa1, 0xcf, 0xfc, 0x1b, 0xf4, 0xc9, - 0x9d, 0xc0, 0x06, 0x5d, 0xdd, 0x9b, 0xa1, 0x1f, 0xc5, 0xc5, 0x2f, 0x40, 0x55, 0x74, 0x3a, 0x03, - 0x4f, 0x29, 0x3a, 0x81, 0xf8, 0xab, 0xbd, 0x4a, 0x3d, 0xc5, 0xa8, 0xa9, 0x0c, 0x0e, 0x15, 0x3d, - 0x73, 0x50, 0x7b, 0xae, 0x89, 0x9f, 0x93, 0x2d, 0x43, 0x6b, 0x27, 0xee, 0xeb, 0x8f, 0x89, 0x96, - 0x41, 0x09, 0x86, 0xb7, 0x99, 0x68, 0x72, 0x6e, 0xb3, 0x96, 0xc7, 0xb7, 0x59, 0x2b, 0x27, 0xe7, - 0xe5, 0x17, 0x60, 0x21, 0xd3, 0x2d, 0x5f, 0x45, 0xef, 0xdf, 0x0b, 0xbd, 0x4e, 0xaa, 0x5b, 0xe6, - 0xba, 0x3a, 0x62, 0xca, 0xf4, 0x7f, 0x36, 0xe5, 0x17, 0x06, 0x97, 0xce, 0x04, 0x78, 0x1a, 0xba, - 0xe9, 0xf6, 0x77, 0xe7, 0x61, 0x16, 0xe9, 0xf8, 0x43, 0x06, 0x73, 0xe6, 0xa7, 0x04, 0x5f, 0xca, - 0x32, 0x64, 0x7f, 0xb1, 0x58, 0xcb, 0x63, 0x54, 0x26, 0x9b, 0xbd, 0xfe, 0xf0, 0xf7, 0xbf, 0x7f, - 0x9a, 0x5e, 0xe6, 0x8b, 0xee, 0xa7, 0xa2, 0xfd, 0x99, 0x08, 0x36, 0x3b, 0x42, 0xba, 0x66, 0xe7, - 0xe6, 0xe8, 0xef, 0x36, 0xfe, 0x35, 0x83, 0x59, 0x2c, 0x97, 0xdb, 0x39, 0xd1, 0x13, 0x23, 0xd6, - 0x5a, 0x2c, 0xd4, 0x50, 0xfe, 0x6d, 0xcc, 0xbf, 0xc1, 0xd7, 0x0a, 0xf3, 0xa3, 0xad, 0xee, 0x21, - 0x4e, 0x8e, 0x23, 0xfe, 0x2d, 0x83, 0x73, 0x88, 0xb1, 0x1b, 0x04, 0x7c, 0x25, 0x27, 0xcb, 0xc8, - 0xe0, 0xb5, 0x56, 0xc7, 0xea, 0x88, 0x68, 0x0d, 0x89, 0x96, 0xb8, 0x3d, 0x9e, 0x88, 0x7f, 0xc9, - 0xa0, 0xa2, 0x3b, 0x3d, 0xbf, 0x92, 0x13, 0x7d, 0x38, 0x06, 0x2d, 0xbb, 0x48, 0x42, 0xb9, 0xb7, - 0x30, 0xf7, 0x3a, 0xaf, 0x17, 0xe6, 0xd6, 0xf3, 0xe4, 0xd4, 0x8c, 0xaf, 0x18, 0x54, 0x35, 0x82, - 0xf6, 0x62, 0x39, 0xbf, 0xc6, 0xc4, 0x74, 0xb4, 0x56, 0xc6, 0xc9, 0x88, 0xa6, 0x8e, 0x34, 0x8b, - 0xfc, 0xca, 0x58, 0x1a, 0xfe, 0x3d, 0x83, 0x2a, 0xb5, 0xdd, 0x5c, 0x8a, 0xf4, 0xc0, 0xca, 0xa5, - 0x18, 0x19, 0x56, 0xf6, 0x0e, 0x52, 0x6c, 0xf2, 0xf5, 0x42, 0x0a, 0x6a, 0xf2, 0xee, 0xa1, 0x3e, - 0x98, 0x23, 0xfe, 0x88, 0x01, 0x50, 0x20, 0x6d, 0x4c, 0x3d, 0xbf, 0xe2, 0x91, 0x29, 0x66, 0xad, - 0x95, 0x91, 0x12, 0xda, 0x06, 0xa2, 0xad, 0xf0, 0xa5, 0x32, 0x68, 0xfa, 0xf5, 0x54, 0x74, 0x23, - 0xcd, 0x7d, 0x3c, 0x89, 0x79, 0x92, 0xfb, 0x78, 0x92, 0x53, 0xa4, 0xa4, 0x35, 0xba, 0x61, 0xbb, - 0x87, 0xd4, 0x38, 0x8f, 0xf8, 0x37, 0x0c, 0xaa, 0x3a, 0xca, 0x98, 0xc7, 0x93, 0x1c, 0x41, 0x45, - 0x8f, 0x27, 0x35, 0x49, 0x4a, 0x5e, 0x19, 0x1c, 0x21, 0xbf, 0x31, 0x78, 0x36, 0xdd, 0x74, 0xf9, - 0x46, 0x4e, 0x9a, 0x33, 0x87, 0x83, 0xb5, 0x59, 0x52, 0x4d, 0x68, 0x6f, 0x21, 0xda, 0x35, 0xfe, - 0x66, 0x21, 0x5a, 0xe0, 0xab, 0x68, 0x4f, 0xea, 0xdd, 0x7b, 0xd4, 0x74, 0x62, 0xe3, 0x1a, 0x37, - 0x1e, 0x1f, 0xd7, 0xd8, 0x93, 0xe3, 0x1a, 0xfb, 0xeb, 0xb8, 0xc6, 0x7e, 0x38, 0xa9, 0x4d, 0x3d, - 0x39, 0xa9, 0x4d, 0xfd, 0x71, 0x52, 0x9b, 0xfa, 0xd0, 0xe9, 0xfa, 0xd1, 0xfe, 0x41, 0xcb, 0x69, - 0xcb, 0x1e, 0x05, 0xbf, 0x25, 0x5a, 0x2a, 0x1d, 0xfc, 0x3e, 0x86, 0x8f, 0x1e, 0xf4, 0x3d, 0xd5, - 0x9a, 0xc3, 0x7f, 0x35, 0x77, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xf9, 0x48, 0x2c, 0xb1, + // 1027 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x97, 0x41, 0x6f, 0x1b, 0x45, + 0x14, 0xc7, 0x33, 0x89, 0x13, 0x87, 0x57, 0x09, 0xca, 0x10, 0x68, 0xd8, 0x16, 0x43, 0x37, 0x4d, + 0x5c, 0x27, 0xf1, 0x2e, 0x49, 0x10, 0x08, 0x2e, 0x28, 0x11, 0x0a, 0xad, 0x54, 0xa0, 0x98, 0x03, + 0x12, 0x12, 0x44, 0x63, 0x7b, 0xe3, 0x2c, 0xac, 0x77, 0xdc, 0xdd, 0x0d, 0x6d, 0x15, 0x05, 0xa1, + 0x02, 0xe2, 0x82, 0x10, 0x14, 0x71, 0xe2, 0xc0, 0x37, 0xe0, 0x73, 0xf4, 0x18, 0x89, 0x0b, 0x27, + 0x84, 0x12, 0x3e, 0x08, 0x9a, 0x37, 0x6f, 0xed, 0x5d, 0x6f, 0x76, 0x6d, 0x90, 0x91, 0x7a, 0xb3, + 0x33, 0xff, 0x79, 0xef, 0x37, 0xff, 0x37, 0xf3, 0x9e, 0x03, 0x57, 0x5a, 0xc2, 0x77, 0x7d, 0x67, + 0xaf, 0x75, 0x20, 0x5c, 0xdf, 0x0e, 0xfc, 0xd0, 0xbe, 0x73, 0xe8, 0x04, 0xf7, 0xad, 0x5e, 0x20, + 0x23, 0xc9, 0x2f, 0x26, 0x57, 0xad, 0xc0, 0x0f, 0x8d, 0x85, 0x8e, 0xec, 0x48, 0x5c, 0xb4, 0xd5, + 0x27, 0xad, 0x33, 0xae, 0x74, 0xa4, 0xec, 0x78, 0x8e, 0x2d, 0x7a, 0xae, 0x2d, 0x7c, 0x5f, 0x46, + 0x22, 0x72, 0xa5, 0x1f, 0xd2, 0xea, 0x6a, 0x4b, 0x86, 0x5d, 0x19, 0xda, 0x4d, 0x11, 0x3a, 0x3a, + 0xbc, 0xfd, 0xf9, 0x46, 0xd3, 0x89, 0xc4, 0x86, 0xdd, 0x13, 0x1d, 0xd7, 0x47, 0x31, 0x69, 0x5f, + 0xc8, 0xf0, 0xf4, 0x44, 0x20, 0xba, 0x71, 0xa8, 0x2c, 0xee, 0xdd, 0x03, 0xe9, 0xe6, 0xaf, 0xfa, + 0xa2, 0xeb, 0xc4, 0xab, 0x97, 0x33, 0xab, 0x4d, 0xb7, 0x1d, 0x2f, 0x56, 0x32, 0x8b, 0xfb, 0x32, + 0x08, 0x85, 0xe7, 0xe4, 0x6e, 0x76, 0x7d, 0x37, 0xd2, 0x8b, 0xe6, 0x02, 0xf0, 0xf7, 0xd5, 0xb1, + 0x6e, 0x23, 0x6a, 0xc3, 0xb9, 0x73, 0xe8, 0x84, 0x91, 0xf9, 0x0e, 0x3c, 0x93, 0xfa, 0x6b, 0xd8, + 0x93, 0x7e, 0xe8, 0xf0, 0x57, 0x61, 0x4e, 0x1f, 0x69, 0x91, 0xbd, 0xc4, 0xae, 0x5f, 0xd8, 0x5c, + 0xb4, 0x86, 0x4d, 0xb6, 0xf4, 0x8e, 0x9d, 0xd2, 0xa3, 0x3f, 0x5f, 0x9c, 0x6a, 0x90, 0xda, 0xac, + 0xc1, 0xd3, 0x18, 0xee, 0x43, 0x75, 0x60, 0xca, 0xc1, 0x17, 0x60, 0xd6, 0xf5, 0xdb, 0xce, 0x3d, + 0x8c, 0xf5, 0x44, 0x43, 0x7f, 0x31, 0x6f, 0x12, 0x0f, 0x49, 0x29, 0xf1, 0x16, 0xcc, 0xa2, 0x59, + 0x94, 0xf7, 0x52, 0x36, 0x2f, 0xea, 0x29, 0xad, 0xd6, 0x9a, 0x9f, 0xc0, 0x02, 0x86, 0xda, 0xf6, + 0xbc, 0x54, 0xe2, 0x5d, 0x80, 0x41, 0xed, 0x28, 0xe2, 0x8a, 0xa5, 0x0b, 0x6d, 0xa9, 0x42, 0x5b, + 0xfa, 0x1e, 0x51, 0xa1, 0xad, 0xdb, 0xa2, 0xe3, 0xd0, 0xde, 0x46, 0x62, 0xa7, 0xf9, 0x33, 0x83, + 0x67, 0x87, 0x12, 0x64, 0x71, 0x67, 0xc6, 0xc5, 0xe5, 0x6f, 0xa7, 0xb0, 0xa6, 0x11, 0xab, 0x3a, + 0x12, 0x4b, 0x67, 0x4c, 0x71, 0x5d, 0x87, 0x8b, 0x88, 0xf5, 0xae, 0xe8, 0x3a, 0xc5, 0x66, 0xdf, + 0xa0, 0xba, 0x68, 0xe5, 0x00, 0x1e, 0xaf, 0x5e, 0xbe, 0xd7, 0x4a, 0xde, 0x87, 0x47, 0x6d, 0xd2, + 0x6b, 0x5c, 0xfd, 0x3f, 0xbd, 0xa6, 0x04, 0x59, 0xdc, 0x99, 0x71, 0x71, 0x27, 0xe7, 0x75, 0x15, + 0x9e, 0x42, 0xac, 0x1d, 0xb7, 0x5d, 0x6c, 0xf5, 0x5b, 0x54, 0x14, 0x14, 0x12, 0xfa, 0xcb, 0x50, + 0x52, 0xcf, 0x98, 0x6c, 0x79, 0x2e, 0x4b, 0xbe, 0xe3, 0xb6, 0x63, 0x70, 0x54, 0x9a, 0x1f, 0xd3, + 0xbb, 0xdc, 0xf6, 0x3c, 0xb5, 0x36, 0x69, 0x97, 0x7f, 0x64, 0x83, 0x32, 0xea, 0xf8, 0x19, 0xd2, + 0x99, 0xf1, 0x48, 0x27, 0xe7, 0x70, 0x8d, 0x8e, 0xbc, 0x2b, 0x83, 0x0f, 0x84, 0xd7, 0xbf, 0xd0, + 0x1c, 0x4a, 0xaa, 0x94, 0x64, 0x32, 0x7e, 0x36, 0x1b, 0x44, 0xdf, 0x97, 0x12, 0xfd, 0x1b, 0x30, + 0xbf, 0x2f, 0x83, 0x3d, 0xd5, 0x12, 0xc9, 0x9c, 0xe7, 0xb3, 0x27, 0xd8, 0xd5, 0x3d, 0x93, 0x0e, + 0x51, 0xde, 0xd7, 0x31, 0x4c, 0x01, 0x97, 0x62, 0x47, 0x28, 0xec, 0xc4, 0x5d, 0xff, 0x95, 0xc1, + 0x62, 0x36, 0xc7, 0xb9, 0xec, 0x33, 0xff, 0x86, 0x7d, 0x72, 0x35, 0x58, 0xa7, 0xcb, 0x7b, 0xd3, + 0x77, 0xa3, 0xf8, 0xf4, 0x8b, 0x50, 0x16, 0xed, 0x76, 0xe0, 0x84, 0x21, 0xd5, 0x20, 0xfe, 0x6a, + 0x56, 0xa9, 0xab, 0x68, 0x35, 0x9d, 0x83, 0x43, 0x49, 0x4d, 0x1d, 0xd4, 0xce, 0x37, 0xf0, 0x73, + 0xb2, 0x69, 0x28, 0xed, 0xc4, 0x8d, 0x7d, 0x98, 0x68, 0x1a, 0x94, 0x60, 0x70, 0x9f, 0x89, 0x26, + 0xe7, 0x3e, 0x2b, 0x79, 0x7c, 0x9f, 0x95, 0x72, 0x72, 0x5e, 0x7e, 0x01, 0x06, 0x32, 0xdd, 0x72, + 0xc3, 0xe8, 0xbd, 0xbb, 0xbe, 0xd3, 0x4e, 0xf5, 0xcb, 0x5c, 0x57, 0x87, 0x4c, 0x99, 0xfe, 0xcf, + 0xa6, 0xfc, 0xc2, 0xe0, 0xf2, 0xb9, 0x00, 0x8f, 0x43, 0x3f, 0xdd, 0xfc, 0xee, 0x02, 0xcc, 0x22, + 0x1d, 0x7f, 0xc0, 0x60, 0x4e, 0xff, 0x98, 0xe0, 0xd7, 0xb2, 0x0c, 0xd9, 0xdf, 0x2c, 0xc6, 0xf2, + 0x08, 0x95, 0xce, 0x66, 0xae, 0x3d, 0xf8, 0xfd, 0xef, 0x9f, 0xa6, 0x97, 0xf9, 0x92, 0xfd, 0xa9, + 0x68, 0x7d, 0x26, 0xbc, 0x7a, 0x5b, 0x48, 0x5b, 0xef, 0xac, 0x0f, 0xff, 0x72, 0xe3, 0x5f, 0x33, + 0x98, 0xc5, 0xe3, 0x72, 0x33, 0x27, 0x7a, 0x62, 0xc8, 0x1a, 0x4b, 0x85, 0x1a, 0xca, 0xbf, 0x89, + 0xf9, 0xd7, 0xf9, 0x6a, 0x61, 0x7e, 0xb4, 0xd5, 0x3e, 0xc2, 0xd9, 0x71, 0xcc, 0xbf, 0x65, 0x30, + 0x8f, 0x18, 0xdb, 0x9e, 0xc7, 0x57, 0x72, 0xb2, 0x0c, 0x8d, 0x5e, 0xa3, 0x3a, 0x52, 0x47, 0x44, + 0xab, 0x48, 0x74, 0x8d, 0x9b, 0xa3, 0x89, 0xf8, 0x97, 0x0c, 0x4a, 0xaa, 0xd7, 0xf3, 0xab, 0x39, + 0xd1, 0x07, 0x83, 0xd0, 0x30, 0x8b, 0x24, 0x94, 0x7b, 0x03, 0x73, 0xaf, 0xf1, 0x5a, 0x61, 0x6e, + 0x35, 0x51, 0xfa, 0x66, 0x7c, 0xc5, 0xa0, 0xac, 0x10, 0x94, 0x17, 0xcb, 0xf9, 0x67, 0x4c, 0xcc, + 0x47, 0x63, 0x65, 0x94, 0x8c, 0x68, 0x6a, 0x48, 0xb3, 0xc4, 0xaf, 0x8e, 0xa4, 0xe1, 0xdf, 0x33, + 0x28, 0x53, 0xb3, 0xce, 0xa5, 0x48, 0x8f, 0xac, 0x5c, 0x8a, 0xa1, 0x71, 0x65, 0xbe, 0x82, 0x14, + 0x16, 0x5f, 0x2f, 0xa4, 0x88, 0xa7, 0x82, 0x7d, 0xa4, 0x2a, 0x73, 0xcc, 0x1f, 0x32, 0x00, 0x8a, + 0xa4, 0x9c, 0xa9, 0xe5, 0x1f, 0x79, 0x68, 0x8e, 0x19, 0xab, 0xe3, 0x48, 0x89, 0xad, 0x8e, 0x6c, + 0x55, 0xbe, 0x3c, 0x16, 0x9b, 0x7a, 0x3f, 0x25, 0xd5, 0x4a, 0x73, 0x9f, 0x4f, 0x62, 0xa2, 0xe4, + 0x3e, 0x9f, 0xe4, 0x1c, 0x31, 0xb7, 0x10, 0xa0, 0xce, 0xd7, 0x0a, 0x01, 0x54, 0xcb, 0xb6, 0x8f, + 0xa8, 0x75, 0x1e, 0xf3, 0x6f, 0x18, 0x94, 0x55, 0x94, 0x11, 0xcf, 0x27, 0x39, 0x84, 0x8a, 0x9e, + 0x4f, 0x6a, 0x96, 0x8c, 0x79, 0x69, 0x70, 0x88, 0xfc, 0xc6, 0xe0, 0xc9, 0x74, 0xdb, 0xe5, 0xeb, + 0x39, 0x69, 0xce, 0x1d, 0x0f, 0x46, 0x7d, 0x4c, 0x35, 0xa1, 0xbd, 0x89, 0x68, 0xaf, 0xf3, 0xd7, + 0x0a, 0xd1, 0x3c, 0x37, 0x8c, 0xf6, 0xa4, 0xda, 0xbd, 0x47, 0x6d, 0x27, 0x36, 0x6e, 0xe7, 0xc6, + 0xa3, 0xd3, 0x0a, 0x3b, 0x39, 0xad, 0xb0, 0xbf, 0x4e, 0x2b, 0xec, 0x87, 0xb3, 0xca, 0xd4, 0xc9, + 0x59, 0x65, 0xea, 0x8f, 0xb3, 0xca, 0xd4, 0x47, 0x56, 0xc7, 0x8d, 0x0e, 0x0e, 0x9b, 0x56, 0x4b, + 0x76, 0x29, 0xf8, 0x2d, 0xd1, 0x0c, 0xd3, 0xc1, 0xef, 0x61, 0xf8, 0xe8, 0x7e, 0xcf, 0x09, 0x9b, + 0x73, 0xf8, 0xef, 0xe6, 0xd6, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1e, 0xc0, 0xdd, 0x14, 0xb5, 0x0f, 0x00, 0x00, } @@ -1257,9 +1258,9 @@ type QueryClient interface { // Queries a list of Bids. BidsAll(ctx context.Context, in *QueryAllBidsRequest, opts ...grpc.CallOption) (*QueryAllBidsResponse, error) // Queries a Listing by index. - Forsale(ctx context.Context, in *QueryForsaleRequest, opts ...grpc.CallOption) (*QueryForsaleResponse, error) + ForSale(ctx context.Context, in *QueryForSaleRequest, opts ...grpc.CallOption) (*QueryForSaleResponse, error) // Queries all Listings. - ForsaleAll(ctx context.Context, in *QueryAllForsalesRequest, opts ...grpc.CallOption) (*QueryAllForsalesResponse, error) + ForSaleAll(ctx context.Context, in *QueryAllForSalesRequest, opts ...grpc.CallOption) (*QueryAllForSalesResponse, error) // Queries a Init by index. Init(ctx context.Context, in *QueryInitRequest, opts ...grpc.CallOption) (*QueryInitResponse, error) // Queries a list of Init items. @@ -1321,18 +1322,18 @@ func (c *queryClient) BidsAll(ctx context.Context, in *QueryAllBidsRequest, opts return out, nil } -func (c *queryClient) Forsale(ctx context.Context, in *QueryForsaleRequest, opts ...grpc.CallOption) (*QueryForsaleResponse, error) { - out := new(QueryForsaleResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/Forsale", in, out, opts...) +func (c *queryClient) ForSale(ctx context.Context, in *QueryForSaleRequest, opts ...grpc.CallOption) (*QueryForSaleResponse, error) { + out := new(QueryForSaleResponse) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/ForSale", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ForsaleAll(ctx context.Context, in *QueryAllForsalesRequest, opts ...grpc.CallOption) (*QueryAllForsalesResponse, error) { - out := new(QueryAllForsalesResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/ForsaleAll", in, out, opts...) +func (c *queryClient) ForSaleAll(ctx context.Context, in *QueryAllForSalesRequest, opts ...grpc.CallOption) (*QueryAllForSalesResponse, error) { + out := new(QueryAllForSalesResponse) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/ForSaleAll", in, out, opts...) if err != nil { return nil, err } @@ -1379,9 +1380,9 @@ type QueryServer interface { // Queries a list of Bids. BidsAll(context.Context, *QueryAllBidsRequest) (*QueryAllBidsResponse, error) // Queries a Listing by index. - Forsale(context.Context, *QueryForsaleRequest) (*QueryForsaleResponse, error) + ForSale(context.Context, *QueryForSaleRequest) (*QueryForSaleResponse, error) // Queries all Listings. - ForsaleAll(context.Context, *QueryAllForsalesRequest) (*QueryAllForsalesResponse, error) + ForSaleAll(context.Context, *QueryAllForSalesRequest) (*QueryAllForSalesResponse, error) // Queries a Init by index. Init(context.Context, *QueryInitRequest) (*QueryInitResponse, error) // Queries a list of Init items. @@ -1409,11 +1410,11 @@ func (*UnimplementedQueryServer) Bids(ctx context.Context, req *QueryBidRequest) func (*UnimplementedQueryServer) BidsAll(ctx context.Context, req *QueryAllBidsRequest) (*QueryAllBidsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method BidsAll not implemented") } -func (*UnimplementedQueryServer) Forsale(ctx context.Context, req *QueryForsaleRequest) (*QueryForsaleResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Forsale not implemented") +func (*UnimplementedQueryServer) ForSale(ctx context.Context, req *QueryForSaleRequest) (*QueryForSaleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ForSale not implemented") } -func (*UnimplementedQueryServer) ForsaleAll(ctx context.Context, req *QueryAllForsalesRequest) (*QueryAllForsalesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ForsaleAll not implemented") +func (*UnimplementedQueryServer) ForSaleAll(ctx context.Context, req *QueryAllForSalesRequest) (*QueryAllForSalesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ForSaleAll not implemented") } func (*UnimplementedQueryServer) Init(ctx context.Context, req *QueryInitRequest) (*QueryInitResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Init not implemented") @@ -1519,38 +1520,38 @@ func _Query_BidsAll_Handler(srv interface{}, ctx context.Context, dec func(inter return interceptor(ctx, in, info, handler) } -func _Query_Forsale_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryForsaleRequest) +func _Query_ForSale_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryForSaleRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Forsale(ctx, in) + return srv.(QueryServer).ForSale(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Query/Forsale", + FullMethod: "/canine_chain.rns.Query/ForSale", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Forsale(ctx, req.(*QueryForsaleRequest)) + return srv.(QueryServer).ForSale(ctx, req.(*QueryForSaleRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ForsaleAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllForsalesRequest) +func _Query_ForSaleAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllForSalesRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ForsaleAll(ctx, in) + return srv.(QueryServer).ForSaleAll(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Query/ForsaleAll", + FullMethod: "/canine_chain.rns.Query/ForSaleAll", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ForsaleAll(ctx, req.(*QueryAllForsalesRequest)) + return srv.(QueryServer).ForSaleAll(ctx, req.(*QueryAllForSalesRequest)) } return interceptor(ctx, in, info, handler) } @@ -1634,12 +1635,12 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_BidsAll_Handler, }, { - MethodName: "Forsale", - Handler: _Query_Forsale_Handler, + MethodName: "ForSale", + Handler: _Query_ForSale_Handler, }, { - MethodName: "ForsaleAll", - Handler: _Query_ForsaleAll_Handler, + MethodName: "ForSaleAll", + Handler: _Query_ForSaleAll_Handler, }, { MethodName: "Init", @@ -2155,7 +2156,7 @@ func (m *QueryAllBidsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryForsaleRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryForSaleRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2165,12 +2166,12 @@ func (m *QueryForsaleRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryForsaleRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryForSaleRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryForsaleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryForSaleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2185,7 +2186,7 @@ func (m *QueryForsaleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryForsaleResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryForSaleResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2195,18 +2196,18 @@ func (m *QueryForsaleResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryForsaleResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryForSaleResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryForsaleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryForSaleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Forsale.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ForSale.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2218,7 +2219,7 @@ func (m *QueryForsaleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllForsalesRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllForSalesRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2228,12 +2229,12 @@ func (m *QueryAllForsalesRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllForsalesRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllForSalesRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllForsalesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllForSalesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2253,7 +2254,7 @@ func (m *QueryAllForsalesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryAllForsalesResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllForSalesResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2263,12 +2264,12 @@ func (m *QueryAllForsalesResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllForsalesResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllForSalesResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllForsalesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllForSalesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2285,10 +2286,10 @@ func (m *QueryAllForsalesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error i-- dAtA[i] = 0x12 } - if len(m.Forsale) > 0 { - for iNdEx := len(m.Forsale) - 1; iNdEx >= 0; iNdEx-- { + if len(m.ForSale) > 0 { + for iNdEx := len(m.ForSale) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Forsale[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ForSale[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2739,7 +2740,7 @@ func (m *QueryAllBidsResponse) Size() (n int) { return n } -func (m *QueryForsaleRequest) Size() (n int) { +func (m *QueryForSaleRequest) Size() (n int) { if m == nil { return 0 } @@ -2752,18 +2753,18 @@ func (m *QueryForsaleRequest) Size() (n int) { return n } -func (m *QueryForsaleResponse) Size() (n int) { +func (m *QueryForSaleResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.Forsale.Size() + l = m.ForSale.Size() n += 1 + l + sovQuery(uint64(l)) return n } -func (m *QueryAllForsalesRequest) Size() (n int) { +func (m *QueryAllForSalesRequest) Size() (n int) { if m == nil { return 0 } @@ -2776,14 +2777,14 @@ func (m *QueryAllForsalesRequest) Size() (n int) { return n } -func (m *QueryAllForsalesResponse) Size() (n int) { +func (m *QueryAllForSalesResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Forsale) > 0 { - for _, e := range m.Forsale { + if len(m.ForSale) > 0 { + for _, e := range m.ForSale { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -4140,7 +4141,7 @@ func (m *QueryAllBidsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryForsaleRequest) Unmarshal(dAtA []byte) error { +func (m *QueryForSaleRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4163,10 +4164,10 @@ func (m *QueryForsaleRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryForsaleRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryForSaleRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryForsaleRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryForSaleRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4222,7 +4223,7 @@ func (m *QueryForsaleRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryForsaleResponse) Unmarshal(dAtA []byte) error { +func (m *QueryForSaleResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4245,15 +4246,15 @@ func (m *QueryForsaleResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryForsaleResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryForSaleResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryForsaleResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryForSaleResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Forsale", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ForSale", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4280,7 +4281,7 @@ func (m *QueryForsaleResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Forsale.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ForSale.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4305,7 +4306,7 @@ func (m *QueryForsaleResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllForsalesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllForSalesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4328,10 +4329,10 @@ func (m *QueryAllForsalesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllForsalesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllForSalesRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllForsalesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllForSalesRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4391,7 +4392,7 @@ func (m *QueryAllForsalesRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllForsalesResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllForSalesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4414,15 +4415,15 @@ func (m *QueryAllForsalesResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllForsalesResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllForSalesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllForsalesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllForSalesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Forsale", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ForSale", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -4449,8 +4450,8 @@ func (m *QueryAllForsalesResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Forsale = append(m.Forsale, Forsale{}) - if err := m.Forsale[len(m.Forsale)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ForSale = append(m.ForSale, Forsale{}) + if err := m.ForSale[len(m.ForSale)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/rns/types/query.pb.gw.go b/x/rns/types/query.pb.gw.go index ee05d90a1..e137d0402 100644 --- a/x/rns/types/query.pb.gw.go +++ b/x/rns/types/query.pb.gw.go @@ -231,8 +231,8 @@ func local_request_Query_BidsAll_0(ctx context.Context, marshaler runtime.Marsha } -func request_Query_Forsale_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryForsaleRequest +func request_Query_ForSale_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryForSaleRequest var metadata runtime.ServerMetadata var ( @@ -253,13 +253,13 @@ func request_Query_Forsale_0(ctx context.Context, marshaler runtime.Marshaler, c return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } - msg, err := client.Forsale(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ForSale(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Forsale_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryForsaleRequest +func local_request_Query_ForSale_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryForSaleRequest var metadata runtime.ServerMetadata var ( @@ -280,43 +280,43 @@ func local_request_Query_Forsale_0(ctx context.Context, marshaler runtime.Marsha return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } - msg, err := server.Forsale(ctx, &protoReq) + msg, err := server.ForSale(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_ForsaleAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_ForSaleAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_ForsaleAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllForsalesRequest +func request_Query_ForSaleAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllForSalesRequest 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_ForsaleAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ForSaleAll_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ForsaleAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ForSaleAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ForsaleAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllForsalesRequest +func local_request_Query_ForSaleAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllForSalesRequest 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_ForsaleAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ForSaleAll_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ForsaleAll(ctx, &protoReq) + msg, err := server.ForSaleAll(ctx, &protoReq) return msg, metadata, err } @@ -604,7 +604,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_Forsale_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ForSale_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -615,7 +615,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Forsale_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ForSale_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 { @@ -623,11 +623,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Forsale_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ForSale_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ForsaleAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ForSaleAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -638,7 +638,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ForsaleAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_ForSaleAll_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 { @@ -646,7 +646,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ForsaleAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ForSaleAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -860,7 +860,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_Forsale_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ForSale_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) @@ -869,18 +869,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Forsale_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ForSale_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_Forsale_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ForSale_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ForsaleAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_ForSaleAll_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) @@ -889,14 +889,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ForsaleAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_ForSaleAll_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_ForsaleAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_ForSaleAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -974,9 +974,9 @@ var ( pattern_Query_BidsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "rns", "bids"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Forsale_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "rns", "forsale", "name"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ForSale_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "rns", "for_sale", "name"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ForsaleAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "rns", "forsale"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ForSaleAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "rns", "for_sale"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_Init_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "rns", "init", "address"}, "", runtime.AssumeColonVerbOpt(false))) @@ -996,9 +996,9 @@ var ( forward_Query_BidsAll_0 = runtime.ForwardResponseMessage - forward_Query_Forsale_0 = runtime.ForwardResponseMessage + forward_Query_ForSale_0 = runtime.ForwardResponseMessage - forward_Query_ForsaleAll_0 = runtime.ForwardResponseMessage + forward_Query_ForSaleAll_0 = runtime.ForwardResponseMessage forward_Query_Init_0 = runtime.ForwardResponseMessage diff --git a/x/rns/types/tx.pb.go b/x/rns/types/tx.pb.go index f192a44c3..a57824a77 100644 --- a/x/rns/types/tx.pb.go +++ b/x/rns/types/tx.pb.go @@ -30,7 +30,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type MsgRegister struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Years string `protobuf:"bytes,3,opt,name=years,proto3" json:"years,omitempty"` + Years int64 `protobuf:"varint,3,opt,name=years,proto3" json:"years,omitempty"` Data string `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` } @@ -81,11 +81,11 @@ func (m *MsgRegister) GetName() string { return "" } -func (m *MsgRegister) GetYears() string { +func (m *MsgRegister) GetYears() int64 { if m != nil { return m.Years } - return "" + return 0 } func (m *MsgRegister) GetData() string { @@ -691,23 +691,23 @@ func (m *MsgBuyResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgBuyResponse proto.InternalMessageInfo -type MsgDelist struct { +type MsgDeList struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (m *MsgDelist) Reset() { *m = MsgDelist{} } -func (m *MsgDelist) String() string { return proto.CompactTextString(m) } -func (*MsgDelist) ProtoMessage() {} -func (*MsgDelist) Descriptor() ([]byte, []int) { +func (m *MsgDeList) Reset() { *m = MsgDeList{} } +func (m *MsgDeList) String() string { return proto.CompactTextString(m) } +func (*MsgDeList) ProtoMessage() {} +func (*MsgDeList) Descriptor() ([]byte, []int) { return fileDescriptor_26cd098678d4da9c, []int{14} } -func (m *MsgDelist) XXX_Unmarshal(b []byte) error { +func (m *MsgDeList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgDelist) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgDeList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgDelist.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgDeList.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -717,47 +717,47 @@ func (m *MsgDelist) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } -func (m *MsgDelist) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgDelist.Merge(m, src) +func (m *MsgDeList) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeList.Merge(m, src) } -func (m *MsgDelist) XXX_Size() int { +func (m *MsgDeList) XXX_Size() int { return m.Size() } -func (m *MsgDelist) XXX_DiscardUnknown() { - xxx_messageInfo_MsgDelist.DiscardUnknown(m) +func (m *MsgDeList) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeList.DiscardUnknown(m) } -var xxx_messageInfo_MsgDelist proto.InternalMessageInfo +var xxx_messageInfo_MsgDeList proto.InternalMessageInfo -func (m *MsgDelist) GetCreator() string { +func (m *MsgDeList) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *MsgDelist) GetName() string { +func (m *MsgDeList) GetName() string { if m != nil { return m.Name } return "" } -type MsgDelistResponse struct { +type MsgDeListResponse struct { } -func (m *MsgDelistResponse) Reset() { *m = MsgDelistResponse{} } -func (m *MsgDelistResponse) String() string { return proto.CompactTextString(m) } -func (*MsgDelistResponse) ProtoMessage() {} -func (*MsgDelistResponse) Descriptor() ([]byte, []int) { +func (m *MsgDeListResponse) Reset() { *m = MsgDeListResponse{} } +func (m *MsgDeListResponse) String() string { return proto.CompactTextString(m) } +func (*MsgDeListResponse) ProtoMessage() {} +func (*MsgDeListResponse) Descriptor() ([]byte, []int) { return fileDescriptor_26cd098678d4da9c, []int{15} } -func (m *MsgDelistResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgDeListResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgDelistResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgDeListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgDelistResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgDeListResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -767,17 +767,17 @@ func (m *MsgDelistResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, e return b[:n], nil } } -func (m *MsgDelistResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgDelistResponse.Merge(m, src) +func (m *MsgDeListResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeListResponse.Merge(m, src) } -func (m *MsgDelistResponse) XXX_Size() int { +func (m *MsgDeListResponse) XXX_Size() int { return m.Size() } -func (m *MsgDelistResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgDelistResponse.DiscardUnknown(m) +func (m *MsgDeListResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeListResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgDelistResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgDeListResponse proto.InternalMessageInfo type MsgTransfer struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` @@ -1170,8 +1170,8 @@ func init() { proto.RegisterType((*MsgListResponse)(nil), "canine_chain.rns.MsgListResponse") proto.RegisterType((*MsgBuy)(nil), "canine_chain.rns.MsgBuy") proto.RegisterType((*MsgBuyResponse)(nil), "canine_chain.rns.MsgBuyResponse") - proto.RegisterType((*MsgDelist)(nil), "canine_chain.rns.MsgDelist") - proto.RegisterType((*MsgDelistResponse)(nil), "canine_chain.rns.MsgDelistResponse") + proto.RegisterType((*MsgDeList)(nil), "canine_chain.rns.MsgDeList") + proto.RegisterType((*MsgDeListResponse)(nil), "canine_chain.rns.MsgDeListResponse") proto.RegisterType((*MsgTransfer)(nil), "canine_chain.rns.MsgTransfer") proto.RegisterType((*MsgTransferResponse)(nil), "canine_chain.rns.MsgTransferResponse") proto.RegisterType((*MsgAddRecord)(nil), "canine_chain.rns.MsgAddRecord") @@ -1185,48 +1185,48 @@ func init() { func init() { proto.RegisterFile("canine_chain/rns/tx.proto", fileDescriptor_26cd098678d4da9c) } var fileDescriptor_26cd098678d4da9c = []byte{ - // 651 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x6e, 0xd3, 0x4c, - 0x14, 0x4d, 0xbe, 0xa4, 0xf9, 0xb9, 0x1f, 0x82, 0xd4, 0x2d, 0x95, 0x6b, 0x84, 0x55, 0x5c, 0x81, - 0xd8, 0xe0, 0x48, 0x20, 0x21, 0x21, 0xb1, 0x69, 0xc8, 0xa2, 0xa0, 0x5a, 0x8a, 0x02, 0x08, 0x89, - 0x0d, 0x9a, 0xd8, 0x53, 0xd7, 0x90, 0xd8, 0xd6, 0x8c, 0x53, 0x35, 0x1b, 0x9e, 0x81, 0xb7, 0xe0, - 0x55, 0x58, 0x76, 0xc9, 0x12, 0x25, 0x2f, 0x82, 0xe6, 0x37, 0x6e, 0x6a, 0x47, 0x32, 0xbb, 0x19, - 0x9f, 0x3b, 0xe7, 0xd8, 0xf7, 0x9e, 0x63, 0x1b, 0x0e, 0x7d, 0x14, 0x47, 0x31, 0xfe, 0xe2, 0x5f, - 0xa0, 0x28, 0xee, 0x93, 0x98, 0xf6, 0xb3, 0x2b, 0x37, 0x25, 0x49, 0x96, 0x18, 0xbd, 0x3c, 0xe4, - 0x92, 0x98, 0x3a, 0x18, 0xfe, 0xf7, 0x68, 0x38, 0xc6, 0x61, 0x44, 0x33, 0x4c, 0x0c, 0x13, 0xda, - 0x3e, 0xc1, 0x28, 0x4b, 0x88, 0x59, 0x3f, 0xaa, 0x3f, 0xed, 0x8e, 0xd5, 0xd6, 0x30, 0xa0, 0x19, - 0xa3, 0x19, 0x36, 0xff, 0xe3, 0x97, 0xf9, 0xda, 0xd8, 0x87, 0x9d, 0x05, 0x46, 0x84, 0x9a, 0x0d, - 0x7e, 0x51, 0x6c, 0x58, 0x65, 0x80, 0x32, 0x64, 0x36, 0x45, 0x25, 0x5b, 0x3b, 0xf7, 0x61, 0x2f, - 0x27, 0x33, 0xc6, 0x34, 0x4d, 0x62, 0x8a, 0x1d, 0x0f, 0xba, 0x1e, 0x0d, 0x3f, 0xa6, 0x01, 0xca, - 0x70, 0x45, 0x6d, 0xa5, 0xd2, 0xc8, 0xa9, 0xec, 0xc1, 0xae, 0xa6, 0xd3, 0x1a, 0xa7, 0xd0, 0xf2, - 0x68, 0x38, 0x88, 0x82, 0x8a, 0x02, 0x3d, 0x68, 0x4c, 0xa2, 0x40, 0xf2, 0xb3, 0xa5, 0xd3, 0x83, - 0xbb, 0x82, 0x49, 0x73, 0x8f, 0xe0, 0x8e, 0x47, 0xc3, 0x13, 0xdf, 0xc7, 0x69, 0x56, 0x5d, 0xc1, - 0x80, 0xe6, 0x39, 0x49, 0x66, 0xea, 0x11, 0xd8, 0xda, 0x39, 0x80, 0xfd, 0x3c, 0xa3, 0x56, 0x7a, - 0xcd, 0x95, 0xde, 0xa0, 0xd8, 0xc7, 0xd3, 0xca, 0x4a, 0x92, 0x55, 0x9f, 0xce, 0xf5, 0xbf, 0xed, - 0xd1, 0xf0, 0x2c, 0xa2, 0x59, 0xf5, 0xc9, 0xa7, 0x24, 0xf2, 0xb1, 0x9a, 0x3c, 0xdf, 0x38, 0xbb, - 0x70, 0x4f, 0xd2, 0x69, 0x85, 0x97, 0xa2, 0xfb, 0xf3, 0x45, 0xc5, 0x3b, 0x96, 0xbd, 0x9e, 0x2f, - 0x34, 0xd3, 0x2b, 0xee, 0x95, 0x21, 0x9e, 0x56, 0xbe, 0x5b, 0xe9, 0x0b, 0x71, 0x54, 0xf3, 0x7d, - 0xe2, 0xce, 0xff, 0x40, 0x50, 0x4c, 0xcf, 0x2b, 0x3b, 0xdf, 0x82, 0x0e, 0xc1, 0x3e, 0x8e, 0x2e, - 0x31, 0x91, 0x2d, 0xd0, 0x7b, 0xe9, 0x75, 0x45, 0xac, 0xf5, 0xbe, 0x0b, 0xaf, 0x04, 0xc1, 0x18, - 0xfb, 0x09, 0x09, 0xaa, 0x37, 0xfc, 0x12, 0x4d, 0xe7, 0xba, 0xe1, 0x7c, 0x53, 0x14, 0x35, 0xe3, - 0x00, 0x5a, 0x84, 0x2b, 0x98, 0x3b, 0xfc, 0xaa, 0xdc, 0x29, 0x67, 0x29, 0xfd, 0x0d, 0x67, 0x0d, - 0xf1, 0xf4, 0x5f, 0xee, 0x4b, 0xb2, 0xea, 0xd3, 0x9a, 0xf5, 0x98, 0x3b, 0xeb, 0x6d, 0x1c, 0x6d, - 0x99, 0x95, 0xf4, 0x0b, 0x2b, 0x52, 0xe7, 0x9e, 0xff, 0x6c, 0x43, 0xc3, 0xa3, 0xa1, 0x31, 0x82, - 0x8e, 0x7e, 0x29, 0x3d, 0x74, 0x37, 0x5f, 0x5b, 0x6e, 0xee, 0x65, 0x62, 0x3d, 0xde, 0x0a, 0x2b, - 0x66, 0xe3, 0x04, 0x1a, 0x3c, 0x38, 0x85, 0xd5, 0x83, 0x28, 0xb0, 0x8e, 0xca, 0x10, 0x4d, 0xf1, - 0x1e, 0xba, 0xeb, 0xac, 0xdb, 0x85, 0xe5, 0x1a, 0xb7, 0x9e, 0x6c, 0xc7, 0xf3, 0xa4, 0xeb, 0x58, - 0x17, 0x93, 0x6a, 0xbc, 0x84, 0xf4, 0x56, 0xb0, 0x8d, 0x21, 0x34, 0x79, 0xaa, 0x0f, 0x0b, 0xeb, - 0x19, 0x64, 0x3d, 0x2a, 0x85, 0x6e, 0xb4, 0x8c, 0x25, 0xb7, 0xb8, 0x31, 0xf3, 0x45, 0x59, 0xcb, - 0xd6, 0xa9, 0x35, 0xde, 0x41, 0x4b, 0x46, 0xf6, 0x41, 0x61, 0xad, 0x00, 0xad, 0xe3, 0x2d, 0xa0, - 0xe6, 0x1a, 0x41, 0x47, 0xc7, 0xb5, 0xd8, 0x13, 0x0a, 0x2e, 0xf1, 0xc4, 0x66, 0x26, 0xf9, 0x40, - 0x75, 0x20, 0x4b, 0x06, 0xaa, 0xf0, 0xb2, 0x81, 0x6e, 0x06, 0x8a, 0x91, 0xae, 0xd3, 0x64, 0x97, - 0x3d, 0xd8, 0x56, 0xd2, 0x5b, 0x79, 0x62, 0x03, 0xe5, 0x61, 0x2a, 0x1e, 0x28, 0x83, 0x4a, 0x06, - 0x9a, 0x4f, 0x17, 0x9b, 0x86, 0xfc, 0xd8, 0x16, 0x4f, 0x43, 0x80, 0x25, 0xd3, 0xb8, 0xf9, 0x5d, - 0x1d, 0x9c, 0xfe, 0x5a, 0xda, 0xf5, 0xeb, 0xa5, 0x5d, 0xff, 0xb3, 0xb4, 0xeb, 0x3f, 0x56, 0x76, - 0xed, 0x7a, 0x65, 0xd7, 0x7e, 0xaf, 0xec, 0xda, 0x67, 0x37, 0x8c, 0xb2, 0x8b, 0xf9, 0xc4, 0xf5, - 0x93, 0x59, 0xff, 0x2b, 0xf2, 0xbf, 0xa1, 0xe9, 0x19, 0x9a, 0xd0, 0xbe, 0xe0, 0x7c, 0x26, 0x7e, - 0x4b, 0xae, 0xc4, 0x8f, 0xc9, 0x22, 0xc5, 0x74, 0xd2, 0xe2, 0x3f, 0x27, 0x2f, 0xfe, 0x06, 0x00, - 0x00, 0xff, 0xff, 0x36, 0xde, 0xb5, 0xa9, 0xb9, 0x08, 0x00, 0x00, + // 654 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xae, 0x71, 0x9a, 0x26, 0x03, 0x82, 0xd4, 0x2d, 0x95, 0x6b, 0x84, 0x15, 0x5c, 0x81, 0x7a, + 0xc1, 0x91, 0x40, 0x42, 0x42, 0xe2, 0xd2, 0x90, 0x43, 0x41, 0xb5, 0x14, 0x05, 0x10, 0x12, 0x17, + 0xb4, 0xb1, 0xb7, 0xae, 0x21, 0xb1, 0xad, 0x5d, 0xa7, 0x6a, 0x2e, 0x3c, 0x03, 0x6f, 0xc1, 0xab, + 0x70, 0xec, 0x91, 0x23, 0x4a, 0x5e, 0x04, 0xed, 0x8f, 0x37, 0x6e, 0x6a, 0x47, 0x32, 0xb7, 0x1d, + 0x7f, 0xb3, 0xdf, 0xb7, 0x9e, 0x99, 0xcf, 0x5e, 0x38, 0xf4, 0x51, 0x1c, 0xc5, 0xf8, 0xab, 0x7f, + 0x81, 0xa2, 0xb8, 0x47, 0x62, 0xda, 0xcb, 0xae, 0xdc, 0x94, 0x24, 0x59, 0x62, 0x74, 0x8a, 0x90, + 0x4b, 0x62, 0xea, 0x60, 0xb8, 0xeb, 0xd1, 0x70, 0x84, 0xc3, 0x88, 0x66, 0x98, 0x18, 0x26, 0xec, + 0xf8, 0x04, 0xa3, 0x2c, 0x21, 0xa6, 0xd6, 0xd5, 0x8e, 0xdb, 0xa3, 0x3c, 0x34, 0x0c, 0x68, 0xc4, + 0x68, 0x8a, 0xcd, 0x3b, 0xfc, 0x31, 0x5f, 0x1b, 0xfb, 0xb0, 0x3d, 0xc7, 0x88, 0x50, 0x53, 0xef, + 0x6a, 0xc7, 0xfa, 0x48, 0x04, 0x2c, 0x33, 0x40, 0x19, 0x32, 0x1b, 0x22, 0x93, 0xad, 0x9d, 0x87, + 0xb0, 0x57, 0x90, 0x19, 0x61, 0x9a, 0x26, 0x31, 0xc5, 0x8e, 0x07, 0x6d, 0x8f, 0x86, 0x9f, 0xd2, + 0x00, 0x65, 0xb8, 0xa6, 0x76, 0xae, 0xa2, 0x17, 0x54, 0xf6, 0x60, 0x57, 0xd1, 0x29, 0x8d, 0x53, + 0x68, 0x7a, 0x34, 0xec, 0x47, 0x41, 0x4d, 0x81, 0x0e, 0xe8, 0xe3, 0x28, 0x90, 0xfc, 0x6c, 0xe9, + 0x74, 0xe0, 0xbe, 0x60, 0x52, 0xdc, 0x43, 0xb8, 0xe7, 0xd1, 0xf0, 0xc4, 0xf7, 0x71, 0x9a, 0xd5, + 0x57, 0x30, 0xa0, 0x71, 0x4e, 0x92, 0x69, 0xfe, 0x0a, 0x6c, 0xed, 0x1c, 0xc0, 0x7e, 0x91, 0x51, + 0x29, 0xbd, 0xe1, 0x4a, 0x6f, 0x51, 0xec, 0xe3, 0x49, 0x6d, 0x25, 0xc9, 0xaa, 0x76, 0x17, 0xea, + 0xbf, 0xe3, 0xd1, 0xf0, 0x2c, 0xa2, 0x59, 0xfd, 0xce, 0xa7, 0x24, 0xf2, 0xb1, 0x3c, 0xbb, 0x08, + 0x9c, 0x5d, 0x78, 0x20, 0xe9, 0x94, 0xc2, 0x2b, 0x51, 0xfd, 0xd9, 0xbc, 0xe6, 0x89, 0x65, 0xad, + 0x67, 0x73, 0xc5, 0xf4, 0x9a, 0xcf, 0xca, 0x00, 0xd7, 0x3f, 0xad, 0x9c, 0x0b, 0xb1, 0x55, 0xf1, + 0x7d, 0xe6, 0x93, 0xff, 0x91, 0xa0, 0x98, 0x9e, 0xd7, 0x9e, 0x7c, 0x0b, 0x5a, 0x04, 0xfb, 0x38, + 0xba, 0xc4, 0x44, 0x96, 0x40, 0xc5, 0x72, 0xd6, 0x73, 0x62, 0xa5, 0xf7, 0x43, 0xcc, 0x4a, 0x10, + 0x8c, 0xb0, 0x9f, 0x90, 0xa0, 0x7e, 0xc1, 0x2f, 0xd1, 0x64, 0xa6, 0x0a, 0xce, 0x83, 0x32, 0xab, + 0x19, 0x07, 0xd0, 0x24, 0x5c, 0xc1, 0xdc, 0xe6, 0x4f, 0x65, 0x94, 0x4f, 0x56, 0xae, 0xbf, 0x36, + 0x59, 0x03, 0x3c, 0xf9, 0x9f, 0x73, 0x49, 0x56, 0xb5, 0x5b, 0xb1, 0x1e, 0xf1, 0xc9, 0x7a, 0x17, + 0x47, 0x1b, 0x7a, 0x25, 0xe7, 0x85, 0x25, 0xe5, 0xfb, 0x5e, 0xfc, 0xda, 0x01, 0xdd, 0xa3, 0xa1, + 0x31, 0x84, 0x96, 0xfa, 0x28, 0x3d, 0x76, 0xd7, 0x3f, 0x5b, 0x6e, 0xe1, 0x63, 0x62, 0x3d, 0xdd, + 0x08, 0xe7, 0xcc, 0xc6, 0x09, 0xe8, 0xdc, 0x38, 0xa5, 0xd9, 0xfd, 0x28, 0xb0, 0xba, 0x55, 0x88, + 0xa2, 0xf8, 0x00, 0xed, 0x95, 0xd7, 0xed, 0xd2, 0x74, 0x85, 0x5b, 0xcf, 0x36, 0xe3, 0x45, 0xd2, + 0x95, 0xad, 0xcb, 0x49, 0x15, 0x5e, 0x41, 0x7a, 0xcb, 0xd8, 0xc6, 0x00, 0x1a, 0xdc, 0x27, 0x87, + 0xa5, 0xf9, 0x0c, 0xb2, 0x9e, 0x54, 0x42, 0x37, 0x4a, 0xc6, 0x9c, 0x5b, 0x5e, 0x98, 0xd9, 0xbc, + 0xaa, 0x64, 0x2b, 0xd7, 0x1a, 0xef, 0xa1, 0x29, 0x2d, 0xfb, 0xa8, 0x34, 0x57, 0x80, 0xd6, 0xd1, + 0x06, 0x50, 0x71, 0x0d, 0xa1, 0xa5, 0xec, 0x5a, 0x3e, 0x13, 0x39, 0x5c, 0x31, 0x13, 0xeb, 0x9e, + 0xe4, 0x0d, 0x55, 0x86, 0xac, 0x68, 0x68, 0x8e, 0x57, 0x35, 0x74, 0xdd, 0x50, 0x8c, 0x74, 0xe5, + 0x26, 0xbb, 0xe2, 0xc5, 0x26, 0x1b, 0x49, 0x6f, 0xf9, 0x89, 0x35, 0x94, 0x9b, 0xa9, 0xbc, 0xa1, + 0x0c, 0xaa, 0x68, 0x68, 0xd1, 0x5d, 0xac, 0x1b, 0xf2, 0x67, 0x5b, 0xde, 0x0d, 0x01, 0x56, 0x74, + 0xe3, 0xe6, 0x7f, 0xb5, 0x7f, 0xfa, 0x7b, 0x61, 0x6b, 0xd7, 0x0b, 0x5b, 0xfb, 0xbb, 0xb0, 0xb5, + 0x9f, 0x4b, 0x7b, 0xeb, 0x7a, 0x69, 0x6f, 0xfd, 0x59, 0xda, 0x5b, 0x5f, 0xdc, 0x30, 0xca, 0x2e, + 0x66, 0x63, 0xd7, 0x4f, 0xa6, 0xbd, 0x6f, 0xc8, 0xff, 0x8e, 0x26, 0x67, 0x68, 0x4c, 0x7b, 0x82, + 0xf3, 0xb9, 0xb8, 0x96, 0x5c, 0x89, 0x8b, 0xc9, 0x3c, 0xc5, 0x74, 0xdc, 0xe4, 0x97, 0x93, 0x97, + 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x24, 0x39, 0xa3, 0x5a, 0xb9, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1247,7 +1247,7 @@ type MsgClient interface { CancelBid(ctx context.Context, in *MsgCancelBid, opts ...grpc.CallOption) (*MsgCancelBidResponse, error) List(ctx context.Context, in *MsgList, opts ...grpc.CallOption) (*MsgListResponse, error) Buy(ctx context.Context, in *MsgBuy, opts ...grpc.CallOption) (*MsgBuyResponse, error) - Delist(ctx context.Context, in *MsgDelist, opts ...grpc.CallOption) (*MsgDelistResponse, error) + DeList(ctx context.Context, in *MsgDeList, opts ...grpc.CallOption) (*MsgDeListResponse, error) Transfer(ctx context.Context, in *MsgTransfer, opts ...grpc.CallOption) (*MsgTransferResponse, error) AddRecord(ctx context.Context, in *MsgAddRecord, opts ...grpc.CallOption) (*MsgAddRecordResponse, error) DelRecord(ctx context.Context, in *MsgDelRecord, opts ...grpc.CallOption) (*MsgDelRecordResponse, error) @@ -1317,9 +1317,9 @@ func (c *msgClient) Buy(ctx context.Context, in *MsgBuy, opts ...grpc.CallOption return out, nil } -func (c *msgClient) Delist(ctx context.Context, in *MsgDelist, opts ...grpc.CallOption) (*MsgDelistResponse, error) { - out := new(MsgDelistResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Msg/Delist", in, out, opts...) +func (c *msgClient) DeList(ctx context.Context, in *MsgDeList, opts ...grpc.CallOption) (*MsgDeListResponse, error) { + out := new(MsgDeListResponse) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Msg/DeList", in, out, opts...) if err != nil { return nil, err } @@ -1379,7 +1379,7 @@ type MsgServer interface { CancelBid(context.Context, *MsgCancelBid) (*MsgCancelBidResponse, error) List(context.Context, *MsgList) (*MsgListResponse, error) Buy(context.Context, *MsgBuy) (*MsgBuyResponse, error) - Delist(context.Context, *MsgDelist) (*MsgDelistResponse, error) + DeList(context.Context, *MsgDeList) (*MsgDeListResponse, error) Transfer(context.Context, *MsgTransfer) (*MsgTransferResponse, error) AddRecord(context.Context, *MsgAddRecord) (*MsgAddRecordResponse, error) DelRecord(context.Context, *MsgDelRecord) (*MsgDelRecordResponse, error) @@ -1409,8 +1409,8 @@ func (*UnimplementedMsgServer) List(ctx context.Context, req *MsgList) (*MsgList func (*UnimplementedMsgServer) Buy(ctx context.Context, req *MsgBuy) (*MsgBuyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Buy not implemented") } -func (*UnimplementedMsgServer) Delist(ctx context.Context, req *MsgDelist) (*MsgDelistResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delist not implemented") +func (*UnimplementedMsgServer) DeList(ctx context.Context, req *MsgDeList) (*MsgDeListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeList not implemented") } func (*UnimplementedMsgServer) Transfer(ctx context.Context, req *MsgTransfer) (*MsgTransferResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Transfer not implemented") @@ -1540,20 +1540,20 @@ func _Msg_Buy_Handler(srv interface{}, ctx context.Context, dec func(interface{} return interceptor(ctx, in, info, handler) } -func _Msg_Delist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgDelist) +func _Msg_DeList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDeList) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MsgServer).Delist(ctx, in) + return srv.(MsgServer).DeList(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Msg/Delist", + FullMethod: "/canine_chain.rns.Msg/DeList", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).Delist(ctx, req.(*MsgDelist)) + return srv.(MsgServer).DeList(ctx, req.(*MsgDeList)) } return interceptor(ctx, in, info, handler) } @@ -1677,8 +1677,8 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ Handler: _Msg_Buy_Handler, }, { - MethodName: "Delist", - Handler: _Msg_Delist_Handler, + MethodName: "DeList", + Handler: _Msg_DeList_Handler, }, { MethodName: "Transfer", @@ -1732,12 +1732,10 @@ func (m *MsgRegister) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x22 } - if len(m.Years) > 0 { - i -= len(m.Years) - copy(dAtA[i:], m.Years) - i = encodeVarintTx(dAtA, i, uint64(len(m.Years))) + if m.Years != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Years)) i-- - dAtA[i] = 0x1a + dAtA[i] = 0x18 } if len(m.Name) > 0 { i -= len(m.Name) @@ -2167,7 +2165,7 @@ func (m *MsgBuyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgDelist) Marshal() (dAtA []byte, err error) { +func (m *MsgDeList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2177,12 +2175,12 @@ func (m *MsgDelist) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgDelist) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgDeList) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgDelist) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgDeList) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2204,7 +2202,7 @@ func (m *MsgDelist) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgDelistResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgDeListResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2214,12 +2212,12 @@ func (m *MsgDelistResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgDelistResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgDeListResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgDelistResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgDeListResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2513,9 +2511,8 @@ func (m *MsgRegister) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Years) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if m.Years != 0 { + n += 1 + sovTx(uint64(m.Years)) } l = len(m.Data) if l > 0 { @@ -2705,7 +2702,7 @@ func (m *MsgBuyResponse) Size() (n int) { return n } -func (m *MsgDelist) Size() (n int) { +func (m *MsgDeList) Size() (n int) { if m == nil { return 0 } @@ -2722,7 +2719,7 @@ func (m *MsgDelist) Size() (n int) { return n } -func (m *MsgDelistResponse) Size() (n int) { +func (m *MsgDeListResponse) Size() (n int) { if m == nil { return 0 } @@ -2947,10 +2944,10 @@ func (m *MsgRegister) Unmarshal(dAtA []byte) error { m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: - if wireType != 2 { + if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Years", wireType) } - var stringLen uint64 + m.Years = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -2960,24 +2957,11 @@ func (m *MsgRegister) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.Years |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Years = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) @@ -4193,7 +4177,7 @@ func (m *MsgBuyResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgDelist) Unmarshal(dAtA []byte) error { +func (m *MsgDeList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4216,10 +4200,10 @@ func (m *MsgDelist) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgDelist: wiretype end group for non-group") + return fmt.Errorf("proto: MsgDeList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgDelist: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgDeList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4307,7 +4291,7 @@ func (m *MsgDelist) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgDelistResponse) Unmarshal(dAtA []byte) error { +func (m *MsgDeListResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4330,10 +4314,10 @@ func (m *MsgDelistResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgDelistResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgDeListResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgDelistResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgDeListResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: From 5a4dca1db026f9f6ac0c7294f0af966d340bd8bc Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 8 Nov 2023 16:12:54 -0500 Subject: [PATCH 057/256] fixing language used in protos --- proto/canine_chain/filetree/query.proto | 18 +- proto/canine_chain/oracle/query.proto | 6 +- proto/canine_chain/rns/query.proto | 53 +- proto/canine_chain/storage/query.proto | 70 +- x/filetree/client/cli/query_files.go | 6 +- x/filetree/client/cli/query_get_keys.go | 6 +- x/filetree/client/cli/query_pubkey.go | 2 +- x/filetree/client/cli/tx_add_editors.go | 8 +- x/filetree/client/cli/tx_add_viewers.go | 8 +- x/filetree/client/cli/tx_remove_editors.go | 4 +- x/filetree/client/cli/tx_remove_viewers.go | 4 +- x/filetree/keeper/grpc_query_files.go | 6 +- x/filetree/keeper/grpc_query_pubkey.go | 2 +- .../keeper/msg_server_add_editors_test.go | 4 +- .../keeper/msg_server_add_viewers_test.go | 6 +- .../keeper/msg_server_change_owner_test.go | 12 +- .../keeper/msg_server_delete_file_test.go | 6 +- .../keeper/msg_server_remove_editors_test.go | 16 +- .../keeper/msg_server_remove_viewers_test.go | 16 +- .../keeper/msg_server_reset_editors_test.go | 20 +- .../keeper/msg_server_reset_viewers_test.go | 20 +- x/filetree/types/query.pb.go | 170 +-- x/filetree/types/query.pb.gw.go | 88 +- x/oracle/types/query.pb.go | 64 +- x/oracle/types/query.pb.gw.go | 6 +- x/rns/client/cli/query_bids.go | 4 +- x/rns/client/cli/query_forsale.go | 4 +- x/rns/client/cli/query_init.go | 2 +- x/rns/client/cli/query_names.go | 4 +- x/rns/keeper/bidding_test.go | 10 +- x/rns/keeper/grpc_query_bids.go | 4 +- x/rns/keeper/grpc_query_forsale.go | 4 +- x/rns/keeper/grpc_query_init.go | 2 +- x/rns/keeper/grpc_query_names.go | 10 +- x/rns/keeper/grpc_query_whois.go | 56 - x/rns/keeper/keeper_test.go | 16 +- x/rns/keeper/register_test.go | 4 +- x/rns/keeper/transfer_test.go | 10 +- x/rns/simulation/cancel_bid.go | 2 +- x/rns/types/query.pb.go | 1333 ++++------------- x/rns/types/query.pb.gw.go | 180 +-- x/storage/client/cli/query_active_deals.go | 2 +- x/storage/client/cli/query_attest.go | 8 +- x/storage/client/cli/query_freespace.go | 2 +- x/storage/client/cli/query_miners.go | 4 +- x/storage/client/cli/query_payment_info.go | 2 +- x/storage/client/cli/tx_post_file.go | 2 +- x/storage/keeper/grpc_query_active_deals.go | 4 +- x/storage/keeper/grpc_query_attestation.go | 2 +- x/storage/keeper/grpc_query_freespace.go | 2 +- x/storage/keeper/grpc_query_payment_info.go | 2 +- x/storage/keeper/grpc_query_providers.go | 6 +- x/storage/keeper/grpc_query_report.go | 6 +- x/storage/keeper/msg_server_report.go | 4 +- x/storage/keeper/providers_test.go | 24 +- x/storage/keeper/report_test.go | 4 +- x/storage/types/query.pb.go | 564 +++---- x/storage/types/query.pb.gw.go | 254 ++-- 58 files changed, 1161 insertions(+), 1997 deletions(-) delete mode 100644 x/rns/keeper/grpc_query_whois.go diff --git a/proto/canine_chain/filetree/query.proto b/proto/canine_chain/filetree/query.proto index 6385ec491..297b8bf5e 100644 --- a/proto/canine_chain/filetree/query.proto +++ b/proto/canine_chain/filetree/query.proto @@ -14,29 +14,29 @@ option go_package = "github.com/jackalLabs/canine-chain/x/filetree/types"; service Query { // Parameters queries the parameters of the module. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/jackaldao/canine/filetree/params"; + option (google.api.http).get = "/jackal/canine/filetree/params"; } // Queries a Files by index. - rpc Files(QueryFileRequest) returns (QueryFileResponse) { + rpc File(QueryFileRequest) returns (QueryFileResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/filetree/files/{address}/{owner_address}"; + "/jackal/canine-chain/filetree/files/{address}/{owner_address}"; } // Queries a list of Files items. - rpc FilesAll(QueryAllFilesRequest) returns (QueryAllFilesResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/filetree/files"; + rpc AllFiles(QueryAllFilesRequest) returns (QueryAllFilesResponse) { + option (google.api.http).get = "/jackal/canine-chain/filetree/files"; } // Queries a Pubkey by index. rpc PubKey(QueryPubKeyRequest) returns (QueryPubKeyResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/filetree/pubkeys/{address}"; + "/jackal/canine-chain/filetree/pubkeys/{address}"; } // Queries a list of Pubkey items. - rpc PubKeyAll(QueryAllPubKeysRequest) returns (QueryAllPubKeysResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/filetree/pubkeys"; + rpc AllPubKeys(QueryAllPubKeysRequest) returns (QueryAllPubKeysResponse) { + option (google.api.http).get = "/jackal/canine-chain/filetree/pubkeys"; } } @@ -54,7 +54,7 @@ message QueryFileRequest { string owner_address = 2; } -message QueryFileResponse { Files files = 1 [ (gogoproto.nullable) = false ]; } +message QueryFileResponse { Files file = 1 [ (gogoproto.nullable) = false ]; } message QueryAllFilesRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; diff --git a/proto/canine_chain/oracle/query.proto b/proto/canine_chain/oracle/query.proto index d9cf06953..055cda712 100644 --- a/proto/canine_chain/oracle/query.proto +++ b/proto/canine_chain/oracle/query.proto @@ -13,15 +13,15 @@ option go_package = "github.com/jackalLabs/canine-chain/x/oracle/types"; service Query { // Parameters queries the parameters of the module. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/oracle/params"; + option (google.api.http).get = "/jackal/canine-chain/oracle/params"; } rpc Feed(QueryFeedRequest) returns (QueryFeedResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/oracle/feeds/{name}"; + option (google.api.http).get = "/jackal/canine-chain/oracle/feeds/{name}"; } rpc AllFeeds(QueryAllFeedsRequest) returns (QueryAllFeedsResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/oracle/feeds"; + option (google.api.http).get = "/jackal/canine-chain/oracle/feeds"; } } diff --git a/proto/canine_chain/rns/query.proto b/proto/canine_chain/rns/query.proto index f2a0238a9..fc2562ddb 100644 --- a/proto/canine_chain/rns/query.proto +++ b/proto/canine_chain/rns/query.proto @@ -17,56 +17,56 @@ option go_package = "github.com/jackalLabs/canine-chain/x/rns/types"; service Query { // Parameters queries the parameters of the module. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/rns/params"; + option (google.api.http).get = "/jackal/canine-chain/rns/params"; } // Queries a Name by index. - rpc Names(QueryNameRequest) returns (QueryNameResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/rns/names/{index}"; + rpc Name(QueryNameRequest) returns (QueryNameResponse) { + option (google.api.http).get = "/jackal/canine-chain/rns/names/{index}"; } // Queries a list of Names. - rpc NamesAll(QueryAllNamesRequest) returns (QueryAllNamesResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/rns/names"; + rpc AllNames(QueryAllNamesRequest) returns (QueryAllNamesResponse) { + option (google.api.http).get = "/jackal/canine-chain/rns/names"; } // Queries a Bid by index. - rpc Bids(QueryBidRequest) returns (QueryBidResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/rns/bids/{index}"; + rpc Bid(QueryBidRequest) returns (QueryBidResponse) { + option (google.api.http).get = "/jackal/canine-chain/rns/bids/{index}"; } // Queries a list of Bids. - rpc BidsAll(QueryAllBidsRequest) returns (QueryAllBidsResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/rns/bids"; + rpc AllBids(QueryAllBidsRequest) returns (QueryAllBidsResponse) { + option (google.api.http).get = "/jackal/canine-chain/rns/bids"; } // Queries a Listing by index. rpc ForSale(QueryForSaleRequest) returns (QueryForSaleResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/rns/for_sale/{name}"; + "/jackal/canine-chain/rns/for_sale/{name}"; } // Queries all Listings. - rpc ForSaleAll(QueryAllForSalesRequest) returns (QueryAllForSalesResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/rns/for_sale"; + rpc AllForSale(QueryAllForSaleRequest) returns (QueryAllForSaleResponse) { + option (google.api.http).get = "/jackal/canine-chain/rns/for_sale"; } // Queries a Init by index. rpc Init(QueryInitRequest) returns (QueryInitResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/rns/init/{address}"; + "/jackal/canine-chain/rns/init/{address}"; } // Queries a list of Init items. - rpc InitAll(QueryAllInitsRequest) returns (QueryAllInitsResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/rns/init"; + rpc AllInits(QueryAllInitsRequest) returns (QueryAllInitsResponse) { + option (google.api.http).get = "/jackal/canine-chain/rns/init"; } // Queries a list of ListOwnedNames items. rpc ListOwnedNames(QueryListOwnedNamesRequest) returns (QueryListOwnedNamesResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/rns/list_owned_names/{address}"; + "/jackal/canine-chain/rns/list_owned_names/{address}"; } } @@ -79,29 +79,16 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } -message QueryWhoisRequest { string index = 1; } - -message QueryWhoisResponse { Whois whois = 1 [ (gogoproto.nullable) = false ]; } - -message QueryAllWhoisRequest { - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -message QueryAllWhoisResponse { - repeated Whois whois = 1 [ (gogoproto.nullable) = false ]; - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - message QueryNameRequest { string index = 1; } -message QueryNameResponse { Names names = 1 [ (gogoproto.nullable) = false ]; } +message QueryNameResponse { Names name = 1 [ (gogoproto.nullable) = false ]; } message QueryAllNamesRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; } message QueryAllNamesResponse { - repeated Names names = 1 [ (gogoproto.nullable) = false ]; + repeated Names name = 1 [ (gogoproto.nullable) = false ]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } @@ -124,11 +111,11 @@ message QueryForSaleResponse { Forsale for_sale = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllForSalesRequest { +message QueryAllForSaleRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; } -message QueryAllForSalesResponse { +message QueryAllForSaleResponse { repeated Forsale for_sale = 1 [ (gogoproto.nullable) = false ]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index 403cce8e1..5da79a298 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -17,139 +17,139 @@ option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; service Query { // Parameters queries the parameters of the module. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/storage/params"; + option (google.api.http).get = "/jackal/canine-chain/storage/params"; } // Queries a File by index. rpc File(QueryFileRequest) returns (QueryFileResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/files/{merkle}/{owner}/{start}"; + "/jackal/canine-chain/storage/files/{merkle}/{owner}/{start}"; } // Queries a list of File items. - rpc FilesAll(QueryAllFilesRequest) + rpc AllFiles(QueryAllFilesRequest) returns (QueryAllFilesResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/files"; + "/jackal/canine-chain/storage/files"; } // Queries a list of File items. rpc OpenFiles(QueryOpenFilesRequest) returns (QueryAllFilesResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/open_files/{provider_address}"; + "/jackal/canine-chain/storage/open_files/{provider_address}"; } // Queries a list of File items. rpc Proof(QueryProofRequest) returns (QueryProofResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/proof/{provider_address}/{merkle}/{owner}/{start}"; + "/jackal/canine-chain/storage/proof/{provider_address}/{merkle}/{owner}/{start}"; } // Queries a Providers by index. - rpc Providers(QueryProviderRequest) returns (QueryProviderResponse) { + rpc Provider(QueryProviderRequest) returns (QueryProviderResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/providers/{address}"; + "/jackal/canine-chain/storage/providers/{address}"; } // Queries a list of Providers items. - rpc ProvidersAll(QueryAllProvidersRequest) + rpc AllProviders(QueryAllProvidersRequest) returns (QueryAllProvidersResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/storage/providers"; + option (google.api.http).get = "/jackal/canine-chain/storage/providers"; } // Queries a Attestation by index. rpc Attestation(QueryAttestationRequest) returns (QueryAttestationResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/attestations/{prover}/{merkle}/{owner}/{start}"; + "/jackal/canine-chain/storage/attestations/{prover}/{merkle}/{owner}/{start}"; } // Queries a list of Attestation items. - rpc AttestationsAll(QueryAllAttestationsRequest) + rpc AllAttestations(QueryAllAttestationsRequest) returns (QueryAllAttestationsResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/storage/attestations"; + option (google.api.http).get = "/jackal/canine-chain/storage/attestations"; } // Queries a Report by index. - rpc Reports(QueryReportRequest) returns (QueryReportResponse) { + rpc Report(QueryReportRequest) returns (QueryReportResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/reports/{prover}/{merkle}/{owner}/{start}"; + "/jackal/canine-chain/storage/reports/{prover}/{merkle}/{owner}/{start}"; } // Queries a list of Attestation items. - rpc ReportsAll(QueryAllReportRequest) - returns (QueryAllReportResponse) { - option (google.api.http).get = "/jackal-dao/canine-chain/storage/reports"; + rpc AllReports(QueryAllReportsRequest) + returns (QueryAllReportsResponse) { + option (google.api.http).get = "/jackal/canine-chain/storage/reports"; } // Queries a list of Freespace items. - rpc Freespace(QueryFreeSpaceRequest) returns (QueryFreeSpaceResponse) { + rpc FreeSpace(QueryFreeSpaceRequest) returns (QueryFreeSpaceResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/free_space/{address}"; + "/jackal/canine-chain/storage/free_space/{address}"; } // Queries a list of Freespace items. rpc StoreCount(QueryStoreCountRequest) returns (QueryStoreCountResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/storing/{address}"; + "/jackal/canine-chain/storage/storing/{address}"; } // Queries a list of FindFile items. rpc FindFile(QueryFindFileRequest) returns (QueryFindFileResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/find_file/{merkle}"; + "/jackal/canine-chain/storage/find_file/{merkle}"; } // Queries a list of GetClientFreeSpace items. rpc GetClientFreeSpace(QueryClientFreeSpaceRequest) returns (QueryClientFreeSpaceResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/get_client_free_space/{address}"; + "/jackal/canine-chain/storage/get_client_free_space/{address}"; } // Queries a list of GetPayData items. rpc GetPayData(QueryPayDataRequest) returns (QueryPayDataResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/get_pay_data/{address}"; + "/jackal/canine-chain/storage/get_pay_data/{address}"; } // Queries a StoragePaymentInfo by address. rpc StoragePaymentInfo(QueryStoragePaymentInfoRequest) returns (QueryStoragePaymentInfoResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/payment_info/{address}"; + "/jackal/canine-chain/storage/payment_info/{address}"; } // Queries a list of StoragePaymentInfo items. - rpc StoragePaymentInfoAll(QueryAllStoragePaymentInfoRequest) + rpc AllStoragePaymentInfo(QueryAllStoragePaymentInfoRequest) returns (QueryAllStoragePaymentInfoResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/payment_info"; + "/jackal/canine-chain/storage/payment_info"; } // Queries whether user can upload a file based on size rpc FileUploadCheck(QueryFileUploadCheckRequest) returns (QueryFileUploadCheckResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/file_upload_check"; + "/jackal/canine-chain/storage/file_upload_check"; } // Queries whether user can upload a file based on size rpc PriceCheck(QueryPriceCheckRequest) returns (QueryPriceCheckResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/price_check/{duration}/{bytes}"; + "/jackal/canine-chain/storage/price_check/{duration}/{bytes}"; } // Queries whether user can upload a file based on size rpc ActiveProviders(QueryActiveProvidersRequest) returns (QueryActiveProvidersResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/active_providers"; + "/jackal/canine-chain/storage/active_providers"; } // Queries the storage space used and purchased rpc StorageStats(QueryStorageStatsRequest) returns (QueryStorageStatsResponse) { option (google.api.http).get = - "/jackal-dao/canine-chain/storage/storage_stats"; + "/jackal/canine-chain/storage/storage_stats"; } } @@ -176,13 +176,11 @@ message QueryProofResponse { message QueryProofsByAddressRequest { string provider_address = 1; cosmos.base.query.v1beta1.PageRequest pagination = 2; - } message QueryProofsByAddressResponse { repeated FileProof proof = 1 [ (gogoproto.nullable) = false ]; cosmos.base.query.v1beta1.PageResponse pagination = 2; - } message QueryFileRequest { @@ -212,7 +210,7 @@ message QueryAllFilesResponse { message QueryProviderRequest { string address = 1; } message QueryProviderResponse { - Providers providers = 1 [ (gogoproto.nullable) = false ]; + Providers provider = 1 [ (gogoproto.nullable) = false ]; } message QueryAllProvidersRequest { @@ -257,11 +255,11 @@ message QueryReportResponse { ReportForm report = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllReportRequest { +message QueryAllReportsRequest { cosmos.base.query.v1beta1.PageRequest pagination = 1; } -message QueryAllReportResponse { +message QueryAllReportsResponse { repeated ReportForm reports = 1 [ (gogoproto.nullable) = false ]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/x/filetree/client/cli/query_files.go b/x/filetree/client/cli/query_files.go index 9c5fb0c06..e9ead016c 100644 --- a/x/filetree/client/cli/query_files.go +++ b/x/filetree/client/cli/query_files.go @@ -30,7 +30,7 @@ func CmdListFiles() *cobra.Command { Pagination: pageReq, } - res, err := queryClient.FilesAll(context.Background(), params) + res, err := queryClient.AllFiles(context.Background(), params) if err != nil { return err } @@ -64,7 +64,7 @@ func CmdShowFiles() *cobra.Command { OwnerAddress: argOwnerAddress, } - res, err := queryClient.Files(context.Background(), params) + res, err := queryClient.File(context.Background(), params) if err != nil { return err } @@ -112,7 +112,7 @@ func CmdShowFileFromPath() *cobra.Command { OwnerAddress: ownerAddress, } - res, err := queryClient.Files(context.Background(), params) + res, err := queryClient.File(context.Background(), params) if err != nil { return err } diff --git a/x/filetree/client/cli/query_get_keys.go b/x/filetree/client/cli/query_get_keys.go index 83cf145ee..a31132fb8 100644 --- a/x/filetree/client/cli/query_get_keys.go +++ b/x/filetree/client/cli/query_get_keys.go @@ -53,13 +53,13 @@ func CmdGetKeys() *cobra.Command { OwnerAddress: ownerString, } - res, err := queryClient.Files(context.Background(), params) + res, err := queryClient.File(context.Background(), params) if err != nil { fmt.Println("cannot find file") return err } - viewers := res.Files.ViewingAccess + viewers := res.File.ViewingAccess var m map[string]string jerr := json.Unmarshal([]byte(viewers), &m) @@ -68,7 +68,7 @@ func CmdGetKeys() *cobra.Command { return jerr } - addressString := keeper.MakeViewerAddress(res.Files.TrackingNumber, clientCtx.GetFromAddress().String()) + addressString := keeper.MakeViewerAddress(res.File.TrackingNumber, clientCtx.GetFromAddress().String()) todec := m[addressString] diff --git a/x/filetree/client/cli/query_pubkey.go b/x/filetree/client/cli/query_pubkey.go index 056b74cb1..792d66b2c 100644 --- a/x/filetree/client/cli/query_pubkey.go +++ b/x/filetree/client/cli/query_pubkey.go @@ -27,7 +27,7 @@ func CmdListPubkey() *cobra.Command { Pagination: pageReq, } - res, err := queryClient.PubKeyAll(context.Background(), params) + res, err := queryClient.AllPubKeys(context.Background(), params) if err != nil { return err } diff --git a/x/filetree/client/cli/tx_add_editors.go b/x/filetree/client/cli/tx_add_editors.go index 7df2c08d4..b9b6379d8 100644 --- a/x/filetree/client/cli/tx_add_editors.go +++ b/x/filetree/client/cli/tx_add_editors.go @@ -72,12 +72,12 @@ func CmdAddEditors() *cobra.Command { OwnerAddress: ownerChainAddress, } - file, err := fileQueryClient.Files(context.Background(), params) + file, err := fileQueryClient.File(context.Background(), params) if err != nil { return types.ErrFileNotFound } - editors := file.Files.EditAccess + editors := file.File.EditAccess var m map[string]string err = json.Unmarshal([]byte(editors), &m) @@ -85,7 +85,7 @@ func CmdAddEditors() *cobra.Command { return types.ErrCantUnmarshall } - ownerEditorAddress := keeper.MakeEditorAddress(file.Files.TrackingNumber, argOwner) + ownerEditorAddress := keeper.MakeEditorAddress(file.File.TrackingNumber, argOwner) logger.Println("m[ownerEditorAddress] =", m[ownerEditorAddress]) hexMessage, err := hex.DecodeString(m[ownerEditorAddress]) @@ -113,7 +113,7 @@ func CmdAddEditors() *cobra.Command { return err } - newEditorID := keeper.MakeEditorAddress(file.Files.TrackingNumber, v) + newEditorID := keeper.MakeEditorAddress(file.File.TrackingNumber, v) editorIds = append(editorIds, newEditorID) editorKeys = append(editorKeys, fmt.Sprintf("%x", encrypted)) diff --git a/x/filetree/client/cli/tx_add_viewers.go b/x/filetree/client/cli/tx_add_viewers.go index 3dc07ba10..e0715968d 100644 --- a/x/filetree/client/cli/tx_add_viewers.go +++ b/x/filetree/client/cli/tx_add_viewers.go @@ -71,12 +71,12 @@ func CmdAddViewers() *cobra.Command { OwnerAddress: ownerChainAddress, } - file, err := fileQueryClient.Files(context.Background(), params) + file, err := fileQueryClient.File(context.Background(), params) if err != nil { return types.ErrFileNotFound } - viewers := file.Files.ViewingAccess + viewers := file.File.ViewingAccess var m map[string]string err = json.Unmarshal([]byte(viewers), &m) @@ -84,7 +84,7 @@ func CmdAddViewers() *cobra.Command { return types.ErrCantUnmarshall } - ownerViewingAddress := keeper.MakeViewerAddress(file.Files.TrackingNumber, argOwner) + ownerViewingAddress := keeper.MakeViewerAddress(file.File.TrackingNumber, argOwner) hexMessage, err := hex.DecodeString(m[ownerViewingAddress]) if err != nil { @@ -109,7 +109,7 @@ func CmdAddViewers() *cobra.Command { return err } - newViewerID := keeper.MakeViewerAddress(file.Files.TrackingNumber, v) + newViewerID := keeper.MakeViewerAddress(file.File.TrackingNumber, v) viewerIds = append(viewerIds, newViewerID) viewerKeys = append(viewerKeys, fmt.Sprintf("%x", encrypted)) diff --git a/x/filetree/client/cli/tx_remove_editors.go b/x/filetree/client/cli/tx_remove_editors.go index 238f44373..2a15747d8 100644 --- a/x/filetree/client/cli/tx_remove_editors.go +++ b/x/filetree/client/cli/tx_remove_editors.go @@ -48,12 +48,12 @@ func CmdRemoveEditors() *cobra.Command { OwnerAddress: ownerChainAddress, } - file, err := fileQueryClient.Files(context.Background(), params) + file, err := fileQueryClient.File(context.Background(), params) if err != nil { return types.ErrFileNotFound } - newEditorID := keeper.MakeEditorAddress(file.Files.TrackingNumber, v) // This used to just be argAddress + newEditorID := keeper.MakeEditorAddress(file.File.TrackingNumber, v) // This used to just be argAddress editorIds = append(editorIds, newEditorID) } diff --git a/x/filetree/client/cli/tx_remove_viewers.go b/x/filetree/client/cli/tx_remove_viewers.go index 70e1e9492..c258e2eb7 100644 --- a/x/filetree/client/cli/tx_remove_viewers.go +++ b/x/filetree/client/cli/tx_remove_viewers.go @@ -48,12 +48,12 @@ func CmdRemoveViewers() *cobra.Command { OwnerAddress: ownerChainAddress, } - file, err := fileQueryClient.Files(context.Background(), params) + file, err := fileQueryClient.File(context.Background(), params) if err != nil { return types.ErrFileNotFound } - newViewerID := keeper.MakeViewerAddress(file.Files.TrackingNumber, v) // This used to just be argAddress + newViewerID := keeper.MakeViewerAddress(file.File.TrackingNumber, v) // This used to just be argAddress viewerIds = append(viewerIds, newViewerID) } diff --git a/x/filetree/keeper/grpc_query_files.go b/x/filetree/keeper/grpc_query_files.go index 6b3ca2b0b..c455be943 100644 --- a/x/filetree/keeper/grpc_query_files.go +++ b/x/filetree/keeper/grpc_query_files.go @@ -12,7 +12,7 @@ import ( ) // To remove -func (k Keeper) FilesAll(c context.Context, req *types.QueryAllFilesRequest) (*types.QueryAllFilesResponse, error) { +func (k Keeper) AllFiles(c context.Context, req *types.QueryAllFilesRequest) (*types.QueryAllFilesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -39,7 +39,7 @@ func (k Keeper) FilesAll(c context.Context, req *types.QueryAllFilesRequest) (*t return &types.QueryAllFilesResponse{Files: filess, Pagination: pageRes}, nil } -func (k Keeper) Files(c context.Context, req *types.QueryFileRequest) (*types.QueryFileResponse, error) { +func (k Keeper) File(c context.Context, req *types.QueryFileRequest) (*types.QueryFileResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -53,5 +53,5 @@ func (k Keeper) Files(c context.Context, req *types.QueryFileRequest) (*types.Qu return nil, status.Error(codes.NotFound, "not found") } - return &types.QueryFileResponse{Files: val}, nil + return &types.QueryFileResponse{File: val}, nil } diff --git a/x/filetree/keeper/grpc_query_pubkey.go b/x/filetree/keeper/grpc_query_pubkey.go index 24cdfa655..f34e18c91 100644 --- a/x/filetree/keeper/grpc_query_pubkey.go +++ b/x/filetree/keeper/grpc_query_pubkey.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) PubKeyAll(c context.Context, req *types.QueryAllPubKeysRequest) (*types.QueryAllPubKeysResponse, error) { +func (k Keeper) AllPubKeys(c context.Context, req *types.QueryAllPubKeysRequest) (*types.QueryAllPubKeysResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/filetree/keeper/msg_server_add_editors_test.go b/x/filetree/keeper/msg_server_add_editors_test.go index 33dc66780..79af6d6c4 100644 --- a/x/filetree/keeper/msg_server_add_editors_test.go +++ b/x/filetree/keeper/msg_server_add_editors_test.go @@ -104,10 +104,10 @@ func (suite *KeeperTestSuite) TestMsgAddEditors() { OwnerAddress: ownerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - validEditor, err := keeper.HasEditAccess(res.Files, bob) + validEditor, err := keeper.HasEditAccess(res.File, bob) suite.Require().NoError(err) suite.Require().Equal(validEditor, true) diff --git a/x/filetree/keeper/msg_server_add_viewers_test.go b/x/filetree/keeper/msg_server_add_viewers_test.go index 2175a6b12..839d3fc7f 100644 --- a/x/filetree/keeper/msg_server_add_viewers_test.go +++ b/x/filetree/keeper/msg_server_add_viewers_test.go @@ -166,16 +166,16 @@ func (suite *KeeperTestSuite) TestMsgAddViewers() { OwnerAddress: ownerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - validViewer, err := keeper.HasViewingAccess(res.Files, bob) + validViewer, err := keeper.HasViewingAccess(res.File, bob) suite.Require().NoError(err) suite.Require().Equal(validViewer, true) // Let's see if Bob can decrypt and recover pepe's AES iv and key using his private key - viewers := res.Files.ViewingAccess + viewers := res.File.ViewingAccess var m map[string]string err = json.Unmarshal([]byte(viewers), &m) diff --git a/x/filetree/keeper/msg_server_change_owner_test.go b/x/filetree/keeper/msg_server_change_owner_test.go index c40e152a1..0dab01f1b 100644 --- a/x/filetree/keeper/msg_server_change_owner_test.go +++ b/x/filetree/keeper/msg_server_change_owner_test.go @@ -45,10 +45,10 @@ func (suite *KeeperTestSuite) TestMsgChangeOwners() { OwnerAddress: aliceOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - aliceIsOwner := keeper.IsOwner(res.Files, alice) + aliceIsOwner := keeper.IsOwner(res.File, alice) suite.Require().Equal(aliceIsOwner, true) // we make a pepe.jpg for charlie as well to show that alice cannot give charlie her 'pepe.jpg' if he already has one--i.e., duplicates are not permitted @@ -146,7 +146,7 @@ func (suite *KeeperTestSuite) TestMsgChangeOwners() { Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } - _, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq1) + _, err := suite.queryClient.File(suite.ctx.Context(), &fileReq1) suite.Require().Error(err) // we will find a pepe.jpg that belongs to bob @@ -158,13 +158,13 @@ func (suite *KeeperTestSuite) TestMsgChangeOwners() { Address: pepeMerklePath, OwnerAddress: bobOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq2) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq2) suite.Require().NoError(err) - bobIsOwner := keeper.IsOwner(res.Files, bob) + bobIsOwner := keeper.IsOwner(res.File, bob) suite.Require().Equal(bobIsOwner, true) - aliceIsOwner := keeper.IsOwner(res.Files, alice) + aliceIsOwner := keeper.IsOwner(res.File, alice) suite.Require().Equal(aliceIsOwner, false) } diff --git a/x/filetree/keeper/msg_server_delete_file_test.go b/x/filetree/keeper/msg_server_delete_file_test.go index 4f912d41f..3a6b904ea 100644 --- a/x/filetree/keeper/msg_server_delete_file_test.go +++ b/x/filetree/keeper/msg_server_delete_file_test.go @@ -54,11 +54,11 @@ func (suite *KeeperTestSuite) TestMsgDeleteFile() { OwnerAddress: types.MakeOwnerAddress(types.MerklePath("s/home/"), aliceAccountHash), } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - suite.Require().Equal(res.Files, *aliceHomeFolder) + suite.Require().Equal(res.File, *aliceHomeFolder) - validEditor, err := keeper.HasEditAccess(res.Files, bob) + validEditor, err := keeper.HasEditAccess(res.File, bob) suite.Require().NoError(err) suite.Require().Equal(validEditor, true) diff --git a/x/filetree/keeper/msg_server_remove_editors_test.go b/x/filetree/keeper/msg_server_remove_editors_test.go index 4f356a95d..b50046e91 100644 --- a/x/filetree/keeper/msg_server_remove_editors_test.go +++ b/x/filetree/keeper/msg_server_remove_editors_test.go @@ -51,18 +51,18 @@ func (suite *KeeperTestSuite) TestMsgRemoveEditors() { OwnerAddress: aliceOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - bobIsEditor, err := keeper.HasEditAccess(res.Files, bob) + bobIsEditor, err := keeper.HasEditAccess(res.File, bob) suite.Require().NoError(err) suite.Require().Equal(bobIsEditor, true) - aliceIsEditor, err := keeper.HasEditAccess(res.Files, alice) + aliceIsEditor, err := keeper.HasEditAccess(res.File, alice) suite.Require().NoError(err) suite.Require().Equal(aliceIsEditor, true) - bobEditorAddress := keeper.MakeEditorAddress(res.Files.TrackingNumber, bob) + bobEditorAddress := keeper.MakeEditorAddress(res.File.TrackingNumber, bob) cases := []struct { preRun func() *types.MsgRemoveEditors @@ -128,18 +128,18 @@ func (suite *KeeperTestSuite) TestMsgRemoveEditors() { Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - bobIsEditor, err := keeper.HasEditAccess(res.Files, bob) + bobIsEditor, err := keeper.HasEditAccess(res.File, bob) suite.Require().NoError(err) suite.Require().EqualValues(bobIsEditor, false) - aliceIsEditor, err := keeper.HasEditAccess(res.Files, alice) + aliceIsEditor, err := keeper.HasEditAccess(res.File, alice) suite.Require().NoError(err) suite.Require().EqualValues(aliceIsEditor, true) - peacc := res.Files.EditAccess + peacc := res.File.EditAccess jeacc := make(map[string]string) err = json.Unmarshal([]byte(peacc), &jeacc) diff --git a/x/filetree/keeper/msg_server_remove_viewers_test.go b/x/filetree/keeper/msg_server_remove_viewers_test.go index 0a0a50d2f..5ee906a67 100644 --- a/x/filetree/keeper/msg_server_remove_viewers_test.go +++ b/x/filetree/keeper/msg_server_remove_viewers_test.go @@ -65,18 +65,18 @@ func (suite *KeeperTestSuite) TestMsgRemoveViewers() { OwnerAddress: aliceOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - bobIsViewer, err := keeper.HasViewingAccess(res.Files, alice) + bobIsViewer, err := keeper.HasViewingAccess(res.File, alice) suite.Require().NoError(err) suite.Require().Equal(bobIsViewer, true) - aliceIsViewer, err := keeper.HasViewingAccess(res.Files, alice) + aliceIsViewer, err := keeper.HasViewingAccess(res.File, alice) suite.Require().NoError(err) suite.Require().Equal(aliceIsViewer, true) - bobViewerAddress := keeper.MakeViewerAddress(res.Files.TrackingNumber, bob) + bobViewerAddress := keeper.MakeViewerAddress(res.File.TrackingNumber, bob) cases := []struct { preRun func() *types.MsgRemoveViewers @@ -142,18 +142,18 @@ func (suite *KeeperTestSuite) TestMsgRemoveViewers() { Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - bobIsViewer, err := keeper.HasViewingAccess(res.Files, bob) + bobIsViewer, err := keeper.HasViewingAccess(res.File, bob) suite.Require().NoError(err) suite.Require().EqualValues(bobIsViewer, false) - aliceIsViewer, err := keeper.HasViewingAccess(res.Files, alice) + aliceIsViewer, err := keeper.HasViewingAccess(res.File, alice) suite.Require().NoError(err) suite.Require().EqualValues(aliceIsViewer, true) - pvacc := res.Files.ViewingAccess + pvacc := res.File.ViewingAccess jvacc := make(map[string]string) err = json.Unmarshal([]byte(pvacc), &jvacc) diff --git a/x/filetree/keeper/msg_server_reset_editors_test.go b/x/filetree/keeper/msg_server_reset_editors_test.go index 8af738e02..e403e17fa 100644 --- a/x/filetree/keeper/msg_server_reset_editors_test.go +++ b/x/filetree/keeper/msg_server_reset_editors_test.go @@ -51,22 +51,22 @@ func (suite *KeeperTestSuite) TestMsgResetEditors() { OwnerAddress: aliceOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - bobIsEditor, err := keeper.HasEditAccess(res.Files, bob) + bobIsEditor, err := keeper.HasEditAccess(res.File, bob) suite.Require().NoError(err) suite.Require().Equal(bobIsEditor, true) - aliceIsEditor, err := keeper.HasEditAccess(res.Files, alice) + aliceIsEditor, err := keeper.HasEditAccess(res.File, alice) suite.Require().NoError(err) suite.Require().Equal(aliceIsEditor, true) - charlieIsEditor, err := keeper.HasEditAccess(res.Files, charlie) + charlieIsEditor, err := keeper.HasEditAccess(res.File, charlie) suite.Require().NoError(err) suite.Require().Equal(charlieIsEditor, true) - peacc := res.Files.EditAccess + peacc := res.File.EditAccess jeacc := make(map[string]string) err = json.Unmarshal([]byte(peacc), &jeacc) @@ -134,22 +134,22 @@ func (suite *KeeperTestSuite) TestMsgResetEditors() { Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - bobIsEditor, err := keeper.HasEditAccess(res.Files, bob) + bobIsEditor, err := keeper.HasEditAccess(res.File, bob) suite.Require().NoError(err) suite.Require().EqualValues(bobIsEditor, false) - charlieIsEditor, err := keeper.HasEditAccess(res.Files, charlie) + charlieIsEditor, err := keeper.HasEditAccess(res.File, charlie) suite.Require().NoError(err) suite.Require().EqualValues(charlieIsEditor, false) - aliceIsEditor, err := keeper.HasEditAccess(res.Files, alice) + aliceIsEditor, err := keeper.HasEditAccess(res.File, alice) suite.Require().NoError(err) suite.Require().EqualValues(aliceIsEditor, true) - peacc := res.Files.EditAccess + peacc := res.File.EditAccess jeacc := make(map[string]string) err = json.Unmarshal([]byte(peacc), &jeacc) diff --git a/x/filetree/keeper/msg_server_reset_viewers_test.go b/x/filetree/keeper/msg_server_reset_viewers_test.go index cd2e241c5..a08c8d0ba 100644 --- a/x/filetree/keeper/msg_server_reset_viewers_test.go +++ b/x/filetree/keeper/msg_server_reset_viewers_test.go @@ -65,22 +65,22 @@ func (suite *KeeperTestSuite) TestMsgResetViewers() { OwnerAddress: aliceOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - bobIsViewer, err := keeper.HasViewingAccess(res.Files, bob) + bobIsViewer, err := keeper.HasViewingAccess(res.File, bob) suite.Require().NoError(err) suite.Require().Equal(bobIsViewer, true) - aliceIsViewer, err := keeper.HasViewingAccess(res.Files, alice) + aliceIsViewer, err := keeper.HasViewingAccess(res.File, alice) suite.Require().NoError(err) suite.Require().Equal(aliceIsViewer, true) - charlieIsViewer, err := keeper.HasViewingAccess(res.Files, charlie) + charlieIsViewer, err := keeper.HasViewingAccess(res.File, charlie) suite.Require().NoError(err) suite.Require().Equal(charlieIsViewer, true) - pvacc := res.Files.ViewingAccess + pvacc := res.File.ViewingAccess jvacc := make(map[string]string) err = json.Unmarshal([]byte(pvacc), &jvacc) @@ -148,22 +148,22 @@ func (suite *KeeperTestSuite) TestMsgResetViewers() { Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } - res, err := suite.queryClient.Files(suite.ctx.Context(), &fileReq) + res, err := suite.queryClient.File(suite.ctx.Context(), &fileReq) suite.Require().NoError(err) - bobIsViewer, err := keeper.HasViewingAccess(res.Files, bob) + bobIsViewer, err := keeper.HasViewingAccess(res.File, bob) suite.Require().NoError(err) suite.Require().EqualValues(bobIsViewer, false) - charlieIsViewer, err := keeper.HasViewingAccess(res.Files, charlie) + charlieIsViewer, err := keeper.HasViewingAccess(res.File, charlie) suite.Require().NoError(err) suite.Require().EqualValues(charlieIsViewer, false) - aliceIsViewer, err := keeper.HasViewingAccess(res.Files, alice) + aliceIsViewer, err := keeper.HasViewingAccess(res.File, alice) suite.Require().NoError(err) suite.Require().EqualValues(aliceIsViewer, true) - pvacc := res.Files.ViewingAccess + pvacc := res.File.ViewingAccess jvacc := make(map[string]string) err = json.Unmarshal([]byte(pvacc), &jvacc) diff --git a/x/filetree/types/query.pb.go b/x/filetree/types/query.pb.go index 937b72143..418ee895a 100644 --- a/x/filetree/types/query.pb.go +++ b/x/filetree/types/query.pb.go @@ -166,7 +166,7 @@ func (m *QueryFileRequest) GetOwnerAddress() string { } type QueryFileResponse struct { - Files Files `protobuf:"bytes,1,opt,name=files,proto3" json:"files"` + File Files `protobuf:"bytes,1,opt,name=file,proto3" json:"file"` } func (m *QueryFileResponse) Reset() { *m = QueryFileResponse{} } @@ -202,9 +202,9 @@ func (m *QueryFileResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryFileResponse proto.InternalMessageInfo -func (m *QueryFileResponse) GetFiles() Files { +func (m *QueryFileResponse) GetFile() Files { if m != nil { - return m.Files + return m.File } return Files{} } @@ -506,48 +506,48 @@ func init() { proto.RegisterFile("canine_chain/filetree/query.proto", fileDescri var fileDescriptor_f2d116acb9d238bd = []byte{ // 666 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x4d, 0x6b, 0x13, 0x41, - 0x18, 0xc7, 0xb3, 0xad, 0x49, 0xed, 0xa8, 0xa0, 0x63, 0xaa, 0x65, 0xa9, 0xab, 0xdd, 0x82, 0x69, - 0x5a, 0xb3, 0x43, 0x1a, 0x04, 0xa1, 0x5e, 0x52, 0xa1, 0x22, 0x5a, 0x68, 0xe3, 0xcd, 0x83, 0x71, - 0x36, 0x19, 0xb7, 0x6b, 0x36, 0x3b, 0xdb, 0x7d, 0x51, 0x43, 0xe9, 0xc5, 0xa3, 0x27, 0x41, 0xf1, - 0x20, 0x0a, 0x5e, 0xfc, 0x2e, 0x3d, 0x16, 0xbc, 0x78, 0x12, 0x49, 0xfc, 0x20, 0xb2, 0x33, 0xb3, - 0x66, 0x37, 0x6f, 0x9b, 0x42, 0x6f, 0xc9, 0xce, 0xff, 0xf9, 0x3f, 0xbf, 0x7d, 0x5e, 0x66, 0xc1, - 0x72, 0x03, 0xdb, 0xa6, 0x4d, 0xea, 0x8d, 0x7d, 0x6c, 0xda, 0xe8, 0xa5, 0x69, 0x11, 0xdf, 0x25, - 0x04, 0x1d, 0x04, 0xc4, 0xed, 0x68, 0x8e, 0x4b, 0x7d, 0x0a, 0x17, 0xe2, 0x12, 0x2d, 0x92, 0xc8, - 0x79, 0x83, 0x1a, 0x94, 0x29, 0x50, 0xf8, 0x8b, 0x8b, 0xe5, 0x25, 0x83, 0x52, 0xc3, 0x22, 0x08, - 0x3b, 0x26, 0xc2, 0xb6, 0x4d, 0x7d, 0xec, 0x9b, 0xd4, 0xf6, 0xc4, 0xe9, 0x5a, 0x83, 0x7a, 0x6d, - 0xea, 0x21, 0x1d, 0x7b, 0x22, 0x07, 0x7a, 0x5d, 0xd6, 0x89, 0x8f, 0xcb, 0xc8, 0xc1, 0x86, 0x69, - 0x33, 0xb1, 0xd0, 0xaa, 0xa3, 0xc9, 0x1c, 0xec, 0xe2, 0x76, 0xe4, 0x37, 0x86, 0x3e, 0xfc, 0xe1, - 0xa5, 0xd8, 0x04, 0x7a, 0x8b, 0x88, 0x37, 0x54, 0xf3, 0x00, 0xee, 0x85, 0x30, 0xbb, 0xcc, 0xbb, - 0x46, 0x0e, 0x02, 0xe2, 0xf9, 0x6a, 0x0d, 0x5c, 0x4d, 0x3c, 0xf5, 0x1c, 0x6a, 0x7b, 0x04, 0x6e, - 0x82, 0x1c, 0x67, 0x58, 0x94, 0x6e, 0x49, 0xab, 0x17, 0x36, 0x6e, 0x68, 0x23, 0xeb, 0xa3, 0xf1, - 0xb0, 0xad, 0x73, 0xc7, 0xbf, 0x6f, 0x66, 0x6a, 0x22, 0x44, 0xdd, 0x03, 0x97, 0x99, 0xe7, 0xb6, - 0x69, 0x11, 0x91, 0x07, 0x2e, 0x82, 0x39, 0xdc, 0x6c, 0xba, 0xc4, 0xe3, 0x8e, 0xf3, 0xb5, 0xe8, - 0x2f, 0x5c, 0x01, 0x97, 0xe8, 0x1b, 0x9b, 0xb8, 0xf5, 0xe8, 0x7c, 0x86, 0x9d, 0x5f, 0x64, 0x0f, - 0xab, 0xfc, 0x99, 0xba, 0x03, 0xae, 0xc4, 0x2c, 0x05, 0xe4, 0x3d, 0x90, 0x65, 0x45, 0x10, 0x8c, - 0x4b, 0x63, 0x18, 0xc3, 0x98, 0x08, 0x91, 0x07, 0xa8, 0xcf, 0x41, 0x9e, 0xd9, 0x55, 0x2d, 0x8b, - 0x9d, 0x46, 0x94, 0xdb, 0x00, 0xf4, 0x5b, 0x24, 0x6c, 0x6f, 0x6b, 0xbc, 0x9f, 0x5a, 0xd8, 0x4f, - 0x8d, 0xcf, 0x8c, 0xe8, 0xa7, 0xb6, 0x8b, 0x8d, 0xe8, 0x0d, 0x6b, 0xb1, 0x48, 0xf5, 0x8b, 0x04, - 0x16, 0x06, 0x12, 0x0c, 0x33, 0xcf, 0x9e, 0x8a, 0x19, 0x3e, 0x4c, 0xb0, 0xcd, 0x30, 0xb6, 0x42, - 0x2a, 0x1b, 0x4f, 0x9b, 0x80, 0xd3, 0xa2, 0x41, 0x08, 0xf4, 0xc7, 0xa4, 0x93, 0xda, 0x20, 0xf5, - 0x69, 0x34, 0x22, 0x42, 0x2f, 0xde, 0xe4, 0x3e, 0x98, 0x73, 0x02, 0xbd, 0xde, 0x22, 0x9d, 0xb4, - 0x19, 0x61, 0x53, 0xf8, 0x7f, 0x46, 0x98, 0x8b, 0xfa, 0x02, 0x5c, 0x8b, 0x0a, 0xc4, 0x7d, 0xcf, - 0xbc, 0x07, 0xdf, 0x25, 0x70, 0x7d, 0x28, 0xc5, 0x28, 0xf6, 0xd9, 0x53, 0xb2, 0x9f, 0x59, 0x27, - 0x36, 0x3e, 0xe5, 0x40, 0x96, 0x21, 0xc2, 0xf7, 0x12, 0xc8, 0xf1, 0x5d, 0x82, 0xc5, 0x31, 0x28, - 0xc3, 0xcb, 0x2b, 0xaf, 0x4d, 0x23, 0xe5, 0x79, 0xd5, 0xe2, 0xbb, 0x9f, 0x7f, 0x3f, 0xce, 0xac, - 0xc0, 0x65, 0xf4, 0x0a, 0x37, 0x5a, 0xd8, 0x6a, 0x62, 0x8a, 0x78, 0xf4, 0xe0, 0xb5, 0x03, 0x7f, - 0x48, 0x20, 0xcb, 0x06, 0x10, 0x16, 0x26, 0x25, 0x88, 0xad, 0xb7, 0xbc, 0x9a, 0x2e, 0x14, 0x1c, - 0x8f, 0x18, 0xc7, 0x03, 0x58, 0x15, 0x1c, 0xa5, 0x3e, 0x48, 0x69, 0xd4, 0x0d, 0x87, 0x0e, 0xc5, - 0x1c, 0x1e, 0xa1, 0xc3, 0xc4, 0x3d, 0x71, 0x04, 0x3f, 0x4b, 0xe0, 0x3c, 0xe3, 0xac, 0x5a, 0x16, - 0x5c, 0x9f, 0x44, 0x30, 0xb0, 0xe7, 0xf2, 0x9d, 0xe9, 0xc4, 0x02, 0x19, 0x31, 0xe4, 0x22, 0x2c, - 0x4c, 0x89, 0x0c, 0xbf, 0x86, 0xdd, 0xe4, 0xb3, 0x32, 0xb9, 0x9b, 0xf1, 0x0d, 0x4c, 0xe9, 0x66, - 0x62, 0xf9, 0xd4, 0x4d, 0x86, 0x74, 0x17, 0x56, 0xd2, 0x91, 0xf8, 0x47, 0x20, 0x56, 0x47, 0xf8, - 0x4d, 0x02, 0xf3, 0xdc, 0x2f, 0x2c, 0x5c, 0x29, 0xa5, 0x16, 0xc9, 0xf5, 0x94, 0xb5, 0x69, 0xe5, - 0x82, 0xb4, 0xcc, 0x48, 0xd7, 0x61, 0x71, 0x6a, 0xd2, 0xad, 0x9d, 0xe3, 0xae, 0x22, 0x9d, 0x74, - 0x15, 0xe9, 0x4f, 0x57, 0x91, 0x3e, 0xf4, 0x94, 0xcc, 0x49, 0x4f, 0xc9, 0xfc, 0xea, 0x29, 0x99, - 0x67, 0x15, 0xc3, 0xf4, 0xf7, 0x03, 0x5d, 0x6b, 0xd0, 0xb6, 0xb0, 0x7b, 0x82, 0x75, 0x2f, 0x69, - 0xf7, 0xb6, 0x6f, 0xe8, 0x77, 0x1c, 0xe2, 0xe9, 0x39, 0xf6, 0xfd, 0xab, 0xfc, 0x0b, 0x00, 0x00, - 0xff, 0xff, 0xbd, 0x1a, 0x63, 0x65, 0x06, 0x08, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0xcf, 0x6f, 0xd3, 0x30, + 0x14, 0xc7, 0xeb, 0xfd, 0xe8, 0xc0, 0x80, 0x04, 0x66, 0x83, 0x29, 0x1a, 0x61, 0x64, 0xda, 0x3a, + 0x36, 0x1a, 0xab, 0x9b, 0x04, 0x48, 0x80, 0xd0, 0x26, 0x31, 0x0e, 0x03, 0x69, 0x2b, 0x37, 0x0e, + 0x14, 0xa7, 0x33, 0x59, 0x68, 0x1a, 0x67, 0xf9, 0x01, 0x54, 0xd3, 0x0e, 0x70, 0xe1, 0x8a, 0xe0, + 0x82, 0x76, 0xda, 0x9f, 0xb3, 0xe3, 0x24, 0x2e, 0x9c, 0x10, 0x6a, 0xf9, 0x43, 0x50, 0x6c, 0x87, + 0x26, 0x5d, 0xdb, 0x04, 0x69, 0xb7, 0xd4, 0xfe, 0xbe, 0xef, 0xfb, 0xd8, 0xef, 0x3d, 0x17, 0xde, + 0xaa, 0x13, 0xc7, 0x72, 0x68, 0xad, 0xbe, 0x4b, 0x2c, 0x07, 0xbf, 0xb1, 0x6c, 0x1a, 0x78, 0x94, + 0xe2, 0xbd, 0x90, 0x7a, 0x2d, 0xdd, 0xf5, 0x58, 0xc0, 0xd0, 0x54, 0x52, 0xa2, 0xc7, 0x12, 0x65, + 0xd2, 0x64, 0x26, 0xe3, 0x0a, 0x1c, 0x7d, 0x09, 0xb1, 0x32, 0x63, 0x32, 0x66, 0xda, 0x14, 0x13, + 0xd7, 0xc2, 0xc4, 0x71, 0x58, 0x40, 0x02, 0x8b, 0x39, 0xbe, 0xdc, 0x5d, 0xaa, 0x33, 0xbf, 0xc9, + 0x7c, 0x6c, 0x10, 0x5f, 0xe6, 0xc0, 0xef, 0x2a, 0x06, 0x0d, 0x48, 0x05, 0xbb, 0xc4, 0xb4, 0x1c, + 0x2e, 0x96, 0x5a, 0xad, 0x3f, 0x99, 0x4b, 0x3c, 0xd2, 0x8c, 0xfd, 0x06, 0xd0, 0x47, 0x1f, 0x7e, + 0x86, 0x4d, 0x68, 0x34, 0xa8, 0x3c, 0xa1, 0x36, 0x09, 0xd1, 0x76, 0x04, 0xb3, 0xc5, 0xbd, 0xab, + 0x74, 0x2f, 0xa4, 0x7e, 0xa0, 0x55, 0xe1, 0xd5, 0xd4, 0xaa, 0xef, 0x32, 0xc7, 0xa7, 0xe8, 0x01, + 0x2c, 0x0a, 0x86, 0x69, 0x30, 0x0b, 0x16, 0x2f, 0xac, 0xdc, 0xd0, 0xfb, 0xde, 0x8f, 0x2e, 0xc2, + 0xd6, 0xc7, 0x8e, 0x7f, 0xdd, 0x2c, 0x54, 0x65, 0x88, 0xb6, 0x0d, 0x2f, 0x73, 0xcf, 0x0d, 0xcb, + 0xa6, 0x32, 0x0f, 0x9a, 0x86, 0x13, 0x64, 0x67, 0xc7, 0xa3, 0xbe, 0x70, 0x3c, 0x5f, 0x8d, 0x7f, + 0xa2, 0x39, 0x78, 0x89, 0xbd, 0x77, 0xa8, 0x57, 0x8b, 0xf7, 0x47, 0xf8, 0xfe, 0x45, 0xbe, 0xb8, + 0x26, 0xd6, 0xb4, 0x4d, 0x78, 0x25, 0x61, 0x29, 0x21, 0xef, 0xc2, 0xb1, 0x08, 0x44, 0x22, 0xce, + 0x0c, 0x40, 0x8c, 0x42, 0x62, 0x42, 0xae, 0xd7, 0x5e, 0xc1, 0x49, 0x6e, 0xb6, 0x66, 0xdb, 0x7c, + 0x33, 0x66, 0xdc, 0x80, 0xb0, 0x5b, 0x20, 0xe9, 0xba, 0xa0, 0x8b, 0x6a, 0xea, 0x51, 0x35, 0x75, + 0xd1, 0x31, 0xb2, 0x9a, 0xfa, 0x16, 0x31, 0xe3, 0xf3, 0x55, 0x13, 0x91, 0xda, 0x21, 0x80, 0x53, + 0x3d, 0x09, 0x24, 0xf1, 0x7d, 0x38, 0xce, 0xcb, 0x36, 0x0d, 0x66, 0x47, 0x73, 0x22, 0x8b, 0x00, + 0xf4, 0x34, 0xc5, 0x36, 0xc2, 0xd9, 0x4a, 0x99, 0x6c, 0x22, 0x6d, 0x0a, 0x4e, 0x8f, 0xdb, 0x20, + 0x34, 0x36, 0x69, 0x2b, 0xb3, 0x3c, 0xda, 0x8b, 0xb8, 0x41, 0xa4, 0x5e, 0x9e, 0xe4, 0x21, 0x9c, + 0x70, 0x43, 0xa3, 0xd6, 0xa0, 0xad, 0xac, 0x0e, 0xe1, 0x3d, 0xf8, 0xaf, 0x43, 0xb8, 0x8b, 0xf6, + 0x1a, 0x5e, 0x8b, 0x2f, 0x48, 0xf8, 0x9e, 0x79, 0x0d, 0x8e, 0x00, 0xbc, 0x7e, 0x2a, 0x45, 0x3f, + 0xf6, 0xd1, 0xff, 0x64, 0x3f, 0xb3, 0x4a, 0xac, 0x7c, 0x2c, 0xc2, 0x71, 0x8e, 0x88, 0x3e, 0x03, + 0x58, 0x14, 0x93, 0x84, 0x6e, 0x0f, 0x40, 0x39, 0x3d, 0xba, 0xca, 0x52, 0x1e, 0xa9, 0xc8, 0xab, + 0x2d, 0x7c, 0xfa, 0xf1, 0xe7, 0xdb, 0xc8, 0x2c, 0x52, 0xf1, 0x5b, 0x52, 0x6f, 0x10, 0x1b, 0x8b, + 0xd0, 0xde, 0x17, 0x07, 0x1d, 0x01, 0x38, 0x16, 0x75, 0x1f, 0x2a, 0x0d, 0x33, 0x4f, 0x0c, 0xb6, + 0xb2, 0x98, 0x2d, 0x94, 0x0c, 0x4f, 0x38, 0xc3, 0x63, 0xf4, 0x28, 0xcd, 0x50, 0xee, 0xf7, 0xae, + 0xe1, 0x7d, 0xd9, 0x7f, 0x07, 0x78, 0x3f, 0xf5, 0x3a, 0x1c, 0xa0, 0xaf, 0x00, 0x9e, 0x8b, 0x07, + 0x0b, 0x2d, 0x0f, 0xcb, 0xde, 0x33, 0xdf, 0xca, 0x9d, 0x7c, 0x62, 0x89, 0xbb, 0xcc, 0x71, 0xe7, + 0xd1, 0x5c, 0x0e, 0x5c, 0xf4, 0x3d, 0xaa, 0xa0, 0xe8, 0x8f, 0xe1, 0x15, 0x4c, 0x4e, 0x5d, 0x46, + 0x05, 0x53, 0x03, 0xa7, 0xdd, 0xe3, 0x38, 0x15, 0x84, 0x87, 0xe3, 0x88, 0x27, 0x3f, 0x71, 0x7f, + 0xe8, 0x10, 0x40, 0xd8, 0x1d, 0x02, 0x54, 0xce, 0xb8, 0x84, 0xf4, 0x3c, 0x2a, 0x7a, 0x5e, 0xb9, + 0xc4, 0x2c, 0x73, 0xcc, 0x12, 0x9a, 0xcf, 0x85, 0xb9, 0xfe, 0xfc, 0xb8, 0xad, 0x82, 0x93, 0xb6, + 0x0a, 0x7e, 0xb7, 0x55, 0xf0, 0xa5, 0xa3, 0x16, 0x4e, 0x3a, 0x6a, 0xe1, 0x67, 0x47, 0x2d, 0xbc, + 0x5c, 0x35, 0xad, 0x60, 0x37, 0x34, 0xf4, 0x3a, 0x6b, 0x4a, 0xab, 0x67, 0xc4, 0xf0, 0xd3, 0x76, + 0x1f, 0xba, 0x86, 0x41, 0xcb, 0xa5, 0xbe, 0x51, 0xe4, 0x7f, 0x75, 0xab, 0x7f, 0x03, 0x00, 0x00, + 0xff, 0xff, 0xf8, 0x89, 0x74, 0xd0, 0xf1, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -565,13 +565,13 @@ type QueryClient interface { // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) // Queries a Files by index. - Files(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) + File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) // Queries a list of Files items. - FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) + AllFiles(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) // Queries a Pubkey by index. PubKey(ctx context.Context, in *QueryPubKeyRequest, opts ...grpc.CallOption) (*QueryPubKeyResponse, error) // Queries a list of Pubkey items. - PubKeyAll(ctx context.Context, in *QueryAllPubKeysRequest, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) + AllPubKeys(ctx context.Context, in *QueryAllPubKeysRequest, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) } type queryClient struct { @@ -591,18 +591,18 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } -func (c *queryClient) Files(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) { +func (c *queryClient) File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) { out := new(QueryFileResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/Files", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/File", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { +func (c *queryClient) AllFiles(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { out := new(QueryAllFilesResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/FilesAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/AllFiles", in, out, opts...) if err != nil { return nil, err } @@ -618,9 +618,9 @@ func (c *queryClient) PubKey(ctx context.Context, in *QueryPubKeyRequest, opts . return out, nil } -func (c *queryClient) PubKeyAll(ctx context.Context, in *QueryAllPubKeysRequest, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) { +func (c *queryClient) AllPubKeys(ctx context.Context, in *QueryAllPubKeysRequest, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) { out := new(QueryAllPubKeysResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/PubKeyAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/AllPubKeys", in, out, opts...) if err != nil { return nil, err } @@ -632,13 +632,13 @@ type QueryServer interface { // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) // Queries a Files by index. - Files(context.Context, *QueryFileRequest) (*QueryFileResponse, error) + File(context.Context, *QueryFileRequest) (*QueryFileResponse, error) // Queries a list of Files items. - FilesAll(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) + AllFiles(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) // Queries a Pubkey by index. PubKey(context.Context, *QueryPubKeyRequest) (*QueryPubKeyResponse, error) // Queries a list of Pubkey items. - PubKeyAll(context.Context, *QueryAllPubKeysRequest) (*QueryAllPubKeysResponse, error) + AllPubKeys(context.Context, *QueryAllPubKeysRequest) (*QueryAllPubKeysResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -648,17 +648,17 @@ type UnimplementedQueryServer struct { func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) Files(ctx context.Context, req *QueryFileRequest) (*QueryFileResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Files not implemented") +func (*UnimplementedQueryServer) File(ctx context.Context, req *QueryFileRequest) (*QueryFileResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method File not implemented") } -func (*UnimplementedQueryServer) FilesAll(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FilesAll not implemented") +func (*UnimplementedQueryServer) AllFiles(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllFiles not implemented") } func (*UnimplementedQueryServer) PubKey(ctx context.Context, req *QueryPubKeyRequest) (*QueryPubKeyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PubKey not implemented") } -func (*UnimplementedQueryServer) PubKeyAll(ctx context.Context, req *QueryAllPubKeysRequest) (*QueryAllPubKeysResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PubKeyAll not implemented") +func (*UnimplementedQueryServer) AllPubKeys(ctx context.Context, req *QueryAllPubKeysRequest) (*QueryAllPubKeysResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllPubKeys not implemented") } func RegisterQueryServer(s grpc1.Server, srv QueryServer) { @@ -683,38 +683,38 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf return interceptor(ctx, in, info, handler) } -func _Query_Files_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_File_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryFileRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Files(ctx, in) + return srv.(QueryServer).File(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.filetree.Query/Files", + FullMethod: "/canine_chain.filetree.Query/File", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Files(ctx, req.(*QueryFileRequest)) + return srv.(QueryServer).File(ctx, req.(*QueryFileRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_FilesAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_AllFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllFilesRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).FilesAll(ctx, in) + return srv.(QueryServer).AllFiles(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.filetree.Query/FilesAll", + FullMethod: "/canine_chain.filetree.Query/AllFiles", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FilesAll(ctx, req.(*QueryAllFilesRequest)) + return srv.(QueryServer).AllFiles(ctx, req.(*QueryAllFilesRequest)) } return interceptor(ctx, in, info, handler) } @@ -737,20 +737,20 @@ func _Query_PubKey_Handler(srv interface{}, ctx context.Context, dec func(interf return interceptor(ctx, in, info, handler) } -func _Query_PubKeyAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_AllPubKeys_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllPubKeysRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).PubKeyAll(ctx, in) + return srv.(QueryServer).AllPubKeys(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.filetree.Query/PubKeyAll", + FullMethod: "/canine_chain.filetree.Query/AllPubKeys", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PubKeyAll(ctx, req.(*QueryAllPubKeysRequest)) + return srv.(QueryServer).AllPubKeys(ctx, req.(*QueryAllPubKeysRequest)) } return interceptor(ctx, in, info, handler) } @@ -764,20 +764,20 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_Params_Handler, }, { - MethodName: "Files", - Handler: _Query_Files_Handler, + MethodName: "File", + Handler: _Query_File_Handler, }, { - MethodName: "FilesAll", - Handler: _Query_FilesAll_Handler, + MethodName: "AllFiles", + Handler: _Query_AllFiles_Handler, }, { MethodName: "PubKey", Handler: _Query_PubKey_Handler, }, { - MethodName: "PubKeyAll", - Handler: _Query_PubKeyAll_Handler, + MethodName: "AllPubKeys", + Handler: _Query_AllPubKeys_Handler, }, }, Streams: []grpc.StreamDesc{}, @@ -898,7 +898,7 @@ func (m *QueryFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l { - size, err := m.Files.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.File.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1195,7 +1195,7 @@ func (m *QueryFileResponse) Size() (n int) { } var l int _ = l - l = m.Files.Size() + l = m.File.Size() n += 1 + l + sovQuery(uint64(l)) return n } @@ -1572,7 +1572,7 @@ func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Files", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field File", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1599,7 +1599,7 @@ func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Files.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.File.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/filetree/types/query.pb.gw.go b/x/filetree/types/query.pb.gw.go index 259a120fe..c2330062b 100644 --- a/x/filetree/types/query.pb.gw.go +++ b/x/filetree/types/query.pb.gw.go @@ -51,7 +51,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } -func request_Query_Files_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryFileRequest var metadata runtime.ServerMetadata @@ -84,12 +84,12 @@ func request_Query_Files_0(ctx context.Context, marshaler runtime.Marshaler, cli return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner_address", err) } - msg, err := client.Files(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.File(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Files_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryFileRequest var metadata runtime.ServerMetadata @@ -122,43 +122,43 @@ func local_request_Query_Files_0(ctx context.Context, marshaler runtime.Marshale return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner_address", err) } - msg, err := server.Files(ctx, &protoReq) + msg, err := server.File(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_FilesAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllFiles_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_FilesAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllFilesRequest 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_FilesAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllFiles_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.FilesAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllFiles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_FilesAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllFilesRequest 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_FilesAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllFiles_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.FilesAll(ctx, &protoReq) + msg, err := server.AllFiles(ctx, &protoReq) return msg, metadata, err } @@ -218,37 +218,37 @@ func local_request_Query_PubKey_0(ctx context.Context, marshaler runtime.Marshal } var ( - filter_Query_PubKeyAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllPubKeys_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_PubKeyAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_AllPubKeys_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllPubKeysRequest 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_PubKeyAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllPubKeys_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.PubKeyAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllPubKeys(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_PubKeyAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_AllPubKeys_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllPubKeysRequest 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_PubKeyAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllPubKeys_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.PubKeyAll(ctx, &protoReq) + msg, err := server.AllPubKeys(ctx, &protoReq) return msg, metadata, err } @@ -282,7 +282,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_Files_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_File_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -293,7 +293,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Files_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_File_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 { @@ -301,11 +301,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Files_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_File_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_FilesAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllFiles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -316,7 +316,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_FilesAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllFiles_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 { @@ -324,7 +324,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_FilesAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllFiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -351,7 +351,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_PubKeyAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllPubKeys_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -362,7 +362,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_PubKeyAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllPubKeys_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 { @@ -370,7 +370,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_PubKeyAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllPubKeys_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -435,7 +435,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_Files_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_File_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) @@ -444,18 +444,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Files_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_File_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_Files_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_File_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_FilesAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllFiles_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) @@ -464,14 +464,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_FilesAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllFiles_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_FilesAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllFiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -495,7 +495,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_PubKeyAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllPubKeys_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) @@ -504,14 +504,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_PubKeyAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllPubKeys_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_PubKeyAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllPubKeys_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -519,25 +519,25 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackaldao", "canine", "filetree", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine", "filetree", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Files_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"jackal-dao", "canine-chain", "filetree", "files", "address", "owner_address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_File_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"jackal", "canine-chain", "filetree", "files", "address", "owner_address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_FilesAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "filetree", "files"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "filetree", "files"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_PubKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "filetree", "pubkeys", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_PubKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "filetree", "pubkeys", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_PubKeyAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "filetree", "pubkeys"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllPubKeys_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "filetree", "pubkeys"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_Files_0 = runtime.ForwardResponseMessage + forward_Query_File_0 = runtime.ForwardResponseMessage - forward_Query_FilesAll_0 = runtime.ForwardResponseMessage + forward_Query_AllFiles_0 = runtime.ForwardResponseMessage forward_Query_PubKey_0 = runtime.ForwardResponseMessage - forward_Query_PubKeyAll_0 = runtime.ForwardResponseMessage + forward_Query_AllPubKeys_0 = runtime.ForwardResponseMessage ) diff --git a/x/oracle/types/query.pb.go b/x/oracle/types/query.pb.go index 560a48b93..8e7fe7235 100644 --- a/x/oracle/types/query.pb.go +++ b/x/oracle/types/query.pb.go @@ -303,38 +303,38 @@ func init() { func init() { proto.RegisterFile("canine_chain/oracle/query.proto", fileDescriptor_2a4eedcae49363dd) } var fileDescriptor_2a4eedcae49363dd = []byte{ - // 490 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x3f, 0x6f, 0xd3, 0x40, - 0x18, 0xc6, 0x73, 0x6d, 0x88, 0xe0, 0x58, 0xe0, 0x1a, 0x50, 0x31, 0xc8, 0xad, 0x2c, 0x35, 0x09, - 0x15, 0xb9, 0x53, 0x5a, 0x16, 0x46, 0x3a, 0x00, 0x12, 0x0c, 0x21, 0x23, 0x0b, 0x7a, 0xed, 0x1c, - 0xae, 0xc1, 0xb9, 0x73, 0x7d, 0x0e, 0xa2, 0x42, 0x2c, 0xac, 0x2c, 0x95, 0x10, 0x5f, 0x85, 0xcf, - 0xd0, 0xb1, 0x12, 0x0b, 0x13, 0x42, 0x09, 0x1f, 0x04, 0xdd, 0x1f, 0x83, 0xdb, 0x3a, 0x4a, 0x36, - 0x2b, 0xef, 0xf3, 0x3e, 0xbf, 0xe7, 0xee, 0xb9, 0xe0, 0xad, 0x08, 0x44, 0x22, 0xf8, 0xeb, 0xe8, - 0x10, 0x12, 0xc1, 0x64, 0x0e, 0x51, 0xca, 0xd9, 0xd1, 0x94, 0xe7, 0xc7, 0x34, 0xcb, 0x65, 0x21, - 0xc9, 0x46, 0x55, 0x40, 0xad, 0xc0, 0x6b, 0xc7, 0x32, 0x96, 0x66, 0xce, 0xf4, 0x97, 0x95, 0x7a, - 0xf7, 0x62, 0x29, 0xe3, 0x94, 0x33, 0xc8, 0x12, 0x06, 0x42, 0xc8, 0x02, 0x8a, 0x44, 0x0a, 0xe5, - 0xa6, 0xbb, 0x91, 0x54, 0x13, 0xa9, 0x58, 0x08, 0xca, 0x11, 0xd8, 0xfb, 0x41, 0xc8, 0x0b, 0x18, - 0xb0, 0x0c, 0xe2, 0x44, 0x18, 0xb1, 0xd3, 0x6e, 0xd7, 0xa5, 0xca, 0x20, 0x87, 0x49, 0xe9, 0xe6, - 0xd7, 0x29, 0xde, 0x70, 0x3e, 0xb6, 0xf3, 0xa0, 0x8d, 0xc9, 0x4b, 0xcd, 0x18, 0x9a, 0xa5, 0x11, - 0x3f, 0x9a, 0x72, 0x55, 0x04, 0x43, 0xbc, 0x71, 0xee, 0x57, 0x95, 0x49, 0xa1, 0x38, 0x79, 0x84, - 0x5b, 0xd6, 0x7c, 0x13, 0x6d, 0xa3, 0xde, 0xf5, 0xbd, 0xbb, 0xb4, 0xe6, 0xd0, 0xd4, 0x2e, 0x1d, - 0x34, 0x4f, 0x7f, 0x6d, 0x35, 0x46, 0x6e, 0x21, 0xe8, 0xe0, 0x1b, 0xc6, 0xf1, 0x09, 0xe7, 0x63, - 0x47, 0x21, 0x04, 0x37, 0x05, 0x4c, 0xb8, 0x31, 0xbb, 0x36, 0x32, 0xdf, 0xc1, 0x33, 0x7c, 0xb3, - 0xa2, 0x73, 0xdc, 0x7d, 0xdc, 0xd4, 0x91, 0x1d, 0xf5, 0x4e, 0x2d, 0x55, 0x2f, 0x38, 0xa6, 0x11, - 0x07, 0xb7, 0x71, 0xdb, 0x38, 0x3d, 0x4e, 0x53, 0x3d, 0xfb, 0x77, 0xb6, 0x6f, 0x08, 0xdf, 0xba, - 0x30, 0xb8, 0x84, 0x59, 0x5f, 0x19, 0x43, 0x9e, 0x62, 0xfc, 0xbf, 0x96, 0xcd, 0x35, 0x93, 0xb0, - 0x4b, 0x6d, 0x87, 0x54, 0x77, 0x48, 0xed, 0x2b, 0x71, 0x1d, 0xd2, 0x21, 0xc4, 0xbc, 0x24, 0x8e, - 0x2a, 0xab, 0x7b, 0xdf, 0xd7, 0xf1, 0x15, 0x93, 0x8b, 0x7c, 0x41, 0xb8, 0x65, 0x2f, 0x91, 0x74, - 0x6b, 0x43, 0x5c, 0x6e, 0xcc, 0xeb, 0x2d, 0x17, 0x5a, 0x66, 0x40, 0x3f, 0xff, 0xf8, 0xf3, 0x75, - 0xad, 0x47, 0x3a, 0xec, 0x2d, 0x44, 0xef, 0x20, 0xed, 0x8f, 0x41, 0x32, 0xbb, 0xdc, 0xaf, 0x79, - 0x47, 0x3a, 0x4d, 0x53, 0x9f, 0x9a, 0xec, 0x2c, 0x46, 0x54, 0x5a, 0xf5, 0x3a, 0xcb, 0x64, 0x2e, - 0xc7, 0x43, 0x93, 0x83, 0x92, 0x07, 0xcb, 0x72, 0xe8, 0x6b, 0x56, 0xec, 0xa3, 0x7e, 0x1e, 0x9f, - 0xc8, 0x09, 0xc2, 0x57, 0xcb, 0xe2, 0xc8, 0xfd, 0xc5, 0xa8, 0x0b, 0xad, 0x7b, 0xbb, 0xab, 0x48, - 0x5d, 0xb2, 0xbe, 0x49, 0xd6, 0x25, 0x3b, 0x2b, 0x25, 0x3b, 0x78, 0x7e, 0x3a, 0xf3, 0xd1, 0xd9, - 0xcc, 0x47, 0xbf, 0x67, 0x3e, 0x3a, 0x99, 0xfb, 0x8d, 0xb3, 0xb9, 0xdf, 0xf8, 0x39, 0xf7, 0x1b, - 0xaf, 0x06, 0x71, 0x52, 0x1c, 0x4e, 0x43, 0x1a, 0xc9, 0x89, 0xb3, 0x7a, 0x01, 0xa1, 0x3a, 0x6f, - 0xf5, 0xa1, 0x34, 0x2b, 0x8e, 0x33, 0xae, 0xc2, 0x96, 0xf9, 0x5b, 0xee, 0xff, 0x0d, 0x00, 0x00, - 0xff, 0xff, 0x73, 0x5e, 0xae, 0xea, 0x70, 0x04, 0x00, 0x00, + // 486 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x3d, 0x6f, 0xd4, 0x30, + 0x18, 0x3e, 0xb7, 0xc7, 0x09, 0xcc, 0x02, 0xee, 0x81, 0x4a, 0x40, 0x69, 0x09, 0xd0, 0x5e, 0x4f, + 0xc2, 0xe6, 0xda, 0x89, 0x91, 0x0e, 0x80, 0x04, 0xc3, 0x91, 0x91, 0x05, 0xbd, 0x49, 0x4d, 0x1a, + 0x48, 0xec, 0x34, 0xce, 0x21, 0x2a, 0xc4, 0xc2, 0xc2, 0xc2, 0x80, 0x84, 0xf8, 0x13, 0xfc, 0x92, + 0x8e, 0x95, 0x58, 0x98, 0x10, 0xba, 0xe3, 0x87, 0x20, 0x7f, 0x04, 0xd2, 0x36, 0xe5, 0xba, 0x59, + 0x79, 0x9f, 0x2f, 0xfb, 0x79, 0x83, 0x57, 0x62, 0x10, 0xa9, 0xe0, 0x2f, 0xe2, 0x5d, 0x48, 0x05, + 0x93, 0x25, 0xc4, 0x19, 0x67, 0x7b, 0x13, 0x5e, 0xee, 0xd3, 0xa2, 0x94, 0x95, 0x24, 0x4b, 0x4d, + 0x00, 0xb5, 0x00, 0xaf, 0x9f, 0xc8, 0x44, 0x9a, 0x39, 0xd3, 0x27, 0x0b, 0xf5, 0x6e, 0x24, 0x52, + 0x26, 0x19, 0x67, 0x50, 0xa4, 0x0c, 0x84, 0x90, 0x15, 0x54, 0xa9, 0x14, 0xca, 0x4d, 0x87, 0xb1, + 0x54, 0xb9, 0x54, 0x2c, 0x02, 0xe5, 0x1c, 0xd8, 0x9b, 0x51, 0xc4, 0x2b, 0x18, 0xb1, 0x02, 0x92, + 0x54, 0x18, 0xb0, 0xc3, 0xae, 0xb6, 0xa5, 0x2a, 0xa0, 0x84, 0xbc, 0x56, 0xf3, 0xdb, 0x10, 0x2f, + 0x39, 0xdf, 0xb1, 0xf3, 0xa0, 0x8f, 0xc9, 0x33, 0xed, 0x31, 0x36, 0xa4, 0x90, 0xef, 0x4d, 0xb8, + 0xaa, 0x82, 0x31, 0x5e, 0x3a, 0xf2, 0x55, 0x15, 0x52, 0x28, 0x4e, 0xee, 0xe3, 0x9e, 0x15, 0x5f, + 0x46, 0xab, 0x68, 0x70, 0x71, 0xf3, 0x3a, 0x6d, 0xb9, 0x34, 0xb5, 0xa4, 0xed, 0xee, 0xc1, 0xcf, + 0x95, 0x4e, 0xe8, 0x08, 0xc1, 0x1a, 0xbe, 0x64, 0x14, 0x1f, 0x72, 0xbe, 0xe3, 0x5c, 0x08, 0xc1, + 0x5d, 0x01, 0x39, 0x37, 0x62, 0x17, 0x42, 0x73, 0x0e, 0x1e, 0xe3, 0xcb, 0x0d, 0x9c, 0xf3, 0xdd, + 0xc2, 0x5d, 0x1d, 0xd9, 0xb9, 0x5e, 0x6b, 0x75, 0xd5, 0x04, 0xe7, 0x69, 0xc0, 0xc1, 0x55, 0xdc, + 0x37, 0x4a, 0x0f, 0xb2, 0x4c, 0xcf, 0xfe, 0xde, 0xed, 0x2b, 0xc2, 0x57, 0x8e, 0x0d, 0x4e, 0xd8, + 0x2c, 0x9e, 0xd9, 0x86, 0x3c, 0xc2, 0xf8, 0x5f, 0x2d, 0xcb, 0x0b, 0x26, 0xe1, 0x3a, 0xb5, 0x1d, + 0x52, 0xdd, 0x21, 0xb5, 0x5b, 0xe2, 0x3a, 0xa4, 0x63, 0x48, 0x78, 0xed, 0x18, 0x36, 0xa8, 0x9b, + 0xdf, 0x16, 0xf1, 0x39, 0x93, 0x8b, 0x7c, 0x44, 0xb8, 0x67, 0x1f, 0x91, 0xac, 0xb7, 0x86, 0x38, + 0xd9, 0x98, 0x37, 0x98, 0x0f, 0xb4, 0x9e, 0xc1, 0xf0, 0xc3, 0xf7, 0xdf, 0x5f, 0x16, 0x6e, 0x93, + 0x80, 0xbd, 0x82, 0xf8, 0x35, 0x64, 0xcc, 0x12, 0xef, 0xb6, 0xec, 0x90, 0x4e, 0xd2, 0xd5, 0x37, + 0x26, 0x77, 0x4e, 0x97, 0x6f, 0x34, 0xea, 0xad, 0xcd, 0x83, 0xb9, 0x0c, 0xf7, 0x4c, 0x86, 0x21, + 0x19, 0xfc, 0x2f, 0x83, 0x7e, 0x5e, 0xc5, 0xde, 0xe9, 0xb5, 0x78, 0x4f, 0x3e, 0x21, 0x7c, 0xbe, + 0x2e, 0x8c, 0x6c, 0x9c, 0x6e, 0x73, 0xac, 0x6d, 0x6f, 0x78, 0x16, 0xa8, 0x4b, 0xb5, 0x61, 0x52, + 0xdd, 0x22, 0x37, 0xe7, 0xa6, 0xda, 0x7e, 0x72, 0x30, 0xf5, 0xd1, 0xe1, 0xd4, 0x47, 0xbf, 0xa6, + 0x3e, 0xfa, 0x3c, 0xf3, 0x3b, 0x87, 0x33, 0xbf, 0xf3, 0x63, 0xe6, 0x77, 0x9e, 0x8f, 0x92, 0xb4, + 0xda, 0x9d, 0x44, 0x34, 0x96, 0xb9, 0x93, 0x79, 0x0a, 0x91, 0x3a, 0x2a, 0xf5, 0xb6, 0x16, 0xab, + 0xf6, 0x0b, 0xae, 0xa2, 0x9e, 0xf9, 0x15, 0xb7, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x1c, + 0xe8, 0xe1, 0x64, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/oracle/types/query.pb.gw.go b/x/oracle/types/query.pb.gw.go index 4d115f3f3..45bfb94c5 100644 --- a/x/oracle/types/query.pb.gw.go +++ b/x/oracle/types/query.pb.gw.go @@ -303,11 +303,11 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "oracle", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "oracle", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Feed_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "oracle", "feeds", "name"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Feed_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "oracle", "feeds", "name"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AllFeeds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "oracle", "feeds"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllFeeds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "oracle", "feeds"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/rns/client/cli/query_bids.go b/x/rns/client/cli/query_bids.go index 8ea2c8497..a3b8a061a 100644 --- a/x/rns/client/cli/query_bids.go +++ b/x/rns/client/cli/query_bids.go @@ -27,7 +27,7 @@ func CmdListBids() *cobra.Command { Pagination: pageReq, } - res, err := queryClient.BidsAll(context.Background(), params) + res, err := queryClient.AllBids(context.Background(), params) if err != nil { return err } @@ -58,7 +58,7 @@ func CmdShowBids() *cobra.Command { Index: argIndex, } - res, err := queryClient.Bids(context.Background(), params) + res, err := queryClient.Bid(context.Background(), params) if err != nil { return err } diff --git a/x/rns/client/cli/query_forsale.go b/x/rns/client/cli/query_forsale.go index 88c02395a..067b00c98 100644 --- a/x/rns/client/cli/query_forsale.go +++ b/x/rns/client/cli/query_forsale.go @@ -23,11 +23,11 @@ func CmdListForsale() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllForSalesRequest{ + params := &types.QueryAllForSaleRequest{ Pagination: pageReq, } - res, err := queryClient.ForSaleAll(context.Background(), params) + res, err := queryClient.AllForSale(context.Background(), params) if err != nil { return err } diff --git a/x/rns/client/cli/query_init.go b/x/rns/client/cli/query_init.go index 8b3b77f8a..2b00bc385 100644 --- a/x/rns/client/cli/query_init.go +++ b/x/rns/client/cli/query_init.go @@ -27,7 +27,7 @@ func CmdListInit() *cobra.Command { Pagination: pageReq, } - res, err := queryClient.InitAll(context.Background(), params) + res, err := queryClient.AllInits(context.Background(), params) if err != nil { return err } diff --git a/x/rns/client/cli/query_names.go b/x/rns/client/cli/query_names.go index c66d7c868..7a10e59e0 100644 --- a/x/rns/client/cli/query_names.go +++ b/x/rns/client/cli/query_names.go @@ -27,7 +27,7 @@ func CmdListNames() *cobra.Command { Pagination: pageReq, } - res, err := queryClient.NamesAll(context.Background(), params) + res, err := queryClient.AllNames(context.Background(), params) if err != nil { return err } @@ -58,7 +58,7 @@ func CmdShowNames() *cobra.Command { Index: argIndex, } - res, err := queryClient.Names(context.Background(), params) + res, err := queryClient.Name(context.Background(), params) if err != nil { return err } diff --git a/x/rns/keeper/bidding_test.go b/x/rns/keeper/bidding_test.go index cbea23ea1..a0867224d 100644 --- a/x/rns/keeper/bidding_test.go +++ b/x/rns/keeper/bidding_test.go @@ -68,9 +68,9 @@ func (suite *KeeperTestSuite) TestMsgAcceptBid() { Index: TestName, } - res, err := suite.queryClient.Names(suite.ctx.Context(), &nameReq) + res, err := suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) - suite.Require().Equal(res.Names.Value, address.String()) + suite.Require().Equal(res.Name.Value, address.String()) } func (suite *KeeperTestSuite) TestMsgMakeBid() { @@ -107,7 +107,7 @@ func (suite *KeeperTestSuite) TestMsgMakeBid() { var leftover int64 = 1000 suite.Require().Equal(newamt.Int64(), leftover) // cost them the amount they bid - _, err = suite.queryClient.Bids(suite.ctx.Context(), &bidReq) + _, err = suite.queryClient.Bid(suite.ctx.Context(), &bidReq) suite.Require().NoError(err) } @@ -145,7 +145,7 @@ func (suite *KeeperTestSuite) TestMsgCancelBid() { var leftover int64 = 1000 // they spent 1000ujkl so they should have 1000ujkl less suite.Require().Equal(newamt.Int64(), leftover) // cost them the amount they bid - _, err = suite.queryClient.Bids(suite.ctx.Context(), &bidReq) + _, err = suite.queryClient.Bid(suite.ctx.Context(), &bidReq) suite.Require().NoError(err) err = suite.rnsKeeper.CancelOneBid(suite.ctx, address.String(), TestName) @@ -158,6 +158,6 @@ func (suite *KeeperTestSuite) TestMsgCancelBid() { leftover = 0 // they cancelled the bid and thus should receive their money back suite.Require().Equal(newamt.Int64(), leftover) // cost them the amount they bid - _, err = suite.queryClient.Bids(suite.ctx.Context(), &bidReq) + _, err = suite.queryClient.Bid(suite.ctx.Context(), &bidReq) suite.Require().Error(err) } diff --git a/x/rns/keeper/grpc_query_bids.go b/x/rns/keeper/grpc_query_bids.go index e97097852..8615ab09e 100644 --- a/x/rns/keeper/grpc_query_bids.go +++ b/x/rns/keeper/grpc_query_bids.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) BidsAll(c context.Context, req *types.QueryAllBidsRequest) (*types.QueryAllBidsResponse, error) { +func (k Keeper) AllBids(c context.Context, req *types.QueryAllBidsRequest) (*types.QueryAllBidsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) BidsAll(c context.Context, req *types.QueryAllBidsRequest) (*typ return &types.QueryAllBidsResponse{Bids: bidss, Pagination: pageRes}, nil } -func (k Keeper) Bids(c context.Context, req *types.QueryBidRequest) (*types.QueryBidResponse, error) { +func (k Keeper) Bid(c context.Context, req *types.QueryBidRequest) (*types.QueryBidResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/rns/keeper/grpc_query_forsale.go b/x/rns/keeper/grpc_query_forsale.go index 7b9c52f60..ab094f4db 100644 --- a/x/rns/keeper/grpc_query_forsale.go +++ b/x/rns/keeper/grpc_query_forsale.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) ForSaleAll(c context.Context, req *types.QueryAllForSalesRequest) (*types.QueryAllForSalesResponse, error) { +func (k Keeper) AllForSale(c context.Context, req *types.QueryAllForSaleRequest) (*types.QueryAllForSaleResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -35,7 +35,7 @@ func (k Keeper) ForSaleAll(c context.Context, req *types.QueryAllForSalesRequest return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryAllForSalesResponse{ForSale: forsales, Pagination: pageRes}, nil + return &types.QueryAllForSaleResponse{ForSale: forsales, Pagination: pageRes}, nil } func (k Keeper) ForSale(c context.Context, req *types.QueryForSaleRequest) (*types.QueryForSaleResponse, error) { diff --git a/x/rns/keeper/grpc_query_init.go b/x/rns/keeper/grpc_query_init.go index c7fb4ae37..b9c4b80da 100644 --- a/x/rns/keeper/grpc_query_init.go +++ b/x/rns/keeper/grpc_query_init.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) InitAll(c context.Context, req *types.QueryAllInitsRequest) (*types.QueryAllInitsResponse, error) { +func (k Keeper) AllInits(c context.Context, req *types.QueryAllInitsRequest) (*types.QueryAllInitsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/rns/keeper/grpc_query_names.go b/x/rns/keeper/grpc_query_names.go index 213220293..140e4a7ac 100644 --- a/x/rns/keeper/grpc_query_names.go +++ b/x/rns/keeper/grpc_query_names.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) NamesAll(c context.Context, req *types.QueryAllNamesRequest) (*types.QueryAllNamesResponse, error) { +func (k Keeper) AllNames(c context.Context, req *types.QueryAllNamesRequest) (*types.QueryAllNamesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -35,10 +35,10 @@ func (k Keeper) NamesAll(c context.Context, req *types.QueryAllNamesRequest) (*t return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryAllNamesResponse{Names: namess, Pagination: pageRes}, nil + return &types.QueryAllNamesResponse{Name: namess, Pagination: pageRes}, nil } -func (k Keeper) Names(c context.Context, req *types.QueryNameRequest) (*types.QueryNameResponse, error) { +func (k Keeper) Name(c context.Context, req *types.QueryNameRequest) (*types.QueryNameResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -63,10 +63,10 @@ func (k Keeper) Names(c context.Context, req *types.QueryNameRequest) (*types.Qu if hasSub { for _, domain := range val.Subdomains { if domain.Name == sub { - return &types.QueryNameResponse{Names: *domain}, nil + return &types.QueryNameResponse{Name: *domain}, nil } } } - return &types.QueryNameResponse{Names: val}, nil + return &types.QueryNameResponse{Name: val}, nil } diff --git a/x/rns/keeper/grpc_query_whois.go b/x/rns/keeper/grpc_query_whois.go deleted file mode 100644 index a8f9440b8..000000000 --- a/x/rns/keeper/grpc_query_whois.go +++ /dev/null @@ -1,56 +0,0 @@ -package keeper - -import ( - "context" - - "github.com/cosmos/cosmos-sdk/store/prefix" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" - "github.com/jackalLabs/canine-chain/v3/x/rns/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func (k Keeper) WhoisAll(c context.Context, req *types.QueryAllWhoisRequest) (*types.QueryAllWhoisResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - - var whoiss []types.Whois - ctx := sdk.UnwrapSDKContext(c) - - store := ctx.KVStore(k.storeKey) - whoisStore := prefix.NewStore(store, types.KeyPrefix(types.WhoisKeyPrefix)) - - pageRes, err := query.Paginate(whoisStore, req.Pagination, func(key []byte, value []byte) error { - var whois types.Whois - if err := k.cdc.Unmarshal(value, &whois); err != nil { - return err - } - - whoiss = append(whoiss, whois) - return nil - }) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) - } - - return &types.QueryAllWhoisResponse{Whois: whoiss, Pagination: pageRes}, nil -} - -func (k Keeper) Whois(c context.Context, req *types.QueryWhoisRequest) (*types.QueryWhoisResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "invalid request") - } - ctx := sdk.UnwrapSDKContext(c) - - val, found := k.GetWhois( - ctx, - req.Index, - ) - if !found { - return nil, status.Error(codes.NotFound, "not found") - } - - return &types.QueryWhoisResponse{Whois: val}, nil -} diff --git a/x/rns/keeper/keeper_test.go b/x/rns/keeper/keeper_test.go index d7bddbfff..f7c869567 100644 --- a/x/rns/keeper/keeper_test.go +++ b/x/rns/keeper/keeper_test.go @@ -110,7 +110,7 @@ func (suite *KeeperTestSuite) TestMakeBid() { Index: fmt.Sprintf("%s%s", address.String(), name), } - _, err = suite.queryClient.Bids(suite.ctx.Context(), &bidReq) + _, err = suite.queryClient.Bid(suite.ctx.Context(), &bidReq) suite.Require().NoError(err) } @@ -141,16 +141,16 @@ func (suite *KeeperTestSuite) TestUpdateName() { Index: "validname.jkl", } - _, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) + _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) newData := "{\"A\":\"192.168.0.1\"}" name.Data = newData suite.rnsKeeper.SetNames(suite.ctx, name) - res, err := suite.queryClient.Names(suite.ctx.Context(), &nameReq) + res, err := suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) - suite.Require().Equal(res.Names.Data, newData) + suite.Require().Equal(res.Name.Data, newData) } func (suite *KeeperTestSuite) TestRemoveName() { @@ -180,12 +180,12 @@ func (suite *KeeperTestSuite) TestRemoveName() { Index: "validname.jkl", } - _, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) + _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) suite.rnsKeeper.RemoveNames(suite.ctx, "validname", "jkl") - _, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) + _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().Error(err) } @@ -216,7 +216,7 @@ func (suite *KeeperTestSuite) TestSetName() { Index: "validname.jkl", } - _, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) + _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) badname := types.Names{ @@ -233,7 +233,7 @@ func (suite *KeeperTestSuite) TestSetName() { nameReq = types.QueryNameRequest{ Index: "badname.jkl", } - _, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) + _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().Error(err) } diff --git a/x/rns/keeper/register_test.go b/x/rns/keeper/register_test.go index f36fed57e..4af635fa9 100644 --- a/x/rns/keeper/register_test.go +++ b/x/rns/keeper/register_test.go @@ -49,7 +49,7 @@ func (suite *KeeperTestSuite) TestMsgRegisterName() { leftover := 2 * cost suite.Require().Equal(leftover, newamt.Int64()) // cost them the price of the registration - _, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) + _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) err = suite.rnsKeeper.RegisterName(suite.ctx, address.String(), capname, "{}", 2) // adding time to registration @@ -61,6 +61,6 @@ func (suite *KeeperTestSuite) TestMsgRegisterName() { newamt = amt.Sub(newamt) suite.Require().Equal(leftover, newamt.Int64()) // cost them the price of the registration - _, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) + _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) } diff --git a/x/rns/keeper/transfer_test.go b/x/rns/keeper/transfer_test.go index 0d96b42b7..7fec90775 100644 --- a/x/rns/keeper/transfer_test.go +++ b/x/rns/keeper/transfer_test.go @@ -50,20 +50,20 @@ func (suite *KeeperTestSuite) TestMsgTransfer() { leftover := cost * 2 suite.Require().Equal(newamt.Int64(), leftover) // cost them the amount they bid - _, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) + _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) err = suite.rnsKeeper.TransferName(suite.ctx, address.String(), receiver.String(), name) // will pass as the user owns the name suite.Require().NoError(err) - res, err := suite.queryClient.Names(suite.ctx.Context(), &nameReq) + res, err := suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) - suite.Require().Equal(res.Names.Value, receiver.String()) + suite.Require().Equal(res.Name.Value, receiver.String()) err = suite.rnsKeeper.TransferName(suite.ctx, address.String(), receiver.String(), name) // should fail sending a name from an address that doesn't have ownership suite.Require().Error(err) - res, err = suite.queryClient.Names(suite.ctx.Context(), &nameReq) + res, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().NoError(err) - suite.Require().Equal(res.Names.Value, receiver.String()) + suite.Require().Equal(res.Name.Value, receiver.String()) } diff --git a/x/rns/simulation/cancel_bid.go b/x/rns/simulation/cancel_bid.go index 7e7f482d7..4fcf3475d 100644 --- a/x/rns/simulation/cancel_bid.go +++ b/x/rns/simulation/cancel_bid.go @@ -22,7 +22,7 @@ func SimulateMsgCancelBid( // choosing a random account with a bid open nreq := &types.QueryAllBidsRequest{} wctx := sdk.WrapSDKContext(ctx) - allBidsResp, err := k.BidsAll(wctx, nreq) + allBidsResp, err := k.AllBids(wctx, nreq) if err != nil { return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCancelBid, "Unable to collect bids"), nil, err } diff --git a/x/rns/types/query.pb.go b/x/rns/types/query.pb.go index f4c14c69f..0ec3ece9d 100644 --- a/x/rns/types/query.pb.go +++ b/x/rns/types/query.pb.go @@ -113,190 +113,6 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -type QueryWhoisRequest struct { - Index string `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` -} - -func (m *QueryWhoisRequest) Reset() { *m = QueryWhoisRequest{} } -func (m *QueryWhoisRequest) String() string { return proto.CompactTextString(m) } -func (*QueryWhoisRequest) ProtoMessage() {} -func (*QueryWhoisRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{2} -} -func (m *QueryWhoisRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryWhoisRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryWhoisRequest.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 *QueryWhoisRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryWhoisRequest.Merge(m, src) -} -func (m *QueryWhoisRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryWhoisRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryWhoisRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryWhoisRequest proto.InternalMessageInfo - -func (m *QueryWhoisRequest) GetIndex() string { - if m != nil { - return m.Index - } - return "" -} - -type QueryWhoisResponse struct { - Whois Whois `protobuf:"bytes,1,opt,name=whois,proto3" json:"whois"` -} - -func (m *QueryWhoisResponse) Reset() { *m = QueryWhoisResponse{} } -func (m *QueryWhoisResponse) String() string { return proto.CompactTextString(m) } -func (*QueryWhoisResponse) ProtoMessage() {} -func (*QueryWhoisResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{3} -} -func (m *QueryWhoisResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryWhoisResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryWhoisResponse.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 *QueryWhoisResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryWhoisResponse.Merge(m, src) -} -func (m *QueryWhoisResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryWhoisResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryWhoisResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryWhoisResponse proto.InternalMessageInfo - -func (m *QueryWhoisResponse) GetWhois() Whois { - if m != nil { - return m.Whois - } - return Whois{} -} - -type QueryAllWhoisRequest struct { - Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryAllWhoisRequest) Reset() { *m = QueryAllWhoisRequest{} } -func (m *QueryAllWhoisRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllWhoisRequest) ProtoMessage() {} -func (*QueryAllWhoisRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{4} -} -func (m *QueryAllWhoisRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryAllWhoisRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryAllWhoisRequest.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 *QueryAllWhoisRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllWhoisRequest.Merge(m, src) -} -func (m *QueryAllWhoisRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryAllWhoisRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllWhoisRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryAllWhoisRequest proto.InternalMessageInfo - -func (m *QueryAllWhoisRequest) GetPagination() *query.PageRequest { - if m != nil { - return m.Pagination - } - return nil -} - -type QueryAllWhoisResponse struct { - Whois []Whois `protobuf:"bytes,1,rep,name=whois,proto3" json:"whois"` - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryAllWhoisResponse) Reset() { *m = QueryAllWhoisResponse{} } -func (m *QueryAllWhoisResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllWhoisResponse) ProtoMessage() {} -func (*QueryAllWhoisResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{5} -} -func (m *QueryAllWhoisResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryAllWhoisResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryAllWhoisResponse.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 *QueryAllWhoisResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllWhoisResponse.Merge(m, src) -} -func (m *QueryAllWhoisResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryAllWhoisResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllWhoisResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryAllWhoisResponse proto.InternalMessageInfo - -func (m *QueryAllWhoisResponse) GetWhois() []Whois { - if m != nil { - return m.Whois - } - return nil -} - -func (m *QueryAllWhoisResponse) GetPagination() *query.PageResponse { - if m != nil { - return m.Pagination - } - return nil -} - type QueryNameRequest struct { Index string `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` } @@ -305,7 +121,7 @@ func (m *QueryNameRequest) Reset() { *m = QueryNameRequest{} } func (m *QueryNameRequest) String() string { return proto.CompactTextString(m) } func (*QueryNameRequest) ProtoMessage() {} func (*QueryNameRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{6} + return fileDescriptor_8561b6b36d651aba, []int{2} } func (m *QueryNameRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -342,14 +158,14 @@ func (m *QueryNameRequest) GetIndex() string { } type QueryNameResponse struct { - Names Names `protobuf:"bytes,1,opt,name=names,proto3" json:"names"` + Name Names `protobuf:"bytes,1,opt,name=name,proto3" json:"name"` } func (m *QueryNameResponse) Reset() { *m = QueryNameResponse{} } func (m *QueryNameResponse) String() string { return proto.CompactTextString(m) } func (*QueryNameResponse) ProtoMessage() {} func (*QueryNameResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{7} + return fileDescriptor_8561b6b36d651aba, []int{3} } func (m *QueryNameResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -378,9 +194,9 @@ func (m *QueryNameResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryNameResponse proto.InternalMessageInfo -func (m *QueryNameResponse) GetNames() Names { +func (m *QueryNameResponse) GetName() Names { if m != nil { - return m.Names + return m.Name } return Names{} } @@ -393,7 +209,7 @@ func (m *QueryAllNamesRequest) Reset() { *m = QueryAllNamesRequest{} } func (m *QueryAllNamesRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllNamesRequest) ProtoMessage() {} func (*QueryAllNamesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{8} + return fileDescriptor_8561b6b36d651aba, []int{4} } func (m *QueryAllNamesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -430,7 +246,7 @@ func (m *QueryAllNamesRequest) GetPagination() *query.PageRequest { } type QueryAllNamesResponse struct { - Names []Names `protobuf:"bytes,1,rep,name=names,proto3" json:"names"` + Name []Names `protobuf:"bytes,1,rep,name=name,proto3" json:"name"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } @@ -438,7 +254,7 @@ func (m *QueryAllNamesResponse) Reset() { *m = QueryAllNamesResponse{} } func (m *QueryAllNamesResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllNamesResponse) ProtoMessage() {} func (*QueryAllNamesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{9} + return fileDescriptor_8561b6b36d651aba, []int{5} } func (m *QueryAllNamesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -467,9 +283,9 @@ func (m *QueryAllNamesResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryAllNamesResponse proto.InternalMessageInfo -func (m *QueryAllNamesResponse) GetNames() []Names { +func (m *QueryAllNamesResponse) GetName() []Names { if m != nil { - return m.Names + return m.Name } return nil } @@ -489,7 +305,7 @@ func (m *QueryBidRequest) Reset() { *m = QueryBidRequest{} } func (m *QueryBidRequest) String() string { return proto.CompactTextString(m) } func (*QueryBidRequest) ProtoMessage() {} func (*QueryBidRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{10} + return fileDescriptor_8561b6b36d651aba, []int{6} } func (m *QueryBidRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -533,7 +349,7 @@ func (m *QueryBidResponse) Reset() { *m = QueryBidResponse{} } func (m *QueryBidResponse) String() string { return proto.CompactTextString(m) } func (*QueryBidResponse) ProtoMessage() {} func (*QueryBidResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{11} + return fileDescriptor_8561b6b36d651aba, []int{7} } func (m *QueryBidResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -577,7 +393,7 @@ func (m *QueryAllBidsRequest) Reset() { *m = QueryAllBidsRequest{} } func (m *QueryAllBidsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllBidsRequest) ProtoMessage() {} func (*QueryAllBidsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{12} + return fileDescriptor_8561b6b36d651aba, []int{8} } func (m *QueryAllBidsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -622,7 +438,7 @@ func (m *QueryAllBidsResponse) Reset() { *m = QueryAllBidsResponse{} } func (m *QueryAllBidsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllBidsResponse) ProtoMessage() {} func (*QueryAllBidsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{13} + return fileDescriptor_8561b6b36d651aba, []int{9} } func (m *QueryAllBidsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -673,7 +489,7 @@ func (m *QueryForSaleRequest) Reset() { *m = QueryForSaleRequest{} } func (m *QueryForSaleRequest) String() string { return proto.CompactTextString(m) } func (*QueryForSaleRequest) ProtoMessage() {} func (*QueryForSaleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{14} + return fileDescriptor_8561b6b36d651aba, []int{10} } func (m *QueryForSaleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -717,7 +533,7 @@ func (m *QueryForSaleResponse) Reset() { *m = QueryForSaleResponse{} } func (m *QueryForSaleResponse) String() string { return proto.CompactTextString(m) } func (*QueryForSaleResponse) ProtoMessage() {} func (*QueryForSaleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{15} + return fileDescriptor_8561b6b36d651aba, []int{11} } func (m *QueryForSaleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -753,22 +569,22 @@ func (m *QueryForSaleResponse) GetForSale() Forsale { return Forsale{} } -type QueryAllForSalesRequest struct { +type QueryAllForSaleRequest struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllForSalesRequest) Reset() { *m = QueryAllForSalesRequest{} } -func (m *QueryAllForSalesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllForSalesRequest) ProtoMessage() {} -func (*QueryAllForSalesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{16} +func (m *QueryAllForSaleRequest) Reset() { *m = QueryAllForSaleRequest{} } +func (m *QueryAllForSaleRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllForSaleRequest) ProtoMessage() {} +func (*QueryAllForSaleRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8561b6b36d651aba, []int{12} } -func (m *QueryAllForSalesRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllForSaleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllForSalesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllForSaleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllForSalesRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllForSaleRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -778,42 +594,42 @@ func (m *QueryAllForSalesRequest) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QueryAllForSalesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllForSalesRequest.Merge(m, src) +func (m *QueryAllForSaleRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllForSaleRequest.Merge(m, src) } -func (m *QueryAllForSalesRequest) XXX_Size() int { +func (m *QueryAllForSaleRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllForSalesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllForSalesRequest.DiscardUnknown(m) +func (m *QueryAllForSaleRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllForSaleRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllForSalesRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllForSaleRequest proto.InternalMessageInfo -func (m *QueryAllForSalesRequest) GetPagination() *query.PageRequest { +func (m *QueryAllForSaleRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllForSalesResponse struct { +type QueryAllForSaleResponse struct { ForSale []Forsale `protobuf:"bytes,1,rep,name=for_sale,json=forSale,proto3" json:"for_sale"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllForSalesResponse) Reset() { *m = QueryAllForSalesResponse{} } -func (m *QueryAllForSalesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllForSalesResponse) ProtoMessage() {} -func (*QueryAllForSalesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{17} +func (m *QueryAllForSaleResponse) Reset() { *m = QueryAllForSaleResponse{} } +func (m *QueryAllForSaleResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllForSaleResponse) ProtoMessage() {} +func (*QueryAllForSaleResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8561b6b36d651aba, []int{13} } -func (m *QueryAllForSalesResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllForSaleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllForSalesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllForSaleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllForSalesResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllForSaleResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -823,26 +639,26 @@ func (m *QueryAllForSalesResponse) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *QueryAllForSalesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllForSalesResponse.Merge(m, src) +func (m *QueryAllForSaleResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllForSaleResponse.Merge(m, src) } -func (m *QueryAllForSalesResponse) XXX_Size() int { +func (m *QueryAllForSaleResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllForSalesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllForSalesResponse.DiscardUnknown(m) +func (m *QueryAllForSaleResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllForSaleResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllForSalesResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllForSaleResponse proto.InternalMessageInfo -func (m *QueryAllForSalesResponse) GetForSale() []Forsale { +func (m *QueryAllForSaleResponse) GetForSale() []Forsale { if m != nil { return m.ForSale } return nil } -func (m *QueryAllForSalesResponse) GetPagination() *query.PageResponse { +func (m *QueryAllForSaleResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } @@ -857,7 +673,7 @@ func (m *QueryInitRequest) Reset() { *m = QueryInitRequest{} } func (m *QueryInitRequest) String() string { return proto.CompactTextString(m) } func (*QueryInitRequest) ProtoMessage() {} func (*QueryInitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{18} + return fileDescriptor_8561b6b36d651aba, []int{14} } func (m *QueryInitRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -901,7 +717,7 @@ func (m *QueryInitResponse) Reset() { *m = QueryInitResponse{} } func (m *QueryInitResponse) String() string { return proto.CompactTextString(m) } func (*QueryInitResponse) ProtoMessage() {} func (*QueryInitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{19} + return fileDescriptor_8561b6b36d651aba, []int{15} } func (m *QueryInitResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -945,7 +761,7 @@ func (m *QueryAllInitsRequest) Reset() { *m = QueryAllInitsRequest{} } func (m *QueryAllInitsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllInitsRequest) ProtoMessage() {} func (*QueryAllInitsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{20} + return fileDescriptor_8561b6b36d651aba, []int{16} } func (m *QueryAllInitsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -990,7 +806,7 @@ func (m *QueryAllInitsResponse) Reset() { *m = QueryAllInitsResponse{} } func (m *QueryAllInitsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllInitsResponse) ProtoMessage() {} func (*QueryAllInitsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{21} + return fileDescriptor_8561b6b36d651aba, []int{17} } func (m *QueryAllInitsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1042,7 +858,7 @@ func (m *QueryListOwnedNamesRequest) Reset() { *m = QueryListOwnedNamesR func (m *QueryListOwnedNamesRequest) String() string { return proto.CompactTextString(m) } func (*QueryListOwnedNamesRequest) ProtoMessage() {} func (*QueryListOwnedNamesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{22} + return fileDescriptor_8561b6b36d651aba, []int{18} } func (m *QueryListOwnedNamesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1094,7 +910,7 @@ func (m *QueryListOwnedNamesResponse) Reset() { *m = QueryListOwnedNames func (m *QueryListOwnedNamesResponse) String() string { return proto.CompactTextString(m) } func (*QueryListOwnedNamesResponse) ProtoMessage() {} func (*QueryListOwnedNamesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_8561b6b36d651aba, []int{23} + return fileDescriptor_8561b6b36d651aba, []int{19} } func (m *QueryListOwnedNamesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1140,10 +956,6 @@ func (m *QueryListOwnedNamesResponse) GetPagination() *query.PageResponse { func init() { proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.rns.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.rns.QueryParamsResponse") - proto.RegisterType((*QueryWhoisRequest)(nil), "canine_chain.rns.QueryWhoisRequest") - proto.RegisterType((*QueryWhoisResponse)(nil), "canine_chain.rns.QueryWhoisResponse") - proto.RegisterType((*QueryAllWhoisRequest)(nil), "canine_chain.rns.QueryAllWhoisRequest") - proto.RegisterType((*QueryAllWhoisResponse)(nil), "canine_chain.rns.QueryAllWhoisResponse") proto.RegisterType((*QueryNameRequest)(nil), "canine_chain.rns.QueryNameRequest") proto.RegisterType((*QueryNameResponse)(nil), "canine_chain.rns.QueryNameResponse") proto.RegisterType((*QueryAllNamesRequest)(nil), "canine_chain.rns.QueryAllNamesRequest") @@ -1154,8 +966,8 @@ func init() { proto.RegisterType((*QueryAllBidsResponse)(nil), "canine_chain.rns.QueryAllBidsResponse") proto.RegisterType((*QueryForSaleRequest)(nil), "canine_chain.rns.QueryForSaleRequest") proto.RegisterType((*QueryForSaleResponse)(nil), "canine_chain.rns.QueryForSaleResponse") - proto.RegisterType((*QueryAllForSalesRequest)(nil), "canine_chain.rns.QueryAllForSalesRequest") - proto.RegisterType((*QueryAllForSalesResponse)(nil), "canine_chain.rns.QueryAllForSalesResponse") + proto.RegisterType((*QueryAllForSaleRequest)(nil), "canine_chain.rns.QueryAllForSaleRequest") + proto.RegisterType((*QueryAllForSaleResponse)(nil), "canine_chain.rns.QueryAllForSaleResponse") proto.RegisterType((*QueryInitRequest)(nil), "canine_chain.rns.QueryInitRequest") proto.RegisterType((*QueryInitResponse)(nil), "canine_chain.rns.QueryInitResponse") proto.RegisterType((*QueryAllInitsRequest)(nil), "canine_chain.rns.QueryAllInitsRequest") @@ -1167,72 +979,69 @@ func init() { func init() { proto.RegisterFile("canine_chain/rns/query.proto", fileDescriptor_8561b6b36d651aba) } var fileDescriptor_8561b6b36d651aba = []byte{ - // 1027 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x97, 0x41, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0x33, 0x89, 0x13, 0x87, 0x57, 0x09, 0xca, 0x10, 0x68, 0xd8, 0x16, 0x43, 0x37, 0x4d, - 0x5c, 0x27, 0xf1, 0x2e, 0x49, 0x10, 0x08, 0x2e, 0x28, 0x11, 0x0a, 0xad, 0x54, 0xa0, 0x98, 0x03, - 0x12, 0x12, 0x44, 0x63, 0x7b, 0xe3, 0x2c, 0xac, 0x77, 0xdc, 0xdd, 0x0d, 0x6d, 0x15, 0x05, 0xa1, - 0x02, 0xe2, 0x82, 0x10, 0x14, 0x71, 0xe2, 0xc0, 0x37, 0xe0, 0x73, 0xf4, 0x18, 0x89, 0x0b, 0x27, - 0x84, 0x12, 0x3e, 0x08, 0x9a, 0x37, 0x6f, 0xed, 0x5d, 0x6f, 0x76, 0x6d, 0x90, 0x91, 0x7a, 0xb3, - 0x33, 0xff, 0x79, 0xef, 0x37, 0xff, 0x37, 0xf3, 0x9e, 0x03, 0x57, 0x5a, 0xc2, 0x77, 0x7d, 0x67, - 0xaf, 0x75, 0x20, 0x5c, 0xdf, 0x0e, 0xfc, 0xd0, 0xbe, 0x73, 0xe8, 0x04, 0xf7, 0xad, 0x5e, 0x20, - 0x23, 0xc9, 0x2f, 0x26, 0x57, 0xad, 0xc0, 0x0f, 0x8d, 0x85, 0x8e, 0xec, 0x48, 0x5c, 0xb4, 0xd5, - 0x27, 0xad, 0x33, 0xae, 0x74, 0xa4, 0xec, 0x78, 0x8e, 0x2d, 0x7a, 0xae, 0x2d, 0x7c, 0x5f, 0x46, - 0x22, 0x72, 0xa5, 0x1f, 0xd2, 0xea, 0x6a, 0x4b, 0x86, 0x5d, 0x19, 0xda, 0x4d, 0x11, 0x3a, 0x3a, - 0xbc, 0xfd, 0xf9, 0x46, 0xd3, 0x89, 0xc4, 0x86, 0xdd, 0x13, 0x1d, 0xd7, 0x47, 0x31, 0x69, 0x5f, - 0xc8, 0xf0, 0xf4, 0x44, 0x20, 0xba, 0x71, 0xa8, 0x2c, 0xee, 0xdd, 0x03, 0xe9, 0xe6, 0xaf, 0xfa, - 0xa2, 0xeb, 0xc4, 0xab, 0x97, 0x33, 0xab, 0x4d, 0xb7, 0x1d, 0x2f, 0x56, 0x32, 0x8b, 0xfb, 0x32, - 0x08, 0x85, 0xe7, 0xe4, 0x6e, 0x76, 0x7d, 0x37, 0xd2, 0x8b, 0xe6, 0x02, 0xf0, 0xf7, 0xd5, 0xb1, - 0x6e, 0x23, 0x6a, 0xc3, 0xb9, 0x73, 0xe8, 0x84, 0x91, 0xf9, 0x0e, 0x3c, 0x93, 0xfa, 0x6b, 0xd8, - 0x93, 0x7e, 0xe8, 0xf0, 0x57, 0x61, 0x4e, 0x1f, 0x69, 0x91, 0xbd, 0xc4, 0xae, 0x5f, 0xd8, 0x5c, - 0xb4, 0x86, 0x4d, 0xb6, 0xf4, 0x8e, 0x9d, 0xd2, 0xa3, 0x3f, 0x5f, 0x9c, 0x6a, 0x90, 0xda, 0xac, - 0xc1, 0xd3, 0x18, 0xee, 0x43, 0x75, 0x60, 0xca, 0xc1, 0x17, 0x60, 0xd6, 0xf5, 0xdb, 0xce, 0x3d, - 0x8c, 0xf5, 0x44, 0x43, 0x7f, 0x31, 0x6f, 0x12, 0x0f, 0x49, 0x29, 0xf1, 0x16, 0xcc, 0xa2, 0x59, - 0x94, 0xf7, 0x52, 0x36, 0x2f, 0xea, 0x29, 0xad, 0xd6, 0x9a, 0x9f, 0xc0, 0x02, 0x86, 0xda, 0xf6, - 0xbc, 0x54, 0xe2, 0x5d, 0x80, 0x41, 0xed, 0x28, 0xe2, 0x8a, 0xa5, 0x0b, 0x6d, 0xa9, 0x42, 0x5b, - 0xfa, 0x1e, 0x51, 0xa1, 0xad, 0xdb, 0xa2, 0xe3, 0xd0, 0xde, 0x46, 0x62, 0xa7, 0xf9, 0x33, 0x83, - 0x67, 0x87, 0x12, 0x64, 0x71, 0x67, 0xc6, 0xc5, 0xe5, 0x6f, 0xa7, 0xb0, 0xa6, 0x11, 0xab, 0x3a, - 0x12, 0x4b, 0x67, 0x4c, 0x71, 0x5d, 0x87, 0x8b, 0x88, 0xf5, 0xae, 0xe8, 0x3a, 0xc5, 0x66, 0xdf, - 0xa0, 0xba, 0x68, 0xe5, 0x00, 0x1e, 0xaf, 0x5e, 0xbe, 0xd7, 0x4a, 0xde, 0x87, 0x47, 0x6d, 0xd2, - 0x6b, 0x5c, 0xfd, 0x3f, 0xbd, 0xa6, 0x04, 0x59, 0xdc, 0x99, 0x71, 0x71, 0x27, 0xe7, 0x75, 0x15, - 0x9e, 0x42, 0xac, 0x1d, 0xb7, 0x5d, 0x6c, 0xf5, 0x5b, 0x54, 0x14, 0x14, 0x12, 0xfa, 0xcb, 0x50, - 0x52, 0xcf, 0x98, 0x6c, 0x79, 0x2e, 0x4b, 0xbe, 0xe3, 0xb6, 0x63, 0x70, 0x54, 0x9a, 0x1f, 0xd3, - 0xbb, 0xdc, 0xf6, 0x3c, 0xb5, 0x36, 0x69, 0x97, 0x7f, 0x64, 0x83, 0x32, 0xea, 0xf8, 0x19, 0xd2, - 0x99, 0xf1, 0x48, 0x27, 0xe7, 0x70, 0x8d, 0x8e, 0xbc, 0x2b, 0x83, 0x0f, 0x84, 0xd7, 0xbf, 0xd0, - 0x1c, 0x4a, 0xaa, 0x94, 0x64, 0x32, 0x7e, 0x36, 0x1b, 0x44, 0xdf, 0x97, 0x12, 0xfd, 0x1b, 0x30, - 0xbf, 0x2f, 0x83, 0x3d, 0xd5, 0x12, 0xc9, 0x9c, 0xe7, 0xb3, 0x27, 0xd8, 0xd5, 0x3d, 0x93, 0x0e, - 0x51, 0xde, 0xd7, 0x31, 0x4c, 0x01, 0x97, 0x62, 0x47, 0x28, 0xec, 0xc4, 0x5d, 0xff, 0x95, 0xc1, - 0x62, 0x36, 0xc7, 0xb9, 0xec, 0x33, 0xff, 0x86, 0x7d, 0x72, 0x35, 0x58, 0xa7, 0xcb, 0x7b, 0xd3, - 0x77, 0xa3, 0xf8, 0xf4, 0x8b, 0x50, 0x16, 0xed, 0x76, 0xe0, 0x84, 0x21, 0xd5, 0x20, 0xfe, 0x6a, - 0x56, 0xa9, 0xab, 0x68, 0x35, 0x9d, 0x83, 0x43, 0x49, 0x4d, 0x1d, 0xd4, 0xce, 0x37, 0xf0, 0x73, - 0xb2, 0x69, 0x28, 0xed, 0xc4, 0x8d, 0x7d, 0x98, 0x68, 0x1a, 0x94, 0x60, 0x70, 0x9f, 0x89, 0x26, - 0xe7, 0x3e, 0x2b, 0x79, 0x7c, 0x9f, 0x95, 0x72, 0x72, 0x5e, 0x7e, 0x01, 0x06, 0x32, 0xdd, 0x72, - 0xc3, 0xe8, 0xbd, 0xbb, 0xbe, 0xd3, 0x4e, 0xf5, 0xcb, 0x5c, 0x57, 0x87, 0x4c, 0x99, 0xfe, 0xcf, - 0xa6, 0xfc, 0xc2, 0xe0, 0xf2, 0xb9, 0x00, 0x8f, 0x43, 0x3f, 0xdd, 0xfc, 0xee, 0x02, 0xcc, 0x22, - 0x1d, 0x7f, 0xc0, 0x60, 0x4e, 0xff, 0x98, 0xe0, 0xd7, 0xb2, 0x0c, 0xd9, 0xdf, 0x2c, 0xc6, 0xf2, - 0x08, 0x95, 0xce, 0x66, 0xae, 0x3d, 0xf8, 0xfd, 0xef, 0x9f, 0xa6, 0x97, 0xf9, 0x92, 0xfd, 0xa9, - 0x68, 0x7d, 0x26, 0xbc, 0x7a, 0x5b, 0x48, 0x5b, 0xef, 0xac, 0x0f, 0xff, 0x72, 0xe3, 0x5f, 0x33, - 0x98, 0xc5, 0xe3, 0x72, 0x33, 0x27, 0x7a, 0x62, 0xc8, 0x1a, 0x4b, 0x85, 0x1a, 0xca, 0xbf, 0x89, - 0xf9, 0xd7, 0xf9, 0x6a, 0x61, 0x7e, 0xb4, 0xd5, 0x3e, 0xc2, 0xd9, 0x71, 0xcc, 0xbf, 0x65, 0x30, - 0x8f, 0x18, 0xdb, 0x9e, 0xc7, 0x57, 0x72, 0xb2, 0x0c, 0x8d, 0x5e, 0xa3, 0x3a, 0x52, 0x47, 0x44, - 0xab, 0x48, 0x74, 0x8d, 0x9b, 0xa3, 0x89, 0xf8, 0x97, 0x0c, 0x4a, 0xaa, 0xd7, 0xf3, 0xab, 0x39, - 0xd1, 0x07, 0x83, 0xd0, 0x30, 0x8b, 0x24, 0x94, 0x7b, 0x03, 0x73, 0xaf, 0xf1, 0x5a, 0x61, 0x6e, - 0x35, 0x51, 0xfa, 0x66, 0x7c, 0xc5, 0xa0, 0xac, 0x10, 0x94, 0x17, 0xcb, 0xf9, 0x67, 0x4c, 0xcc, - 0x47, 0x63, 0x65, 0x94, 0x8c, 0x68, 0x6a, 0x48, 0xb3, 0xc4, 0xaf, 0x8e, 0xa4, 0xe1, 0xdf, 0x33, - 0x28, 0x53, 0xb3, 0xce, 0xa5, 0x48, 0x8f, 0xac, 0x5c, 0x8a, 0xa1, 0x71, 0x65, 0xbe, 0x82, 0x14, - 0x16, 0x5f, 0x2f, 0xa4, 0x88, 0xa7, 0x82, 0x7d, 0xa4, 0x2a, 0x73, 0xcc, 0x1f, 0x32, 0x00, 0x8a, - 0xa4, 0x9c, 0xa9, 0xe5, 0x1f, 0x79, 0x68, 0x8e, 0x19, 0xab, 0xe3, 0x48, 0x89, 0xad, 0x8e, 0x6c, - 0x55, 0xbe, 0x3c, 0x16, 0x9b, 0x7a, 0x3f, 0x25, 0xd5, 0x4a, 0x73, 0x9f, 0x4f, 0x62, 0xa2, 0xe4, - 0x3e, 0x9f, 0xe4, 0x1c, 0x31, 0xb7, 0x10, 0xa0, 0xce, 0xd7, 0x0a, 0x01, 0x54, 0xcb, 0xb6, 0x8f, - 0xa8, 0x75, 0x1e, 0xf3, 0x6f, 0x18, 0x94, 0x55, 0x94, 0x11, 0xcf, 0x27, 0x39, 0x84, 0x8a, 0x9e, - 0x4f, 0x6a, 0x96, 0x8c, 0x79, 0x69, 0x70, 0x88, 0xfc, 0xc6, 0xe0, 0xc9, 0x74, 0xdb, 0xe5, 0xeb, - 0x39, 0x69, 0xce, 0x1d, 0x0f, 0x46, 0x7d, 0x4c, 0x35, 0xa1, 0xbd, 0x89, 0x68, 0xaf, 0xf3, 0xd7, - 0x0a, 0xd1, 0x3c, 0x37, 0x8c, 0xf6, 0xa4, 0xda, 0xbd, 0x47, 0x6d, 0x27, 0x36, 0x6e, 0xe7, 0xc6, - 0xa3, 0xd3, 0x0a, 0x3b, 0x39, 0xad, 0xb0, 0xbf, 0x4e, 0x2b, 0xec, 0x87, 0xb3, 0xca, 0xd4, 0xc9, - 0x59, 0x65, 0xea, 0x8f, 0xb3, 0xca, 0xd4, 0x47, 0x56, 0xc7, 0x8d, 0x0e, 0x0e, 0x9b, 0x56, 0x4b, - 0x76, 0x29, 0xf8, 0x2d, 0xd1, 0x0c, 0xd3, 0xc1, 0xef, 0x61, 0xf8, 0xe8, 0x7e, 0xcf, 0x09, 0x9b, - 0x73, 0xf8, 0xef, 0xe6, 0xd6, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1e, 0xc0, 0xdd, 0x14, 0xb5, - 0x0f, 0x00, 0x00, + // 980 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x97, 0xcf, 0x6f, 0x1b, 0x45, + 0x14, 0xc7, 0xb3, 0x89, 0xf3, 0xa3, 0x0f, 0x09, 0xca, 0x10, 0xda, 0xb0, 0x6d, 0x37, 0xcd, 0x96, + 0xd8, 0x4e, 0xd5, 0xec, 0x36, 0x8d, 0xe0, 0x00, 0xa7, 0x5a, 0x28, 0x80, 0x54, 0xa0, 0x98, 0x1b, + 0x12, 0x84, 0xb1, 0x77, 0xe3, 0x0c, 0xac, 0x77, 0xdc, 0x9d, 0x0d, 0x6d, 0x15, 0xa5, 0x45, 0xe5, + 0x86, 0x38, 0x00, 0x3d, 0x22, 0xf1, 0x07, 0xf0, 0x97, 0xf4, 0x58, 0x89, 0x0b, 0x17, 0x10, 0x4a, + 0xf8, 0x43, 0xd0, 0xcc, 0xbc, 0x8d, 0xf7, 0x47, 0xc6, 0x36, 0x95, 0x6f, 0x76, 0xe6, 0x3b, 0xef, + 0xfb, 0x99, 0x37, 0x6f, 0xde, 0x8b, 0xe1, 0x72, 0x97, 0xc6, 0x2c, 0x0e, 0x77, 0xbb, 0xfb, 0x94, + 0xc5, 0x7e, 0x12, 0x0b, 0xff, 0xde, 0x41, 0x98, 0x3c, 0xf4, 0x06, 0x09, 0x4f, 0x39, 0x39, 0x9f, + 0x5f, 0xf5, 0x92, 0x58, 0xd8, 0xcb, 0x3d, 0xde, 0xe3, 0x6a, 0xd1, 0x97, 0x9f, 0xb4, 0xce, 0xbe, + 0xdc, 0xe3, 0xbc, 0x17, 0x85, 0x3e, 0x1d, 0x30, 0x9f, 0xc6, 0x31, 0x4f, 0x69, 0xca, 0x78, 0x2c, + 0x70, 0xf5, 0x7a, 0x97, 0x8b, 0x3e, 0x17, 0x7e, 0x87, 0x8a, 0x50, 0x87, 0xf7, 0xbf, 0xdd, 0xea, + 0x84, 0x29, 0xdd, 0xf2, 0x07, 0xb4, 0xc7, 0x62, 0x25, 0x46, 0xed, 0x95, 0x0a, 0xcf, 0x80, 0x26, + 0xb4, 0x9f, 0x85, 0xaa, 0xe2, 0xde, 0xdf, 0xe7, 0xcc, 0xbc, 0x1a, 0xd3, 0x7e, 0x98, 0xad, 0x5e, + 0xaa, 0xac, 0x76, 0x58, 0x90, 0x2d, 0x3a, 0x95, 0xc5, 0x3d, 0x9e, 0x08, 0x1a, 0x85, 0xc6, 0xcd, + 0x2c, 0x66, 0xa9, 0x5e, 0x74, 0x97, 0x81, 0x7c, 0x2a, 0x8f, 0x75, 0x57, 0xa1, 0xb6, 0xc3, 0x7b, + 0x07, 0xa1, 0x48, 0xdd, 0x8f, 0xe0, 0xb5, 0xc2, 0x5f, 0xc5, 0x80, 0xc7, 0x22, 0x24, 0x6f, 0xc3, + 0x82, 0x3e, 0xd2, 0x8a, 0x75, 0xd5, 0x6a, 0xbe, 0x74, 0x6b, 0xc5, 0x2b, 0x27, 0xd9, 0xd3, 0x3b, + 0x5a, 0xb5, 0x67, 0x7f, 0xaf, 0xce, 0xb4, 0x51, 0xed, 0x36, 0xe1, 0xbc, 0x0a, 0xf7, 0x31, 0xed, + 0x87, 0x68, 0x41, 0x96, 0x61, 0x9e, 0xc5, 0x41, 0xf8, 0x40, 0x85, 0x3a, 0xd7, 0xd6, 0x5f, 0xdc, + 0x1d, 0x78, 0x35, 0xa7, 0x44, 0xdb, 0x2d, 0xa8, 0xc9, 0x64, 0xa0, 0xe9, 0xc5, 0xaa, 0xa9, 0x54, + 0x67, 0x9e, 0x4a, 0xea, 0x7e, 0x09, 0xcb, 0x2a, 0xce, 0xed, 0x28, 0x52, 0x8b, 0x99, 0xeb, 0x0e, + 0xc0, 0xf0, 0xde, 0x30, 0x60, 0xdd, 0xd3, 0x97, 0xec, 0xc9, 0x4b, 0xf6, 0x74, 0x0d, 0xe1, 0x25, + 0x7b, 0x77, 0x69, 0x2f, 0x23, 0x6e, 0xe7, 0x76, 0xba, 0x4f, 0x2d, 0x78, 0xbd, 0x64, 0x50, 0x81, + 0x9d, 0x9b, 0x10, 0x96, 0xbc, 0x5f, 0x80, 0x9a, 0x55, 0x50, 0x8d, 0xb1, 0x50, 0xda, 0xaf, 0x40, + 0xd5, 0x80, 0x57, 0x14, 0x54, 0x8b, 0x05, 0xa3, 0xd3, 0xfc, 0x1e, 0x5e, 0x88, 0x12, 0x22, 0xf8, + 0x4d, 0xa8, 0xc9, 0xa2, 0xc2, 0xa4, 0x5c, 0xa8, 0x82, 0xb7, 0x58, 0x70, 0xca, 0x2d, 0x95, 0xee, + 0x17, 0x58, 0x25, 0xb7, 0xa3, 0x48, 0xae, 0x4d, 0x3b, 0xc7, 0x3f, 0x5b, 0xc3, 0x4b, 0xd4, 0xf1, + 0x2b, 0xa4, 0x73, 0x93, 0x91, 0x4e, 0x2f, 0xc3, 0x1b, 0x78, 0xe4, 0x1d, 0x9e, 0x7c, 0x46, 0xa3, + 0xd3, 0x62, 0x26, 0xb9, 0x0a, 0x3d, 0x87, 0x25, 0xd8, 0x46, 0xfa, 0x53, 0x29, 0xd2, 0xbf, 0x03, + 0x4b, 0x7b, 0x3c, 0xd9, 0x95, 0x0f, 0x14, 0x93, 0xf3, 0x46, 0xf5, 0x04, 0x3b, 0xfa, 0x05, 0xe3, + 0x21, 0x16, 0xf7, 0x74, 0x0c, 0xf7, 0x2b, 0xb8, 0x90, 0x65, 0xa4, 0x44, 0x30, 0xad, 0xa4, 0xff, + 0x66, 0xc1, 0xc5, 0x8a, 0xc5, 0x99, 0xe4, 0x73, 0xff, 0x87, 0x7c, 0x7a, 0x37, 0x70, 0x03, 0x4b, + 0xf7, 0xc3, 0x98, 0xa5, 0xd9, 0xe1, 0x57, 0x60, 0x91, 0x06, 0x41, 0x12, 0x0a, 0x81, 0x37, 0x90, + 0x7d, 0x75, 0x1b, 0xd8, 0x4f, 0xb4, 0x1a, 0xcf, 0x41, 0xa0, 0x26, 0x3b, 0xa0, 0xd2, 0x2e, 0xb5, + 0xd5, 0xe7, 0x7c, 0xc3, 0x90, 0xda, 0xa9, 0x17, 0xf3, 0x2f, 0xb9, 0x86, 0x81, 0x06, 0xc3, 0x6a, + 0x46, 0x1a, 0x43, 0x35, 0x4b, 0x79, 0x56, 0xcd, 0x52, 0x39, 0xbd, 0x5c, 0x3e, 0x02, 0x5b, 0x31, + 0xdd, 0x61, 0x22, 0xfd, 0xe4, 0x7e, 0x1c, 0x06, 0x85, 0x5e, 0x69, 0xcc, 0x6a, 0x29, 0x29, 0xb3, + 0x2f, 0x9c, 0x94, 0x5f, 0x2d, 0xb8, 0x74, 0x26, 0x00, 0xa6, 0x66, 0x1b, 0xe6, 0xd5, 0x14, 0x9c, + 0xac, 0x99, 0x6a, 0xed, 0xd4, 0xb2, 0x73, 0xeb, 0x2f, 0x80, 0x79, 0x45, 0x47, 0x1e, 0xc1, 0x82, + 0x9e, 0x6b, 0xe4, 0xcd, 0x2a, 0x42, 0x75, 0x7c, 0xda, 0xeb, 0x63, 0x54, 0xda, 0xcc, 0x6d, 0x3c, + 0xf9, 0xe3, 0xdf, 0xa7, 0xb3, 0x6b, 0x64, 0xd5, 0xff, 0x9a, 0x76, 0xbf, 0xa1, 0x91, 0xaf, 0x77, + 0x6d, 0x96, 0xff, 0x81, 0x20, 0x8f, 0xa1, 0x26, 0x0f, 0x4a, 0x5c, 0x43, 0xdc, 0xdc, 0x5c, 0xb5, + 0xaf, 0x8d, 0xd4, 0xa0, 0xb3, 0xa7, 0x9c, 0x9b, 0xa4, 0x6e, 0x74, 0x56, 0xb9, 0xf4, 0x0f, 0xd5, + 0xb8, 0x38, 0x22, 0xdf, 0x5b, 0xb0, 0x94, 0x4d, 0x3a, 0x52, 0x37, 0x38, 0x94, 0x66, 0xad, 0xdd, + 0x18, 0xab, 0x43, 0x9a, 0xba, 0xa2, 0xb9, 0x4a, 0x9c, 0xd1, 0x34, 0xe4, 0x10, 0xe6, 0x5a, 0x2c, + 0x20, 0x6b, 0x86, 0xb8, 0xc3, 0xa9, 0x67, 0xbb, 0xa3, 0x24, 0xe8, 0xba, 0xa9, 0x5c, 0x1b, 0x64, + 0xdd, 0xe8, 0x2a, 0x47, 0xc7, 0x69, 0x0a, 0x1e, 0xc3, 0x22, 0xce, 0x21, 0xb2, 0x6e, 0x3e, 0x58, + 0x6e, 0x0e, 0xda, 0xf5, 0x71, 0x32, 0x04, 0x59, 0x57, 0x20, 0xab, 0xe4, 0xca, 0x48, 0x10, 0xf2, + 0x83, 0x05, 0x8b, 0xd8, 0x91, 0x8d, 0x04, 0xc5, 0xa1, 0x60, 0x24, 0x28, 0x35, 0x76, 0xf7, 0xa6, + 0x22, 0xb8, 0x4e, 0x9a, 0x46, 0x82, 0xac, 0xef, 0xfb, 0x87, 0xf2, 0x2a, 0x8e, 0xc8, 0x8f, 0x16, + 0xc0, 0x70, 0x42, 0x90, 0xa6, 0xf9, 0xa8, 0x25, 0xa4, 0x8d, 0x09, 0x94, 0x48, 0xb5, 0xa1, 0xa8, + 0xae, 0x91, 0xb5, 0xb1, 0x54, 0xe4, 0x3b, 0x0b, 0x6a, 0xb2, 0x4d, 0x1a, 0x5f, 0x48, 0x6e, 0x5a, + 0x18, 0x5f, 0x48, 0x7e, 0x46, 0xb8, 0xbe, 0x32, 0xdf, 0x20, 0x0d, 0xa3, 0xb9, 0x6c, 0xc5, 0xfe, + 0x21, 0xb6, 0xc4, 0x23, 0xf2, 0x44, 0x3f, 0x11, 0xd5, 0xdb, 0x47, 0x3d, 0x91, 0xfc, 0x74, 0x19, + 0xf5, 0x44, 0x0a, 0x43, 0x62, 0x82, 0x1a, 0x51, 0x93, 0xe1, 0x77, 0x0b, 0x5e, 0x2e, 0xf6, 0x52, + 0x72, 0xc3, 0x60, 0x71, 0x66, 0xcf, 0xb7, 0x37, 0x27, 0x54, 0x23, 0xd6, 0xbb, 0x0a, 0xeb, 0x2d, + 0xb2, 0x6d, 0xc4, 0x8a, 0x98, 0x48, 0x77, 0xb9, 0xdc, 0xb9, 0x8b, 0x2d, 0x25, 0xcb, 0x58, 0xeb, + 0x83, 0x67, 0xc7, 0x8e, 0xf5, 0xfc, 0xd8, 0xb1, 0xfe, 0x39, 0x76, 0xac, 0x9f, 0x4e, 0x9c, 0x99, + 0xe7, 0x27, 0xce, 0xcc, 0x9f, 0x27, 0xce, 0xcc, 0xe7, 0x5e, 0x8f, 0xa5, 0xfb, 0x07, 0x1d, 0xaf, + 0xcb, 0xfb, 0x18, 0xf8, 0x0e, 0xed, 0x88, 0x62, 0xf0, 0x07, 0x2a, 0x7c, 0xfa, 0x70, 0x10, 0x8a, + 0xce, 0x82, 0xfa, 0x2d, 0xb3, 0xfd, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x20, 0xf2, 0x24, 0x56, + 0x12, 0x0e, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1250,21 +1059,21 @@ type QueryClient interface { // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) // Queries a Name by index. - Names(ctx context.Context, in *QueryNameRequest, opts ...grpc.CallOption) (*QueryNameResponse, error) + Name(ctx context.Context, in *QueryNameRequest, opts ...grpc.CallOption) (*QueryNameResponse, error) // Queries a list of Names. - NamesAll(ctx context.Context, in *QueryAllNamesRequest, opts ...grpc.CallOption) (*QueryAllNamesResponse, error) + AllNames(ctx context.Context, in *QueryAllNamesRequest, opts ...grpc.CallOption) (*QueryAllNamesResponse, error) // Queries a Bid by index. - Bids(ctx context.Context, in *QueryBidRequest, opts ...grpc.CallOption) (*QueryBidResponse, error) + Bid(ctx context.Context, in *QueryBidRequest, opts ...grpc.CallOption) (*QueryBidResponse, error) // Queries a list of Bids. - BidsAll(ctx context.Context, in *QueryAllBidsRequest, opts ...grpc.CallOption) (*QueryAllBidsResponse, error) + AllBids(ctx context.Context, in *QueryAllBidsRequest, opts ...grpc.CallOption) (*QueryAllBidsResponse, error) // Queries a Listing by index. ForSale(ctx context.Context, in *QueryForSaleRequest, opts ...grpc.CallOption) (*QueryForSaleResponse, error) // Queries all Listings. - ForSaleAll(ctx context.Context, in *QueryAllForSalesRequest, opts ...grpc.CallOption) (*QueryAllForSalesResponse, error) + AllForSale(ctx context.Context, in *QueryAllForSaleRequest, opts ...grpc.CallOption) (*QueryAllForSaleResponse, error) // Queries a Init by index. Init(ctx context.Context, in *QueryInitRequest, opts ...grpc.CallOption) (*QueryInitResponse, error) // Queries a list of Init items. - InitAll(ctx context.Context, in *QueryAllInitsRequest, opts ...grpc.CallOption) (*QueryAllInitsResponse, error) + AllInits(ctx context.Context, in *QueryAllInitsRequest, opts ...grpc.CallOption) (*QueryAllInitsResponse, error) // Queries a list of ListOwnedNames items. ListOwnedNames(ctx context.Context, in *QueryListOwnedNamesRequest, opts ...grpc.CallOption) (*QueryListOwnedNamesResponse, error) } @@ -1286,36 +1095,36 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } -func (c *queryClient) Names(ctx context.Context, in *QueryNameRequest, opts ...grpc.CallOption) (*QueryNameResponse, error) { +func (c *queryClient) Name(ctx context.Context, in *QueryNameRequest, opts ...grpc.CallOption) (*QueryNameResponse, error) { out := new(QueryNameResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/Names", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/Name", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) NamesAll(ctx context.Context, in *QueryAllNamesRequest, opts ...grpc.CallOption) (*QueryAllNamesResponse, error) { +func (c *queryClient) AllNames(ctx context.Context, in *QueryAllNamesRequest, opts ...grpc.CallOption) (*QueryAllNamesResponse, error) { out := new(QueryAllNamesResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/NamesAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/AllNames", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Bids(ctx context.Context, in *QueryBidRequest, opts ...grpc.CallOption) (*QueryBidResponse, error) { +func (c *queryClient) Bid(ctx context.Context, in *QueryBidRequest, opts ...grpc.CallOption) (*QueryBidResponse, error) { out := new(QueryBidResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/Bids", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/Bid", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) BidsAll(ctx context.Context, in *QueryAllBidsRequest, opts ...grpc.CallOption) (*QueryAllBidsResponse, error) { +func (c *queryClient) AllBids(ctx context.Context, in *QueryAllBidsRequest, opts ...grpc.CallOption) (*QueryAllBidsResponse, error) { out := new(QueryAllBidsResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/BidsAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/AllBids", in, out, opts...) if err != nil { return nil, err } @@ -1331,9 +1140,9 @@ func (c *queryClient) ForSale(ctx context.Context, in *QueryForSaleRequest, opts return out, nil } -func (c *queryClient) ForSaleAll(ctx context.Context, in *QueryAllForSalesRequest, opts ...grpc.CallOption) (*QueryAllForSalesResponse, error) { - out := new(QueryAllForSalesResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/ForSaleAll", in, out, opts...) +func (c *queryClient) AllForSale(ctx context.Context, in *QueryAllForSaleRequest, opts ...grpc.CallOption) (*QueryAllForSaleResponse, error) { + out := new(QueryAllForSaleResponse) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/AllForSale", in, out, opts...) if err != nil { return nil, err } @@ -1349,9 +1158,9 @@ func (c *queryClient) Init(ctx context.Context, in *QueryInitRequest, opts ...gr return out, nil } -func (c *queryClient) InitAll(ctx context.Context, in *QueryAllInitsRequest, opts ...grpc.CallOption) (*QueryAllInitsResponse, error) { +func (c *queryClient) AllInits(ctx context.Context, in *QueryAllInitsRequest, opts ...grpc.CallOption) (*QueryAllInitsResponse, error) { out := new(QueryAllInitsResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/InitAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/AllInits", in, out, opts...) if err != nil { return nil, err } @@ -1372,21 +1181,21 @@ type QueryServer interface { // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) // Queries a Name by index. - Names(context.Context, *QueryNameRequest) (*QueryNameResponse, error) + Name(context.Context, *QueryNameRequest) (*QueryNameResponse, error) // Queries a list of Names. - NamesAll(context.Context, *QueryAllNamesRequest) (*QueryAllNamesResponse, error) + AllNames(context.Context, *QueryAllNamesRequest) (*QueryAllNamesResponse, error) // Queries a Bid by index. - Bids(context.Context, *QueryBidRequest) (*QueryBidResponse, error) + Bid(context.Context, *QueryBidRequest) (*QueryBidResponse, error) // Queries a list of Bids. - BidsAll(context.Context, *QueryAllBidsRequest) (*QueryAllBidsResponse, error) + AllBids(context.Context, *QueryAllBidsRequest) (*QueryAllBidsResponse, error) // Queries a Listing by index. ForSale(context.Context, *QueryForSaleRequest) (*QueryForSaleResponse, error) // Queries all Listings. - ForSaleAll(context.Context, *QueryAllForSalesRequest) (*QueryAllForSalesResponse, error) + AllForSale(context.Context, *QueryAllForSaleRequest) (*QueryAllForSaleResponse, error) // Queries a Init by index. Init(context.Context, *QueryInitRequest) (*QueryInitResponse, error) // Queries a list of Init items. - InitAll(context.Context, *QueryAllInitsRequest) (*QueryAllInitsResponse, error) + AllInits(context.Context, *QueryAllInitsRequest) (*QueryAllInitsResponse, error) // Queries a list of ListOwnedNames items. ListOwnedNames(context.Context, *QueryListOwnedNamesRequest) (*QueryListOwnedNamesResponse, error) } @@ -1398,29 +1207,29 @@ type UnimplementedQueryServer struct { func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) Names(ctx context.Context, req *QueryNameRequest) (*QueryNameResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Names not implemented") +func (*UnimplementedQueryServer) Name(ctx context.Context, req *QueryNameRequest) (*QueryNameResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Name not implemented") } -func (*UnimplementedQueryServer) NamesAll(ctx context.Context, req *QueryAllNamesRequest) (*QueryAllNamesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method NamesAll not implemented") +func (*UnimplementedQueryServer) AllNames(ctx context.Context, req *QueryAllNamesRequest) (*QueryAllNamesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllNames not implemented") } -func (*UnimplementedQueryServer) Bids(ctx context.Context, req *QueryBidRequest) (*QueryBidResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Bids not implemented") +func (*UnimplementedQueryServer) Bid(ctx context.Context, req *QueryBidRequest) (*QueryBidResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Bid not implemented") } -func (*UnimplementedQueryServer) BidsAll(ctx context.Context, req *QueryAllBidsRequest) (*QueryAllBidsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BidsAll not implemented") +func (*UnimplementedQueryServer) AllBids(ctx context.Context, req *QueryAllBidsRequest) (*QueryAllBidsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllBids not implemented") } func (*UnimplementedQueryServer) ForSale(ctx context.Context, req *QueryForSaleRequest) (*QueryForSaleResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ForSale not implemented") } -func (*UnimplementedQueryServer) ForSaleAll(ctx context.Context, req *QueryAllForSalesRequest) (*QueryAllForSalesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ForSaleAll not implemented") +func (*UnimplementedQueryServer) AllForSale(ctx context.Context, req *QueryAllForSaleRequest) (*QueryAllForSaleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllForSale not implemented") } func (*UnimplementedQueryServer) Init(ctx context.Context, req *QueryInitRequest) (*QueryInitResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Init not implemented") } -func (*UnimplementedQueryServer) InitAll(ctx context.Context, req *QueryAllInitsRequest) (*QueryAllInitsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method InitAll not implemented") +func (*UnimplementedQueryServer) AllInits(ctx context.Context, req *QueryAllInitsRequest) (*QueryAllInitsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllInits not implemented") } func (*UnimplementedQueryServer) ListOwnedNames(ctx context.Context, req *QueryListOwnedNamesRequest) (*QueryListOwnedNamesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListOwnedNames not implemented") @@ -1448,74 +1257,74 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf return interceptor(ctx, in, info, handler) } -func _Query_Names_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_Name_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryNameRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Names(ctx, in) + return srv.(QueryServer).Name(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Query/Names", + FullMethod: "/canine_chain.rns.Query/Name", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Names(ctx, req.(*QueryNameRequest)) + return srv.(QueryServer).Name(ctx, req.(*QueryNameRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_NamesAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_AllNames_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllNamesRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).NamesAll(ctx, in) + return srv.(QueryServer).AllNames(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Query/NamesAll", + FullMethod: "/canine_chain.rns.Query/AllNames", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).NamesAll(ctx, req.(*QueryAllNamesRequest)) + return srv.(QueryServer).AllNames(ctx, req.(*QueryAllNamesRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Bids_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_Bid_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryBidRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Bids(ctx, in) + return srv.(QueryServer).Bid(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Query/Bids", + FullMethod: "/canine_chain.rns.Query/Bid", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Bids(ctx, req.(*QueryBidRequest)) + return srv.(QueryServer).Bid(ctx, req.(*QueryBidRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_BidsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_AllBids_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllBidsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).BidsAll(ctx, in) + return srv.(QueryServer).AllBids(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Query/BidsAll", + FullMethod: "/canine_chain.rns.Query/AllBids", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).BidsAll(ctx, req.(*QueryAllBidsRequest)) + return srv.(QueryServer).AllBids(ctx, req.(*QueryAllBidsRequest)) } return interceptor(ctx, in, info, handler) } @@ -1538,20 +1347,20 @@ func _Query_ForSale_Handler(srv interface{}, ctx context.Context, dec func(inter return interceptor(ctx, in, info, handler) } -func _Query_ForSaleAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllForSalesRequest) +func _Query_AllForSale_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllForSaleRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ForSaleAll(ctx, in) + return srv.(QueryServer).AllForSale(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Query/ForSaleAll", + FullMethod: "/canine_chain.rns.Query/AllForSale", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ForSaleAll(ctx, req.(*QueryAllForSalesRequest)) + return srv.(QueryServer).AllForSale(ctx, req.(*QueryAllForSaleRequest)) } return interceptor(ctx, in, info, handler) } @@ -1574,20 +1383,20 @@ func _Query_Init_Handler(srv interface{}, ctx context.Context, dec func(interfac return interceptor(ctx, in, info, handler) } -func _Query_InitAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_AllInits_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllInitsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).InitAll(ctx, in) + return srv.(QueryServer).AllInits(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Query/InitAll", + FullMethod: "/canine_chain.rns.Query/AllInits", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).InitAll(ctx, req.(*QueryAllInitsRequest)) + return srv.(QueryServer).AllInits(ctx, req.(*QueryAllInitsRequest)) } return interceptor(ctx, in, info, handler) } @@ -1619,36 +1428,36 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_Params_Handler, }, { - MethodName: "Names", - Handler: _Query_Names_Handler, + MethodName: "Name", + Handler: _Query_Name_Handler, }, { - MethodName: "NamesAll", - Handler: _Query_NamesAll_Handler, + MethodName: "AllNames", + Handler: _Query_AllNames_Handler, }, { - MethodName: "Bids", - Handler: _Query_Bids_Handler, + MethodName: "Bid", + Handler: _Query_Bid_Handler, }, { - MethodName: "BidsAll", - Handler: _Query_BidsAll_Handler, + MethodName: "AllBids", + Handler: _Query_AllBids_Handler, }, { MethodName: "ForSale", Handler: _Query_ForSale_Handler, }, { - MethodName: "ForSaleAll", - Handler: _Query_ForSaleAll_Handler, + MethodName: "AllForSale", + Handler: _Query_AllForSale_Handler, }, { MethodName: "Init", Handler: _Query_Init_Handler, }, { - MethodName: "InitAll", - Handler: _Query_InitAll_Handler, + MethodName: "AllInits", + Handler: _Query_AllInits_Handler, }, { MethodName: "ListOwnedNames", @@ -1715,7 +1524,7 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryWhoisRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryNameRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1725,12 +1534,12 @@ func (m *QueryWhoisRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryWhoisRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryNameRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryWhoisRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryNameRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1745,7 +1554,7 @@ func (m *QueryWhoisRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryWhoisResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryNameResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1755,18 +1564,18 @@ func (m *QueryWhoisResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryWhoisResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryNameResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryWhoisResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryNameResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Whois.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Name.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1778,7 +1587,7 @@ func (m *QueryWhoisResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllWhoisRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllNamesRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1788,12 +1597,12 @@ func (m *QueryAllWhoisRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllWhoisRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllNamesRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllWhoisRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllNamesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1813,7 +1622,7 @@ func (m *QueryAllWhoisRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllWhoisResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllNamesResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1823,12 +1632,12 @@ func (m *QueryAllWhoisResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllWhoisResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllNamesResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllWhoisResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllNamesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1845,10 +1654,10 @@ func (m *QueryAllWhoisResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - if len(m.Whois) > 0 { - for iNdEx := len(m.Whois) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Name) > 0 { + for iNdEx := len(m.Name) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Whois[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Name[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1862,7 +1671,7 @@ func (m *QueryAllWhoisResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryNameRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryBidRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1872,12 +1681,12 @@ func (m *QueryNameRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryNameRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryBidRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryNameRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryBidRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1892,7 +1701,7 @@ func (m *QueryNameRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryNameResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryBidResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1902,18 +1711,18 @@ func (m *QueryNameResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryNameResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryBidResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryNameResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryBidResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Names.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Bids.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1925,7 +1734,7 @@ func (m *QueryNameResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllNamesRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllBidsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1935,12 +1744,12 @@ func (m *QueryAllNamesRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllNamesRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllBidsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllNamesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllBidsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1960,7 +1769,7 @@ func (m *QueryAllNamesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllNamesResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllBidsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1970,12 +1779,12 @@ func (m *QueryAllNamesResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllNamesResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllBidsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllNamesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllBidsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1992,10 +1801,10 @@ func (m *QueryAllNamesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - if len(m.Names) > 0 { - for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Bids) > 0 { + for iNdEx := len(m.Bids) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Names[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Bids[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2009,7 +1818,7 @@ func (m *QueryAllNamesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryBidRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryForSaleRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2019,27 +1828,27 @@ func (m *QueryBidRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryBidRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryForSaleRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryBidRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryForSaleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Index) > 0 { - i -= len(m.Index) - copy(dAtA[i:], m.Index) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Index))) + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Name))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryBidResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryForSaleResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2049,18 +1858,18 @@ func (m *QueryBidResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryBidResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryForSaleResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryBidResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryForSaleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Bids.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ForSale.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2072,7 +1881,7 @@ func (m *QueryBidResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllBidsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllForSaleRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2082,12 +1891,12 @@ func (m *QueryAllBidsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllBidsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllForSaleRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllBidsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllForSaleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2107,7 +1916,7 @@ func (m *QueryAllBidsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllBidsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllForSaleResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2117,12 +1926,12 @@ func (m *QueryAllBidsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllBidsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllForSaleResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllBidsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllForSaleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2139,10 +1948,10 @@ func (m *QueryAllBidsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x12 } - if len(m.Bids) > 0 { - for iNdEx := len(m.Bids) - 1; iNdEx >= 0; iNdEx-- { + if len(m.ForSale) > 0 { + for iNdEx := len(m.ForSale) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Bids[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ForSale[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -2156,7 +1965,7 @@ func (m *QueryAllBidsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryForSaleRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryInitRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2166,27 +1975,27 @@ func (m *QueryForSaleRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryForSaleRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryInitRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryForSaleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryInitRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Name))) + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryForSaleResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryInitResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2196,159 +2005,12 @@ func (m *QueryForSaleResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryForSaleResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryInitResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryForSaleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.ForSale.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryAllForSalesRequest) 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 *QueryAllForSalesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryAllForSalesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryAllForSalesResponse) 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 *QueryAllForSalesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryAllForSalesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.ForSale) > 0 { - for iNdEx := len(m.ForSale) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.ForSale[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueryInitRequest) 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 *QueryInitRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryInitRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryInitResponse) 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 *QueryInitResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2572,62 +2234,6 @@ func (m *QueryParamsResponse) Size() (n int) { return n } -func (m *QueryWhoisRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Index) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryWhoisResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Whois.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryAllWhoisRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryAllWhoisResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Whois) > 0 { - for _, e := range m.Whois { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - func (m *QueryNameRequest) Size() (n int) { if m == nil { return 0 @@ -2647,7 +2253,7 @@ func (m *QueryNameResponse) Size() (n int) { } var l int _ = l - l = m.Names.Size() + l = m.Name.Size() n += 1 + l + sovQuery(uint64(l)) return n } @@ -2671,8 +2277,8 @@ func (m *QueryAllNamesResponse) Size() (n int) { } var l int _ = l - if len(m.Names) > 0 { - for _, e := range m.Names { + if len(m.Name) > 0 { + for _, e := range m.Name { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -2764,7 +2370,7 @@ func (m *QueryForSaleResponse) Size() (n int) { return n } -func (m *QueryAllForSalesRequest) Size() (n int) { +func (m *QueryAllForSaleRequest) Size() (n int) { if m == nil { return 0 } @@ -2777,7 +2383,7 @@ func (m *QueryAllForSalesRequest) Size() (n int) { return n } -func (m *QueryAllForSalesResponse) Size() (n int) { +func (m *QueryAllForSaleResponse) Size() (n int) { if m == nil { return 0 } @@ -3028,7 +2634,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryWhoisRequest) Unmarshal(dAtA []byte) error { +func (m *QueryNameRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3051,10 +2657,10 @@ func (m *QueryWhoisRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryWhoisRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryNameRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryWhoisRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryNameRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3110,7 +2716,7 @@ func (m *QueryWhoisRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryWhoisResponse) Unmarshal(dAtA []byte) error { +func (m *QueryNameResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3133,15 +2739,15 @@ func (m *QueryWhoisResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryWhoisResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryNameResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryWhoisResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryNameResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Whois", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3168,7 +2774,7 @@ func (m *QueryWhoisResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Whois.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Name.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3193,7 +2799,7 @@ func (m *QueryWhoisResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllWhoisRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllNamesRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3216,10 +2822,10 @@ func (m *QueryAllWhoisRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllWhoisRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllNamesRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllWhoisRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllNamesRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3279,7 +2885,7 @@ func (m *QueryAllWhoisRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllWhoisResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllNamesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3302,49 +2908,15 @@ func (m *QueryAllWhoisResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllWhoisResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllNamesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllWhoisResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllNamesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Whois", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Whois = append(m.Whois, Whois{}) - if err := m.Whois[len(m.Whois)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3371,345 +2943,8 @@ func (m *QueryAllWhoisResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryNameRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryNameRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryNameRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Index = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryNameResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryNameResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryNameResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Names.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryAllNamesRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryAllNamesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllNamesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryAllNamesResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryAllNamesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllNamesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Names = append(m.Names, Names{}) - if err := m.Names[len(m.Names)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Name = append(m.Name, Names{}) + if err := m.Name[len(m.Name)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4306,7 +3541,7 @@ func (m *QueryForSaleResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllForSalesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllForSaleRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4329,10 +3564,10 @@ func (m *QueryAllForSalesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllForSalesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllForSaleRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllForSalesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllForSaleRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4392,7 +3627,7 @@ func (m *QueryAllForSalesRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllForSalesResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllForSaleResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4415,10 +3650,10 @@ func (m *QueryAllForSalesResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllForSalesResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllForSaleResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllForSalesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllForSaleResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/x/rns/types/query.pb.gw.go b/x/rns/types/query.pb.gw.go index e137d0402..ac9568d78 100644 --- a/x/rns/types/query.pb.gw.go +++ b/x/rns/types/query.pb.gw.go @@ -51,7 +51,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } -func request_Query_Names_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_Name_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryNameRequest var metadata runtime.ServerMetadata @@ -73,12 +73,12 @@ func request_Query_Names_0(ctx context.Context, marshaler runtime.Marshaler, cli return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "index", err) } - msg, err := client.Names(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.Name(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Names_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_Name_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryNameRequest var metadata runtime.ServerMetadata @@ -100,48 +100,48 @@ func local_request_Query_Names_0(ctx context.Context, marshaler runtime.Marshale return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "index", err) } - msg, err := server.Names(ctx, &protoReq) + msg, err := server.Name(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_NamesAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllNames_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_NamesAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_AllNames_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllNamesRequest 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_NamesAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllNames_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.NamesAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllNames(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_NamesAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_AllNames_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllNamesRequest 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_NamesAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllNames_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.NamesAll(ctx, &protoReq) + msg, err := server.AllNames(ctx, &protoReq) return msg, metadata, err } -func request_Query_Bids_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_Bid_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryBidRequest var metadata runtime.ServerMetadata @@ -163,12 +163,12 @@ func request_Query_Bids_0(ctx context.Context, marshaler runtime.Marshaler, clie return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "index", err) } - msg, err := client.Bids(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.Bid(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Bids_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_Bid_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryBidRequest var metadata runtime.ServerMetadata @@ -190,43 +190,43 @@ func local_request_Query_Bids_0(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "index", err) } - msg, err := server.Bids(ctx, &protoReq) + msg, err := server.Bid(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_BidsAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllBids_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_BidsAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_AllBids_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllBidsRequest 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_BidsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllBids_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.BidsAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllBids(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_BidsAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_AllBids_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllBidsRequest 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_BidsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllBids_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.BidsAll(ctx, &protoReq) + msg, err := server.AllBids(ctx, &protoReq) return msg, metadata, err } @@ -286,37 +286,37 @@ func local_request_Query_ForSale_0(ctx context.Context, marshaler runtime.Marsha } var ( - filter_Query_ForSaleAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllForSale_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_ForSaleAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllForSalesRequest +func request_Query_AllForSale_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllForSaleRequest 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_ForSaleAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllForSale_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ForSaleAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllForSale(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ForSaleAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllForSalesRequest +func local_request_Query_AllForSale_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllForSaleRequest 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_ForSaleAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllForSale_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ForSaleAll(ctx, &protoReq) + msg, err := server.AllForSale(ctx, &protoReq) return msg, metadata, err } @@ -376,37 +376,37 @@ func local_request_Query_Init_0(ctx context.Context, marshaler runtime.Marshaler } var ( - filter_Query_InitAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllInits_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_InitAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_AllInits_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllInitsRequest 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_InitAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllInits_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.InitAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllInits(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_InitAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_AllInits_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllInitsRequest 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_InitAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllInits_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.InitAll(ctx, &protoReq) + msg, err := server.AllInits(ctx, &protoReq) return msg, metadata, err } @@ -512,7 +512,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_Names_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Name_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -523,7 +523,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Names_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Name_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 { @@ -531,11 +531,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Names_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Name_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_NamesAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllNames_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -546,7 +546,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_NamesAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllNames_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 { @@ -554,11 +554,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_NamesAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllNames_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Bids_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Bid_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -569,7 +569,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Bids_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Bid_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 { @@ -577,11 +577,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Bids_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Bid_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_BidsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllBids_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -592,7 +592,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_BidsAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllBids_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 { @@ -600,7 +600,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_BidsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllBids_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -627,7 +627,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_ForSaleAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllForSale_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -638,7 +638,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ForSaleAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllForSale_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 { @@ -646,7 +646,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ForSaleAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllForSale_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -673,7 +673,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_InitAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllInits_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -684,7 +684,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_InitAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllInits_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 { @@ -692,7 +692,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_InitAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllInits_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -780,7 +780,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_Names_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Name_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) @@ -789,18 +789,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Names_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Name_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_Names_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Name_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_NamesAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllNames_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) @@ -809,18 +809,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_NamesAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllNames_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_NamesAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllNames_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Bids_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Bid_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) @@ -829,18 +829,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Bids_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Bid_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_Bids_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Bid_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_BidsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllBids_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) @@ -849,14 +849,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_BidsAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllBids_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_BidsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllBids_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -880,7 +880,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_ForSaleAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllForSale_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) @@ -889,14 +889,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ForSaleAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllForSale_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_ForSaleAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllForSale_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -920,7 +920,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_InitAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllInits_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) @@ -929,14 +929,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_InitAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllInits_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_InitAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllInits_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -964,45 +964,45 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "rns", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "rns", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Names_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "rns", "names", "index"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Name_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "rns", "names", "index"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_NamesAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "rns", "names"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllNames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "rns", "names"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Bids_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "rns", "bids", "index"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Bid_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "rns", "bids", "index"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_BidsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "rns", "bids"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllBids_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "rns", "bids"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ForSale_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "rns", "for_sale", "name"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ForSale_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "rns", "for_sale", "name"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ForSaleAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "rns", "for_sale"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllForSale_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "rns", "for_sale"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Init_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "rns", "init", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Init_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "rns", "init", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_InitAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "rns", "init"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllInits_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "rns", "init"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ListOwnedNames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "rns", "list_owned_names", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ListOwnedNames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "rns", "list_owned_names", "address"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_Names_0 = runtime.ForwardResponseMessage + forward_Query_Name_0 = runtime.ForwardResponseMessage - forward_Query_NamesAll_0 = runtime.ForwardResponseMessage + forward_Query_AllNames_0 = runtime.ForwardResponseMessage - forward_Query_Bids_0 = runtime.ForwardResponseMessage + forward_Query_Bid_0 = runtime.ForwardResponseMessage - forward_Query_BidsAll_0 = runtime.ForwardResponseMessage + forward_Query_AllBids_0 = runtime.ForwardResponseMessage forward_Query_ForSale_0 = runtime.ForwardResponseMessage - forward_Query_ForSaleAll_0 = runtime.ForwardResponseMessage + forward_Query_AllForSale_0 = runtime.ForwardResponseMessage forward_Query_Init_0 = runtime.ForwardResponseMessage - forward_Query_InitAll_0 = runtime.ForwardResponseMessage + forward_Query_AllInits_0 = runtime.ForwardResponseMessage forward_Query_ListOwnedNames_0 = runtime.ForwardResponseMessage ) diff --git a/x/storage/client/cli/query_active_deals.go b/x/storage/client/cli/query_active_deals.go index 9939ab12c..1dc0d8a26 100644 --- a/x/storage/client/cli/query_active_deals.go +++ b/x/storage/client/cli/query_active_deals.go @@ -29,7 +29,7 @@ func CmdListActiveDeals() *cobra.Command { Pagination: pageReq, } - res, err := queryClient.FilesAll(context.Background(), params) + res, err := queryClient.AllFiles(context.Background(), params) if err != nil { return err } diff --git a/x/storage/client/cli/query_attest.go b/x/storage/client/cli/query_attest.go index 8b0a9dc98..6248b10c8 100644 --- a/x/storage/client/cli/query_attest.go +++ b/x/storage/client/cli/query_attest.go @@ -29,7 +29,7 @@ func CmdListAttestForms() *cobra.Command { Pagination: pageReq, } - res, err := queryClient.AttestationsAll(context.Background(), params) + res, err := queryClient.AllAttestations(context.Background(), params) if err != nil { return err } @@ -103,11 +103,11 @@ func CmdListReportForms() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllReportRequest{ + params := &types.QueryAllReportsRequest{ Pagination: pageReq, } - res, err := queryClient.ReportsAll(context.Background(), params) + res, err := queryClient.AllReports(context.Background(), params) if err != nil { return err } @@ -153,7 +153,7 @@ func CmdShowReportForms() *cobra.Command { Start: start, } - res, err := queryClient.Reports(context.Background(), params) + res, err := queryClient.Report(context.Background(), params) if err != nil { return err } diff --git a/x/storage/client/cli/query_freespace.go b/x/storage/client/cli/query_freespace.go index 5751cfaaf..ea5d9d3a2 100644 --- a/x/storage/client/cli/query_freespace.go +++ b/x/storage/client/cli/query_freespace.go @@ -30,7 +30,7 @@ func CmdFreespace() *cobra.Command { Address: reqAddress, } - res, err := queryClient.Freespace(cmd.Context(), params) + res, err := queryClient.FreeSpace(cmd.Context(), params) if err != nil { return err } diff --git a/x/storage/client/cli/query_miners.go b/x/storage/client/cli/query_miners.go index efc8edcf8..8691f1e9b 100644 --- a/x/storage/client/cli/query_miners.go +++ b/x/storage/client/cli/query_miners.go @@ -27,7 +27,7 @@ func CmdListProviders() *cobra.Command { Pagination: pageReq, } - res, err := queryClient.ProvidersAll(context.Background(), params) + res, err := queryClient.AllProviders(context.Background(), params) if err != nil { return err } @@ -82,7 +82,7 @@ func CmdShowProviders() *cobra.Command { Address: argAddress, } - res, err := queryClient.Providers(context.Background(), params) + res, err := queryClient.Provider(context.Background(), params) if err != nil { return err } diff --git a/x/storage/client/cli/query_payment_info.go b/x/storage/client/cli/query_payment_info.go index e1b20a365..2fc2cdc9f 100644 --- a/x/storage/client/cli/query_payment_info.go +++ b/x/storage/client/cli/query_payment_info.go @@ -27,7 +27,7 @@ func CmdListStoragePaymentInfo() *cobra.Command { Pagination: pageReq, } - res, err := queryClient.StoragePaymentInfoAll(context.Background(), params) + res, err := queryClient.AllStoragePaymentInfo(context.Background(), params) if err != nil { return err } diff --git a/x/storage/client/cli/tx_post_file.go b/x/storage/client/cli/tx_post_file.go index c958e0275..0dda89d98 100644 --- a/x/storage/client/cli/tx_post_file.go +++ b/x/storage/client/cli/tx_post_file.go @@ -284,7 +284,7 @@ func CmdPostFile() *cobra.Command { Pagination: pageReq, } - provRes, err := cl.ProvidersAll(context.Background(), &provReq) + provRes, err := cl.AllProviders(context.Background(), &provReq) if err != nil { panic(err) } diff --git a/x/storage/keeper/grpc_query_active_deals.go b/x/storage/keeper/grpc_query_active_deals.go index 40df8e146..5b4764f8d 100644 --- a/x/storage/keeper/grpc_query_active_deals.go +++ b/x/storage/keeper/grpc_query_active_deals.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) FilesAll(c context.Context, req *types.QueryAllFilesRequest) (*types.QueryAllFilesResponse, error) { +func (k Keeper) AllFiles(c context.Context, req *types.QueryAllFilesRequest) (*types.QueryAllFilesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -116,7 +116,7 @@ func (k Keeper) Proof(c context.Context, req *types.QueryProofRequest) (*types.Q return &types.QueryProofResponse{Proof: val}, nil } -func (k Keeper) ProofsAll(c context.Context, req *types.QueryProofsByAddressRequest) (*types.QueryProofsByAddressResponse, error) { +func (k Keeper) AllProofs(c context.Context, req *types.QueryProofsByAddressRequest) (*types.QueryProofsByAddressResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_attestation.go b/x/storage/keeper/grpc_query_attestation.go index 2f158a739..9cdffb8e2 100644 --- a/x/storage/keeper/grpc_query_attestation.go +++ b/x/storage/keeper/grpc_query_attestation.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AttestationsAll(c context.Context, req *types.QueryAllAttestationsRequest) (*types.QueryAllAttestationsResponse, error) { +func (k Keeper) AllAttestations(c context.Context, req *types.QueryAllAttestationsRequest) (*types.QueryAllAttestationsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_freespace.go b/x/storage/keeper/grpc_query_freespace.go index 010fbe6bd..38b2ba790 100644 --- a/x/storage/keeper/grpc_query_freespace.go +++ b/x/storage/keeper/grpc_query_freespace.go @@ -10,7 +10,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) Freespace(goCtx context.Context, req *types.QueryFreeSpaceRequest) (*types.QueryFreeSpaceResponse, error) { +func (k Keeper) FreeSpace(goCtx context.Context, req *types.QueryFreeSpaceRequest) (*types.QueryFreeSpaceResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_payment_info.go b/x/storage/keeper/grpc_query_payment_info.go index 93b422553..383f30a7d 100644 --- a/x/storage/keeper/grpc_query_payment_info.go +++ b/x/storage/keeper/grpc_query_payment_info.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) StoragePaymentInfoAll(c context.Context, req *types.QueryAllStoragePaymentInfoRequest) (*types.QueryAllStoragePaymentInfoResponse, error) { +func (k Keeper) AllStoragePaymentInfo(c context.Context, req *types.QueryAllStoragePaymentInfoRequest) (*types.QueryAllStoragePaymentInfoResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_providers.go b/x/storage/keeper/grpc_query_providers.go index 5c99fef6b..f358a622c 100644 --- a/x/storage/keeper/grpc_query_providers.go +++ b/x/storage/keeper/grpc_query_providers.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) ProvidersAll(c context.Context, req *types.QueryAllProvidersRequest) (*types.QueryAllProvidersResponse, error) { +func (k Keeper) AllProviders(c context.Context, req *types.QueryAllProvidersRequest) (*types.QueryAllProvidersResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) ProvidersAll(c context.Context, req *types.QueryAllProvidersRequ return &types.QueryAllProvidersResponse{Providers: providerss, Pagination: pageRes}, nil } -func (k Keeper) Providers(c context.Context, req *types.QueryProviderRequest) (*types.QueryProviderResponse, error) { +func (k Keeper) Provider(c context.Context, req *types.QueryProviderRequest) (*types.QueryProviderResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -52,7 +52,7 @@ func (k Keeper) Providers(c context.Context, req *types.QueryProviderRequest) (* return nil, status.Error(codes.NotFound, "not found") } - return &types.QueryProviderResponse{Providers: val}, nil + return &types.QueryProviderResponse{Provider: val}, nil } func (k Keeper) ActiveProviders(c context.Context, req *types.QueryActiveProvidersRequest) (*types.QueryActiveProvidersResponse, error) { diff --git a/x/storage/keeper/grpc_query_report.go b/x/storage/keeper/grpc_query_report.go index cace1307c..4aee1de87 100644 --- a/x/storage/keeper/grpc_query_report.go +++ b/x/storage/keeper/grpc_query_report.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) ReportsAll(c context.Context, req *types.QueryAllReportRequest) (*types.QueryAllReportResponse, error) { +func (k Keeper) AllReports(c context.Context, req *types.QueryAllReportsRequest) (*types.QueryAllReportsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -35,10 +35,10 @@ func (k Keeper) ReportsAll(c context.Context, req *types.QueryAllReportRequest) return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryAllReportResponse{Reports: reports, Pagination: pageRes}, nil + return &types.QueryAllReportsResponse{Reports: reports, Pagination: pageRes}, nil } -func (k Keeper) Reports(c context.Context, req *types.QueryReportRequest) (*types.QueryReportResponse, error) { +func (k Keeper) Report(c context.Context, req *types.QueryReportRequest) (*types.QueryReportResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/msg_server_report.go b/x/storage/keeper/msg_server_report.go index 5a49b8cca..799412d0f 100644 --- a/x/storage/keeper/msg_server_report.go +++ b/x/storage/keeper/msg_server_report.go @@ -8,7 +8,7 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) -func (k Keeper) Report(ctx sdk.Context, prover string, merkle []byte, owner string, start int64, creator string) error { +func (k Keeper) DoReport(ctx sdk.Context, prover string, merkle []byte, owner string, start int64, creator string) error { form, found := k.GetReportForm(ctx, prover, merkle, owner, start) if !found { return sdkerrors.Wrapf(types.ErrAttestInvalid, "cannot find this report") @@ -55,7 +55,7 @@ func (k Keeper) Report(ctx sdk.Context, prover string, merkle []byte, owner stri func (k msgServer) Report(goCtx context.Context, msg *types.MsgReport) (*types.MsgReportResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - err := k.Keeper.Report(ctx, msg.Prover, msg.Merkle, msg.Owner, msg.Start, msg.Creator) + err := k.Keeper.DoReport(ctx, msg.Prover, msg.Merkle, msg.Owner, msg.Start, msg.Creator) if err != nil { return nil, err } diff --git a/x/storage/keeper/providers_test.go b/x/storage/keeper/providers_test.go index 67cb120f0..336b32286 100644 --- a/x/storage/keeper/providers_test.go +++ b/x/storage/keeper/providers_test.go @@ -30,13 +30,13 @@ func (suite *KeeperTestSuite) TestSetProviders() { Address: user, } - res, err := suite.queryClient.Providers(suite.ctx.Context(), &providerRequest) + res, err := suite.queryClient.Provider(suite.ctx.Context(), &providerRequest) suite.Require().NoError(err) - suite.Require().Equal(res.Providers.Address, provider.Address) - suite.Require().Equal(res.Providers.Ip, provider.Ip) - suite.Require().Equal(res.Providers.Totalspace, provider.Totalspace) - suite.Require().Equal(res.Providers.BurnedContracts, provider.BurnedContracts) - suite.Require().Equal(res.Providers.Creator, provider.Creator) + suite.Require().Equal(res.Provider.Address, provider.Address) + suite.Require().Equal(res.Provider.Ip, provider.Ip) + suite.Require().Equal(res.Provider.Totalspace, provider.Totalspace) + suite.Require().Equal(res.Provider.BurnedContracts, provider.BurnedContracts) + suite.Require().Equal(res.Provider.Creator, provider.Creator) } // testing providers.go file @@ -71,13 +71,13 @@ func (suite *KeeperTestSuite) TestInitProviders() { Address: user, } - res, err := suite.queryClient.Providers(suite.ctx.Context(), &providerRequest) + res, err := suite.queryClient.Provider(suite.ctx.Context(), &providerRequest) suite.Require().NoError(err) - suite.Require().Equal(res.Providers.Address, user) - suite.Require().Equal(res.Providers.Ip, initMsg.Ip) - suite.Require().Equal(res.Providers.Totalspace, initMsg.TotalSpace) - suite.Require().Equal(res.Providers.BurnedContracts, "0") - suite.Require().Equal(res.Providers.Creator, initMsg.Creator) + suite.Require().Equal(res.Provider.Address, user) + suite.Require().Equal(res.Provider.Ip, initMsg.Ip) + suite.Require().Equal(res.Provider.Totalspace, initMsg.TotalSpace) + suite.Require().Equal(res.Provider.BurnedContracts, "0") + suite.Require().Equal(res.Provider.Creator, initMsg.Creator) coin := suite.bankKeeper.GetBalance(suite.ctx, userAcc, "ujkl") diff --git a/x/storage/keeper/report_test.go b/x/storage/keeper/report_test.go index d3345470c..69b53f4c4 100644 --- a/x/storage/keeper/report_test.go +++ b/x/storage/keeper/report_test.go @@ -29,7 +29,7 @@ func (suite *KeeperTestSuite) TestSetReportForm() { Start: 0, } - res, err := suite.queryClient.Reports(suite.ctx.Context(), &reportRequest) + res, err := suite.queryClient.Report(suite.ctx.Context(), &reportRequest) suite.Require().NoError(err) suite.Require().Equal(report.Prover, res.Report.Prover) suite.Require().Equal(report.Attestations, res.Report.Attestations) @@ -156,7 +156,7 @@ func (suite *KeeperTestSuite) TestMakeReport() { suite.Equal(true, found) for i, attestation := range form.Attestations { - err := suite.storageKeeper.Report(suite.ctx, addresses[10], uf.Merkle, uf.Owner, uf.Start, attestation.Provider) + err := suite.storageKeeper.DoReport(suite.ctx, addresses[10], uf.Merkle, uf.Owner, uf.Start, attestation.Provider) if i >= int(params.AttestMinToPass) { suite.Require().Error(err) } else { diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index fe4a9ea1d..90adf6147 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -627,7 +627,7 @@ func (m *QueryProviderRequest) GetAddress() string { } type QueryProviderResponse struct { - Providers Providers `protobuf:"bytes,1,opt,name=providers,proto3" json:"providers"` + Provider Providers `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider"` } func (m *QueryProviderResponse) Reset() { *m = QueryProviderResponse{} } @@ -663,9 +663,9 @@ func (m *QueryProviderResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryProviderResponse proto.InternalMessageInfo -func (m *QueryProviderResponse) GetProviders() Providers { +func (m *QueryProviderResponse) GetProvider() Providers { if m != nil { - return m.Providers + return m.Provider } return Providers{} } @@ -1086,22 +1086,22 @@ func (m *QueryReportResponse) GetReport() ReportForm { return ReportForm{} } -type QueryAllReportRequest struct { +type QueryAllReportsRequest struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllReportRequest) Reset() { *m = QueryAllReportRequest{} } -func (m *QueryAllReportRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllReportRequest) ProtoMessage() {} -func (*QueryAllReportRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllReportsRequest) Reset() { *m = QueryAllReportsRequest{} } +func (m *QueryAllReportsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllReportsRequest) ProtoMessage() {} +func (*QueryAllReportsRequest) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{21} } -func (m *QueryAllReportRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllReportsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllReportRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllReportRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllReportsRequest.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1111,42 +1111,42 @@ func (m *QueryAllReportRequest) XXX_Marshal(b []byte, deterministic bool) ([]byt return b[:n], nil } } -func (m *QueryAllReportRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllReportRequest.Merge(m, src) +func (m *QueryAllReportsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllReportsRequest.Merge(m, src) } -func (m *QueryAllReportRequest) XXX_Size() int { +func (m *QueryAllReportsRequest) XXX_Size() int { return m.Size() } -func (m *QueryAllReportRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllReportRequest.DiscardUnknown(m) +func (m *QueryAllReportsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllReportsRequest.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllReportRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllReportsRequest proto.InternalMessageInfo -func (m *QueryAllReportRequest) GetPagination() *query.PageRequest { +func (m *QueryAllReportsRequest) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryAllReportResponse struct { +type QueryAllReportsResponse struct { Reports []ReportForm `protobuf:"bytes,1,rep,name=reports,proto3" json:"reports"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllReportResponse) Reset() { *m = QueryAllReportResponse{} } -func (m *QueryAllReportResponse) String() string { return proto.CompactTextString(m) } -func (*QueryAllReportResponse) ProtoMessage() {} -func (*QueryAllReportResponse) Descriptor() ([]byte, []int) { +func (m *QueryAllReportsResponse) Reset() { *m = QueryAllReportsResponse{} } +func (m *QueryAllReportsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllReportsResponse) ProtoMessage() {} +func (*QueryAllReportsResponse) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{22} } -func (m *QueryAllReportResponse) XXX_Unmarshal(b []byte) error { +func (m *QueryAllReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllReportResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllReportsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllReportResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllReportsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1156,26 +1156,26 @@ func (m *QueryAllReportResponse) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryAllReportResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllReportResponse.Merge(m, src) +func (m *QueryAllReportsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllReportsResponse.Merge(m, src) } -func (m *QueryAllReportResponse) XXX_Size() int { +func (m *QueryAllReportsResponse) XXX_Size() int { return m.Size() } -func (m *QueryAllReportResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllReportResponse.DiscardUnknown(m) +func (m *QueryAllReportsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllReportsResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllReportResponse proto.InternalMessageInfo +var xxx_messageInfo_QueryAllReportsResponse proto.InternalMessageInfo -func (m *QueryAllReportResponse) GetReports() []ReportForm { +func (m *QueryAllReportsResponse) GetReports() []ReportForm { if m != nil { return m.Reports } return nil } -func (m *QueryAllReportResponse) GetPagination() *query.PageResponse { +func (m *QueryAllReportsResponse) GetPagination() *query.PageResponse { if m != nil { return m.Pagination } @@ -2213,8 +2213,8 @@ func init() { proto.RegisterType((*QueryAllAttestationsResponse)(nil), "canine_chain.storage.QueryAllAttestationsResponse") proto.RegisterType((*QueryReportRequest)(nil), "canine_chain.storage.QueryReportRequest") proto.RegisterType((*QueryReportResponse)(nil), "canine_chain.storage.QueryReportResponse") - proto.RegisterType((*QueryAllReportRequest)(nil), "canine_chain.storage.QueryAllReportRequest") - proto.RegisterType((*QueryAllReportResponse)(nil), "canine_chain.storage.QueryAllReportResponse") + proto.RegisterType((*QueryAllReportsRequest)(nil), "canine_chain.storage.QueryAllReportsRequest") + proto.RegisterType((*QueryAllReportsResponse)(nil), "canine_chain.storage.QueryAllReportsResponse") proto.RegisterType((*QueryFreeSpaceRequest)(nil), "canine_chain.storage.QueryFreeSpaceRequest") proto.RegisterType((*QueryStoreCountRequest)(nil), "canine_chain.storage.QueryStoreCountRequest") proto.RegisterType((*QueryFreeSpaceResponse)(nil), "canine_chain.storage.QueryFreeSpaceResponse") @@ -2243,136 +2243,136 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 2060 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcf, 0x6f, 0x1c, 0x49, - 0x15, 0x4e, 0x79, 0x6c, 0x27, 0xf3, 0xec, 0x25, 0xa1, 0xf0, 0x2e, 0x66, 0xc8, 0x3a, 0x4e, 0x8b, - 0x4d, 0x1c, 0x13, 0x77, 0xc7, 0x93, 0x64, 0xb3, 0xeb, 0x25, 0xd9, 0xd8, 0x59, 0x1c, 0xb2, 0x4a, - 0x14, 0xa7, 0x43, 0x40, 0x5a, 0x21, 0x9a, 0xf2, 0x4c, 0x79, 0xd2, 0x78, 0xa6, 0xbb, 0xb7, 0xbb, - 0xc7, 0x30, 0xb2, 0x7c, 0x59, 0x0e, 0x48, 0x1c, 0xd0, 0x4a, 0x7b, 0xe2, 0xc4, 0x8a, 0xdd, 0x15, - 0xe2, 0x80, 0x90, 0x16, 0x84, 0xb8, 0x82, 0x84, 0xb4, 0x37, 0x56, 0xe2, 0x82, 0x38, 0x44, 0x28, - 0x81, 0xff, 0x03, 0x55, 0xd5, 0xeb, 0xe9, 0xee, 0x99, 0x9e, 0xee, 0x9e, 0x68, 0x04, 0x27, 0x4f, - 0x55, 0xd7, 0x7b, 0xef, 0x7b, 0x3f, 0xea, 0x55, 0x7d, 0x25, 0xc3, 0x72, 0x83, 0x39, 0xb6, 0xc3, - 0xad, 0xc6, 0x63, 0x66, 0x3b, 0x46, 0x10, 0xba, 0x3e, 0x6b, 0x71, 0xe3, 0xdd, 0x2e, 0xf7, 0x7b, - 0xba, 0xe7, 0xbb, 0xa1, 0x4b, 0x17, 0x92, 0x2b, 0x74, 0x5c, 0x51, 0x5b, 0x68, 0xb9, 0x2d, 0x57, - 0x2e, 0x30, 0xc4, 0x2f, 0xb5, 0xb6, 0x76, 0xba, 0xe5, 0xba, 0xad, 0x36, 0x37, 0x98, 0x67, 0x1b, - 0xcc, 0x71, 0xdc, 0x90, 0x85, 0xb6, 0xeb, 0x04, 0xf8, 0x75, 0xb5, 0xe1, 0x06, 0x1d, 0x37, 0x30, - 0x76, 0x59, 0x80, 0x26, 0x8c, 0x83, 0xf5, 0x5d, 0x1e, 0xb2, 0x75, 0xc3, 0x63, 0x2d, 0xdb, 0x91, - 0x8b, 0x71, 0xed, 0xd9, 0x4c, 0x5c, 0x1e, 0xf3, 0x59, 0x27, 0x52, 0x77, 0x3e, 0x73, 0x09, 0x6b, - 0x84, 0xf6, 0x01, 0xb7, 0x9a, 0x9c, 0xb5, 0xa3, 0x85, 0x5f, 0xcb, 0xd6, 0xe5, 0xbb, 0x07, 0x76, - 0x93, 0xfb, 0xf9, 0xea, 0x3c, 0xd6, 0xeb, 0x70, 0x27, 0xb4, 0x6c, 0x67, 0x0f, 0x9d, 0xd4, 0x16, - 0x80, 0x3e, 0x10, 0xe0, 0x77, 0x24, 0x18, 0x93, 0xbf, 0xdb, 0xe5, 0x41, 0xa8, 0x3d, 0x80, 0x2f, - 0xa5, 0x66, 0x03, 0xcf, 0x75, 0x02, 0x4e, 0x37, 0x60, 0x56, 0x81, 0x5e, 0x24, 0xcb, 0x64, 0x65, - 0xae, 0x7e, 0x5a, 0xcf, 0x0a, 0xa7, 0xae, 0xa4, 0xb6, 0xa6, 0x3f, 0x7b, 0x72, 0xe6, 0x98, 0x89, - 0x12, 0xda, 0x7b, 0x04, 0xbe, 0xa8, 0x74, 0xfa, 0xae, 0xbb, 0x87, 0x86, 0xe8, 0x05, 0x38, 0x15, - 0x41, 0xb7, 0x58, 0xb3, 0xe9, 0xf3, 0x40, 0xe9, 0xae, 0x9a, 0x27, 0xa3, 0xf9, 0x4d, 0x35, 0x4d, - 0x5f, 0x82, 0xd9, 0x0e, 0xf7, 0xf7, 0xdb, 0x7c, 0x71, 0x6a, 0x99, 0xac, 0xcc, 0x9b, 0x38, 0xa2, - 0x0b, 0x30, 0xe3, 0xfe, 0xc8, 0xe1, 0xfe, 0x62, 0x45, 0xca, 0xa9, 0x81, 0x98, 0x0d, 0x42, 0xe6, - 0x87, 0x8b, 0xd3, 0xcb, 0x64, 0xa5, 0x62, 0xaa, 0x81, 0xf6, 0x20, 0xf2, 0x56, 0x61, 0x40, 0xb7, - 0xde, 0x80, 0x19, 0x4f, 0x4c, 0xa0, 0x57, 0x67, 0xb2, 0xbd, 0xda, 0xb6, 0xdb, 0x5c, 0xca, 0xa1, - 0x63, 0x4a, 0x46, 0x7b, 0x9f, 0xc0, 0x57, 0x63, 0x9d, 0xc1, 0x56, 0x0f, 0xf1, 0x3e, 0x87, 0x87, - 0xdb, 0x00, 0x71, 0xe9, 0x48, 0x2f, 0xe7, 0xea, 0xe7, 0x74, 0x55, 0x67, 0xba, 0xa8, 0x33, 0x5d, - 0x95, 0x32, 0xd6, 0x99, 0xbe, 0xc3, 0x5a, 0x1c, 0xcd, 0x98, 0x09, 0x49, 0xed, 0x63, 0x02, 0xa7, - 0xb3, 0x21, 0x0d, 0x3b, 0x5c, 0x19, 0xd7, 0x61, 0x7a, 0x3b, 0x03, 0xe5, 0xf9, 0x42, 0x94, 0xca, - 0x72, 0x0a, 0xe6, 0x77, 0xe0, 0x94, 0x44, 0x29, 0xec, 0x44, 0xd1, 0x8a, 0x93, 0x4c, 0xb2, 0x93, - 0x3c, 0x95, 0x99, 0xe4, 0x4a, 0x32, 0xc9, 0x3b, 0x58, 0x68, 0x4a, 0x6f, 0xdf, 0xe5, 0xe9, 0x3d, - 0x1b, 0xd5, 0xce, 0xd5, 0xcf, 0x66, 0x7b, 0xfc, 0xc8, 0xb1, 0xf7, 0x6c, 0xde, 0x14, 0x82, 0xe8, - 0xb3, 0x14, 0xd2, 0xbe, 0x0f, 0x0b, 0x52, 0xe3, 0x66, 0xbb, 0x2d, 0xbe, 0xf5, 0x73, 0x9b, 0x4e, - 0x18, 0x79, 0xee, 0x84, 0xfd, 0x8c, 0xc0, 0x8b, 0xd2, 0xc0, 0x7d, 0x8f, 0x3b, 0x29, 0x0b, 0xff, - 0x87, 0xea, 0xf9, 0x65, 0x04, 0x26, 0xf6, 0x16, 0x63, 0x78, 0x1d, 0x66, 0x44, 0x38, 0x02, 0x2c, - 0x9b, 0xd2, 0x41, 0x54, 0x52, 0x93, 0x2b, 0x9c, 0x4b, 0x98, 0x8e, 0x1d, 0x8c, 0x40, 0x14, 0xac, - 0x45, 0x38, 0x9e, 0x8e, 0x51, 0x34, 0xd4, 0xbe, 0x87, 0x2e, 0xc5, 0x12, 0xe8, 0xd2, 0x2d, 0xa8, - 0xf6, 0x5b, 0x67, 0xfe, 0xf6, 0x8f, 0x44, 0xa3, 0xbe, 0x16, 0xcb, 0x69, 0xbb, 0xb0, 0x18, 0x05, - 0xac, 0xbf, 0x6a, 0xd2, 0x25, 0xf2, 0x1b, 0x02, 0x5f, 0xc9, 0x30, 0x92, 0xed, 0x46, 0xe5, 0x79, - 0xdc, 0x98, 0x5c, 0x7e, 0xba, 0xf0, 0x65, 0x05, 0x35, 0x0c, 0x79, 0xa0, 0x4e, 0xcd, 0xc4, 0xfe, - 0x16, 0x06, 0xb9, 0x8f, 0x19, 0xc2, 0xd1, 0x44, 0x9a, 0xbb, 0x1d, 0xa5, 0x21, 0x69, 0x16, 0x03, - 0x74, 0x0f, 0xe6, 0x58, 0x3c, 0x8d, 0x79, 0x78, 0x25, 0x3b, 0x44, 0x09, 0xf9, 0x6d, 0xd7, 0xef, - 0x60, 0xa0, 0x92, 0xf2, 0x1a, 0xc7, 0x9e, 0xbf, 0xd9, 0x6e, 0x27, 0x56, 0x4f, 0x3c, 0xe9, 0x7f, - 0x8a, 0x1a, 0xf9, 0x90, 0x1d, 0x74, 0xeb, 0x3e, 0xcc, 0x27, 0x60, 0x45, 0xa9, 0x1f, 0xcb, 0xaf, - 0x94, 0x82, 0xc9, 0xd5, 0x80, 0x87, 0x27, 0xad, 0xc9, 0x3d, 0xd7, 0x0f, 0xff, 0x17, 0xe9, 0x7f, - 0x84, 0x77, 0x96, 0xc8, 0x22, 0x86, 0xe8, 0x06, 0xcc, 0xfa, 0x72, 0x06, 0xf3, 0xb0, 0x9c, 0x1d, - 0x1c, 0x25, 0x95, 0x88, 0x0b, 0x4a, 0x69, 0x56, 0xdc, 0x0d, 0xd3, 0xbe, 0x4c, 0x2a, 0xc9, 0x1f, - 0x11, 0x78, 0x69, 0xd0, 0x02, 0x62, 0xbf, 0x09, 0xc7, 0x15, 0x8a, 0x28, 0xb3, 0x65, 0xc1, 0x47, - 0x62, 0x93, 0xcb, 0xe7, 0x3a, 0x86, 0x61, 0xdb, 0xe7, 0xfc, 0xa1, 0xc7, 0x1a, 0xbc, 0xb8, 0xe9, - 0xd6, 0xd1, 0xaf, 0x87, 0xa1, 0xeb, 0xf3, 0x5b, 0x6e, 0xd7, 0x09, 0x8b, 0x65, 0x74, 0x94, 0x49, - 0x98, 0xc1, 0x58, 0x88, 0xa4, 0x8b, 0x09, 0x94, 0x50, 0x03, 0xcd, 0xc0, 0x56, 0x93, 0xb4, 0x11, - 0x0b, 0x34, 0xc4, 0x44, 0x24, 0x20, 0x07, 0x9a, 0x8e, 0x67, 0xc7, 0xb6, 0xed, 0x34, 0x4b, 0x5c, - 0x3c, 0xb4, 0x8d, 0xc8, 0xef, 0xfe, 0x7a, 0x54, 0x7f, 0x16, 0xe6, 0xfb, 0x27, 0xb3, 0xed, 0x45, - 0x8e, 0xcc, 0x45, 0x73, 0x77, 0xbc, 0x40, 0xbb, 0x86, 0x5d, 0xe2, 0x56, 0xdb, 0xe6, 0x4e, 0x38, - 0x46, 0xe4, 0xae, 0xe3, 0xb6, 0x1f, 0x12, 0x44, 0xdb, 0x2f, 0x03, 0xec, 0xf6, 0x42, 0x1e, 0x58, - 0x7b, 0x3e, 0x57, 0x80, 0x2b, 0x66, 0x55, 0xce, 0x88, 0xb5, 0x9a, 0xd1, 0xbf, 0xbd, 0xf7, 0xde, - 0x62, 0x21, 0x2b, 0xb6, 0xf7, 0x30, 0x3a, 0x50, 0x23, 0x01, 0xb4, 0xf3, 0x0a, 0x7c, 0x21, 0xb4, - 0x3b, 0xdc, 0xf2, 0x79, 0x87, 0xd9, 0x8e, 0xed, 0xb4, 0xd0, 0xd6, 0x0b, 0x62, 0xd6, 0x8c, 0x26, - 0x45, 0xa4, 0xa5, 0x71, 0x59, 0x5f, 0x15, 0x53, 0x0d, 0xb4, 0x0d, 0x58, 0xea, 0xa7, 0x86, 0xb5, - 0xf8, 0x8e, 0xe2, 0x1e, 0x77, 0x9c, 0x3d, 0xb7, 0x18, 0xd0, 0x4f, 0x08, 0x9c, 0x19, 0x29, 0x8c, - 0xe0, 0x7e, 0x00, 0x0b, 0x58, 0xff, 0x56, 0x92, 0xd7, 0xe0, 0x4e, 0x5c, 0xc9, 0xde, 0x29, 0xc3, - 0xfa, 0x70, 0xc7, 0xd0, 0x60, 0xe8, 0x8b, 0xb6, 0x0f, 0x67, 0xa3, 0x8d, 0x39, 0xda, 0x89, 0x49, - 0xb5, 0x81, 0xbf, 0x11, 0xd0, 0xf2, 0xac, 0x15, 0x7a, 0x5d, 0x99, 0x8c, 0xd7, 0x93, 0x6b, 0x19, - 0xf7, 0xb0, 0xfc, 0xc5, 0xb6, 0x79, 0xe4, 0xb5, 0x5d, 0xd6, 0xbc, 0xf5, 0x98, 0x37, 0xf6, 0x0b, - 0xb3, 0x3f, 0xa2, 0x9e, 0xae, 0xe0, 0xa6, 0x18, 0x52, 0x17, 0xef, 0xf7, 0x03, 0xd6, 0xb6, 0x9b, - 0x52, 0xdb, 0x09, 0x53, 0x0d, 0xb4, 0xb7, 0xb1, 0xa1, 0xec, 0xf8, 0x76, 0x83, 0xa7, 0xec, 0xd7, - 0xe0, 0x44, 0xb3, 0xeb, 0xc7, 0x69, 0xab, 0x9a, 0xfd, 0xf1, 0x08, 0x04, 0x51, 0xb3, 0x49, 0xea, - 0x8a, 0x8d, 0x7b, 0x62, 0x16, 0x37, 0x88, 0x1a, 0x68, 0x2f, 0x47, 0xd7, 0x04, 0x49, 0xe3, 0x07, - 0xef, 0x86, 0x9a, 0x1d, 0x9d, 0xee, 0x83, 0x9f, 0x51, 0xe9, 0x9d, 0xe1, 0x5b, 0xdd, 0xa8, 0xa3, - 0x3d, 0xad, 0x61, 0xf8, 0x8a, 0x5a, 0xc3, 0xbb, 0x11, 0x56, 0xc2, 0xc3, 0x90, 0x85, 0x7d, 0x18, - 0xff, 0x99, 0xc2, 0xab, 0x65, 0xfa, 0x23, 0x82, 0x38, 0x0d, 0x55, 0xaf, 0xeb, 0x37, 0x1e, 0xb3, - 0x80, 0xab, 0xd0, 0x4e, 0x9b, 0xf1, 0x04, 0xa5, 0x30, 0xdd, 0x15, 0x1f, 0xa6, 0xe4, 0x07, 0xf9, - 0x9b, 0xde, 0x03, 0x10, 0x7f, 0x2d, 0x19, 0x4b, 0x79, 0x72, 0xcf, 0x6f, 0xe9, 0x02, 0xd0, 0x3f, - 0x9f, 0x9c, 0x39, 0xd7, 0xb2, 0xc3, 0xc7, 0xdd, 0x5d, 0xbd, 0xe1, 0x76, 0x0c, 0x7c, 0x40, 0x51, - 0x7f, 0xd6, 0x82, 0xe6, 0xbe, 0x11, 0xf6, 0x3c, 0x1e, 0xe8, 0x6f, 0xf1, 0x86, 0x59, 0x15, 0x1a, - 0x4c, 0xa1, 0x40, 0x34, 0x5a, 0x7c, 0x06, 0xe9, 0x06, 0x22, 0x10, 0xd3, 0xd2, 0xd4, 0x9c, 0x9a, - 0x7b, 0x24, 0xa6, 0x68, 0x13, 0x5e, 0x90, 0xdf, 0xac, 0xdd, 0x9e, 0xe5, 0xb5, 0x99, 0xb3, 0x38, - 0x23, 0x83, 0x75, 0x33, 0x3b, 0x58, 0x23, 0x7d, 0xd5, 0xa5, 0xb6, 0xad, 0xde, 0x4e, 0x9b, 0x39, - 0xdf, 0x74, 0x42, 0xbf, 0x67, 0xce, 0x75, 0xe3, 0x99, 0xda, 0x0d, 0x38, 0x35, 0xb8, 0x80, 0x9e, - 0x82, 0xca, 0x3e, 0xef, 0x61, 0xd6, 0xc5, 0x4f, 0x2c, 0xc3, 0x2e, 0x8f, 0x4a, 0x47, 0x0e, 0x36, - 0xa6, 0x5e, 0x23, 0xf5, 0x9f, 0x2e, 0xc1, 0x8c, 0xb4, 0x4d, 0x7f, 0x4e, 0x60, 0x56, 0x3d, 0x92, - 0xd0, 0x95, 0x1c, 0x8c, 0xa9, 0x37, 0x99, 0xda, 0x85, 0x12, 0x2b, 0x95, 0x1f, 0x9a, 0xf1, 0xde, - 0xdf, 0xff, 0xfd, 0xc1, 0xd4, 0x05, 0x7a, 0xde, 0xf8, 0x21, 0x6b, 0xec, 0xb3, 0xf6, 0x5a, 0x93, - 0xb9, 0x86, 0x92, 0x5e, 0xcb, 0x7a, 0x83, 0xa2, 0x1f, 0x12, 0x98, 0x16, 0xfb, 0x8a, 0x9e, 0xcb, - 0x31, 0x92, 0x38, 0x2e, 0x6b, 0xe7, 0x0b, 0xd7, 0x21, 0x94, 0xdb, 0x12, 0xca, 0x26, 0x7d, 0xb3, - 0x10, 0x8a, 0x24, 0x89, 0xc6, 0xa1, 0x3a, 0x77, 0x8f, 0x8c, 0x43, 0x79, 0xd7, 0x3b, 0x32, 0x0e, - 0xe5, 0xed, 0xee, 0x88, 0x7e, 0x40, 0xe0, 0x84, 0xa4, 0xa3, 0x9b, 0xed, 0x36, 0x5d, 0xcd, 0x31, - 0x3f, 0x40, 0xd2, 0x6b, 0x5f, 0x2f, 0xb5, 0x16, 0xe1, 0xea, 0x12, 0xee, 0x0a, 0x3d, 0x57, 0x0e, - 0x2e, 0xfd, 0x2d, 0x81, 0x6a, 0x9f, 0xb4, 0xd3, 0x3c, 0x53, 0x83, 0xd4, 0x7e, 0x3c, 0x5c, 0xdb, - 0x12, 0xd7, 0x4d, 0x7a, 0xa3, 0x10, 0x97, 0xeb, 0x71, 0xc7, 0xc2, 0x58, 0x0e, 0x3e, 0x1d, 0x1c, - 0xd1, 0x3f, 0x12, 0x98, 0x91, 0x6f, 0x3a, 0x34, 0x2f, 0x83, 0xc9, 0x27, 0xba, 0xda, 0x4a, 0xf1, - 0x42, 0x04, 0xf9, 0x8e, 0x04, 0xf9, 0x6d, 0x6a, 0x16, 0x97, 0x9d, 0x90, 0xcb, 0xc0, 0x37, 0x3a, - 0xfd, 0xbf, 0x22, 0x50, 0xed, 0xf7, 0xb7, 0xdc, 0xfc, 0x0f, 0xbc, 0x0a, 0xe4, 0xc6, 0x79, 0xf0, - 0x3d, 0x40, 0xfb, 0x86, 0x74, 0xe1, 0x55, 0x7a, 0xa5, 0x8c, 0x0b, 0x0a, 0x8c, 0x71, 0xd8, 0x8f, - 0xee, 0x47, 0x04, 0xe6, 0xfb, 0x20, 0x45, 0x9d, 0xea, 0xf9, 0x39, 0x1e, 0x3c, 0x11, 0x6a, 0x46, - 0xe9, 0xf5, 0x88, 0xb7, 0x2e, 0xf1, 0x5e, 0xa4, 0xab, 0xe5, 0xf1, 0xd2, 0xbf, 0x12, 0x98, 0x4b, - 0x70, 0x41, 0xba, 0x96, 0x67, 0x74, 0x88, 0xc2, 0xd7, 0xf4, 0xb2, 0xcb, 0x11, 0xe2, 0x77, 0x25, - 0xc4, 0x07, 0xf4, 0x7e, 0x21, 0xc4, 0x24, 0x13, 0x55, 0xc5, 0x21, 0x2b, 0x60, 0x54, 0x49, 0xfc, - 0x8e, 0xc0, 0xc9, 0x24, 0x2b, 0x16, 0x01, 0x5f, 0xcf, 0x0f, 0x60, 0x06, 0x59, 0xaf, 0xd5, 0xc7, - 0x11, 0x41, 0x9f, 0xae, 0x4a, 0x9f, 0x0c, 0xba, 0x36, 0x96, 0x4f, 0xf4, 0x53, 0x02, 0xc7, 0x4d, - 0x64, 0x66, 0x79, 0xdb, 0x2a, 0x45, 0x34, 0x73, 0x1b, 0x7f, 0x9a, 0x30, 0x6a, 0xa6, 0xc4, 0x75, - 0x97, 0xbe, 0x5d, 0x88, 0x0b, 0x09, 0x62, 0x89, 0x30, 0xff, 0x82, 0x00, 0x20, 0x68, 0x11, 0xe1, - 0x82, 0xb6, 0x95, 0x86, 0x7e, 0xb1, 0xdc, 0x62, 0x44, 0x7f, 0x49, 0xa2, 0x5f, 0xa5, 0x2b, 0x65, - 0xd1, 0xd3, 0x4f, 0x08, 0x54, 0x05, 0xe5, 0x91, 0x64, 0x30, 0x17, 0xda, 0x20, 0xfb, 0xca, 0x85, - 0x36, 0xc4, 0xb8, 0xb4, 0xeb, 0x12, 0xda, 0x35, 0x7a, 0xb5, 0xf8, 0x5c, 0xf0, 0x39, 0xb7, 0x24, - 0x9e, 0x44, 0x63, 0xf8, 0x84, 0x00, 0xc4, 0x14, 0x95, 0x5e, 0x2c, 0xb8, 0x98, 0xa4, 0xd8, 0x72, - 0x6d, 0xad, 0xe4, 0x6a, 0x84, 0xba, 0x21, 0xa1, 0x5e, 0xa1, 0xf5, 0x42, 0xa8, 0xe2, 0xaf, 0xed, - 0xb4, 0x12, 0x38, 0x3f, 0x94, 0x87, 0xac, 0x62, 0xba, 0xb9, 0x4d, 0x76, 0x80, 0x3e, 0xe7, 0x36, - 0xd9, 0x41, 0xea, 0xac, 0xbd, 0x21, 0x11, 0x5e, 0xa5, 0x97, 0x4b, 0x1c, 0xb2, 0x4e, 0x53, 0x1e, - 0x66, 0xfd, 0xf2, 0x14, 0xdd, 0x8b, 0xde, 0xe6, 0xe1, 0x00, 0x35, 0xce, 0xdd, 0xf8, 0xd9, 0xfc, - 0x3b, 0x77, 0xe3, 0x8f, 0x60, 0xde, 0xda, 0xb7, 0x24, 0xf4, 0x2d, 0x7a, 0xb3, 0x10, 0x7a, 0x8b, - 0x87, 0x56, 0x43, 0x6a, 0xb1, 0x32, 0x4b, 0xe2, 0x63, 0x02, 0x70, 0x9b, 0x87, 0x48, 0xb9, 0x69, - 0xfe, 0xed, 0x2e, 0xc9, 0xe3, 0x6b, 0xab, 0x65, 0x96, 0x22, 0xde, 0x37, 0x25, 0xde, 0xd7, 0xe9, - 0xb5, 0x52, 0x78, 0x3d, 0xd6, 0xb3, 0x9a, 0x2c, 0x64, 0x09, 0x98, 0x7f, 0x21, 0x40, 0x87, 0xe9, - 0x23, 0xbd, 0x52, 0x7c, 0xb5, 0x1e, 0xe6, 0xca, 0xb5, 0xab, 0x63, 0x4a, 0x8d, 0xed, 0x44, 0x92, - 0x12, 0x27, 0x9c, 0xf8, 0x33, 0x81, 0x17, 0x87, 0xf5, 0x8b, 0x6e, 0x76, 0x2d, 0xbf, 0x41, 0x8d, - 0x76, 0xe5, 0xb5, 0xf1, 0x05, 0xc7, 0x3e, 0x3b, 0x92, 0xde, 0xd0, 0x3f, 0x10, 0x38, 0x39, 0x40, - 0x7d, 0x73, 0x8b, 0x3e, 0x9b, 0x75, 0xe7, 0x16, 0xfd, 0x08, 0x66, 0x3d, 0x46, 0x47, 0x11, 0x5b, - 0xd5, 0xea, 0x4a, 0x15, 0x56, 0x43, 0x42, 0xfc, 0x94, 0x00, 0xc4, 0x7c, 0x39, 0xb7, 0xf3, 0x0d, - 0x51, 0xf4, 0xdc, 0xce, 0x37, 0x4c, 0xc2, 0xc7, 0xe0, 0x1a, 0x92, 0x9e, 0x2b, 0x84, 0xc6, 0x61, - 0xc4, 0xfa, 0x8f, 0x8c, 0x43, 0xc9, 0xf3, 0x8f, 0xe8, 0xef, 0xc5, 0xcd, 0x22, 0x4d, 0xa9, 0xf3, - 0x6f, 0x16, 0x99, 0xfc, 0x3e, 0xff, 0x66, 0x91, 0xcd, 0xf9, 0xb5, 0xd7, 0xa5, 0x0f, 0x97, 0xe9, - 0x7a, 0xf1, 0xcd, 0x42, 0x91, 0xe2, 0xf8, 0x5e, 0xf7, 0x6b, 0x02, 0xf3, 0x49, 0x5a, 0x9b, 0x7b, - 0xfb, 0xcc, 0x78, 0x08, 0xc8, 0xbd, 0x7d, 0x66, 0xf1, 0x65, 0xed, 0x55, 0x09, 0xf6, 0x12, 0xd5, - 0x4b, 0x1d, 0x35, 0xac, 0xc5, 0x2d, 0x71, 0x15, 0x0a, 0xb6, 0xee, 0x7e, 0xf6, 0x74, 0x89, 0x7c, - 0xfe, 0x74, 0x89, 0xfc, 0xeb, 0xe9, 0x12, 0x79, 0xff, 0xd9, 0xd2, 0xb1, 0xcf, 0x9f, 0x2d, 0x1d, - 0xfb, 0xc7, 0xb3, 0xa5, 0x63, 0xef, 0xd4, 0x13, 0xef, 0x03, 0x4a, 0xe7, 0x5d, 0xb6, 0x1b, 0xa4, - 0x75, 0xfe, 0xb8, 0xaf, 0x55, 0xbe, 0x17, 0xec, 0xce, 0xca, 0xff, 0x64, 0xb8, 0xfc, 0xdf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x12, 0x85, 0x70, 0xf5, 0xfe, 0x21, 0x00, 0x00, + // 2051 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcd, 0x73, 0x1c, 0x47, + 0x15, 0x77, 0xeb, 0x2b, 0xda, 0x27, 0x05, 0x9b, 0x46, 0x09, 0x62, 0xb1, 0x65, 0x79, 0xb0, 0x65, + 0x59, 0xb6, 0x66, 0xac, 0x75, 0x8c, 0x8d, 0x1c, 0xbb, 0x62, 0xc9, 0xc8, 0x18, 0xe2, 0x44, 0x5e, + 0x95, 0x73, 0xc8, 0x81, 0x49, 0x6b, 0xb7, 0xb5, 0x1e, 0xb4, 0x9a, 0x99, 0xcc, 0xcc, 0x0a, 0xb6, + 0x54, 0xba, 0x84, 0x5b, 0x2e, 0xa4, 0x8a, 0x03, 0x97, 0x50, 0x21, 0x45, 0x2e, 0x29, 0x0a, 0x42, + 0x71, 0xe2, 0x02, 0x55, 0xdc, 0x72, 0x23, 0x55, 0x5c, 0x28, 0x0e, 0x29, 0xca, 0x86, 0xff, 0x83, + 0xea, 0xee, 0xd7, 0x3b, 0xb3, 0xbb, 0xb3, 0xbd, 0xbb, 0xae, 0x2d, 0x72, 0xd2, 0x4e, 0xcf, 0xfb, + 0xf8, 0xbd, 0x8f, 0x7e, 0xdd, 0xbf, 0x29, 0xc1, 0x62, 0x85, 0xf9, 0x9e, 0xcf, 0xdd, 0xca, 0x13, + 0xe6, 0xf9, 0x4e, 0x9c, 0x04, 0x11, 0xab, 0x71, 0xe7, 0xdd, 0x06, 0x8f, 0x9a, 0x76, 0x18, 0x05, + 0x49, 0x40, 0xe7, 0xb2, 0x12, 0x36, 0x4a, 0x14, 0xe7, 0x6a, 0x41, 0x2d, 0x90, 0x02, 0x8e, 0xf8, + 0xa5, 0x64, 0x8b, 0xa7, 0x6b, 0x41, 0x50, 0xab, 0x73, 0x87, 0x85, 0x9e, 0xc3, 0x7c, 0x3f, 0x48, + 0x58, 0xe2, 0x05, 0x7e, 0x8c, 0x6f, 0x57, 0x2a, 0x41, 0x7c, 0x10, 0xc4, 0xce, 0x2e, 0x8b, 0xd1, + 0x85, 0x73, 0xb8, 0xb6, 0xcb, 0x13, 0xb6, 0xe6, 0x84, 0xac, 0xe6, 0xf9, 0x52, 0x18, 0x65, 0xcf, + 0xe5, 0xe2, 0x0a, 0x59, 0xc4, 0x0e, 0xb4, 0xb9, 0x8b, 0xb9, 0x22, 0xac, 0x92, 0x78, 0x87, 0xdc, + 0xad, 0x72, 0x56, 0xd7, 0x82, 0xe7, 0xf3, 0x6d, 0x45, 0xc1, 0xa1, 0x57, 0xe5, 0x91, 0xd9, 0x5c, + 0xc8, 0x9a, 0x07, 0xdc, 0x4f, 0x5c, 0xcf, 0xdf, 0xc3, 0x20, 0xad, 0x39, 0xa0, 0x8f, 0x04, 0xf8, + 0x6d, 0x09, 0xa6, 0xcc, 0xdf, 0x6d, 0xf0, 0x38, 0xb1, 0x1e, 0xc1, 0x37, 0xda, 0x56, 0xe3, 0x30, + 0xf0, 0x63, 0x4e, 0xd7, 0x61, 0x4a, 0x81, 0x9e, 0x27, 0x8b, 0x64, 0x79, 0xa6, 0x74, 0xda, 0xce, + 0x4b, 0xa7, 0xad, 0xb4, 0x36, 0x26, 0x3e, 0xff, 0xf2, 0xec, 0x89, 0x32, 0x6a, 0x58, 0xef, 0x11, + 0xf8, 0xba, 0xb2, 0x19, 0x05, 0xc1, 0x1e, 0x3a, 0xa2, 0x97, 0xe0, 0x94, 0x86, 0xee, 0xb2, 0x6a, + 0x35, 0xe2, 0xb1, 0xb2, 0x5d, 0x28, 0x9f, 0xd4, 0xeb, 0x77, 0xd5, 0x32, 0x7d, 0x19, 0xa6, 0x0e, + 0x78, 0xb4, 0x5f, 0xe7, 0xf3, 0x63, 0x8b, 0x64, 0x79, 0xb6, 0x8c, 0x4f, 0x74, 0x0e, 0x26, 0x83, + 0x9f, 0xfa, 0x3c, 0x9a, 0x1f, 0x97, 0x7a, 0xea, 0x41, 0xac, 0xc6, 0x09, 0x8b, 0x92, 0xf9, 0x89, + 0x45, 0xb2, 0x3c, 0x5e, 0x56, 0x0f, 0xd6, 0x23, 0x1d, 0xad, 0xc2, 0x80, 0x61, 0xdd, 0x82, 0xc9, + 0x50, 0x2c, 0x60, 0x54, 0x67, 0xf3, 0xa3, 0xda, 0xf2, 0xea, 0x5c, 0xea, 0x61, 0x60, 0x4a, 0xc7, + 0xfa, 0x80, 0xc0, 0xb7, 0x53, 0x9b, 0xf1, 0x46, 0x13, 0xf1, 0x3e, 0x47, 0x84, 0x5b, 0x00, 0x69, + 0xeb, 0xc8, 0x28, 0x67, 0x4a, 0x4b, 0xb6, 0xea, 0x33, 0x5b, 0xf4, 0x99, 0xad, 0x5a, 0x19, 0xfb, + 0xcc, 0xde, 0x66, 0x35, 0x8e, 0x6e, 0xca, 0x19, 0x4d, 0xeb, 0x13, 0x02, 0xa7, 0xf3, 0x21, 0x75, + 0x07, 0x3c, 0x3e, 0x6c, 0xc0, 0xf4, 0x7e, 0x0e, 0xca, 0x8b, 0x7d, 0x51, 0x2a, 0xcf, 0x6d, 0x30, + 0xdf, 0x82, 0x53, 0x12, 0xa5, 0xf0, 0xa3, 0xb3, 0x95, 0x16, 0x99, 0xe4, 0x17, 0x79, 0x2c, 0xb7, + 0xc8, 0xe3, 0xd9, 0x22, 0x6f, 0x63, 0xa3, 0x29, 0xbb, 0xad, 0x90, 0x27, 0xf6, 0x3c, 0x34, 0x3b, + 0x53, 0x3a, 0x97, 0x1f, 0xf1, 0x63, 0xdf, 0xdb, 0xf3, 0x78, 0x55, 0x28, 0x62, 0xcc, 0x52, 0xc9, + 0xfa, 0x31, 0xcc, 0x49, 0x8b, 0x77, 0xeb, 0x75, 0xf1, 0xae, 0x55, 0xdb, 0xf6, 0x82, 0x91, 0xe7, + 0x2e, 0xd8, 0xfb, 0x04, 0x5e, 0x92, 0x0e, 0xde, 0x0c, 0xb9, 0xdf, 0xe6, 0xe1, 0x2b, 0xe8, 0x9e, + 0x8f, 0x34, 0x98, 0x34, 0x5a, 0xcc, 0xe1, 0x6d, 0x98, 0x14, 0xe9, 0x88, 0xb1, 0x6d, 0x06, 0x4e, + 0xa2, 0xd2, 0x1a, 0x5d, 0xe3, 0x5c, 0xc5, 0x72, 0x6c, 0x63, 0x06, 0x74, 0xb2, 0xe6, 0xe1, 0x85, + 0xf6, 0x1c, 0xe9, 0x47, 0xeb, 0x6d, 0x0c, 0x29, 0xd5, 0xc0, 0x90, 0xee, 0xc2, 0xb4, 0xce, 0xa3, + 0x79, 0xf7, 0x6b, 0x4d, 0x3d, 0xd6, 0x5a, 0x6a, 0xd6, 0x2e, 0xcc, 0xeb, 0x74, 0xb5, 0x84, 0x46, + 0xdd, 0x20, 0x9f, 0x12, 0xf8, 0x56, 0x8e, 0x13, 0x0c, 0x62, 0x13, 0x0a, 0xad, 0xf9, 0x6f, 0xde, + 0xd2, 0x9d, 0x51, 0xa4, 0x7a, 0xa3, 0xab, 0x4e, 0x03, 0xbe, 0xa9, 0xa0, 0x26, 0x09, 0x8f, 0xd5, + 0x99, 0x99, 0xd9, 0xdd, 0xc2, 0x21, 0xe6, 0xba, 0x50, 0xc6, 0xa7, 0x91, 0x8c, 0x76, 0x4f, 0x97, + 0x21, 0xeb, 0x16, 0x13, 0xf4, 0x10, 0x66, 0x58, 0xba, 0x8c, 0x75, 0xb8, 0x90, 0x9f, 0xa2, 0x8c, + 0xfe, 0x56, 0x10, 0x1d, 0x60, 0xa2, 0xb2, 0xfa, 0x16, 0xc7, 0x89, 0x7f, 0xb7, 0x5e, 0xcf, 0x48, + 0x8f, 0xbc, 0xe8, 0x7f, 0xd6, 0x63, 0xbc, 0xcb, 0x0f, 0x86, 0xf5, 0x26, 0xcc, 0x66, 0x60, 0xe9, + 0xd2, 0x0f, 0x15, 0x57, 0x9b, 0x81, 0xd1, 0xf5, 0x40, 0x88, 0xe7, 0x6c, 0x99, 0x87, 0x41, 0x94, + 0xfc, 0x3f, 0xca, 0xff, 0x18, 0x6f, 0x2c, 0xda, 0x23, 0xa6, 0xe8, 0x0e, 0x4c, 0x45, 0x72, 0x05, + 0xeb, 0xb0, 0x98, 0x9f, 0x1c, 0xa5, 0x95, 0xc9, 0x0b, 0x6a, 0x59, 0xef, 0xc0, 0xcb, 0xba, 0x04, + 0x4a, 0x66, 0xe4, 0x55, 0xfe, 0x84, 0xe8, 0xfd, 0x92, 0x71, 0x81, 0xe8, 0x5f, 0x83, 0x17, 0x14, + 0x0e, 0x5d, 0xdb, 0x41, 0xe1, 0x6b, 0xb5, 0xd1, 0x55, 0x74, 0x0d, 0x27, 0xe8, 0x56, 0xc4, 0xf9, + 0x4e, 0xc8, 0x2a, 0xbc, 0xff, 0xd0, 0x2d, 0x61, 0xee, 0x76, 0x92, 0x20, 0xe2, 0x9b, 0x41, 0xc3, + 0x4f, 0xfa, 0xeb, 0xd8, 0xa8, 0x93, 0x71, 0x83, 0xb9, 0x10, 0x65, 0x17, 0x0b, 0xa8, 0xa1, 0x1e, + 0x2c, 0x07, 0x93, 0x97, 0xf5, 0x91, 0x2a, 0x54, 0xc4, 0x82, 0x56, 0x90, 0x0f, 0x96, 0x8d, 0x67, + 0xc7, 0x96, 0xe7, 0x57, 0x07, 0xb8, 0x78, 0x58, 0xeb, 0x3a, 0xee, 0x96, 0x3c, 0x9a, 0x3f, 0x07, + 0xb3, 0xad, 0x93, 0xd9, 0x0b, 0x75, 0x20, 0x33, 0x7a, 0xed, 0x41, 0x18, 0x5b, 0x37, 0x70, 0x4e, + 0x6c, 0xd6, 0x3d, 0xee, 0x27, 0x43, 0x64, 0xee, 0x36, 0x6e, 0xfc, 0x2e, 0x45, 0xf4, 0x7d, 0x06, + 0x60, 0xb7, 0x99, 0xf0, 0xd8, 0xdd, 0x8b, 0xb8, 0x02, 0x3c, 0x5e, 0x2e, 0xc8, 0x15, 0x21, 0x6b, + 0x39, 0xad, 0xdb, 0x7b, 0xf3, 0x1e, 0x4b, 0x58, 0x7f, 0x7f, 0x3b, 0xfa, 0x40, 0xd5, 0x0a, 0xe8, + 0xe7, 0x02, 0x7c, 0x2d, 0xf1, 0x0e, 0xb8, 0x1b, 0xf1, 0x03, 0xe6, 0xf9, 0x9e, 0x5f, 0x43, 0x5f, + 0x2f, 0x8a, 0xd5, 0xb2, 0x5e, 0x14, 0x99, 0x96, 0xce, 0x65, 0x7f, 0x8d, 0x97, 0xd5, 0x83, 0xb5, + 0x0e, 0x0b, 0xad, 0xd2, 0xb0, 0x1a, 0xdf, 0x56, 0xdc, 0xe3, 0x81, 0xbf, 0x17, 0xf4, 0x07, 0xf4, + 0x73, 0x02, 0x67, 0x7b, 0x2a, 0x23, 0xb8, 0x77, 0x60, 0x0e, 0xfb, 0xdf, 0xcd, 0xf2, 0x1a, 0xdc, + 0x8a, 0xcb, 0xf9, 0x3b, 0xa5, 0xdb, 0x1e, 0xee, 0x18, 0x1a, 0x77, 0xbd, 0xb1, 0xf6, 0xe1, 0x9c, + 0xde, 0x99, 0xbd, 0x83, 0x18, 0xd5, 0x1c, 0xf8, 0x3b, 0x01, 0xcb, 0xe4, 0xad, 0x6f, 0xd4, 0xe3, + 0xa3, 0x89, 0x7a, 0x74, 0x23, 0xe3, 0x21, 0xb6, 0xbf, 0xd8, 0x36, 0x8f, 0xc3, 0x7a, 0xc0, 0xaa, + 0x9b, 0x4f, 0x78, 0x65, 0xbf, 0x6f, 0xf5, 0x7b, 0xf4, 0xd3, 0x2b, 0xb8, 0x29, 0xba, 0xcc, 0xa5, + 0xfb, 0xfd, 0x90, 0xd5, 0xbd, 0xaa, 0xb4, 0x36, 0x5d, 0x56, 0x0f, 0xd6, 0x0f, 0x71, 0xa0, 0x6c, + 0x47, 0x5e, 0x85, 0xb7, 0xf9, 0x2f, 0xc2, 0x74, 0xb5, 0x11, 0xa5, 0x65, 0x2b, 0x94, 0x5b, 0xcf, + 0x3d, 0x10, 0xe8, 0x61, 0x93, 0xb5, 0x95, 0x3a, 0x0f, 0xc5, 0x2a, 0x6e, 0x10, 0xf5, 0x60, 0x9d, + 0xd1, 0x17, 0x05, 0x49, 0xe3, 0x3b, 0x6f, 0x87, 0x96, 0xa7, 0xcf, 0xf7, 0xce, 0xd7, 0x68, 0xf4, + 0x41, 0xf7, 0xbd, 0xae, 0xd7, 0xe1, 0xde, 0x6e, 0xa1, 0xeb, 0x76, 0x67, 0x15, 0xf1, 0x76, 0x84, + 0x9d, 0xb0, 0x93, 0xb0, 0xd6, 0x49, 0x66, 0xfd, 0x77, 0x0c, 0x2f, 0x97, 0xed, 0x2f, 0x11, 0xc4, + 0x69, 0x28, 0x84, 0x8d, 0xa8, 0xf2, 0x84, 0xc5, 0x5c, 0xa5, 0x76, 0xa2, 0x9c, 0x2e, 0x50, 0x0a, + 0x13, 0x0d, 0xf1, 0x62, 0x4c, 0xbe, 0x90, 0xbf, 0xe9, 0x43, 0x00, 0xf1, 0xd7, 0x95, 0xb9, 0x94, + 0x67, 0xf7, 0xec, 0x86, 0x2d, 0x00, 0xfd, 0xeb, 0xcb, 0xb3, 0x4b, 0x35, 0x2f, 0x79, 0xd2, 0xd8, + 0xb5, 0x2b, 0xc1, 0x81, 0x83, 0x1f, 0x50, 0xd4, 0x9f, 0xd5, 0xb8, 0xba, 0xef, 0x24, 0xcd, 0x90, + 0xc7, 0xf6, 0x3d, 0x5e, 0x29, 0x17, 0x84, 0x85, 0xb2, 0x30, 0x20, 0x06, 0x2d, 0x7e, 0x06, 0x69, + 0xc4, 0x22, 0x11, 0x13, 0xd2, 0xd5, 0x8c, 0x5a, 0x7b, 0x2c, 0x96, 0x68, 0x15, 0x5e, 0x94, 0xef, + 0xdc, 0xdd, 0xa6, 0x1b, 0xd6, 0x99, 0x3f, 0x3f, 0x29, 0x93, 0xf5, 0x5a, 0x7e, 0xb2, 0x7a, 0xc6, + 0x6a, 0x4b, 0x6b, 0x1b, 0xcd, 0xed, 0x3a, 0xf3, 0xbf, 0xef, 0x27, 0x51, 0xb3, 0x3c, 0xd3, 0x48, + 0x57, 0x8a, 0x77, 0xe0, 0x54, 0xa7, 0x00, 0x3d, 0x05, 0xe3, 0xfb, 0xbc, 0x89, 0x55, 0x17, 0x3f, + 0xb1, 0x0d, 0x1b, 0x5c, 0xb7, 0x8e, 0x7c, 0x58, 0x1f, 0xbb, 0x49, 0x4a, 0x9f, 0x9d, 0x81, 0x49, + 0xe9, 0x9b, 0xbe, 0x4f, 0x60, 0x4a, 0x7d, 0x24, 0xa1, 0xcb, 0x06, 0x8c, 0x6d, 0xdf, 0x64, 0x8a, + 0x97, 0x06, 0x90, 0x54, 0x71, 0x58, 0x97, 0xdf, 0xfb, 0xc7, 0x7f, 0x7e, 0x39, 0x76, 0x81, 0x7e, + 0xc7, 0xf9, 0x09, 0xab, 0xec, 0xb3, 0xba, 0xa3, 0x34, 0x57, 0xf3, 0xbe, 0x3f, 0xd1, 0x0f, 0x09, + 0x4c, 0x88, 0x3d, 0x45, 0x97, 0x0c, 0x0e, 0x32, 0x47, 0x65, 0xf1, 0x62, 0x5f, 0x39, 0x84, 0xb1, + 0x29, 0x61, 0xdc, 0xa6, 0xb7, 0x8c, 0x30, 0x24, 0x39, 0x74, 0x8e, 0xd4, 0x79, 0x7b, 0xec, 0x1c, + 0xc9, 0x5b, 0xde, 0xb1, 0x73, 0x24, 0xef, 0x75, 0xc7, 0xf4, 0x17, 0x04, 0xa6, 0x35, 0x13, 0xa5, + 0x2b, 0x06, 0xd7, 0x1d, 0xe4, 0xbc, 0x78, 0x79, 0x20, 0x59, 0x84, 0xba, 0x22, 0xa1, 0x9e, 0xa7, + 0x56, 0x7f, 0xa8, 0xf4, 0x53, 0x02, 0x85, 0x16, 0x51, 0xa7, 0x26, 0x37, 0x9d, 0x74, 0x7e, 0x38, + 0x4c, 0x1b, 0x12, 0xd3, 0xab, 0x74, 0xdd, 0x88, 0x29, 0x08, 0xb9, 0xef, 0x62, 0x0e, 0x3b, 0x3f, + 0x15, 0x1c, 0xd3, 0x3f, 0x11, 0x98, 0x94, 0xdf, 0x70, 0xa8, 0xa9, 0x6a, 0xd9, 0x4f, 0x72, 0xc5, + 0xe5, 0xfe, 0x82, 0x08, 0xf0, 0x2d, 0x09, 0x70, 0x9b, 0xbe, 0x61, 0x6e, 0x33, 0xa1, 0x93, 0x83, + 0xad, 0x77, 0xc9, 0x7f, 0x4d, 0x60, 0x5a, 0xcf, 0x32, 0x63, 0xc9, 0x3b, 0x3e, 0x00, 0x18, 0xd3, + 0xdb, 0x49, 0xfd, 0xad, 0x9b, 0x12, 0x7d, 0x89, 0x5e, 0xed, 0x87, 0x5e, 0x8d, 0x50, 0xe7, 0xa8, + 0x95, 0xd4, 0x8f, 0x08, 0xcc, 0x66, 0x89, 0x38, 0xb5, 0xcd, 0x65, 0xed, 0x1c, 0xfc, 0x45, 0x67, + 0x60, 0x79, 0xc4, 0x6a, 0x4b, 0xac, 0xcb, 0x74, 0x69, 0x30, 0xac, 0xf4, 0x6f, 0x04, 0x66, 0x32, + 0x84, 0x8f, 0xae, 0x9a, 0x1c, 0x76, 0xf1, 0xf4, 0xa2, 0x3d, 0xa8, 0x38, 0xc2, 0xdb, 0x91, 0xf0, + 0x1e, 0xd2, 0x1f, 0x19, 0xe1, 0x65, 0xa9, 0xa6, 0xea, 0x07, 0x59, 0xf4, 0x5e, 0x5d, 0xf0, 0x3b, + 0x02, 0x27, 0x3b, 0x98, 0x2f, 0x5d, 0x33, 0x27, 0x2e, 0x87, 0x8d, 0x17, 0x4b, 0xc3, 0xa8, 0x60, + 0x3c, 0x6b, 0x32, 0x9e, 0xcb, 0xf4, 0xd2, 0xc0, 0xf1, 0xd0, 0xdf, 0x13, 0x98, 0x52, 0x34, 0xcc, + 0x38, 0xd2, 0xdb, 0x08, 0xb1, 0x71, 0xa4, 0xb7, 0x13, 0x59, 0xeb, 0x0d, 0x09, 0xe9, 0x07, 0x74, + 0xcb, 0x08, 0x09, 0x69, 0xdf, 0x00, 0xd9, 0xfd, 0x15, 0x01, 0x48, 0x19, 0x27, 0xbd, 0x62, 0xce, + 0x52, 0x3b, 0xf7, 0x2d, 0xae, 0x0e, 0x28, 0x8d, 0xd8, 0xaf, 0x48, 0xec, 0x4b, 0xf4, 0xfc, 0x20, + 0xd8, 0xe9, 0xc7, 0x04, 0x0a, 0x2d, 0xca, 0x63, 0x1c, 0xaf, 0x9d, 0x8c, 0xaa, 0x78, 0x65, 0x30, + 0x61, 0x84, 0xf5, 0x3d, 0x09, 0xeb, 0x1a, 0x5d, 0x33, 0xcf, 0xfc, 0x88, 0x73, 0x57, 0x92, 0xcd, + 0xcc, 0x04, 0xf8, 0x98, 0x00, 0xa4, 0x94, 0xd3, 0x98, 0xbd, 0x2e, 0xf6, 0x6b, 0xcc, 0x5e, 0x37, + 0x8f, 0xb5, 0xbe, 0x2b, 0x61, 0x5e, 0xa5, 0xb6, 0x11, 0xa6, 0xf8, 0xeb, 0xf9, 0xb5, 0x0c, 0xc6, + 0x0f, 0x09, 0x4c, 0x6b, 0xd6, 0x6a, 0x9c, 0xa2, 0x1d, 0x54, 0xd8, 0x38, 0x45, 0x3b, 0x69, 0xb0, + 0x75, 0x43, 0xa2, 0x5b, 0xa3, 0x4e, 0x9f, 0x83, 0xd3, 0xaf, 0xca, 0x43, 0xaa, 0xd5, 0x90, 0x62, + 0x44, 0xd1, 0xfb, 0x3c, 0xe9, 0xa0, 0xb8, 0xc6, 0x1d, 0x9e, 0xcf, 0xa3, 0x8d, 0x3b, 0xbc, 0x07, + 0x83, 0xb6, 0xee, 0x49, 0xd8, 0x77, 0xe8, 0xab, 0x46, 0xd8, 0x35, 0x9e, 0xb8, 0x15, 0x69, 0xc1, + 0xcd, 0x6d, 0x83, 0xdf, 0x10, 0x80, 0xfb, 0x3c, 0x41, 0xda, 0x4c, 0xcd, 0x37, 0xb4, 0x2c, 0x17, + 0x2f, 0xae, 0x0c, 0x22, 0x8a, 0x58, 0x6f, 0x49, 0xac, 0xd7, 0xe9, 0xb5, 0xbe, 0x58, 0x43, 0xd6, + 0x74, 0xab, 0x2c, 0x61, 0x19, 0x88, 0x7f, 0x25, 0x40, 0xbb, 0xe9, 0x1f, 0x7d, 0xa5, 0xff, 0xd5, + 0xb8, 0x9b, 0xeb, 0x16, 0xaf, 0x0f, 0xa9, 0x35, 0x54, 0x00, 0x59, 0x3a, 0x9b, 0x09, 0xe0, 0x2f, + 0x04, 0x5e, 0xca, 0xa5, 0xc4, 0xf4, 0x86, 0x79, 0x0a, 0xf5, 0x0e, 0xe3, 0xe6, 0xf0, 0x8a, 0x43, + 0x1d, 0x0c, 0xd9, 0x48, 0xe8, 0x1f, 0x09, 0x9c, 0xec, 0xa0, 0xac, 0xc6, 0x26, 0xcf, 0x67, 0xcb, + 0xc6, 0x26, 0xef, 0xc1, 0x88, 0x07, 0x9c, 0x1c, 0x62, 0x5b, 0xba, 0x0d, 0xa9, 0xee, 0x56, 0x24, + 0xbc, 0x3f, 0x10, 0x80, 0x94, 0xe3, 0x1a, 0xa7, 0x5b, 0x17, 0xad, 0x36, 0x4e, 0xb7, 0x6e, 0xe2, + 0x3c, 0x20, 0x47, 0x90, 0x74, 0x5a, 0xa1, 0x73, 0x8e, 0x34, 0x4b, 0x3f, 0x76, 0x8e, 0x24, 0x2f, + 0x3f, 0xa6, 0x9f, 0x89, 0xab, 0x42, 0x3b, 0x05, 0x36, 0x5f, 0x15, 0x72, 0xf9, 0xb8, 0xf9, 0xaa, + 0x90, 0xcf, 0xd1, 0xad, 0xeb, 0x12, 0xbf, 0x43, 0x57, 0xcd, 0x57, 0x05, 0x45, 0x60, 0xd3, 0x0b, + 0xda, 0x6f, 0x09, 0xcc, 0x66, 0x29, 0xa8, 0xf1, 0x0a, 0x99, 0x43, 0xda, 0x8d, 0x57, 0xc8, 0x3c, + 0x6e, 0x6b, 0x95, 0x24, 0xd0, 0x2b, 0x74, 0xa5, 0xef, 0x31, 0xc2, 0x6a, 0xdc, 0x15, 0xf7, 0x9a, + 0x78, 0xe3, 0xf5, 0xcf, 0x9f, 0x2e, 0x90, 0x2f, 0x9e, 0x2e, 0x90, 0x7f, 0x3f, 0x5d, 0x20, 0x1f, + 0x3c, 0x5b, 0x38, 0xf1, 0xc5, 0xb3, 0x85, 0x13, 0xff, 0x7c, 0xb6, 0x70, 0xe2, 0xed, 0x52, 0x86, + 0xc7, 0x2b, 0x7b, 0xaf, 0xb3, 0xdd, 0xb8, 0xdd, 0xe6, 0xcf, 0x5a, 0x56, 0x25, 0xaf, 0xdf, 0x9d, + 0x92, 0xff, 0x71, 0x70, 0xed, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x95, 0xcf, 0xfa, 0xb6, 0xa6, + 0x21, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2392,25 +2392,25 @@ type QueryClient interface { // Queries a File by index. File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) // Queries a list of File items. - FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) + AllFiles(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) // Queries a list of File items. OpenFiles(ctx context.Context, in *QueryOpenFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) // Queries a list of File items. Proof(ctx context.Context, in *QueryProofRequest, opts ...grpc.CallOption) (*QueryProofResponse, error) // Queries a Providers by index. - Providers(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) + Provider(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) // Queries a list of Providers items. - ProvidersAll(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) + AllProviders(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) // Queries a Attestation by index. Attestation(ctx context.Context, in *QueryAttestationRequest, opts ...grpc.CallOption) (*QueryAttestationResponse, error) // Queries a list of Attestation items. - AttestationsAll(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) + AllAttestations(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) // Queries a Report by index. - Reports(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) + Report(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) // Queries a list of Attestation items. - ReportsAll(ctx context.Context, in *QueryAllReportRequest, opts ...grpc.CallOption) (*QueryAllReportResponse, error) + AllReports(ctx context.Context, in *QueryAllReportsRequest, opts ...grpc.CallOption) (*QueryAllReportsResponse, error) // Queries a list of Freespace items. - Freespace(ctx context.Context, in *QueryFreeSpaceRequest, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) + FreeSpace(ctx context.Context, in *QueryFreeSpaceRequest, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) // Queries a list of Freespace items. StoreCount(ctx context.Context, in *QueryStoreCountRequest, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) // Queries a list of FindFile items. @@ -2422,7 +2422,7 @@ type QueryClient interface { // Queries a StoragePaymentInfo by address. StoragePaymentInfo(ctx context.Context, in *QueryStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryStoragePaymentInfoResponse, error) // Queries a list of StoragePaymentInfo items. - StoragePaymentInfoAll(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) + AllStoragePaymentInfo(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) // Queries whether user can upload a file based on size FileUploadCheck(ctx context.Context, in *QueryFileUploadCheckRequest, opts ...grpc.CallOption) (*QueryFileUploadCheckResponse, error) // Queries whether user can upload a file based on size @@ -2459,9 +2459,9 @@ func (c *queryClient) File(ctx context.Context, in *QueryFileRequest, opts ...gr return out, nil } -func (c *queryClient) FilesAll(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { +func (c *queryClient) AllFiles(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { out := new(QueryAllFilesResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FilesAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllFiles", in, out, opts...) if err != nil { return nil, err } @@ -2486,18 +2486,18 @@ func (c *queryClient) Proof(ctx context.Context, in *QueryProofRequest, opts ... return out, nil } -func (c *queryClient) Providers(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) { +func (c *queryClient) Provider(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) { out := new(QueryProviderResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Providers", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Provider", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ProvidersAll(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) { +func (c *queryClient) AllProviders(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) { out := new(QueryAllProvidersResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ProvidersAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllProviders", in, out, opts...) if err != nil { return nil, err } @@ -2513,36 +2513,36 @@ func (c *queryClient) Attestation(ctx context.Context, in *QueryAttestationReque return out, nil } -func (c *queryClient) AttestationsAll(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) { +func (c *queryClient) AllAttestations(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) { out := new(QueryAllAttestationsResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AttestationsAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllAttestations", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Reports(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) { +func (c *queryClient) Report(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) { out := new(QueryReportResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Reports", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Report", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) ReportsAll(ctx context.Context, in *QueryAllReportRequest, opts ...grpc.CallOption) (*QueryAllReportResponse, error) { - out := new(QueryAllReportResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ReportsAll", in, out, opts...) +func (c *queryClient) AllReports(ctx context.Context, in *QueryAllReportsRequest, opts ...grpc.CallOption) (*QueryAllReportsResponse, error) { + out := new(QueryAllReportsResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllReports", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *queryClient) Freespace(ctx context.Context, in *QueryFreeSpaceRequest, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) { +func (c *queryClient) FreeSpace(ctx context.Context, in *QueryFreeSpaceRequest, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) { out := new(QueryFreeSpaceResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Freespace", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FreeSpace", in, out, opts...) if err != nil { return nil, err } @@ -2594,9 +2594,9 @@ func (c *queryClient) StoragePaymentInfo(ctx context.Context, in *QueryStoragePa return out, nil } -func (c *queryClient) StoragePaymentInfoAll(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) { +func (c *queryClient) AllStoragePaymentInfo(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) { out := new(QueryAllStoragePaymentInfoResponse) - err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StoragePaymentInfoAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllStoragePaymentInfo", in, out, opts...) if err != nil { return nil, err } @@ -2646,25 +2646,25 @@ type QueryServer interface { // Queries a File by index. File(context.Context, *QueryFileRequest) (*QueryFileResponse, error) // Queries a list of File items. - FilesAll(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) + AllFiles(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) // Queries a list of File items. OpenFiles(context.Context, *QueryOpenFilesRequest) (*QueryAllFilesResponse, error) // Queries a list of File items. Proof(context.Context, *QueryProofRequest) (*QueryProofResponse, error) // Queries a Providers by index. - Providers(context.Context, *QueryProviderRequest) (*QueryProviderResponse, error) + Provider(context.Context, *QueryProviderRequest) (*QueryProviderResponse, error) // Queries a list of Providers items. - ProvidersAll(context.Context, *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) + AllProviders(context.Context, *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) // Queries a Attestation by index. Attestation(context.Context, *QueryAttestationRequest) (*QueryAttestationResponse, error) // Queries a list of Attestation items. - AttestationsAll(context.Context, *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) + AllAttestations(context.Context, *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) // Queries a Report by index. - Reports(context.Context, *QueryReportRequest) (*QueryReportResponse, error) + Report(context.Context, *QueryReportRequest) (*QueryReportResponse, error) // Queries a list of Attestation items. - ReportsAll(context.Context, *QueryAllReportRequest) (*QueryAllReportResponse, error) + AllReports(context.Context, *QueryAllReportsRequest) (*QueryAllReportsResponse, error) // Queries a list of Freespace items. - Freespace(context.Context, *QueryFreeSpaceRequest) (*QueryFreeSpaceResponse, error) + FreeSpace(context.Context, *QueryFreeSpaceRequest) (*QueryFreeSpaceResponse, error) // Queries a list of Freespace items. StoreCount(context.Context, *QueryStoreCountRequest) (*QueryStoreCountResponse, error) // Queries a list of FindFile items. @@ -2676,7 +2676,7 @@ type QueryServer interface { // Queries a StoragePaymentInfo by address. StoragePaymentInfo(context.Context, *QueryStoragePaymentInfoRequest) (*QueryStoragePaymentInfoResponse, error) // Queries a list of StoragePaymentInfo items. - StoragePaymentInfoAll(context.Context, *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) + AllStoragePaymentInfo(context.Context, *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) // Queries whether user can upload a file based on size FileUploadCheck(context.Context, *QueryFileUploadCheckRequest) (*QueryFileUploadCheckResponse, error) // Queries whether user can upload a file based on size @@ -2697,8 +2697,8 @@ func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsReq func (*UnimplementedQueryServer) File(ctx context.Context, req *QueryFileRequest) (*QueryFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method File not implemented") } -func (*UnimplementedQueryServer) FilesAll(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FilesAll not implemented") +func (*UnimplementedQueryServer) AllFiles(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllFiles not implemented") } func (*UnimplementedQueryServer) OpenFiles(ctx context.Context, req *QueryOpenFilesRequest) (*QueryAllFilesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method OpenFiles not implemented") @@ -2706,26 +2706,26 @@ func (*UnimplementedQueryServer) OpenFiles(ctx context.Context, req *QueryOpenFi func (*UnimplementedQueryServer) Proof(ctx context.Context, req *QueryProofRequest) (*QueryProofResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Proof not implemented") } -func (*UnimplementedQueryServer) Providers(ctx context.Context, req *QueryProviderRequest) (*QueryProviderResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Providers not implemented") +func (*UnimplementedQueryServer) Provider(ctx context.Context, req *QueryProviderRequest) (*QueryProviderResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Provider not implemented") } -func (*UnimplementedQueryServer) ProvidersAll(ctx context.Context, req *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProvidersAll not implemented") +func (*UnimplementedQueryServer) AllProviders(ctx context.Context, req *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllProviders not implemented") } func (*UnimplementedQueryServer) Attestation(ctx context.Context, req *QueryAttestationRequest) (*QueryAttestationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Attestation not implemented") } -func (*UnimplementedQueryServer) AttestationsAll(ctx context.Context, req *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method AttestationsAll not implemented") +func (*UnimplementedQueryServer) AllAttestations(ctx context.Context, req *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllAttestations not implemented") } -func (*UnimplementedQueryServer) Reports(ctx context.Context, req *QueryReportRequest) (*QueryReportResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Reports not implemented") +func (*UnimplementedQueryServer) Report(ctx context.Context, req *QueryReportRequest) (*QueryReportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Report not implemented") } -func (*UnimplementedQueryServer) ReportsAll(ctx context.Context, req *QueryAllReportRequest) (*QueryAllReportResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReportsAll not implemented") +func (*UnimplementedQueryServer) AllReports(ctx context.Context, req *QueryAllReportsRequest) (*QueryAllReportsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllReports not implemented") } -func (*UnimplementedQueryServer) Freespace(ctx context.Context, req *QueryFreeSpaceRequest) (*QueryFreeSpaceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Freespace not implemented") +func (*UnimplementedQueryServer) FreeSpace(ctx context.Context, req *QueryFreeSpaceRequest) (*QueryFreeSpaceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FreeSpace not implemented") } func (*UnimplementedQueryServer) StoreCount(ctx context.Context, req *QueryStoreCountRequest) (*QueryStoreCountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StoreCount not implemented") @@ -2742,8 +2742,8 @@ func (*UnimplementedQueryServer) GetPayData(ctx context.Context, req *QueryPayDa func (*UnimplementedQueryServer) StoragePaymentInfo(ctx context.Context, req *QueryStoragePaymentInfoRequest) (*QueryStoragePaymentInfoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StoragePaymentInfo not implemented") } -func (*UnimplementedQueryServer) StoragePaymentInfoAll(ctx context.Context, req *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method StoragePaymentInfoAll not implemented") +func (*UnimplementedQueryServer) AllStoragePaymentInfo(ctx context.Context, req *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllStoragePaymentInfo not implemented") } func (*UnimplementedQueryServer) FileUploadCheck(ctx context.Context, req *QueryFileUploadCheckRequest) (*QueryFileUploadCheckResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FileUploadCheck not implemented") @@ -2798,20 +2798,20 @@ func _Query_File_Handler(srv interface{}, ctx context.Context, dec func(interfac return interceptor(ctx, in, info, handler) } -func _Query_FilesAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_AllFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllFilesRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).FilesAll(ctx, in) + return srv.(QueryServer).AllFiles(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Query/FilesAll", + FullMethod: "/canine_chain.storage.Query/AllFiles", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FilesAll(ctx, req.(*QueryAllFilesRequest)) + return srv.(QueryServer).AllFiles(ctx, req.(*QueryAllFilesRequest)) } return interceptor(ctx, in, info, handler) } @@ -2852,38 +2852,38 @@ func _Query_Proof_Handler(srv interface{}, ctx context.Context, dec func(interfa return interceptor(ctx, in, info, handler) } -func _Query_Providers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_Provider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryProviderRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Providers(ctx, in) + return srv.(QueryServer).Provider(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Query/Providers", + FullMethod: "/canine_chain.storage.Query/Provider", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Providers(ctx, req.(*QueryProviderRequest)) + return srv.(QueryServer).Provider(ctx, req.(*QueryProviderRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ProvidersAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_AllProviders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllProvidersRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ProvidersAll(ctx, in) + return srv.(QueryServer).AllProviders(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Query/ProvidersAll", + FullMethod: "/canine_chain.storage.Query/AllProviders", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ProvidersAll(ctx, req.(*QueryAllProvidersRequest)) + return srv.(QueryServer).AllProviders(ctx, req.(*QueryAllProvidersRequest)) } return interceptor(ctx, in, info, handler) } @@ -2906,74 +2906,74 @@ func _Query_Attestation_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } -func _Query_AttestationsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_AllAttestations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllAttestationsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).AttestationsAll(ctx, in) + return srv.(QueryServer).AllAttestations(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Query/AttestationsAll", + FullMethod: "/canine_chain.storage.Query/AllAttestations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AttestationsAll(ctx, req.(*QueryAllAttestationsRequest)) + return srv.(QueryServer).AllAttestations(ctx, req.(*QueryAllAttestationsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Reports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_Report_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryReportRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Reports(ctx, in) + return srv.(QueryServer).Report(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Query/Reports", + FullMethod: "/canine_chain.storage.Query/Report", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Reports(ctx, req.(*QueryReportRequest)) + return srv.(QueryServer).Report(ctx, req.(*QueryReportRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_ReportsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllReportRequest) +func _Query_AllReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllReportsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ReportsAll(ctx, in) + return srv.(QueryServer).AllReports(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Query/ReportsAll", + FullMethod: "/canine_chain.storage.Query/AllReports", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ReportsAll(ctx, req.(*QueryAllReportRequest)) + return srv.(QueryServer).AllReports(ctx, req.(*QueryAllReportsRequest)) } return interceptor(ctx, in, info, handler) } -func _Query_Freespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_FreeSpace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryFreeSpaceRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).Freespace(ctx, in) + return srv.(QueryServer).FreeSpace(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Query/Freespace", + FullMethod: "/canine_chain.storage.Query/FreeSpace", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Freespace(ctx, req.(*QueryFreeSpaceRequest)) + return srv.(QueryServer).FreeSpace(ctx, req.(*QueryFreeSpaceRequest)) } return interceptor(ctx, in, info, handler) } @@ -3068,20 +3068,20 @@ func _Query_StoragePaymentInfo_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } -func _Query_StoragePaymentInfoAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _Query_AllStoragePaymentInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryAllStoragePaymentInfoRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).StoragePaymentInfoAll(ctx, in) + return srv.(QueryServer).AllStoragePaymentInfo(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.storage.Query/StoragePaymentInfoAll", + FullMethod: "/canine_chain.storage.Query/AllStoragePaymentInfo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).StoragePaymentInfoAll(ctx, req.(*QueryAllStoragePaymentInfoRequest)) + return srv.(QueryServer).AllStoragePaymentInfo(ctx, req.(*QueryAllStoragePaymentInfoRequest)) } return interceptor(ctx, in, info, handler) } @@ -3171,8 +3171,8 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_File_Handler, }, { - MethodName: "FilesAll", - Handler: _Query_FilesAll_Handler, + MethodName: "AllFiles", + Handler: _Query_AllFiles_Handler, }, { MethodName: "OpenFiles", @@ -3183,32 +3183,32 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_Proof_Handler, }, { - MethodName: "Providers", - Handler: _Query_Providers_Handler, + MethodName: "Provider", + Handler: _Query_Provider_Handler, }, { - MethodName: "ProvidersAll", - Handler: _Query_ProvidersAll_Handler, + MethodName: "AllProviders", + Handler: _Query_AllProviders_Handler, }, { MethodName: "Attestation", Handler: _Query_Attestation_Handler, }, { - MethodName: "AttestationsAll", - Handler: _Query_AttestationsAll_Handler, + MethodName: "AllAttestations", + Handler: _Query_AllAttestations_Handler, }, { - MethodName: "Reports", - Handler: _Query_Reports_Handler, + MethodName: "Report", + Handler: _Query_Report_Handler, }, { - MethodName: "ReportsAll", - Handler: _Query_ReportsAll_Handler, + MethodName: "AllReports", + Handler: _Query_AllReports_Handler, }, { - MethodName: "Freespace", - Handler: _Query_Freespace_Handler, + MethodName: "FreeSpace", + Handler: _Query_FreeSpace_Handler, }, { MethodName: "StoreCount", @@ -3231,8 +3231,8 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_StoragePaymentInfo_Handler, }, { - MethodName: "StoragePaymentInfoAll", - Handler: _Query_StoragePaymentInfoAll_Handler, + MethodName: "AllStoragePaymentInfo", + Handler: _Query_AllStoragePaymentInfo_Handler, }, { MethodName: "FileUploadCheck", @@ -3736,7 +3736,7 @@ func (m *QueryProviderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l { - size, err := m.Providers.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Provider.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4080,7 +4080,7 @@ func (m *QueryReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllReportRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllReportsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4090,12 +4090,12 @@ func (m *QueryAllReportRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllReportRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllReportsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4115,7 +4115,7 @@ func (m *QueryAllReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllReportResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryAllReportsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4125,12 +4125,12 @@ func (m *QueryAllReportResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllReportResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllReportsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllReportsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -5090,7 +5090,7 @@ func (m *QueryProviderResponse) Size() (n int) { } var l int _ = l - l = m.Providers.Size() + l = m.Provider.Size() n += 1 + l + sovQuery(uint64(l)) return n } @@ -5229,7 +5229,7 @@ func (m *QueryReportResponse) Size() (n int) { return n } -func (m *QueryAllReportRequest) Size() (n int) { +func (m *QueryAllReportsRequest) Size() (n int) { if m == nil { return 0 } @@ -5242,7 +5242,7 @@ func (m *QueryAllReportRequest) Size() (n int) { return n } -func (m *QueryAllReportResponse) Size() (n int) { +func (m *QueryAllReportsResponse) Size() (n int) { if m == nil { return 0 } @@ -6847,7 +6847,7 @@ func (m *QueryProviderResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Providers", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6874,7 +6874,7 @@ func (m *QueryProviderResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Providers.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Provider.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7811,7 +7811,7 @@ func (m *QueryReportResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllReportRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllReportsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7834,10 +7834,10 @@ func (m *QueryAllReportRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllReportRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllReportsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -7897,7 +7897,7 @@ func (m *QueryAllReportRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllReportResponse) Unmarshal(dAtA []byte) error { +func (m *QueryAllReportsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7920,10 +7920,10 @@ func (m *QueryAllReportResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllReportResponse: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllReportsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllReportResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllReportsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/x/storage/types/query.pb.gw.go b/x/storage/types/query.pb.gw.go index 304e49a32..31bdcf58a 100644 --- a/x/storage/types/query.pb.gw.go +++ b/x/storage/types/query.pb.gw.go @@ -150,37 +150,37 @@ func local_request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler } var ( - filter_Query_FilesAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllFiles_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_FilesAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllFilesRequest 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_FilesAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllFiles_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.FilesAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllFiles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_FilesAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllFilesRequest 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_FilesAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllFiles_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.FilesAll(ctx, &protoReq) + msg, err := server.AllFiles(ctx, &protoReq) return msg, metadata, err } @@ -377,7 +377,7 @@ func local_request_Query_Proof_0(ctx context.Context, marshaler runtime.Marshale } -func request_Query_Providers_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_Provider_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryProviderRequest var metadata runtime.ServerMetadata @@ -399,12 +399,12 @@ func request_Query_Providers_0(ctx context.Context, marshaler runtime.Marshaler, return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := client.Providers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.Provider(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Providers_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_Provider_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryProviderRequest var metadata runtime.ServerMetadata @@ -426,43 +426,43 @@ func local_request_Query_Providers_0(ctx context.Context, marshaler runtime.Mars return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.Providers(ctx, &protoReq) + msg, err := server.Provider(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_ProvidersAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllProviders_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_ProvidersAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_AllProviders_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllProvidersRequest 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_ProvidersAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllProviders_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ProvidersAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllProviders(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ProvidersAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_AllProviders_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllProvidersRequest 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_ProvidersAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllProviders_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ProvidersAll(ctx, &protoReq) + msg, err := server.AllProviders(ctx, &protoReq) return msg, metadata, err } @@ -588,42 +588,42 @@ func local_request_Query_Attestation_0(ctx context.Context, marshaler runtime.Ma } var ( - filter_Query_AttestationsAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllAttestations_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_AttestationsAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_AllAttestations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllAttestationsRequest 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_AttestationsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllAttestations_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.AttestationsAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllAttestations(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_AttestationsAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_AllAttestations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllAttestationsRequest 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_AttestationsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllAttestations_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.AttestationsAll(ctx, &protoReq) + msg, err := server.AllAttestations(ctx, &protoReq) return msg, metadata, err } -func request_Query_Reports_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_Report_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryReportRequest var metadata runtime.ServerMetadata @@ -678,12 +678,12 @@ func request_Query_Reports_0(ctx context.Context, marshaler runtime.Marshaler, c return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) } - msg, err := client.Reports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.Report(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Reports_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_Report_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryReportRequest var metadata runtime.ServerMetadata @@ -738,48 +738,48 @@ func local_request_Query_Reports_0(ctx context.Context, marshaler runtime.Marsha return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "start", err) } - msg, err := server.Reports(ctx, &protoReq) + msg, err := server.Report(ctx, &protoReq) return msg, metadata, err } var ( - filter_Query_ReportsAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllReports_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_ReportsAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllReportRequest +func request_Query_AllReports_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllReportsRequest 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_ReportsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllReports_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ReportsAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllReports(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ReportsAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllReportRequest +func local_request_Query_AllReports_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllReportsRequest 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_ReportsAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllReports_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ReportsAll(ctx, &protoReq) + msg, err := server.AllReports(ctx, &protoReq) return msg, metadata, err } -func request_Query_Freespace_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_FreeSpace_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryFreeSpaceRequest var metadata runtime.ServerMetadata @@ -801,12 +801,12 @@ func request_Query_Freespace_0(ctx context.Context, marshaler runtime.Marshaler, return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := client.Freespace(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.FreeSpace(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_Freespace_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_FreeSpace_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryFreeSpaceRequest var metadata runtime.ServerMetadata @@ -828,7 +828,7 @@ func local_request_Query_Freespace_0(ctx context.Context, marshaler runtime.Mars return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) } - msg, err := server.Freespace(ctx, &protoReq) + msg, err := server.FreeSpace(ctx, &protoReq) return msg, metadata, err } @@ -1104,37 +1104,37 @@ func local_request_Query_StoragePaymentInfo_0(ctx context.Context, marshaler run } var ( - filter_Query_StoragePaymentInfoAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Query_AllStoragePaymentInfo_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_Query_StoragePaymentInfoAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Query_AllStoragePaymentInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllStoragePaymentInfoRequest 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_StoragePaymentInfoAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllStoragePaymentInfo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.StoragePaymentInfoAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AllStoragePaymentInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_StoragePaymentInfoAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_Query_AllStoragePaymentInfo_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryAllStoragePaymentInfoRequest 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_StoragePaymentInfoAll_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AllStoragePaymentInfo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.StoragePaymentInfoAll(ctx, &protoReq) + msg, err := server.AllStoragePaymentInfo(ctx, &protoReq) return msg, metadata, err } @@ -1339,7 +1339,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_FilesAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllFiles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1350,7 +1350,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_FilesAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllFiles_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 { @@ -1358,7 +1358,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_FilesAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllFiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1408,7 +1408,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_Providers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Provider_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1419,7 +1419,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Providers_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Provider_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 { @@ -1427,11 +1427,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Providers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Provider_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProvidersAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllProviders_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1442,7 +1442,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ProvidersAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllProviders_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 { @@ -1450,7 +1450,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ProvidersAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllProviders_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1477,7 +1477,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_AttestationsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllAttestations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1488,7 +1488,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_AttestationsAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllAttestations_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 { @@ -1496,11 +1496,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_AttestationsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllAttestations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Reports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Report_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1511,7 +1511,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Reports_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_Report_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 { @@ -1519,11 +1519,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Reports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Report_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ReportsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllReports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1534,7 +1534,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ReportsAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllReports_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 { @@ -1542,11 +1542,11 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_ReportsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Freespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_FreeSpace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1557,7 +1557,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_Freespace_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_FreeSpace_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 { @@ -1565,7 +1565,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_Freespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_FreeSpace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1684,7 +1684,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_StoragePaymentInfoAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllStoragePaymentInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -1695,7 +1695,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_StoragePaymentInfoAll_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_AllStoragePaymentInfo_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 { @@ -1703,7 +1703,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } - forward_Query_StoragePaymentInfoAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllStoragePaymentInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1880,7 +1880,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_FilesAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllFiles_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) @@ -1889,14 +1889,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_FilesAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllFiles_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_FilesAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllFiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1940,7 +1940,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_Providers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Provider_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) @@ -1949,18 +1949,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Providers_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Provider_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_Providers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Provider_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ProvidersAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllProviders_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) @@ -1969,14 +1969,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ProvidersAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllProviders_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_ProvidersAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllProviders_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2000,7 +2000,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_AttestationsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllAttestations_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) @@ -2009,18 +2009,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_AttestationsAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllAttestations_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_AttestationsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllAttestations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Reports_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_Report_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) @@ -2029,18 +2029,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Reports_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_Report_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_Reports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_Report_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_ReportsAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllReports_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) @@ -2049,18 +2049,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ReportsAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllReports_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_ReportsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllReports_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_Query_Freespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_FreeSpace_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) @@ -2069,14 +2069,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_Freespace_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_FreeSpace_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_Freespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_FreeSpace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2180,7 +2180,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_StoragePaymentInfoAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_AllStoragePaymentInfo_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) @@ -2189,14 +2189,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_StoragePaymentInfoAll_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_AllStoragePaymentInfo_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_StoragePaymentInfoAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_AllStoragePaymentInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2284,49 +2284,49 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_File_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"jackal-dao", "canine-chain", "storage", "files", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_File_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"jackal", "canine-chain", "storage", "files", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_FilesAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "files"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "files"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_OpenFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "open_files", "provider_address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_OpenFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "open_files", "provider_address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Proof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal-dao", "canine-chain", "storage", "proof", "provider_address", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Proof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal", "canine-chain", "storage", "proof", "provider_address", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Providers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "providers", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Provider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "providers", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ProvidersAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "providers"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllProviders_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "providers"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Attestation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal-dao", "canine-chain", "storage", "attestations", "prover", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Attestation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal", "canine-chain", "storage", "attestations", "prover", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AttestationsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "attestations"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllAttestations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "attestations"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Reports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal-dao", "canine-chain", "storage", "reports", "prover", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Report_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal", "canine-chain", "storage", "reports", "prover", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ReportsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "reports"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllReports_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "reports"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Freespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "free_space", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_FreeSpace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "free_space", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_StoreCount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "storing", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_StoreCount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "storing", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_FindFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "find_file", "merkle"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_FindFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "find_file", "merkle"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_GetClientFreeSpace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "get_client_free_space", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetClientFreeSpace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "get_client_free_space", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_GetPayData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "get_pay_data", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetPayData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "get_pay_data", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_StoragePaymentInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal-dao", "canine-chain", "storage", "payment_info", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_StoragePaymentInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "payment_info", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_StoragePaymentInfoAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "payment_info"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllStoragePaymentInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "payment_info"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_FileUploadCheck_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "file_upload_check"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_FileUploadCheck_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "file_upload_check"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_PriceCheck_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"jackal-dao", "canine-chain", "storage", "price_check", "duration", "bytes"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_PriceCheck_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"jackal", "canine-chain", "storage", "price_check", "duration", "bytes"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ActiveProviders_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "active_providers"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ActiveProviders_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "active_providers"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_StorageStats_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal-dao", "canine-chain", "storage", "storage_stats"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_StorageStats_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "storage_stats"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -2334,25 +2334,25 @@ var ( forward_Query_File_0 = runtime.ForwardResponseMessage - forward_Query_FilesAll_0 = runtime.ForwardResponseMessage + forward_Query_AllFiles_0 = runtime.ForwardResponseMessage forward_Query_OpenFiles_0 = runtime.ForwardResponseMessage forward_Query_Proof_0 = runtime.ForwardResponseMessage - forward_Query_Providers_0 = runtime.ForwardResponseMessage + forward_Query_Provider_0 = runtime.ForwardResponseMessage - forward_Query_ProvidersAll_0 = runtime.ForwardResponseMessage + forward_Query_AllProviders_0 = runtime.ForwardResponseMessage forward_Query_Attestation_0 = runtime.ForwardResponseMessage - forward_Query_AttestationsAll_0 = runtime.ForwardResponseMessage + forward_Query_AllAttestations_0 = runtime.ForwardResponseMessage - forward_Query_Reports_0 = runtime.ForwardResponseMessage + forward_Query_Report_0 = runtime.ForwardResponseMessage - forward_Query_ReportsAll_0 = runtime.ForwardResponseMessage + forward_Query_AllReports_0 = runtime.ForwardResponseMessage - forward_Query_Freespace_0 = runtime.ForwardResponseMessage + forward_Query_FreeSpace_0 = runtime.ForwardResponseMessage forward_Query_StoreCount_0 = runtime.ForwardResponseMessage @@ -2364,7 +2364,7 @@ var ( forward_Query_StoragePaymentInfo_0 = runtime.ForwardResponseMessage - forward_Query_StoragePaymentInfoAll_0 = runtime.ForwardResponseMessage + forward_Query_AllStoragePaymentInfo_0 = runtime.ForwardResponseMessage forward_Query_FileUploadCheck_0 = runtime.ForwardResponseMessage From b7e852960312707cee9c07826086aa38e32b59fe Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 8 Nov 2023 23:06:12 -0500 Subject: [PATCH 058/256] storage module query refactor --- proto/canine_chain/storage/query.proto | 96 +- x/storage/client/cli/query_active_deals.go | 6 +- x/storage/client/cli/query_attest.go | 8 +- x/storage/client/cli/query_check_price.go | 2 +- .../client/cli/query_file_upload_check.go | 2 +- x/storage/client/cli/query_find_file.go | 2 +- x/storage/client/cli/query_freespace.go | 4 +- .../client/cli/query_get_client_free_space.go | 2 +- x/storage/client/cli/query_get_pay_data.go | 2 +- x/storage/client/cli/query_miners.go | 6 +- x/storage/client/cli/query_params.go | 2 +- x/storage/client/cli/query_pay_info.go | 2 +- x/storage/client/cli/query_payment_info.go | 4 +- x/storage/client/cli/query_storage_stats.go | 2 +- x/storage/client/cli/tx_post_file.go | 2 +- x/storage/keeper/attestation_test.go | 2 +- x/storage/keeper/grpc_query_active_deals.go | 10 +- x/storage/keeper/grpc_query_attestation.go | 4 +- .../keeper/grpc_query_file_upload_check.go | 2 +- x/storage/keeper/grpc_query_find_file.go | 2 +- x/storage/keeper/grpc_query_freespace.go | 4 +- .../grpc_query_get_client_free_space.go | 2 +- x/storage/keeper/grpc_query_get_pay_data.go | 2 +- x/storage/keeper/grpc_query_params.go | 2 +- x/storage/keeper/grpc_query_pay_info.go | 2 +- x/storage/keeper/grpc_query_payment_info.go | 4 +- x/storage/keeper/grpc_query_price_check.go | 2 +- x/storage/keeper/grpc_query_providers.go | 6 +- x/storage/keeper/grpc_query_report.go | 4 +- x/storage/keeper/grpc_query_storage_stats.go | 2 +- x/storage/keeper/providers_test.go | 4 +- x/storage/keeper/report_test.go | 2 +- x/storage/types/query.pb.go | 1614 ++++++++--------- x/storage/types/query.pb.gw.go | 88 +- 34 files changed, 949 insertions(+), 951 deletions(-) diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index 5da79a298..faa8c6a2a 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -16,145 +16,145 @@ option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; // Query defines the gRPC querier service. service Query { // Parameters queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + rpc Params(QueryParams) returns (QueryParamsResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/params"; } // Queries a File by index. - rpc File(QueryFileRequest) returns (QueryFileResponse) { + rpc File(QueryFile) returns (QueryFileResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/files/{merkle}/{owner}/{start}"; } // Queries a list of File items. - rpc AllFiles(QueryAllFilesRequest) + rpc AllFiles(QueryAllFiles) returns (QueryAllFilesResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/files"; } // Queries a list of File items. - rpc OpenFiles(QueryOpenFilesRequest) + rpc OpenFiles(QueryOpenFiles) returns (QueryAllFilesResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/open_files/{provider_address}"; } // Queries a list of File items. - rpc Proof(QueryProofRequest) + rpc Proof(QueryProof) returns (QueryProofResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/proof/{provider_address}/{merkle}/{owner}/{start}"; } // Queries a Providers by index. - rpc Provider(QueryProviderRequest) returns (QueryProviderResponse) { + rpc Provider(QueryProvider) returns (QueryProviderResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/providers/{address}"; } // Queries a list of Providers items. - rpc AllProviders(QueryAllProvidersRequest) + rpc AllProviders(QueryAllProviders) returns (QueryAllProvidersResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/providers"; } // Queries a Attestation by index. - rpc Attestation(QueryAttestationRequest) returns (QueryAttestationResponse) { + rpc Attestation(QueryAttestation) returns (QueryAttestationResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/attestations/{prover}/{merkle}/{owner}/{start}"; } // Queries a list of Attestation items. - rpc AllAttestations(QueryAllAttestationsRequest) + rpc AllAttestations(QueryAllAttestations) returns (QueryAllAttestationsResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/attestations"; } // Queries a Report by index. - rpc Report(QueryReportRequest) returns (QueryReportResponse) { + rpc Report(QueryReport) returns (QueryReportResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/reports/{prover}/{merkle}/{owner}/{start}"; } // Queries a list of Attestation items. - rpc AllReports(QueryAllReportsRequest) + rpc AllReports(QueryAllReports) returns (QueryAllReportsResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/reports"; } - // Queries a list of Freespace items. - rpc FreeSpace(QueryFreeSpaceRequest) returns (QueryFreeSpaceResponse) { + // Queries a list of FreeSpace items. + rpc FreeSpace(QueryFreeSpace) returns (QueryFreeSpaceResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/free_space/{address}"; } - // Queries a list of Freespace items. - rpc StoreCount(QueryStoreCountRequest) returns (QueryStoreCountResponse) { + // Queries a list of FreeSpace items. + rpc StoreCount(QueryStoreCount) returns (QueryStoreCountResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/storing/{address}"; } // Queries a list of FindFile items. - rpc FindFile(QueryFindFileRequest) returns (QueryFindFileResponse) { + rpc FindFile(QueryFindFile) returns (QueryFindFileResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/find_file/{merkle}"; } // Queries a list of GetClientFreeSpace items. - rpc GetClientFreeSpace(QueryClientFreeSpaceRequest) + rpc GetClientFreeSpace(QueryClientFreeSpace) returns (QueryClientFreeSpaceResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/get_client_free_space/{address}"; } // Queries a list of GetPayData items. - rpc GetPayData(QueryPayDataRequest) returns (QueryPayDataResponse) { + rpc GetPayData(QueryPayData) returns (QueryPayDataResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/get_pay_data/{address}"; } // Queries a StoragePaymentInfo by address. - rpc StoragePaymentInfo(QueryStoragePaymentInfoRequest) returns (QueryStoragePaymentInfoResponse) { + rpc StoragePaymentInfo(QueryStoragePaymentInfo) returns (QueryStoragePaymentInfoResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/payment_info/{address}"; } // Queries a list of StoragePaymentInfo items. - rpc AllStoragePaymentInfo(QueryAllStoragePaymentInfoRequest) + rpc AllStoragePaymentInfo(QueryAllStoragePaymentInfo) returns (QueryAllStoragePaymentInfoResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/payment_info"; } // Queries whether user can upload a file based on size - rpc FileUploadCheck(QueryFileUploadCheckRequest) returns (QueryFileUploadCheckResponse) { + rpc FileUploadCheck(QueryFileUploadCheck) returns (QueryFileUploadCheckResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/file_upload_check"; } // Queries whether user can upload a file based on size - rpc PriceCheck(QueryPriceCheckRequest) returns (QueryPriceCheckResponse) { + rpc PriceCheck(QueryPriceCheck) returns (QueryPriceCheckResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/price_check/{duration}/{bytes}"; } // Queries whether user can upload a file based on size - rpc ActiveProviders(QueryActiveProvidersRequest) returns (QueryActiveProvidersResponse) { + rpc ActiveProviders(QueryActiveProviders) returns (QueryActiveProvidersResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/active_providers"; } // Queries the storage space used and purchased - rpc StorageStats(QueryStorageStatsRequest) returns (QueryStorageStatsResponse) { + rpc StorageStats(QueryStorageStats) returns (QueryStorageStatsResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/storage_stats"; } } -// QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} +// QueryParams is request type for the Query/Params RPC method. +message QueryParams {} // QueryParamsResponse is response type for the Query/Params RPC method. message QueryParamsResponse { @@ -162,7 +162,7 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } -message QueryProofRequest { +message QueryProof { string provider_address = 1; bytes merkle = 2; string owner = 3; @@ -173,7 +173,7 @@ message QueryProofResponse { FileProof proof = 1 [ (gogoproto.nullable) = false ]; } -message QueryProofsByAddressRequest { +message QueryProofsByAddress { string provider_address = 1; cosmos.base.query.v1beta1.PageRequest pagination = 2; } @@ -183,7 +183,7 @@ message QueryProofsByAddressResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryFileRequest { +message QueryFile { bytes merkle = 1; string owner = 2; int64 start = 3; @@ -193,11 +193,11 @@ message QueryFileResponse { UnifiedFile file = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllFilesRequest { +message QueryAllFiles { cosmos.base.query.v1beta1.PageRequest pagination = 1; } -message QueryOpenFilesRequest { +message QueryOpenFiles { string provider_address= 1; cosmos.base.query.v1beta1.PageRequest pagination = 2; } @@ -207,13 +207,13 @@ message QueryAllFilesResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryProviderRequest { string address = 1; } +message QueryProvider { string address = 1; } message QueryProviderResponse { Providers provider = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllProvidersRequest { +message QueryAllProviders { cosmos.base.query.v1beta1.PageRequest pagination = 1; } @@ -223,7 +223,7 @@ message QueryAllProvidersResponse { } -message QueryAttestationRequest { +message QueryAttestation { string prover = 1; bytes merkle = 2; string owner = 3; @@ -234,7 +234,7 @@ message QueryAttestationResponse { AttestationForm attestation = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllAttestationsRequest { +message QueryAllAttestations { cosmos.base.query.v1beta1.PageRequest pagination = 1; } @@ -244,7 +244,7 @@ message QueryAllAttestationsResponse { } -message QueryReportRequest { +message QueryReport { string prover = 1; bytes merkle = 2; string owner = 3; @@ -255,7 +255,7 @@ message QueryReportResponse { ReportForm report = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllReportsRequest { +message QueryAllReports { cosmos.base.query.v1beta1.PageRequest pagination = 1; } @@ -264,39 +264,39 @@ message QueryAllReportsResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryFreeSpaceRequest { string address = 1; } +message QueryFreeSpace { string address = 1; } -message QueryStoreCountRequest { string address = 1; } +message QueryStoreCount { string address = 1; } message QueryFreeSpaceResponse { string space = 1; } message QueryStoreCountResponse { string count = 1; } -message QueryFindFileRequest { bytes merkle = 1; } +message QueryFindFile { bytes merkle = 1; } message QueryFindFileResponse { string provider_ips = 1; } -message QueryClientFreeSpaceRequest { string address = 1; } +message QueryClientFreeSpace { string address = 1; } message QueryClientFreeSpaceResponse { int64 bytes_free = 1; } -message QueryPayDataRequest { string address = 1; } +message QueryPayData { string address = 1; } message QueryPayDataResponse { int64 time_remaining = 1; int64 bytes = 2; } -message QueryStoragePaymentInfoRequest { string address = 1; } +message QueryStoragePaymentInfo { string address = 1; } message QueryStoragePaymentInfoResponse { StoragePaymentInfo storage_payment_info = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllStoragePaymentInfoRequest { +message QueryAllStoragePaymentInfo { cosmos.base.query.v1beta1.PageRequest pagination = 1; } @@ -305,7 +305,7 @@ message QueryAllStoragePaymentInfoResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryFileUploadCheckRequest { +message QueryFileUploadCheck { string address = 1; int64 bytes = 2; } @@ -314,7 +314,7 @@ message QueryFileUploadCheckResponse { bool valid = 1; } -message QueryPriceCheckRequest { +message QueryPriceCheck { string duration = 1; int64 bytes = 2; } @@ -323,14 +323,14 @@ message QueryPriceCheckResponse { int64 price = 1; } -message QueryActiveProvidersRequest { +message QueryActiveProviders { } message QueryActiveProvidersResponse { repeated ActiveProviders providers = 1 [ (gogoproto.nullable) = false ]; } -message QueryStorageStatsRequest {} +message QueryStorageStats {} message QueryStorageStatsResponse { uint64 purchased = 1; diff --git a/x/storage/client/cli/query_active_deals.go b/x/storage/client/cli/query_active_deals.go index 1dc0d8a26..7145c48a5 100644 --- a/x/storage/client/cli/query_active_deals.go +++ b/x/storage/client/cli/query_active_deals.go @@ -25,7 +25,7 @@ func CmdListActiveDeals() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllFilesRequest{ + params := &types.QueryAllFiles{ Pagination: pageReq, } @@ -67,7 +67,7 @@ func CmdShowActiveDeals() *cobra.Command { panic(err) } - params := &types.QueryFileRequest{ + params := &types.QueryFile{ Merkle: merkle, Start: start, Owner: argOwner, @@ -110,7 +110,7 @@ func CmdShowProof() *cobra.Command { panic(err) } - params := &types.QueryProofRequest{ + params := &types.QueryProof{ ProviderAddress: argProver, Merkle: merkle, Start: start, diff --git a/x/storage/client/cli/query_attest.go b/x/storage/client/cli/query_attest.go index 6248b10c8..24a083ba1 100644 --- a/x/storage/client/cli/query_attest.go +++ b/x/storage/client/cli/query_attest.go @@ -25,7 +25,7 @@ func CmdListAttestForms() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllAttestationsRequest{ + params := &types.QueryAllAttestations{ Pagination: pageReq, } @@ -68,7 +68,7 @@ func CmdShowAttestForms() *cobra.Command { panic(err) } - params := &types.QueryAttestationRequest{ + params := &types.QueryAttestation{ Prover: argProver, Merkle: merkle, Owner: argOwner, @@ -103,7 +103,7 @@ func CmdListReportForms() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllReportsRequest{ + params := &types.QueryAllReports{ Pagination: pageReq, } @@ -146,7 +146,7 @@ func CmdShowReportForms() *cobra.Command { panic(err) } - params := &types.QueryReportRequest{ + params := &types.QueryReport{ Prover: argProver, Merkle: merkle, Owner: argOwner, diff --git a/x/storage/client/cli/query_check_price.go b/x/storage/client/cli/query_check_price.go index c8c6b53d1..bbb00135f 100644 --- a/x/storage/client/cli/query_check_price.go +++ b/x/storage/client/cli/query_check_price.go @@ -32,7 +32,7 @@ func CmdCheckPrice() *cobra.Command { return err } - params := &types.QueryPriceCheckRequest{ + params := &types.QueryPriceCheck{ Duration: reqDuration, Bytes: i, } diff --git a/x/storage/client/cli/query_file_upload_check.go b/x/storage/client/cli/query_file_upload_check.go index 9a48210dc..a3f406675 100644 --- a/x/storage/client/cli/query_file_upload_check.go +++ b/x/storage/client/cli/query_file_upload_check.go @@ -27,7 +27,7 @@ func CmdFileUploadCheck() *cobra.Command { return err } - params := &types.QueryFileUploadCheckRequest{ + params := &types.QueryFileUploadCheck{ Address: argAddr, Bytes: reqByte, } diff --git a/x/storage/client/cli/query_find_file.go b/x/storage/client/cli/query_find_file.go index 10180ce96..e6322a6ef 100644 --- a/x/storage/client/cli/query_find_file.go +++ b/x/storage/client/cli/query_find_file.go @@ -32,7 +32,7 @@ func CmdFindFile() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryFindFileRequest{ + params := &types.QueryFindFile{ Merkle: merkle, } diff --git a/x/storage/client/cli/query_freespace.go b/x/storage/client/cli/query_freespace.go index ea5d9d3a2..fc018ee06 100644 --- a/x/storage/client/cli/query_freespace.go +++ b/x/storage/client/cli/query_freespace.go @@ -26,7 +26,7 @@ func CmdFreespace() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryFreeSpaceRequest{ + params := &types.QueryFreeSpace{ Address: reqAddress, } @@ -59,7 +59,7 @@ func CmdFileCount() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryStoreCountRequest{ + params := &types.QueryStoreCount{ Address: reqAddress, } diff --git a/x/storage/client/cli/query_get_client_free_space.go b/x/storage/client/cli/query_get_client_free_space.go index 7448351c6..b2dee5ee4 100644 --- a/x/storage/client/cli/query_get_client_free_space.go +++ b/x/storage/client/cli/query_get_client_free_space.go @@ -26,7 +26,7 @@ func CmdGetClientFreeSpace() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryClientFreeSpaceRequest{ + params := &types.QueryClientFreeSpace{ Address: reqAddress, } diff --git a/x/storage/client/cli/query_get_pay_data.go b/x/storage/client/cli/query_get_pay_data.go index 39aaa5045..732ace05f 100644 --- a/x/storage/client/cli/query_get_pay_data.go +++ b/x/storage/client/cli/query_get_pay_data.go @@ -26,7 +26,7 @@ func CmdGetPayData() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryPayDataRequest{ + params := &types.QueryPayData{ Address: reqAddress, } diff --git a/x/storage/client/cli/query_miners.go b/x/storage/client/cli/query_miners.go index 8691f1e9b..59a2c2c4d 100644 --- a/x/storage/client/cli/query_miners.go +++ b/x/storage/client/cli/query_miners.go @@ -23,7 +23,7 @@ func CmdListProviders() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllProvidersRequest{ + params := &types.QueryAllProviders{ Pagination: pageReq, } @@ -50,7 +50,7 @@ func CmdListActiveProviders() *cobra.Command { clientCtx := client.GetClientContextFromCmd(cmd) queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryActiveProvidersRequest{} + params := &types.QueryActiveProviders{} res, err := queryClient.ActiveProviders(context.Background(), params) if err != nil { return err @@ -78,7 +78,7 @@ func CmdShowProviders() *cobra.Command { argAddress := args[0] - params := &types.QueryProviderRequest{ + params := &types.QueryProvider{ Address: argAddress, } diff --git a/x/storage/client/cli/query_params.go b/x/storage/client/cli/query_params.go index 25aa726db..819858fb0 100644 --- a/x/storage/client/cli/query_params.go +++ b/x/storage/client/cli/query_params.go @@ -19,7 +19,7 @@ func CmdQueryParams() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + res, err := queryClient.Params(context.Background(), &types.QueryParams{}) if err != nil { return err } diff --git a/x/storage/client/cli/query_pay_info.go b/x/storage/client/cli/query_pay_info.go index a3cf663dc..be12517bd 100644 --- a/x/storage/client/cli/query_pay_info.go +++ b/x/storage/client/cli/query_pay_info.go @@ -26,7 +26,7 @@ func CmdPayInfo() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryStoragePaymentInfoRequest{ + params := &types.QueryStoragePaymentInfo{ Address: reqAddress, } diff --git a/x/storage/client/cli/query_payment_info.go b/x/storage/client/cli/query_payment_info.go index 2fc2cdc9f..f8cff5208 100644 --- a/x/storage/client/cli/query_payment_info.go +++ b/x/storage/client/cli/query_payment_info.go @@ -23,7 +23,7 @@ func CmdListStoragePaymentInfo() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllStoragePaymentInfoRequest{ + params := &types.QueryAllStoragePaymentInfo{ Pagination: pageReq, } @@ -54,7 +54,7 @@ func CmdShowStoragePaymentInfo() *cobra.Command { argAddress := args[0] - params := &types.QueryStoragePaymentInfoRequest{ + params := &types.QueryStoragePaymentInfo{ Address: argAddress, } diff --git a/x/storage/client/cli/query_storage_stats.go b/x/storage/client/cli/query_storage_stats.go index 38c21cd90..f04063f35 100644 --- a/x/storage/client/cli/query_storage_stats.go +++ b/x/storage/client/cli/query_storage_stats.go @@ -18,7 +18,7 @@ func CmdGetStorageStats() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryStorageStatsRequest{} + params := &types.QueryStorageStats{} res, err := queryClient.StorageStats(context.Background(), params) if err != nil { diff --git a/x/storage/client/cli/tx_post_file.go b/x/storage/client/cli/tx_post_file.go index 0dda89d98..627e635e6 100644 --- a/x/storage/client/cli/tx_post_file.go +++ b/x/storage/client/cli/tx_post_file.go @@ -280,7 +280,7 @@ func CmdPostFile() *cobra.Command { panic(err) } cl := types.NewQueryClient(clientCtx) - provReq := types.QueryAllProvidersRequest{ + provReq := types.QueryAllProviders{ Pagination: pageReq, } diff --git a/x/storage/keeper/attestation_test.go b/x/storage/keeper/attestation_test.go index 1482aed78..3198d22bc 100644 --- a/x/storage/keeper/attestation_test.go +++ b/x/storage/keeper/attestation_test.go @@ -22,7 +22,7 @@ func (suite *KeeperTestSuite) TestSetAttestationForm() { suite.storageKeeper.SetAttestationForm(suite.ctx, attestation) - attestationRequest := types.QueryAttestationRequest{ + attestationRequest := types.QueryAttestation{ Prover: "prover", Merkle: []byte("merkle"), Owner: "owner", diff --git a/x/storage/keeper/grpc_query_active_deals.go b/x/storage/keeper/grpc_query_active_deals.go index 5b4764f8d..0242a3c85 100644 --- a/x/storage/keeper/grpc_query_active_deals.go +++ b/x/storage/keeper/grpc_query_active_deals.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllFiles(c context.Context, req *types.QueryAllFilesRequest) (*types.QueryAllFilesResponse, error) { +func (k Keeper) AllFiles(c context.Context, req *types.QueryAllFiles) (*types.QueryAllFilesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -41,7 +41,7 @@ func (k Keeper) AllFiles(c context.Context, req *types.QueryAllFilesRequest) (*t // OpenFiles returns a paginated list of files with space that providers have yet to fill // // TODO: Create unit-test cases for this -func (k Keeper) OpenFiles(c context.Context, req *types.QueryOpenFilesRequest) (*types.QueryAllFilesResponse, error) { +func (k Keeper) OpenFiles(c context.Context, req *types.QueryOpenFiles) (*types.QueryAllFilesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -77,7 +77,7 @@ func (k Keeper) OpenFiles(c context.Context, req *types.QueryOpenFilesRequest) ( return &types.QueryAllFilesResponse{Files: files, Pagination: &qpr}, nil } -func (k Keeper) File(c context.Context, req *types.QueryFileRequest) (*types.QueryFileResponse, error) { +func (k Keeper) File(c context.Context, req *types.QueryFile) (*types.QueryFileResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -96,7 +96,7 @@ func (k Keeper) File(c context.Context, req *types.QueryFileRequest) (*types.Que return &types.QueryFileResponse{File: val}, nil } -func (k Keeper) Proof(c context.Context, req *types.QueryProofRequest) (*types.QueryProofResponse, error) { +func (k Keeper) Proof(c context.Context, req *types.QueryProof) (*types.QueryProofResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -116,7 +116,7 @@ func (k Keeper) Proof(c context.Context, req *types.QueryProofRequest) (*types.Q return &types.QueryProofResponse{Proof: val}, nil } -func (k Keeper) AllProofs(c context.Context, req *types.QueryProofsByAddressRequest) (*types.QueryProofsByAddressResponse, error) { +func (k Keeper) AllProofs(c context.Context, req *types.QueryProofsByAddress) (*types.QueryProofsByAddressResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_attestation.go b/x/storage/keeper/grpc_query_attestation.go index 9cdffb8e2..52455e387 100644 --- a/x/storage/keeper/grpc_query_attestation.go +++ b/x/storage/keeper/grpc_query_attestation.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllAttestations(c context.Context, req *types.QueryAllAttestationsRequest) (*types.QueryAllAttestationsResponse, error) { +func (k Keeper) AllAttestations(c context.Context, req *types.QueryAllAttestations) (*types.QueryAllAttestationsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) AllAttestations(c context.Context, req *types.QueryAllAttestatio return &types.QueryAllAttestationsResponse{Attestations: attestations, Pagination: pageRes}, nil } -func (k Keeper) Attestation(c context.Context, req *types.QueryAttestationRequest) (*types.QueryAttestationResponse, error) { +func (k Keeper) Attestation(c context.Context, req *types.QueryAttestation) (*types.QueryAttestationResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_file_upload_check.go b/x/storage/keeper/grpc_query_file_upload_check.go index 06ab09d5a..368b39b5c 100644 --- a/x/storage/keeper/grpc_query_file_upload_check.go +++ b/x/storage/keeper/grpc_query_file_upload_check.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) FileUploadCheck(c context.Context, req *types.QueryFileUploadCheckRequest) (*types.QueryFileUploadCheckResponse, error) { +func (k Keeper) FileUploadCheck(c context.Context, req *types.QueryFileUploadCheck) (*types.QueryFileUploadCheckResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_find_file.go b/x/storage/keeper/grpc_query_find_file.go index 2eb30f620..e979cf173 100644 --- a/x/storage/keeper/grpc_query_find_file.go +++ b/x/storage/keeper/grpc_query_find_file.go @@ -35,7 +35,7 @@ func (k Keeper) ListFiles(ctx sdk.Context, merkle []byte) []string { return providers } -func (k Keeper) FindFile(goCtx context.Context, req *types.QueryFindFileRequest) (*types.QueryFindFileResponse, error) { +func (k Keeper) FindFile(goCtx context.Context, req *types.QueryFindFile) (*types.QueryFindFileResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_freespace.go b/x/storage/keeper/grpc_query_freespace.go index 38b2ba790..e291d2b48 100644 --- a/x/storage/keeper/grpc_query_freespace.go +++ b/x/storage/keeper/grpc_query_freespace.go @@ -10,7 +10,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) FreeSpace(goCtx context.Context, req *types.QueryFreeSpaceRequest) (*types.QueryFreeSpaceResponse, error) { +func (k Keeper) FreeSpace(goCtx context.Context, req *types.QueryFreeSpace) (*types.QueryFreeSpaceResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -36,7 +36,7 @@ func (k Keeper) FreeSpace(goCtx context.Context, req *types.QueryFreeSpaceReques }, nil } -func (k Keeper) StoreCount(goCtx context.Context, req *types.QueryStoreCountRequest) (*types.QueryStoreCountResponse, error) { +func (k Keeper) StoreCount(goCtx context.Context, req *types.QueryStoreCount) (*types.QueryStoreCountResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_get_client_free_space.go b/x/storage/keeper/grpc_query_get_client_free_space.go index c0f250a6d..caf6185f6 100644 --- a/x/storage/keeper/grpc_query_get_client_free_space.go +++ b/x/storage/keeper/grpc_query_get_client_free_space.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) GetClientFreeSpace(goCtx context.Context, req *types.QueryClientFreeSpaceRequest) (*types.QueryClientFreeSpaceResponse, error) { +func (k Keeper) GetClientFreeSpace(goCtx context.Context, req *types.QueryClientFreeSpace) (*types.QueryClientFreeSpaceResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_get_pay_data.go b/x/storage/keeper/grpc_query_get_pay_data.go index 78ceedbe9..14d1c9446 100644 --- a/x/storage/keeper/grpc_query_get_pay_data.go +++ b/x/storage/keeper/grpc_query_get_pay_data.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) GetPayData(goCtx context.Context, req *types.QueryPayDataRequest) (*types.QueryPayDataResponse, error) { +func (k Keeper) GetPayData(goCtx context.Context, req *types.QueryPayData) (*types.QueryPayDataResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_params.go b/x/storage/keeper/grpc_query_params.go index 9e42f2f1b..b9eccad45 100644 --- a/x/storage/keeper/grpc_query_params.go +++ b/x/storage/keeper/grpc_query_params.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (k Keeper) Params(c context.Context, req *types.QueryParams) (*types.QueryParamsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_pay_info.go b/x/storage/keeper/grpc_query_pay_info.go index cb73cf8f3..68cdd755c 100644 --- a/x/storage/keeper/grpc_query_pay_info.go +++ b/x/storage/keeper/grpc_query_pay_info.go @@ -10,7 +10,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) PaymentInfo(goCtx context.Context, req *types.QueryStoragePaymentInfoRequest) (*types.QueryStoragePaymentInfoResponse, error) { +func (k Keeper) PaymentInfo(goCtx context.Context, req *types.QueryStoragePaymentInfo) (*types.QueryStoragePaymentInfoResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_payment_info.go b/x/storage/keeper/grpc_query_payment_info.go index 383f30a7d..e6cb05b01 100644 --- a/x/storage/keeper/grpc_query_payment_info.go +++ b/x/storage/keeper/grpc_query_payment_info.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllStoragePaymentInfo(c context.Context, req *types.QueryAllStoragePaymentInfoRequest) (*types.QueryAllStoragePaymentInfoResponse, error) { +func (k Keeper) AllStoragePaymentInfo(c context.Context, req *types.QueryAllStoragePaymentInfo) (*types.QueryAllStoragePaymentInfoResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) AllStoragePaymentInfo(c context.Context, req *types.QueryAllStor return &types.QueryAllStoragePaymentInfoResponse{StoragePaymentInfo: storagePaymentInfos, Pagination: pageRes}, nil } -func (k Keeper) StoragePaymentInfo(c context.Context, req *types.QueryStoragePaymentInfoRequest) (*types.QueryStoragePaymentInfoResponse, error) { +func (k Keeper) StoragePaymentInfo(c context.Context, req *types.QueryStoragePaymentInfo) (*types.QueryStoragePaymentInfoResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_price_check.go b/x/storage/keeper/grpc_query_price_check.go index 13d361b22..f52644f9b 100644 --- a/x/storage/keeper/grpc_query_price_check.go +++ b/x/storage/keeper/grpc_query_price_check.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) PriceCheck(c context.Context, req *types.QueryPriceCheckRequest) (*types.QueryPriceCheckResponse, error) { +func (k Keeper) PriceCheck(c context.Context, req *types.QueryPriceCheck) (*types.QueryPriceCheckResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_providers.go b/x/storage/keeper/grpc_query_providers.go index f358a622c..a733d75b1 100644 --- a/x/storage/keeper/grpc_query_providers.go +++ b/x/storage/keeper/grpc_query_providers.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllProviders(c context.Context, req *types.QueryAllProvidersRequest) (*types.QueryAllProvidersResponse, error) { +func (k Keeper) AllProviders(c context.Context, req *types.QueryAllProviders) (*types.QueryAllProvidersResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) AllProviders(c context.Context, req *types.QueryAllProvidersRequ return &types.QueryAllProvidersResponse{Providers: providerss, Pagination: pageRes}, nil } -func (k Keeper) Provider(c context.Context, req *types.QueryProviderRequest) (*types.QueryProviderResponse, error) { +func (k Keeper) Provider(c context.Context, req *types.QueryProvider) (*types.QueryProviderResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -55,7 +55,7 @@ func (k Keeper) Provider(c context.Context, req *types.QueryProviderRequest) (*t return &types.QueryProviderResponse{Provider: val}, nil } -func (k Keeper) ActiveProviders(c context.Context, req *types.QueryActiveProvidersRequest) (*types.QueryActiveProvidersResponse, error) { +func (k Keeper) ActiveProviders(c context.Context, req *types.QueryActiveProviders) (*types.QueryActiveProvidersResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_report.go b/x/storage/keeper/grpc_query_report.go index 4aee1de87..b7035a8a2 100644 --- a/x/storage/keeper/grpc_query_report.go +++ b/x/storage/keeper/grpc_query_report.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllReports(c context.Context, req *types.QueryAllReportsRequest) (*types.QueryAllReportsResponse, error) { +func (k Keeper) AllReports(c context.Context, req *types.QueryAllReports) (*types.QueryAllReportsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) AllReports(c context.Context, req *types.QueryAllReportsRequest) return &types.QueryAllReportsResponse{Reports: reports, Pagination: pageRes}, nil } -func (k Keeper) Report(c context.Context, req *types.QueryReportRequest) (*types.QueryReportResponse, error) { +func (k Keeper) Report(c context.Context, req *types.QueryReport) (*types.QueryReportResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/grpc_query_storage_stats.go b/x/storage/keeper/grpc_query_storage_stats.go index 53d01913e..bcbdbcd1d 100644 --- a/x/storage/keeper/grpc_query_storage_stats.go +++ b/x/storage/keeper/grpc_query_storage_stats.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) StorageStats(c context.Context, req *types.QueryStorageStatsRequest) (*types.QueryStorageStatsResponse, error) { +func (k Keeper) StorageStats(c context.Context, req *types.QueryStorageStats) (*types.QueryStorageStatsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/storage/keeper/providers_test.go b/x/storage/keeper/providers_test.go index 336b32286..bf2c0f558 100644 --- a/x/storage/keeper/providers_test.go +++ b/x/storage/keeper/providers_test.go @@ -26,7 +26,7 @@ func (suite *KeeperTestSuite) TestSetProviders() { suite.storageKeeper.SetProviders(suite.ctx, provider) suite.Require().NoError(err) - providerRequest := types.QueryProviderRequest{ + providerRequest := types.QueryProvider{ Address: user, } @@ -67,7 +67,7 @@ func (suite *KeeperTestSuite) TestInitProviders() { _, err = msgSrvr.InitProvider(ctx, &initMsg) suite.Require().NoError(err) - providerRequest := types.QueryProviderRequest{ + providerRequest := types.QueryProvider{ Address: user, } diff --git a/x/storage/keeper/report_test.go b/x/storage/keeper/report_test.go index 69b53f4c4..8016c2704 100644 --- a/x/storage/keeper/report_test.go +++ b/x/storage/keeper/report_test.go @@ -22,7 +22,7 @@ func (suite *KeeperTestSuite) TestSetReportForm() { suite.storageKeeper.SetReportForm(suite.ctx, report) - reportRequest := types.QueryReportRequest{ + reportRequest := types.QueryReport{ Prover: "prover", Merkle: []byte("merkle"), Owner: "owner", diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index 90adf6147..f95856c21 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -31,22 +31,22 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { +// QueryParams is request type for the Query/Params RPC method. +type QueryParams struct { } -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { +func (m *QueryParams) Reset() { *m = QueryParams{} } +func (m *QueryParams) String() string { return proto.CompactTextString(m) } +func (*QueryParams) ProtoMessage() {} +func (*QueryParams) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{0} } -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParams.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -56,17 +56,17 @@ func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) +func (m *QueryParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParams.Merge(m, src) } -func (m *QueryParamsRequest) XXX_Size() int { +func (m *QueryParams) XXX_Size() int { return m.Size() } -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +func (m *QueryParams) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParams.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryParams proto.InternalMessageInfo // QueryParamsResponse is response type for the Query/Params RPC method. type QueryParamsResponse struct { @@ -114,25 +114,25 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -type QueryProofRequest struct { +type QueryProof struct { ProviderAddress string `protobuf:"bytes,1,opt,name=provider_address,json=providerAddress,proto3" json:"provider_address,omitempty"` Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` } -func (m *QueryProofRequest) Reset() { *m = QueryProofRequest{} } -func (m *QueryProofRequest) String() string { return proto.CompactTextString(m) } -func (*QueryProofRequest) ProtoMessage() {} -func (*QueryProofRequest) Descriptor() ([]byte, []int) { +func (m *QueryProof) Reset() { *m = QueryProof{} } +func (m *QueryProof) String() string { return proto.CompactTextString(m) } +func (*QueryProof) ProtoMessage() {} +func (*QueryProof) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{2} } -func (m *QueryProofRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryProof) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryProofRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryProof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryProofRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryProof.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -142,40 +142,40 @@ func (m *QueryProofRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, e return b[:n], nil } } -func (m *QueryProofRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryProofRequest.Merge(m, src) +func (m *QueryProof) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryProof.Merge(m, src) } -func (m *QueryProofRequest) XXX_Size() int { +func (m *QueryProof) XXX_Size() int { return m.Size() } -func (m *QueryProofRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryProofRequest.DiscardUnknown(m) +func (m *QueryProof) XXX_DiscardUnknown() { + xxx_messageInfo_QueryProof.DiscardUnknown(m) } -var xxx_messageInfo_QueryProofRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryProof proto.InternalMessageInfo -func (m *QueryProofRequest) GetProviderAddress() string { +func (m *QueryProof) GetProviderAddress() string { if m != nil { return m.ProviderAddress } return "" } -func (m *QueryProofRequest) GetMerkle() []byte { +func (m *QueryProof) GetMerkle() []byte { if m != nil { return m.Merkle } return nil } -func (m *QueryProofRequest) GetOwner() string { +func (m *QueryProof) GetOwner() string { if m != nil { return m.Owner } return "" } -func (m *QueryProofRequest) GetStart() int64 { +func (m *QueryProof) GetStart() int64 { if m != nil { return m.Start } @@ -226,23 +226,23 @@ func (m *QueryProofResponse) GetProof() FileProof { return FileProof{} } -type QueryProofsByAddressRequest struct { +type QueryProofsByAddress struct { ProviderAddress string `protobuf:"bytes,1,opt,name=provider_address,json=providerAddress,proto3" json:"provider_address,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryProofsByAddressRequest) Reset() { *m = QueryProofsByAddressRequest{} } -func (m *QueryProofsByAddressRequest) String() string { return proto.CompactTextString(m) } -func (*QueryProofsByAddressRequest) ProtoMessage() {} -func (*QueryProofsByAddressRequest) Descriptor() ([]byte, []int) { +func (m *QueryProofsByAddress) Reset() { *m = QueryProofsByAddress{} } +func (m *QueryProofsByAddress) String() string { return proto.CompactTextString(m) } +func (*QueryProofsByAddress) ProtoMessage() {} +func (*QueryProofsByAddress) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{4} } -func (m *QueryProofsByAddressRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryProofsByAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryProofsByAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryProofsByAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryProofsByAddressRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryProofsByAddress.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -252,26 +252,26 @@ func (m *QueryProofsByAddressRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryProofsByAddressRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryProofsByAddressRequest.Merge(m, src) +func (m *QueryProofsByAddress) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryProofsByAddress.Merge(m, src) } -func (m *QueryProofsByAddressRequest) XXX_Size() int { +func (m *QueryProofsByAddress) XXX_Size() int { return m.Size() } -func (m *QueryProofsByAddressRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryProofsByAddressRequest.DiscardUnknown(m) +func (m *QueryProofsByAddress) XXX_DiscardUnknown() { + xxx_messageInfo_QueryProofsByAddress.DiscardUnknown(m) } -var xxx_messageInfo_QueryProofsByAddressRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryProofsByAddress proto.InternalMessageInfo -func (m *QueryProofsByAddressRequest) GetProviderAddress() string { +func (m *QueryProofsByAddress) GetProviderAddress() string { if m != nil { return m.ProviderAddress } return "" } -func (m *QueryProofsByAddressRequest) GetPagination() *query.PageRequest { +func (m *QueryProofsByAddress) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -330,24 +330,24 @@ func (m *QueryProofsByAddressResponse) GetPagination() *query.PageResponse { return nil } -type QueryFileRequest struct { +type QueryFile struct { Merkle []byte `protobuf:"bytes,1,opt,name=merkle,proto3" json:"merkle,omitempty"` Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` Start int64 `protobuf:"varint,3,opt,name=start,proto3" json:"start,omitempty"` } -func (m *QueryFileRequest) Reset() { *m = QueryFileRequest{} } -func (m *QueryFileRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFileRequest) ProtoMessage() {} -func (*QueryFileRequest) Descriptor() ([]byte, []int) { +func (m *QueryFile) Reset() { *m = QueryFile{} } +func (m *QueryFile) String() string { return proto.CompactTextString(m) } +func (*QueryFile) ProtoMessage() {} +func (*QueryFile) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{6} } -func (m *QueryFileRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFileRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFile.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -357,33 +357,33 @@ func (m *QueryFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return b[:n], nil } } -func (m *QueryFileRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFileRequest.Merge(m, src) +func (m *QueryFile) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFile.Merge(m, src) } -func (m *QueryFileRequest) XXX_Size() int { +func (m *QueryFile) XXX_Size() int { return m.Size() } -func (m *QueryFileRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFileRequest.DiscardUnknown(m) +func (m *QueryFile) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFile.DiscardUnknown(m) } -var xxx_messageInfo_QueryFileRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFile proto.InternalMessageInfo -func (m *QueryFileRequest) GetMerkle() []byte { +func (m *QueryFile) GetMerkle() []byte { if m != nil { return m.Merkle } return nil } -func (m *QueryFileRequest) GetOwner() string { +func (m *QueryFile) GetOwner() string { if m != nil { return m.Owner } return "" } -func (m *QueryFileRequest) GetStart() int64 { +func (m *QueryFile) GetStart() int64 { if m != nil { return m.Start } @@ -434,22 +434,22 @@ func (m *QueryFileResponse) GetFile() UnifiedFile { return UnifiedFile{} } -type QueryAllFilesRequest struct { +type QueryAllFiles struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllFilesRequest) Reset() { *m = QueryAllFilesRequest{} } -func (m *QueryAllFilesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllFilesRequest) ProtoMessage() {} -func (*QueryAllFilesRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllFiles) Reset() { *m = QueryAllFiles{} } +func (m *QueryAllFiles) String() string { return proto.CompactTextString(m) } +func (*QueryAllFiles) ProtoMessage() {} +func (*QueryAllFiles) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{8} } -func (m *QueryAllFilesRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllFiles) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllFiles) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllFilesRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllFiles.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -459,42 +459,42 @@ func (m *QueryAllFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryAllFilesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllFilesRequest.Merge(m, src) +func (m *QueryAllFiles) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllFiles.Merge(m, src) } -func (m *QueryAllFilesRequest) XXX_Size() int { +func (m *QueryAllFiles) XXX_Size() int { return m.Size() } -func (m *QueryAllFilesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllFilesRequest.DiscardUnknown(m) +func (m *QueryAllFiles) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllFiles.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllFilesRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllFiles proto.InternalMessageInfo -func (m *QueryAllFilesRequest) GetPagination() *query.PageRequest { +func (m *QueryAllFiles) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } return nil } -type QueryOpenFilesRequest struct { +type QueryOpenFiles struct { ProviderAddress string `protobuf:"bytes,1,opt,name=provider_address,json=providerAddress,proto3" json:"provider_address,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryOpenFilesRequest) Reset() { *m = QueryOpenFilesRequest{} } -func (m *QueryOpenFilesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryOpenFilesRequest) ProtoMessage() {} -func (*QueryOpenFilesRequest) Descriptor() ([]byte, []int) { +func (m *QueryOpenFiles) Reset() { *m = QueryOpenFiles{} } +func (m *QueryOpenFiles) String() string { return proto.CompactTextString(m) } +func (*QueryOpenFiles) ProtoMessage() {} +func (*QueryOpenFiles) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{9} } -func (m *QueryOpenFilesRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryOpenFiles) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryOpenFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryOpenFiles) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryOpenFilesRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryOpenFiles.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -504,26 +504,26 @@ func (m *QueryOpenFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byt return b[:n], nil } } -func (m *QueryOpenFilesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryOpenFilesRequest.Merge(m, src) +func (m *QueryOpenFiles) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryOpenFiles.Merge(m, src) } -func (m *QueryOpenFilesRequest) XXX_Size() int { +func (m *QueryOpenFiles) XXX_Size() int { return m.Size() } -func (m *QueryOpenFilesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryOpenFilesRequest.DiscardUnknown(m) +func (m *QueryOpenFiles) XXX_DiscardUnknown() { + xxx_messageInfo_QueryOpenFiles.DiscardUnknown(m) } -var xxx_messageInfo_QueryOpenFilesRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryOpenFiles proto.InternalMessageInfo -func (m *QueryOpenFilesRequest) GetProviderAddress() string { +func (m *QueryOpenFiles) GetProviderAddress() string { if m != nil { return m.ProviderAddress } return "" } -func (m *QueryOpenFilesRequest) GetPagination() *query.PageRequest { +func (m *QueryOpenFiles) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -582,22 +582,22 @@ func (m *QueryAllFilesResponse) GetPagination() *query.PageResponse { return nil } -type QueryProviderRequest struct { +type QueryProvider struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryProviderRequest) Reset() { *m = QueryProviderRequest{} } -func (m *QueryProviderRequest) String() string { return proto.CompactTextString(m) } -func (*QueryProviderRequest) ProtoMessage() {} -func (*QueryProviderRequest) Descriptor() ([]byte, []int) { +func (m *QueryProvider) Reset() { *m = QueryProvider{} } +func (m *QueryProvider) String() string { return proto.CompactTextString(m) } +func (*QueryProvider) ProtoMessage() {} +func (*QueryProvider) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{11} } -func (m *QueryProviderRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryProviderRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryProvider) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryProviderRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryProvider.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -607,19 +607,19 @@ func (m *QueryProviderRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryProviderRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryProviderRequest.Merge(m, src) +func (m *QueryProvider) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryProvider.Merge(m, src) } -func (m *QueryProviderRequest) XXX_Size() int { +func (m *QueryProvider) XXX_Size() int { return m.Size() } -func (m *QueryProviderRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryProviderRequest.DiscardUnknown(m) +func (m *QueryProvider) XXX_DiscardUnknown() { + xxx_messageInfo_QueryProvider.DiscardUnknown(m) } -var xxx_messageInfo_QueryProviderRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryProvider proto.InternalMessageInfo -func (m *QueryProviderRequest) GetAddress() string { +func (m *QueryProvider) GetAddress() string { if m != nil { return m.Address } @@ -670,22 +670,22 @@ func (m *QueryProviderResponse) GetProvider() Providers { return Providers{} } -type QueryAllProvidersRequest struct { +type QueryAllProviders struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllProvidersRequest) Reset() { *m = QueryAllProvidersRequest{} } -func (m *QueryAllProvidersRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllProvidersRequest) ProtoMessage() {} -func (*QueryAllProvidersRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllProviders) Reset() { *m = QueryAllProviders{} } +func (m *QueryAllProviders) String() string { return proto.CompactTextString(m) } +func (*QueryAllProviders) ProtoMessage() {} +func (*QueryAllProviders) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{13} } -func (m *QueryAllProvidersRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllProviders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllProvidersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllProviders) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllProvidersRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllProviders.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -695,19 +695,19 @@ func (m *QueryAllProvidersRequest) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *QueryAllProvidersRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllProvidersRequest.Merge(m, src) +func (m *QueryAllProviders) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllProviders.Merge(m, src) } -func (m *QueryAllProvidersRequest) XXX_Size() int { +func (m *QueryAllProviders) XXX_Size() int { return m.Size() } -func (m *QueryAllProvidersRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllProvidersRequest.DiscardUnknown(m) +func (m *QueryAllProviders) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllProviders.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllProvidersRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllProviders proto.InternalMessageInfo -func (m *QueryAllProvidersRequest) GetPagination() *query.PageRequest { +func (m *QueryAllProviders) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -766,25 +766,25 @@ func (m *QueryAllProvidersResponse) GetPagination() *query.PageResponse { return nil } -type QueryAttestationRequest struct { +type QueryAttestation struct { Prover string `protobuf:"bytes,1,opt,name=prover,proto3" json:"prover,omitempty"` Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` } -func (m *QueryAttestationRequest) Reset() { *m = QueryAttestationRequest{} } -func (m *QueryAttestationRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAttestationRequest) ProtoMessage() {} -func (*QueryAttestationRequest) Descriptor() ([]byte, []int) { +func (m *QueryAttestation) Reset() { *m = QueryAttestation{} } +func (m *QueryAttestation) String() string { return proto.CompactTextString(m) } +func (*QueryAttestation) ProtoMessage() {} +func (*QueryAttestation) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{15} } -func (m *QueryAttestationRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAttestation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAttestationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAttestation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAttestationRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAttestation.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -794,40 +794,40 @@ func (m *QueryAttestationRequest) XXX_Marshal(b []byte, deterministic bool) ([]b return b[:n], nil } } -func (m *QueryAttestationRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAttestationRequest.Merge(m, src) +func (m *QueryAttestation) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAttestation.Merge(m, src) } -func (m *QueryAttestationRequest) XXX_Size() int { +func (m *QueryAttestation) XXX_Size() int { return m.Size() } -func (m *QueryAttestationRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAttestationRequest.DiscardUnknown(m) +func (m *QueryAttestation) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAttestation.DiscardUnknown(m) } -var xxx_messageInfo_QueryAttestationRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAttestation proto.InternalMessageInfo -func (m *QueryAttestationRequest) GetProver() string { +func (m *QueryAttestation) GetProver() string { if m != nil { return m.Prover } return "" } -func (m *QueryAttestationRequest) GetMerkle() []byte { +func (m *QueryAttestation) GetMerkle() []byte { if m != nil { return m.Merkle } return nil } -func (m *QueryAttestationRequest) GetOwner() string { +func (m *QueryAttestation) GetOwner() string { if m != nil { return m.Owner } return "" } -func (m *QueryAttestationRequest) GetStart() int64 { +func (m *QueryAttestation) GetStart() int64 { if m != nil { return m.Start } @@ -878,22 +878,22 @@ func (m *QueryAttestationResponse) GetAttestation() AttestationForm { return AttestationForm{} } -type QueryAllAttestationsRequest struct { +type QueryAllAttestations struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllAttestationsRequest) Reset() { *m = QueryAllAttestationsRequest{} } -func (m *QueryAllAttestationsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllAttestationsRequest) ProtoMessage() {} -func (*QueryAllAttestationsRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllAttestations) Reset() { *m = QueryAllAttestations{} } +func (m *QueryAllAttestations) String() string { return proto.CompactTextString(m) } +func (*QueryAllAttestations) ProtoMessage() {} +func (*QueryAllAttestations) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{17} } -func (m *QueryAllAttestationsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllAttestations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllAttestationsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllAttestations) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllAttestationsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllAttestations.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -903,19 +903,19 @@ func (m *QueryAllAttestationsRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryAllAttestationsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllAttestationsRequest.Merge(m, src) +func (m *QueryAllAttestations) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllAttestations.Merge(m, src) } -func (m *QueryAllAttestationsRequest) XXX_Size() int { +func (m *QueryAllAttestations) XXX_Size() int { return m.Size() } -func (m *QueryAllAttestationsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllAttestationsRequest.DiscardUnknown(m) +func (m *QueryAllAttestations) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllAttestations.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllAttestationsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllAttestations proto.InternalMessageInfo -func (m *QueryAllAttestationsRequest) GetPagination() *query.PageRequest { +func (m *QueryAllAttestations) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -974,25 +974,25 @@ func (m *QueryAllAttestationsResponse) GetPagination() *query.PageResponse { return nil } -type QueryReportRequest struct { +type QueryReport struct { Prover string `protobuf:"bytes,1,opt,name=prover,proto3" json:"prover,omitempty"` Merkle []byte `protobuf:"bytes,2,opt,name=merkle,proto3" json:"merkle,omitempty"` Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` } -func (m *QueryReportRequest) Reset() { *m = QueryReportRequest{} } -func (m *QueryReportRequest) String() string { return proto.CompactTextString(m) } -func (*QueryReportRequest) ProtoMessage() {} -func (*QueryReportRequest) Descriptor() ([]byte, []int) { +func (m *QueryReport) Reset() { *m = QueryReport{} } +func (m *QueryReport) String() string { return proto.CompactTextString(m) } +func (*QueryReport) ProtoMessage() {} +func (*QueryReport) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{19} } -func (m *QueryReportRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryReportRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryReportRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryReport.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1002,40 +1002,40 @@ func (m *QueryReportRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryReportRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryReportRequest.Merge(m, src) +func (m *QueryReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryReport.Merge(m, src) } -func (m *QueryReportRequest) XXX_Size() int { +func (m *QueryReport) XXX_Size() int { return m.Size() } -func (m *QueryReportRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryReportRequest.DiscardUnknown(m) +func (m *QueryReport) XXX_DiscardUnknown() { + xxx_messageInfo_QueryReport.DiscardUnknown(m) } -var xxx_messageInfo_QueryReportRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryReport proto.InternalMessageInfo -func (m *QueryReportRequest) GetProver() string { +func (m *QueryReport) GetProver() string { if m != nil { return m.Prover } return "" } -func (m *QueryReportRequest) GetMerkle() []byte { +func (m *QueryReport) GetMerkle() []byte { if m != nil { return m.Merkle } return nil } -func (m *QueryReportRequest) GetOwner() string { +func (m *QueryReport) GetOwner() string { if m != nil { return m.Owner } return "" } -func (m *QueryReportRequest) GetStart() int64 { +func (m *QueryReport) GetStart() int64 { if m != nil { return m.Start } @@ -1086,22 +1086,22 @@ func (m *QueryReportResponse) GetReport() ReportForm { return ReportForm{} } -type QueryAllReportsRequest struct { +type QueryAllReports struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllReportsRequest) Reset() { *m = QueryAllReportsRequest{} } -func (m *QueryAllReportsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllReportsRequest) ProtoMessage() {} -func (*QueryAllReportsRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllReports) Reset() { *m = QueryAllReports{} } +func (m *QueryAllReports) String() string { return proto.CompactTextString(m) } +func (*QueryAllReports) ProtoMessage() {} +func (*QueryAllReports) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{21} } -func (m *QueryAllReportsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllReports) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllReports) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllReportsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllReports.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1111,19 +1111,19 @@ func (m *QueryAllReportsRequest) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryAllReportsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllReportsRequest.Merge(m, src) +func (m *QueryAllReports) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllReports.Merge(m, src) } -func (m *QueryAllReportsRequest) XXX_Size() int { +func (m *QueryAllReports) XXX_Size() int { return m.Size() } -func (m *QueryAllReportsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllReportsRequest.DiscardUnknown(m) +func (m *QueryAllReports) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllReports.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllReportsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllReports proto.InternalMessageInfo -func (m *QueryAllReportsRequest) GetPagination() *query.PageRequest { +func (m *QueryAllReports) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -1182,22 +1182,22 @@ func (m *QueryAllReportsResponse) GetPagination() *query.PageResponse { return nil } -type QueryFreeSpaceRequest struct { +type QueryFreeSpace struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryFreeSpaceRequest) Reset() { *m = QueryFreeSpaceRequest{} } -func (m *QueryFreeSpaceRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFreeSpaceRequest) ProtoMessage() {} -func (*QueryFreeSpaceRequest) Descriptor() ([]byte, []int) { +func (m *QueryFreeSpace) Reset() { *m = QueryFreeSpace{} } +func (m *QueryFreeSpace) String() string { return proto.CompactTextString(m) } +func (*QueryFreeSpace) ProtoMessage() {} +func (*QueryFreeSpace) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{23} } -func (m *QueryFreeSpaceRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFreeSpace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFreeSpaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFreeSpace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFreeSpaceRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFreeSpace.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1207,41 +1207,41 @@ func (m *QueryFreeSpaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byt return b[:n], nil } } -func (m *QueryFreeSpaceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFreeSpaceRequest.Merge(m, src) +func (m *QueryFreeSpace) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFreeSpace.Merge(m, src) } -func (m *QueryFreeSpaceRequest) XXX_Size() int { +func (m *QueryFreeSpace) XXX_Size() int { return m.Size() } -func (m *QueryFreeSpaceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFreeSpaceRequest.DiscardUnknown(m) +func (m *QueryFreeSpace) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFreeSpace.DiscardUnknown(m) } -var xxx_messageInfo_QueryFreeSpaceRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFreeSpace proto.InternalMessageInfo -func (m *QueryFreeSpaceRequest) GetAddress() string { +func (m *QueryFreeSpace) GetAddress() string { if m != nil { return m.Address } return "" } -type QueryStoreCountRequest struct { +type QueryStoreCount struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryStoreCountRequest) Reset() { *m = QueryStoreCountRequest{} } -func (m *QueryStoreCountRequest) String() string { return proto.CompactTextString(m) } -func (*QueryStoreCountRequest) ProtoMessage() {} -func (*QueryStoreCountRequest) Descriptor() ([]byte, []int) { +func (m *QueryStoreCount) Reset() { *m = QueryStoreCount{} } +func (m *QueryStoreCount) String() string { return proto.CompactTextString(m) } +func (*QueryStoreCount) ProtoMessage() {} +func (*QueryStoreCount) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{24} } -func (m *QueryStoreCountRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryStoreCount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryStoreCountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryStoreCount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryStoreCountRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryStoreCount.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1251,19 +1251,19 @@ func (m *QueryStoreCountRequest) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryStoreCountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryStoreCountRequest.Merge(m, src) +func (m *QueryStoreCount) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryStoreCount.Merge(m, src) } -func (m *QueryStoreCountRequest) XXX_Size() int { +func (m *QueryStoreCount) XXX_Size() int { return m.Size() } -func (m *QueryStoreCountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryStoreCountRequest.DiscardUnknown(m) +func (m *QueryStoreCount) XXX_DiscardUnknown() { + xxx_messageInfo_QueryStoreCount.DiscardUnknown(m) } -var xxx_messageInfo_QueryStoreCountRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryStoreCount proto.InternalMessageInfo -func (m *QueryStoreCountRequest) GetAddress() string { +func (m *QueryStoreCount) GetAddress() string { if m != nil { return m.Address } @@ -1358,22 +1358,22 @@ func (m *QueryStoreCountResponse) GetCount() string { return "" } -type QueryFindFileRequest struct { +type QueryFindFile struct { Merkle []byte `protobuf:"bytes,1,opt,name=merkle,proto3" json:"merkle,omitempty"` } -func (m *QueryFindFileRequest) Reset() { *m = QueryFindFileRequest{} } -func (m *QueryFindFileRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFindFileRequest) ProtoMessage() {} -func (*QueryFindFileRequest) Descriptor() ([]byte, []int) { +func (m *QueryFindFile) Reset() { *m = QueryFindFile{} } +func (m *QueryFindFile) String() string { return proto.CompactTextString(m) } +func (*QueryFindFile) ProtoMessage() {} +func (*QueryFindFile) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{27} } -func (m *QueryFindFileRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFindFile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFindFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFindFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFindFileRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFindFile.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1383,19 +1383,19 @@ func (m *QueryFindFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryFindFileRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFindFileRequest.Merge(m, src) +func (m *QueryFindFile) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFindFile.Merge(m, src) } -func (m *QueryFindFileRequest) XXX_Size() int { +func (m *QueryFindFile) XXX_Size() int { return m.Size() } -func (m *QueryFindFileRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFindFileRequest.DiscardUnknown(m) +func (m *QueryFindFile) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFindFile.DiscardUnknown(m) } -var xxx_messageInfo_QueryFindFileRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFindFile proto.InternalMessageInfo -func (m *QueryFindFileRequest) GetMerkle() []byte { +func (m *QueryFindFile) GetMerkle() []byte { if m != nil { return m.Merkle } @@ -1446,22 +1446,22 @@ func (m *QueryFindFileResponse) GetProviderIps() string { return "" } -type QueryClientFreeSpaceRequest struct { +type QueryClientFreeSpace struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryClientFreeSpaceRequest) Reset() { *m = QueryClientFreeSpaceRequest{} } -func (m *QueryClientFreeSpaceRequest) String() string { return proto.CompactTextString(m) } -func (*QueryClientFreeSpaceRequest) ProtoMessage() {} -func (*QueryClientFreeSpaceRequest) Descriptor() ([]byte, []int) { +func (m *QueryClientFreeSpace) Reset() { *m = QueryClientFreeSpace{} } +func (m *QueryClientFreeSpace) String() string { return proto.CompactTextString(m) } +func (*QueryClientFreeSpace) ProtoMessage() {} +func (*QueryClientFreeSpace) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{29} } -func (m *QueryClientFreeSpaceRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryClientFreeSpace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryClientFreeSpaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryClientFreeSpace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryClientFreeSpaceRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryClientFreeSpace.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1471,19 +1471,19 @@ func (m *QueryClientFreeSpaceRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryClientFreeSpaceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryClientFreeSpaceRequest.Merge(m, src) +func (m *QueryClientFreeSpace) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClientFreeSpace.Merge(m, src) } -func (m *QueryClientFreeSpaceRequest) XXX_Size() int { +func (m *QueryClientFreeSpace) XXX_Size() int { return m.Size() } -func (m *QueryClientFreeSpaceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryClientFreeSpaceRequest.DiscardUnknown(m) +func (m *QueryClientFreeSpace) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClientFreeSpace.DiscardUnknown(m) } -var xxx_messageInfo_QueryClientFreeSpaceRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryClientFreeSpace proto.InternalMessageInfo -func (m *QueryClientFreeSpaceRequest) GetAddress() string { +func (m *QueryClientFreeSpace) GetAddress() string { if m != nil { return m.Address } @@ -1534,22 +1534,22 @@ func (m *QueryClientFreeSpaceResponse) GetBytesFree() int64 { return 0 } -type QueryPayDataRequest struct { +type QueryPayData struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryPayDataRequest) Reset() { *m = QueryPayDataRequest{} } -func (m *QueryPayDataRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPayDataRequest) ProtoMessage() {} -func (*QueryPayDataRequest) Descriptor() ([]byte, []int) { +func (m *QueryPayData) Reset() { *m = QueryPayData{} } +func (m *QueryPayData) String() string { return proto.CompactTextString(m) } +func (*QueryPayData) ProtoMessage() {} +func (*QueryPayData) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{31} } -func (m *QueryPayDataRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryPayData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryPayDataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryPayData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryPayDataRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryPayData.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1559,19 +1559,19 @@ func (m *QueryPayDataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryPayDataRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPayDataRequest.Merge(m, src) +func (m *QueryPayData) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPayData.Merge(m, src) } -func (m *QueryPayDataRequest) XXX_Size() int { +func (m *QueryPayData) XXX_Size() int { return m.Size() } -func (m *QueryPayDataRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPayDataRequest.DiscardUnknown(m) +func (m *QueryPayData) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPayData.DiscardUnknown(m) } -var xxx_messageInfo_QueryPayDataRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryPayData proto.InternalMessageInfo -func (m *QueryPayDataRequest) GetAddress() string { +func (m *QueryPayData) GetAddress() string { if m != nil { return m.Address } @@ -1630,22 +1630,22 @@ func (m *QueryPayDataResponse) GetBytes() int64 { return 0 } -type QueryStoragePaymentInfoRequest struct { +type QueryStoragePaymentInfo struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryStoragePaymentInfoRequest) Reset() { *m = QueryStoragePaymentInfoRequest{} } -func (m *QueryStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } -func (*QueryStoragePaymentInfoRequest) ProtoMessage() {} -func (*QueryStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { +func (m *QueryStoragePaymentInfo) Reset() { *m = QueryStoragePaymentInfo{} } +func (m *QueryStoragePaymentInfo) String() string { return proto.CompactTextString(m) } +func (*QueryStoragePaymentInfo) ProtoMessage() {} +func (*QueryStoragePaymentInfo) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{33} } -func (m *QueryStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryStoragePaymentInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryStoragePaymentInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryStoragePaymentInfoRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryStoragePaymentInfo.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1655,19 +1655,19 @@ func (m *QueryStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *QueryStoragePaymentInfoRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryStoragePaymentInfoRequest.Merge(m, src) +func (m *QueryStoragePaymentInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryStoragePaymentInfo.Merge(m, src) } -func (m *QueryStoragePaymentInfoRequest) XXX_Size() int { +func (m *QueryStoragePaymentInfo) XXX_Size() int { return m.Size() } -func (m *QueryStoragePaymentInfoRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryStoragePaymentInfoRequest.DiscardUnknown(m) +func (m *QueryStoragePaymentInfo) XXX_DiscardUnknown() { + xxx_messageInfo_QueryStoragePaymentInfo.DiscardUnknown(m) } -var xxx_messageInfo_QueryStoragePaymentInfoRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryStoragePaymentInfo proto.InternalMessageInfo -func (m *QueryStoragePaymentInfoRequest) GetAddress() string { +func (m *QueryStoragePaymentInfo) GetAddress() string { if m != nil { return m.Address } @@ -1718,22 +1718,22 @@ func (m *QueryStoragePaymentInfoResponse) GetStoragePaymentInfo() StoragePayment return StoragePaymentInfo{} } -type QueryAllStoragePaymentInfoRequest struct { +type QueryAllStoragePaymentInfo struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllStoragePaymentInfoRequest) Reset() { *m = QueryAllStoragePaymentInfoRequest{} } -func (m *QueryAllStoragePaymentInfoRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllStoragePaymentInfoRequest) ProtoMessage() {} -func (*QueryAllStoragePaymentInfoRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllStoragePaymentInfo) Reset() { *m = QueryAllStoragePaymentInfo{} } +func (m *QueryAllStoragePaymentInfo) String() string { return proto.CompactTextString(m) } +func (*QueryAllStoragePaymentInfo) ProtoMessage() {} +func (*QueryAllStoragePaymentInfo) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{35} } -func (m *QueryAllStoragePaymentInfoRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllStoragePaymentInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllStoragePaymentInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllStoragePaymentInfoRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllStoragePaymentInfo.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1743,19 +1743,19 @@ func (m *QueryAllStoragePaymentInfoRequest) XXX_Marshal(b []byte, deterministic return b[:n], nil } } -func (m *QueryAllStoragePaymentInfoRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllStoragePaymentInfoRequest.Merge(m, src) +func (m *QueryAllStoragePaymentInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllStoragePaymentInfo.Merge(m, src) } -func (m *QueryAllStoragePaymentInfoRequest) XXX_Size() int { +func (m *QueryAllStoragePaymentInfo) XXX_Size() int { return m.Size() } -func (m *QueryAllStoragePaymentInfoRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllStoragePaymentInfoRequest.DiscardUnknown(m) +func (m *QueryAllStoragePaymentInfo) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllStoragePaymentInfo.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllStoragePaymentInfoRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllStoragePaymentInfo proto.InternalMessageInfo -func (m *QueryAllStoragePaymentInfoRequest) GetPagination() *query.PageRequest { +func (m *QueryAllStoragePaymentInfo) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -1814,23 +1814,23 @@ func (m *QueryAllStoragePaymentInfoResponse) GetPagination() *query.PageResponse return nil } -type QueryFileUploadCheckRequest struct { +type QueryFileUploadCheck struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` Bytes int64 `protobuf:"varint,2,opt,name=bytes,proto3" json:"bytes,omitempty"` } -func (m *QueryFileUploadCheckRequest) Reset() { *m = QueryFileUploadCheckRequest{} } -func (m *QueryFileUploadCheckRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFileUploadCheckRequest) ProtoMessage() {} -func (*QueryFileUploadCheckRequest) Descriptor() ([]byte, []int) { +func (m *QueryFileUploadCheck) Reset() { *m = QueryFileUploadCheck{} } +func (m *QueryFileUploadCheck) String() string { return proto.CompactTextString(m) } +func (*QueryFileUploadCheck) ProtoMessage() {} +func (*QueryFileUploadCheck) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{37} } -func (m *QueryFileUploadCheckRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFileUploadCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFileUploadCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFileUploadCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFileUploadCheckRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFileUploadCheck.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1840,26 +1840,26 @@ func (m *QueryFileUploadCheckRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryFileUploadCheckRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFileUploadCheckRequest.Merge(m, src) +func (m *QueryFileUploadCheck) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFileUploadCheck.Merge(m, src) } -func (m *QueryFileUploadCheckRequest) XXX_Size() int { +func (m *QueryFileUploadCheck) XXX_Size() int { return m.Size() } -func (m *QueryFileUploadCheckRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFileUploadCheckRequest.DiscardUnknown(m) +func (m *QueryFileUploadCheck) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFileUploadCheck.DiscardUnknown(m) } -var xxx_messageInfo_QueryFileUploadCheckRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFileUploadCheck proto.InternalMessageInfo -func (m *QueryFileUploadCheckRequest) GetAddress() string { +func (m *QueryFileUploadCheck) GetAddress() string { if m != nil { return m.Address } return "" } -func (m *QueryFileUploadCheckRequest) GetBytes() int64 { +func (m *QueryFileUploadCheck) GetBytes() int64 { if m != nil { return m.Bytes } @@ -1910,23 +1910,23 @@ func (m *QueryFileUploadCheckResponse) GetValid() bool { return false } -type QueryPriceCheckRequest struct { +type QueryPriceCheck struct { Duration string `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` Bytes int64 `protobuf:"varint,2,opt,name=bytes,proto3" json:"bytes,omitempty"` } -func (m *QueryPriceCheckRequest) Reset() { *m = QueryPriceCheckRequest{} } -func (m *QueryPriceCheckRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPriceCheckRequest) ProtoMessage() {} -func (*QueryPriceCheckRequest) Descriptor() ([]byte, []int) { +func (m *QueryPriceCheck) Reset() { *m = QueryPriceCheck{} } +func (m *QueryPriceCheck) String() string { return proto.CompactTextString(m) } +func (*QueryPriceCheck) ProtoMessage() {} +func (*QueryPriceCheck) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{39} } -func (m *QueryPriceCheckRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryPriceCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryPriceCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryPriceCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryPriceCheckRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryPriceCheck.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -1936,26 +1936,26 @@ func (m *QueryPriceCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryPriceCheckRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPriceCheckRequest.Merge(m, src) +func (m *QueryPriceCheck) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPriceCheck.Merge(m, src) } -func (m *QueryPriceCheckRequest) XXX_Size() int { +func (m *QueryPriceCheck) XXX_Size() int { return m.Size() } -func (m *QueryPriceCheckRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPriceCheckRequest.DiscardUnknown(m) +func (m *QueryPriceCheck) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPriceCheck.DiscardUnknown(m) } -var xxx_messageInfo_QueryPriceCheckRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryPriceCheck proto.InternalMessageInfo -func (m *QueryPriceCheckRequest) GetDuration() string { +func (m *QueryPriceCheck) GetDuration() string { if m != nil { return m.Duration } return "" } -func (m *QueryPriceCheckRequest) GetBytes() int64 { +func (m *QueryPriceCheck) GetBytes() int64 { if m != nil { return m.Bytes } @@ -2006,21 +2006,21 @@ func (m *QueryPriceCheckResponse) GetPrice() int64 { return 0 } -type QueryActiveProvidersRequest struct { +type QueryActiveProviders struct { } -func (m *QueryActiveProvidersRequest) Reset() { *m = QueryActiveProvidersRequest{} } -func (m *QueryActiveProvidersRequest) String() string { return proto.CompactTextString(m) } -func (*QueryActiveProvidersRequest) ProtoMessage() {} -func (*QueryActiveProvidersRequest) Descriptor() ([]byte, []int) { +func (m *QueryActiveProviders) Reset() { *m = QueryActiveProviders{} } +func (m *QueryActiveProviders) String() string { return proto.CompactTextString(m) } +func (*QueryActiveProviders) ProtoMessage() {} +func (*QueryActiveProviders) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{41} } -func (m *QueryActiveProvidersRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryActiveProviders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryActiveProvidersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryActiveProviders) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryActiveProvidersRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryActiveProviders.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -2030,17 +2030,17 @@ func (m *QueryActiveProvidersRequest) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryActiveProvidersRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryActiveProvidersRequest.Merge(m, src) +func (m *QueryActiveProviders) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryActiveProviders.Merge(m, src) } -func (m *QueryActiveProvidersRequest) XXX_Size() int { +func (m *QueryActiveProviders) XXX_Size() int { return m.Size() } -func (m *QueryActiveProvidersRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryActiveProvidersRequest.DiscardUnknown(m) +func (m *QueryActiveProviders) XXX_DiscardUnknown() { + xxx_messageInfo_QueryActiveProviders.DiscardUnknown(m) } -var xxx_messageInfo_QueryActiveProvidersRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryActiveProviders proto.InternalMessageInfo type QueryActiveProvidersResponse struct { Providers []ActiveProviders `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers"` @@ -2086,21 +2086,21 @@ func (m *QueryActiveProvidersResponse) GetProviders() []ActiveProviders { return nil } -type QueryStorageStatsRequest struct { +type QueryStorageStats struct { } -func (m *QueryStorageStatsRequest) Reset() { *m = QueryStorageStatsRequest{} } -func (m *QueryStorageStatsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryStorageStatsRequest) ProtoMessage() {} -func (*QueryStorageStatsRequest) Descriptor() ([]byte, []int) { +func (m *QueryStorageStats) Reset() { *m = QueryStorageStats{} } +func (m *QueryStorageStats) String() string { return proto.CompactTextString(m) } +func (*QueryStorageStats) ProtoMessage() {} +func (*QueryStorageStats) Descriptor() ([]byte, []int) { return fileDescriptor_9fe03bff51a37284, []int{43} } -func (m *QueryStorageStatsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryStorageStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryStorageStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryStorageStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryStorageStatsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryStorageStats.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -2110,17 +2110,17 @@ func (m *QueryStorageStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *QueryStorageStatsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryStorageStatsRequest.Merge(m, src) +func (m *QueryStorageStats) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryStorageStats.Merge(m, src) } -func (m *QueryStorageStatsRequest) XXX_Size() int { +func (m *QueryStorageStats) XXX_Size() int { return m.Size() } -func (m *QueryStorageStatsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryStorageStatsRequest.DiscardUnknown(m) +func (m *QueryStorageStats) XXX_DiscardUnknown() { + xxx_messageInfo_QueryStorageStats.DiscardUnknown(m) } -var xxx_messageInfo_QueryStorageStatsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryStorageStats proto.InternalMessageInfo type QueryStorageStatsResponse struct { Purchased uint64 `protobuf:"varint,1,opt,name=purchased,proto3" json:"purchased,omitempty"` @@ -2192,50 +2192,50 @@ func (m *QueryStorageStatsResponse) GetUsersByPlan() map[int64]int64 { } func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.storage.QueryParamsRequest") + proto.RegisterType((*QueryParams)(nil), "canine_chain.storage.QueryParams") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.storage.QueryParamsResponse") - proto.RegisterType((*QueryProofRequest)(nil), "canine_chain.storage.QueryProofRequest") + proto.RegisterType((*QueryProof)(nil), "canine_chain.storage.QueryProof") proto.RegisterType((*QueryProofResponse)(nil), "canine_chain.storage.QueryProofResponse") - proto.RegisterType((*QueryProofsByAddressRequest)(nil), "canine_chain.storage.QueryProofsByAddressRequest") + proto.RegisterType((*QueryProofsByAddress)(nil), "canine_chain.storage.QueryProofsByAddress") proto.RegisterType((*QueryProofsByAddressResponse)(nil), "canine_chain.storage.QueryProofsByAddressResponse") - proto.RegisterType((*QueryFileRequest)(nil), "canine_chain.storage.QueryFileRequest") + proto.RegisterType((*QueryFile)(nil), "canine_chain.storage.QueryFile") proto.RegisterType((*QueryFileResponse)(nil), "canine_chain.storage.QueryFileResponse") - proto.RegisterType((*QueryAllFilesRequest)(nil), "canine_chain.storage.QueryAllFilesRequest") - proto.RegisterType((*QueryOpenFilesRequest)(nil), "canine_chain.storage.QueryOpenFilesRequest") + proto.RegisterType((*QueryAllFiles)(nil), "canine_chain.storage.QueryAllFiles") + proto.RegisterType((*QueryOpenFiles)(nil), "canine_chain.storage.QueryOpenFiles") proto.RegisterType((*QueryAllFilesResponse)(nil), "canine_chain.storage.QueryAllFilesResponse") - proto.RegisterType((*QueryProviderRequest)(nil), "canine_chain.storage.QueryProviderRequest") + proto.RegisterType((*QueryProvider)(nil), "canine_chain.storage.QueryProvider") proto.RegisterType((*QueryProviderResponse)(nil), "canine_chain.storage.QueryProviderResponse") - proto.RegisterType((*QueryAllProvidersRequest)(nil), "canine_chain.storage.QueryAllProvidersRequest") + proto.RegisterType((*QueryAllProviders)(nil), "canine_chain.storage.QueryAllProviders") proto.RegisterType((*QueryAllProvidersResponse)(nil), "canine_chain.storage.QueryAllProvidersResponse") - proto.RegisterType((*QueryAttestationRequest)(nil), "canine_chain.storage.QueryAttestationRequest") + proto.RegisterType((*QueryAttestation)(nil), "canine_chain.storage.QueryAttestation") proto.RegisterType((*QueryAttestationResponse)(nil), "canine_chain.storage.QueryAttestationResponse") - proto.RegisterType((*QueryAllAttestationsRequest)(nil), "canine_chain.storage.QueryAllAttestationsRequest") + proto.RegisterType((*QueryAllAttestations)(nil), "canine_chain.storage.QueryAllAttestations") proto.RegisterType((*QueryAllAttestationsResponse)(nil), "canine_chain.storage.QueryAllAttestationsResponse") - proto.RegisterType((*QueryReportRequest)(nil), "canine_chain.storage.QueryReportRequest") + proto.RegisterType((*QueryReport)(nil), "canine_chain.storage.QueryReport") proto.RegisterType((*QueryReportResponse)(nil), "canine_chain.storage.QueryReportResponse") - proto.RegisterType((*QueryAllReportsRequest)(nil), "canine_chain.storage.QueryAllReportsRequest") + proto.RegisterType((*QueryAllReports)(nil), "canine_chain.storage.QueryAllReports") proto.RegisterType((*QueryAllReportsResponse)(nil), "canine_chain.storage.QueryAllReportsResponse") - proto.RegisterType((*QueryFreeSpaceRequest)(nil), "canine_chain.storage.QueryFreeSpaceRequest") - proto.RegisterType((*QueryStoreCountRequest)(nil), "canine_chain.storage.QueryStoreCountRequest") + proto.RegisterType((*QueryFreeSpace)(nil), "canine_chain.storage.QueryFreeSpace") + proto.RegisterType((*QueryStoreCount)(nil), "canine_chain.storage.QueryStoreCount") proto.RegisterType((*QueryFreeSpaceResponse)(nil), "canine_chain.storage.QueryFreeSpaceResponse") proto.RegisterType((*QueryStoreCountResponse)(nil), "canine_chain.storage.QueryStoreCountResponse") - proto.RegisterType((*QueryFindFileRequest)(nil), "canine_chain.storage.QueryFindFileRequest") + proto.RegisterType((*QueryFindFile)(nil), "canine_chain.storage.QueryFindFile") proto.RegisterType((*QueryFindFileResponse)(nil), "canine_chain.storage.QueryFindFileResponse") - proto.RegisterType((*QueryClientFreeSpaceRequest)(nil), "canine_chain.storage.QueryClientFreeSpaceRequest") + proto.RegisterType((*QueryClientFreeSpace)(nil), "canine_chain.storage.QueryClientFreeSpace") proto.RegisterType((*QueryClientFreeSpaceResponse)(nil), "canine_chain.storage.QueryClientFreeSpaceResponse") - proto.RegisterType((*QueryPayDataRequest)(nil), "canine_chain.storage.QueryPayDataRequest") + proto.RegisterType((*QueryPayData)(nil), "canine_chain.storage.QueryPayData") proto.RegisterType((*QueryPayDataResponse)(nil), "canine_chain.storage.QueryPayDataResponse") - proto.RegisterType((*QueryStoragePaymentInfoRequest)(nil), "canine_chain.storage.QueryStoragePaymentInfoRequest") + proto.RegisterType((*QueryStoragePaymentInfo)(nil), "canine_chain.storage.QueryStoragePaymentInfo") proto.RegisterType((*QueryStoragePaymentInfoResponse)(nil), "canine_chain.storage.QueryStoragePaymentInfoResponse") - proto.RegisterType((*QueryAllStoragePaymentInfoRequest)(nil), "canine_chain.storage.QueryAllStoragePaymentInfoRequest") + proto.RegisterType((*QueryAllStoragePaymentInfo)(nil), "canine_chain.storage.QueryAllStoragePaymentInfo") proto.RegisterType((*QueryAllStoragePaymentInfoResponse)(nil), "canine_chain.storage.QueryAllStoragePaymentInfoResponse") - proto.RegisterType((*QueryFileUploadCheckRequest)(nil), "canine_chain.storage.QueryFileUploadCheckRequest") + proto.RegisterType((*QueryFileUploadCheck)(nil), "canine_chain.storage.QueryFileUploadCheck") proto.RegisterType((*QueryFileUploadCheckResponse)(nil), "canine_chain.storage.QueryFileUploadCheckResponse") - proto.RegisterType((*QueryPriceCheckRequest)(nil), "canine_chain.storage.QueryPriceCheckRequest") + proto.RegisterType((*QueryPriceCheck)(nil), "canine_chain.storage.QueryPriceCheck") proto.RegisterType((*QueryPriceCheckResponse)(nil), "canine_chain.storage.QueryPriceCheckResponse") - proto.RegisterType((*QueryActiveProvidersRequest)(nil), "canine_chain.storage.QueryActiveProvidersRequest") + proto.RegisterType((*QueryActiveProviders)(nil), "canine_chain.storage.QueryActiveProviders") proto.RegisterType((*QueryActiveProvidersResponse)(nil), "canine_chain.storage.QueryActiveProvidersResponse") - proto.RegisterType((*QueryStorageStatsRequest)(nil), "canine_chain.storage.QueryStorageStatsRequest") + proto.RegisterType((*QueryStorageStats)(nil), "canine_chain.storage.QueryStorageStats") proto.RegisterType((*QueryStorageStatsResponse)(nil), "canine_chain.storage.QueryStorageStatsResponse") proto.RegisterMapType((map[int64]int64)(nil), "canine_chain.storage.QueryStorageStatsResponse.UsersByPlanEntry") } @@ -2243,136 +2243,134 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 2051 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xcd, 0x73, 0x1c, 0x47, - 0x15, 0x77, 0xeb, 0x2b, 0xda, 0x27, 0x05, 0x9b, 0x46, 0x09, 0x62, 0xb1, 0x65, 0x79, 0xb0, 0x65, - 0x59, 0xb6, 0x66, 0xac, 0x75, 0x8c, 0x8d, 0x1c, 0xbb, 0x62, 0xc9, 0xc8, 0x18, 0xe2, 0x44, 0x5e, - 0x95, 0x73, 0xc8, 0x81, 0x49, 0x6b, 0xb7, 0xb5, 0x1e, 0xb4, 0x9a, 0x99, 0xcc, 0xcc, 0x0a, 0xb6, - 0x54, 0xba, 0x84, 0x5b, 0x2e, 0xa4, 0x8a, 0x03, 0x97, 0x50, 0x21, 0x45, 0x2e, 0x29, 0x0a, 0x42, - 0x71, 0xe2, 0x02, 0x55, 0xdc, 0x72, 0x23, 0x55, 0x5c, 0x28, 0x0e, 0x29, 0xca, 0x86, 0xff, 0x83, - 0xea, 0xee, 0xd7, 0x3b, 0xb3, 0xbb, 0xb3, 0xbd, 0xbb, 0xae, 0x2d, 0x72, 0xd2, 0x4e, 0xcf, 0xfb, - 0xf8, 0xbd, 0x8f, 0x7e, 0xdd, 0xbf, 0x29, 0xc1, 0x62, 0x85, 0xf9, 0x9e, 0xcf, 0xdd, 0xca, 0x13, - 0xe6, 0xf9, 0x4e, 0x9c, 0x04, 0x11, 0xab, 0x71, 0xe7, 0xdd, 0x06, 0x8f, 0x9a, 0x76, 0x18, 0x05, - 0x49, 0x40, 0xe7, 0xb2, 0x12, 0x36, 0x4a, 0x14, 0xe7, 0x6a, 0x41, 0x2d, 0x90, 0x02, 0x8e, 0xf8, - 0xa5, 0x64, 0x8b, 0xa7, 0x6b, 0x41, 0x50, 0xab, 0x73, 0x87, 0x85, 0x9e, 0xc3, 0x7c, 0x3f, 0x48, - 0x58, 0xe2, 0x05, 0x7e, 0x8c, 0x6f, 0x57, 0x2a, 0x41, 0x7c, 0x10, 0xc4, 0xce, 0x2e, 0x8b, 0xd1, - 0x85, 0x73, 0xb8, 0xb6, 0xcb, 0x13, 0xb6, 0xe6, 0x84, 0xac, 0xe6, 0xf9, 0x52, 0x18, 0x65, 0xcf, - 0xe5, 0xe2, 0x0a, 0x59, 0xc4, 0x0e, 0xb4, 0xb9, 0x8b, 0xb9, 0x22, 0xac, 0x92, 0x78, 0x87, 0xdc, - 0xad, 0x72, 0x56, 0xd7, 0x82, 0xe7, 0xf3, 0x6d, 0x45, 0xc1, 0xa1, 0x57, 0xe5, 0x91, 0xd9, 0x5c, - 0xc8, 0x9a, 0x07, 0xdc, 0x4f, 0x5c, 0xcf, 0xdf, 0xc3, 0x20, 0xad, 0x39, 0xa0, 0x8f, 0x04, 0xf8, - 0x6d, 0x09, 0xa6, 0xcc, 0xdf, 0x6d, 0xf0, 0x38, 0xb1, 0x1e, 0xc1, 0x37, 0xda, 0x56, 0xe3, 0x30, - 0xf0, 0x63, 0x4e, 0xd7, 0x61, 0x4a, 0x81, 0x9e, 0x27, 0x8b, 0x64, 0x79, 0xa6, 0x74, 0xda, 0xce, - 0x4b, 0xa7, 0xad, 0xb4, 0x36, 0x26, 0x3e, 0xff, 0xf2, 0xec, 0x89, 0x32, 0x6a, 0x58, 0xef, 0x11, - 0xf8, 0xba, 0xb2, 0x19, 0x05, 0xc1, 0x1e, 0x3a, 0xa2, 0x97, 0xe0, 0x94, 0x86, 0xee, 0xb2, 0x6a, - 0x35, 0xe2, 0xb1, 0xb2, 0x5d, 0x28, 0x9f, 0xd4, 0xeb, 0x77, 0xd5, 0x32, 0x7d, 0x19, 0xa6, 0x0e, - 0x78, 0xb4, 0x5f, 0xe7, 0xf3, 0x63, 0x8b, 0x64, 0x79, 0xb6, 0x8c, 0x4f, 0x74, 0x0e, 0x26, 0x83, - 0x9f, 0xfa, 0x3c, 0x9a, 0x1f, 0x97, 0x7a, 0xea, 0x41, 0xac, 0xc6, 0x09, 0x8b, 0x92, 0xf9, 0x89, - 0x45, 0xb2, 0x3c, 0x5e, 0x56, 0x0f, 0xd6, 0x23, 0x1d, 0xad, 0xc2, 0x80, 0x61, 0xdd, 0x82, 0xc9, - 0x50, 0x2c, 0x60, 0x54, 0x67, 0xf3, 0xa3, 0xda, 0xf2, 0xea, 0x5c, 0xea, 0x61, 0x60, 0x4a, 0xc7, - 0xfa, 0x80, 0xc0, 0xb7, 0x53, 0x9b, 0xf1, 0x46, 0x13, 0xf1, 0x3e, 0x47, 0x84, 0x5b, 0x00, 0x69, - 0xeb, 0xc8, 0x28, 0x67, 0x4a, 0x4b, 0xb6, 0xea, 0x33, 0x5b, 0xf4, 0x99, 0xad, 0x5a, 0x19, 0xfb, - 0xcc, 0xde, 0x66, 0x35, 0x8e, 0x6e, 0xca, 0x19, 0x4d, 0xeb, 0x13, 0x02, 0xa7, 0xf3, 0x21, 0x75, - 0x07, 0x3c, 0x3e, 0x6c, 0xc0, 0xf4, 0x7e, 0x0e, 0xca, 0x8b, 0x7d, 0x51, 0x2a, 0xcf, 0x6d, 0x30, - 0xdf, 0x82, 0x53, 0x12, 0xa5, 0xf0, 0xa3, 0xb3, 0x95, 0x16, 0x99, 0xe4, 0x17, 0x79, 0x2c, 0xb7, - 0xc8, 0xe3, 0xd9, 0x22, 0x6f, 0x63, 0xa3, 0x29, 0xbb, 0xad, 0x90, 0x27, 0xf6, 0x3c, 0x34, 0x3b, - 0x53, 0x3a, 0x97, 0x1f, 0xf1, 0x63, 0xdf, 0xdb, 0xf3, 0x78, 0x55, 0x28, 0x62, 0xcc, 0x52, 0xc9, - 0xfa, 0x31, 0xcc, 0x49, 0x8b, 0x77, 0xeb, 0x75, 0xf1, 0xae, 0x55, 0xdb, 0xf6, 0x82, 0x91, 0xe7, - 0x2e, 0xd8, 0xfb, 0x04, 0x5e, 0x92, 0x0e, 0xde, 0x0c, 0xb9, 0xdf, 0xe6, 0xe1, 0x2b, 0xe8, 0x9e, - 0x8f, 0x34, 0x98, 0x34, 0x5a, 0xcc, 0xe1, 0x6d, 0x98, 0x14, 0xe9, 0x88, 0xb1, 0x6d, 0x06, 0x4e, - 0xa2, 0xd2, 0x1a, 0x5d, 0xe3, 0x5c, 0xc5, 0x72, 0x6c, 0x63, 0x06, 0x74, 0xb2, 0xe6, 0xe1, 0x85, - 0xf6, 0x1c, 0xe9, 0x47, 0xeb, 0x6d, 0x0c, 0x29, 0xd5, 0xc0, 0x90, 0xee, 0xc2, 0xb4, 0xce, 0xa3, - 0x79, 0xf7, 0x6b, 0x4d, 0x3d, 0xd6, 0x5a, 0x6a, 0xd6, 0x2e, 0xcc, 0xeb, 0x74, 0xb5, 0x84, 0x46, - 0xdd, 0x20, 0x9f, 0x12, 0xf8, 0x56, 0x8e, 0x13, 0x0c, 0x62, 0x13, 0x0a, 0xad, 0xf9, 0x6f, 0xde, - 0xd2, 0x9d, 0x51, 0xa4, 0x7a, 0xa3, 0xab, 0x4e, 0x03, 0xbe, 0xa9, 0xa0, 0x26, 0x09, 0x8f, 0xd5, - 0x99, 0x99, 0xd9, 0xdd, 0xc2, 0x21, 0xe6, 0xba, 0x50, 0xc6, 0xa7, 0x91, 0x8c, 0x76, 0x4f, 0x97, - 0x21, 0xeb, 0x16, 0x13, 0xf4, 0x10, 0x66, 0x58, 0xba, 0x8c, 0x75, 0xb8, 0x90, 0x9f, 0xa2, 0x8c, - 0xfe, 0x56, 0x10, 0x1d, 0x60, 0xa2, 0xb2, 0xfa, 0x16, 0xc7, 0x89, 0x7f, 0xb7, 0x5e, 0xcf, 0x48, - 0x8f, 0xbc, 0xe8, 0x7f, 0xd6, 0x63, 0xbc, 0xcb, 0x0f, 0x86, 0xf5, 0x26, 0xcc, 0x66, 0x60, 0xe9, - 0xd2, 0x0f, 0x15, 0x57, 0x9b, 0x81, 0xd1, 0xf5, 0x40, 0x88, 0xe7, 0x6c, 0x99, 0x87, 0x41, 0x94, - 0xfc, 0x3f, 0xca, 0xff, 0x18, 0x6f, 0x2c, 0xda, 0x23, 0xa6, 0xe8, 0x0e, 0x4c, 0x45, 0x72, 0x05, - 0xeb, 0xb0, 0x98, 0x9f, 0x1c, 0xa5, 0x95, 0xc9, 0x0b, 0x6a, 0x59, 0xef, 0xc0, 0xcb, 0xba, 0x04, - 0x4a, 0x66, 0xe4, 0x55, 0xfe, 0x84, 0xe8, 0xfd, 0x92, 0x71, 0x81, 0xe8, 0x5f, 0x83, 0x17, 0x14, - 0x0e, 0x5d, 0xdb, 0x41, 0xe1, 0x6b, 0xb5, 0xd1, 0x55, 0x74, 0x0d, 0x27, 0xe8, 0x56, 0xc4, 0xf9, - 0x4e, 0xc8, 0x2a, 0xbc, 0xff, 0xd0, 0x2d, 0x61, 0xee, 0x76, 0x92, 0x20, 0xe2, 0x9b, 0x41, 0xc3, - 0x4f, 0xfa, 0xeb, 0xd8, 0xa8, 0x93, 0x71, 0x83, 0xb9, 0x10, 0x65, 0x17, 0x0b, 0xa8, 0xa1, 0x1e, - 0x2c, 0x07, 0x93, 0x97, 0xf5, 0x91, 0x2a, 0x54, 0xc4, 0x82, 0x56, 0x90, 0x0f, 0x96, 0x8d, 0x67, - 0xc7, 0x96, 0xe7, 0x57, 0x07, 0xb8, 0x78, 0x58, 0xeb, 0x3a, 0xee, 0x96, 0x3c, 0x9a, 0x3f, 0x07, - 0xb3, 0xad, 0x93, 0xd9, 0x0b, 0x75, 0x20, 0x33, 0x7a, 0xed, 0x41, 0x18, 0x5b, 0x37, 0x70, 0x4e, - 0x6c, 0xd6, 0x3d, 0xee, 0x27, 0x43, 0x64, 0xee, 0x36, 0x6e, 0xfc, 0x2e, 0x45, 0xf4, 0x7d, 0x06, - 0x60, 0xb7, 0x99, 0xf0, 0xd8, 0xdd, 0x8b, 0xb8, 0x02, 0x3c, 0x5e, 0x2e, 0xc8, 0x15, 0x21, 0x6b, - 0x39, 0xad, 0xdb, 0x7b, 0xf3, 0x1e, 0x4b, 0x58, 0x7f, 0x7f, 0x3b, 0xfa, 0x40, 0xd5, 0x0a, 0xe8, - 0xe7, 0x02, 0x7c, 0x2d, 0xf1, 0x0e, 0xb8, 0x1b, 0xf1, 0x03, 0xe6, 0xf9, 0x9e, 0x5f, 0x43, 0x5f, - 0x2f, 0x8a, 0xd5, 0xb2, 0x5e, 0x14, 0x99, 0x96, 0xce, 0x65, 0x7f, 0x8d, 0x97, 0xd5, 0x83, 0xb5, - 0x0e, 0x0b, 0xad, 0xd2, 0xb0, 0x1a, 0xdf, 0x56, 0xdc, 0xe3, 0x81, 0xbf, 0x17, 0xf4, 0x07, 0xf4, - 0x73, 0x02, 0x67, 0x7b, 0x2a, 0x23, 0xb8, 0x77, 0x60, 0x0e, 0xfb, 0xdf, 0xcd, 0xf2, 0x1a, 0xdc, - 0x8a, 0xcb, 0xf9, 0x3b, 0xa5, 0xdb, 0x1e, 0xee, 0x18, 0x1a, 0x77, 0xbd, 0xb1, 0xf6, 0xe1, 0x9c, - 0xde, 0x99, 0xbd, 0x83, 0x18, 0xd5, 0x1c, 0xf8, 0x3b, 0x01, 0xcb, 0xe4, 0xad, 0x6f, 0xd4, 0xe3, - 0xa3, 0x89, 0x7a, 0x74, 0x23, 0xe3, 0x21, 0xb6, 0xbf, 0xd8, 0x36, 0x8f, 0xc3, 0x7a, 0xc0, 0xaa, - 0x9b, 0x4f, 0x78, 0x65, 0xbf, 0x6f, 0xf5, 0x7b, 0xf4, 0xd3, 0x2b, 0xb8, 0x29, 0xba, 0xcc, 0xa5, - 0xfb, 0xfd, 0x90, 0xd5, 0xbd, 0xaa, 0xb4, 0x36, 0x5d, 0x56, 0x0f, 0xd6, 0x0f, 0x71, 0xa0, 0x6c, - 0x47, 0x5e, 0x85, 0xb7, 0xf9, 0x2f, 0xc2, 0x74, 0xb5, 0x11, 0xa5, 0x65, 0x2b, 0x94, 0x5b, 0xcf, - 0x3d, 0x10, 0xe8, 0x61, 0x93, 0xb5, 0x95, 0x3a, 0x0f, 0xc5, 0x2a, 0x6e, 0x10, 0xf5, 0x60, 0x9d, - 0xd1, 0x17, 0x05, 0x49, 0xe3, 0x3b, 0x6f, 0x87, 0x96, 0xa7, 0xcf, 0xf7, 0xce, 0xd7, 0x68, 0xf4, - 0x41, 0xf7, 0xbd, 0xae, 0xd7, 0xe1, 0xde, 0x6e, 0xa1, 0xeb, 0x76, 0x67, 0x15, 0xf1, 0x76, 0x84, - 0x9d, 0xb0, 0x93, 0xb0, 0xd6, 0x49, 0x66, 0xfd, 0x77, 0x0c, 0x2f, 0x97, 0xed, 0x2f, 0x11, 0xc4, - 0x69, 0x28, 0x84, 0x8d, 0xa8, 0xf2, 0x84, 0xc5, 0x5c, 0xa5, 0x76, 0xa2, 0x9c, 0x2e, 0x50, 0x0a, - 0x13, 0x0d, 0xf1, 0x62, 0x4c, 0xbe, 0x90, 0xbf, 0xe9, 0x43, 0x00, 0xf1, 0xd7, 0x95, 0xb9, 0x94, - 0x67, 0xf7, 0xec, 0x86, 0x2d, 0x00, 0xfd, 0xeb, 0xcb, 0xb3, 0x4b, 0x35, 0x2f, 0x79, 0xd2, 0xd8, - 0xb5, 0x2b, 0xc1, 0x81, 0x83, 0x1f, 0x50, 0xd4, 0x9f, 0xd5, 0xb8, 0xba, 0xef, 0x24, 0xcd, 0x90, - 0xc7, 0xf6, 0x3d, 0x5e, 0x29, 0x17, 0x84, 0x85, 0xb2, 0x30, 0x20, 0x06, 0x2d, 0x7e, 0x06, 0x69, - 0xc4, 0x22, 0x11, 0x13, 0xd2, 0xd5, 0x8c, 0x5a, 0x7b, 0x2c, 0x96, 0x68, 0x15, 0x5e, 0x94, 0xef, - 0xdc, 0xdd, 0xa6, 0x1b, 0xd6, 0x99, 0x3f, 0x3f, 0x29, 0x93, 0xf5, 0x5a, 0x7e, 0xb2, 0x7a, 0xc6, - 0x6a, 0x4b, 0x6b, 0x1b, 0xcd, 0xed, 0x3a, 0xf3, 0xbf, 0xef, 0x27, 0x51, 0xb3, 0x3c, 0xd3, 0x48, - 0x57, 0x8a, 0x77, 0xe0, 0x54, 0xa7, 0x00, 0x3d, 0x05, 0xe3, 0xfb, 0xbc, 0x89, 0x55, 0x17, 0x3f, - 0xb1, 0x0d, 0x1b, 0x5c, 0xb7, 0x8e, 0x7c, 0x58, 0x1f, 0xbb, 0x49, 0x4a, 0x9f, 0x9d, 0x81, 0x49, - 0xe9, 0x9b, 0xbe, 0x4f, 0x60, 0x4a, 0x7d, 0x24, 0xa1, 0xcb, 0x06, 0x8c, 0x6d, 0xdf, 0x64, 0x8a, - 0x97, 0x06, 0x90, 0x54, 0x71, 0x58, 0x97, 0xdf, 0xfb, 0xc7, 0x7f, 0x7e, 0x39, 0x76, 0x81, 0x7e, - 0xc7, 0xf9, 0x09, 0xab, 0xec, 0xb3, 0xba, 0xa3, 0x34, 0x57, 0xf3, 0xbe, 0x3f, 0xd1, 0x0f, 0x09, - 0x4c, 0x88, 0x3d, 0x45, 0x97, 0x0c, 0x0e, 0x32, 0x47, 0x65, 0xf1, 0x62, 0x5f, 0x39, 0x84, 0xb1, - 0x29, 0x61, 0xdc, 0xa6, 0xb7, 0x8c, 0x30, 0x24, 0x39, 0x74, 0x8e, 0xd4, 0x79, 0x7b, 0xec, 0x1c, - 0xc9, 0x5b, 0xde, 0xb1, 0x73, 0x24, 0xef, 0x75, 0xc7, 0xf4, 0x17, 0x04, 0xa6, 0x35, 0x13, 0xa5, - 0x2b, 0x06, 0xd7, 0x1d, 0xe4, 0xbc, 0x78, 0x79, 0x20, 0x59, 0x84, 0xba, 0x22, 0xa1, 0x9e, 0xa7, - 0x56, 0x7f, 0xa8, 0xf4, 0x53, 0x02, 0x85, 0x16, 0x51, 0xa7, 0x26, 0x37, 0x9d, 0x74, 0x7e, 0x38, - 0x4c, 0x1b, 0x12, 0xd3, 0xab, 0x74, 0xdd, 0x88, 0x29, 0x08, 0xb9, 0xef, 0x62, 0x0e, 0x3b, 0x3f, - 0x15, 0x1c, 0xd3, 0x3f, 0x11, 0x98, 0x94, 0xdf, 0x70, 0xa8, 0xa9, 0x6a, 0xd9, 0x4f, 0x72, 0xc5, - 0xe5, 0xfe, 0x82, 0x08, 0xf0, 0x2d, 0x09, 0x70, 0x9b, 0xbe, 0x61, 0x6e, 0x33, 0xa1, 0x93, 0x83, - 0xad, 0x77, 0xc9, 0x7f, 0x4d, 0x60, 0x5a, 0xcf, 0x32, 0x63, 0xc9, 0x3b, 0x3e, 0x00, 0x18, 0xd3, - 0xdb, 0x49, 0xfd, 0xad, 0x9b, 0x12, 0x7d, 0x89, 0x5e, 0xed, 0x87, 0x5e, 0x8d, 0x50, 0xe7, 0xa8, - 0x95, 0xd4, 0x8f, 0x08, 0xcc, 0x66, 0x89, 0x38, 0xb5, 0xcd, 0x65, 0xed, 0x1c, 0xfc, 0x45, 0x67, - 0x60, 0x79, 0xc4, 0x6a, 0x4b, 0xac, 0xcb, 0x74, 0x69, 0x30, 0xac, 0xf4, 0x6f, 0x04, 0x66, 0x32, - 0x84, 0x8f, 0xae, 0x9a, 0x1c, 0x76, 0xf1, 0xf4, 0xa2, 0x3d, 0xa8, 0x38, 0xc2, 0xdb, 0x91, 0xf0, - 0x1e, 0xd2, 0x1f, 0x19, 0xe1, 0x65, 0xa9, 0xa6, 0xea, 0x07, 0x59, 0xf4, 0x5e, 0x5d, 0xf0, 0x3b, - 0x02, 0x27, 0x3b, 0x98, 0x2f, 0x5d, 0x33, 0x27, 0x2e, 0x87, 0x8d, 0x17, 0x4b, 0xc3, 0xa8, 0x60, - 0x3c, 0x6b, 0x32, 0x9e, 0xcb, 0xf4, 0xd2, 0xc0, 0xf1, 0xd0, 0xdf, 0x13, 0x98, 0x52, 0x34, 0xcc, - 0x38, 0xd2, 0xdb, 0x08, 0xb1, 0x71, 0xa4, 0xb7, 0x13, 0x59, 0xeb, 0x0d, 0x09, 0xe9, 0x07, 0x74, - 0xcb, 0x08, 0x09, 0x69, 0xdf, 0x00, 0xd9, 0xfd, 0x15, 0x01, 0x48, 0x19, 0x27, 0xbd, 0x62, 0xce, - 0x52, 0x3b, 0xf7, 0x2d, 0xae, 0x0e, 0x28, 0x8d, 0xd8, 0xaf, 0x48, 0xec, 0x4b, 0xf4, 0xfc, 0x20, - 0xd8, 0xe9, 0xc7, 0x04, 0x0a, 0x2d, 0xca, 0x63, 0x1c, 0xaf, 0x9d, 0x8c, 0xaa, 0x78, 0x65, 0x30, - 0x61, 0x84, 0xf5, 0x3d, 0x09, 0xeb, 0x1a, 0x5d, 0x33, 0xcf, 0xfc, 0x88, 0x73, 0x57, 0x92, 0xcd, - 0xcc, 0x04, 0xf8, 0x98, 0x00, 0xa4, 0x94, 0xd3, 0x98, 0xbd, 0x2e, 0xf6, 0x6b, 0xcc, 0x5e, 0x37, - 0x8f, 0xb5, 0xbe, 0x2b, 0x61, 0x5e, 0xa5, 0xb6, 0x11, 0xa6, 0xf8, 0xeb, 0xf9, 0xb5, 0x0c, 0xc6, - 0x0f, 0x09, 0x4c, 0x6b, 0xd6, 0x6a, 0x9c, 0xa2, 0x1d, 0x54, 0xd8, 0x38, 0x45, 0x3b, 0x69, 0xb0, - 0x75, 0x43, 0xa2, 0x5b, 0xa3, 0x4e, 0x9f, 0x83, 0xd3, 0xaf, 0xca, 0x43, 0xaa, 0xd5, 0x90, 0x62, - 0x44, 0xd1, 0xfb, 0x3c, 0xe9, 0xa0, 0xb8, 0xc6, 0x1d, 0x9e, 0xcf, 0xa3, 0x8d, 0x3b, 0xbc, 0x07, - 0x83, 0xb6, 0xee, 0x49, 0xd8, 0x77, 0xe8, 0xab, 0x46, 0xd8, 0x35, 0x9e, 0xb8, 0x15, 0x69, 0xc1, - 0xcd, 0x6d, 0x83, 0xdf, 0x10, 0x80, 0xfb, 0x3c, 0x41, 0xda, 0x4c, 0xcd, 0x37, 0xb4, 0x2c, 0x17, - 0x2f, 0xae, 0x0c, 0x22, 0x8a, 0x58, 0x6f, 0x49, 0xac, 0xd7, 0xe9, 0xb5, 0xbe, 0x58, 0x43, 0xd6, - 0x74, 0xab, 0x2c, 0x61, 0x19, 0x88, 0x7f, 0x25, 0x40, 0xbb, 0xe9, 0x1f, 0x7d, 0xa5, 0xff, 0xd5, - 0xb8, 0x9b, 0xeb, 0x16, 0xaf, 0x0f, 0xa9, 0x35, 0x54, 0x00, 0x59, 0x3a, 0x9b, 0x09, 0xe0, 0x2f, - 0x04, 0x5e, 0xca, 0xa5, 0xc4, 0xf4, 0x86, 0x79, 0x0a, 0xf5, 0x0e, 0xe3, 0xe6, 0xf0, 0x8a, 0x43, - 0x1d, 0x0c, 0xd9, 0x48, 0xe8, 0x1f, 0x09, 0x9c, 0xec, 0xa0, 0xac, 0xc6, 0x26, 0xcf, 0x67, 0xcb, - 0xc6, 0x26, 0xef, 0xc1, 0x88, 0x07, 0x9c, 0x1c, 0x62, 0x5b, 0xba, 0x0d, 0xa9, 0xee, 0x56, 0x24, - 0xbc, 0x3f, 0x10, 0x80, 0x94, 0xe3, 0x1a, 0xa7, 0x5b, 0x17, 0xad, 0x36, 0x4e, 0xb7, 0x6e, 0xe2, - 0x3c, 0x20, 0x47, 0x90, 0x74, 0x5a, 0xa1, 0x73, 0x8e, 0x34, 0x4b, 0x3f, 0x76, 0x8e, 0x24, 0x2f, - 0x3f, 0xa6, 0x9f, 0x89, 0xab, 0x42, 0x3b, 0x05, 0x36, 0x5f, 0x15, 0x72, 0xf9, 0xb8, 0xf9, 0xaa, - 0x90, 0xcf, 0xd1, 0xad, 0xeb, 0x12, 0xbf, 0x43, 0x57, 0xcd, 0x57, 0x05, 0x45, 0x60, 0xd3, 0x0b, - 0xda, 0x6f, 0x09, 0xcc, 0x66, 0x29, 0xa8, 0xf1, 0x0a, 0x99, 0x43, 0xda, 0x8d, 0x57, 0xc8, 0x3c, - 0x6e, 0x6b, 0x95, 0x24, 0xd0, 0x2b, 0x74, 0xa5, 0xef, 0x31, 0xc2, 0x6a, 0xdc, 0x15, 0xf7, 0x9a, - 0x78, 0xe3, 0xf5, 0xcf, 0x9f, 0x2e, 0x90, 0x2f, 0x9e, 0x2e, 0x90, 0x7f, 0x3f, 0x5d, 0x20, 0x1f, - 0x3c, 0x5b, 0x38, 0xf1, 0xc5, 0xb3, 0x85, 0x13, 0xff, 0x7c, 0xb6, 0x70, 0xe2, 0xed, 0x52, 0x86, - 0xc7, 0x2b, 0x7b, 0xaf, 0xb3, 0xdd, 0xb8, 0xdd, 0xe6, 0xcf, 0x5a, 0x56, 0x25, 0xaf, 0xdf, 0x9d, - 0x92, 0xff, 0x71, 0x70, 0xed, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x95, 0xcf, 0xfa, 0xb6, 0xa6, - 0x21, 0x00, 0x00, + // 2019 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6f, 0x5b, 0x49, + 0x15, 0xef, 0xe4, 0x6b, 0xe3, 0xe3, 0x74, 0x5b, 0x66, 0xb3, 0x25, 0x58, 0x21, 0x49, 0xa7, 0xcd, + 0x47, 0xd3, 0xc6, 0xb7, 0x49, 0x29, 0x94, 0x76, 0x5b, 0x6d, 0x92, 0x92, 0x52, 0xb1, 0xdd, 0xa6, + 0x37, 0x2a, 0x88, 0x45, 0xe2, 0x32, 0xb1, 0x27, 0xee, 0x25, 0xce, 0xbd, 0x77, 0xef, 0xbd, 0x2e, + 0x58, 0x51, 0x5e, 0xe8, 0x0b, 0xbc, 0xad, 0x84, 0x8a, 0x60, 0x85, 0x84, 0x84, 0x2a, 0x60, 0xc5, + 0x3b, 0x20, 0xfe, 0x82, 0x7d, 0x63, 0x25, 0x5e, 0x10, 0x0f, 0x15, 0x6a, 0xe1, 0xff, 0x40, 0xf3, + 0x71, 0xc7, 0x63, 0xe7, 0x7a, 0xec, 0x20, 0xa3, 0x7d, 0x8a, 0x67, 0xfc, 0x3b, 0xe7, 0xfc, 0xce, + 0xc7, 0xcc, 0x9c, 0xe3, 0xc0, 0x5c, 0x85, 0x06, 0x7e, 0xc0, 0xbc, 0xca, 0x13, 0xea, 0x07, 0x4e, + 0x92, 0x86, 0x31, 0xad, 0x31, 0xe7, 0xc3, 0x06, 0x8b, 0x9b, 0xe5, 0x28, 0x0e, 0xd3, 0x10, 0x4f, + 0x9a, 0x88, 0xb2, 0x42, 0x94, 0x26, 0x6b, 0x61, 0x2d, 0x14, 0x00, 0x87, 0x7f, 0x92, 0xd8, 0xd2, + 0x74, 0x2d, 0x0c, 0x6b, 0x75, 0xe6, 0xd0, 0xc8, 0x77, 0x68, 0x10, 0x84, 0x29, 0x4d, 0xfd, 0x30, + 0x48, 0xd4, 0xb7, 0xcb, 0x95, 0x30, 0x39, 0x08, 0x13, 0x67, 0x97, 0x26, 0xca, 0x84, 0xf3, 0x74, + 0x75, 0x97, 0xa5, 0x74, 0xd5, 0x89, 0x68, 0xcd, 0x0f, 0x04, 0x58, 0x61, 0xcf, 0xe7, 0xf2, 0x8a, + 0x68, 0x4c, 0x0f, 0x32, 0x75, 0x8b, 0xb9, 0x10, 0x5a, 0x49, 0xfd, 0xa7, 0xcc, 0xab, 0x32, 0x5a, + 0xcf, 0x80, 0x17, 0xf3, 0x75, 0xc5, 0xe1, 0x53, 0xbf, 0xca, 0x62, 0xbb, 0xba, 0x88, 0x36, 0x0f, + 0x58, 0x90, 0x7a, 0x7e, 0xb0, 0xa7, 0x9c, 0x24, 0xa7, 0xa1, 0xf8, 0x88, 0x93, 0xdf, 0x16, 0x64, + 0xc8, 0x23, 0x78, 0xcb, 0x58, 0xba, 0x2c, 0x89, 0xc2, 0x20, 0x61, 0xf8, 0x26, 0x8c, 0x49, 0xb6, + 0x53, 0x68, 0x0e, 0x2d, 0x15, 0xd7, 0xa6, 0xcb, 0x79, 0x71, 0x2c, 0x4b, 0xa9, 0x8d, 0x91, 0x4f, + 0x5f, 0xce, 0x9e, 0x72, 0x95, 0x04, 0x39, 0x04, 0x90, 0x2a, 0xe3, 0x30, 0xdc, 0xc3, 0x97, 0xe0, + 0x6c, 0xc6, 0xd5, 0xa3, 0xd5, 0x6a, 0xcc, 0x12, 0xa9, 0xb3, 0xe0, 0x9e, 0xc9, 0xf6, 0xd7, 0xe5, + 0x36, 0x3e, 0x07, 0x63, 0x07, 0x2c, 0xde, 0xaf, 0xb3, 0xa9, 0xa1, 0x39, 0xb4, 0x34, 0xe1, 0xaa, + 0x15, 0x9e, 0x84, 0xd1, 0xf0, 0x47, 0x01, 0x8b, 0xa7, 0x86, 0x85, 0x9c, 0x5c, 0xf0, 0xdd, 0x24, + 0xa5, 0x71, 0x3a, 0x35, 0x32, 0x87, 0x96, 0x86, 0x5d, 0xb9, 0x20, 0x8f, 0x00, 0xb7, 0x8c, 0x6b, + 0x77, 0x6e, 0xc1, 0x68, 0xc4, 0x37, 0x94, 0x37, 0xb3, 0xf9, 0xde, 0x6c, 0xf9, 0x75, 0x26, 0xe4, + 0x94, 0x43, 0x52, 0x86, 0xfc, 0x0c, 0xc1, 0x64, 0x4b, 0x67, 0xb2, 0xd1, 0xcc, 0xf8, 0x9e, 0xc0, + 0xb5, 0x2d, 0x80, 0x56, 0x91, 0x08, 0xf7, 0x8a, 0x6b, 0x0b, 0x65, 0x59, 0x51, 0x65, 0x5e, 0x51, + 0x65, 0x59, 0xb4, 0xaa, 0xa2, 0xca, 0xdb, 0xb4, 0xc6, 0x5c, 0xf6, 0x61, 0x83, 0x25, 0xa9, 0x6b, + 0x48, 0x92, 0x17, 0x08, 0xa6, 0xf3, 0xb8, 0xe4, 0x79, 0x3a, 0x7c, 0x52, 0x4f, 0xf1, 0xbd, 0x1c, + 0x96, 0x8b, 0x3d, 0x59, 0x4a, 0xcb, 0x6d, 0x34, 0x1f, 0x42, 0x41, 0xb0, 0xe4, 0x76, 0x8c, 0xb4, + 0xa2, 0xfc, 0xb4, 0x0e, 0xe5, 0xa6, 0x75, 0xd8, 0x4c, 0xeb, 0x36, 0x7c, 0x41, 0x2b, 0x34, 0x7c, + 0x1d, 0xd9, 0xf3, 0x95, 0xda, 0xe2, 0xda, 0xf9, 0x7c, 0x57, 0x1f, 0x07, 0xfe, 0x9e, 0xcf, 0xaa, + 0x5c, 0x50, 0x39, 0x2b, 0x84, 0xc8, 0x77, 0xe0, 0xb4, 0xd0, 0xb8, 0x5e, 0xaf, 0xf3, 0xef, 0x3a, + 0x53, 0x84, 0xfe, 0xe7, 0x14, 0x3d, 0x43, 0xf0, 0xa6, 0xd0, 0xfc, 0x30, 0x62, 0x81, 0x54, 0xfd, + 0x39, 0x14, 0xca, 0x6f, 0x10, 0xbc, 0xdd, 0xe6, 0x9f, 0x8e, 0xda, 0x6d, 0x18, 0xe5, 0x01, 0x48, + 0x54, 0x85, 0xf4, 0x1d, 0x36, 0x29, 0x35, 0xb8, 0x1a, 0xb9, 0xa4, 0x12, 0xb0, 0xad, 0x22, 0x80, + 0xa7, 0xe0, 0x8d, 0xf6, 0xe0, 0x64, 0x4b, 0xf2, 0x81, 0xf2, 0x25, 0x83, 0x6a, 0x5f, 0xd6, 0x61, + 0x3c, 0x0b, 0xa0, 0xfd, 0x68, 0x67, 0x92, 0xd9, 0x5d, 0xa5, 0xc5, 0xc8, 0xf7, 0x54, 0x65, 0xad, + 0xd7, 0xeb, 0x1a, 0x34, 0xb0, 0x5a, 0xf8, 0x04, 0xc1, 0x97, 0x8e, 0x69, 0xd7, 0xec, 0x37, 0xa1, + 0xa0, 0xaf, 0x71, 0xfb, 0x79, 0xed, 0xa4, 0xdf, 0x92, 0x1b, 0x5c, 0x3e, 0x02, 0x38, 0x2b, 0xa9, + 0xa6, 0x29, 0x4b, 0xe4, 0xd3, 0xc7, 0x8f, 0x2e, 0xb7, 0xa4, 0xa2, 0x5b, 0x70, 0xd5, 0x6a, 0x20, + 0x37, 0xb5, 0x0f, 0x53, 0x9d, 0xf6, 0x74, 0x64, 0x1e, 0x40, 0x91, 0xb6, 0xb6, 0x55, 0x02, 0xe6, + 0xf3, 0x63, 0x63, 0xc8, 0x6f, 0x85, 0xf1, 0x81, 0x8a, 0x90, 0x29, 0x4f, 0xbe, 0xaf, 0x2e, 0xf0, + 0xf5, 0x7a, 0xdd, 0x40, 0x0f, 0x2e, 0xcd, 0x7f, 0xc9, 0x6e, 0xe5, 0x0e, 0x03, 0xda, 0x9f, 0x87, + 0x30, 0x61, 0xf0, 0xc9, 0x92, 0x7d, 0x22, 0x87, 0xda, 0x14, 0x0c, 0x2e, 0xeb, 0xbe, 0x6a, 0x07, + 0x5c, 0x16, 0x85, 0x71, 0xfa, 0x7f, 0x4d, 0xf8, 0x63, 0xd5, 0x6a, 0x48, 0x53, 0x3a, 0x36, 0x77, + 0x60, 0x2c, 0x16, 0x3b, 0x2a, 0x01, 0x73, 0xf9, 0x51, 0x91, 0x52, 0x46, 0x40, 0x94, 0x14, 0xf9, + 0x2e, 0x9c, 0xc9, 0x62, 0x2f, 0x31, 0x83, 0xcb, 0xeb, 0x0b, 0x04, 0x5f, 0xec, 0xd0, 0xad, 0x69, + 0xbf, 0x0b, 0x6f, 0x48, 0x02, 0x59, 0x36, 0xfb, 0xe5, 0x9d, 0x89, 0x0d, 0x2e, 0x87, 0xcb, 0xea, + 0xc1, 0xd9, 0x8a, 0x19, 0xdb, 0x89, 0x68, 0x85, 0x59, 0xae, 0xd2, 0xcb, 0x2a, 0x5a, 0x3b, 0x69, + 0x18, 0xb3, 0xcd, 0xb0, 0x11, 0xa4, 0x16, 0x70, 0x19, 0xce, 0xb5, 0x2b, 0xd6, 0xde, 0xf3, 0x0c, + 0xf3, 0x0d, 0x25, 0x21, 0x17, 0xc4, 0x51, 0xe1, 0x6a, 0x29, 0x37, 0x05, 0x2a, 0x7c, 0x23, 0x13, + 0x10, 0x0b, 0xb2, 0xa8, 0xde, 0x80, 0x2d, 0x3f, 0xa8, 0xda, 0x7a, 0x05, 0x72, 0x53, 0xbd, 0x00, + 0x19, 0x50, 0xeb, 0x3d, 0x0f, 0x13, 0xfa, 0x69, 0xf5, 0xa3, 0xcc, 0x83, 0x62, 0xb6, 0x77, 0x3f, + 0x4a, 0xc8, 0x55, 0x75, 0xfa, 0x37, 0xeb, 0x3e, 0x0b, 0xd2, 0x7e, 0x82, 0x74, 0x5b, 0x1d, 0xe7, + 0x0e, 0x09, 0x6d, 0xf4, 0xcb, 0x00, 0xbb, 0xcd, 0x94, 0x25, 0xde, 0x5e, 0xcc, 0x24, 0xd3, 0x61, + 0xb7, 0x20, 0x76, 0x38, 0x96, 0x2c, 0xc1, 0x84, 0xea, 0xa9, 0x9b, 0x77, 0x69, 0x4a, 0x2d, 0x86, + 0x76, 0xb2, 0xce, 0x52, 0x22, 0xb5, 0x81, 0x79, 0x78, 0x33, 0xf5, 0x0f, 0x98, 0x17, 0xb3, 0x03, + 0xea, 0x07, 0x7e, 0x50, 0x53, 0x46, 0x4e, 0xf3, 0x5d, 0x37, 0xdb, 0xe4, 0x41, 0x15, 0x56, 0x45, + 0xf1, 0x0c, 0xbb, 0x72, 0x41, 0xae, 0x19, 0x59, 0xa0, 0x35, 0xb6, 0x2d, 0x67, 0x80, 0xfb, 0xc1, + 0x5e, 0x68, 0x61, 0xf2, 0x0c, 0xc1, 0x6c, 0x17, 0x29, 0xcd, 0xea, 0x07, 0x30, 0xa9, 0xaa, 0xda, + 0x33, 0x07, 0x0b, 0x75, 0xc0, 0x96, 0xf2, 0xeb, 0xff, 0xb8, 0x3e, 0x75, 0x0e, 0x70, 0x72, 0xec, + 0x1b, 0x52, 0x85, 0x52, 0x76, 0xde, 0x72, 0xd8, 0x0f, 0xea, 0x58, 0xff, 0x0d, 0x01, 0xe9, 0x6e, + 0xa6, 0x0f, 0x77, 0x87, 0x07, 0xe3, 0xee, 0xe0, 0x6e, 0x80, 0x2d, 0x55, 0x47, 0xfc, 0x68, 0x3c, + 0x8e, 0xea, 0x21, 0xad, 0x6e, 0x3e, 0x61, 0x95, 0xfd, 0xee, 0xf9, 0xee, 0x52, 0x3a, 0x5f, 0x51, + 0x85, 0xdf, 0xa1, 0xc7, 0x3c, 0xc5, 0x4f, 0x69, 0xdd, 0xaf, 0x0a, 0x6d, 0xe3, 0xae, 0x5c, 0x90, + 0x4d, 0x75, 0xa7, 0x6c, 0xc7, 0x7e, 0x85, 0x49, 0xc3, 0x25, 0x18, 0xaf, 0x36, 0xe2, 0x56, 0xa2, + 0x0a, 0xae, 0x5e, 0x77, 0x31, 0x9d, 0xdd, 0x1d, 0x2d, 0x25, 0xa6, 0xd5, 0x88, 0xef, 0xaa, 0x43, + 0x20, 0x17, 0xe4, 0x5c, 0xf6, 0xa8, 0x8b, 0x91, 0x59, 0x77, 0x48, 0xc4, 0xcf, 0xde, 0xe2, 0xf6, + 0x7d, 0xad, 0xed, 0xfe, 0xf1, 0xae, 0xab, 0xdb, 0x43, 0xdc, 0xae, 0xe1, 0x58, 0xef, 0x45, 0xde, + 0x52, 0xbd, 0xa3, 0x4a, 0xfa, 0x4e, 0x4a, 0xd3, 0x84, 0xfc, 0x67, 0x48, 0xf5, 0x7c, 0xe6, 0xae, + 0xb6, 0x3e, 0x0d, 0x85, 0xa8, 0x11, 0x57, 0x9e, 0xd0, 0x84, 0xc9, 0x28, 0x8e, 0xb8, 0xad, 0x0d, + 0x8c, 0x61, 0xa4, 0xc1, 0xbf, 0x18, 0x12, 0x5f, 0x88, 0xcf, 0xf8, 0x01, 0x00, 0xff, 0xeb, 0x89, + 0xe8, 0x89, 0x77, 0x76, 0x62, 0xa3, 0xcc, 0x99, 0xfc, 0xf3, 0xe5, 0xec, 0x42, 0xcd, 0x4f, 0x9f, + 0x34, 0x76, 0xcb, 0x95, 0xf0, 0xc0, 0x51, 0x3f, 0x4f, 0xc8, 0x3f, 0x2b, 0x49, 0x75, 0xdf, 0x49, + 0x9b, 0x11, 0x4b, 0xca, 0x77, 0x59, 0xc5, 0x2d, 0x70, 0x0d, 0x2e, 0x57, 0xc0, 0x2f, 0x4c, 0xf5, + 0x23, 0x43, 0x23, 0xe1, 0x11, 0x18, 0x11, 0xa6, 0x8a, 0x72, 0xef, 0x31, 0xdf, 0xc2, 0x55, 0x38, + 0x2d, 0xbe, 0xf3, 0x76, 0x9b, 0x5e, 0x54, 0xa7, 0xc1, 0xd4, 0xa8, 0x88, 0xd2, 0xbb, 0xf9, 0x51, + 0xea, 0xea, 0x6b, 0x59, 0x68, 0xdb, 0x68, 0x6e, 0xd7, 0x69, 0xf0, 0x8d, 0x20, 0x8d, 0x9b, 0x6e, + 0xb1, 0xd1, 0xda, 0x29, 0xdd, 0x81, 0xb3, 0x9d, 0x00, 0x7c, 0x16, 0x86, 0xf7, 0x59, 0x53, 0xe5, + 0x99, 0x7f, 0x54, 0x15, 0xd7, 0x60, 0x59, 0xb1, 0x88, 0xc5, 0xcd, 0xa1, 0x1b, 0x68, 0xed, 0xf9, + 0x34, 0x8c, 0x0a, 0xdb, 0xf8, 0x19, 0x82, 0x31, 0xf9, 0x4b, 0x04, 0x3e, 0x6f, 0xe1, 0x28, 0x21, + 0xa5, 0x4b, 0x3d, 0x21, 0x99, 0x03, 0xe4, 0xf2, 0x4f, 0xfe, 0xfe, 0xef, 0x9f, 0x0f, 0xcd, 0xe3, + 0x0b, 0xce, 0x0f, 0x69, 0x65, 0x9f, 0xd6, 0x1d, 0x29, 0xb9, 0x92, 0xf7, 0xb3, 0x0e, 0x7e, 0x8e, + 0x60, 0x44, 0xbc, 0x61, 0xb3, 0x16, 0x03, 0x1c, 0x50, 0x5a, 0xec, 0x01, 0xd0, 0xf6, 0x37, 0x85, + 0xfd, 0xdb, 0xf8, 0x96, 0xd5, 0xbe, 0x98, 0xcb, 0x9c, 0x43, 0xf9, 0x52, 0x1e, 0x39, 0x87, 0xa2, + 0x07, 0x3b, 0x72, 0x0e, 0x45, 0xd7, 0x75, 0x84, 0x7f, 0x8a, 0x60, 0x5c, 0x0f, 0xb9, 0x17, 0x2c, + 0xa6, 0x33, 0x50, 0xe9, 0x72, 0x1f, 0x20, 0xcd, 0x71, 0x59, 0x70, 0xbc, 0x88, 0x49, 0x6f, 0x8e, + 0xf8, 0xb7, 0x08, 0x0a, 0xad, 0xa9, 0xf8, 0xa2, 0xc5, 0x8c, 0x46, 0x9d, 0x8c, 0xcc, 0x86, 0x20, + 0xf3, 0x0e, 0xbe, 0x69, 0x25, 0x13, 0x46, 0x2c, 0xf0, 0x54, 0xd4, 0x3a, 0xe7, 0xf2, 0x23, 0xfc, + 0x47, 0x04, 0xa3, 0xf2, 0xa7, 0xab, 0x39, 0x5b, 0xa5, 0x70, 0x44, 0x69, 0xa9, 0x17, 0x42, 0x33, + 0xfb, 0xb6, 0x60, 0xb6, 0x8d, 0xdf, 0xb7, 0x97, 0x12, 0x97, 0xc9, 0x21, 0xd5, 0x3d, 0xbb, 0xbf, + 0x40, 0x30, 0xae, 0x27, 0xe8, 0x0b, 0x76, 0x3a, 0x02, 0x64, 0x0d, 0x68, 0xe7, 0x80, 0x4d, 0x6e, + 0x08, 0xda, 0x6b, 0xf8, 0x6a, 0x2f, 0xda, 0xf2, 0x46, 0x74, 0x0e, 0x75, 0x18, 0x7f, 0x89, 0x60, + 0xa2, 0x6d, 0xa6, 0x5e, 0xb4, 0x27, 0x52, 0x03, 0x4b, 0x4e, 0x9f, 0x40, 0x4d, 0xb2, 0x2c, 0x48, + 0x2e, 0xe1, 0x85, 0xfe, 0x48, 0xe2, 0xbf, 0x22, 0x28, 0x9a, 0x53, 0xee, 0x82, 0xcd, 0x60, 0x0b, + 0x57, 0x2a, 0xf7, 0x87, 0xd3, 0xbc, 0x76, 0x04, 0xaf, 0x07, 0xf8, 0x5b, 0x56, 0x5e, 0xe6, 0x5c, + 0x27, 0x53, 0x2f, 0xf2, 0xdb, 0x2d, 0xe1, 0x2f, 0x10, 0x9c, 0xe9, 0x9c, 0x63, 0x97, 0xed, 0x11, + 0x33, 0xb1, 0xa5, 0xb5, 0xfe, 0xb1, 0xda, 0x91, 0x55, 0xe1, 0xc8, 0x65, 0x7c, 0xa9, 0x6f, 0x47, + 0xf0, 0xef, 0x10, 0x8c, 0xa9, 0x99, 0xd2, 0x76, 0x27, 0x4b, 0x88, 0xf5, 0x4e, 0x6e, 0x1f, 0x17, + 0xc9, 0xfb, 0x82, 0xcb, 0x37, 0xf1, 0x96, 0x95, 0x8b, 0x9a, 0xb1, 0xfa, 0x88, 0xe7, 0x47, 0x08, + 0xc0, 0x18, 0x1d, 0xe7, 0xed, 0xe1, 0x51, 0xb0, 0xd2, 0x4a, 0x5f, 0x30, 0x4d, 0xfa, 0x8a, 0x20, + 0xbd, 0x80, 0x2f, 0xf6, 0x43, 0x1a, 0x7f, 0x8c, 0xa0, 0xd0, 0x1a, 0x53, 0x6c, 0xd7, 0xa4, 0x46, + 0x95, 0xae, 0xf4, 0x83, 0xd2, 0x7c, 0xbe, 0x2e, 0xf8, 0x5c, 0xc3, 0xab, 0xf6, 0x4b, 0x3b, 0x66, + 0xcc, 0x13, 0x93, 0x9d, 0x71, 0xae, 0x3f, 0x46, 0x00, 0xc6, 0xf0, 0x38, 0xdf, 0xa3, 0x29, 0x90, + 0x30, 0x6b, 0xbc, 0x8e, 0x4f, 0x8b, 0xe4, 0xab, 0x82, 0xdf, 0x55, 0x5c, 0xb6, 0xf2, 0xe3, 0x7f, + 0xfd, 0xa0, 0x66, 0x90, 0x7b, 0x8e, 0x60, 0x5c, 0xcf, 0x92, 0x17, 0xac, 0xcf, 0xac, 0x04, 0x59, + 0x6f, 0xc3, 0xce, 0x61, 0x93, 0x7c, 0x4d, 0xd0, 0x5a, 0xc5, 0x4e, 0x8f, 0xb7, 0x2e, 0xa8, 0x8a, + 0xe7, 0x45, 0x17, 0x1d, 0xbf, 0x71, 0xf0, 0x3d, 0x96, 0x76, 0x4e, 0xa0, 0xb6, 0x73, 0xdb, 0x81, + 0xb5, 0x9e, 0xdb, 0x2e, 0x73, 0x2a, 0xb9, 0x2b, 0xf8, 0xde, 0xc1, 0xef, 0x58, 0xf9, 0xd6, 0x58, + 0xea, 0x55, 0x84, 0x06, 0x2f, 0x37, 0xe3, 0xbf, 0x42, 0x00, 0xf7, 0x58, 0x9a, 0x4d, 0xb3, 0xc4, + 0xda, 0x3f, 0x09, 0x4c, 0x69, 0xb9, 0x37, 0x46, 0x93, 0xbc, 0x25, 0x48, 0x5e, 0xc7, 0xd7, 0x7a, + 0x92, 0x8c, 0x68, 0xd3, 0xab, 0xd2, 0x94, 0x1a, 0xdc, 0xfe, 0x8c, 0x00, 0xe7, 0x4c, 0x8a, 0x2b, + 0xbd, 0x5b, 0x55, 0x03, 0x5e, 0xba, 0x7e, 0x22, 0xf8, 0x09, 0x99, 0x9b, 0xb3, 0xa3, 0xc1, 0xfc, + 0x4f, 0x08, 0xde, 0xce, 0x1f, 0x73, 0xaf, 0xda, 0xef, 0x96, 0x1c, 0xfe, 0x37, 0x4e, 0x2a, 0x71, + 0xc2, 0x9b, 0xdd, 0x74, 0x01, 0x7f, 0x82, 0xe0, 0x4c, 0xe7, 0x9c, 0xb9, 0xdc, 0xa3, 0xa3, 0x35, + 0xb0, 0xd6, 0x42, 0xee, 0x32, 0x77, 0xf6, 0x79, 0x1f, 0xf0, 0x33, 0xe7, 0x35, 0x84, 0xb8, 0x57, + 0x11, 0xbc, 0x7e, 0x8f, 0x00, 0x8c, 0xa9, 0x74, 0xde, 0xda, 0xfa, 0x64, 0x30, 0xeb, 0x65, 0x75, + 0x7c, 0x3c, 0xed, 0xb3, 0x4b, 0x17, 0x43, 0xab, 0xa4, 0xe5, 0x1c, 0x66, 0xb3, 0xf0, 0x91, 0x73, + 0x28, 0xa6, 0xdf, 0x23, 0xfc, 0x07, 0xfe, 0xac, 0xb7, 0xcf, 0x9b, 0xf6, 0x67, 0xbd, 0x1d, 0x6b, + 0x7f, 0xd6, 0xf3, 0x27, 0x61, 0x72, 0x5d, 0x10, 0x77, 0xf0, 0x8a, 0xfd, 0x59, 0x97, 0xd3, 0x62, + 0xab, 0x7d, 0xfa, 0x35, 0x82, 0x09, 0x73, 0xde, 0xb3, 0x76, 0x76, 0x26, 0xd0, 0xda, 0xd9, 0xe5, + 0x4d, 0x90, 0x64, 0x4d, 0x30, 0xbc, 0x82, 0x97, 0x7b, 0xbe, 0x03, 0xb4, 0xc6, 0x3c, 0xde, 0x7c, + 0x24, 0x1b, 0xef, 0x7d, 0xfa, 0x6a, 0x06, 0x7d, 0xf6, 0x6a, 0x06, 0xfd, 0xeb, 0xd5, 0x0c, 0xfa, + 0xe8, 0xf5, 0xcc, 0xa9, 0xcf, 0x5e, 0xcf, 0x9c, 0xfa, 0xc7, 0xeb, 0x99, 0x53, 0x1f, 0xac, 0x19, + 0xd3, 0xb2, 0xd4, 0xf7, 0x1e, 0xdd, 0x4d, 0xda, 0x75, 0xfe, 0x58, 0x6b, 0x15, 0xd3, 0xf3, 0xee, + 0x98, 0xf8, 0xaf, 0xf9, 0xb5, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x56, 0x8d, 0xfa, 0x65, 0x6a, + 0x20, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2388,49 +2386,49 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { // Parameters queries the parameters of the module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) // Queries a File by index. - File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) + File(ctx context.Context, in *QueryFile, opts ...grpc.CallOption) (*QueryFileResponse, error) // Queries a list of File items. - AllFiles(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) + AllFiles(ctx context.Context, in *QueryAllFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) // Queries a list of File items. - OpenFiles(ctx context.Context, in *QueryOpenFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) + OpenFiles(ctx context.Context, in *QueryOpenFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) // Queries a list of File items. - Proof(ctx context.Context, in *QueryProofRequest, opts ...grpc.CallOption) (*QueryProofResponse, error) + Proof(ctx context.Context, in *QueryProof, opts ...grpc.CallOption) (*QueryProofResponse, error) // Queries a Providers by index. - Provider(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) + Provider(ctx context.Context, in *QueryProvider, opts ...grpc.CallOption) (*QueryProviderResponse, error) // Queries a list of Providers items. - AllProviders(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) + AllProviders(ctx context.Context, in *QueryAllProviders, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) // Queries a Attestation by index. - Attestation(ctx context.Context, in *QueryAttestationRequest, opts ...grpc.CallOption) (*QueryAttestationResponse, error) + Attestation(ctx context.Context, in *QueryAttestation, opts ...grpc.CallOption) (*QueryAttestationResponse, error) // Queries a list of Attestation items. - AllAttestations(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) + AllAttestations(ctx context.Context, in *QueryAllAttestations, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) // Queries a Report by index. - Report(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) + Report(ctx context.Context, in *QueryReport, opts ...grpc.CallOption) (*QueryReportResponse, error) // Queries a list of Attestation items. - AllReports(ctx context.Context, in *QueryAllReportsRequest, opts ...grpc.CallOption) (*QueryAllReportsResponse, error) - // Queries a list of Freespace items. - FreeSpace(ctx context.Context, in *QueryFreeSpaceRequest, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) - // Queries a list of Freespace items. - StoreCount(ctx context.Context, in *QueryStoreCountRequest, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) + AllReports(ctx context.Context, in *QueryAllReports, opts ...grpc.CallOption) (*QueryAllReportsResponse, error) + // Queries a list of FreeSpace items. + FreeSpace(ctx context.Context, in *QueryFreeSpace, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) + // Queries a list of FreeSpace items. + StoreCount(ctx context.Context, in *QueryStoreCount, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) // Queries a list of FindFile items. - FindFile(ctx context.Context, in *QueryFindFileRequest, opts ...grpc.CallOption) (*QueryFindFileResponse, error) + FindFile(ctx context.Context, in *QueryFindFile, opts ...grpc.CallOption) (*QueryFindFileResponse, error) // Queries a list of GetClientFreeSpace items. - GetClientFreeSpace(ctx context.Context, in *QueryClientFreeSpaceRequest, opts ...grpc.CallOption) (*QueryClientFreeSpaceResponse, error) + GetClientFreeSpace(ctx context.Context, in *QueryClientFreeSpace, opts ...grpc.CallOption) (*QueryClientFreeSpaceResponse, error) // Queries a list of GetPayData items. - GetPayData(ctx context.Context, in *QueryPayDataRequest, opts ...grpc.CallOption) (*QueryPayDataResponse, error) + GetPayData(ctx context.Context, in *QueryPayData, opts ...grpc.CallOption) (*QueryPayDataResponse, error) // Queries a StoragePaymentInfo by address. - StoragePaymentInfo(ctx context.Context, in *QueryStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryStoragePaymentInfoResponse, error) + StoragePaymentInfo(ctx context.Context, in *QueryStoragePaymentInfo, opts ...grpc.CallOption) (*QueryStoragePaymentInfoResponse, error) // Queries a list of StoragePaymentInfo items. - AllStoragePaymentInfo(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) + AllStoragePaymentInfo(ctx context.Context, in *QueryAllStoragePaymentInfo, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) // Queries whether user can upload a file based on size - FileUploadCheck(ctx context.Context, in *QueryFileUploadCheckRequest, opts ...grpc.CallOption) (*QueryFileUploadCheckResponse, error) + FileUploadCheck(ctx context.Context, in *QueryFileUploadCheck, opts ...grpc.CallOption) (*QueryFileUploadCheckResponse, error) // Queries whether user can upload a file based on size - PriceCheck(ctx context.Context, in *QueryPriceCheckRequest, opts ...grpc.CallOption) (*QueryPriceCheckResponse, error) + PriceCheck(ctx context.Context, in *QueryPriceCheck, opts ...grpc.CallOption) (*QueryPriceCheckResponse, error) // Queries whether user can upload a file based on size - ActiveProviders(ctx context.Context, in *QueryActiveProvidersRequest, opts ...grpc.CallOption) (*QueryActiveProvidersResponse, error) + ActiveProviders(ctx context.Context, in *QueryActiveProviders, opts ...grpc.CallOption) (*QueryActiveProvidersResponse, error) // Queries the storage space used and purchased - StorageStats(ctx context.Context, in *QueryStorageStatsRequest, opts ...grpc.CallOption) (*QueryStorageStatsResponse, error) + StorageStats(ctx context.Context, in *QueryStorageStats, opts ...grpc.CallOption) (*QueryStorageStatsResponse, error) } type queryClient struct { @@ -2441,7 +2439,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { +func (c *queryClient) Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Params", in, out, opts...) if err != nil { @@ -2450,7 +2448,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } -func (c *queryClient) File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) { +func (c *queryClient) File(ctx context.Context, in *QueryFile, opts ...grpc.CallOption) (*QueryFileResponse, error) { out := new(QueryFileResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/File", in, out, opts...) if err != nil { @@ -2459,7 +2457,7 @@ func (c *queryClient) File(ctx context.Context, in *QueryFileRequest, opts ...gr return out, nil } -func (c *queryClient) AllFiles(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { +func (c *queryClient) AllFiles(ctx context.Context, in *QueryAllFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { out := new(QueryAllFilesResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllFiles", in, out, opts...) if err != nil { @@ -2468,7 +2466,7 @@ func (c *queryClient) AllFiles(ctx context.Context, in *QueryAllFilesRequest, op return out, nil } -func (c *queryClient) OpenFiles(ctx context.Context, in *QueryOpenFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { +func (c *queryClient) OpenFiles(ctx context.Context, in *QueryOpenFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { out := new(QueryAllFilesResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/OpenFiles", in, out, opts...) if err != nil { @@ -2477,7 +2475,7 @@ func (c *queryClient) OpenFiles(ctx context.Context, in *QueryOpenFilesRequest, return out, nil } -func (c *queryClient) Proof(ctx context.Context, in *QueryProofRequest, opts ...grpc.CallOption) (*QueryProofResponse, error) { +func (c *queryClient) Proof(ctx context.Context, in *QueryProof, opts ...grpc.CallOption) (*QueryProofResponse, error) { out := new(QueryProofResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Proof", in, out, opts...) if err != nil { @@ -2486,7 +2484,7 @@ func (c *queryClient) Proof(ctx context.Context, in *QueryProofRequest, opts ... return out, nil } -func (c *queryClient) Provider(ctx context.Context, in *QueryProviderRequest, opts ...grpc.CallOption) (*QueryProviderResponse, error) { +func (c *queryClient) Provider(ctx context.Context, in *QueryProvider, opts ...grpc.CallOption) (*QueryProviderResponse, error) { out := new(QueryProviderResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Provider", in, out, opts...) if err != nil { @@ -2495,7 +2493,7 @@ func (c *queryClient) Provider(ctx context.Context, in *QueryProviderRequest, op return out, nil } -func (c *queryClient) AllProviders(ctx context.Context, in *QueryAllProvidersRequest, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) { +func (c *queryClient) AllProviders(ctx context.Context, in *QueryAllProviders, opts ...grpc.CallOption) (*QueryAllProvidersResponse, error) { out := new(QueryAllProvidersResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllProviders", in, out, opts...) if err != nil { @@ -2504,7 +2502,7 @@ func (c *queryClient) AllProviders(ctx context.Context, in *QueryAllProvidersReq return out, nil } -func (c *queryClient) Attestation(ctx context.Context, in *QueryAttestationRequest, opts ...grpc.CallOption) (*QueryAttestationResponse, error) { +func (c *queryClient) Attestation(ctx context.Context, in *QueryAttestation, opts ...grpc.CallOption) (*QueryAttestationResponse, error) { out := new(QueryAttestationResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Attestation", in, out, opts...) if err != nil { @@ -2513,7 +2511,7 @@ func (c *queryClient) Attestation(ctx context.Context, in *QueryAttestationReque return out, nil } -func (c *queryClient) AllAttestations(ctx context.Context, in *QueryAllAttestationsRequest, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) { +func (c *queryClient) AllAttestations(ctx context.Context, in *QueryAllAttestations, opts ...grpc.CallOption) (*QueryAllAttestationsResponse, error) { out := new(QueryAllAttestationsResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllAttestations", in, out, opts...) if err != nil { @@ -2522,7 +2520,7 @@ func (c *queryClient) AllAttestations(ctx context.Context, in *QueryAllAttestati return out, nil } -func (c *queryClient) Report(ctx context.Context, in *QueryReportRequest, opts ...grpc.CallOption) (*QueryReportResponse, error) { +func (c *queryClient) Report(ctx context.Context, in *QueryReport, opts ...grpc.CallOption) (*QueryReportResponse, error) { out := new(QueryReportResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Report", in, out, opts...) if err != nil { @@ -2531,7 +2529,7 @@ func (c *queryClient) Report(ctx context.Context, in *QueryReportRequest, opts . return out, nil } -func (c *queryClient) AllReports(ctx context.Context, in *QueryAllReportsRequest, opts ...grpc.CallOption) (*QueryAllReportsResponse, error) { +func (c *queryClient) AllReports(ctx context.Context, in *QueryAllReports, opts ...grpc.CallOption) (*QueryAllReportsResponse, error) { out := new(QueryAllReportsResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllReports", in, out, opts...) if err != nil { @@ -2540,7 +2538,7 @@ func (c *queryClient) AllReports(ctx context.Context, in *QueryAllReportsRequest return out, nil } -func (c *queryClient) FreeSpace(ctx context.Context, in *QueryFreeSpaceRequest, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) { +func (c *queryClient) FreeSpace(ctx context.Context, in *QueryFreeSpace, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) { out := new(QueryFreeSpaceResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FreeSpace", in, out, opts...) if err != nil { @@ -2549,7 +2547,7 @@ func (c *queryClient) FreeSpace(ctx context.Context, in *QueryFreeSpaceRequest, return out, nil } -func (c *queryClient) StoreCount(ctx context.Context, in *QueryStoreCountRequest, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) { +func (c *queryClient) StoreCount(ctx context.Context, in *QueryStoreCount, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) { out := new(QueryStoreCountResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StoreCount", in, out, opts...) if err != nil { @@ -2558,7 +2556,7 @@ func (c *queryClient) StoreCount(ctx context.Context, in *QueryStoreCountRequest return out, nil } -func (c *queryClient) FindFile(ctx context.Context, in *QueryFindFileRequest, opts ...grpc.CallOption) (*QueryFindFileResponse, error) { +func (c *queryClient) FindFile(ctx context.Context, in *QueryFindFile, opts ...grpc.CallOption) (*QueryFindFileResponse, error) { out := new(QueryFindFileResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FindFile", in, out, opts...) if err != nil { @@ -2567,7 +2565,7 @@ func (c *queryClient) FindFile(ctx context.Context, in *QueryFindFileRequest, op return out, nil } -func (c *queryClient) GetClientFreeSpace(ctx context.Context, in *QueryClientFreeSpaceRequest, opts ...grpc.CallOption) (*QueryClientFreeSpaceResponse, error) { +func (c *queryClient) GetClientFreeSpace(ctx context.Context, in *QueryClientFreeSpace, opts ...grpc.CallOption) (*QueryClientFreeSpaceResponse, error) { out := new(QueryClientFreeSpaceResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/GetClientFreeSpace", in, out, opts...) if err != nil { @@ -2576,7 +2574,7 @@ func (c *queryClient) GetClientFreeSpace(ctx context.Context, in *QueryClientFre return out, nil } -func (c *queryClient) GetPayData(ctx context.Context, in *QueryPayDataRequest, opts ...grpc.CallOption) (*QueryPayDataResponse, error) { +func (c *queryClient) GetPayData(ctx context.Context, in *QueryPayData, opts ...grpc.CallOption) (*QueryPayDataResponse, error) { out := new(QueryPayDataResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/GetPayData", in, out, opts...) if err != nil { @@ -2585,7 +2583,7 @@ func (c *queryClient) GetPayData(ctx context.Context, in *QueryPayDataRequest, o return out, nil } -func (c *queryClient) StoragePaymentInfo(ctx context.Context, in *QueryStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryStoragePaymentInfoResponse, error) { +func (c *queryClient) StoragePaymentInfo(ctx context.Context, in *QueryStoragePaymentInfo, opts ...grpc.CallOption) (*QueryStoragePaymentInfoResponse, error) { out := new(QueryStoragePaymentInfoResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StoragePaymentInfo", in, out, opts...) if err != nil { @@ -2594,7 +2592,7 @@ func (c *queryClient) StoragePaymentInfo(ctx context.Context, in *QueryStoragePa return out, nil } -func (c *queryClient) AllStoragePaymentInfo(ctx context.Context, in *QueryAllStoragePaymentInfoRequest, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) { +func (c *queryClient) AllStoragePaymentInfo(ctx context.Context, in *QueryAllStoragePaymentInfo, opts ...grpc.CallOption) (*QueryAllStoragePaymentInfoResponse, error) { out := new(QueryAllStoragePaymentInfoResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllStoragePaymentInfo", in, out, opts...) if err != nil { @@ -2603,7 +2601,7 @@ func (c *queryClient) AllStoragePaymentInfo(ctx context.Context, in *QueryAllSto return out, nil } -func (c *queryClient) FileUploadCheck(ctx context.Context, in *QueryFileUploadCheckRequest, opts ...grpc.CallOption) (*QueryFileUploadCheckResponse, error) { +func (c *queryClient) FileUploadCheck(ctx context.Context, in *QueryFileUploadCheck, opts ...grpc.CallOption) (*QueryFileUploadCheckResponse, error) { out := new(QueryFileUploadCheckResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/FileUploadCheck", in, out, opts...) if err != nil { @@ -2612,7 +2610,7 @@ func (c *queryClient) FileUploadCheck(ctx context.Context, in *QueryFileUploadCh return out, nil } -func (c *queryClient) PriceCheck(ctx context.Context, in *QueryPriceCheckRequest, opts ...grpc.CallOption) (*QueryPriceCheckResponse, error) { +func (c *queryClient) PriceCheck(ctx context.Context, in *QueryPriceCheck, opts ...grpc.CallOption) (*QueryPriceCheckResponse, error) { out := new(QueryPriceCheckResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/PriceCheck", in, out, opts...) if err != nil { @@ -2621,7 +2619,7 @@ func (c *queryClient) PriceCheck(ctx context.Context, in *QueryPriceCheckRequest return out, nil } -func (c *queryClient) ActiveProviders(ctx context.Context, in *QueryActiveProvidersRequest, opts ...grpc.CallOption) (*QueryActiveProvidersResponse, error) { +func (c *queryClient) ActiveProviders(ctx context.Context, in *QueryActiveProviders, opts ...grpc.CallOption) (*QueryActiveProvidersResponse, error) { out := new(QueryActiveProvidersResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ActiveProviders", in, out, opts...) if err != nil { @@ -2630,7 +2628,7 @@ func (c *queryClient) ActiveProviders(ctx context.Context, in *QueryActiveProvid return out, nil } -func (c *queryClient) StorageStats(ctx context.Context, in *QueryStorageStatsRequest, opts ...grpc.CallOption) (*QueryStorageStatsResponse, error) { +func (c *queryClient) StorageStats(ctx context.Context, in *QueryStorageStats, opts ...grpc.CallOption) (*QueryStorageStatsResponse, error) { out := new(QueryStorageStatsResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/StorageStats", in, out, opts...) if err != nil { @@ -2642,119 +2640,119 @@ func (c *queryClient) StorageStats(ctx context.Context, in *QueryStorageStatsReq // QueryServer is the server API for Query service. type QueryServer interface { // Parameters queries the parameters of the module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + Params(context.Context, *QueryParams) (*QueryParamsResponse, error) // Queries a File by index. - File(context.Context, *QueryFileRequest) (*QueryFileResponse, error) + File(context.Context, *QueryFile) (*QueryFileResponse, error) // Queries a list of File items. - AllFiles(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) + AllFiles(context.Context, *QueryAllFiles) (*QueryAllFilesResponse, error) // Queries a list of File items. - OpenFiles(context.Context, *QueryOpenFilesRequest) (*QueryAllFilesResponse, error) + OpenFiles(context.Context, *QueryOpenFiles) (*QueryAllFilesResponse, error) // Queries a list of File items. - Proof(context.Context, *QueryProofRequest) (*QueryProofResponse, error) + Proof(context.Context, *QueryProof) (*QueryProofResponse, error) // Queries a Providers by index. - Provider(context.Context, *QueryProviderRequest) (*QueryProviderResponse, error) + Provider(context.Context, *QueryProvider) (*QueryProviderResponse, error) // Queries a list of Providers items. - AllProviders(context.Context, *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) + AllProviders(context.Context, *QueryAllProviders) (*QueryAllProvidersResponse, error) // Queries a Attestation by index. - Attestation(context.Context, *QueryAttestationRequest) (*QueryAttestationResponse, error) + Attestation(context.Context, *QueryAttestation) (*QueryAttestationResponse, error) // Queries a list of Attestation items. - AllAttestations(context.Context, *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) + AllAttestations(context.Context, *QueryAllAttestations) (*QueryAllAttestationsResponse, error) // Queries a Report by index. - Report(context.Context, *QueryReportRequest) (*QueryReportResponse, error) + Report(context.Context, *QueryReport) (*QueryReportResponse, error) // Queries a list of Attestation items. - AllReports(context.Context, *QueryAllReportsRequest) (*QueryAllReportsResponse, error) - // Queries a list of Freespace items. - FreeSpace(context.Context, *QueryFreeSpaceRequest) (*QueryFreeSpaceResponse, error) - // Queries a list of Freespace items. - StoreCount(context.Context, *QueryStoreCountRequest) (*QueryStoreCountResponse, error) + AllReports(context.Context, *QueryAllReports) (*QueryAllReportsResponse, error) + // Queries a list of FreeSpace items. + FreeSpace(context.Context, *QueryFreeSpace) (*QueryFreeSpaceResponse, error) + // Queries a list of FreeSpace items. + StoreCount(context.Context, *QueryStoreCount) (*QueryStoreCountResponse, error) // Queries a list of FindFile items. - FindFile(context.Context, *QueryFindFileRequest) (*QueryFindFileResponse, error) + FindFile(context.Context, *QueryFindFile) (*QueryFindFileResponse, error) // Queries a list of GetClientFreeSpace items. - GetClientFreeSpace(context.Context, *QueryClientFreeSpaceRequest) (*QueryClientFreeSpaceResponse, error) + GetClientFreeSpace(context.Context, *QueryClientFreeSpace) (*QueryClientFreeSpaceResponse, error) // Queries a list of GetPayData items. - GetPayData(context.Context, *QueryPayDataRequest) (*QueryPayDataResponse, error) + GetPayData(context.Context, *QueryPayData) (*QueryPayDataResponse, error) // Queries a StoragePaymentInfo by address. - StoragePaymentInfo(context.Context, *QueryStoragePaymentInfoRequest) (*QueryStoragePaymentInfoResponse, error) + StoragePaymentInfo(context.Context, *QueryStoragePaymentInfo) (*QueryStoragePaymentInfoResponse, error) // Queries a list of StoragePaymentInfo items. - AllStoragePaymentInfo(context.Context, *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) + AllStoragePaymentInfo(context.Context, *QueryAllStoragePaymentInfo) (*QueryAllStoragePaymentInfoResponse, error) // Queries whether user can upload a file based on size - FileUploadCheck(context.Context, *QueryFileUploadCheckRequest) (*QueryFileUploadCheckResponse, error) + FileUploadCheck(context.Context, *QueryFileUploadCheck) (*QueryFileUploadCheckResponse, error) // Queries whether user can upload a file based on size - PriceCheck(context.Context, *QueryPriceCheckRequest) (*QueryPriceCheckResponse, error) + PriceCheck(context.Context, *QueryPriceCheck) (*QueryPriceCheckResponse, error) // Queries whether user can upload a file based on size - ActiveProviders(context.Context, *QueryActiveProvidersRequest) (*QueryActiveProvidersResponse, error) + ActiveProviders(context.Context, *QueryActiveProviders) (*QueryActiveProvidersResponse, error) // Queries the storage space used and purchased - StorageStats(context.Context, *QueryStorageStatsRequest) (*QueryStorageStatsResponse, error) + StorageStats(context.Context, *QueryStorageStats) (*QueryStorageStatsResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParams) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) File(ctx context.Context, req *QueryFileRequest) (*QueryFileResponse, error) { +func (*UnimplementedQueryServer) File(ctx context.Context, req *QueryFile) (*QueryFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method File not implemented") } -func (*UnimplementedQueryServer) AllFiles(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { +func (*UnimplementedQueryServer) AllFiles(ctx context.Context, req *QueryAllFiles) (*QueryAllFilesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllFiles not implemented") } -func (*UnimplementedQueryServer) OpenFiles(ctx context.Context, req *QueryOpenFilesRequest) (*QueryAllFilesResponse, error) { +func (*UnimplementedQueryServer) OpenFiles(ctx context.Context, req *QueryOpenFiles) (*QueryAllFilesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method OpenFiles not implemented") } -func (*UnimplementedQueryServer) Proof(ctx context.Context, req *QueryProofRequest) (*QueryProofResponse, error) { +func (*UnimplementedQueryServer) Proof(ctx context.Context, req *QueryProof) (*QueryProofResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Proof not implemented") } -func (*UnimplementedQueryServer) Provider(ctx context.Context, req *QueryProviderRequest) (*QueryProviderResponse, error) { +func (*UnimplementedQueryServer) Provider(ctx context.Context, req *QueryProvider) (*QueryProviderResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Provider not implemented") } -func (*UnimplementedQueryServer) AllProviders(ctx context.Context, req *QueryAllProvidersRequest) (*QueryAllProvidersResponse, error) { +func (*UnimplementedQueryServer) AllProviders(ctx context.Context, req *QueryAllProviders) (*QueryAllProvidersResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllProviders not implemented") } -func (*UnimplementedQueryServer) Attestation(ctx context.Context, req *QueryAttestationRequest) (*QueryAttestationResponse, error) { +func (*UnimplementedQueryServer) Attestation(ctx context.Context, req *QueryAttestation) (*QueryAttestationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Attestation not implemented") } -func (*UnimplementedQueryServer) AllAttestations(ctx context.Context, req *QueryAllAttestationsRequest) (*QueryAllAttestationsResponse, error) { +func (*UnimplementedQueryServer) AllAttestations(ctx context.Context, req *QueryAllAttestations) (*QueryAllAttestationsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllAttestations not implemented") } -func (*UnimplementedQueryServer) Report(ctx context.Context, req *QueryReportRequest) (*QueryReportResponse, error) { +func (*UnimplementedQueryServer) Report(ctx context.Context, req *QueryReport) (*QueryReportResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Report not implemented") } -func (*UnimplementedQueryServer) AllReports(ctx context.Context, req *QueryAllReportsRequest) (*QueryAllReportsResponse, error) { +func (*UnimplementedQueryServer) AllReports(ctx context.Context, req *QueryAllReports) (*QueryAllReportsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllReports not implemented") } -func (*UnimplementedQueryServer) FreeSpace(ctx context.Context, req *QueryFreeSpaceRequest) (*QueryFreeSpaceResponse, error) { +func (*UnimplementedQueryServer) FreeSpace(ctx context.Context, req *QueryFreeSpace) (*QueryFreeSpaceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FreeSpace not implemented") } -func (*UnimplementedQueryServer) StoreCount(ctx context.Context, req *QueryStoreCountRequest) (*QueryStoreCountResponse, error) { +func (*UnimplementedQueryServer) StoreCount(ctx context.Context, req *QueryStoreCount) (*QueryStoreCountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StoreCount not implemented") } -func (*UnimplementedQueryServer) FindFile(ctx context.Context, req *QueryFindFileRequest) (*QueryFindFileResponse, error) { +func (*UnimplementedQueryServer) FindFile(ctx context.Context, req *QueryFindFile) (*QueryFindFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FindFile not implemented") } -func (*UnimplementedQueryServer) GetClientFreeSpace(ctx context.Context, req *QueryClientFreeSpaceRequest) (*QueryClientFreeSpaceResponse, error) { +func (*UnimplementedQueryServer) GetClientFreeSpace(ctx context.Context, req *QueryClientFreeSpace) (*QueryClientFreeSpaceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetClientFreeSpace not implemented") } -func (*UnimplementedQueryServer) GetPayData(ctx context.Context, req *QueryPayDataRequest) (*QueryPayDataResponse, error) { +func (*UnimplementedQueryServer) GetPayData(ctx context.Context, req *QueryPayData) (*QueryPayDataResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPayData not implemented") } -func (*UnimplementedQueryServer) StoragePaymentInfo(ctx context.Context, req *QueryStoragePaymentInfoRequest) (*QueryStoragePaymentInfoResponse, error) { +func (*UnimplementedQueryServer) StoragePaymentInfo(ctx context.Context, req *QueryStoragePaymentInfo) (*QueryStoragePaymentInfoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StoragePaymentInfo not implemented") } -func (*UnimplementedQueryServer) AllStoragePaymentInfo(ctx context.Context, req *QueryAllStoragePaymentInfoRequest) (*QueryAllStoragePaymentInfoResponse, error) { +func (*UnimplementedQueryServer) AllStoragePaymentInfo(ctx context.Context, req *QueryAllStoragePaymentInfo) (*QueryAllStoragePaymentInfoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllStoragePaymentInfo not implemented") } -func (*UnimplementedQueryServer) FileUploadCheck(ctx context.Context, req *QueryFileUploadCheckRequest) (*QueryFileUploadCheckResponse, error) { +func (*UnimplementedQueryServer) FileUploadCheck(ctx context.Context, req *QueryFileUploadCheck) (*QueryFileUploadCheckResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FileUploadCheck not implemented") } -func (*UnimplementedQueryServer) PriceCheck(ctx context.Context, req *QueryPriceCheckRequest) (*QueryPriceCheckResponse, error) { +func (*UnimplementedQueryServer) PriceCheck(ctx context.Context, req *QueryPriceCheck) (*QueryPriceCheckResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PriceCheck not implemented") } -func (*UnimplementedQueryServer) ActiveProviders(ctx context.Context, req *QueryActiveProvidersRequest) (*QueryActiveProvidersResponse, error) { +func (*UnimplementedQueryServer) ActiveProviders(ctx context.Context, req *QueryActiveProviders) (*QueryActiveProvidersResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ActiveProviders not implemented") } -func (*UnimplementedQueryServer) StorageStats(ctx context.Context, req *QueryStorageStatsRequest) (*QueryStorageStatsResponse, error) { +func (*UnimplementedQueryServer) StorageStats(ctx context.Context, req *QueryStorageStats) (*QueryStorageStatsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StorageStats not implemented") } @@ -2763,7 +2761,7 @@ func RegisterQueryServer(s grpc1.Server, srv QueryServer) { } func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) + in := new(QueryParams) if err := dec(in); err != nil { return nil, err } @@ -2775,13 +2773,13 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf FullMethod: "/canine_chain.storage.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParams)) } return interceptor(ctx, in, info, handler) } func _Query_File_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFileRequest) + in := new(QueryFile) if err := dec(in); err != nil { return nil, err } @@ -2793,13 +2791,13 @@ func _Query_File_Handler(srv interface{}, ctx context.Context, dec func(interfac FullMethod: "/canine_chain.storage.Query/File", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).File(ctx, req.(*QueryFileRequest)) + return srv.(QueryServer).File(ctx, req.(*QueryFile)) } return interceptor(ctx, in, info, handler) } func _Query_AllFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllFilesRequest) + in := new(QueryAllFiles) if err := dec(in); err != nil { return nil, err } @@ -2811,13 +2809,13 @@ func _Query_AllFiles_Handler(srv interface{}, ctx context.Context, dec func(inte FullMethod: "/canine_chain.storage.Query/AllFiles", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllFiles(ctx, req.(*QueryAllFilesRequest)) + return srv.(QueryServer).AllFiles(ctx, req.(*QueryAllFiles)) } return interceptor(ctx, in, info, handler) } func _Query_OpenFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryOpenFilesRequest) + in := new(QueryOpenFiles) if err := dec(in); err != nil { return nil, err } @@ -2829,13 +2827,13 @@ func _Query_OpenFiles_Handler(srv interface{}, ctx context.Context, dec func(int FullMethod: "/canine_chain.storage.Query/OpenFiles", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).OpenFiles(ctx, req.(*QueryOpenFilesRequest)) + return srv.(QueryServer).OpenFiles(ctx, req.(*QueryOpenFiles)) } return interceptor(ctx, in, info, handler) } func _Query_Proof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryProofRequest) + in := new(QueryProof) if err := dec(in); err != nil { return nil, err } @@ -2847,13 +2845,13 @@ func _Query_Proof_Handler(srv interface{}, ctx context.Context, dec func(interfa FullMethod: "/canine_chain.storage.Query/Proof", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Proof(ctx, req.(*QueryProofRequest)) + return srv.(QueryServer).Proof(ctx, req.(*QueryProof)) } return interceptor(ctx, in, info, handler) } func _Query_Provider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryProviderRequest) + in := new(QueryProvider) if err := dec(in); err != nil { return nil, err } @@ -2865,13 +2863,13 @@ func _Query_Provider_Handler(srv interface{}, ctx context.Context, dec func(inte FullMethod: "/canine_chain.storage.Query/Provider", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Provider(ctx, req.(*QueryProviderRequest)) + return srv.(QueryServer).Provider(ctx, req.(*QueryProvider)) } return interceptor(ctx, in, info, handler) } func _Query_AllProviders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllProvidersRequest) + in := new(QueryAllProviders) if err := dec(in); err != nil { return nil, err } @@ -2883,13 +2881,13 @@ func _Query_AllProviders_Handler(srv interface{}, ctx context.Context, dec func( FullMethod: "/canine_chain.storage.Query/AllProviders", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllProviders(ctx, req.(*QueryAllProvidersRequest)) + return srv.(QueryServer).AllProviders(ctx, req.(*QueryAllProviders)) } return interceptor(ctx, in, info, handler) } func _Query_Attestation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAttestationRequest) + in := new(QueryAttestation) if err := dec(in); err != nil { return nil, err } @@ -2901,13 +2899,13 @@ func _Query_Attestation_Handler(srv interface{}, ctx context.Context, dec func(i FullMethod: "/canine_chain.storage.Query/Attestation", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Attestation(ctx, req.(*QueryAttestationRequest)) + return srv.(QueryServer).Attestation(ctx, req.(*QueryAttestation)) } return interceptor(ctx, in, info, handler) } func _Query_AllAttestations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllAttestationsRequest) + in := new(QueryAllAttestations) if err := dec(in); err != nil { return nil, err } @@ -2919,13 +2917,13 @@ func _Query_AllAttestations_Handler(srv interface{}, ctx context.Context, dec fu FullMethod: "/canine_chain.storage.Query/AllAttestations", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllAttestations(ctx, req.(*QueryAllAttestationsRequest)) + return srv.(QueryServer).AllAttestations(ctx, req.(*QueryAllAttestations)) } return interceptor(ctx, in, info, handler) } func _Query_Report_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryReportRequest) + in := new(QueryReport) if err := dec(in); err != nil { return nil, err } @@ -2937,13 +2935,13 @@ func _Query_Report_Handler(srv interface{}, ctx context.Context, dec func(interf FullMethod: "/canine_chain.storage.Query/Report", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Report(ctx, req.(*QueryReportRequest)) + return srv.(QueryServer).Report(ctx, req.(*QueryReport)) } return interceptor(ctx, in, info, handler) } func _Query_AllReports_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllReportsRequest) + in := new(QueryAllReports) if err := dec(in); err != nil { return nil, err } @@ -2955,13 +2953,13 @@ func _Query_AllReports_Handler(srv interface{}, ctx context.Context, dec func(in FullMethod: "/canine_chain.storage.Query/AllReports", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllReports(ctx, req.(*QueryAllReportsRequest)) + return srv.(QueryServer).AllReports(ctx, req.(*QueryAllReports)) } return interceptor(ctx, in, info, handler) } func _Query_FreeSpace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFreeSpaceRequest) + in := new(QueryFreeSpace) if err := dec(in); err != nil { return nil, err } @@ -2973,13 +2971,13 @@ func _Query_FreeSpace_Handler(srv interface{}, ctx context.Context, dec func(int FullMethod: "/canine_chain.storage.Query/FreeSpace", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FreeSpace(ctx, req.(*QueryFreeSpaceRequest)) + return srv.(QueryServer).FreeSpace(ctx, req.(*QueryFreeSpace)) } return interceptor(ctx, in, info, handler) } func _Query_StoreCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryStoreCountRequest) + in := new(QueryStoreCount) if err := dec(in); err != nil { return nil, err } @@ -2991,13 +2989,13 @@ func _Query_StoreCount_Handler(srv interface{}, ctx context.Context, dec func(in FullMethod: "/canine_chain.storage.Query/StoreCount", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).StoreCount(ctx, req.(*QueryStoreCountRequest)) + return srv.(QueryServer).StoreCount(ctx, req.(*QueryStoreCount)) } return interceptor(ctx, in, info, handler) } func _Query_FindFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFindFileRequest) + in := new(QueryFindFile) if err := dec(in); err != nil { return nil, err } @@ -3009,13 +3007,13 @@ func _Query_FindFile_Handler(srv interface{}, ctx context.Context, dec func(inte FullMethod: "/canine_chain.storage.Query/FindFile", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FindFile(ctx, req.(*QueryFindFileRequest)) + return srv.(QueryServer).FindFile(ctx, req.(*QueryFindFile)) } return interceptor(ctx, in, info, handler) } func _Query_GetClientFreeSpace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryClientFreeSpaceRequest) + in := new(QueryClientFreeSpace) if err := dec(in); err != nil { return nil, err } @@ -3027,13 +3025,13 @@ func _Query_GetClientFreeSpace_Handler(srv interface{}, ctx context.Context, dec FullMethod: "/canine_chain.storage.Query/GetClientFreeSpace", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).GetClientFreeSpace(ctx, req.(*QueryClientFreeSpaceRequest)) + return srv.(QueryServer).GetClientFreeSpace(ctx, req.(*QueryClientFreeSpace)) } return interceptor(ctx, in, info, handler) } func _Query_GetPayData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPayDataRequest) + in := new(QueryPayData) if err := dec(in); err != nil { return nil, err } @@ -3045,13 +3043,13 @@ func _Query_GetPayData_Handler(srv interface{}, ctx context.Context, dec func(in FullMethod: "/canine_chain.storage.Query/GetPayData", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).GetPayData(ctx, req.(*QueryPayDataRequest)) + return srv.(QueryServer).GetPayData(ctx, req.(*QueryPayData)) } return interceptor(ctx, in, info, handler) } func _Query_StoragePaymentInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryStoragePaymentInfoRequest) + in := new(QueryStoragePaymentInfo) if err := dec(in); err != nil { return nil, err } @@ -3063,13 +3061,13 @@ func _Query_StoragePaymentInfo_Handler(srv interface{}, ctx context.Context, dec FullMethod: "/canine_chain.storage.Query/StoragePaymentInfo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).StoragePaymentInfo(ctx, req.(*QueryStoragePaymentInfoRequest)) + return srv.(QueryServer).StoragePaymentInfo(ctx, req.(*QueryStoragePaymentInfo)) } return interceptor(ctx, in, info, handler) } func _Query_AllStoragePaymentInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllStoragePaymentInfoRequest) + in := new(QueryAllStoragePaymentInfo) if err := dec(in); err != nil { return nil, err } @@ -3081,13 +3079,13 @@ func _Query_AllStoragePaymentInfo_Handler(srv interface{}, ctx context.Context, FullMethod: "/canine_chain.storage.Query/AllStoragePaymentInfo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllStoragePaymentInfo(ctx, req.(*QueryAllStoragePaymentInfoRequest)) + return srv.(QueryServer).AllStoragePaymentInfo(ctx, req.(*QueryAllStoragePaymentInfo)) } return interceptor(ctx, in, info, handler) } func _Query_FileUploadCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFileUploadCheckRequest) + in := new(QueryFileUploadCheck) if err := dec(in); err != nil { return nil, err } @@ -3099,13 +3097,13 @@ func _Query_FileUploadCheck_Handler(srv interface{}, ctx context.Context, dec fu FullMethod: "/canine_chain.storage.Query/FileUploadCheck", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FileUploadCheck(ctx, req.(*QueryFileUploadCheckRequest)) + return srv.(QueryServer).FileUploadCheck(ctx, req.(*QueryFileUploadCheck)) } return interceptor(ctx, in, info, handler) } func _Query_PriceCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPriceCheckRequest) + in := new(QueryPriceCheck) if err := dec(in); err != nil { return nil, err } @@ -3117,13 +3115,13 @@ func _Query_PriceCheck_Handler(srv interface{}, ctx context.Context, dec func(in FullMethod: "/canine_chain.storage.Query/PriceCheck", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PriceCheck(ctx, req.(*QueryPriceCheckRequest)) + return srv.(QueryServer).PriceCheck(ctx, req.(*QueryPriceCheck)) } return interceptor(ctx, in, info, handler) } func _Query_ActiveProviders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryActiveProvidersRequest) + in := new(QueryActiveProviders) if err := dec(in); err != nil { return nil, err } @@ -3135,13 +3133,13 @@ func _Query_ActiveProviders_Handler(srv interface{}, ctx context.Context, dec fu FullMethod: "/canine_chain.storage.Query/ActiveProviders", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ActiveProviders(ctx, req.(*QueryActiveProvidersRequest)) + return srv.(QueryServer).ActiveProviders(ctx, req.(*QueryActiveProviders)) } return interceptor(ctx, in, info, handler) } func _Query_StorageStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryStorageStatsRequest) + in := new(QueryStorageStats) if err := dec(in); err != nil { return nil, err } @@ -3153,7 +3151,7 @@ func _Query_StorageStats_Handler(srv interface{}, ctx context.Context, dec func( FullMethod: "/canine_chain.storage.Query/StorageStats", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).StorageStats(ctx, req.(*QueryStorageStatsRequest)) + return srv.(QueryServer).StorageStats(ctx, req.(*QueryStorageStats)) } return interceptor(ctx, in, info, handler) } @@ -3255,7 +3253,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Metadata: "canine_chain/storage/query.proto", } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParams) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3265,12 +3263,12 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3311,7 +3309,7 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryProofRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryProof) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3321,12 +3319,12 @@ func (m *QueryProofRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryProofRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryProof) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryProofRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryProof) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3393,7 +3391,7 @@ func (m *QueryProofResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryProofsByAddressRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryProofsByAddress) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3403,12 +3401,12 @@ func (m *QueryProofsByAddressRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryProofsByAddressRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryProofsByAddress) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryProofsByAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryProofsByAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3484,7 +3482,7 @@ func (m *QueryProofsByAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryFileRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFile) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3494,12 +3492,12 @@ func (m *QueryFileRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFileRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFile) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3559,7 +3557,7 @@ func (m *QueryFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllFilesRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllFiles) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3569,12 +3567,12 @@ func (m *QueryAllFilesRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllFilesRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllFiles) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllFilesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllFiles) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3594,7 +3592,7 @@ func (m *QueryAllFilesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryOpenFilesRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryOpenFiles) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3604,12 +3602,12 @@ func (m *QueryOpenFilesRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryOpenFilesRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryOpenFiles) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryOpenFilesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryOpenFiles) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3685,7 +3683,7 @@ func (m *QueryAllFilesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryProviderRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryProvider) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3695,12 +3693,12 @@ func (m *QueryProviderRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryProviderRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryProvider) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryProviderRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryProvider) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3748,7 +3746,7 @@ func (m *QueryProviderResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllProvidersRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllProviders) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3758,12 +3756,12 @@ func (m *QueryAllProvidersRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllProvidersRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllProviders) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllProvidersRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllProviders) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3832,7 +3830,7 @@ func (m *QueryAllProvidersResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } -func (m *QueryAttestationRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAttestation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3842,12 +3840,12 @@ func (m *QueryAttestationRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAttestationRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAttestation) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAttestationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAttestation) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3914,7 +3912,7 @@ func (m *QueryAttestationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } -func (m *QueryAllAttestationsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllAttestations) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3924,12 +3922,12 @@ func (m *QueryAllAttestationsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllAttestationsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllAttestations) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllAttestationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllAttestations) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3998,7 +3996,7 @@ func (m *QueryAllAttestationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryReportRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryReport) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4008,12 +4006,12 @@ func (m *QueryReportRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryReportRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryReport) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryReportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4080,7 +4078,7 @@ func (m *QueryReportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllReportsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllReports) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4090,12 +4088,12 @@ func (m *QueryAllReportsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllReportsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllReports) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllReportsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllReports) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4164,7 +4162,7 @@ func (m *QueryAllReportsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryFreeSpaceRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFreeSpace) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4174,12 +4172,12 @@ func (m *QueryFreeSpaceRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFreeSpaceRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFreeSpace) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFreeSpaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFreeSpace) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4194,7 +4192,7 @@ func (m *QueryFreeSpaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryStoreCountRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryStoreCount) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4204,12 +4202,12 @@ func (m *QueryStoreCountRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryStoreCountRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStoreCount) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryStoreCountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStoreCount) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4284,7 +4282,7 @@ func (m *QueryStoreCountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryFindFileRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFindFile) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4294,12 +4292,12 @@ func (m *QueryFindFileRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFindFileRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFindFile) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFindFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFindFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4344,7 +4342,7 @@ func (m *QueryFindFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryClientFreeSpaceRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryClientFreeSpace) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4354,12 +4352,12 @@ func (m *QueryClientFreeSpaceRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryClientFreeSpaceRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryClientFreeSpace) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryClientFreeSpaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryClientFreeSpace) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4402,7 +4400,7 @@ func (m *QueryClientFreeSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryPayDataRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryPayData) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4412,12 +4410,12 @@ func (m *QueryPayDataRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryPayDataRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPayData) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPayDataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPayData) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4465,7 +4463,7 @@ func (m *QueryPayDataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryStoragePaymentInfoRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryStoragePaymentInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4475,12 +4473,12 @@ func (m *QueryStoragePaymentInfoRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryStoragePaymentInfoRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStoragePaymentInfo) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryStoragePaymentInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStoragePaymentInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4528,7 +4526,7 @@ func (m *QueryStoragePaymentInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } -func (m *QueryAllStoragePaymentInfoRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllStoragePaymentInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4538,12 +4536,12 @@ func (m *QueryAllStoragePaymentInfoRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllStoragePaymentInfoRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllStoragePaymentInfo) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllStoragePaymentInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllStoragePaymentInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4612,7 +4610,7 @@ func (m *QueryAllStoragePaymentInfoResponse) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } -func (m *QueryFileUploadCheckRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFileUploadCheck) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4622,12 +4620,12 @@ func (m *QueryFileUploadCheckRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFileUploadCheckRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFileUploadCheck) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFileUploadCheckRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFileUploadCheck) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4680,7 +4678,7 @@ func (m *QueryFileUploadCheckResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryPriceCheckRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryPriceCheck) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4690,12 +4688,12 @@ func (m *QueryPriceCheckRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryPriceCheckRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPriceCheck) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPriceCheckRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPriceCheck) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4743,7 +4741,7 @@ func (m *QueryPriceCheckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryActiveProvidersRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryActiveProviders) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4753,12 +4751,12 @@ func (m *QueryActiveProvidersRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryActiveProvidersRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryActiveProviders) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryActiveProvidersRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryActiveProviders) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4803,7 +4801,7 @@ func (m *QueryActiveProvidersResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *QueryStorageStatsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryStorageStats) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4813,12 +4811,12 @@ func (m *QueryStorageStatsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryStorageStatsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryStorageStats) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryStorageStatsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryStorageStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4900,7 +4898,7 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryParamsRequest) Size() (n int) { +func (m *QueryParams) Size() (n int) { if m == nil { return 0 } @@ -4920,7 +4918,7 @@ func (m *QueryParamsResponse) Size() (n int) { return n } -func (m *QueryProofRequest) Size() (n int) { +func (m *QueryProof) Size() (n int) { if m == nil { return 0 } @@ -4955,7 +4953,7 @@ func (m *QueryProofResponse) Size() (n int) { return n } -func (m *QueryProofsByAddressRequest) Size() (n int) { +func (m *QueryProofsByAddress) Size() (n int) { if m == nil { return 0 } @@ -4991,7 +4989,7 @@ func (m *QueryProofsByAddressResponse) Size() (n int) { return n } -func (m *QueryFileRequest) Size() (n int) { +func (m *QueryFile) Size() (n int) { if m == nil { return 0 } @@ -5022,7 +5020,7 @@ func (m *QueryFileResponse) Size() (n int) { return n } -func (m *QueryAllFilesRequest) Size() (n int) { +func (m *QueryAllFiles) Size() (n int) { if m == nil { return 0 } @@ -5035,7 +5033,7 @@ func (m *QueryAllFilesRequest) Size() (n int) { return n } -func (m *QueryOpenFilesRequest) Size() (n int) { +func (m *QueryOpenFiles) Size() (n int) { if m == nil { return 0 } @@ -5071,7 +5069,7 @@ func (m *QueryAllFilesResponse) Size() (n int) { return n } -func (m *QueryProviderRequest) Size() (n int) { +func (m *QueryProvider) Size() (n int) { if m == nil { return 0 } @@ -5095,7 +5093,7 @@ func (m *QueryProviderResponse) Size() (n int) { return n } -func (m *QueryAllProvidersRequest) Size() (n int) { +func (m *QueryAllProviders) Size() (n int) { if m == nil { return 0 } @@ -5127,7 +5125,7 @@ func (m *QueryAllProvidersResponse) Size() (n int) { return n } -func (m *QueryAttestationRequest) Size() (n int) { +func (m *QueryAttestation) Size() (n int) { if m == nil { return 0 } @@ -5162,7 +5160,7 @@ func (m *QueryAttestationResponse) Size() (n int) { return n } -func (m *QueryAllAttestationsRequest) Size() (n int) { +func (m *QueryAllAttestations) Size() (n int) { if m == nil { return 0 } @@ -5194,7 +5192,7 @@ func (m *QueryAllAttestationsResponse) Size() (n int) { return n } -func (m *QueryReportRequest) Size() (n int) { +func (m *QueryReport) Size() (n int) { if m == nil { return 0 } @@ -5229,7 +5227,7 @@ func (m *QueryReportResponse) Size() (n int) { return n } -func (m *QueryAllReportsRequest) Size() (n int) { +func (m *QueryAllReports) Size() (n int) { if m == nil { return 0 } @@ -5261,7 +5259,7 @@ func (m *QueryAllReportsResponse) Size() (n int) { return n } -func (m *QueryFreeSpaceRequest) Size() (n int) { +func (m *QueryFreeSpace) Size() (n int) { if m == nil { return 0 } @@ -5274,7 +5272,7 @@ func (m *QueryFreeSpaceRequest) Size() (n int) { return n } -func (m *QueryStoreCountRequest) Size() (n int) { +func (m *QueryStoreCount) Size() (n int) { if m == nil { return 0 } @@ -5313,7 +5311,7 @@ func (m *QueryStoreCountResponse) Size() (n int) { return n } -func (m *QueryFindFileRequest) Size() (n int) { +func (m *QueryFindFile) Size() (n int) { if m == nil { return 0 } @@ -5339,7 +5337,7 @@ func (m *QueryFindFileResponse) Size() (n int) { return n } -func (m *QueryClientFreeSpaceRequest) Size() (n int) { +func (m *QueryClientFreeSpace) Size() (n int) { if m == nil { return 0 } @@ -5364,7 +5362,7 @@ func (m *QueryClientFreeSpaceResponse) Size() (n int) { return n } -func (m *QueryPayDataRequest) Size() (n int) { +func (m *QueryPayData) Size() (n int) { if m == nil { return 0 } @@ -5392,7 +5390,7 @@ func (m *QueryPayDataResponse) Size() (n int) { return n } -func (m *QueryStoragePaymentInfoRequest) Size() (n int) { +func (m *QueryStoragePaymentInfo) Size() (n int) { if m == nil { return 0 } @@ -5416,7 +5414,7 @@ func (m *QueryStoragePaymentInfoResponse) Size() (n int) { return n } -func (m *QueryAllStoragePaymentInfoRequest) Size() (n int) { +func (m *QueryAllStoragePaymentInfo) Size() (n int) { if m == nil { return 0 } @@ -5448,7 +5446,7 @@ func (m *QueryAllStoragePaymentInfoResponse) Size() (n int) { return n } -func (m *QueryFileUploadCheckRequest) Size() (n int) { +func (m *QueryFileUploadCheck) Size() (n int) { if m == nil { return 0 } @@ -5476,7 +5474,7 @@ func (m *QueryFileUploadCheckResponse) Size() (n int) { return n } -func (m *QueryPriceCheckRequest) Size() (n int) { +func (m *QueryPriceCheck) Size() (n int) { if m == nil { return 0 } @@ -5504,7 +5502,7 @@ func (m *QueryPriceCheckResponse) Size() (n int) { return n } -func (m *QueryActiveProvidersRequest) Size() (n int) { +func (m *QueryActiveProviders) Size() (n int) { if m == nil { return 0 } @@ -5528,7 +5526,7 @@ func (m *QueryActiveProvidersResponse) Size() (n int) { return n } -func (m *QueryStorageStatsRequest) Size() (n int) { +func (m *QueryStorageStats) Size() (n int) { if m == nil { return 0 } @@ -5571,7 +5569,7 @@ func sovQuery(x uint64) (n int) { func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParams) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5594,10 +5592,10 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParams: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParams: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -5704,7 +5702,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryProofRequest) Unmarshal(dAtA []byte) error { +func (m *QueryProof) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5727,10 +5725,10 @@ func (m *QueryProofRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryProofRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryProof: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryProofRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryProof: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -5954,7 +5952,7 @@ func (m *QueryProofResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryProofsByAddressRequest) Unmarshal(dAtA []byte) error { +func (m *QueryProofsByAddress) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -5977,10 +5975,10 @@ func (m *QueryProofsByAddressRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryProofsByAddressRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryProofsByAddress: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryProofsByAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryProofsByAddress: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6192,7 +6190,7 @@ func (m *QueryProofsByAddressResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { +func (m *QueryFile) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6215,10 +6213,10 @@ func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFileRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFile: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFileRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFile: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6410,7 +6408,7 @@ func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllFiles) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6433,10 +6431,10 @@ func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllFilesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllFiles: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllFilesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllFiles: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6496,7 +6494,7 @@ func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryOpenFilesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryOpenFiles) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6519,10 +6517,10 @@ func (m *QueryOpenFilesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryOpenFilesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryOpenFiles: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryOpenFilesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryOpenFiles: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6734,7 +6732,7 @@ func (m *QueryAllFilesResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryProviderRequest) Unmarshal(dAtA []byte) error { +func (m *QueryProvider) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6757,10 +6755,10 @@ func (m *QueryProviderRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryProviderRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryProvider: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryProviderRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryProvider: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -6899,7 +6897,7 @@ func (m *QueryProviderResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllProvidersRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllProviders) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -6922,10 +6920,10 @@ func (m *QueryAllProvidersRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllProvidersRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllProviders: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllProvidersRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllProviders: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -7105,7 +7103,7 @@ func (m *QueryAllProvidersResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAttestationRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAttestation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7128,10 +7126,10 @@ func (m *QueryAttestationRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAttestationRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAttestation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAttestationRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAttestation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -7355,7 +7353,7 @@ func (m *QueryAttestationResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllAttestationsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllAttestations) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7378,10 +7376,10 @@ func (m *QueryAllAttestationsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllAttestationsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllAttestations: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllAttestationsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllAttestations: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -7561,7 +7559,7 @@ func (m *QueryAllAttestationsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryReportRequest) Unmarshal(dAtA []byte) error { +func (m *QueryReport) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7584,10 +7582,10 @@ func (m *QueryReportRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryReportRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryReport: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryReportRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryReport: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -7811,7 +7809,7 @@ func (m *QueryReportResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllReportsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllReports) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7834,10 +7832,10 @@ func (m *QueryAllReportsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllReportsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllReports: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllReportsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllReports: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -8017,7 +8015,7 @@ func (m *QueryAllReportsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFreeSpaceRequest) Unmarshal(dAtA []byte) error { +func (m *QueryFreeSpace) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8040,10 +8038,10 @@ func (m *QueryFreeSpaceRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFreeSpaceRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFreeSpace: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFreeSpaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFreeSpace: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -8099,7 +8097,7 @@ func (m *QueryFreeSpaceRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryStoreCountRequest) Unmarshal(dAtA []byte) error { +func (m *QueryStoreCount) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8122,10 +8120,10 @@ func (m *QueryStoreCountRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryStoreCountRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryStoreCount: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryStoreCountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryStoreCount: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -8345,7 +8343,7 @@ func (m *QueryStoreCountResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFindFileRequest) Unmarshal(dAtA []byte) error { +func (m *QueryFindFile) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8368,10 +8366,10 @@ func (m *QueryFindFileRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFindFileRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFindFile: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFindFileRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFindFile: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -8511,7 +8509,7 @@ func (m *QueryFindFileResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryClientFreeSpaceRequest) Unmarshal(dAtA []byte) error { +func (m *QueryClientFreeSpace) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8534,10 +8532,10 @@ func (m *QueryClientFreeSpaceRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryClientFreeSpaceRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryClientFreeSpace: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryClientFreeSpaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryClientFreeSpace: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -8662,7 +8660,7 @@ func (m *QueryClientFreeSpaceResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPayDataRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPayData) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8685,10 +8683,10 @@ func (m *QueryPayDataRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPayDataRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPayData: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPayDataRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPayData: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -8832,7 +8830,7 @@ func (m *QueryPayDataResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryStoragePaymentInfoRequest) Unmarshal(dAtA []byte) error { +func (m *QueryStoragePaymentInfo) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8855,10 +8853,10 @@ func (m *QueryStoragePaymentInfoRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryStoragePaymentInfoRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryStoragePaymentInfo: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryStoragePaymentInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryStoragePaymentInfo: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -8997,7 +8995,7 @@ func (m *QueryStoragePaymentInfoResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllStoragePaymentInfoRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllStoragePaymentInfo) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9020,10 +9018,10 @@ func (m *QueryAllStoragePaymentInfoRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllStoragePaymentInfoRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllStoragePaymentInfo: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllStoragePaymentInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllStoragePaymentInfo: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -9203,7 +9201,7 @@ func (m *QueryAllStoragePaymentInfoResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFileUploadCheckRequest) Unmarshal(dAtA []byte) error { +func (m *QueryFileUploadCheck) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9226,10 +9224,10 @@ func (m *QueryFileUploadCheckRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFileUploadCheckRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFileUploadCheck: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFileUploadCheckRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFileUploadCheck: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -9374,7 +9372,7 @@ func (m *QueryFileUploadCheckResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPriceCheckRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPriceCheck) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9397,10 +9395,10 @@ func (m *QueryPriceCheckRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPriceCheckRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPriceCheck: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPriceCheckRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPriceCheck: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -9544,7 +9542,7 @@ func (m *QueryPriceCheckResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryActiveProvidersRequest) Unmarshal(dAtA []byte) error { +func (m *QueryActiveProviders) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9567,10 +9565,10 @@ func (m *QueryActiveProvidersRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryActiveProvidersRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryActiveProviders: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryActiveProvidersRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryActiveProviders: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -9678,7 +9676,7 @@ func (m *QueryActiveProvidersResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryStorageStatsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryStorageStats) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -9701,10 +9699,10 @@ func (m *QueryStorageStatsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryStorageStatsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryStorageStats: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryStorageStatsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryStorageStats: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: diff --git a/x/storage/types/query.pb.gw.go b/x/storage/types/query.pb.gw.go index 31bdcf58a..eaf2bbe48 100644 --- a/x/storage/types/query.pb.gw.go +++ b/x/storage/types/query.pb.gw.go @@ -34,7 +34,7 @@ var _ = descriptor.ForMessage var _ = metadata.Join func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -43,7 +43,7 @@ func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, cl } func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := server.Params(ctx, &protoReq) @@ -52,7 +52,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFileRequest + var protoReq QueryFile var metadata runtime.ServerMetadata var ( @@ -101,7 +101,7 @@ func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, clie } func local_request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFileRequest + var protoReq QueryFile var metadata runtime.ServerMetadata var ( @@ -154,7 +154,7 @@ var ( ) func request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllFilesRequest + var protoReq QueryAllFiles var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -170,7 +170,7 @@ func request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllFilesRequest + var protoReq QueryAllFiles var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -190,7 +190,7 @@ var ( ) func request_Query_OpenFiles_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryOpenFilesRequest + var protoReq QueryOpenFiles var metadata runtime.ServerMetadata var ( @@ -224,7 +224,7 @@ func request_Query_OpenFiles_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_OpenFiles_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryOpenFilesRequest + var protoReq QueryOpenFiles var metadata runtime.ServerMetadata var ( @@ -258,7 +258,7 @@ func local_request_Query_OpenFiles_0(ctx context.Context, marshaler runtime.Mars } func request_Query_Proof_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryProofRequest + var protoReq QueryProof var metadata runtime.ServerMetadata var ( @@ -318,7 +318,7 @@ func request_Query_Proof_0(ctx context.Context, marshaler runtime.Marshaler, cli } func local_request_Query_Proof_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryProofRequest + var protoReq QueryProof var metadata runtime.ServerMetadata var ( @@ -378,7 +378,7 @@ func local_request_Query_Proof_0(ctx context.Context, marshaler runtime.Marshale } func request_Query_Provider_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryProviderRequest + var protoReq QueryProvider var metadata runtime.ServerMetadata var ( @@ -405,7 +405,7 @@ func request_Query_Provider_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_Provider_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryProviderRequest + var protoReq QueryProvider var metadata runtime.ServerMetadata var ( @@ -436,7 +436,7 @@ var ( ) func request_Query_AllProviders_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllProvidersRequest + var protoReq QueryAllProviders var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -452,7 +452,7 @@ func request_Query_AllProviders_0(ctx context.Context, marshaler runtime.Marshal } func local_request_Query_AllProviders_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllProvidersRequest + var protoReq QueryAllProviders var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -468,7 +468,7 @@ func local_request_Query_AllProviders_0(ctx context.Context, marshaler runtime.M } func request_Query_Attestation_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAttestationRequest + var protoReq QueryAttestation var metadata runtime.ServerMetadata var ( @@ -528,7 +528,7 @@ func request_Query_Attestation_0(ctx context.Context, marshaler runtime.Marshale } func local_request_Query_Attestation_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAttestationRequest + var protoReq QueryAttestation var metadata runtime.ServerMetadata var ( @@ -592,7 +592,7 @@ var ( ) func request_Query_AllAttestations_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllAttestationsRequest + var protoReq QueryAllAttestations var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -608,7 +608,7 @@ func request_Query_AllAttestations_0(ctx context.Context, marshaler runtime.Mars } func local_request_Query_AllAttestations_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllAttestationsRequest + var protoReq QueryAllAttestations var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -624,7 +624,7 @@ func local_request_Query_AllAttestations_0(ctx context.Context, marshaler runtim } func request_Query_Report_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryReportRequest + var protoReq QueryReport var metadata runtime.ServerMetadata var ( @@ -684,7 +684,7 @@ func request_Query_Report_0(ctx context.Context, marshaler runtime.Marshaler, cl } func local_request_Query_Report_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryReportRequest + var protoReq QueryReport var metadata runtime.ServerMetadata var ( @@ -748,7 +748,7 @@ var ( ) func request_Query_AllReports_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllReportsRequest + var protoReq QueryAllReports var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -764,7 +764,7 @@ func request_Query_AllReports_0(ctx context.Context, marshaler runtime.Marshaler } func local_request_Query_AllReports_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllReportsRequest + var protoReq QueryAllReports var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -780,7 +780,7 @@ func local_request_Query_AllReports_0(ctx context.Context, marshaler runtime.Mar } func request_Query_FreeSpace_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFreeSpaceRequest + var protoReq QueryFreeSpace var metadata runtime.ServerMetadata var ( @@ -807,7 +807,7 @@ func request_Query_FreeSpace_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_FreeSpace_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFreeSpaceRequest + var protoReq QueryFreeSpace var metadata runtime.ServerMetadata var ( @@ -834,7 +834,7 @@ func local_request_Query_FreeSpace_0(ctx context.Context, marshaler runtime.Mars } func request_Query_StoreCount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryStoreCountRequest + var protoReq QueryStoreCount var metadata runtime.ServerMetadata var ( @@ -861,7 +861,7 @@ func request_Query_StoreCount_0(ctx context.Context, marshaler runtime.Marshaler } func local_request_Query_StoreCount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryStoreCountRequest + var protoReq QueryStoreCount var metadata runtime.ServerMetadata var ( @@ -888,7 +888,7 @@ func local_request_Query_StoreCount_0(ctx context.Context, marshaler runtime.Mar } func request_Query_FindFile_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFindFileRequest + var protoReq QueryFindFile var metadata runtime.ServerMetadata var ( @@ -915,7 +915,7 @@ func request_Query_FindFile_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_FindFile_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFindFileRequest + var protoReq QueryFindFile var metadata runtime.ServerMetadata var ( @@ -942,7 +942,7 @@ func local_request_Query_FindFile_0(ctx context.Context, marshaler runtime.Marsh } func request_Query_GetClientFreeSpace_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryClientFreeSpaceRequest + var protoReq QueryClientFreeSpace var metadata runtime.ServerMetadata var ( @@ -969,7 +969,7 @@ func request_Query_GetClientFreeSpace_0(ctx context.Context, marshaler runtime.M } func local_request_Query_GetClientFreeSpace_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryClientFreeSpaceRequest + var protoReq QueryClientFreeSpace var metadata runtime.ServerMetadata var ( @@ -996,7 +996,7 @@ func local_request_Query_GetClientFreeSpace_0(ctx context.Context, marshaler run } func request_Query_GetPayData_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPayDataRequest + var protoReq QueryPayData var metadata runtime.ServerMetadata var ( @@ -1023,7 +1023,7 @@ func request_Query_GetPayData_0(ctx context.Context, marshaler runtime.Marshaler } func local_request_Query_GetPayData_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPayDataRequest + var protoReq QueryPayData var metadata runtime.ServerMetadata var ( @@ -1050,7 +1050,7 @@ func local_request_Query_GetPayData_0(ctx context.Context, marshaler runtime.Mar } func request_Query_StoragePaymentInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryStoragePaymentInfoRequest + var protoReq QueryStoragePaymentInfo var metadata runtime.ServerMetadata var ( @@ -1077,7 +1077,7 @@ func request_Query_StoragePaymentInfo_0(ctx context.Context, marshaler runtime.M } func local_request_Query_StoragePaymentInfo_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryStoragePaymentInfoRequest + var protoReq QueryStoragePaymentInfo var metadata runtime.ServerMetadata var ( @@ -1108,7 +1108,7 @@ var ( ) func request_Query_AllStoragePaymentInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllStoragePaymentInfoRequest + var protoReq QueryAllStoragePaymentInfo var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -1124,7 +1124,7 @@ func request_Query_AllStoragePaymentInfo_0(ctx context.Context, marshaler runtim } func local_request_Query_AllStoragePaymentInfo_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllStoragePaymentInfoRequest + var protoReq QueryAllStoragePaymentInfo var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -1144,7 +1144,7 @@ var ( ) func request_Query_FileUploadCheck_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFileUploadCheckRequest + var protoReq QueryFileUploadCheck var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -1160,7 +1160,7 @@ func request_Query_FileUploadCheck_0(ctx context.Context, marshaler runtime.Mars } func local_request_Query_FileUploadCheck_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFileUploadCheckRequest + var protoReq QueryFileUploadCheck var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -1176,7 +1176,7 @@ func local_request_Query_FileUploadCheck_0(ctx context.Context, marshaler runtim } func request_Query_PriceCheck_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPriceCheckRequest + var protoReq QueryPriceCheck var metadata runtime.ServerMetadata var ( @@ -1214,7 +1214,7 @@ func request_Query_PriceCheck_0(ctx context.Context, marshaler runtime.Marshaler } func local_request_Query_PriceCheck_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPriceCheckRequest + var protoReq QueryPriceCheck var metadata runtime.ServerMetadata var ( @@ -1252,7 +1252,7 @@ func local_request_Query_PriceCheck_0(ctx context.Context, marshaler runtime.Mar } func request_Query_ActiveProviders_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryActiveProvidersRequest + var protoReq QueryActiveProviders var metadata runtime.ServerMetadata msg, err := client.ActiveProviders(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -1261,7 +1261,7 @@ func request_Query_ActiveProviders_0(ctx context.Context, marshaler runtime.Mars } func local_request_Query_ActiveProviders_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryActiveProvidersRequest + var protoReq QueryActiveProviders var metadata runtime.ServerMetadata msg, err := server.ActiveProviders(ctx, &protoReq) @@ -1270,7 +1270,7 @@ func local_request_Query_ActiveProviders_0(ctx context.Context, marshaler runtim } func request_Query_StorageStats_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryStorageStatsRequest + var protoReq QueryStorageStats var metadata runtime.ServerMetadata msg, err := client.StorageStats(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -1279,7 +1279,7 @@ func request_Query_StorageStats_0(ctx context.Context, marshaler runtime.Marshal } func local_request_Query_StorageStats_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryStorageStatsRequest + var protoReq QueryStorageStats var metadata runtime.ServerMetadata msg, err := server.StorageStats(ctx, &protoReq) From c2ce238a47f57244c8324480eb9efd50de2fc61a Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 8 Nov 2023 23:11:53 -0500 Subject: [PATCH 059/256] rns module query refactor --- proto/canine_chain/rns/query.proto | 42 +- x/oracle/client/cli/query_params.go | 2 +- x/rns/client/cli/query_bids.go | 4 +- x/rns/client/cli/query_forsale.go | 4 +- x/rns/client/cli/query_init.go | 4 +- x/rns/client/cli/query_list_owned_names.go | 2 +- x/rns/client/cli/query_names.go | 4 +- x/rns/client/cli/query_params.go | 2 +- x/rns/keeper/bidding_test.go | 6 +- x/rns/keeper/grpc_query_bids.go | 4 +- x/rns/keeper/grpc_query_forsale.go | 4 +- x/rns/keeper/grpc_query_init.go | 4 +- x/rns/keeper/grpc_query_list_owned_names.go | 2 +- x/rns/keeper/grpc_query_names.go | 4 +- x/rns/keeper/grpc_query_params.go | 2 +- x/rns/keeper/keeper_test.go | 12 +- x/rns/keeper/register_test.go | 2 +- x/rns/keeper/transfer_test.go | 2 +- x/rns/simulation/add_record.go | 2 +- x/rns/simulation/cancel_bid.go | 2 +- x/rns/simulation/list.go | 2 +- x/rns/simulation/transfer.go | 2 +- x/rns/types/query.pb.go | 706 ++++++++++---------- x/rns/types/query.pb.gw.go | 40 +- 24 files changed, 429 insertions(+), 431 deletions(-) diff --git a/proto/canine_chain/rns/query.proto b/proto/canine_chain/rns/query.proto index fc2562ddb..e13eed523 100644 --- a/proto/canine_chain/rns/query.proto +++ b/proto/canine_chain/rns/query.proto @@ -16,62 +16,62 @@ option go_package = "github.com/jackalLabs/canine-chain/x/rns/types"; // Query defines the gRPC querier service. service Query { // Parameters queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + rpc Params(QueryParams) returns (QueryParamsResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/params"; } // Queries a Name by index. - rpc Name(QueryNameRequest) returns (QueryNameResponse) { + rpc Name(QueryName) returns (QueryNameResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/names/{index}"; } // Queries a list of Names. - rpc AllNames(QueryAllNamesRequest) returns (QueryAllNamesResponse) { + rpc AllNames(QueryAllNames) returns (QueryAllNamesResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/names"; } // Queries a Bid by index. - rpc Bid(QueryBidRequest) returns (QueryBidResponse) { + rpc Bid(QueryBid) returns (QueryBidResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/bids/{index}"; } // Queries a list of Bids. - rpc AllBids(QueryAllBidsRequest) returns (QueryAllBidsResponse) { + rpc AllBids(QueryAllBids) returns (QueryAllBidsResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/bids"; } // Queries a Listing by index. - rpc ForSale(QueryForSaleRequest) returns (QueryForSaleResponse) { + rpc ForSale(QueryForSale) returns (QueryForSaleResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/for_sale/{name}"; } // Queries all Listings. - rpc AllForSale(QueryAllForSaleRequest) returns (QueryAllForSaleResponse) { + rpc AllForSale(QueryAllForSale) returns (QueryAllForSaleResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/for_sale"; } // Queries a Init by index. - rpc Init(QueryInitRequest) returns (QueryInitResponse) { + rpc Init(QueryInit) returns (QueryInitResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/init/{address}"; } // Queries a list of Init items. - rpc AllInits(QueryAllInitsRequest) returns (QueryAllInitsResponse) { + rpc AllInits(QueryAllInits) returns (QueryAllInitsResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/init"; } // Queries a list of ListOwnedNames items. - rpc ListOwnedNames(QueryListOwnedNamesRequest) + rpc ListOwnedNames(QueryListOwnedNames) returns (QueryListOwnedNamesResponse) { option (google.api.http).get = "/jackal/canine-chain/rns/list_owned_names/{address}"; } } -// QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} +// QueryParams is request type for the Query/Params RPC method. +message QueryParams {} // QueryParamsResponse is response type for the Query/Params RPC method. message QueryParamsResponse { @@ -79,11 +79,11 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } -message QueryNameRequest { string index = 1; } +message QueryName { string index = 1; } message QueryNameResponse { Names name = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllNamesRequest { +message QueryAllNames { cosmos.base.query.v1beta1.PageRequest pagination = 1; } @@ -92,11 +92,11 @@ message QueryAllNamesResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryBidRequest { string index = 1; } +message QueryBid { string index = 1; } message QueryBidResponse { Bids bids = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllBidsRequest { +message QueryAllBids { cosmos.base.query.v1beta1.PageRequest pagination = 1; } @@ -105,13 +105,13 @@ message QueryAllBidsResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryForSaleRequest { string name = 1; } +message QueryForSale { string name = 1; } message QueryForSaleResponse { Forsale for_sale = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllForSaleRequest { +message QueryAllForSale { cosmos.base.query.v1beta1.PageRequest pagination = 1; } @@ -120,11 +120,11 @@ message QueryAllForSaleResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryInitRequest { string address = 1; } +message QueryInit { string address = 1; } message QueryInitResponse { bool init = 1; } -message QueryAllInitsRequest { +message QueryAllInits { cosmos.base.query.v1beta1.PageRequest pagination = 1; } @@ -133,7 +133,7 @@ message QueryAllInitsResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryListOwnedNamesRequest { +message QueryListOwnedNames { string address = 1; cosmos.base.query.v1beta1.PageRequest pagination = 2; } diff --git a/x/oracle/client/cli/query_params.go b/x/oracle/client/cli/query_params.go index 022fe8ee4..a40118908 100644 --- a/x/oracle/client/cli/query_params.go +++ b/x/oracle/client/cli/query_params.go @@ -19,7 +19,7 @@ func CmdQueryParams() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + res, err := queryClient.Params(context.Background(), &types.QueryParams{}) if err != nil { return err } diff --git a/x/rns/client/cli/query_bids.go b/x/rns/client/cli/query_bids.go index a3b8a061a..03cffa827 100644 --- a/x/rns/client/cli/query_bids.go +++ b/x/rns/client/cli/query_bids.go @@ -23,7 +23,7 @@ func CmdListBids() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllBidsRequest{ + params := &types.QueryAllBids{ Pagination: pageReq, } @@ -54,7 +54,7 @@ func CmdShowBids() *cobra.Command { argIndex := args[0] - params := &types.QueryBidRequest{ + params := &types.QueryBid{ Index: argIndex, } diff --git a/x/rns/client/cli/query_forsale.go b/x/rns/client/cli/query_forsale.go index 067b00c98..be3a73597 100644 --- a/x/rns/client/cli/query_forsale.go +++ b/x/rns/client/cli/query_forsale.go @@ -23,7 +23,7 @@ func CmdListForsale() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllForSaleRequest{ + params := &types.QueryAllForSale{ Pagination: pageReq, } @@ -54,7 +54,7 @@ func CmdShowForsale() *cobra.Command { argName := args[0] - params := &types.QueryForSaleRequest{ + params := &types.QueryForSale{ Name: argName, } diff --git a/x/rns/client/cli/query_init.go b/x/rns/client/cli/query_init.go index 2b00bc385..ec3de609c 100644 --- a/x/rns/client/cli/query_init.go +++ b/x/rns/client/cli/query_init.go @@ -23,7 +23,7 @@ func CmdListInit() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllInitsRequest{ + params := &types.QueryAllInits{ Pagination: pageReq, } @@ -54,7 +54,7 @@ func CmdShowInit() *cobra.Command { argAddress := args[0] - params := &types.QueryInitRequest{ + params := &types.QueryInit{ Address: argAddress, } diff --git a/x/rns/client/cli/query_list_owned_names.go b/x/rns/client/cli/query_list_owned_names.go index c943abe87..8801c2c00 100644 --- a/x/rns/client/cli/query_list_owned_names.go +++ b/x/rns/client/cli/query_list_owned_names.go @@ -26,7 +26,7 @@ func CmdListOwnedNames() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryListOwnedNamesRequest{ + params := &types.QueryListOwnedNames{ Address: reqAddress, } diff --git a/x/rns/client/cli/query_names.go b/x/rns/client/cli/query_names.go index 7a10e59e0..ce0c6c036 100644 --- a/x/rns/client/cli/query_names.go +++ b/x/rns/client/cli/query_names.go @@ -23,7 +23,7 @@ func CmdListNames() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllNamesRequest{ + params := &types.QueryAllNames{ Pagination: pageReq, } @@ -54,7 +54,7 @@ func CmdShowNames() *cobra.Command { argIndex := args[0] - params := &types.QueryNameRequest{ + params := &types.QueryName{ Index: argIndex, } diff --git a/x/rns/client/cli/query_params.go b/x/rns/client/cli/query_params.go index 022fe8ee4..a40118908 100644 --- a/x/rns/client/cli/query_params.go +++ b/x/rns/client/cli/query_params.go @@ -19,7 +19,7 @@ func CmdQueryParams() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + res, err := queryClient.Params(context.Background(), &types.QueryParams{}) if err != nil { return err } diff --git a/x/rns/keeper/bidding_test.go b/x/rns/keeper/bidding_test.go index a0867224d..aa6954aba 100644 --- a/x/rns/keeper/bidding_test.go +++ b/x/rns/keeper/bidding_test.go @@ -64,7 +64,7 @@ func (suite *KeeperTestSuite) TestMsgAcceptBid() { suite.Require().Equal(ramt.Int64(), bidder) // cost them the amount they bid suite.Require().Equal(eamt.Int64(), biddee) // cost them the amount they bid - nameReq := types.QueryNameRequest{ + nameReq := types.QueryName{ Index: TestName, } @@ -96,7 +96,7 @@ func (suite *KeeperTestSuite) TestMsgMakeBid() { err = suite.rnsKeeper.AddBid(suite.ctx, address.String(), TestName, "1000ujkl") suite.Require().NoError(err) - bidReq := types.QueryBidRequest{ + bidReq := types.QueryBid{ Index: fmt.Sprintf("%s%s", address.String(), TestName), } @@ -134,7 +134,7 @@ func (suite *KeeperTestSuite) TestMsgCancelBid() { err = suite.rnsKeeper.AddBid(suite.ctx, address.String(), TestName, "1000ujkl") suite.Require().NoError(err) - bidReq := types.QueryBidRequest{ + bidReq := types.QueryBid{ Index: fmt.Sprintf("%s%s", address.String(), TestName), } diff --git a/x/rns/keeper/grpc_query_bids.go b/x/rns/keeper/grpc_query_bids.go index 8615ab09e..dc7d67210 100644 --- a/x/rns/keeper/grpc_query_bids.go +++ b/x/rns/keeper/grpc_query_bids.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllBids(c context.Context, req *types.QueryAllBidsRequest) (*types.QueryAllBidsResponse, error) { +func (k Keeper) AllBids(c context.Context, req *types.QueryAllBids) (*types.QueryAllBidsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) AllBids(c context.Context, req *types.QueryAllBidsRequest) (*typ return &types.QueryAllBidsResponse{Bids: bidss, Pagination: pageRes}, nil } -func (k Keeper) Bid(c context.Context, req *types.QueryBidRequest) (*types.QueryBidResponse, error) { +func (k Keeper) Bid(c context.Context, req *types.QueryBid) (*types.QueryBidResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/rns/keeper/grpc_query_forsale.go b/x/rns/keeper/grpc_query_forsale.go index ab094f4db..17be1337e 100644 --- a/x/rns/keeper/grpc_query_forsale.go +++ b/x/rns/keeper/grpc_query_forsale.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllForSale(c context.Context, req *types.QueryAllForSaleRequest) (*types.QueryAllForSaleResponse, error) { +func (k Keeper) AllForSale(c context.Context, req *types.QueryAllForSale) (*types.QueryAllForSaleResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) AllForSale(c context.Context, req *types.QueryAllForSaleRequest) return &types.QueryAllForSaleResponse{ForSale: forsales, Pagination: pageRes}, nil } -func (k Keeper) ForSale(c context.Context, req *types.QueryForSaleRequest) (*types.QueryForSaleResponse, error) { +func (k Keeper) ForSale(c context.Context, req *types.QueryForSale) (*types.QueryForSaleResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/rns/keeper/grpc_query_init.go b/x/rns/keeper/grpc_query_init.go index b9c4b80da..d14465ee4 100644 --- a/x/rns/keeper/grpc_query_init.go +++ b/x/rns/keeper/grpc_query_init.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllInits(c context.Context, req *types.QueryAllInitsRequest) (*types.QueryAllInitsResponse, error) { +func (k Keeper) AllInits(c context.Context, req *types.QueryAllInits) (*types.QueryAllInitsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) AllInits(c context.Context, req *types.QueryAllInitsRequest) (*t return &types.QueryAllInitsResponse{Init: inits, Pagination: pageRes}, nil } -func (k Keeper) Init(c context.Context, req *types.QueryInitRequest) (*types.QueryInitResponse, error) { +func (k Keeper) Init(c context.Context, req *types.QueryInit) (*types.QueryInitResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/rns/keeper/grpc_query_list_owned_names.go b/x/rns/keeper/grpc_query_list_owned_names.go index 901fff853..58fcc9c20 100644 --- a/x/rns/keeper/grpc_query_list_owned_names.go +++ b/x/rns/keeper/grpc_query_list_owned_names.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) ListOwnedNames(goCtx context.Context, req *types.QueryListOwnedNamesRequest) (*types.QueryListOwnedNamesResponse, error) { +func (k Keeper) ListOwnedNames(goCtx context.Context, req *types.QueryListOwnedNames) (*types.QueryListOwnedNamesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/rns/keeper/grpc_query_names.go b/x/rns/keeper/grpc_query_names.go index 140e4a7ac..5bf7c449d 100644 --- a/x/rns/keeper/grpc_query_names.go +++ b/x/rns/keeper/grpc_query_names.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllNames(c context.Context, req *types.QueryAllNamesRequest) (*types.QueryAllNamesResponse, error) { +func (k Keeper) AllNames(c context.Context, req *types.QueryAllNames) (*types.QueryAllNamesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) AllNames(c context.Context, req *types.QueryAllNamesRequest) (*t return &types.QueryAllNamesResponse{Name: namess, Pagination: pageRes}, nil } -func (k Keeper) Name(c context.Context, req *types.QueryNameRequest) (*types.QueryNameResponse, error) { +func (k Keeper) Name(c context.Context, req *types.QueryName) (*types.QueryNameResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/rns/keeper/grpc_query_params.go b/x/rns/keeper/grpc_query_params.go index a1dd8fcae..4e56ce912 100644 --- a/x/rns/keeper/grpc_query_params.go +++ b/x/rns/keeper/grpc_query_params.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (k Keeper) Params(c context.Context, req *types.QueryParams) (*types.QueryParamsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/rns/keeper/keeper_test.go b/x/rns/keeper/keeper_test.go index f7c869567..412c2105c 100644 --- a/x/rns/keeper/keeper_test.go +++ b/x/rns/keeper/keeper_test.go @@ -106,7 +106,7 @@ func (suite *KeeperTestSuite) TestMakeBid() { suite.rnsKeeper.SetBids(suite.ctx, bid) - bidReq := types.QueryBidRequest{ + bidReq := types.QueryBid{ Index: fmt.Sprintf("%s%s", address.String(), name), } @@ -137,7 +137,7 @@ func (suite *KeeperTestSuite) TestUpdateName() { suite.rnsKeeper.SetNames(suite.ctx, name) - nameReq := types.QueryNameRequest{ + nameReq := types.QueryName{ Index: "validname.jkl", } @@ -176,7 +176,7 @@ func (suite *KeeperTestSuite) TestRemoveName() { suite.rnsKeeper.SetNames(suite.ctx, name) - nameReq := types.QueryNameRequest{ + nameReq := types.QueryName{ Index: "validname.jkl", } @@ -212,7 +212,7 @@ func (suite *KeeperTestSuite) TestSetName() { suite.rnsKeeper.SetNames(suite.ctx, name) - nameReq := types.QueryNameRequest{ + nameReq := types.QueryName{ Index: "validname.jkl", } @@ -230,7 +230,7 @@ func (suite *KeeperTestSuite) TestSetName() { } suite.rnsKeeper.SetNames(suite.ctx, badname) - nameReq = types.QueryNameRequest{ + nameReq = types.QueryName{ Index: "badname.jkl", } _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) @@ -239,7 +239,7 @@ func (suite *KeeperTestSuite) TestSetName() { func (suite *KeeperTestSuite) TestGRPCParams() { suite.SetupSuite() - params, err := suite.queryClient.Params(gocontext.Background(), &types.QueryParamsRequest{}) + params, err := suite.queryClient.Params(gocontext.Background(), &types.QueryParams{}) suite.Require().NoError(err) suite.Require().Equal(params.Params, suite.rnsKeeper.GetParams(suite.ctx)) } diff --git a/x/rns/keeper/register_test.go b/x/rns/keeper/register_test.go index 4af635fa9..e8b9f0988 100644 --- a/x/rns/keeper/register_test.go +++ b/x/rns/keeper/register_test.go @@ -38,7 +38,7 @@ func (suite *KeeperTestSuite) TestMsgRegisterName() { err = suite.rnsKeeper.RegisterName(suite.ctx, address.String(), name, "{}", 2) suite.Require().NoError(err) - nameReq := types.QueryNameRequest{ + nameReq := types.QueryName{ Index: name, } diff --git a/x/rns/keeper/transfer_test.go b/x/rns/keeper/transfer_test.go index 7fec90775..88a1feb5e 100644 --- a/x/rns/keeper/transfer_test.go +++ b/x/rns/keeper/transfer_test.go @@ -33,7 +33,7 @@ func (suite *KeeperTestSuite) TestMsgTransfer() { err = suite.rnsKeeper.RegisterName(suite.ctx, address.String(), name, "{}", 2) suite.Require().NoError(err) - nameReq := types.QueryNameRequest{ + nameReq := types.QueryName{ Index: name, } diff --git a/x/rns/simulation/add_record.go b/x/rns/simulation/add_record.go index 233faafc7..82966f7e3 100644 --- a/x/rns/simulation/add_record.go +++ b/x/rns/simulation/add_record.go @@ -33,7 +33,7 @@ func SimulateMsgAddRecord( for { // finding all registered domain names wctx := sdk.WrapSDKContext(ctx) - nReq := &types.QueryListOwnedNamesRequest{ + nReq := &types.QueryListOwnedNames{ Address: simAccount.Address.String(), } // requesting the domain names diff --git a/x/rns/simulation/cancel_bid.go b/x/rns/simulation/cancel_bid.go index 4fcf3475d..9feb350c2 100644 --- a/x/rns/simulation/cancel_bid.go +++ b/x/rns/simulation/cancel_bid.go @@ -20,7 +20,7 @@ func SimulateMsgCancelBid( return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { // choosing a random account with a bid open - nreq := &types.QueryAllBidsRequest{} + nreq := &types.QueryAllBids{} wctx := sdk.WrapSDKContext(ctx) allBidsResp, err := k.AllBids(wctx, nreq) if err != nil { diff --git a/x/rns/simulation/list.go b/x/rns/simulation/list.go index a495d2ff4..5724fa37d 100644 --- a/x/rns/simulation/list.go +++ b/x/rns/simulation/list.go @@ -32,7 +32,7 @@ func SimulateMsgList( for { // finding all registered domain names wctx := sdk.WrapSDKContext(ctx) - nReq := &types.QueryListOwnedNamesRequest{ + nReq := &types.QueryListOwnedNames{ Address: simAccount.Address.String(), } // requesting the domain names diff --git a/x/rns/simulation/transfer.go b/x/rns/simulation/transfer.go index 5e537999f..d7a58a3e1 100644 --- a/x/rns/simulation/transfer.go +++ b/x/rns/simulation/transfer.go @@ -36,7 +36,7 @@ func SimulateMsgTransfer( for { // finding all registered domain names wctx := sdk.WrapSDKContext(ctx) - nReq := &types.QueryListOwnedNamesRequest{ + nReq := &types.QueryListOwnedNames{ Address: simAccount.Address.String(), } // requesting the domain names diff --git a/x/rns/types/query.pb.go b/x/rns/types/query.pb.go index 0ec3ece9d..a9b3763ed 100644 --- a/x/rns/types/query.pb.go +++ b/x/rns/types/query.pb.go @@ -30,22 +30,22 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { +// QueryParams is request type for the Query/Params RPC method. +type QueryParams struct { } -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { +func (m *QueryParams) Reset() { *m = QueryParams{} } +func (m *QueryParams) String() string { return proto.CompactTextString(m) } +func (*QueryParams) ProtoMessage() {} +func (*QueryParams) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{0} } -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParams.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -55,17 +55,17 @@ func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) +func (m *QueryParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParams.Merge(m, src) } -func (m *QueryParamsRequest) XXX_Size() int { +func (m *QueryParams) XXX_Size() int { return m.Size() } -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +func (m *QueryParams) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParams.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryParams proto.InternalMessageInfo // QueryParamsResponse is response type for the Query/Params RPC method. type QueryParamsResponse struct { @@ -113,22 +113,22 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -type QueryNameRequest struct { +type QueryName struct { Index string `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` } -func (m *QueryNameRequest) Reset() { *m = QueryNameRequest{} } -func (m *QueryNameRequest) String() string { return proto.CompactTextString(m) } -func (*QueryNameRequest) ProtoMessage() {} -func (*QueryNameRequest) Descriptor() ([]byte, []int) { +func (m *QueryName) Reset() { *m = QueryName{} } +func (m *QueryName) String() string { return proto.CompactTextString(m) } +func (*QueryName) ProtoMessage() {} +func (*QueryName) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{2} } -func (m *QueryNameRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryName) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryNameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryName) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryNameRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryName.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -138,19 +138,19 @@ func (m *QueryNameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return b[:n], nil } } -func (m *QueryNameRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryNameRequest.Merge(m, src) +func (m *QueryName) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryName.Merge(m, src) } -func (m *QueryNameRequest) XXX_Size() int { +func (m *QueryName) XXX_Size() int { return m.Size() } -func (m *QueryNameRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryNameRequest.DiscardUnknown(m) +func (m *QueryName) XXX_DiscardUnknown() { + xxx_messageInfo_QueryName.DiscardUnknown(m) } -var xxx_messageInfo_QueryNameRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryName proto.InternalMessageInfo -func (m *QueryNameRequest) GetIndex() string { +func (m *QueryName) GetIndex() string { if m != nil { return m.Index } @@ -201,22 +201,22 @@ func (m *QueryNameResponse) GetName() Names { return Names{} } -type QueryAllNamesRequest struct { +type QueryAllNames struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllNamesRequest) Reset() { *m = QueryAllNamesRequest{} } -func (m *QueryAllNamesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllNamesRequest) ProtoMessage() {} -func (*QueryAllNamesRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllNames) Reset() { *m = QueryAllNames{} } +func (m *QueryAllNames) String() string { return proto.CompactTextString(m) } +func (*QueryAllNames) ProtoMessage() {} +func (*QueryAllNames) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{4} } -func (m *QueryAllNamesRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllNames) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllNamesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllNamesRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllNames.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -226,19 +226,19 @@ func (m *QueryAllNamesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryAllNamesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllNamesRequest.Merge(m, src) +func (m *QueryAllNames) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllNames.Merge(m, src) } -func (m *QueryAllNamesRequest) XXX_Size() int { +func (m *QueryAllNames) XXX_Size() int { return m.Size() } -func (m *QueryAllNamesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllNamesRequest.DiscardUnknown(m) +func (m *QueryAllNames) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllNames.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllNamesRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllNames proto.InternalMessageInfo -func (m *QueryAllNamesRequest) GetPagination() *query.PageRequest { +func (m *QueryAllNames) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -297,22 +297,22 @@ func (m *QueryAllNamesResponse) GetPagination() *query.PageResponse { return nil } -type QueryBidRequest struct { +type QueryBid struct { Index string `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` } -func (m *QueryBidRequest) Reset() { *m = QueryBidRequest{} } -func (m *QueryBidRequest) String() string { return proto.CompactTextString(m) } -func (*QueryBidRequest) ProtoMessage() {} -func (*QueryBidRequest) Descriptor() ([]byte, []int) { +func (m *QueryBid) Reset() { *m = QueryBid{} } +func (m *QueryBid) String() string { return proto.CompactTextString(m) } +func (*QueryBid) ProtoMessage() {} +func (*QueryBid) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{6} } -func (m *QueryBidRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryBid) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryBidRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryBid) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryBidRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryBid.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -322,19 +322,19 @@ func (m *QueryBidRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, err return b[:n], nil } } -func (m *QueryBidRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryBidRequest.Merge(m, src) +func (m *QueryBid) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryBid.Merge(m, src) } -func (m *QueryBidRequest) XXX_Size() int { +func (m *QueryBid) XXX_Size() int { return m.Size() } -func (m *QueryBidRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryBidRequest.DiscardUnknown(m) +func (m *QueryBid) XXX_DiscardUnknown() { + xxx_messageInfo_QueryBid.DiscardUnknown(m) } -var xxx_messageInfo_QueryBidRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryBid proto.InternalMessageInfo -func (m *QueryBidRequest) GetIndex() string { +func (m *QueryBid) GetIndex() string { if m != nil { return m.Index } @@ -385,22 +385,22 @@ func (m *QueryBidResponse) GetBids() Bids { return Bids{} } -type QueryAllBidsRequest struct { +type QueryAllBids struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllBidsRequest) Reset() { *m = QueryAllBidsRequest{} } -func (m *QueryAllBidsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllBidsRequest) ProtoMessage() {} -func (*QueryAllBidsRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllBids) Reset() { *m = QueryAllBids{} } +func (m *QueryAllBids) String() string { return proto.CompactTextString(m) } +func (*QueryAllBids) ProtoMessage() {} +func (*QueryAllBids) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{8} } -func (m *QueryAllBidsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllBids) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllBidsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllBids) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllBidsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllBids.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -410,19 +410,19 @@ func (m *QueryAllBidsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryAllBidsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllBidsRequest.Merge(m, src) +func (m *QueryAllBids) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllBids.Merge(m, src) } -func (m *QueryAllBidsRequest) XXX_Size() int { +func (m *QueryAllBids) XXX_Size() int { return m.Size() } -func (m *QueryAllBidsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllBidsRequest.DiscardUnknown(m) +func (m *QueryAllBids) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllBids.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllBidsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllBids proto.InternalMessageInfo -func (m *QueryAllBidsRequest) GetPagination() *query.PageRequest { +func (m *QueryAllBids) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -481,22 +481,22 @@ func (m *QueryAllBidsResponse) GetPagination() *query.PageResponse { return nil } -type QueryForSaleRequest struct { +type QueryForSale struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (m *QueryForSaleRequest) Reset() { *m = QueryForSaleRequest{} } -func (m *QueryForSaleRequest) String() string { return proto.CompactTextString(m) } -func (*QueryForSaleRequest) ProtoMessage() {} -func (*QueryForSaleRequest) Descriptor() ([]byte, []int) { +func (m *QueryForSale) Reset() { *m = QueryForSale{} } +func (m *QueryForSale) String() string { return proto.CompactTextString(m) } +func (*QueryForSale) ProtoMessage() {} +func (*QueryForSale) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{10} } -func (m *QueryForSaleRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryForSale) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryForSaleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryForSale) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryForSaleRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryForSale.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -506,19 +506,19 @@ func (m *QueryForSaleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryForSaleRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryForSaleRequest.Merge(m, src) +func (m *QueryForSale) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryForSale.Merge(m, src) } -func (m *QueryForSaleRequest) XXX_Size() int { +func (m *QueryForSale) XXX_Size() int { return m.Size() } -func (m *QueryForSaleRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryForSaleRequest.DiscardUnknown(m) +func (m *QueryForSale) XXX_DiscardUnknown() { + xxx_messageInfo_QueryForSale.DiscardUnknown(m) } -var xxx_messageInfo_QueryForSaleRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryForSale proto.InternalMessageInfo -func (m *QueryForSaleRequest) GetName() string { +func (m *QueryForSale) GetName() string { if m != nil { return m.Name } @@ -569,22 +569,22 @@ func (m *QueryForSaleResponse) GetForSale() Forsale { return Forsale{} } -type QueryAllForSaleRequest struct { +type QueryAllForSale struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllForSaleRequest) Reset() { *m = QueryAllForSaleRequest{} } -func (m *QueryAllForSaleRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllForSaleRequest) ProtoMessage() {} -func (*QueryAllForSaleRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllForSale) Reset() { *m = QueryAllForSale{} } +func (m *QueryAllForSale) String() string { return proto.CompactTextString(m) } +func (*QueryAllForSale) ProtoMessage() {} +func (*QueryAllForSale) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{12} } -func (m *QueryAllForSaleRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllForSale) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllForSaleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllForSale) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllForSaleRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllForSale.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -594,19 +594,19 @@ func (m *QueryAllForSaleRequest) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryAllForSaleRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllForSaleRequest.Merge(m, src) +func (m *QueryAllForSale) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllForSale.Merge(m, src) } -func (m *QueryAllForSaleRequest) XXX_Size() int { +func (m *QueryAllForSale) XXX_Size() int { return m.Size() } -func (m *QueryAllForSaleRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllForSaleRequest.DiscardUnknown(m) +func (m *QueryAllForSale) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllForSale.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllForSaleRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllForSale proto.InternalMessageInfo -func (m *QueryAllForSaleRequest) GetPagination() *query.PageRequest { +func (m *QueryAllForSale) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -665,22 +665,22 @@ func (m *QueryAllForSaleResponse) GetPagination() *query.PageResponse { return nil } -type QueryInitRequest struct { +type QueryInit struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryInitRequest) Reset() { *m = QueryInitRequest{} } -func (m *QueryInitRequest) String() string { return proto.CompactTextString(m) } -func (*QueryInitRequest) ProtoMessage() {} -func (*QueryInitRequest) Descriptor() ([]byte, []int) { +func (m *QueryInit) Reset() { *m = QueryInit{} } +func (m *QueryInit) String() string { return proto.CompactTextString(m) } +func (*QueryInit) ProtoMessage() {} +func (*QueryInit) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{14} } -func (m *QueryInitRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryInit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryInitRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryInit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryInitRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryInit.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -690,19 +690,19 @@ func (m *QueryInitRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return b[:n], nil } } -func (m *QueryInitRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryInitRequest.Merge(m, src) +func (m *QueryInit) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryInit.Merge(m, src) } -func (m *QueryInitRequest) XXX_Size() int { +func (m *QueryInit) XXX_Size() int { return m.Size() } -func (m *QueryInitRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryInitRequest.DiscardUnknown(m) +func (m *QueryInit) XXX_DiscardUnknown() { + xxx_messageInfo_QueryInit.DiscardUnknown(m) } -var xxx_messageInfo_QueryInitRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryInit proto.InternalMessageInfo -func (m *QueryInitRequest) GetAddress() string { +func (m *QueryInit) GetAddress() string { if m != nil { return m.Address } @@ -753,22 +753,22 @@ func (m *QueryInitResponse) GetInit() bool { return false } -type QueryAllInitsRequest struct { +type QueryAllInits struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllInitsRequest) Reset() { *m = QueryAllInitsRequest{} } -func (m *QueryAllInitsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllInitsRequest) ProtoMessage() {} -func (*QueryAllInitsRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllInits) Reset() { *m = QueryAllInits{} } +func (m *QueryAllInits) String() string { return proto.CompactTextString(m) } +func (*QueryAllInits) ProtoMessage() {} +func (*QueryAllInits) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{16} } -func (m *QueryAllInitsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllInits) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllInitsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllInits) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllInitsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllInits.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -778,19 +778,19 @@ func (m *QueryAllInitsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryAllInitsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllInitsRequest.Merge(m, src) +func (m *QueryAllInits) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllInits.Merge(m, src) } -func (m *QueryAllInitsRequest) XXX_Size() int { +func (m *QueryAllInits) XXX_Size() int { return m.Size() } -func (m *QueryAllInitsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllInitsRequest.DiscardUnknown(m) +func (m *QueryAllInits) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllInits.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllInitsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllInits proto.InternalMessageInfo -func (m *QueryAllInitsRequest) GetPagination() *query.PageRequest { +func (m *QueryAllInits) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -849,23 +849,23 @@ func (m *QueryAllInitsResponse) GetPagination() *query.PageResponse { return nil } -type QueryListOwnedNamesRequest struct { +type QueryListOwnedNames struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryListOwnedNamesRequest) Reset() { *m = QueryListOwnedNamesRequest{} } -func (m *QueryListOwnedNamesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryListOwnedNamesRequest) ProtoMessage() {} -func (*QueryListOwnedNamesRequest) Descriptor() ([]byte, []int) { +func (m *QueryListOwnedNames) Reset() { *m = QueryListOwnedNames{} } +func (m *QueryListOwnedNames) String() string { return proto.CompactTextString(m) } +func (*QueryListOwnedNames) ProtoMessage() {} +func (*QueryListOwnedNames) Descriptor() ([]byte, []int) { return fileDescriptor_8561b6b36d651aba, []int{18} } -func (m *QueryListOwnedNamesRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryListOwnedNames) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryListOwnedNamesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryListOwnedNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryListOwnedNamesRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryListOwnedNames.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -875,26 +875,26 @@ func (m *QueryListOwnedNamesRequest) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } -func (m *QueryListOwnedNamesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryListOwnedNamesRequest.Merge(m, src) +func (m *QueryListOwnedNames) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryListOwnedNames.Merge(m, src) } -func (m *QueryListOwnedNamesRequest) XXX_Size() int { +func (m *QueryListOwnedNames) XXX_Size() int { return m.Size() } -func (m *QueryListOwnedNamesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryListOwnedNamesRequest.DiscardUnknown(m) +func (m *QueryListOwnedNames) XXX_DiscardUnknown() { + xxx_messageInfo_QueryListOwnedNames.DiscardUnknown(m) } -var xxx_messageInfo_QueryListOwnedNamesRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryListOwnedNames proto.InternalMessageInfo -func (m *QueryListOwnedNamesRequest) GetAddress() string { +func (m *QueryListOwnedNames) GetAddress() string { if m != nil { return m.Address } return "" } -func (m *QueryListOwnedNamesRequest) GetPagination() *query.PageRequest { +func (m *QueryListOwnedNames) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -954,94 +954,92 @@ func (m *QueryListOwnedNamesResponse) GetPagination() *query.PageResponse { } func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.rns.QueryParamsRequest") + proto.RegisterType((*QueryParams)(nil), "canine_chain.rns.QueryParams") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.rns.QueryParamsResponse") - proto.RegisterType((*QueryNameRequest)(nil), "canine_chain.rns.QueryNameRequest") + proto.RegisterType((*QueryName)(nil), "canine_chain.rns.QueryName") proto.RegisterType((*QueryNameResponse)(nil), "canine_chain.rns.QueryNameResponse") - proto.RegisterType((*QueryAllNamesRequest)(nil), "canine_chain.rns.QueryAllNamesRequest") + proto.RegisterType((*QueryAllNames)(nil), "canine_chain.rns.QueryAllNames") proto.RegisterType((*QueryAllNamesResponse)(nil), "canine_chain.rns.QueryAllNamesResponse") - proto.RegisterType((*QueryBidRequest)(nil), "canine_chain.rns.QueryBidRequest") + proto.RegisterType((*QueryBid)(nil), "canine_chain.rns.QueryBid") proto.RegisterType((*QueryBidResponse)(nil), "canine_chain.rns.QueryBidResponse") - proto.RegisterType((*QueryAllBidsRequest)(nil), "canine_chain.rns.QueryAllBidsRequest") + proto.RegisterType((*QueryAllBids)(nil), "canine_chain.rns.QueryAllBids") proto.RegisterType((*QueryAllBidsResponse)(nil), "canine_chain.rns.QueryAllBidsResponse") - proto.RegisterType((*QueryForSaleRequest)(nil), "canine_chain.rns.QueryForSaleRequest") + proto.RegisterType((*QueryForSale)(nil), "canine_chain.rns.QueryForSale") proto.RegisterType((*QueryForSaleResponse)(nil), "canine_chain.rns.QueryForSaleResponse") - proto.RegisterType((*QueryAllForSaleRequest)(nil), "canine_chain.rns.QueryAllForSaleRequest") + proto.RegisterType((*QueryAllForSale)(nil), "canine_chain.rns.QueryAllForSale") proto.RegisterType((*QueryAllForSaleResponse)(nil), "canine_chain.rns.QueryAllForSaleResponse") - proto.RegisterType((*QueryInitRequest)(nil), "canine_chain.rns.QueryInitRequest") + proto.RegisterType((*QueryInit)(nil), "canine_chain.rns.QueryInit") proto.RegisterType((*QueryInitResponse)(nil), "canine_chain.rns.QueryInitResponse") - proto.RegisterType((*QueryAllInitsRequest)(nil), "canine_chain.rns.QueryAllInitsRequest") + proto.RegisterType((*QueryAllInits)(nil), "canine_chain.rns.QueryAllInits") proto.RegisterType((*QueryAllInitsResponse)(nil), "canine_chain.rns.QueryAllInitsResponse") - proto.RegisterType((*QueryListOwnedNamesRequest)(nil), "canine_chain.rns.QueryListOwnedNamesRequest") + proto.RegisterType((*QueryListOwnedNames)(nil), "canine_chain.rns.QueryListOwnedNames") proto.RegisterType((*QueryListOwnedNamesResponse)(nil), "canine_chain.rns.QueryListOwnedNamesResponse") } func init() { proto.RegisterFile("canine_chain/rns/query.proto", fileDescriptor_8561b6b36d651aba) } var fileDescriptor_8561b6b36d651aba = []byte{ - // 980 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x97, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xc7, 0xb3, 0x89, 0xf3, 0xa3, 0x0f, 0x09, 0xca, 0x10, 0xda, 0xb0, 0x6d, 0x37, 0xcd, 0x96, - 0xd8, 0x4e, 0xd5, 0xec, 0x36, 0x8d, 0xe0, 0x00, 0xa7, 0x5a, 0x28, 0x80, 0x54, 0xa0, 0x98, 0x1b, - 0x12, 0x84, 0xb1, 0x77, 0xe3, 0x0c, 0xac, 0x77, 0xdc, 0x9d, 0x0d, 0x6d, 0x15, 0xa5, 0x45, 0xe5, - 0x86, 0x38, 0x00, 0x3d, 0x22, 0xf1, 0x07, 0xf0, 0x97, 0xf4, 0x58, 0x89, 0x0b, 0x17, 0x10, 0x4a, - 0xf8, 0x43, 0xd0, 0xcc, 0xbc, 0x8d, 0xf7, 0x47, 0xc6, 0x36, 0x95, 0x6f, 0x76, 0xe6, 0x3b, 0xef, - 0xfb, 0x99, 0x37, 0x6f, 0xde, 0x8b, 0xe1, 0x72, 0x97, 0xc6, 0x2c, 0x0e, 0x77, 0xbb, 0xfb, 0x94, - 0xc5, 0x7e, 0x12, 0x0b, 0xff, 0xde, 0x41, 0x98, 0x3c, 0xf4, 0x06, 0x09, 0x4f, 0x39, 0x39, 0x9f, - 0x5f, 0xf5, 0x92, 0x58, 0xd8, 0xcb, 0x3d, 0xde, 0xe3, 0x6a, 0xd1, 0x97, 0x9f, 0xb4, 0xce, 0xbe, - 0xdc, 0xe3, 0xbc, 0x17, 0x85, 0x3e, 0x1d, 0x30, 0x9f, 0xc6, 0x31, 0x4f, 0x69, 0xca, 0x78, 0x2c, - 0x70, 0xf5, 0x7a, 0x97, 0x8b, 0x3e, 0x17, 0x7e, 0x87, 0x8a, 0x50, 0x87, 0xf7, 0xbf, 0xdd, 0xea, - 0x84, 0x29, 0xdd, 0xf2, 0x07, 0xb4, 0xc7, 0x62, 0x25, 0x46, 0xed, 0x95, 0x0a, 0xcf, 0x80, 0x26, - 0xb4, 0x9f, 0x85, 0xaa, 0xe2, 0xde, 0xdf, 0xe7, 0xcc, 0xbc, 0x1a, 0xd3, 0x7e, 0x98, 0xad, 0x5e, - 0xaa, 0xac, 0x76, 0x58, 0x90, 0x2d, 0x3a, 0x95, 0xc5, 0x3d, 0x9e, 0x08, 0x1a, 0x85, 0xc6, 0xcd, - 0x2c, 0x66, 0xa9, 0x5e, 0x74, 0x97, 0x81, 0x7c, 0x2a, 0x8f, 0x75, 0x57, 0xa1, 0xb6, 0xc3, 0x7b, - 0x07, 0xa1, 0x48, 0xdd, 0x8f, 0xe0, 0xb5, 0xc2, 0x5f, 0xc5, 0x80, 0xc7, 0x22, 0x24, 0x6f, 0xc3, - 0x82, 0x3e, 0xd2, 0x8a, 0x75, 0xd5, 0x6a, 0xbe, 0x74, 0x6b, 0xc5, 0x2b, 0x27, 0xd9, 0xd3, 0x3b, - 0x5a, 0xb5, 0x67, 0x7f, 0xaf, 0xce, 0xb4, 0x51, 0xed, 0x36, 0xe1, 0xbc, 0x0a, 0xf7, 0x31, 0xed, - 0x87, 0x68, 0x41, 0x96, 0x61, 0x9e, 0xc5, 0x41, 0xf8, 0x40, 0x85, 0x3a, 0xd7, 0xd6, 0x5f, 0xdc, - 0x1d, 0x78, 0x35, 0xa7, 0x44, 0xdb, 0x2d, 0xa8, 0xc9, 0x64, 0xa0, 0xe9, 0xc5, 0xaa, 0xa9, 0x54, - 0x67, 0x9e, 0x4a, 0xea, 0x7e, 0x09, 0xcb, 0x2a, 0xce, 0xed, 0x28, 0x52, 0x8b, 0x99, 0xeb, 0x0e, - 0xc0, 0xf0, 0xde, 0x30, 0x60, 0xdd, 0xd3, 0x97, 0xec, 0xc9, 0x4b, 0xf6, 0x74, 0x0d, 0xe1, 0x25, - 0x7b, 0x77, 0x69, 0x2f, 0x23, 0x6e, 0xe7, 0x76, 0xba, 0x4f, 0x2d, 0x78, 0xbd, 0x64, 0x50, 0x81, - 0x9d, 0x9b, 0x10, 0x96, 0xbc, 0x5f, 0x80, 0x9a, 0x55, 0x50, 0x8d, 0xb1, 0x50, 0xda, 0xaf, 0x40, - 0xd5, 0x80, 0x57, 0x14, 0x54, 0x8b, 0x05, 0xa3, 0xd3, 0xfc, 0x1e, 0x5e, 0x88, 0x12, 0x22, 0xf8, - 0x4d, 0xa8, 0xc9, 0xa2, 0xc2, 0xa4, 0x5c, 0xa8, 0x82, 0xb7, 0x58, 0x70, 0xca, 0x2d, 0x95, 0xee, - 0x17, 0x58, 0x25, 0xb7, 0xa3, 0x48, 0xae, 0x4d, 0x3b, 0xc7, 0x3f, 0x5b, 0xc3, 0x4b, 0xd4, 0xf1, - 0x2b, 0xa4, 0x73, 0x93, 0x91, 0x4e, 0x2f, 0xc3, 0x1b, 0x78, 0xe4, 0x1d, 0x9e, 0x7c, 0x46, 0xa3, - 0xd3, 0x62, 0x26, 0xb9, 0x0a, 0x3d, 0x87, 0x25, 0xd8, 0x46, 0xfa, 0x53, 0x29, 0xd2, 0xbf, 0x03, - 0x4b, 0x7b, 0x3c, 0xd9, 0x95, 0x0f, 0x14, 0x93, 0xf3, 0x46, 0xf5, 0x04, 0x3b, 0xfa, 0x05, 0xe3, - 0x21, 0x16, 0xf7, 0x74, 0x0c, 0xf7, 0x2b, 0xb8, 0x90, 0x65, 0xa4, 0x44, 0x30, 0xad, 0xa4, 0xff, - 0x66, 0xc1, 0xc5, 0x8a, 0xc5, 0x99, 0xe4, 0x73, 0xff, 0x87, 0x7c, 0x7a, 0x37, 0x70, 0x03, 0x4b, - 0xf7, 0xc3, 0x98, 0xa5, 0xd9, 0xe1, 0x57, 0x60, 0x91, 0x06, 0x41, 0x12, 0x0a, 0x81, 0x37, 0x90, - 0x7d, 0x75, 0x1b, 0xd8, 0x4f, 0xb4, 0x1a, 0xcf, 0x41, 0xa0, 0x26, 0x3b, 0xa0, 0xd2, 0x2e, 0xb5, - 0xd5, 0xe7, 0x7c, 0xc3, 0x90, 0xda, 0xa9, 0x17, 0xf3, 0x2f, 0xb9, 0x86, 0x81, 0x06, 0xc3, 0x6a, - 0x46, 0x1a, 0x43, 0x35, 0x4b, 0x79, 0x56, 0xcd, 0x52, 0x39, 0xbd, 0x5c, 0x3e, 0x02, 0x5b, 0x31, - 0xdd, 0x61, 0x22, 0xfd, 0xe4, 0x7e, 0x1c, 0x06, 0x85, 0x5e, 0x69, 0xcc, 0x6a, 0x29, 0x29, 0xb3, - 0x2f, 0x9c, 0x94, 0x5f, 0x2d, 0xb8, 0x74, 0x26, 0x00, 0xa6, 0x66, 0x1b, 0xe6, 0xd5, 0x14, 0x9c, - 0xac, 0x99, 0x6a, 0xed, 0xd4, 0xb2, 0x73, 0xeb, 0x2f, 0x80, 0x79, 0x45, 0x47, 0x1e, 0xc1, 0x82, - 0x9e, 0x6b, 0xe4, 0xcd, 0x2a, 0x42, 0x75, 0x7c, 0xda, 0xeb, 0x63, 0x54, 0xda, 0xcc, 0x6d, 0x3c, - 0xf9, 0xe3, 0xdf, 0xa7, 0xb3, 0x6b, 0x64, 0xd5, 0xff, 0x9a, 0x76, 0xbf, 0xa1, 0x91, 0xaf, 0x77, - 0x6d, 0x96, 0xff, 0x81, 0x20, 0x8f, 0xa1, 0x26, 0x0f, 0x4a, 0x5c, 0x43, 0xdc, 0xdc, 0x5c, 0xb5, - 0xaf, 0x8d, 0xd4, 0xa0, 0xb3, 0xa7, 0x9c, 0x9b, 0xa4, 0x6e, 0x74, 0x56, 0xb9, 0xf4, 0x0f, 0xd5, - 0xb8, 0x38, 0x22, 0xdf, 0x5b, 0xb0, 0x94, 0x4d, 0x3a, 0x52, 0x37, 0x38, 0x94, 0x66, 0xad, 0xdd, - 0x18, 0xab, 0x43, 0x9a, 0xba, 0xa2, 0xb9, 0x4a, 0x9c, 0xd1, 0x34, 0xe4, 0x10, 0xe6, 0x5a, 0x2c, - 0x20, 0x6b, 0x86, 0xb8, 0xc3, 0xa9, 0x67, 0xbb, 0xa3, 0x24, 0xe8, 0xba, 0xa9, 0x5c, 0x1b, 0x64, - 0xdd, 0xe8, 0x2a, 0x47, 0xc7, 0x69, 0x0a, 0x1e, 0xc3, 0x22, 0xce, 0x21, 0xb2, 0x6e, 0x3e, 0x58, - 0x6e, 0x0e, 0xda, 0xf5, 0x71, 0x32, 0x04, 0x59, 0x57, 0x20, 0xab, 0xe4, 0xca, 0x48, 0x10, 0xf2, - 0x83, 0x05, 0x8b, 0xd8, 0x91, 0x8d, 0x04, 0xc5, 0xa1, 0x60, 0x24, 0x28, 0x35, 0x76, 0xf7, 0xa6, - 0x22, 0xb8, 0x4e, 0x9a, 0x46, 0x82, 0xac, 0xef, 0xfb, 0x87, 0xf2, 0x2a, 0x8e, 0xc8, 0x8f, 0x16, - 0xc0, 0x70, 0x42, 0x90, 0xa6, 0xf9, 0xa8, 0x25, 0xa4, 0x8d, 0x09, 0x94, 0x48, 0xb5, 0xa1, 0xa8, - 0xae, 0x91, 0xb5, 0xb1, 0x54, 0xe4, 0x3b, 0x0b, 0x6a, 0xb2, 0x4d, 0x1a, 0x5f, 0x48, 0x6e, 0x5a, - 0x18, 0x5f, 0x48, 0x7e, 0x46, 0xb8, 0xbe, 0x32, 0xdf, 0x20, 0x0d, 0xa3, 0xb9, 0x6c, 0xc5, 0xfe, - 0x21, 0xb6, 0xc4, 0x23, 0xf2, 0x44, 0x3f, 0x11, 0xd5, 0xdb, 0x47, 0x3d, 0x91, 0xfc, 0x74, 0x19, - 0xf5, 0x44, 0x0a, 0x43, 0x62, 0x82, 0x1a, 0x51, 0x93, 0xe1, 0x77, 0x0b, 0x5e, 0x2e, 0xf6, 0x52, - 0x72, 0xc3, 0x60, 0x71, 0x66, 0xcf, 0xb7, 0x37, 0x27, 0x54, 0x23, 0xd6, 0xbb, 0x0a, 0xeb, 0x2d, - 0xb2, 0x6d, 0xc4, 0x8a, 0x98, 0x48, 0x77, 0xb9, 0xdc, 0xb9, 0x8b, 0x2d, 0x25, 0xcb, 0x58, 0xeb, - 0x83, 0x67, 0xc7, 0x8e, 0xf5, 0xfc, 0xd8, 0xb1, 0xfe, 0x39, 0x76, 0xac, 0x9f, 0x4e, 0x9c, 0x99, - 0xe7, 0x27, 0xce, 0xcc, 0x9f, 0x27, 0xce, 0xcc, 0xe7, 0x5e, 0x8f, 0xa5, 0xfb, 0x07, 0x1d, 0xaf, - 0xcb, 0xfb, 0x18, 0xf8, 0x0e, 0xed, 0x88, 0x62, 0xf0, 0x07, 0x2a, 0x7c, 0xfa, 0x70, 0x10, 0x8a, - 0xce, 0x82, 0xfa, 0x2d, 0xb3, 0xfd, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x20, 0xf2, 0x24, 0x56, - 0x12, 0x0e, 0x00, 0x00, + // 951 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x4f, 0x24, 0x45, + 0x18, 0xa5, 0x61, 0xf8, 0xf5, 0xad, 0xab, 0x6b, 0x89, 0x2e, 0x36, 0x4b, 0x03, 0xbd, 0x81, 0x81, + 0x4d, 0xe8, 0x5e, 0x96, 0xe8, 0x41, 0x4f, 0x4e, 0x0c, 0x6a, 0xb2, 0xea, 0x3a, 0x26, 0x1a, 0xbd, + 0x90, 0x9a, 0x99, 0x62, 0x28, 0x9d, 0xe9, 0x9a, 0xed, 0x6a, 0x04, 0x82, 0x5c, 0x34, 0xde, 0xd5, + 0xf5, 0x66, 0xe2, 0xc5, 0x7f, 0x66, 0x8f, 0x9b, 0x78, 0xf1, 0x64, 0x0c, 0xf8, 0x87, 0x98, 0xfa, + 0xaa, 0xaa, 0xed, 0x99, 0xa6, 0x86, 0x71, 0x33, 0x37, 0x3a, 0xef, 0xf5, 0xf7, 0x5e, 0xbd, 0xfe, + 0xe6, 0x55, 0x80, 0x3b, 0x4d, 0x9a, 0xf0, 0x84, 0xed, 0x37, 0x0f, 0x29, 0x4f, 0xe2, 0x34, 0x91, + 0xf1, 0xe3, 0x23, 0x96, 0x9e, 0x46, 0xbd, 0x54, 0x64, 0x82, 0xdc, 0x2a, 0xa2, 0x51, 0x9a, 0x48, + 0x7f, 0xa1, 0x2d, 0xda, 0x02, 0xc1, 0x58, 0xfd, 0xa5, 0x79, 0xfe, 0x9d, 0xb6, 0x10, 0xed, 0x0e, + 0x8b, 0x69, 0x8f, 0xc7, 0x34, 0x49, 0x44, 0x46, 0x33, 0x2e, 0x12, 0x69, 0xd0, 0x7b, 0x4d, 0x21, + 0xbb, 0x42, 0xc6, 0x0d, 0x2a, 0x99, 0x1e, 0x1f, 0x7f, 0xb3, 0xd3, 0x60, 0x19, 0xdd, 0x89, 0x7b, + 0xb4, 0xcd, 0x13, 0x24, 0x1b, 0xee, 0x72, 0xc9, 0x4f, 0x8f, 0xa6, 0xb4, 0x6b, 0x47, 0x95, 0xed, + 0x1e, 0x1f, 0x0a, 0xee, 0x46, 0x13, 0xda, 0x65, 0x16, 0x5d, 0x2a, 0xa1, 0x0d, 0xde, 0xb2, 0x60, + 0x50, 0x02, 0x0f, 0x44, 0x2a, 0x69, 0x87, 0x39, 0x5f, 0xe6, 0x09, 0xcf, 0x34, 0x18, 0xde, 0x84, + 0x1b, 0x9f, 0xa8, 0x63, 0x3d, 0x42, 0xab, 0xe1, 0x87, 0xf0, 0x4a, 0xe1, 0xb1, 0xce, 0x64, 0x4f, + 0x24, 0x92, 0x91, 0x37, 0x61, 0x46, 0x9f, 0x65, 0xd1, 0x5b, 0xf5, 0x36, 0x6f, 0x3c, 0x58, 0x8c, + 0x06, 0xd3, 0x8d, 0xf4, 0x1b, 0xb5, 0xca, 0xd3, 0xbf, 0x56, 0x26, 0xea, 0x86, 0x1d, 0xae, 0xc1, + 0x3c, 0x8e, 0xfb, 0x88, 0x76, 0x19, 0x59, 0x80, 0x69, 0x9e, 0xb4, 0xd8, 0x09, 0xce, 0x98, 0xaf, + 0xeb, 0x87, 0x70, 0x0f, 0x5e, 0xce, 0x29, 0xb9, 0xde, 0x0e, 0x54, 0xd4, 0xf1, 0x8d, 0xda, 0xed, + 0xb2, 0x9a, 0x62, 0x5b, 0x31, 0xa4, 0x86, 0x9f, 0xc3, 0x4d, 0x9c, 0xf3, 0x4e, 0xa7, 0x83, 0x20, + 0xd9, 0x03, 0xf8, 0xef, 0x13, 0x99, 0x49, 0x1b, 0x91, 0xfe, 0x9e, 0x91, 0xfa, 0x9e, 0x91, 0x5e, + 0x17, 0xf3, 0x3d, 0xa3, 0x47, 0xb4, 0xcd, 0xea, 0xec, 0xf1, 0x11, 0x93, 0x59, 0xbd, 0xf0, 0x66, + 0xf8, 0xc4, 0x83, 0x57, 0xfb, 0x26, 0x5f, 0xe1, 0x72, 0x6a, 0x44, 0x97, 0xe4, 0xbd, 0x3e, 0x53, + 0x93, 0x68, 0xaa, 0x7a, 0xad, 0x29, 0xad, 0xd7, 0xe7, 0x6a, 0x15, 0xe6, 0xd0, 0x54, 0x8d, 0xb7, + 0x1c, 0xc1, 0xbe, 0x0b, 0xb7, 0x2c, 0x23, 0x77, 0x7c, 0x1f, 0x2a, 0x6a, 0x71, 0x4c, 0x1a, 0xaf, + 0x95, 0x1d, 0xd7, 0x78, 0x2b, 0x37, 0xac, 0x98, 0xe1, 0x67, 0xf0, 0x82, 0x3d, 0xbc, 0xc2, 0xc6, + 0x96, 0xea, 0x4f, 0x1e, 0x2c, 0x14, 0x07, 0x5f, 0x61, 0x71, 0x6a, 0x34, 0x8b, 0xe3, 0xcb, 0x34, + 0x34, 0x67, 0xdd, 0x13, 0xe9, 0xa7, 0xb4, 0xc3, 0x08, 0x29, 0x6c, 0xe1, 0xbc, 0x59, 0xb3, 0xba, + 0xb1, 0x6d, 0x38, 0xb9, 0xed, 0xb7, 0x60, 0xee, 0x40, 0xa4, 0xfb, 0xea, 0x67, 0x67, 0x52, 0x79, + 0xbd, 0x6c, 0x7d, 0x4f, 0xff, 0x2e, 0x8d, 0xfb, 0xd9, 0x03, 0x3d, 0x23, 0xfc, 0x02, 0x5e, 0xb2, + 0x51, 0x58, 0xe9, 0x71, 0xc5, 0xfc, 0x9b, 0x07, 0xb7, 0x07, 0x66, 0x3b, 0x2c, 0x4f, 0xfd, 0x1f, + 0xcb, 0xe3, 0xcb, 0x7c, 0xdd, 0x34, 0xc4, 0x07, 0x09, 0xcf, 0xc8, 0x22, 0xcc, 0xd2, 0x56, 0x2b, + 0x65, 0x52, 0x9a, 0xcc, 0xed, 0x63, 0x58, 0x35, 0x2d, 0xa1, 0x68, 0xf9, 0x01, 0x08, 0x54, 0x54, + 0x93, 0x21, 0x77, 0xae, 0x8e, 0x7f, 0x17, 0x6b, 0x40, 0x71, 0xc7, 0xb7, 0xb0, 0x3f, 0x17, 0x6a, + 0x00, 0x27, 0x17, 0x37, 0xd6, 0xd8, 0x70, 0x6c, 0xac, 0xa2, 0xdb, 0x8d, 0x55, 0xcc, 0xf1, 0xa5, + 0x77, 0x6c, 0xea, 0xfa, 0x21, 0x97, 0xd9, 0xc7, 0xc7, 0x09, 0x6b, 0xe9, 0xea, 0x73, 0xe6, 0x38, + 0x90, 0xc6, 0xe4, 0x73, 0xa7, 0xf1, 0xab, 0x07, 0x4b, 0x57, 0x28, 0xe7, 0x99, 0xec, 0xc2, 0x34, + 0xde, 0x5f, 0xa3, 0x75, 0xa3, 0xe6, 0x8e, 0x2d, 0x96, 0x07, 0xbf, 0x00, 0x4c, 0xa3, 0x3b, 0x72, + 0x0c, 0x33, 0xfa, 0x62, 0x22, 0xcb, 0x65, 0x0b, 0x85, 0x9b, 0xce, 0x5f, 0x1f, 0x0a, 0x5b, 0x95, + 0xb0, 0xfa, 0xdd, 0x1f, 0xff, 0x3c, 0x99, 0x5c, 0x23, 0x2b, 0xf1, 0x57, 0xb4, 0xf9, 0x35, 0xed, + 0xc4, 0xfa, 0xad, 0xed, 0xc1, 0x3b, 0x9f, 0x9c, 0x40, 0x05, 0x2f, 0xbd, 0x25, 0xc7, 0x5c, 0x05, + 0xfa, 0x77, 0x87, 0x80, 0xb9, 0x64, 0x84, 0x92, 0x9b, 0x64, 0xc3, 0x29, 0x89, 0xe9, 0xc5, 0x67, + 0x58, 0xfb, 0xe7, 0xe4, 0x5b, 0x98, 0xcb, 0xef, 0xc0, 0x15, 0x87, 0x80, 0x25, 0xf8, 0xd5, 0x6b, + 0x08, 0xb9, 0x8b, 0x0d, 0x74, 0xb1, 0x4a, 0x82, 0xe1, 0x2e, 0x48, 0x06, 0x53, 0xea, 0x4a, 0xf2, + 0x1d, 0x73, 0x6b, 0xbc, 0xe5, 0x87, 0x6e, 0x2c, 0x97, 0xdb, 0x46, 0xb9, 0x2a, 0x59, 0x77, 0xca, + 0xa9, 0xea, 0xcf, 0xcf, 0x7c, 0x02, 0xb3, 0xf6, 0x82, 0x0a, 0xdc, 0x27, 0x52, 0xb8, 0xbf, 0x31, + 0x1c, 0xcf, 0x1d, 0xac, 0xa3, 0x83, 0x15, 0xb2, 0x3c, 0xd4, 0x01, 0xf9, 0xde, 0x83, 0x59, 0x5b, + 0xda, 0x2e, 0x69, 0x83, 0x3b, 0xa5, 0x07, 0x8a, 0x39, 0xbc, 0x8f, 0xd2, 0xf7, 0xc8, 0xa6, 0x53, + 0xda, 0xf6, 0x76, 0x7c, 0xa6, 0x52, 0x3f, 0x27, 0x3f, 0x78, 0x00, 0x85, 0xdb, 0x63, 0xcd, 0x7d, + 0x46, 0xeb, 0x65, 0xeb, 0x5a, 0x4a, 0x6e, 0x67, 0x0b, 0xed, 0xdc, 0x25, 0x6b, 0xd7, 0xda, 0x21, + 0xa7, 0x50, 0xc1, 0x22, 0x77, 0x6d, 0xbd, 0x02, 0x9d, 0x5b, 0x5f, 0xec, 0xf6, 0x30, 0x46, 0xd1, + 0x2d, 0x52, 0x75, 0x8a, 0xaa, 0x26, 0x8d, 0xcf, 0x4c, 0xb1, 0x9d, 0x93, 0x33, 0x5c, 0x7b, 0xdd, + 0xf9, 0x43, 0xd6, 0x1e, 0x09, 0xc3, 0xd6, 0xbe, 0xaf, 0xdb, 0x47, 0xd8, 0x02, 0x2c, 0xf4, 0xdf, + 0x3d, 0x78, 0x71, 0xa0, 0x83, 0x5d, 0x85, 0xd2, 0x4f, 0xf3, 0xb7, 0x47, 0xa2, 0xe5, 0x7e, 0xde, + 0x46, 0x3f, 0x6f, 0x90, 0x5d, 0xa7, 0x9f, 0x0e, 0x97, 0xd9, 0xbe, 0x50, 0x6f, 0xee, 0x9b, 0x5e, + 0xb0, 0x11, 0xd5, 0xde, 0x7f, 0x7a, 0x11, 0x78, 0xcf, 0x2e, 0x02, 0xef, 0xef, 0x8b, 0xc0, 0xfb, + 0xf1, 0x32, 0x98, 0x78, 0x76, 0x19, 0x4c, 0xfc, 0x79, 0x19, 0x4c, 0x7c, 0x19, 0xb5, 0x79, 0x76, + 0x78, 0xd4, 0x88, 0x9a, 0xa2, 0x6b, 0x06, 0x3f, 0xa4, 0x0d, 0xd9, 0x3f, 0xfc, 0x04, 0xc7, 0x67, + 0xa7, 0x3d, 0x26, 0x1b, 0x33, 0xf8, 0xcf, 0xc3, 0xee, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5f, + 0x1a, 0x6c, 0x79, 0x83, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1057,25 +1055,25 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { // Parameters queries the parameters of the module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) // Queries a Name by index. - Name(ctx context.Context, in *QueryNameRequest, opts ...grpc.CallOption) (*QueryNameResponse, error) + Name(ctx context.Context, in *QueryName, opts ...grpc.CallOption) (*QueryNameResponse, error) // Queries a list of Names. - AllNames(ctx context.Context, in *QueryAllNamesRequest, opts ...grpc.CallOption) (*QueryAllNamesResponse, error) + AllNames(ctx context.Context, in *QueryAllNames, opts ...grpc.CallOption) (*QueryAllNamesResponse, error) // Queries a Bid by index. - Bid(ctx context.Context, in *QueryBidRequest, opts ...grpc.CallOption) (*QueryBidResponse, error) + Bid(ctx context.Context, in *QueryBid, opts ...grpc.CallOption) (*QueryBidResponse, error) // Queries a list of Bids. - AllBids(ctx context.Context, in *QueryAllBidsRequest, opts ...grpc.CallOption) (*QueryAllBidsResponse, error) + AllBids(ctx context.Context, in *QueryAllBids, opts ...grpc.CallOption) (*QueryAllBidsResponse, error) // Queries a Listing by index. - ForSale(ctx context.Context, in *QueryForSaleRequest, opts ...grpc.CallOption) (*QueryForSaleResponse, error) + ForSale(ctx context.Context, in *QueryForSale, opts ...grpc.CallOption) (*QueryForSaleResponse, error) // Queries all Listings. - AllForSale(ctx context.Context, in *QueryAllForSaleRequest, opts ...grpc.CallOption) (*QueryAllForSaleResponse, error) + AllForSale(ctx context.Context, in *QueryAllForSale, opts ...grpc.CallOption) (*QueryAllForSaleResponse, error) // Queries a Init by index. - Init(ctx context.Context, in *QueryInitRequest, opts ...grpc.CallOption) (*QueryInitResponse, error) + Init(ctx context.Context, in *QueryInit, opts ...grpc.CallOption) (*QueryInitResponse, error) // Queries a list of Init items. - AllInits(ctx context.Context, in *QueryAllInitsRequest, opts ...grpc.CallOption) (*QueryAllInitsResponse, error) + AllInits(ctx context.Context, in *QueryAllInits, opts ...grpc.CallOption) (*QueryAllInitsResponse, error) // Queries a list of ListOwnedNames items. - ListOwnedNames(ctx context.Context, in *QueryListOwnedNamesRequest, opts ...grpc.CallOption) (*QueryListOwnedNamesResponse, error) + ListOwnedNames(ctx context.Context, in *QueryListOwnedNames, opts ...grpc.CallOption) (*QueryListOwnedNamesResponse, error) } type queryClient struct { @@ -1086,7 +1084,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { +func (c *queryClient) Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/Params", in, out, opts...) if err != nil { @@ -1095,7 +1093,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } -func (c *queryClient) Name(ctx context.Context, in *QueryNameRequest, opts ...grpc.CallOption) (*QueryNameResponse, error) { +func (c *queryClient) Name(ctx context.Context, in *QueryName, opts ...grpc.CallOption) (*QueryNameResponse, error) { out := new(QueryNameResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/Name", in, out, opts...) if err != nil { @@ -1104,7 +1102,7 @@ func (c *queryClient) Name(ctx context.Context, in *QueryNameRequest, opts ...gr return out, nil } -func (c *queryClient) AllNames(ctx context.Context, in *QueryAllNamesRequest, opts ...grpc.CallOption) (*QueryAllNamesResponse, error) { +func (c *queryClient) AllNames(ctx context.Context, in *QueryAllNames, opts ...grpc.CallOption) (*QueryAllNamesResponse, error) { out := new(QueryAllNamesResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/AllNames", in, out, opts...) if err != nil { @@ -1113,7 +1111,7 @@ func (c *queryClient) AllNames(ctx context.Context, in *QueryAllNamesRequest, op return out, nil } -func (c *queryClient) Bid(ctx context.Context, in *QueryBidRequest, opts ...grpc.CallOption) (*QueryBidResponse, error) { +func (c *queryClient) Bid(ctx context.Context, in *QueryBid, opts ...grpc.CallOption) (*QueryBidResponse, error) { out := new(QueryBidResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/Bid", in, out, opts...) if err != nil { @@ -1122,7 +1120,7 @@ func (c *queryClient) Bid(ctx context.Context, in *QueryBidRequest, opts ...grpc return out, nil } -func (c *queryClient) AllBids(ctx context.Context, in *QueryAllBidsRequest, opts ...grpc.CallOption) (*QueryAllBidsResponse, error) { +func (c *queryClient) AllBids(ctx context.Context, in *QueryAllBids, opts ...grpc.CallOption) (*QueryAllBidsResponse, error) { out := new(QueryAllBidsResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/AllBids", in, out, opts...) if err != nil { @@ -1131,7 +1129,7 @@ func (c *queryClient) AllBids(ctx context.Context, in *QueryAllBidsRequest, opts return out, nil } -func (c *queryClient) ForSale(ctx context.Context, in *QueryForSaleRequest, opts ...grpc.CallOption) (*QueryForSaleResponse, error) { +func (c *queryClient) ForSale(ctx context.Context, in *QueryForSale, opts ...grpc.CallOption) (*QueryForSaleResponse, error) { out := new(QueryForSaleResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/ForSale", in, out, opts...) if err != nil { @@ -1140,7 +1138,7 @@ func (c *queryClient) ForSale(ctx context.Context, in *QueryForSaleRequest, opts return out, nil } -func (c *queryClient) AllForSale(ctx context.Context, in *QueryAllForSaleRequest, opts ...grpc.CallOption) (*QueryAllForSaleResponse, error) { +func (c *queryClient) AllForSale(ctx context.Context, in *QueryAllForSale, opts ...grpc.CallOption) (*QueryAllForSaleResponse, error) { out := new(QueryAllForSaleResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/AllForSale", in, out, opts...) if err != nil { @@ -1149,7 +1147,7 @@ func (c *queryClient) AllForSale(ctx context.Context, in *QueryAllForSaleRequest return out, nil } -func (c *queryClient) Init(ctx context.Context, in *QueryInitRequest, opts ...grpc.CallOption) (*QueryInitResponse, error) { +func (c *queryClient) Init(ctx context.Context, in *QueryInit, opts ...grpc.CallOption) (*QueryInitResponse, error) { out := new(QueryInitResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/Init", in, out, opts...) if err != nil { @@ -1158,7 +1156,7 @@ func (c *queryClient) Init(ctx context.Context, in *QueryInitRequest, opts ...gr return out, nil } -func (c *queryClient) AllInits(ctx context.Context, in *QueryAllInitsRequest, opts ...grpc.CallOption) (*QueryAllInitsResponse, error) { +func (c *queryClient) AllInits(ctx context.Context, in *QueryAllInits, opts ...grpc.CallOption) (*QueryAllInitsResponse, error) { out := new(QueryAllInitsResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/AllInits", in, out, opts...) if err != nil { @@ -1167,7 +1165,7 @@ func (c *queryClient) AllInits(ctx context.Context, in *QueryAllInitsRequest, op return out, nil } -func (c *queryClient) ListOwnedNames(ctx context.Context, in *QueryListOwnedNamesRequest, opts ...grpc.CallOption) (*QueryListOwnedNamesResponse, error) { +func (c *queryClient) ListOwnedNames(ctx context.Context, in *QueryListOwnedNames, opts ...grpc.CallOption) (*QueryListOwnedNamesResponse, error) { out := new(QueryListOwnedNamesResponse) err := c.cc.Invoke(ctx, "/canine_chain.rns.Query/ListOwnedNames", in, out, opts...) if err != nil { @@ -1179,59 +1177,59 @@ func (c *queryClient) ListOwnedNames(ctx context.Context, in *QueryListOwnedName // QueryServer is the server API for Query service. type QueryServer interface { // Parameters queries the parameters of the module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + Params(context.Context, *QueryParams) (*QueryParamsResponse, error) // Queries a Name by index. - Name(context.Context, *QueryNameRequest) (*QueryNameResponse, error) + Name(context.Context, *QueryName) (*QueryNameResponse, error) // Queries a list of Names. - AllNames(context.Context, *QueryAllNamesRequest) (*QueryAllNamesResponse, error) + AllNames(context.Context, *QueryAllNames) (*QueryAllNamesResponse, error) // Queries a Bid by index. - Bid(context.Context, *QueryBidRequest) (*QueryBidResponse, error) + Bid(context.Context, *QueryBid) (*QueryBidResponse, error) // Queries a list of Bids. - AllBids(context.Context, *QueryAllBidsRequest) (*QueryAllBidsResponse, error) + AllBids(context.Context, *QueryAllBids) (*QueryAllBidsResponse, error) // Queries a Listing by index. - ForSale(context.Context, *QueryForSaleRequest) (*QueryForSaleResponse, error) + ForSale(context.Context, *QueryForSale) (*QueryForSaleResponse, error) // Queries all Listings. - AllForSale(context.Context, *QueryAllForSaleRequest) (*QueryAllForSaleResponse, error) + AllForSale(context.Context, *QueryAllForSale) (*QueryAllForSaleResponse, error) // Queries a Init by index. - Init(context.Context, *QueryInitRequest) (*QueryInitResponse, error) + Init(context.Context, *QueryInit) (*QueryInitResponse, error) // Queries a list of Init items. - AllInits(context.Context, *QueryAllInitsRequest) (*QueryAllInitsResponse, error) + AllInits(context.Context, *QueryAllInits) (*QueryAllInitsResponse, error) // Queries a list of ListOwnedNames items. - ListOwnedNames(context.Context, *QueryListOwnedNamesRequest) (*QueryListOwnedNamesResponse, error) + ListOwnedNames(context.Context, *QueryListOwnedNames) (*QueryListOwnedNamesResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParams) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) Name(ctx context.Context, req *QueryNameRequest) (*QueryNameResponse, error) { +func (*UnimplementedQueryServer) Name(ctx context.Context, req *QueryName) (*QueryNameResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Name not implemented") } -func (*UnimplementedQueryServer) AllNames(ctx context.Context, req *QueryAllNamesRequest) (*QueryAllNamesResponse, error) { +func (*UnimplementedQueryServer) AllNames(ctx context.Context, req *QueryAllNames) (*QueryAllNamesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllNames not implemented") } -func (*UnimplementedQueryServer) Bid(ctx context.Context, req *QueryBidRequest) (*QueryBidResponse, error) { +func (*UnimplementedQueryServer) Bid(ctx context.Context, req *QueryBid) (*QueryBidResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Bid not implemented") } -func (*UnimplementedQueryServer) AllBids(ctx context.Context, req *QueryAllBidsRequest) (*QueryAllBidsResponse, error) { +func (*UnimplementedQueryServer) AllBids(ctx context.Context, req *QueryAllBids) (*QueryAllBidsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllBids not implemented") } -func (*UnimplementedQueryServer) ForSale(ctx context.Context, req *QueryForSaleRequest) (*QueryForSaleResponse, error) { +func (*UnimplementedQueryServer) ForSale(ctx context.Context, req *QueryForSale) (*QueryForSaleResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ForSale not implemented") } -func (*UnimplementedQueryServer) AllForSale(ctx context.Context, req *QueryAllForSaleRequest) (*QueryAllForSaleResponse, error) { +func (*UnimplementedQueryServer) AllForSale(ctx context.Context, req *QueryAllForSale) (*QueryAllForSaleResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllForSale not implemented") } -func (*UnimplementedQueryServer) Init(ctx context.Context, req *QueryInitRequest) (*QueryInitResponse, error) { +func (*UnimplementedQueryServer) Init(ctx context.Context, req *QueryInit) (*QueryInitResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Init not implemented") } -func (*UnimplementedQueryServer) AllInits(ctx context.Context, req *QueryAllInitsRequest) (*QueryAllInitsResponse, error) { +func (*UnimplementedQueryServer) AllInits(ctx context.Context, req *QueryAllInits) (*QueryAllInitsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllInits not implemented") } -func (*UnimplementedQueryServer) ListOwnedNames(ctx context.Context, req *QueryListOwnedNamesRequest) (*QueryListOwnedNamesResponse, error) { +func (*UnimplementedQueryServer) ListOwnedNames(ctx context.Context, req *QueryListOwnedNames) (*QueryListOwnedNamesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListOwnedNames not implemented") } @@ -1240,7 +1238,7 @@ func RegisterQueryServer(s grpc1.Server, srv QueryServer) { } func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) + in := new(QueryParams) if err := dec(in); err != nil { return nil, err } @@ -1252,13 +1250,13 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf FullMethod: "/canine_chain.rns.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParams)) } return interceptor(ctx, in, info, handler) } func _Query_Name_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryNameRequest) + in := new(QueryName) if err := dec(in); err != nil { return nil, err } @@ -1270,13 +1268,13 @@ func _Query_Name_Handler(srv interface{}, ctx context.Context, dec func(interfac FullMethod: "/canine_chain.rns.Query/Name", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Name(ctx, req.(*QueryNameRequest)) + return srv.(QueryServer).Name(ctx, req.(*QueryName)) } return interceptor(ctx, in, info, handler) } func _Query_AllNames_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllNamesRequest) + in := new(QueryAllNames) if err := dec(in); err != nil { return nil, err } @@ -1288,13 +1286,13 @@ func _Query_AllNames_Handler(srv interface{}, ctx context.Context, dec func(inte FullMethod: "/canine_chain.rns.Query/AllNames", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllNames(ctx, req.(*QueryAllNamesRequest)) + return srv.(QueryServer).AllNames(ctx, req.(*QueryAllNames)) } return interceptor(ctx, in, info, handler) } func _Query_Bid_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryBidRequest) + in := new(QueryBid) if err := dec(in); err != nil { return nil, err } @@ -1306,13 +1304,13 @@ func _Query_Bid_Handler(srv interface{}, ctx context.Context, dec func(interface FullMethod: "/canine_chain.rns.Query/Bid", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Bid(ctx, req.(*QueryBidRequest)) + return srv.(QueryServer).Bid(ctx, req.(*QueryBid)) } return interceptor(ctx, in, info, handler) } func _Query_AllBids_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllBidsRequest) + in := new(QueryAllBids) if err := dec(in); err != nil { return nil, err } @@ -1324,13 +1322,13 @@ func _Query_AllBids_Handler(srv interface{}, ctx context.Context, dec func(inter FullMethod: "/canine_chain.rns.Query/AllBids", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllBids(ctx, req.(*QueryAllBidsRequest)) + return srv.(QueryServer).AllBids(ctx, req.(*QueryAllBids)) } return interceptor(ctx, in, info, handler) } func _Query_ForSale_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryForSaleRequest) + in := new(QueryForSale) if err := dec(in); err != nil { return nil, err } @@ -1342,13 +1340,13 @@ func _Query_ForSale_Handler(srv interface{}, ctx context.Context, dec func(inter FullMethod: "/canine_chain.rns.Query/ForSale", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ForSale(ctx, req.(*QueryForSaleRequest)) + return srv.(QueryServer).ForSale(ctx, req.(*QueryForSale)) } return interceptor(ctx, in, info, handler) } func _Query_AllForSale_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllForSaleRequest) + in := new(QueryAllForSale) if err := dec(in); err != nil { return nil, err } @@ -1360,13 +1358,13 @@ func _Query_AllForSale_Handler(srv interface{}, ctx context.Context, dec func(in FullMethod: "/canine_chain.rns.Query/AllForSale", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllForSale(ctx, req.(*QueryAllForSaleRequest)) + return srv.(QueryServer).AllForSale(ctx, req.(*QueryAllForSale)) } return interceptor(ctx, in, info, handler) } func _Query_Init_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryInitRequest) + in := new(QueryInit) if err := dec(in); err != nil { return nil, err } @@ -1378,13 +1376,13 @@ func _Query_Init_Handler(srv interface{}, ctx context.Context, dec func(interfac FullMethod: "/canine_chain.rns.Query/Init", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Init(ctx, req.(*QueryInitRequest)) + return srv.(QueryServer).Init(ctx, req.(*QueryInit)) } return interceptor(ctx, in, info, handler) } func _Query_AllInits_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllInitsRequest) + in := new(QueryAllInits) if err := dec(in); err != nil { return nil, err } @@ -1396,13 +1394,13 @@ func _Query_AllInits_Handler(srv interface{}, ctx context.Context, dec func(inte FullMethod: "/canine_chain.rns.Query/AllInits", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllInits(ctx, req.(*QueryAllInitsRequest)) + return srv.(QueryServer).AllInits(ctx, req.(*QueryAllInits)) } return interceptor(ctx, in, info, handler) } func _Query_ListOwnedNames_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryListOwnedNamesRequest) + in := new(QueryListOwnedNames) if err := dec(in); err != nil { return nil, err } @@ -1414,7 +1412,7 @@ func _Query_ListOwnedNames_Handler(srv interface{}, ctx context.Context, dec fun FullMethod: "/canine_chain.rns.Query/ListOwnedNames", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ListOwnedNames(ctx, req.(*QueryListOwnedNamesRequest)) + return srv.(QueryServer).ListOwnedNames(ctx, req.(*QueryListOwnedNames)) } return interceptor(ctx, in, info, handler) } @@ -1468,7 +1466,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Metadata: "canine_chain/rns/query.proto", } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParams) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1478,12 +1476,12 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1524,7 +1522,7 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryNameRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryName) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1534,12 +1532,12 @@ func (m *QueryNameRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryNameRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryName) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryNameRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryName) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1587,7 +1585,7 @@ func (m *QueryNameResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllNamesRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllNames) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1597,12 +1595,12 @@ func (m *QueryAllNamesRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllNamesRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllNames) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllNamesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllNames) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1671,7 +1669,7 @@ func (m *QueryAllNamesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryBidRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryBid) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1681,12 +1679,12 @@ func (m *QueryBidRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryBidRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryBid) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryBidRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryBid) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1734,7 +1732,7 @@ func (m *QueryBidResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllBidsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllBids) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1744,12 +1742,12 @@ func (m *QueryAllBidsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllBidsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllBids) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllBidsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllBids) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1818,7 +1816,7 @@ func (m *QueryAllBidsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryForSaleRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryForSale) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1828,12 +1826,12 @@ func (m *QueryForSaleRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryForSaleRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryForSale) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryForSaleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryForSale) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1881,7 +1879,7 @@ func (m *QueryForSaleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllForSaleRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllForSale) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1891,12 +1889,12 @@ func (m *QueryAllForSaleRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllForSaleRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllForSale) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllForSaleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllForSale) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1965,7 +1963,7 @@ func (m *QueryAllForSaleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *QueryInitRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryInit) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1975,12 +1973,12 @@ func (m *QueryInitRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryInitRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryInit) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryInitRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryInit) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2028,7 +2026,7 @@ func (m *QueryInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllInitsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllInits) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2038,12 +2036,12 @@ func (m *QueryAllInitsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllInitsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllInits) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllInitsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllInits) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2112,7 +2110,7 @@ func (m *QueryAllInitsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryListOwnedNamesRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryListOwnedNames) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2122,12 +2120,12 @@ func (m *QueryListOwnedNamesRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryListOwnedNamesRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryListOwnedNames) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryListOwnedNamesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryListOwnedNames) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2214,7 +2212,7 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryParamsRequest) Size() (n int) { +func (m *QueryParams) Size() (n int) { if m == nil { return 0 } @@ -2234,7 +2232,7 @@ func (m *QueryParamsResponse) Size() (n int) { return n } -func (m *QueryNameRequest) Size() (n int) { +func (m *QueryName) Size() (n int) { if m == nil { return 0 } @@ -2258,7 +2256,7 @@ func (m *QueryNameResponse) Size() (n int) { return n } -func (m *QueryAllNamesRequest) Size() (n int) { +func (m *QueryAllNames) Size() (n int) { if m == nil { return 0 } @@ -2290,7 +2288,7 @@ func (m *QueryAllNamesResponse) Size() (n int) { return n } -func (m *QueryBidRequest) Size() (n int) { +func (m *QueryBid) Size() (n int) { if m == nil { return 0 } @@ -2314,7 +2312,7 @@ func (m *QueryBidResponse) Size() (n int) { return n } -func (m *QueryAllBidsRequest) Size() (n int) { +func (m *QueryAllBids) Size() (n int) { if m == nil { return 0 } @@ -2346,7 +2344,7 @@ func (m *QueryAllBidsResponse) Size() (n int) { return n } -func (m *QueryForSaleRequest) Size() (n int) { +func (m *QueryForSale) Size() (n int) { if m == nil { return 0 } @@ -2370,7 +2368,7 @@ func (m *QueryForSaleResponse) Size() (n int) { return n } -func (m *QueryAllForSaleRequest) Size() (n int) { +func (m *QueryAllForSale) Size() (n int) { if m == nil { return 0 } @@ -2402,7 +2400,7 @@ func (m *QueryAllForSaleResponse) Size() (n int) { return n } -func (m *QueryInitRequest) Size() (n int) { +func (m *QueryInit) Size() (n int) { if m == nil { return 0 } @@ -2427,7 +2425,7 @@ func (m *QueryInitResponse) Size() (n int) { return n } -func (m *QueryAllInitsRequest) Size() (n int) { +func (m *QueryAllInits) Size() (n int) { if m == nil { return 0 } @@ -2459,7 +2457,7 @@ func (m *QueryAllInitsResponse) Size() (n int) { return n } -func (m *QueryListOwnedNamesRequest) Size() (n int) { +func (m *QueryListOwnedNames) Size() (n int) { if m == nil { return 0 } @@ -2501,7 +2499,7 @@ func sovQuery(x uint64) (n int) { func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParams) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2524,10 +2522,10 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParams: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParams: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -2634,7 +2632,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryNameRequest) Unmarshal(dAtA []byte) error { +func (m *QueryName) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2657,10 +2655,10 @@ func (m *QueryNameRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryNameRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryName: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryNameRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryName: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -2799,7 +2797,7 @@ func (m *QueryNameResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllNamesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllNames) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2822,10 +2820,10 @@ func (m *QueryAllNamesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllNamesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllNames: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllNamesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllNames: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3005,7 +3003,7 @@ func (m *QueryAllNamesResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryBidRequest) Unmarshal(dAtA []byte) error { +func (m *QueryBid) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3028,10 +3026,10 @@ func (m *QueryBidRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryBidRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryBid: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryBidRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryBid: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3170,7 +3168,7 @@ func (m *QueryBidResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllBidsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllBids) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3193,10 +3191,10 @@ func (m *QueryAllBidsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllBidsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllBids: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllBidsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllBids: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3376,7 +3374,7 @@ func (m *QueryAllBidsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryForSaleRequest) Unmarshal(dAtA []byte) error { +func (m *QueryForSale) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3399,10 +3397,10 @@ func (m *QueryForSaleRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryForSaleRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryForSale: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryForSaleRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryForSale: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3541,7 +3539,7 @@ func (m *QueryForSaleResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllForSaleRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllForSale) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3564,10 +3562,10 @@ func (m *QueryAllForSaleRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllForSaleRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllForSale: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllForSaleRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllForSale: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3747,7 +3745,7 @@ func (m *QueryAllForSaleResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryInitRequest) Unmarshal(dAtA []byte) error { +func (m *QueryInit) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3770,10 +3768,10 @@ func (m *QueryInitRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryInitRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryInit: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryInitRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryInit: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3899,7 +3897,7 @@ func (m *QueryInitResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllInitsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllInits) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3922,10 +3920,10 @@ func (m *QueryAllInitsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllInitsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllInits: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllInitsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllInits: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4105,7 +4103,7 @@ func (m *QueryAllInitsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryListOwnedNamesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryListOwnedNames) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4128,10 +4126,10 @@ func (m *QueryListOwnedNamesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryListOwnedNamesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryListOwnedNames: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryListOwnedNamesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryListOwnedNames: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/x/rns/types/query.pb.gw.go b/x/rns/types/query.pb.gw.go index ac9568d78..6b7abaf7e 100644 --- a/x/rns/types/query.pb.gw.go +++ b/x/rns/types/query.pb.gw.go @@ -34,7 +34,7 @@ var _ = descriptor.ForMessage var _ = metadata.Join func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -43,7 +43,7 @@ func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, cl } func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := server.Params(ctx, &protoReq) @@ -52,7 +52,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } func request_Query_Name_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryNameRequest + var protoReq QueryName var metadata runtime.ServerMetadata var ( @@ -79,7 +79,7 @@ func request_Query_Name_0(ctx context.Context, marshaler runtime.Marshaler, clie } func local_request_Query_Name_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryNameRequest + var protoReq QueryName var metadata runtime.ServerMetadata var ( @@ -110,7 +110,7 @@ var ( ) func request_Query_AllNames_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllNamesRequest + var protoReq QueryAllNames var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -126,7 +126,7 @@ func request_Query_AllNames_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_AllNames_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllNamesRequest + var protoReq QueryAllNames var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -142,7 +142,7 @@ func local_request_Query_AllNames_0(ctx context.Context, marshaler runtime.Marsh } func request_Query_Bid_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryBidRequest + var protoReq QueryBid var metadata runtime.ServerMetadata var ( @@ -169,7 +169,7 @@ func request_Query_Bid_0(ctx context.Context, marshaler runtime.Marshaler, clien } func local_request_Query_Bid_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryBidRequest + var protoReq QueryBid var metadata runtime.ServerMetadata var ( @@ -200,7 +200,7 @@ var ( ) func request_Query_AllBids_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllBidsRequest + var protoReq QueryAllBids var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -216,7 +216,7 @@ func request_Query_AllBids_0(ctx context.Context, marshaler runtime.Marshaler, c } func local_request_Query_AllBids_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllBidsRequest + var protoReq QueryAllBids var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -232,7 +232,7 @@ func local_request_Query_AllBids_0(ctx context.Context, marshaler runtime.Marsha } func request_Query_ForSale_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryForSaleRequest + var protoReq QueryForSale var metadata runtime.ServerMetadata var ( @@ -259,7 +259,7 @@ func request_Query_ForSale_0(ctx context.Context, marshaler runtime.Marshaler, c } func local_request_Query_ForSale_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryForSaleRequest + var protoReq QueryForSale var metadata runtime.ServerMetadata var ( @@ -290,7 +290,7 @@ var ( ) func request_Query_AllForSale_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllForSaleRequest + var protoReq QueryAllForSale var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -306,7 +306,7 @@ func request_Query_AllForSale_0(ctx context.Context, marshaler runtime.Marshaler } func local_request_Query_AllForSale_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllForSaleRequest + var protoReq QueryAllForSale var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -322,7 +322,7 @@ func local_request_Query_AllForSale_0(ctx context.Context, marshaler runtime.Mar } func request_Query_Init_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryInitRequest + var protoReq QueryInit var metadata runtime.ServerMetadata var ( @@ -349,7 +349,7 @@ func request_Query_Init_0(ctx context.Context, marshaler runtime.Marshaler, clie } func local_request_Query_Init_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryInitRequest + var protoReq QueryInit var metadata runtime.ServerMetadata var ( @@ -380,7 +380,7 @@ var ( ) func request_Query_AllInits_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllInitsRequest + var protoReq QueryAllInits var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -396,7 +396,7 @@ func request_Query_AllInits_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_AllInits_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllInitsRequest + var protoReq QueryAllInits var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -416,7 +416,7 @@ var ( ) func request_Query_ListOwnedNames_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryListOwnedNamesRequest + var protoReq QueryListOwnedNames var metadata runtime.ServerMetadata var ( @@ -450,7 +450,7 @@ func request_Query_ListOwnedNames_0(ctx context.Context, marshaler runtime.Marsh } func local_request_Query_ListOwnedNames_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryListOwnedNamesRequest + var protoReq QueryListOwnedNames var metadata runtime.ServerMetadata var ( From 29272b44d3af05107df68042ff13a63d026cea3c Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 8 Nov 2023 23:14:08 -0500 Subject: [PATCH 060/256] oracle module query refactor --- proto/canine_chain/oracle/query.proto | 12 +- x/oracle/client/cli/query_feeds.go | 4 +- x/oracle/keeper/grpc_query_feeds.go | 4 +- x/oracle/keeper/grpc_query_params.go | 2 +- x/oracle/keeper/keeper_test.go | 2 +- x/oracle/types/query.pb.go | 233 +++++++++++++------------- x/oracle/types/query.pb.gw.go | 12 +- 7 files changed, 134 insertions(+), 135 deletions(-) diff --git a/proto/canine_chain/oracle/query.proto b/proto/canine_chain/oracle/query.proto index 055cda712..3dd9239ac 100644 --- a/proto/canine_chain/oracle/query.proto +++ b/proto/canine_chain/oracle/query.proto @@ -12,21 +12,21 @@ option go_package = "github.com/jackalLabs/canine-chain/x/oracle/types"; // Query defines the gRPC querier service. service Query { // Parameters queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + rpc Params(QueryParams) returns (QueryParamsResponse) { option (google.api.http).get = "/jackal/canine-chain/oracle/params"; } - rpc Feed(QueryFeedRequest) returns (QueryFeedResponse) { + rpc Feed(QueryFeed) returns (QueryFeedResponse) { option (google.api.http).get = "/jackal/canine-chain/oracle/feeds/{name}"; } - rpc AllFeeds(QueryAllFeedsRequest) returns (QueryAllFeedsResponse) { + rpc AllFeeds(QueryAllFeeds) returns (QueryAllFeedsResponse) { option (google.api.http).get = "/jackal/canine-chain/oracle/feeds"; } } // QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} +message QueryParams {} // QueryParamsResponse is response type for the Query/Params RPC method. message QueryParamsResponse { @@ -34,7 +34,7 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } -message QueryFeedRequest { +message QueryFeed { string name = 1; } @@ -43,7 +43,7 @@ message QueryFeedResponse { Feed feed = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllFeedsRequest {} +message QueryAllFeeds {} message QueryAllFeedsResponse { // params holds all the parameters of this module. diff --git a/x/oracle/client/cli/query_feeds.go b/x/oracle/client/cli/query_feeds.go index ab7294215..ca2f892f1 100644 --- a/x/oracle/client/cli/query_feeds.go +++ b/x/oracle/client/cli/query_feeds.go @@ -19,7 +19,7 @@ func CmdQueryAllFeeds() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.AllFeeds(context.Background(), &types.QueryAllFeedsRequest{}) + res, err := queryClient.AllFeeds(context.Background(), &types.QueryAllFeeds{}) if err != nil { return err } @@ -43,7 +43,7 @@ func CmdQueryFeed() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.Feed(context.Background(), &types.QueryFeedRequest{Name: args[0]}) + res, err := queryClient.Feed(context.Background(), &types.QueryFeed{Name: args[0]}) if err != nil { return err } diff --git a/x/oracle/keeper/grpc_query_feeds.go b/x/oracle/keeper/grpc_query_feeds.go index f783ec331..ba031d9dd 100644 --- a/x/oracle/keeper/grpc_query_feeds.go +++ b/x/oracle/keeper/grpc_query_feeds.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) Feed(c context.Context, req *types.QueryFeedRequest) (*types.QueryFeedResponse, error) { +func (k Keeper) Feed(c context.Context, req *types.QueryFeed) (*types.QueryFeedResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -25,7 +25,7 @@ func (k Keeper) Feed(c context.Context, req *types.QueryFeedRequest) (*types.Que return &types.QueryFeedResponse{Feed: feed}, nil } -func (k Keeper) AllFeeds(c context.Context, req *types.QueryAllFeedsRequest) (*types.QueryAllFeedsResponse, error) { +func (k Keeper) AllFeeds(c context.Context, req *types.QueryAllFeeds) (*types.QueryAllFeedsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/oracle/keeper/grpc_query_params.go b/x/oracle/keeper/grpc_query_params.go index ddf47b2f0..f30711809 100644 --- a/x/oracle/keeper/grpc_query_params.go +++ b/x/oracle/keeper/grpc_query_params.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (k Keeper) Params(c context.Context, req *types.QueryParams) (*types.QueryParamsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/oracle/keeper/keeper_test.go b/x/oracle/keeper/keeper_test.go index e153b5e8c..8facb8d51 100644 --- a/x/oracle/keeper/keeper_test.go +++ b/x/oracle/keeper/keeper_test.go @@ -75,7 +75,7 @@ func CreateRandomAccounts(numAccs int) []sdk.AccAddress { func (suite *KeeperTestSuite) TestGRPCParams() { suite.SetupSuite() - params, err := suite.queryClient.Params(gocontext.Background(), &types.QueryParamsRequest{}) + params, err := suite.queryClient.Params(gocontext.Background(), &types.QueryParams{}) suite.Require().NoError(err) suite.Require().Equal(params.Params, suite.oracleKeeper.GetParams(suite.ctx)) } diff --git a/x/oracle/types/query.pb.go b/x/oracle/types/query.pb.go index 8e7fe7235..1f80670fd 100644 --- a/x/oracle/types/query.pb.go +++ b/x/oracle/types/query.pb.go @@ -31,21 +31,21 @@ var _ = math.Inf const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { +type QueryParams struct { } -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { +func (m *QueryParams) Reset() { *m = QueryParams{} } +func (m *QueryParams) String() string { return proto.CompactTextString(m) } +func (*QueryParams) ProtoMessage() {} +func (*QueryParams) Descriptor() ([]byte, []int) { return fileDescriptor_2a4eedcae49363dd, []int{0} } -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParams.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -55,17 +55,17 @@ func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) +func (m *QueryParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParams.Merge(m, src) } -func (m *QueryParamsRequest) XXX_Size() int { +func (m *QueryParams) XXX_Size() int { return m.Size() } -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +func (m *QueryParams) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParams.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryParams proto.InternalMessageInfo // QueryParamsResponse is response type for the Query/Params RPC method. type QueryParamsResponse struct { @@ -113,22 +113,22 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -type QueryFeedRequest struct { +type QueryFeed struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (m *QueryFeedRequest) Reset() { *m = QueryFeedRequest{} } -func (m *QueryFeedRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFeedRequest) ProtoMessage() {} -func (*QueryFeedRequest) Descriptor() ([]byte, []int) { +func (m *QueryFeed) Reset() { *m = QueryFeed{} } +func (m *QueryFeed) String() string { return proto.CompactTextString(m) } +func (*QueryFeed) ProtoMessage() {} +func (*QueryFeed) Descriptor() ([]byte, []int) { return fileDescriptor_2a4eedcae49363dd, []int{2} } -func (m *QueryFeedRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFeed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFeedRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFeed.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -138,19 +138,19 @@ func (m *QueryFeedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return b[:n], nil } } -func (m *QueryFeedRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFeedRequest.Merge(m, src) +func (m *QueryFeed) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFeed.Merge(m, src) } -func (m *QueryFeedRequest) XXX_Size() int { +func (m *QueryFeed) XXX_Size() int { return m.Size() } -func (m *QueryFeedRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFeedRequest.DiscardUnknown(m) +func (m *QueryFeed) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFeed.DiscardUnknown(m) } -var xxx_messageInfo_QueryFeedRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFeed proto.InternalMessageInfo -func (m *QueryFeedRequest) GetName() string { +func (m *QueryFeed) GetName() string { if m != nil { return m.Name } @@ -202,21 +202,21 @@ func (m *QueryFeedResponse) GetFeed() Feed { return Feed{} } -type QueryAllFeedsRequest struct { +type QueryAllFeeds struct { } -func (m *QueryAllFeedsRequest) Reset() { *m = QueryAllFeedsRequest{} } -func (m *QueryAllFeedsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllFeedsRequest) ProtoMessage() {} -func (*QueryAllFeedsRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllFeeds) Reset() { *m = QueryAllFeeds{} } +func (m *QueryAllFeeds) String() string { return proto.CompactTextString(m) } +func (*QueryAllFeeds) ProtoMessage() {} +func (*QueryAllFeeds) Descriptor() ([]byte, []int) { return fileDescriptor_2a4eedcae49363dd, []int{4} } -func (m *QueryAllFeedsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllFeeds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllFeeds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllFeedsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllFeeds.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -226,17 +226,17 @@ func (m *QueryAllFeedsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryAllFeedsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllFeedsRequest.Merge(m, src) +func (m *QueryAllFeeds) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllFeeds.Merge(m, src) } -func (m *QueryAllFeedsRequest) XXX_Size() int { +func (m *QueryAllFeeds) XXX_Size() int { return m.Size() } -func (m *QueryAllFeedsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllFeedsRequest.DiscardUnknown(m) +func (m *QueryAllFeeds) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllFeeds.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllFeedsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllFeeds proto.InternalMessageInfo type QueryAllFeedsResponse struct { // params holds all the parameters of this module. @@ -292,49 +292,48 @@ func (m *QueryAllFeedsResponse) GetPagination() *query.PageResponse { } func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.oracle.QueryParamsRequest") + proto.RegisterType((*QueryParams)(nil), "canine_chain.oracle.QueryParams") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.oracle.QueryParamsResponse") - proto.RegisterType((*QueryFeedRequest)(nil), "canine_chain.oracle.QueryFeedRequest") + proto.RegisterType((*QueryFeed)(nil), "canine_chain.oracle.QueryFeed") proto.RegisterType((*QueryFeedResponse)(nil), "canine_chain.oracle.QueryFeedResponse") - proto.RegisterType((*QueryAllFeedsRequest)(nil), "canine_chain.oracle.QueryAllFeedsRequest") + proto.RegisterType((*QueryAllFeeds)(nil), "canine_chain.oracle.QueryAllFeeds") proto.RegisterType((*QueryAllFeedsResponse)(nil), "canine_chain.oracle.QueryAllFeedsResponse") } func init() { proto.RegisterFile("canine_chain/oracle/query.proto", fileDescriptor_2a4eedcae49363dd) } var fileDescriptor_2a4eedcae49363dd = []byte{ - // 486 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x3d, 0x6f, 0xd4, 0x30, - 0x18, 0x3e, 0xb7, 0xc7, 0x09, 0xcc, 0x02, 0xee, 0x81, 0x4a, 0x40, 0x69, 0x09, 0xd0, 0x5e, 0x4f, - 0xc2, 0xe6, 0xda, 0x89, 0x91, 0x0e, 0x80, 0x04, 0xc3, 0x91, 0x91, 0x05, 0xbd, 0x49, 0x4d, 0x1a, - 0x48, 0xec, 0x34, 0xce, 0x21, 0x2a, 0xc4, 0xc2, 0xc2, 0xc2, 0x80, 0x84, 0xf8, 0x13, 0xfc, 0x92, - 0x8e, 0x95, 0x58, 0x98, 0x10, 0xba, 0xe3, 0x87, 0x20, 0x7f, 0x04, 0xd2, 0x36, 0xe5, 0xba, 0x59, - 0x79, 0x9f, 0x2f, 0xfb, 0x79, 0x83, 0x57, 0x62, 0x10, 0xa9, 0xe0, 0x2f, 0xe2, 0x5d, 0x48, 0x05, - 0x93, 0x25, 0xc4, 0x19, 0x67, 0x7b, 0x13, 0x5e, 0xee, 0xd3, 0xa2, 0x94, 0x95, 0x24, 0x4b, 0x4d, - 0x00, 0xb5, 0x00, 0xaf, 0x9f, 0xc8, 0x44, 0x9a, 0x39, 0xd3, 0x27, 0x0b, 0xf5, 0x6e, 0x24, 0x52, - 0x26, 0x19, 0x67, 0x50, 0xa4, 0x0c, 0x84, 0x90, 0x15, 0x54, 0xa9, 0x14, 0xca, 0x4d, 0x87, 0xb1, - 0x54, 0xb9, 0x54, 0x2c, 0x02, 0xe5, 0x1c, 0xd8, 0x9b, 0x51, 0xc4, 0x2b, 0x18, 0xb1, 0x02, 0x92, - 0x54, 0x18, 0xb0, 0xc3, 0xae, 0xb6, 0xa5, 0x2a, 0xa0, 0x84, 0xbc, 0x56, 0xf3, 0xdb, 0x10, 0x2f, - 0x39, 0xdf, 0xb1, 0xf3, 0xa0, 0x8f, 0xc9, 0x33, 0xed, 0x31, 0x36, 0xa4, 0x90, 0xef, 0x4d, 0xb8, - 0xaa, 0x82, 0x31, 0x5e, 0x3a, 0xf2, 0x55, 0x15, 0x52, 0x28, 0x4e, 0xee, 0xe3, 0x9e, 0x15, 0x5f, - 0x46, 0xab, 0x68, 0x70, 0x71, 0xf3, 0x3a, 0x6d, 0xb9, 0x34, 0xb5, 0xa4, 0xed, 0xee, 0xc1, 0xcf, - 0x95, 0x4e, 0xe8, 0x08, 0xc1, 0x1a, 0xbe, 0x64, 0x14, 0x1f, 0x72, 0xbe, 0xe3, 0x5c, 0x08, 0xc1, - 0x5d, 0x01, 0x39, 0x37, 0x62, 0x17, 0x42, 0x73, 0x0e, 0x1e, 0xe3, 0xcb, 0x0d, 0x9c, 0xf3, 0xdd, - 0xc2, 0x5d, 0x1d, 0xd9, 0xb9, 0x5e, 0x6b, 0x75, 0xd5, 0x04, 0xe7, 0x69, 0xc0, 0xc1, 0x55, 0xdc, - 0x37, 0x4a, 0x0f, 0xb2, 0x4c, 0xcf, 0xfe, 0xde, 0xed, 0x2b, 0xc2, 0x57, 0x8e, 0x0d, 0x4e, 0xd8, - 0x2c, 0x9e, 0xd9, 0x86, 0x3c, 0xc2, 0xf8, 0x5f, 0x2d, 0xcb, 0x0b, 0x26, 0xe1, 0x3a, 0xb5, 0x1d, - 0x52, 0xdd, 0x21, 0xb5, 0x5b, 0xe2, 0x3a, 0xa4, 0x63, 0x48, 0x78, 0xed, 0x18, 0x36, 0xa8, 0x9b, - 0xdf, 0x16, 0xf1, 0x39, 0x93, 0x8b, 0x7c, 0x44, 0xb8, 0x67, 0x1f, 0x91, 0xac, 0xb7, 0x86, 0x38, - 0xd9, 0x98, 0x37, 0x98, 0x0f, 0xb4, 0x9e, 0xc1, 0xf0, 0xc3, 0xf7, 0xdf, 0x5f, 0x16, 0x6e, 0x93, - 0x80, 0xbd, 0x82, 0xf8, 0x35, 0x64, 0xcc, 0x12, 0xef, 0xb6, 0xec, 0x90, 0x4e, 0xd2, 0xd5, 0x37, - 0x26, 0x77, 0x4e, 0x97, 0x6f, 0x34, 0xea, 0xad, 0xcd, 0x83, 0xb9, 0x0c, 0xf7, 0x4c, 0x86, 0x21, - 0x19, 0xfc, 0x2f, 0x83, 0x7e, 0x5e, 0xc5, 0xde, 0xe9, 0xb5, 0x78, 0x4f, 0x3e, 0x21, 0x7c, 0xbe, - 0x2e, 0x8c, 0x6c, 0x9c, 0x6e, 0x73, 0xac, 0x6d, 0x6f, 0x78, 0x16, 0xa8, 0x4b, 0xb5, 0x61, 0x52, - 0xdd, 0x22, 0x37, 0xe7, 0xa6, 0xda, 0x7e, 0x72, 0x30, 0xf5, 0xd1, 0xe1, 0xd4, 0x47, 0xbf, 0xa6, - 0x3e, 0xfa, 0x3c, 0xf3, 0x3b, 0x87, 0x33, 0xbf, 0xf3, 0x63, 0xe6, 0x77, 0x9e, 0x8f, 0x92, 0xb4, - 0xda, 0x9d, 0x44, 0x34, 0x96, 0xb9, 0x93, 0x79, 0x0a, 0x91, 0x3a, 0x2a, 0xf5, 0xb6, 0x16, 0xab, - 0xf6, 0x0b, 0xae, 0xa2, 0x9e, 0xf9, 0x15, 0xb7, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x1c, - 0xe8, 0xe1, 0x64, 0x04, 0x00, 0x00, + // 475 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x4d, 0x6b, 0x13, 0x41, + 0x18, 0xce, 0xb4, 0x31, 0xd8, 0x29, 0x45, 0x9c, 0x2a, 0xd4, 0x55, 0x26, 0x71, 0x14, 0x8d, 0x01, + 0x67, 0x4c, 0x7b, 0xf2, 0x68, 0x0f, 0x2a, 0xe8, 0x21, 0xe6, 0xe8, 0x45, 0xde, 0xdd, 0x8e, 0xdb, + 0xd5, 0xcd, 0xcc, 0x9a, 0xd9, 0x8a, 0x45, 0x04, 0x11, 0xbc, 0x0b, 0xd2, 0xff, 0xd4, 0x63, 0xc1, + 0x8b, 0x27, 0x91, 0xc4, 0x1f, 0x22, 0xf3, 0xb1, 0x71, 0x0b, 0xdb, 0xc6, 0xdb, 0xec, 0xbe, 0xcf, + 0xd7, 0xce, 0xf3, 0x2e, 0xee, 0x26, 0xa0, 0x32, 0x25, 0x5f, 0x25, 0xfb, 0x90, 0x29, 0xa1, 0xa7, + 0x90, 0xe4, 0x52, 0xbc, 0x3b, 0x90, 0xd3, 0x43, 0x5e, 0x4c, 0x75, 0xa9, 0xc9, 0x66, 0x1d, 0xc0, + 0x3d, 0x20, 0xba, 0x92, 0xea, 0x54, 0xbb, 0xb9, 0xb0, 0x27, 0x0f, 0x8d, 0x6e, 0xa4, 0x5a, 0xa7, + 0xb9, 0x14, 0x50, 0x64, 0x02, 0x94, 0xd2, 0x25, 0x94, 0x99, 0x56, 0x26, 0x4c, 0x07, 0x89, 0x36, + 0x13, 0x6d, 0x44, 0x0c, 0x26, 0x38, 0x88, 0xf7, 0xc3, 0x58, 0x96, 0x30, 0x14, 0x05, 0xa4, 0x99, + 0x72, 0xe0, 0x80, 0xed, 0x35, 0xa5, 0x2a, 0x60, 0x0a, 0x93, 0x4a, 0x8d, 0x36, 0x21, 0x5e, 0x4b, + 0xb9, 0xe7, 0xe7, 0x6c, 0x03, 0xaf, 0xbf, 0xb0, 0x1e, 0x23, 0x47, 0x62, 0x23, 0xbc, 0x59, 0x7b, + 0x1c, 0x4b, 0x53, 0x68, 0x65, 0x24, 0x79, 0x88, 0x3b, 0x5e, 0x75, 0x0b, 0xf5, 0x50, 0x7f, 0x7d, + 0xfb, 0x3a, 0x6f, 0xf8, 0x5a, 0xee, 0x49, 0xbb, 0xed, 0xe3, 0x5f, 0xdd, 0xd6, 0x38, 0x10, 0x58, + 0x17, 0xaf, 0x39, 0xc5, 0xc7, 0x52, 0xee, 0x11, 0x82, 0xdb, 0x0a, 0x26, 0xd2, 0xa9, 0xac, 0x8d, + 0xdd, 0x99, 0x3d, 0xc5, 0x97, 0x17, 0x80, 0x85, 0xe1, 0x0e, 0x6e, 0xdb, 0x90, 0xc1, 0xee, 0x5a, + 0xa3, 0x9d, 0x25, 0x04, 0x33, 0x07, 0x66, 0x97, 0xf0, 0x86, 0x53, 0x7a, 0x94, 0xe7, 0x76, 0x66, + 0xd8, 0x11, 0xc2, 0x57, 0x4f, 0xbd, 0x69, 0xd0, 0x5f, 0xfd, 0x6f, 0x7d, 0xf2, 0x04, 0xe3, 0x7f, + 0x0d, 0x6c, 0xad, 0xb8, 0x68, 0x77, 0xb9, 0xaf, 0x8b, 0xdb, 0xba, 0xb8, 0x5f, 0x88, 0x50, 0x17, + 0x1f, 0x41, 0x2a, 0x2b, 0xc7, 0x71, 0x8d, 0xba, 0x7d, 0xb4, 0x8a, 0x2f, 0xb8, 0x5c, 0xe4, 0x33, + 0xc2, 0x1d, 0x7f, 0x6d, 0xa4, 0xd7, 0x18, 0xa2, 0xd6, 0x46, 0xd4, 0x5f, 0x86, 0xa8, 0xcc, 0xd8, + 0xe0, 0xcb, 0x8f, 0x3f, 0xdf, 0x57, 0x6e, 0x13, 0x26, 0xde, 0x40, 0xf2, 0x16, 0x72, 0xe1, 0x89, + 0xf7, 0x1b, 0xf6, 0xc4, 0x46, 0x68, 0xbb, 0x72, 0xe8, 0xd9, 0xf2, 0x76, 0x1e, 0xdd, 0x39, 0x7f, + 0xbe, 0x30, 0x7f, 0xe0, 0xcc, 0x07, 0xa4, 0x7f, 0x9e, 0xb9, 0xbd, 0x50, 0x23, 0x3e, 0xda, 0x0d, + 0xf8, 0x44, 0xbe, 0x22, 0x7c, 0xb1, 0xaa, 0x88, 0xb0, 0xb3, 0x6d, 0x2a, 0x4c, 0x34, 0x58, 0x8e, + 0x59, 0xc4, 0xb9, 0xe7, 0xe2, 0xdc, 0x22, 0x37, 0x97, 0xc6, 0xd9, 0x7d, 0x76, 0x3c, 0xa3, 0xe8, + 0x64, 0x46, 0xd1, 0xef, 0x19, 0x45, 0xdf, 0xe6, 0xb4, 0x75, 0x32, 0xa7, 0xad, 0x9f, 0x73, 0xda, + 0x7a, 0x39, 0x4c, 0xb3, 0x72, 0xff, 0x20, 0xe6, 0x89, 0x9e, 0x04, 0x99, 0xe7, 0x10, 0x9b, 0xd3, + 0x52, 0x1f, 0x2a, 0xb1, 0xf2, 0xb0, 0x90, 0x26, 0xee, 0xb8, 0x1f, 0x6c, 0xe7, 0x6f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xa1, 0xda, 0x9c, 0x7f, 0x3a, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -350,9 +349,9 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { // Parameters queries the parameters of the module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) - Feed(ctx context.Context, in *QueryFeedRequest, opts ...grpc.CallOption) (*QueryFeedResponse, error) - AllFeeds(ctx context.Context, in *QueryAllFeedsRequest, opts ...grpc.CallOption) (*QueryAllFeedsResponse, error) + Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) + Feed(ctx context.Context, in *QueryFeed, opts ...grpc.CallOption) (*QueryFeedResponse, error) + AllFeeds(ctx context.Context, in *QueryAllFeeds, opts ...grpc.CallOption) (*QueryAllFeedsResponse, error) } type queryClient struct { @@ -363,7 +362,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { +func (c *queryClient) Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) err := c.cc.Invoke(ctx, "/canine_chain.oracle.Query/Params", in, out, opts...) if err != nil { @@ -372,7 +371,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } -func (c *queryClient) Feed(ctx context.Context, in *QueryFeedRequest, opts ...grpc.CallOption) (*QueryFeedResponse, error) { +func (c *queryClient) Feed(ctx context.Context, in *QueryFeed, opts ...grpc.CallOption) (*QueryFeedResponse, error) { out := new(QueryFeedResponse) err := c.cc.Invoke(ctx, "/canine_chain.oracle.Query/Feed", in, out, opts...) if err != nil { @@ -381,7 +380,7 @@ func (c *queryClient) Feed(ctx context.Context, in *QueryFeedRequest, opts ...gr return out, nil } -func (c *queryClient) AllFeeds(ctx context.Context, in *QueryAllFeedsRequest, opts ...grpc.CallOption) (*QueryAllFeedsResponse, error) { +func (c *queryClient) AllFeeds(ctx context.Context, in *QueryAllFeeds, opts ...grpc.CallOption) (*QueryAllFeedsResponse, error) { out := new(QueryAllFeedsResponse) err := c.cc.Invoke(ctx, "/canine_chain.oracle.Query/AllFeeds", in, out, opts...) if err != nil { @@ -393,22 +392,22 @@ func (c *queryClient) AllFeeds(ctx context.Context, in *QueryAllFeedsRequest, op // QueryServer is the server API for Query service. type QueryServer interface { // Parameters queries the parameters of the module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) - Feed(context.Context, *QueryFeedRequest) (*QueryFeedResponse, error) - AllFeeds(context.Context, *QueryAllFeedsRequest) (*QueryAllFeedsResponse, error) + Params(context.Context, *QueryParams) (*QueryParamsResponse, error) + Feed(context.Context, *QueryFeed) (*QueryFeedResponse, error) + AllFeeds(context.Context, *QueryAllFeeds) (*QueryAllFeedsResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParams) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) Feed(ctx context.Context, req *QueryFeedRequest) (*QueryFeedResponse, error) { +func (*UnimplementedQueryServer) Feed(ctx context.Context, req *QueryFeed) (*QueryFeedResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Feed not implemented") } -func (*UnimplementedQueryServer) AllFeeds(ctx context.Context, req *QueryAllFeedsRequest) (*QueryAllFeedsResponse, error) { +func (*UnimplementedQueryServer) AllFeeds(ctx context.Context, req *QueryAllFeeds) (*QueryAllFeedsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllFeeds not implemented") } @@ -417,7 +416,7 @@ func RegisterQueryServer(s grpc1.Server, srv QueryServer) { } func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) + in := new(QueryParams) if err := dec(in); err != nil { return nil, err } @@ -429,13 +428,13 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf FullMethod: "/canine_chain.oracle.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParams)) } return interceptor(ctx, in, info, handler) } func _Query_Feed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFeedRequest) + in := new(QueryFeed) if err := dec(in); err != nil { return nil, err } @@ -447,13 +446,13 @@ func _Query_Feed_Handler(srv interface{}, ctx context.Context, dec func(interfac FullMethod: "/canine_chain.oracle.Query/Feed", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Feed(ctx, req.(*QueryFeedRequest)) + return srv.(QueryServer).Feed(ctx, req.(*QueryFeed)) } return interceptor(ctx, in, info, handler) } func _Query_AllFeeds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllFeedsRequest) + in := new(QueryAllFeeds) if err := dec(in); err != nil { return nil, err } @@ -465,7 +464,7 @@ func _Query_AllFeeds_Handler(srv interface{}, ctx context.Context, dec func(inte FullMethod: "/canine_chain.oracle.Query/AllFeeds", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllFeeds(ctx, req.(*QueryAllFeedsRequest)) + return srv.(QueryServer).AllFeeds(ctx, req.(*QueryAllFeeds)) } return interceptor(ctx, in, info, handler) } @@ -491,7 +490,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Metadata: "canine_chain/oracle/query.proto", } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParams) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -501,12 +500,12 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -547,7 +546,7 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryFeedRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFeed) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -557,12 +556,12 @@ func (m *QueryFeedRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFeedRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFeed) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFeedRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFeed) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -610,7 +609,7 @@ func (m *QueryFeedResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllFeedsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllFeeds) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -620,12 +619,12 @@ func (m *QueryAllFeedsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllFeedsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllFeeds) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllFeedsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllFeeds) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -693,7 +692,7 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryParamsRequest) Size() (n int) { +func (m *QueryParams) Size() (n int) { if m == nil { return 0 } @@ -713,7 +712,7 @@ func (m *QueryParamsResponse) Size() (n int) { return n } -func (m *QueryFeedRequest) Size() (n int) { +func (m *QueryFeed) Size() (n int) { if m == nil { return 0 } @@ -737,7 +736,7 @@ func (m *QueryFeedResponse) Size() (n int) { return n } -func (m *QueryAllFeedsRequest) Size() (n int) { +func (m *QueryAllFeeds) Size() (n int) { if m == nil { return 0 } @@ -771,7 +770,7 @@ func sovQuery(x uint64) (n int) { func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParams) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -794,10 +793,10 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParams: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParams: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -904,7 +903,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFeedRequest) Unmarshal(dAtA []byte) error { +func (m *QueryFeed) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -927,10 +926,10 @@ func (m *QueryFeedRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFeedRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFeed: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFeedRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFeed: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1069,7 +1068,7 @@ func (m *QueryFeedResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllFeedsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllFeeds) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1092,10 +1091,10 @@ func (m *QueryAllFeedsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllFeedsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllFeeds: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllFeedsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllFeeds: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: diff --git a/x/oracle/types/query.pb.gw.go b/x/oracle/types/query.pb.gw.go index 45bfb94c5..1998aac3b 100644 --- a/x/oracle/types/query.pb.gw.go +++ b/x/oracle/types/query.pb.gw.go @@ -34,7 +34,7 @@ var _ = descriptor.ForMessage var _ = metadata.Join func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -43,7 +43,7 @@ func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, cl } func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := server.Params(ctx, &protoReq) @@ -52,7 +52,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } func request_Query_Feed_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFeedRequest + var protoReq QueryFeed var metadata runtime.ServerMetadata var ( @@ -79,7 +79,7 @@ func request_Query_Feed_0(ctx context.Context, marshaler runtime.Marshaler, clie } func local_request_Query_Feed_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFeedRequest + var protoReq QueryFeed var metadata runtime.ServerMetadata var ( @@ -106,7 +106,7 @@ func local_request_Query_Feed_0(ctx context.Context, marshaler runtime.Marshaler } func request_Query_AllFeeds_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllFeedsRequest + var protoReq QueryAllFeeds var metadata runtime.ServerMetadata msg, err := client.AllFeeds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -115,7 +115,7 @@ func request_Query_AllFeeds_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_AllFeeds_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllFeedsRequest + var protoReq QueryAllFeeds var metadata runtime.ServerMetadata msg, err := server.AllFeeds(ctx, &protoReq) From 53b1c12bdb94bbc8b1456b05277a4e1e4e4b3695 Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 8 Nov 2023 23:18:03 -0500 Subject: [PATCH 061/256] jklmint module query refactor --- proto/canine_chain/jklmint/query.proto | 8 +- x/jklmint/client/cli/query_get_inflation.go | 2 +- x/jklmint/client/cli/query_params.go | 2 +- x/jklmint/keeper/grpc_query_inflation.go | 2 +- x/jklmint/keeper/grpc_query_params.go | 2 +- x/jklmint/keeper/grpc_query_params_test.go | 4 +- x/jklmint/keeper/querier.go | 2 +- x/jklmint/types/keys.go | 4 +- x/jklmint/types/query.pb.go | 163 ++++++++++---------- x/jklmint/types/query.pb.gw.go | 8 +- 10 files changed, 98 insertions(+), 99 deletions(-) diff --git a/proto/canine_chain/jklmint/query.proto b/proto/canine_chain/jklmint/query.proto index 40ba03883..8a468a4ac 100644 --- a/proto/canine_chain/jklmint/query.proto +++ b/proto/canine_chain/jklmint/query.proto @@ -10,18 +10,18 @@ option go_package = "github.com/jackalLabs/canine-chain/x/jklmint/types"; // Query defines the gRPC querier service. service Query { // Parameters queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + rpc Params(QueryParams) returns (QueryParamsResponse) { option (google.api.http).get = "/cosmos/mint/v1beta1/params"; } // Inflation returns the current minting inflation value. - rpc Inflation(QueryInflationRequest) returns (QueryInflationResponse) { + rpc Inflation(QueryInflation) returns (QueryInflationResponse) { option (google.api.http).get = "/cosmos/mint/v1beta1/inflation"; } } // QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} +message QueryParams {} // QueryParamsResponse is response type for the Query/Params RPC method. message QueryParamsResponse { @@ -30,7 +30,7 @@ message QueryParamsResponse { } // QueryInflationRequest is the request type for the Query/Inflation RPC method. -message QueryInflationRequest {} +message QueryInflation {} // QueryInflationResponse is the response type for the Query/Inflation RPC // method. diff --git a/x/jklmint/client/cli/query_get_inflation.go b/x/jklmint/client/cli/query_get_inflation.go index 28188e7ae..b0879673e 100644 --- a/x/jklmint/client/cli/query_get_inflation.go +++ b/x/jklmint/client/cli/query_get_inflation.go @@ -24,7 +24,7 @@ func CmdGetInflation() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryInflationRequest{} + params := &types.QueryInflation{} res, err := queryClient.Inflation(cmd.Context(), params) if err != nil { diff --git a/x/jklmint/client/cli/query_params.go b/x/jklmint/client/cli/query_params.go index 4c20d6ffe..5c2240278 100644 --- a/x/jklmint/client/cli/query_params.go +++ b/x/jklmint/client/cli/query_params.go @@ -19,7 +19,7 @@ func CmdQueryParams() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + res, err := queryClient.Params(context.Background(), &types.QueryParams{}) if err != nil { return err } diff --git a/x/jklmint/keeper/grpc_query_inflation.go b/x/jklmint/keeper/grpc_query_inflation.go index df59b0da0..324651d56 100644 --- a/x/jklmint/keeper/grpc_query_inflation.go +++ b/x/jklmint/keeper/grpc_query_inflation.go @@ -7,7 +7,7 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/jklmint/types" ) -func (k Keeper) Inflation(c context.Context, _ *types.QueryInflationRequest) (*types.QueryInflationResponse, error) { +func (k Keeper) Inflation(c context.Context, _ *types.QueryInflation) (*types.QueryInflationResponse, error) { ctx := sdk.UnwrapSDKContext(c) inflation, err := k.GetInflation(ctx) diff --git a/x/jklmint/keeper/grpc_query_params.go b/x/jklmint/keeper/grpc_query_params.go index 799e36b6c..d7b538126 100644 --- a/x/jklmint/keeper/grpc_query_params.go +++ b/x/jklmint/keeper/grpc_query_params.go @@ -7,7 +7,7 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/jklmint/types" ) -func (k Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (k Keeper) Params(c context.Context, _ *types.QueryParams) (*types.QueryParamsResponse, error) { ctx := sdk.UnwrapSDKContext(c) params := k.GetParams(ctx) diff --git a/x/jklmint/keeper/grpc_query_params_test.go b/x/jklmint/keeper/grpc_query_params_test.go index 2b9c1cd98..40c0bec8a 100644 --- a/x/jklmint/keeper/grpc_query_params_test.go +++ b/x/jklmint/keeper/grpc_query_params_test.go @@ -37,11 +37,11 @@ func (suite *MintTestSuite) SetupTest() { func (suite *MintTestSuite) TestGRPCParams() { app, ctx, queryClient := suite.app, suite.ctx, suite.queryClient - params, err := queryClient.Params(gocontext.Background(), &types.QueryParamsRequest{}) + params, err := queryClient.Params(gocontext.Background(), &types.QueryParams{}) suite.Require().NoError(err) suite.Require().Equal(params.Params, app.MintKeeper.GetParams(ctx)) - inflation, err := queryClient.Inflation(gocontext.Background(), &types.QueryInflationRequest{}) + inflation, err := queryClient.Inflation(gocontext.Background(), &types.QueryInflation{}) suite.Require().NoError(err) appInflation, err := app.MintKeeper.GetInflation(ctx) diff --git a/x/jklmint/keeper/querier.go b/x/jklmint/keeper/querier.go index 1fac76093..0ea1bae8e 100644 --- a/x/jklmint/keeper/querier.go +++ b/x/jklmint/keeper/querier.go @@ -16,7 +16,7 @@ func NewQuerier(k Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { case types.QueryParameters: return queryParams(ctx, k, legacyQuerierCdc) - case types.QueryInflation: + case types.QueryInflationKey: return queryInflation(ctx, k, legacyQuerierCdc) default: diff --git a/x/jklmint/types/keys.go b/x/jklmint/types/keys.go index b8d281dc8..6d918abb4 100644 --- a/x/jklmint/types/keys.go +++ b/x/jklmint/types/keys.go @@ -19,8 +19,8 @@ const ( MemStoreKey = "mem_jklmint" // Query endpoints supported by the minting querier - QueryParameters = "parameters" - QueryInflation = "inflation" + QueryParameters = "parameters" + QueryInflationKey = "inflation" ) func KeyPrefix(p string) []byte { diff --git a/x/jklmint/types/query.pb.go b/x/jklmint/types/query.pb.go index ebf78a7c0..4bb08f011 100644 --- a/x/jklmint/types/query.pb.go +++ b/x/jklmint/types/query.pb.go @@ -31,21 +31,21 @@ var _ = math.Inf const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { +type QueryParams struct { } -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { +func (m *QueryParams) Reset() { *m = QueryParams{} } +func (m *QueryParams) String() string { return proto.CompactTextString(m) } +func (*QueryParams) ProtoMessage() {} +func (*QueryParams) Descriptor() ([]byte, []int) { return fileDescriptor_18b2f9a9be818a21, []int{0} } -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParams.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -55,17 +55,17 @@ func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) +func (m *QueryParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParams.Merge(m, src) } -func (m *QueryParamsRequest) XXX_Size() int { +func (m *QueryParams) XXX_Size() int { return m.Size() } -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +func (m *QueryParams) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParams.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryParams proto.InternalMessageInfo // QueryParamsResponse is response type for the Query/Params RPC method. type QueryParamsResponse struct { @@ -114,21 +114,21 @@ func (m *QueryParamsResponse) GetParams() Params { } // QueryInflationRequest is the request type for the Query/Inflation RPC method. -type QueryInflationRequest struct { +type QueryInflation struct { } -func (m *QueryInflationRequest) Reset() { *m = QueryInflationRequest{} } -func (m *QueryInflationRequest) String() string { return proto.CompactTextString(m) } -func (*QueryInflationRequest) ProtoMessage() {} -func (*QueryInflationRequest) Descriptor() ([]byte, []int) { +func (m *QueryInflation) Reset() { *m = QueryInflation{} } +func (m *QueryInflation) String() string { return proto.CompactTextString(m) } +func (*QueryInflation) ProtoMessage() {} +func (*QueryInflation) Descriptor() ([]byte, []int) { return fileDescriptor_18b2f9a9be818a21, []int{2} } -func (m *QueryInflationRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryInflation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryInflationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryInflation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryInflationRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryInflation.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -138,17 +138,17 @@ func (m *QueryInflationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byt return b[:n], nil } } -func (m *QueryInflationRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryInflationRequest.Merge(m, src) +func (m *QueryInflation) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryInflation.Merge(m, src) } -func (m *QueryInflationRequest) XXX_Size() int { +func (m *QueryInflation) XXX_Size() int { return m.Size() } -func (m *QueryInflationRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryInflationRequest.DiscardUnknown(m) +func (m *QueryInflation) XXX_DiscardUnknown() { + xxx_messageInfo_QueryInflation.DiscardUnknown(m) } -var xxx_messageInfo_QueryInflationRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryInflation proto.InternalMessageInfo // QueryInflationResponse is the response type for the Query/Inflation RPC // method. @@ -191,41 +191,40 @@ func (m *QueryInflationResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryInflationResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.jklmint.QueryParamsRequest") + proto.RegisterType((*QueryParams)(nil), "canine_chain.jklmint.QueryParams") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.jklmint.QueryParamsResponse") - proto.RegisterType((*QueryInflationRequest)(nil), "canine_chain.jklmint.QueryInflationRequest") + proto.RegisterType((*QueryInflation)(nil), "canine_chain.jklmint.QueryInflation") proto.RegisterType((*QueryInflationResponse)(nil), "canine_chain.jklmint.QueryInflationResponse") } func init() { proto.RegisterFile("canine_chain/jklmint/query.proto", fileDescriptor_18b2f9a9be818a21) } var fileDescriptor_18b2f9a9be818a21 = []byte{ - // 392 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x4f, 0xe2, 0x40, - 0x14, 0xc7, 0x5b, 0xb2, 0x4b, 0xc2, 0xec, 0x9e, 0x66, 0xd9, 0x5d, 0x53, 0xb1, 0x60, 0x4d, 0x08, - 0x46, 0xe9, 0x04, 0xbc, 0x79, 0x24, 0x5e, 0x4c, 0x38, 0x08, 0x47, 0x2f, 0x66, 0x5a, 0x87, 0x52, - 0x68, 0x67, 0x0a, 0x33, 0x18, 0xb9, 0xf2, 0x01, 0x8c, 0x89, 0x67, 0xbf, 0x0f, 0x47, 0x12, 0x2f, - 0xc6, 0x03, 0x31, 0xe0, 0x07, 0x31, 0x4c, 0x07, 0x44, 0x6c, 0x0c, 0xa7, 0x36, 0x6f, 0xfe, 0xef, - 0xfd, 0x7f, 0xef, 0x9f, 0x07, 0x0a, 0x2e, 0xa6, 0x3e, 0x25, 0x57, 0x6e, 0x1b, 0xfb, 0x14, 0x75, - 0xba, 0x41, 0xe8, 0x53, 0x81, 0x7a, 0x03, 0xd2, 0x1f, 0xda, 0x51, 0x9f, 0x09, 0x06, 0xb3, 0xeb, - 0x0a, 0x5b, 0x29, 0x8c, 0xac, 0xc7, 0x3c, 0x26, 0x05, 0x68, 0xf1, 0x17, 0x6b, 0x8d, 0x9c, 0xc7, - 0x98, 0x17, 0x10, 0x84, 0x23, 0x1f, 0x61, 0x4a, 0x99, 0xc0, 0xc2, 0x67, 0x94, 0xab, 0xd7, 0xfd, - 0x44, 0xaf, 0x08, 0xf7, 0x71, 0xa8, 0x24, 0x56, 0x16, 0xc0, 0xc6, 0xc2, 0xfb, 0x42, 0x16, 0x9b, - 0xa4, 0x37, 0x20, 0x5c, 0x58, 0x0d, 0xf0, 0xe7, 0x53, 0x95, 0x47, 0x8c, 0x72, 0x02, 0x4f, 0x41, - 0x3a, 0x6e, 0xde, 0xd1, 0x0b, 0x7a, 0xe9, 0x57, 0x35, 0x67, 0x27, 0xa1, 0xda, 0x71, 0x57, 0xed, - 0xc7, 0x78, 0x9a, 0xd7, 0x9a, 0xaa, 0xc3, 0xfa, 0x0f, 0xfe, 0xca, 0x91, 0xe7, 0xb4, 0x15, 0x48, - 0xc8, 0xa5, 0x57, 0x0b, 0xfc, 0xdb, 0x7c, 0x50, 0x76, 0x75, 0x90, 0xf1, 0x97, 0x45, 0xe9, 0xf8, - 0xbb, 0x66, 0x2f, 0x66, 0xbe, 0x4c, 0xf3, 0x45, 0xcf, 0x17, 0xed, 0x81, 0x63, 0xbb, 0x2c, 0x44, - 0x2e, 0xe3, 0x21, 0xe3, 0xea, 0x53, 0xe6, 0xd7, 0x5d, 0x24, 0x86, 0x11, 0xe1, 0xf6, 0x19, 0x71, - 0x9b, 0x1f, 0x03, 0xaa, 0x8f, 0x29, 0xf0, 0x53, 0x1a, 0xc1, 0x91, 0x0e, 0xd2, 0x31, 0x23, 0x2c, - 0x25, 0x6f, 0xf0, 0x35, 0x12, 0xe3, 0x70, 0x0b, 0x65, 0xcc, 0x6d, 0x1d, 0x8c, 0x9e, 0xde, 0x1e, - 0x52, 0x7b, 0x70, 0x77, 0x89, 0x26, 0x63, 0xbf, 0xa9, 0x38, 0x44, 0xe0, 0x8a, 0x8a, 0x1f, 0xde, - 0xe9, 0x20, 0xb3, 0x5a, 0x19, 0x1e, 0x7d, 0x33, 0x7d, 0x33, 0x31, 0xe3, 0x78, 0x3b, 0xb1, 0xa2, - 0x29, 0x4a, 0x9a, 0x02, 0x34, 0x13, 0x69, 0x56, 0xf9, 0xd4, 0xea, 0xe3, 0x99, 0xa9, 0x4f, 0x66, - 0xa6, 0xfe, 0x3a, 0x33, 0xf5, 0xfb, 0xb9, 0xa9, 0x4d, 0xe6, 0xa6, 0xf6, 0x3c, 0x37, 0xb5, 0xcb, - 0xea, 0x5a, 0xd8, 0x1d, 0xec, 0x76, 0x71, 0x50, 0xc7, 0x0e, 0x47, 0x31, 0x44, 0x39, 0x3e, 0xae, - 0xdb, 0xd5, 0x79, 0xc9, 0xf0, 0x9d, 0xb4, 0x3c, 0xaf, 0x93, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x3f, 0xfa, 0x1b, 0xa0, 0xef, 0x02, 0x00, 0x00, + // 384 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0x4e, 0xcc, 0xcb, + 0xcc, 0x4b, 0x8d, 0x4f, 0xce, 0x48, 0xcc, 0xcc, 0xd3, 0xcf, 0xca, 0xce, 0xc9, 0xcd, 0xcc, 0x2b, + 0xd1, 0x2f, 0x2c, 0x4d, 0x2d, 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x41, 0x56, + 0xa1, 0x07, 0x55, 0x21, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa0, 0x0f, 0x62, 0x41, 0xd4, + 0x4a, 0xc9, 0xa4, 0xe7, 0xe7, 0xa7, 0xe7, 0xa4, 0xea, 0x27, 0x16, 0x64, 0xea, 0x27, 0xe6, 0xe5, + 0xe5, 0x97, 0x24, 0x96, 0x64, 0xe6, 0xe7, 0x15, 0x43, 0x65, 0x15, 0xb1, 0xda, 0x55, 0x90, 0x58, + 0x94, 0x98, 0x0b, 0x55, 0xa2, 0xc4, 0xcb, 0xc5, 0x1d, 0x08, 0xb2, 0x3b, 0x00, 0x2c, 0xa8, 0x14, + 0xc8, 0x25, 0x8c, 0xc4, 0x0d, 0x4a, 0x2d, 0x2e, 0xc8, 0xcf, 0x2b, 0x4e, 0x15, 0xb2, 0xe2, 0x62, + 0x83, 0xe8, 0x92, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x36, 0x92, 0xd1, 0xc3, 0xe6, 0x46, 0x3d, 0x88, + 0x2e, 0x27, 0x96, 0x13, 0xf7, 0xe4, 0x19, 0x82, 0xa0, 0x3a, 0x94, 0x04, 0xb8, 0xf8, 0xc0, 0x46, + 0x7a, 0xe6, 0xa5, 0xe5, 0x80, 0x5d, 0xa7, 0x94, 0xc6, 0x25, 0x86, 0x2a, 0x02, 0xb7, 0xc7, 0x87, + 0x8b, 0x33, 0x13, 0x26, 0x08, 0xb6, 0x8a, 0xc7, 0x49, 0x0f, 0x64, 0xd8, 0xad, 0x7b, 0xf2, 0x6a, + 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xc9, 0xf9, 0xc5, 0xb9, 0xf9, + 0xc5, 0x50, 0x4a, 0xb7, 0x38, 0x25, 0x5b, 0xbf, 0xa4, 0xb2, 0x20, 0xb5, 0x58, 0xcf, 0x25, 0x35, + 0x39, 0x08, 0x61, 0x80, 0x51, 0x1f, 0x13, 0x17, 0x2b, 0xd8, 0x22, 0xa1, 0x6a, 0x2e, 0x36, 0x88, + 0xdb, 0x84, 0x14, 0xb1, 0xbb, 0x1c, 0xc9, 0xd3, 0x52, 0x9a, 0x04, 0x95, 0xc0, 0xdc, 0xab, 0xa4, + 0xdc, 0x74, 0xf9, 0xc9, 0x64, 0x26, 0x59, 0x21, 0x69, 0x98, 0x93, 0xc0, 0x01, 0x5c, 0x66, 0x98, + 0x94, 0x5a, 0x92, 0x68, 0x08, 0x0d, 0x68, 0xa1, 0x76, 0x46, 0x2e, 0x4e, 0xb8, 0x57, 0x85, 0x54, + 0xf0, 0x98, 0x0e, 0x57, 0x25, 0xa5, 0x43, 0x8c, 0x2a, 0xb8, 0x33, 0xd4, 0xc0, 0xce, 0x50, 0x10, + 0x92, 0xc3, 0xea, 0x0c, 0x78, 0x80, 0x38, 0xf9, 0x9c, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, + 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, + 0x1c, 0x43, 0x94, 0x11, 0x52, 0xe8, 0x66, 0x25, 0x26, 0x67, 0x27, 0xe6, 0xf8, 0x24, 0x26, 0x15, + 0xeb, 0x43, 0x1c, 0xa1, 0x0b, 0x49, 0x3f, 0x15, 0xf0, 0x14, 0x04, 0x0e, 0xed, 0x24, 0x36, 0x70, + 0x0a, 0x32, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xef, 0x1b, 0x55, 0xca, 0xd2, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -241,9 +240,9 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { // Parameters queries the parameters of the module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) // Inflation returns the current minting inflation value. - Inflation(ctx context.Context, in *QueryInflationRequest, opts ...grpc.CallOption) (*QueryInflationResponse, error) + Inflation(ctx context.Context, in *QueryInflation, opts ...grpc.CallOption) (*QueryInflationResponse, error) } type queryClient struct { @@ -254,7 +253,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { +func (c *queryClient) Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) err := c.cc.Invoke(ctx, "/canine_chain.jklmint.Query/Params", in, out, opts...) if err != nil { @@ -263,7 +262,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } -func (c *queryClient) Inflation(ctx context.Context, in *QueryInflationRequest, opts ...grpc.CallOption) (*QueryInflationResponse, error) { +func (c *queryClient) Inflation(ctx context.Context, in *QueryInflation, opts ...grpc.CallOption) (*QueryInflationResponse, error) { out := new(QueryInflationResponse) err := c.cc.Invoke(ctx, "/canine_chain.jklmint.Query/Inflation", in, out, opts...) if err != nil { @@ -275,19 +274,19 @@ func (c *queryClient) Inflation(ctx context.Context, in *QueryInflationRequest, // QueryServer is the server API for Query service. type QueryServer interface { // Parameters queries the parameters of the module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + Params(context.Context, *QueryParams) (*QueryParamsResponse, error) // Inflation returns the current minting inflation value. - Inflation(context.Context, *QueryInflationRequest) (*QueryInflationResponse, error) + Inflation(context.Context, *QueryInflation) (*QueryInflationResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParams) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) Inflation(ctx context.Context, req *QueryInflationRequest) (*QueryInflationResponse, error) { +func (*UnimplementedQueryServer) Inflation(ctx context.Context, req *QueryInflation) (*QueryInflationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Inflation not implemented") } @@ -296,7 +295,7 @@ func RegisterQueryServer(s grpc1.Server, srv QueryServer) { } func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) + in := new(QueryParams) if err := dec(in); err != nil { return nil, err } @@ -308,13 +307,13 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf FullMethod: "/canine_chain.jklmint.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParams)) } return interceptor(ctx, in, info, handler) } func _Query_Inflation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryInflationRequest) + in := new(QueryInflation) if err := dec(in); err != nil { return nil, err } @@ -326,7 +325,7 @@ func _Query_Inflation_Handler(srv interface{}, ctx context.Context, dec func(int FullMethod: "/canine_chain.jklmint.Query/Inflation", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Inflation(ctx, req.(*QueryInflationRequest)) + return srv.(QueryServer).Inflation(ctx, req.(*QueryInflation)) } return interceptor(ctx, in, info, handler) } @@ -348,7 +347,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Metadata: "canine_chain/jklmint/query.proto", } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParams) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -358,12 +357,12 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -404,7 +403,7 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryInflationRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryInflation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -414,12 +413,12 @@ func (m *QueryInflationRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryInflationRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryInflation) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryInflationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryInflation) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -471,7 +470,7 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryParamsRequest) Size() (n int) { +func (m *QueryParams) Size() (n int) { if m == nil { return 0 } @@ -491,7 +490,7 @@ func (m *QueryParamsResponse) Size() (n int) { return n } -func (m *QueryInflationRequest) Size() (n int) { +func (m *QueryInflation) Size() (n int) { if m == nil { return 0 } @@ -517,7 +516,7 @@ func sovQuery(x uint64) (n int) { func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParams) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -540,10 +539,10 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParams: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParams: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -650,7 +649,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryInflationRequest) Unmarshal(dAtA []byte) error { +func (m *QueryInflation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -673,10 +672,10 @@ func (m *QueryInflationRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryInflationRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryInflation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryInflationRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryInflation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: diff --git a/x/jklmint/types/query.pb.gw.go b/x/jklmint/types/query.pb.gw.go index f0eaea3ce..86f6097b4 100644 --- a/x/jklmint/types/query.pb.gw.go +++ b/x/jklmint/types/query.pb.gw.go @@ -34,7 +34,7 @@ var _ = descriptor.ForMessage var _ = metadata.Join func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -43,7 +43,7 @@ func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, cl } func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := server.Params(ctx, &protoReq) @@ -52,7 +52,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } func request_Query_Inflation_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryInflationRequest + var protoReq QueryInflation var metadata runtime.ServerMetadata msg, err := client.Inflation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -61,7 +61,7 @@ func request_Query_Inflation_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_Inflation_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryInflationRequest + var protoReq QueryInflation var metadata runtime.ServerMetadata msg, err := server.Inflation(ctx, &protoReq) From 218b4c6051a4ed2d519e03586d6003c2351703c8 Mon Sep 17 00:00:00 2001 From: marston Date: Wed, 8 Nov 2023 23:21:15 -0500 Subject: [PATCH 062/256] filetree module query refactor --- proto/canine_chain/filetree/query.proto | 22 +- x/filetree/client/cli/query_files.go | 6 +- x/filetree/client/cli/query_get_keys.go | 2 +- x/filetree/client/cli/query_params.go | 2 +- x/filetree/client/cli/query_pubkey.go | 4 +- x/filetree/client/cli/tx_add_editors.go | 4 +- x/filetree/client/cli/tx_add_viewers.go | 4 +- x/filetree/client/cli/tx_remove_editors.go | 2 +- x/filetree/client/cli/tx_remove_viewers.go | 2 +- x/filetree/client/cli/utils.go | 2 +- x/filetree/keeper/grpc_query_files.go | 4 +- x/filetree/keeper/grpc_query_params.go | 2 +- x/filetree/keeper/grpc_query_pubkey.go | 4 +- .../keeper/msg_server_add_editors_test.go | 2 +- .../keeper/msg_server_add_viewers_test.go | 4 +- .../keeper/msg_server_change_owner_test.go | 6 +- .../keeper/msg_server_delete_file_test.go | 2 +- .../keeper/msg_server_remove_editors_test.go | 4 +- .../keeper/msg_server_remove_viewers_test.go | 4 +- .../keeper/msg_server_reset_editors_test.go | 4 +- .../keeper/msg_server_reset_viewers_test.go | 4 +- x/filetree/types/query.pb.go | 378 +++++++++--------- x/filetree/types/query.pb.gw.go | 20 +- 23 files changed, 244 insertions(+), 244 deletions(-) diff --git a/proto/canine_chain/filetree/query.proto b/proto/canine_chain/filetree/query.proto index 297b8bf5e..dfef7ec35 100644 --- a/proto/canine_chain/filetree/query.proto +++ b/proto/canine_chain/filetree/query.proto @@ -13,35 +13,35 @@ option go_package = "github.com/jackalLabs/canine-chain/x/filetree/types"; // Query defines the gRPC querier service. service Query { // Parameters queries the parameters of the module. - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + rpc Params(QueryParams) returns (QueryParamsResponse) { option (google.api.http).get = "/jackal/canine/filetree/params"; } // Queries a Files by index. - rpc File(QueryFileRequest) returns (QueryFileResponse) { + rpc File(QueryFile) returns (QueryFileResponse) { option (google.api.http).get = "/jackal/canine-chain/filetree/files/{address}/{owner_address}"; } // Queries a list of Files items. - rpc AllFiles(QueryAllFilesRequest) returns (QueryAllFilesResponse) { + rpc AllFiles(QueryAllFiles) returns (QueryAllFilesResponse) { option (google.api.http).get = "/jackal/canine-chain/filetree/files"; } // Queries a Pubkey by index. - rpc PubKey(QueryPubKeyRequest) returns (QueryPubKeyResponse) { + rpc PubKey(QueryPubKey) returns (QueryPubKeyResponse) { option (google.api.http).get = "/jackal/canine-chain/filetree/pubkeys/{address}"; } // Queries a list of Pubkey items. - rpc AllPubKeys(QueryAllPubKeysRequest) returns (QueryAllPubKeysResponse) { + rpc AllPubKeys(QueryAllPubKeys) returns (QueryAllPubKeysResponse) { option (google.api.http).get = "/jackal/canine-chain/filetree/pubkeys"; } } -// QueryParamsRequest is request type for the Query/Params RPC method. -message QueryParamsRequest {} +// QueryParams is request type for the Query/Params RPC method. +message QueryParams {} // QueryParamsResponse is response type for the Query/Params RPC method. message QueryParamsResponse { @@ -49,14 +49,14 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } -message QueryFileRequest { +message QueryFile { string address = 1; string owner_address = 2; } message QueryFileResponse { Files file = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllFilesRequest { +message QueryAllFiles { cosmos.base.query.v1beta1.PageRequest pagination = 1; } @@ -65,13 +65,13 @@ message QueryAllFilesResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryPubKeyRequest { string address = 1; } +message QueryPubKey { string address = 1; } message QueryPubKeyResponse { Pubkey pub_key = 1 [ (gogoproto.nullable) = false ]; } -message QueryAllPubKeysRequest { +message QueryAllPubKeys { cosmos.base.query.v1beta1.PageRequest pagination = 1; } diff --git a/x/filetree/client/cli/query_files.go b/x/filetree/client/cli/query_files.go index e9ead016c..6556bfdda 100644 --- a/x/filetree/client/cli/query_files.go +++ b/x/filetree/client/cli/query_files.go @@ -26,7 +26,7 @@ func CmdListFiles() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllFilesRequest{ + params := &types.QueryAllFiles{ Pagination: pageReq, } @@ -59,7 +59,7 @@ func CmdShowFiles() *cobra.Command { argAddress := args[0] argOwnerAddress := args[1] - params := &types.QueryFileRequest{ + params := &types.QueryFile{ Address: argAddress, OwnerAddress: argOwnerAddress, } @@ -107,7 +107,7 @@ func CmdShowFileFromPath() *cobra.Command { Hash := H.Sum(nil) ownerAddress := fmt.Sprintf("%x", Hash) - params := &types.QueryFileRequest{ + params := &types.QueryFile{ Address: merklePath, OwnerAddress: ownerAddress, } diff --git a/x/filetree/client/cli/query_get_keys.go b/x/filetree/client/cli/query_get_keys.go index a31132fb8..c3b154725 100644 --- a/x/filetree/client/cli/query_get_keys.go +++ b/x/filetree/client/cli/query_get_keys.go @@ -48,7 +48,7 @@ func CmdGetKeys() *cobra.Command { Hash := H.Sum(nil) ownerString := fmt.Sprintf("%x", Hash) // Make the owner string to find the file - params := &types.QueryFileRequest{ + params := &types.QueryFile{ Address: merklePath, OwnerAddress: ownerString, } diff --git a/x/filetree/client/cli/query_params.go b/x/filetree/client/cli/query_params.go index 8ebf7cab6..efd9cf6e1 100644 --- a/x/filetree/client/cli/query_params.go +++ b/x/filetree/client/cli/query_params.go @@ -19,7 +19,7 @@ func CmdQueryParams() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + res, err := queryClient.Params(context.Background(), &types.QueryParams{}) if err != nil { return err } diff --git a/x/filetree/client/cli/query_pubkey.go b/x/filetree/client/cli/query_pubkey.go index 792d66b2c..c3b913560 100644 --- a/x/filetree/client/cli/query_pubkey.go +++ b/x/filetree/client/cli/query_pubkey.go @@ -23,7 +23,7 @@ func CmdListPubkey() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) - params := &types.QueryAllPubKeysRequest{ + params := &types.QueryAllPubKeys{ Pagination: pageReq, } @@ -54,7 +54,7 @@ func CmdShowPubkey() *cobra.Command { argAddress := args[0] - params := &types.QueryPubKeyRequest{ + params := &types.QueryPubKey{ Address: argAddress, } diff --git a/x/filetree/client/cli/tx_add_editors.go b/x/filetree/client/cli/tx_add_editors.go index b9b6379d8..609f963b4 100644 --- a/x/filetree/client/cli/tx_add_editors.go +++ b/x/filetree/client/cli/tx_add_editors.go @@ -57,7 +57,7 @@ func CmdAddEditors() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.PubKey(cmd.Context(), &types.QueryPubKeyRequest{Address: key.String()}) + res, err := queryClient.PubKey(cmd.Context(), &types.QueryPubKey{Address: key.String()}) if err != nil { return types.ErrPubKeyNotFound } @@ -67,7 +67,7 @@ func CmdAddEditors() *cobra.Command { return err } // Perhaps below file query should be replaced with fully fledged 'query file' function that checks permissions first - params := &types.QueryFileRequest{ + params := &types.QueryFile{ Address: merklePath, OwnerAddress: ownerChainAddress, } diff --git a/x/filetree/client/cli/tx_add_viewers.go b/x/filetree/client/cli/tx_add_viewers.go index e0715968d..355953dfa 100644 --- a/x/filetree/client/cli/tx_add_viewers.go +++ b/x/filetree/client/cli/tx_add_viewers.go @@ -56,7 +56,7 @@ func CmdAddViewers() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - res, err := queryClient.PubKey(cmd.Context(), &types.QueryPubKeyRequest{Address: key.String()}) + res, err := queryClient.PubKey(cmd.Context(), &types.QueryPubKey{Address: key.String()}) if err != nil { return types.ErrPubKeyNotFound } @@ -66,7 +66,7 @@ func CmdAddViewers() *cobra.Command { return err } // Perhaps below file query should be replaced with fully fledged 'query file' function that checks permissions first - params := &types.QueryFileRequest{ + params := &types.QueryFile{ Address: merklePath, OwnerAddress: ownerChainAddress, } diff --git a/x/filetree/client/cli/tx_remove_editors.go b/x/filetree/client/cli/tx_remove_editors.go index 2a15747d8..2d9860549 100644 --- a/x/filetree/client/cli/tx_remove_editors.go +++ b/x/filetree/client/cli/tx_remove_editors.go @@ -43,7 +43,7 @@ func CmdRemoveEditors() *cobra.Command { continue } - params := &types.QueryFileRequest{ + params := &types.QueryFile{ Address: merklePath, OwnerAddress: ownerChainAddress, } diff --git a/x/filetree/client/cli/tx_remove_viewers.go b/x/filetree/client/cli/tx_remove_viewers.go index c258e2eb7..96c5f1250 100644 --- a/x/filetree/client/cli/tx_remove_viewers.go +++ b/x/filetree/client/cli/tx_remove_viewers.go @@ -43,7 +43,7 @@ func CmdRemoveViewers() *cobra.Command { continue } - params := &types.QueryFileRequest{ + params := &types.QueryFile{ Address: merklePath, OwnerAddress: ownerChainAddress, } diff --git a/x/filetree/client/cli/utils.go b/x/filetree/client/cli/utils.go index 4c20a3a07..363e99746 100644 --- a/x/filetree/client/cli/utils.go +++ b/x/filetree/client/cli/utils.go @@ -66,7 +66,7 @@ func encryptFileAESKey(cmd *cobra.Command, key string, argKeys string) ([]byte, queryClient := filetypes.NewQueryClient(clientCtx) - res, err := queryClient.PubKey(cmd.Context(), &filetypes.QueryPubKeyRequest{Address: key}) + res, err := queryClient.PubKey(cmd.Context(), &filetypes.QueryPubKey{Address: key}) if err != nil { return nil, filetypes.ErrPubKeyNotFound } diff --git a/x/filetree/keeper/grpc_query_files.go b/x/filetree/keeper/grpc_query_files.go index c455be943..cf46c2dab 100644 --- a/x/filetree/keeper/grpc_query_files.go +++ b/x/filetree/keeper/grpc_query_files.go @@ -12,7 +12,7 @@ import ( ) // To remove -func (k Keeper) AllFiles(c context.Context, req *types.QueryAllFilesRequest) (*types.QueryAllFilesResponse, error) { +func (k Keeper) AllFiles(c context.Context, req *types.QueryAllFiles) (*types.QueryAllFilesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -39,7 +39,7 @@ func (k Keeper) AllFiles(c context.Context, req *types.QueryAllFilesRequest) (*t return &types.QueryAllFilesResponse{Files: filess, Pagination: pageRes}, nil } -func (k Keeper) File(c context.Context, req *types.QueryFileRequest) (*types.QueryFileResponse, error) { +func (k Keeper) File(c context.Context, req *types.QueryFile) (*types.QueryFileResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/filetree/keeper/grpc_query_params.go b/x/filetree/keeper/grpc_query_params.go index 3f56dd154..f2bd8fcbd 100644 --- a/x/filetree/keeper/grpc_query_params.go +++ b/x/filetree/keeper/grpc_query_params.go @@ -9,7 +9,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (k Keeper) Params(c context.Context, req *types.QueryParams) (*types.QueryParamsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/filetree/keeper/grpc_query_pubkey.go b/x/filetree/keeper/grpc_query_pubkey.go index f34e18c91..663bd8771 100644 --- a/x/filetree/keeper/grpc_query_pubkey.go +++ b/x/filetree/keeper/grpc_query_pubkey.go @@ -11,7 +11,7 @@ import ( "google.golang.org/grpc/status" ) -func (k Keeper) AllPubKeys(c context.Context, req *types.QueryAllPubKeysRequest) (*types.QueryAllPubKeysResponse, error) { +func (k Keeper) AllPubKeys(c context.Context, req *types.QueryAllPubKeys) (*types.QueryAllPubKeysResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -38,7 +38,7 @@ func (k Keeper) AllPubKeys(c context.Context, req *types.QueryAllPubKeysRequest) return &types.QueryAllPubKeysResponse{PubKey: pubkeys, Pagination: pageRes}, nil } -func (k Keeper) PubKey(c context.Context, req *types.QueryPubKeyRequest) (*types.QueryPubKeyResponse, error) { +func (k Keeper) PubKey(c context.Context, req *types.QueryPubKey) (*types.QueryPubKeyResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } diff --git a/x/filetree/keeper/msg_server_add_editors_test.go b/x/filetree/keeper/msg_server_add_editors_test.go index 79af6d6c4..b4a843298 100644 --- a/x/filetree/keeper/msg_server_add_editors_test.go +++ b/x/filetree/keeper/msg_server_add_editors_test.go @@ -99,7 +99,7 @@ func (suite *KeeperTestSuite) TestMsgAddEditors() { suite.Require().NoError(err) suite.Require().EqualValues(types.MsgAddEditorsResponse{}, *res) - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: aliceHomeMerklePath, OwnerAddress: ownerAddress, } diff --git a/x/filetree/keeper/msg_server_add_viewers_test.go b/x/filetree/keeper/msg_server_add_viewers_test.go index 839d3fc7f..83bd94e2a 100644 --- a/x/filetree/keeper/msg_server_add_viewers_test.go +++ b/x/filetree/keeper/msg_server_add_viewers_test.go @@ -85,7 +85,7 @@ func (suite *KeeperTestSuite) TestMsgAddViewers() { // If alice wants to share pepe with bob, she will take bob's public key from chain and use ECIES to encrypt pepeAESKeyAndIV - pubKeyReq := types.QueryPubKeyRequest{ + pubKeyReq := types.QueryPubKey{ Address: bob, } @@ -161,7 +161,7 @@ func (suite *KeeperTestSuite) TestMsgAddViewers() { suite.Require().EqualValues(types.MsgAddViewersResponse{}, *res) // Let's confirm that bob is a viewer - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: ownerAddress, } diff --git a/x/filetree/keeper/msg_server_change_owner_test.go b/x/filetree/keeper/msg_server_change_owner_test.go index 0dab01f1b..bac711c95 100644 --- a/x/filetree/keeper/msg_server_change_owner_test.go +++ b/x/filetree/keeper/msg_server_change_owner_test.go @@ -40,7 +40,7 @@ func (suite *KeeperTestSuite) TestMsgChangeOwners() { // Let's query the file after it was set to confirm that alice is the owner - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } @@ -142,7 +142,7 @@ func (suite *KeeperTestSuite) TestMsgChangeOwners() { // Because filetree entries are indexed (keyed) by address and ownerAddress, querying for a pepe.jpg that belongs to alice as an owner // should fail here because alice gave away pepe.jpg to bob - fileReq1 := types.QueryFileRequest{ + fileReq1 := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } @@ -154,7 +154,7 @@ func (suite *KeeperTestSuite) TestMsgChangeOwners() { bobAccountHash := types.HashThenHex(bob) bobOwnerAddress := types.MakeOwnerAddress(pepeMerklePath, bobAccountHash) - fileReq2 := types.QueryFileRequest{ + fileReq2 := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: bobOwnerAddress, } diff --git a/x/filetree/keeper/msg_server_delete_file_test.go b/x/filetree/keeper/msg_server_delete_file_test.go index 3a6b904ea..c20841701 100644 --- a/x/filetree/keeper/msg_server_delete_file_test.go +++ b/x/filetree/keeper/msg_server_delete_file_test.go @@ -49,7 +49,7 @@ func (suite *KeeperTestSuite) TestMsgDeleteFile() { // Let's confirm that bob has edit access before moving on - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: types.MerklePath("s/home/"), OwnerAddress: types.MakeOwnerAddress(types.MerklePath("s/home/"), aliceAccountHash), } diff --git a/x/filetree/keeper/msg_server_remove_editors_test.go b/x/filetree/keeper/msg_server_remove_editors_test.go index b50046e91..dfe17a63d 100644 --- a/x/filetree/keeper/msg_server_remove_editors_test.go +++ b/x/filetree/keeper/msg_server_remove_editors_test.go @@ -46,7 +46,7 @@ func (suite *KeeperTestSuite) TestMsgRemoveEditors() { // Let's query the file after it was set to confirm that alice and bob are editors - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } @@ -124,7 +124,7 @@ func (suite *KeeperTestSuite) TestMsgRemoveEditors() { suite.Require().EqualValues(types.MsgRemoveEditorsResponse{}, *res) // Let's confirm that bob is no longer an editor - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } diff --git a/x/filetree/keeper/msg_server_remove_viewers_test.go b/x/filetree/keeper/msg_server_remove_viewers_test.go index 5ee906a67..21dce3a23 100644 --- a/x/filetree/keeper/msg_server_remove_viewers_test.go +++ b/x/filetree/keeper/msg_server_remove_viewers_test.go @@ -60,7 +60,7 @@ func (suite *KeeperTestSuite) TestMsgRemoveViewers() { // Let's query the file after it was set to confirm that alice and bob are viewers - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } @@ -138,7 +138,7 @@ func (suite *KeeperTestSuite) TestMsgRemoveViewers() { suite.Require().EqualValues(types.MsgRemoveViewersResponse{}, *res) // Let's confirm that bob is no longer a viewer - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } diff --git a/x/filetree/keeper/msg_server_reset_editors_test.go b/x/filetree/keeper/msg_server_reset_editors_test.go index e403e17fa..bc390e180 100644 --- a/x/filetree/keeper/msg_server_reset_editors_test.go +++ b/x/filetree/keeper/msg_server_reset_editors_test.go @@ -46,7 +46,7 @@ func (suite *KeeperTestSuite) TestMsgResetEditors() { // Let's query the file after it was set to confirm that alice and bob are editors - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } @@ -130,7 +130,7 @@ func (suite *KeeperTestSuite) TestMsgResetEditors() { suite.Require().EqualValues(types.MsgRemoveEditorsResponse{}, *res) // Let's confirm that bob is no longer an editor - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } diff --git a/x/filetree/keeper/msg_server_reset_viewers_test.go b/x/filetree/keeper/msg_server_reset_viewers_test.go index a08c8d0ba..d31a6af07 100644 --- a/x/filetree/keeper/msg_server_reset_viewers_test.go +++ b/x/filetree/keeper/msg_server_reset_viewers_test.go @@ -60,7 +60,7 @@ func (suite *KeeperTestSuite) TestMsgResetViewers() { // Let's query the file after it was set to confirm that alice, bob, and charlie are viewers - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } @@ -144,7 +144,7 @@ func (suite *KeeperTestSuite) TestMsgResetViewers() { suite.Require().EqualValues(types.MsgRemoveViewersResponse{}, *res) // Let's confirm that bob and charlie are no longer viewers - fileReq := types.QueryFileRequest{ + fileReq := types.QueryFile{ Address: pepeMerklePath, OwnerAddress: aliceOwnerAddress, } diff --git a/x/filetree/types/query.pb.go b/x/filetree/types/query.pb.go index 418ee895a..81763c58e 100644 --- a/x/filetree/types/query.pb.go +++ b/x/filetree/types/query.pb.go @@ -30,22 +30,22 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// QueryParamsRequest is request type for the Query/Params RPC method. -type QueryParamsRequest struct { +// QueryParams is request type for the Query/Params RPC method. +type QueryParams struct { } -func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } -func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryParamsRequest) ProtoMessage() {} -func (*QueryParamsRequest) Descriptor() ([]byte, []int) { +func (m *QueryParams) Reset() { *m = QueryParams{} } +func (m *QueryParams) String() string { return proto.CompactTextString(m) } +func (*QueryParams) ProtoMessage() {} +func (*QueryParams) Descriptor() ([]byte, []int) { return fileDescriptor_f2d116acb9d238bd, []int{0} } -func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryParams.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -55,17 +55,17 @@ func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParamsRequest.Merge(m, src) +func (m *QueryParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParams.Merge(m, src) } -func (m *QueryParamsRequest) XXX_Size() int { +func (m *QueryParams) XXX_Size() int { return m.Size() } -func (m *QueryParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +func (m *QueryParams) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParams.DiscardUnknown(m) } -var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryParams proto.InternalMessageInfo // QueryParamsResponse is response type for the Query/Params RPC method. type QueryParamsResponse struct { @@ -113,23 +113,23 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -type QueryFileRequest struct { +type QueryFile struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` OwnerAddress string `protobuf:"bytes,2,opt,name=owner_address,json=ownerAddress,proto3" json:"owner_address,omitempty"` } -func (m *QueryFileRequest) Reset() { *m = QueryFileRequest{} } -func (m *QueryFileRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFileRequest) ProtoMessage() {} -func (*QueryFileRequest) Descriptor() ([]byte, []int) { +func (m *QueryFile) Reset() { *m = QueryFile{} } +func (m *QueryFile) String() string { return proto.CompactTextString(m) } +func (*QueryFile) ProtoMessage() {} +func (*QueryFile) Descriptor() ([]byte, []int) { return fileDescriptor_f2d116acb9d238bd, []int{2} } -func (m *QueryFileRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryFile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryFile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryFileRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryFile.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -139,26 +139,26 @@ func (m *QueryFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return b[:n], nil } } -func (m *QueryFileRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFileRequest.Merge(m, src) +func (m *QueryFile) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFile.Merge(m, src) } -func (m *QueryFileRequest) XXX_Size() int { +func (m *QueryFile) XXX_Size() int { return m.Size() } -func (m *QueryFileRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFileRequest.DiscardUnknown(m) +func (m *QueryFile) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFile.DiscardUnknown(m) } -var xxx_messageInfo_QueryFileRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryFile proto.InternalMessageInfo -func (m *QueryFileRequest) GetAddress() string { +func (m *QueryFile) GetAddress() string { if m != nil { return m.Address } return "" } -func (m *QueryFileRequest) GetOwnerAddress() string { +func (m *QueryFile) GetOwnerAddress() string { if m != nil { return m.OwnerAddress } @@ -209,22 +209,22 @@ func (m *QueryFileResponse) GetFile() Files { return Files{} } -type QueryAllFilesRequest struct { +type QueryAllFiles struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllFilesRequest) Reset() { *m = QueryAllFilesRequest{} } -func (m *QueryAllFilesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllFilesRequest) ProtoMessage() {} -func (*QueryAllFilesRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllFiles) Reset() { *m = QueryAllFiles{} } +func (m *QueryAllFiles) String() string { return proto.CompactTextString(m) } +func (*QueryAllFiles) ProtoMessage() {} +func (*QueryAllFiles) Descriptor() ([]byte, []int) { return fileDescriptor_f2d116acb9d238bd, []int{4} } -func (m *QueryAllFilesRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllFiles) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllFiles) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllFilesRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllFiles.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -234,19 +234,19 @@ func (m *QueryAllFilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *QueryAllFilesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllFilesRequest.Merge(m, src) +func (m *QueryAllFiles) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllFiles.Merge(m, src) } -func (m *QueryAllFilesRequest) XXX_Size() int { +func (m *QueryAllFiles) XXX_Size() int { return m.Size() } -func (m *QueryAllFilesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllFilesRequest.DiscardUnknown(m) +func (m *QueryAllFiles) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllFiles.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllFilesRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllFiles proto.InternalMessageInfo -func (m *QueryAllFilesRequest) GetPagination() *query.PageRequest { +func (m *QueryAllFiles) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -305,22 +305,22 @@ func (m *QueryAllFilesResponse) GetPagination() *query.PageResponse { return nil } -type QueryPubKeyRequest struct { +type QueryPubKey struct { Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` } -func (m *QueryPubKeyRequest) Reset() { *m = QueryPubKeyRequest{} } -func (m *QueryPubKeyRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPubKeyRequest) ProtoMessage() {} -func (*QueryPubKeyRequest) Descriptor() ([]byte, []int) { +func (m *QueryPubKey) Reset() { *m = QueryPubKey{} } +func (m *QueryPubKey) String() string { return proto.CompactTextString(m) } +func (*QueryPubKey) ProtoMessage() {} +func (*QueryPubKey) Descriptor() ([]byte, []int) { return fileDescriptor_f2d116acb9d238bd, []int{6} } -func (m *QueryPubKeyRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryPubKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryPubKeyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryPubKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryPubKeyRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryPubKey.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -330,19 +330,19 @@ func (m *QueryPubKeyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *QueryPubKeyRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPubKeyRequest.Merge(m, src) +func (m *QueryPubKey) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPubKey.Merge(m, src) } -func (m *QueryPubKeyRequest) XXX_Size() int { +func (m *QueryPubKey) XXX_Size() int { return m.Size() } -func (m *QueryPubKeyRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPubKeyRequest.DiscardUnknown(m) +func (m *QueryPubKey) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPubKey.DiscardUnknown(m) } -var xxx_messageInfo_QueryPubKeyRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryPubKey proto.InternalMessageInfo -func (m *QueryPubKeyRequest) GetAddress() string { +func (m *QueryPubKey) GetAddress() string { if m != nil { return m.Address } @@ -393,22 +393,22 @@ func (m *QueryPubKeyResponse) GetPubKey() Pubkey { return Pubkey{} } -type QueryAllPubKeysRequest struct { +type QueryAllPubKeys struct { Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } -func (m *QueryAllPubKeysRequest) Reset() { *m = QueryAllPubKeysRequest{} } -func (m *QueryAllPubKeysRequest) String() string { return proto.CompactTextString(m) } -func (*QueryAllPubKeysRequest) ProtoMessage() {} -func (*QueryAllPubKeysRequest) Descriptor() ([]byte, []int) { +func (m *QueryAllPubKeys) Reset() { *m = QueryAllPubKeys{} } +func (m *QueryAllPubKeys) String() string { return proto.CompactTextString(m) } +func (*QueryAllPubKeys) ProtoMessage() {} +func (*QueryAllPubKeys) Descriptor() ([]byte, []int) { return fileDescriptor_f2d116acb9d238bd, []int{8} } -func (m *QueryAllPubKeysRequest) XXX_Unmarshal(b []byte) error { +func (m *QueryAllPubKeys) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryAllPubKeysRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryAllPubKeys) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryAllPubKeysRequest.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryAllPubKeys.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -418,19 +418,19 @@ func (m *QueryAllPubKeysRequest) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *QueryAllPubKeysRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryAllPubKeysRequest.Merge(m, src) +func (m *QueryAllPubKeys) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllPubKeys.Merge(m, src) } -func (m *QueryAllPubKeysRequest) XXX_Size() int { +func (m *QueryAllPubKeys) XXX_Size() int { return m.Size() } -func (m *QueryAllPubKeysRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryAllPubKeysRequest.DiscardUnknown(m) +func (m *QueryAllPubKeys) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllPubKeys.DiscardUnknown(m) } -var xxx_messageInfo_QueryAllPubKeysRequest proto.InternalMessageInfo +var xxx_messageInfo_QueryAllPubKeys proto.InternalMessageInfo -func (m *QueryAllPubKeysRequest) GetPagination() *query.PageRequest { +func (m *QueryAllPubKeys) GetPagination() *query.PageRequest { if m != nil { return m.Pagination } @@ -490,64 +490,64 @@ func (m *QueryAllPubKeysResponse) GetPagination() *query.PageResponse { } func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "canine_chain.filetree.QueryParamsRequest") + proto.RegisterType((*QueryParams)(nil), "canine_chain.filetree.QueryParams") proto.RegisterType((*QueryParamsResponse)(nil), "canine_chain.filetree.QueryParamsResponse") - proto.RegisterType((*QueryFileRequest)(nil), "canine_chain.filetree.QueryFileRequest") + proto.RegisterType((*QueryFile)(nil), "canine_chain.filetree.QueryFile") proto.RegisterType((*QueryFileResponse)(nil), "canine_chain.filetree.QueryFileResponse") - proto.RegisterType((*QueryAllFilesRequest)(nil), "canine_chain.filetree.QueryAllFilesRequest") + proto.RegisterType((*QueryAllFiles)(nil), "canine_chain.filetree.QueryAllFiles") proto.RegisterType((*QueryAllFilesResponse)(nil), "canine_chain.filetree.QueryAllFilesResponse") - proto.RegisterType((*QueryPubKeyRequest)(nil), "canine_chain.filetree.QueryPubKeyRequest") + proto.RegisterType((*QueryPubKey)(nil), "canine_chain.filetree.QueryPubKey") proto.RegisterType((*QueryPubKeyResponse)(nil), "canine_chain.filetree.QueryPubKeyResponse") - proto.RegisterType((*QueryAllPubKeysRequest)(nil), "canine_chain.filetree.QueryAllPubKeysRequest") + proto.RegisterType((*QueryAllPubKeys)(nil), "canine_chain.filetree.QueryAllPubKeys") proto.RegisterType((*QueryAllPubKeysResponse)(nil), "canine_chain.filetree.QueryAllPubKeysResponse") } func init() { proto.RegisterFile("canine_chain/filetree/query.proto", fileDescriptor_f2d116acb9d238bd) } var fileDescriptor_f2d116acb9d238bd = []byte{ - // 666 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0xcf, 0x6f, 0xd3, 0x30, - 0x14, 0xc7, 0xeb, 0xfd, 0xe8, 0xc0, 0x80, 0x04, 0x66, 0x83, 0x29, 0x1a, 0x61, 0x64, 0xda, 0x3a, - 0x36, 0x1a, 0xab, 0x9b, 0x04, 0x48, 0x80, 0xd0, 0x26, 0x31, 0x0e, 0x03, 0x69, 0x2b, 0x37, 0x0e, - 0x14, 0xa7, 0x33, 0x59, 0x68, 0x1a, 0x67, 0xf9, 0x01, 0x54, 0xd3, 0x0e, 0x70, 0xe1, 0x8a, 0xe0, - 0x82, 0x76, 0xda, 0x9f, 0xb3, 0xe3, 0x24, 0x2e, 0x9c, 0x10, 0x6a, 0xf9, 0x43, 0x50, 0x6c, 0x87, - 0x26, 0x5d, 0xdb, 0x04, 0x69, 0xb7, 0xd4, 0xfe, 0xbe, 0xef, 0xfb, 0xd8, 0xef, 0x3d, 0x17, 0xde, - 0xaa, 0x13, 0xc7, 0x72, 0x68, 0xad, 0xbe, 0x4b, 0x2c, 0x07, 0xbf, 0xb1, 0x6c, 0x1a, 0x78, 0x94, - 0xe2, 0xbd, 0x90, 0x7a, 0x2d, 0xdd, 0xf5, 0x58, 0xc0, 0xd0, 0x54, 0x52, 0xa2, 0xc7, 0x12, 0x65, - 0xd2, 0x64, 0x26, 0xe3, 0x0a, 0x1c, 0x7d, 0x09, 0xb1, 0x32, 0x63, 0x32, 0x66, 0xda, 0x14, 0x13, - 0xd7, 0xc2, 0xc4, 0x71, 0x58, 0x40, 0x02, 0x8b, 0x39, 0xbe, 0xdc, 0x5d, 0xaa, 0x33, 0xbf, 0xc9, - 0x7c, 0x6c, 0x10, 0x5f, 0xe6, 0xc0, 0xef, 0x2a, 0x06, 0x0d, 0x48, 0x05, 0xbb, 0xc4, 0xb4, 0x1c, - 0x2e, 0x96, 0x5a, 0xad, 0x3f, 0x99, 0x4b, 0x3c, 0xd2, 0x8c, 0xfd, 0x06, 0xd0, 0x47, 0x1f, 0x7e, - 0x86, 0x4d, 0x68, 0x34, 0xa8, 0x3c, 0xa1, 0x36, 0x09, 0xd1, 0x76, 0x04, 0xb3, 0xc5, 0xbd, 0xab, - 0x74, 0x2f, 0xa4, 0x7e, 0xa0, 0x55, 0xe1, 0xd5, 0xd4, 0xaa, 0xef, 0x32, 0xc7, 0xa7, 0xe8, 0x01, - 0x2c, 0x0a, 0x86, 0x69, 0x30, 0x0b, 0x16, 0x2f, 0xac, 0xdc, 0xd0, 0xfb, 0xde, 0x8f, 0x2e, 0xc2, - 0xd6, 0xc7, 0x8e, 0x7f, 0xdd, 0x2c, 0x54, 0x65, 0x88, 0xb6, 0x0d, 0x2f, 0x73, 0xcf, 0x0d, 0xcb, - 0xa6, 0x32, 0x0f, 0x9a, 0x86, 0x13, 0x64, 0x67, 0xc7, 0xa3, 0xbe, 0x70, 0x3c, 0x5f, 0x8d, 0x7f, - 0xa2, 0x39, 0x78, 0x89, 0xbd, 0x77, 0xa8, 0x57, 0x8b, 0xf7, 0x47, 0xf8, 0xfe, 0x45, 0xbe, 0xb8, - 0x26, 0xd6, 0xb4, 0x4d, 0x78, 0x25, 0x61, 0x29, 0x21, 0xef, 0xc2, 0xb1, 0x08, 0x44, 0x22, 0xce, - 0x0c, 0x40, 0x8c, 0x42, 0x62, 0x42, 0xae, 0xd7, 0x5e, 0xc1, 0x49, 0x6e, 0xb6, 0x66, 0xdb, 0x7c, - 0x33, 0x66, 0xdc, 0x80, 0xb0, 0x5b, 0x20, 0xe9, 0xba, 0xa0, 0x8b, 0x6a, 0xea, 0x51, 0x35, 0x75, - 0xd1, 0x31, 0xb2, 0x9a, 0xfa, 0x16, 0x31, 0xe3, 0xf3, 0x55, 0x13, 0x91, 0xda, 0x21, 0x80, 0x53, - 0x3d, 0x09, 0x24, 0xf1, 0x7d, 0x38, 0xce, 0xcb, 0x36, 0x0d, 0x66, 0x47, 0x73, 0x22, 0x8b, 0x00, - 0xf4, 0x34, 0xc5, 0x36, 0xc2, 0xd9, 0x4a, 0x99, 0x6c, 0x22, 0x6d, 0x0a, 0x4e, 0x8f, 0xdb, 0x20, - 0x34, 0x36, 0x69, 0x2b, 0xb3, 0x3c, 0xda, 0x8b, 0xb8, 0x41, 0xa4, 0x5e, 0x9e, 0xe4, 0x21, 0x9c, - 0x70, 0x43, 0xa3, 0xd6, 0xa0, 0xad, 0xac, 0x0e, 0xe1, 0x3d, 0xf8, 0xaf, 0x43, 0xb8, 0x8b, 0xf6, - 0x1a, 0x5e, 0x8b, 0x2f, 0x48, 0xf8, 0x9e, 0x79, 0x0d, 0x8e, 0x00, 0xbc, 0x7e, 0x2a, 0x45, 0x3f, - 0xf6, 0xd1, 0xff, 0x64, 0x3f, 0xb3, 0x4a, 0xac, 0x7c, 0x2c, 0xc2, 0x71, 0x8e, 0x88, 0x3e, 0x03, - 0x58, 0x14, 0x93, 0x84, 0x6e, 0x0f, 0x40, 0x39, 0x3d, 0xba, 0xca, 0x52, 0x1e, 0xa9, 0xc8, 0xab, - 0x2d, 0x7c, 0xfa, 0xf1, 0xe7, 0xdb, 0xc8, 0x2c, 0x52, 0xf1, 0x5b, 0x52, 0x6f, 0x10, 0x1b, 0x8b, - 0xd0, 0xde, 0x17, 0x07, 0x1d, 0x01, 0x38, 0x16, 0x75, 0x1f, 0x2a, 0x0d, 0x33, 0x4f, 0x0c, 0xb6, - 0xb2, 0x98, 0x2d, 0x94, 0x0c, 0x4f, 0x38, 0xc3, 0x63, 0xf4, 0x28, 0xcd, 0x50, 0xee, 0xf7, 0xae, - 0xe1, 0x7d, 0xd9, 0x7f, 0x07, 0x78, 0x3f, 0xf5, 0x3a, 0x1c, 0xa0, 0xaf, 0x00, 0x9e, 0x8b, 0x07, - 0x0b, 0x2d, 0x0f, 0xcb, 0xde, 0x33, 0xdf, 0xca, 0x9d, 0x7c, 0x62, 0x89, 0xbb, 0xcc, 0x71, 0xe7, - 0xd1, 0x5c, 0x0e, 0x5c, 0xf4, 0x3d, 0xaa, 0xa0, 0xe8, 0x8f, 0xe1, 0x15, 0x4c, 0x4e, 0x5d, 0x46, - 0x05, 0x53, 0x03, 0xa7, 0xdd, 0xe3, 0x38, 0x15, 0x84, 0x87, 0xe3, 0x88, 0x27, 0x3f, 0x71, 0x7f, - 0xe8, 0x10, 0x40, 0xd8, 0x1d, 0x02, 0x54, 0xce, 0xb8, 0x84, 0xf4, 0x3c, 0x2a, 0x7a, 0x5e, 0xb9, - 0xc4, 0x2c, 0x73, 0xcc, 0x12, 0x9a, 0xcf, 0x85, 0xb9, 0xfe, 0xfc, 0xb8, 0xad, 0x82, 0x93, 0xb6, - 0x0a, 0x7e, 0xb7, 0x55, 0xf0, 0xa5, 0xa3, 0x16, 0x4e, 0x3a, 0x6a, 0xe1, 0x67, 0x47, 0x2d, 0xbc, - 0x5c, 0x35, 0xad, 0x60, 0x37, 0x34, 0xf4, 0x3a, 0x6b, 0x4a, 0xab, 0x67, 0xc4, 0xf0, 0xd3, 0x76, - 0x1f, 0xba, 0x86, 0x41, 0xcb, 0xa5, 0xbe, 0x51, 0xe4, 0x7f, 0x75, 0xab, 0x7f, 0x03, 0x00, 0x00, - 0xff, 0xff, 0xf8, 0x89, 0x74, 0xd0, 0xf1, 0x07, 0x00, 0x00, + // 660 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x4f, 0x6b, 0xd4, 0x4e, + 0x18, 0xc7, 0x77, 0xfa, 0xf7, 0xd7, 0xe9, 0xaf, 0x88, 0xa3, 0xc5, 0x12, 0x6a, 0x5c, 0xa7, 0x76, + 0xb7, 0x54, 0x9b, 0x61, 0x5b, 0x50, 0x41, 0x45, 0x5a, 0xb0, 0x82, 0x55, 0xa8, 0xf1, 0x20, 0x7a, + 0x59, 0x26, 0xdb, 0x31, 0x8d, 0x9b, 0xcd, 0xa4, 0xf9, 0xa3, 0x2e, 0xa5, 0x20, 0x5e, 0xbd, 0x28, + 0x3d, 0xe9, 0xc9, 0x97, 0xd3, 0x63, 0xc1, 0x8b, 0xa7, 0x22, 0xbb, 0xbe, 0x10, 0xc9, 0x4c, 0x92, + 0x26, 0x65, 0x77, 0xb3, 0x42, 0x6f, 0x49, 0xe6, 0xfb, 0x7c, 0x9f, 0xcf, 0xcc, 0xf3, 0x3c, 0x13, + 0x78, 0xbd, 0x41, 0x1d, 0xcb, 0x61, 0xf5, 0xc6, 0x2e, 0xb5, 0x1c, 0xf2, 0xc6, 0xb2, 0x59, 0xe0, + 0x31, 0x46, 0xf6, 0x42, 0xe6, 0xb5, 0x35, 0xd7, 0xe3, 0x01, 0x47, 0xb3, 0x59, 0x89, 0x96, 0x48, + 0x94, 0xcb, 0x26, 0x37, 0xb9, 0x50, 0x90, 0xe8, 0x49, 0x8a, 0x95, 0x79, 0x93, 0x73, 0xd3, 0x66, + 0x84, 0xba, 0x16, 0xa1, 0x8e, 0xc3, 0x03, 0x1a, 0x58, 0xdc, 0xf1, 0xe3, 0xd5, 0xe5, 0x06, 0xf7, + 0x5b, 0xdc, 0x27, 0x06, 0xf5, 0xe3, 0x1c, 0xe4, 0x5d, 0xcd, 0x60, 0x01, 0xad, 0x11, 0x97, 0x9a, + 0x96, 0x23, 0xc4, 0xb1, 0x16, 0xf7, 0x26, 0x73, 0xa9, 0x47, 0x5b, 0x89, 0x5f, 0x1f, 0xfa, 0xe8, + 0xc1, 0x2f, 0xb0, 0x09, 0x8d, 0x26, 0x8b, 0x77, 0x88, 0x67, 0xe0, 0xf4, 0xf3, 0x08, 0x66, 0x5b, + 0x78, 0x63, 0x1d, 0x5e, 0xca, 0xbc, 0xea, 0xcc, 0x77, 0xb9, 0xe3, 0x33, 0x74, 0x0f, 0x4e, 0xc8, + 0xe4, 0x73, 0xa0, 0x0c, 0x96, 0xa6, 0x57, 0xaf, 0x6a, 0x3d, 0x0f, 0x46, 0x93, 0x61, 0x1b, 0x63, + 0x47, 0x27, 0xd7, 0x4a, 0x7a, 0x1c, 0x82, 0x9f, 0xc0, 0x29, 0xe1, 0xb9, 0x69, 0xd9, 0x0c, 0xcd, + 0xc1, 0x49, 0xba, 0xb3, 0xe3, 0x31, 0x5f, 0x5a, 0x4d, 0xe9, 0xc9, 0x2b, 0x5a, 0x80, 0x33, 0xfc, + 0xbd, 0xc3, 0xbc, 0x7a, 0xb2, 0x3e, 0x22, 0xd6, 0xff, 0x17, 0x1f, 0xd7, 0xe5, 0x37, 0xbc, 0x05, + 0x2f, 0xa6, 0x5e, 0x29, 0xdd, 0x6d, 0x38, 0x16, 0x11, 0xc4, 0x6c, 0xf3, 0x7d, 0xd8, 0xa2, 0x90, + 0x04, 0x4d, 0xe8, 0xf1, 0x4b, 0x38, 0x23, 0xcc, 0xd6, 0x6d, 0x5b, 0x2c, 0xa2, 0x4d, 0x08, 0x4f, + 0x6b, 0x11, 0xdb, 0x55, 0x34, 0x59, 0x38, 0x2d, 0x2a, 0x9c, 0x26, 0x9b, 0x23, 0x2e, 0x9c, 0xb6, + 0x4d, 0x4d, 0xa6, 0xb3, 0xbd, 0x90, 0xf9, 0x81, 0x9e, 0x89, 0xc4, 0xdf, 0x01, 0x9c, 0xcd, 0x39, + 0xa7, 0xa8, 0x77, 0xe1, 0xb8, 0xa8, 0xd0, 0x1c, 0x28, 0x8f, 0x0e, 0xc9, 0x2a, 0x03, 0xd0, 0xe3, + 0x1c, 0xdb, 0x88, 0x60, 0xab, 0x16, 0xb2, 0xc9, 0xb4, 0x39, 0xb8, 0x6a, 0x52, 0xf1, 0xd0, 0xd8, + 0x62, 0xed, 0xfe, 0x05, 0xc1, 0x2f, 0x92, 0x5e, 0x10, 0xc2, 0x74, 0x0b, 0xf7, 0xe1, 0xa4, 0x1b, + 0x1a, 0xf5, 0x26, 0x6b, 0x17, 0x35, 0x83, 0xe8, 0xb3, 0xb4, 0x19, 0x84, 0x0b, 0x7e, 0x05, 0x2f, + 0x24, 0x27, 0x23, 0x7d, 0xcf, 0xef, 0xd4, 0x7f, 0x00, 0x78, 0xe5, 0x8c, 0x77, 0x6f, 0xe8, 0xd1, + 0x7f, 0x84, 0x3e, 0xb7, 0xb3, 0x5f, 0x3d, 0x19, 0x87, 0xe3, 0x02, 0x11, 0x7d, 0x04, 0x70, 0x42, + 0x4e, 0x0b, 0xc2, 0x7d, 0x50, 0x32, 0x83, 0xa8, 0x2c, 0x17, 0x6b, 0x92, 0x84, 0xb8, 0xf2, 0xe9, + 0xe7, 0x9f, 0xc3, 0x91, 0x32, 0x52, 0xc9, 0x5b, 0xda, 0x68, 0x52, 0x9b, 0xc8, 0xd0, 0xb3, 0xf7, + 0x08, 0xfa, 0x06, 0xe0, 0x98, 0x98, 0xc9, 0xf2, 0x20, 0xf3, 0x48, 0xa1, 0x2c, 0x15, 0x29, 0xd2, + 0xe4, 0x8f, 0x44, 0xf2, 0x87, 0xe8, 0x41, 0x3e, 0xf9, 0x4a, 0xaf, 0x6b, 0x8a, 0xec, 0xc7, 0xad, + 0x76, 0x40, 0xf6, 0x73, 0xa3, 0x7f, 0x80, 0x3e, 0x03, 0xf8, 0x5f, 0x3a, 0x96, 0x37, 0x06, 0x65, + 0x4f, 0x54, 0xca, 0xad, 0x61, 0x54, 0x29, 0xe7, 0x4d, 0xc1, 0xb9, 0x88, 0x16, 0x86, 0xe0, 0x44, + 0x5f, 0xa3, 0x62, 0xc9, 0x56, 0x18, 0x5c, 0x2c, 0xa1, 0x29, 0x28, 0x56, 0x6e, 0x9a, 0xf0, 0x1d, + 0xc1, 0x51, 0x43, 0x64, 0x30, 0x87, 0xbc, 0xb3, 0x33, 0x27, 0x86, 0x0e, 0x01, 0x84, 0x99, 0x21, + 0xaa, 0x14, 0xec, 0x3e, 0xd6, 0x29, 0xda, 0x70, 0xba, 0x94, 0x6f, 0x45, 0xf0, 0x55, 0xd1, 0xe2, + 0x50, 0x7c, 0x1b, 0xcf, 0x8e, 0x3a, 0x2a, 0x38, 0xee, 0xa8, 0xe0, 0x77, 0x47, 0x05, 0x5f, 0xba, + 0x6a, 0xe9, 0xb8, 0xab, 0x96, 0x7e, 0x75, 0xd5, 0xd2, 0xeb, 0x35, 0xd3, 0x0a, 0x76, 0x43, 0x43, + 0x6b, 0xf0, 0x56, 0x6c, 0xf5, 0x94, 0x1a, 0x7e, 0xde, 0xee, 0xc3, 0xa9, 0x61, 0xd0, 0x76, 0x99, + 0x6f, 0x4c, 0x88, 0x9f, 0xd4, 0xda, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x0d, 0xa7, 0x03, + 0xab, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -563,15 +563,15 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { // Parameters queries the parameters of the module. - Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) // Queries a Files by index. - File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) + File(ctx context.Context, in *QueryFile, opts ...grpc.CallOption) (*QueryFileResponse, error) // Queries a list of Files items. - AllFiles(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) + AllFiles(ctx context.Context, in *QueryAllFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) // Queries a Pubkey by index. - PubKey(ctx context.Context, in *QueryPubKeyRequest, opts ...grpc.CallOption) (*QueryPubKeyResponse, error) + PubKey(ctx context.Context, in *QueryPubKey, opts ...grpc.CallOption) (*QueryPubKeyResponse, error) // Queries a list of Pubkey items. - AllPubKeys(ctx context.Context, in *QueryAllPubKeysRequest, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) + AllPubKeys(ctx context.Context, in *QueryAllPubKeys, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) } type queryClient struct { @@ -582,7 +582,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } -func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { +func (c *queryClient) Params(ctx context.Context, in *QueryParams, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/Params", in, out, opts...) if err != nil { @@ -591,7 +591,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } -func (c *queryClient) File(ctx context.Context, in *QueryFileRequest, opts ...grpc.CallOption) (*QueryFileResponse, error) { +func (c *queryClient) File(ctx context.Context, in *QueryFile, opts ...grpc.CallOption) (*QueryFileResponse, error) { out := new(QueryFileResponse) err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/File", in, out, opts...) if err != nil { @@ -600,7 +600,7 @@ func (c *queryClient) File(ctx context.Context, in *QueryFileRequest, opts ...gr return out, nil } -func (c *queryClient) AllFiles(ctx context.Context, in *QueryAllFilesRequest, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { +func (c *queryClient) AllFiles(ctx context.Context, in *QueryAllFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) { out := new(QueryAllFilesResponse) err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/AllFiles", in, out, opts...) if err != nil { @@ -609,7 +609,7 @@ func (c *queryClient) AllFiles(ctx context.Context, in *QueryAllFilesRequest, op return out, nil } -func (c *queryClient) PubKey(ctx context.Context, in *QueryPubKeyRequest, opts ...grpc.CallOption) (*QueryPubKeyResponse, error) { +func (c *queryClient) PubKey(ctx context.Context, in *QueryPubKey, opts ...grpc.CallOption) (*QueryPubKeyResponse, error) { out := new(QueryPubKeyResponse) err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/PubKey", in, out, opts...) if err != nil { @@ -618,7 +618,7 @@ func (c *queryClient) PubKey(ctx context.Context, in *QueryPubKeyRequest, opts . return out, nil } -func (c *queryClient) AllPubKeys(ctx context.Context, in *QueryAllPubKeysRequest, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) { +func (c *queryClient) AllPubKeys(ctx context.Context, in *QueryAllPubKeys, opts ...grpc.CallOption) (*QueryAllPubKeysResponse, error) { out := new(QueryAllPubKeysResponse) err := c.cc.Invoke(ctx, "/canine_chain.filetree.Query/AllPubKeys", in, out, opts...) if err != nil { @@ -630,34 +630,34 @@ func (c *queryClient) AllPubKeys(ctx context.Context, in *QueryAllPubKeysRequest // QueryServer is the server API for Query service. type QueryServer interface { // Parameters queries the parameters of the module. - Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + Params(context.Context, *QueryParams) (*QueryParamsResponse, error) // Queries a Files by index. - File(context.Context, *QueryFileRequest) (*QueryFileResponse, error) + File(context.Context, *QueryFile) (*QueryFileResponse, error) // Queries a list of Files items. - AllFiles(context.Context, *QueryAllFilesRequest) (*QueryAllFilesResponse, error) + AllFiles(context.Context, *QueryAllFiles) (*QueryAllFilesResponse, error) // Queries a Pubkey by index. - PubKey(context.Context, *QueryPubKeyRequest) (*QueryPubKeyResponse, error) + PubKey(context.Context, *QueryPubKey) (*QueryPubKeyResponse, error) // Queries a list of Pubkey items. - AllPubKeys(context.Context, *QueryAllPubKeysRequest) (*QueryAllPubKeysResponse, error) + AllPubKeys(context.Context, *QueryAllPubKeys) (*QueryAllPubKeysResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. type UnimplementedQueryServer struct { } -func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParams) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) File(ctx context.Context, req *QueryFileRequest) (*QueryFileResponse, error) { +func (*UnimplementedQueryServer) File(ctx context.Context, req *QueryFile) (*QueryFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method File not implemented") } -func (*UnimplementedQueryServer) AllFiles(ctx context.Context, req *QueryAllFilesRequest) (*QueryAllFilesResponse, error) { +func (*UnimplementedQueryServer) AllFiles(ctx context.Context, req *QueryAllFiles) (*QueryAllFilesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllFiles not implemented") } -func (*UnimplementedQueryServer) PubKey(ctx context.Context, req *QueryPubKeyRequest) (*QueryPubKeyResponse, error) { +func (*UnimplementedQueryServer) PubKey(ctx context.Context, req *QueryPubKey) (*QueryPubKeyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PubKey not implemented") } -func (*UnimplementedQueryServer) AllPubKeys(ctx context.Context, req *QueryAllPubKeysRequest) (*QueryAllPubKeysResponse, error) { +func (*UnimplementedQueryServer) AllPubKeys(ctx context.Context, req *QueryAllPubKeys) (*QueryAllPubKeysResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllPubKeys not implemented") } @@ -666,7 +666,7 @@ func RegisterQueryServer(s grpc1.Server, srv QueryServer) { } func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryParamsRequest) + in := new(QueryParams) if err := dec(in); err != nil { return nil, err } @@ -678,13 +678,13 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf FullMethod: "/canine_chain.filetree.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + return srv.(QueryServer).Params(ctx, req.(*QueryParams)) } return interceptor(ctx, in, info, handler) } func _Query_File_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFileRequest) + in := new(QueryFile) if err := dec(in); err != nil { return nil, err } @@ -696,13 +696,13 @@ func _Query_File_Handler(srv interface{}, ctx context.Context, dec func(interfac FullMethod: "/canine_chain.filetree.Query/File", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).File(ctx, req.(*QueryFileRequest)) + return srv.(QueryServer).File(ctx, req.(*QueryFile)) } return interceptor(ctx, in, info, handler) } func _Query_AllFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllFilesRequest) + in := new(QueryAllFiles) if err := dec(in); err != nil { return nil, err } @@ -714,13 +714,13 @@ func _Query_AllFiles_Handler(srv interface{}, ctx context.Context, dec func(inte FullMethod: "/canine_chain.filetree.Query/AllFiles", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllFiles(ctx, req.(*QueryAllFilesRequest)) + return srv.(QueryServer).AllFiles(ctx, req.(*QueryAllFiles)) } return interceptor(ctx, in, info, handler) } func _Query_PubKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPubKeyRequest) + in := new(QueryPubKey) if err := dec(in); err != nil { return nil, err } @@ -732,13 +732,13 @@ func _Query_PubKey_Handler(srv interface{}, ctx context.Context, dec func(interf FullMethod: "/canine_chain.filetree.Query/PubKey", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PubKey(ctx, req.(*QueryPubKeyRequest)) + return srv.(QueryServer).PubKey(ctx, req.(*QueryPubKey)) } return interceptor(ctx, in, info, handler) } func _Query_AllPubKeys_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryAllPubKeysRequest) + in := new(QueryAllPubKeys) if err := dec(in); err != nil { return nil, err } @@ -750,7 +750,7 @@ func _Query_AllPubKeys_Handler(srv interface{}, ctx context.Context, dec func(in FullMethod: "/canine_chain.filetree.Query/AllPubKeys", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllPubKeys(ctx, req.(*QueryAllPubKeysRequest)) + return srv.(QueryServer).AllPubKeys(ctx, req.(*QueryAllPubKeys)) } return interceptor(ctx, in, info, handler) } @@ -784,7 +784,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Metadata: "canine_chain/filetree/query.proto", } -func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryParams) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -794,12 +794,12 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -840,7 +840,7 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryFileRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryFile) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -850,12 +850,12 @@ func (m *QueryFileRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryFileRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryFile) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryFile) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -910,7 +910,7 @@ func (m *QueryFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllFilesRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllFiles) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -920,12 +920,12 @@ func (m *QueryAllFilesRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllFilesRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllFiles) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllFilesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllFiles) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -994,7 +994,7 @@ func (m *QueryAllFilesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryPubKeyRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryPubKey) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1004,12 +1004,12 @@ func (m *QueryPubKeyRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryPubKeyRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryPubKey) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryPubKeyRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryPubKey) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1057,7 +1057,7 @@ func (m *QueryPubKeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QueryAllPubKeysRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryAllPubKeys) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1067,12 +1067,12 @@ func (m *QueryAllPubKeysRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryAllPubKeysRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryAllPubKeys) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryAllPubKeysRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryAllPubKeys) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1152,7 +1152,7 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *QueryParamsRequest) Size() (n int) { +func (m *QueryParams) Size() (n int) { if m == nil { return 0 } @@ -1172,7 +1172,7 @@ func (m *QueryParamsResponse) Size() (n int) { return n } -func (m *QueryFileRequest) Size() (n int) { +func (m *QueryFile) Size() (n int) { if m == nil { return 0 } @@ -1200,7 +1200,7 @@ func (m *QueryFileResponse) Size() (n int) { return n } -func (m *QueryAllFilesRequest) Size() (n int) { +func (m *QueryAllFiles) Size() (n int) { if m == nil { return 0 } @@ -1232,7 +1232,7 @@ func (m *QueryAllFilesResponse) Size() (n int) { return n } -func (m *QueryPubKeyRequest) Size() (n int) { +func (m *QueryPubKey) Size() (n int) { if m == nil { return 0 } @@ -1256,7 +1256,7 @@ func (m *QueryPubKeyResponse) Size() (n int) { return n } -func (m *QueryAllPubKeysRequest) Size() (n int) { +func (m *QueryAllPubKeys) Size() (n int) { if m == nil { return 0 } @@ -1294,7 +1294,7 @@ func sovQuery(x uint64) (n int) { func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { +func (m *QueryParams) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1317,10 +1317,10 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryParams: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryParams: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -1427,7 +1427,7 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { +func (m *QueryFile) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1450,10 +1450,10 @@ func (m *QueryFileRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryFileRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryFile: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFileRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryFile: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1624,7 +1624,7 @@ func (m *QueryFileResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllFiles) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1647,10 +1647,10 @@ func (m *QueryAllFilesRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllFilesRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllFiles: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllFilesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllFiles: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1830,7 +1830,7 @@ func (m *QueryAllFilesResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryPubKeyRequest) Unmarshal(dAtA []byte) error { +func (m *QueryPubKey) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1853,10 +1853,10 @@ func (m *QueryPubKeyRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryPubKeyRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryPubKey: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPubKeyRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryPubKey: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1995,7 +1995,7 @@ func (m *QueryPubKeyResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryAllPubKeysRequest) Unmarshal(dAtA []byte) error { +func (m *QueryAllPubKeys) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -2018,10 +2018,10 @@ func (m *QueryAllPubKeysRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryAllPubKeysRequest: wiretype end group for non-group") + return fmt.Errorf("proto: QueryAllPubKeys: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryAllPubKeysRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryAllPubKeys: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/x/filetree/types/query.pb.gw.go b/x/filetree/types/query.pb.gw.go index c2330062b..e0c12b404 100644 --- a/x/filetree/types/query.pb.gw.go +++ b/x/filetree/types/query.pb.gw.go @@ -34,7 +34,7 @@ var _ = descriptor.ForMessage var _ = metadata.Join func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -43,7 +43,7 @@ func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, cl } func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryParamsRequest + var protoReq QueryParams var metadata runtime.ServerMetadata msg, err := server.Params(ctx, &protoReq) @@ -52,7 +52,7 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFileRequest + var protoReq QueryFile var metadata runtime.ServerMetadata var ( @@ -90,7 +90,7 @@ func request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, clie } func local_request_Query_File_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryFileRequest + var protoReq QueryFile var metadata runtime.ServerMetadata var ( @@ -132,7 +132,7 @@ var ( ) func request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllFilesRequest + var protoReq QueryAllFiles var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -148,7 +148,7 @@ func request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllFilesRequest + var protoReq QueryAllFiles var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -164,7 +164,7 @@ func local_request_Query_AllFiles_0(ctx context.Context, marshaler runtime.Marsh } func request_Query_PubKey_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPubKeyRequest + var protoReq QueryPubKey var metadata runtime.ServerMetadata var ( @@ -191,7 +191,7 @@ func request_Query_PubKey_0(ctx context.Context, marshaler runtime.Marshaler, cl } func local_request_Query_PubKey_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPubKeyRequest + var protoReq QueryPubKey var metadata runtime.ServerMetadata var ( @@ -222,7 +222,7 @@ var ( ) func request_Query_AllPubKeys_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllPubKeysRequest + var protoReq QueryAllPubKeys var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -238,7 +238,7 @@ func request_Query_AllPubKeys_0(ctx context.Context, marshaler runtime.Marshaler } func local_request_Query_AllPubKeys_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryAllPubKeysRequest + var protoReq QueryAllPubKeys var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { From 1ace93bb696abe34571bfc990f2ffd0731e73ec0 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 9 Nov 2023 10:32:33 -0500 Subject: [PATCH 063/256] erin recommendations --- proto/canine_chain/filetree/tx.proto | 12 +- proto/canine_chain/rns/query.proto | 2 +- proto/canine_chain/rns/tx.proto | 6 +- proto/canine_chain/storage/query.proto | 6 +- proto/canine_chain/storage/tx.proto | 4 +- x/filetree/client/cli/tx.go | 1 - x/filetree/client/cli/tx_make_root.go | 75 -- x/filetree/handler.go | 3 - x/filetree/keeper/msg_server_make_root.go | 14 - .../keeper/msg_server_make_root_test.go | 6 +- x/filetree/types/codec.go | 4 +- x/filetree/types/message_make_root.go | 76 -- x/filetree/types/test_helpers.go | 10 +- x/filetree/types/tx.pb.go | 647 ++---------------- x/oracle/simulation/delist.go | 2 +- x/rns/handler.go | 4 +- x/rns/keeper/msg_server_delist.go | 4 +- x/rns/keeper/msg_server_delist_test.go | 24 +- x/rns/simulation/delist.go | 2 +- x/rns/types/codec.go | 4 +- x/rns/types/message_delist.go | 16 +- x/rns/types/message_delist_test.go | 8 +- x/rns/types/tx.pb.go | 154 ++--- x/storage/client/cli/tx_init_provider.go | 7 +- .../client/cli/tx_set_provider_totalspace.go | 6 +- x/storage/keeper/grpc_query_freespace.go | 4 +- x/storage/keeper/msg_server_init_provider.go | 3 +- x/storage/keeper/msg_server_proofs_test.go | 2 +- x/storage/keeper/msg_server_providers_test.go | 17 +- .../msg_server_set_provider_totalspace.go | 19 +- x/storage/keeper/providers_test.go | 2 +- x/storage/simulation/init_miner.go | 3 +- x/storage/simulation/set_miner_totalspace.go | 3 +- x/storage/types/message_init_miner.go | 6 +- x/storage/types/message_init_miner_test.go | 16 +- .../types/message_set_miner_totalspace.go | 6 +- .../message_set_miner_totalspace_test.go | 11 +- x/storage/types/query.pb.go | 332 ++++----- x/storage/types/tx.pb.go | 228 +++--- 39 files changed, 471 insertions(+), 1278 deletions(-) delete mode 100644 x/filetree/types/message_make_root.go diff --git a/proto/canine_chain/filetree/tx.proto b/proto/canine_chain/filetree/tx.proto index e10fae56d..d5db66523 100644 --- a/proto/canine_chain/filetree/tx.proto +++ b/proto/canine_chain/filetree/tx.proto @@ -10,7 +10,6 @@ service Msg { rpc PostKey(MsgPostKey) returns (MsgPostKeyResponse); rpc DeleteFile(MsgDeleteFile) returns (MsgDeleteFileResponse); rpc RemoveViewers(MsgRemoveViewers) returns (MsgRemoveViewersResponse); - rpc MakeRoot(MsgMakeRoot) returns (MsgMakeRootResponse); rpc MakeRootV2(MsgMakeRootV2) returns (MsgMakeRootResponse); rpc AddEditors(MsgAddEditors) returns (MsgAddEditorsResponse); @@ -67,15 +66,6 @@ message MsgRemoveViewers { message MsgRemoveViewersResponse {} -message MsgMakeRoot { - string creator = 1; - string account = 2; - string root_hash_path = 3; - string contents = 4; - string editors = 5; - string viewers = 6; - string tracking_number = 7; -} message MsgMakeRootResponse {} @@ -125,7 +115,7 @@ message MsgChangeOwner { string creator = 1; string address = 2; string file_owner = 3; - string newOwner = 4; + string new_owner = 4; } message MsgChangeOwnerResponse {} diff --git a/proto/canine_chain/rns/query.proto b/proto/canine_chain/rns/query.proto index e13eed523..49f3a26b0 100644 --- a/proto/canine_chain/rns/query.proto +++ b/proto/canine_chain/rns/query.proto @@ -81,7 +81,7 @@ message QueryParamsResponse { message QueryName { string index = 1; } -message QueryNameResponse { Names name = 1 [ (gogoproto.nullable) = false ]; } +message QueryNameResponse { Names name = 1 [ (gogoproto.nullable) = false ]; } // TODO: Check if this breaks everything to change it to Name message QueryAllNames { cosmos.base.query.v1beta1.PageRequest pagination = 1; diff --git a/proto/canine_chain/rns/tx.proto b/proto/canine_chain/rns/tx.proto index dd8610474..0e1e6724a 100644 --- a/proto/canine_chain/rns/tx.proto +++ b/proto/canine_chain/rns/tx.proto @@ -11,7 +11,7 @@ service Msg { rpc CancelBid(MsgCancelBid) returns (MsgCancelBidResponse); rpc List(MsgList) returns (MsgListResponse); rpc Buy(MsgBuy) returns (MsgBuyResponse); - rpc DeList(MsgDeList) returns (MsgDeListResponse); + rpc Delist(MsgDelist) returns (MsgDelistResponse); rpc Transfer(MsgTransfer) returns (MsgTransferResponse); rpc AddRecord(MsgAddRecord) returns (MsgAddRecordResponse); rpc DelRecord(MsgDelRecord) returns (MsgDelRecordResponse); @@ -75,12 +75,12 @@ message MsgBuy { message MsgBuyResponse {} -message MsgDeList { +message MsgDelist { string creator = 1; string name = 2; } -message MsgDeListResponse {} +message MsgDelistResponse {} message MsgTransfer { string creator = 1; diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index faa8c6a2a..433f75f2e 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -268,9 +268,9 @@ message QueryFreeSpace { string address = 1; } message QueryStoreCount { string address = 1; } -message QueryFreeSpaceResponse { string space = 1; } +message QueryFreeSpaceResponse { int64 space = 1; } -message QueryStoreCountResponse { string count = 1; } +message QueryStoreCountResponse { int64 count = 1; } message QueryFindFile { bytes merkle = 1; } @@ -315,7 +315,7 @@ message QueryFileUploadCheckResponse { } message QueryPriceCheck { - string duration = 1; + string duration = 1; // formatted as time int64 bytes = 2; } diff --git a/proto/canine_chain/storage/tx.proto b/proto/canine_chain/storage/tx.proto index c6e612a7a..79cf9d82b 100644 --- a/proto/canine_chain/storage/tx.proto +++ b/proto/canine_chain/storage/tx.proto @@ -85,7 +85,7 @@ message MsgSetProviderKeybaseResponse {} message MsgSetProviderTotalSpace { string creator = 1; - string space = 2; + int64 space = 2; } message MsgSetProviderTotalSpaceResponse {} @@ -109,7 +109,7 @@ message MsgInitProvider { string creator = 1; string ip = 2; string keybase = 3; - string total_space = 4; + int64 total_space = 4; } message MsgInitProviderResponse {} diff --git a/x/filetree/client/cli/tx.go b/x/filetree/client/cli/tx.go index 334474bfd..3ff04ae40 100644 --- a/x/filetree/client/cli/tx.go +++ b/x/filetree/client/cli/tx.go @@ -28,7 +28,6 @@ func GetTxCmd() *cobra.Command { cmd.AddCommand(CmdPostkey()) cmd.AddCommand(CmdDeleteFile()) cmd.AddCommand(CmdRemoveViewers()) - cmd.AddCommand(CmdMakeRoot()) cmd.AddCommand(CmdMakeRootV2()) cmd.AddCommand(CmdAddEditors()) cmd.AddCommand(CmdRemoveEditors()) diff --git a/x/filetree/client/cli/tx_make_root.go b/x/filetree/client/cli/tx_make_root.go index 77adf9f49..54e393e33 100644 --- a/x/filetree/client/cli/tx_make_root.go +++ b/x/filetree/client/cli/tx_make_root.go @@ -5,7 +5,6 @@ import ( "encoding/json" "fmt" "strconv" - "strings" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -17,80 +16,6 @@ import ( var _ = strconv.Itoa(0) -/* -Deprecated: CMDMakeRoot is being replaced by CMDMakeRootV2 -*/ -func CmdMakeRoot() *cobra.Command { - cmd := &cobra.Command{ - Use: "make-root [account] [root-hash-path]", - Short: "Broadcast message make root", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) (err error) { - fmt.Println("make-root is deprecated as of v2.0.0, please consider using make-root-v2.") - argAccount := args[0] - argRootHashPath := args[1] - - if err != nil { - return err - } - - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - // In the keeper, the merklePath function will trim the trailing slash for us but let's just do it anyways to be safe. - trimMerklePath := strings.TrimSuffix(argRootHashPath, "/") - merklePath := types.MerklePath(trimMerklePath) - - editors := make(map[string]string) - - trackingNumber := uuid.NewString() - - // This root folder is the master root and has no file key, so there is nothing to encrypt. - // We include the creator of this root as an editor so that they can add children--folders or files - - h := sha256.New() - h.Write([]byte(fmt.Sprintf("e%s%s", trackingNumber, clientCtx.GetFromAddress().String()))) - hash := h.Sum(nil) - - addressString := fmt.Sprintf("%x", hash) - - editors[addressString] = fmt.Sprintf("%x", "Placeholder key") // Determine if we need a place holder key - - jsonEditors, err := json.Marshal(editors) - if err != nil { - return err - } - - h1 := sha256.New() - h1.Write([]byte(argAccount)) - hash1 := h1.Sum(nil) - - accountHash := fmt.Sprintf("%x", hash1) - // FE will init their own root folders - - msg := types.NewMsgMakeRoot( - clientCtx.GetFromAddress().String(), - accountHash, - merklePath, - "Contents", - string(jsonEditors), - "Viewers", - trackingNumber, - ) - if err := msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} - func CmdMakeRootV2() *cobra.Command { cmd := &cobra.Command{ Use: "make-root-v2", diff --git a/x/filetree/handler.go b/x/filetree/handler.go index 98dcb443f..f490e8fc4 100644 --- a/x/filetree/handler.go +++ b/x/filetree/handler.go @@ -32,9 +32,6 @@ func NewHandler(k keeper.Keeper) sdk.Handler { case *types.MsgRemoveViewers: res, err := msgServer.RemoveViewers(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgMakeRoot: - res, err := msgServer.MakeRoot(sdk.WrapSDKContext(ctx), msg) - return sdk.WrapServiceResult(ctx, res, err) case *types.MsgMakeRootV2: res, err := msgServer.MakeRootV2(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) diff --git a/x/filetree/keeper/msg_server_make_root.go b/x/filetree/keeper/msg_server_make_root.go index 633baf1aa..78668867a 100644 --- a/x/filetree/keeper/msg_server_make_root.go +++ b/x/filetree/keeper/msg_server_make_root.go @@ -32,20 +32,6 @@ func (k msgServer) MakeRootFolder(ctx sdk.Context, creator string, viewers strin k.SetFiles(ctx, file) } -/* -Deprecated: MakeRoot is being replaced by MakeRootV2 -*/ -func (k msgServer) MakeRoot(goCtx context.Context, msg *types.MsgMakeRoot) (*types.MsgMakeRootResponse, error) { - newMsg := types.MsgMakeRootV2{ - Creator: msg.Creator, - Editors: msg.Editors, - Viewers: msg.Editors, - TrackingNumber: msg.TrackingNumber, - } - - return k.MakeRootV2(goCtx, &newMsg) -} - func (k msgServer) MakeRootV2(goCtx context.Context, msg *types.MsgMakeRootV2) (*types.MsgMakeRootResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) diff --git a/x/filetree/keeper/msg_server_make_root_test.go b/x/filetree/keeper/msg_server_make_root_test.go index 9a2289362..07e44a6cf 100644 --- a/x/filetree/keeper/msg_server_make_root_test.go +++ b/x/filetree/keeper/msg_server_make_root_test.go @@ -18,13 +18,13 @@ func (suite *KeeperTestSuite) TestMsgMakeRoot() { suite.Require().NoError(err) cases := []struct { - preRun func() *types.MsgMakeRoot + preRun func() *types.MsgMakeRootV2 expErr bool expErrMsg string name string }{ { - preRun: func() *types.MsgMakeRoot { + preRun: func() *types.MsgMakeRootV2 { return msg }, expErr: false, @@ -36,7 +36,7 @@ func (suite *KeeperTestSuite) TestMsgMakeRoot() { suite.Run(tc.name, func() { msg := tc.preRun() suite.Require().NoError(err) - res, err := msgSrvr.MakeRoot(context, msg) + res, err := msgSrvr.MakeRootV2(context, msg) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) diff --git a/x/filetree/types/codec.go b/x/filetree/types/codec.go index b444c4b42..0e44bc4e5 100644 --- a/x/filetree/types/codec.go +++ b/x/filetree/types/codec.go @@ -14,7 +14,7 @@ func RegisterCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgPostKey{}, "filetree/PostKey", nil) cdc.RegisterConcrete(&MsgDeleteFile{}, "filetree/DeleteFile", nil) cdc.RegisterConcrete(&MsgRemoveViewers{}, "filetree/RemoveViewers", nil) - cdc.RegisterConcrete(&MsgMakeRoot{}, "filetree/MakeRoot", nil) + cdc.RegisterConcrete(&MsgMakeRootV2{}, "filetree/MakeRoot", nil) cdc.RegisterConcrete(&MsgAddEditors{}, "filetree/AddEditors", nil) cdc.RegisterConcrete(&MsgRemoveEditors{}, "filetree/RemoveEditors", nil) cdc.RegisterConcrete(&MsgResetEditors{}, "filetree/ResetEditors", nil) @@ -39,7 +39,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgRemoveViewers{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgMakeRoot{}, + &MsgMakeRootV2{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), &MsgAddEditors{}, diff --git a/x/filetree/types/message_make_root.go b/x/filetree/types/message_make_root.go deleted file mode 100644 index 82dd44b97..000000000 --- a/x/filetree/types/message_make_root.go +++ /dev/null @@ -1,76 +0,0 @@ -package types - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -const TypeMsgMakeRoot = "make_root" - -var _ sdk.Msg = &MsgMakeRoot{} - -/* -Deprecated: NewMsgMakeRoot is being replaced by NewMsgMakeRootV2 -*/ -func NewMsgMakeRoot(creator string, account string, rootHashPath string, contents string, editors string, viewers string, trackingNumber string) *MsgMakeRoot { - return &MsgMakeRoot{ - Creator: creator, - Account: account, - RootHashPath: rootHashPath, - Contents: contents, - Editors: editors, - Viewers: viewers, - TrackingNumber: trackingNumber, - } -} - -func (msg *MsgMakeRoot) Route() string { - return RouterKey -} - -func (msg *MsgMakeRoot) Type() string { - return TypeMsgMakeRoot -} - -func (msg *MsgMakeRoot) GetSigners() []sdk.AccAddress { - creator, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - panic(err) - } - return []sdk.AccAddress{creator} -} - -func (msg *MsgMakeRoot) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(msg) - return sdk.MustSortJSON(bz) -} - -func (msg *MsgMakeRoot) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) - } - - if msg.Account == "" { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid account: %s", msg.Account) - } - if msg.RootHashPath == "" { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid root hash path: %s", msg.RootHashPath) - } - if msg.Editors == "" { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid editors: %s", msg.Editors) - } - if msg.Viewers == "" { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid viewers: %s", msg.Viewers) - } - if msg.TrackingNumber == "" { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, - "invalid tracking number: %s", msg.TrackingNumber) - } - - return nil -} diff --git a/x/filetree/types/test_helpers.go b/x/filetree/types/test_helpers.go index f2db299ec..c842ea3f9 100644 --- a/x/filetree/types/test_helpers.go +++ b/x/filetree/types/test_helpers.go @@ -40,8 +40,7 @@ func MakePrivateKey(fromName string) (*eciesgo.PrivateKey, error) { return newKey, nil } -func CreateMsgMakeRoot(creator string) (*MsgMakeRoot, error) { - merklePath := MerklePath("s/") +func CreateMsgMakeRoot(creator string) (*MsgMakeRootV2, error) { trackingNumber := uuid.NewString() editorIds := strings.Split(creator, ",") @@ -50,13 +49,8 @@ func CreateMsgMakeRoot(creator string) (*MsgMakeRoot, error) { return nil, err } - accountHash := HashThenHex(creator) - - msg := NewMsgMakeRoot( + msg := NewMsgMakeRootV2( creator, - accountHash, - merklePath, - "Contents", string(jsonEditors), "Viewers", trackingNumber, diff --git a/x/filetree/types/tx.pb.go b/x/filetree/types/tx.pb.go index 12be99f12..7648ef2eb 100644 --- a/x/filetree/types/tx.pb.go +++ b/x/filetree/types/tx.pb.go @@ -571,98 +571,6 @@ func (m *MsgRemoveViewersResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgRemoveViewersResponse proto.InternalMessageInfo -type MsgMakeRoot struct { - Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Account string `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"` - RootHashPath string `protobuf:"bytes,3,opt,name=root_hash_path,json=rootHashPath,proto3" json:"root_hash_path,omitempty"` - Contents string `protobuf:"bytes,4,opt,name=contents,proto3" json:"contents,omitempty"` - Editors string `protobuf:"bytes,5,opt,name=editors,proto3" json:"editors,omitempty"` - Viewers string `protobuf:"bytes,6,opt,name=viewers,proto3" json:"viewers,omitempty"` - TrackingNumber string `protobuf:"bytes,7,opt,name=tracking_number,json=trackingNumber,proto3" json:"tracking_number,omitempty"` -} - -func (m *MsgMakeRoot) Reset() { *m = MsgMakeRoot{} } -func (m *MsgMakeRoot) String() string { return proto.CompactTextString(m) } -func (*MsgMakeRoot) ProtoMessage() {} -func (*MsgMakeRoot) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{10} -} -func (m *MsgMakeRoot) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgMakeRoot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgMakeRoot.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 *MsgMakeRoot) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgMakeRoot.Merge(m, src) -} -func (m *MsgMakeRoot) XXX_Size() int { - return m.Size() -} -func (m *MsgMakeRoot) XXX_DiscardUnknown() { - xxx_messageInfo_MsgMakeRoot.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgMakeRoot proto.InternalMessageInfo - -func (m *MsgMakeRoot) GetCreator() string { - if m != nil { - return m.Creator - } - return "" -} - -func (m *MsgMakeRoot) GetAccount() string { - if m != nil { - return m.Account - } - return "" -} - -func (m *MsgMakeRoot) GetRootHashPath() string { - if m != nil { - return m.RootHashPath - } - return "" -} - -func (m *MsgMakeRoot) GetContents() string { - if m != nil { - return m.Contents - } - return "" -} - -func (m *MsgMakeRoot) GetEditors() string { - if m != nil { - return m.Editors - } - return "" -} - -func (m *MsgMakeRoot) GetViewers() string { - if m != nil { - return m.Viewers - } - return "" -} - -func (m *MsgMakeRoot) GetTrackingNumber() string { - if m != nil { - return m.TrackingNumber - } - return "" -} - type MsgMakeRootResponse struct { } @@ -670,7 +578,7 @@ func (m *MsgMakeRootResponse) Reset() { *m = MsgMakeRootResponse{} } func (m *MsgMakeRootResponse) String() string { return proto.CompactTextString(m) } func (*MsgMakeRootResponse) ProtoMessage() {} func (*MsgMakeRootResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{11} + return fileDescriptor_e5756d04c34e5a81, []int{10} } func (m *MsgMakeRootResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -710,7 +618,7 @@ func (m *MsgMakeRootV2) Reset() { *m = MsgMakeRootV2{} } func (m *MsgMakeRootV2) String() string { return proto.CompactTextString(m) } func (*MsgMakeRootV2) ProtoMessage() {} func (*MsgMakeRootV2) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{12} + return fileDescriptor_e5756d04c34e5a81, []int{11} } func (m *MsgMakeRootV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -779,7 +687,7 @@ func (m *MsgAddEditors) Reset() { *m = MsgAddEditors{} } func (m *MsgAddEditors) String() string { return proto.CompactTextString(m) } func (*MsgAddEditors) ProtoMessage() {} func (*MsgAddEditors) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{13} + return fileDescriptor_e5756d04c34e5a81, []int{12} } func (m *MsgAddEditors) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -850,7 +758,7 @@ func (m *MsgAddEditorsResponse) Reset() { *m = MsgAddEditorsResponse{} } func (m *MsgAddEditorsResponse) String() string { return proto.CompactTextString(m) } func (*MsgAddEditorsResponse) ProtoMessage() {} func (*MsgAddEditorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{14} + return fileDescriptor_e5756d04c34e5a81, []int{13} } func (m *MsgAddEditorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -890,7 +798,7 @@ func (m *MsgRemoveEditors) Reset() { *m = MsgRemoveEditors{} } func (m *MsgRemoveEditors) String() string { return proto.CompactTextString(m) } func (*MsgRemoveEditors) ProtoMessage() {} func (*MsgRemoveEditors) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{15} + return fileDescriptor_e5756d04c34e5a81, []int{14} } func (m *MsgRemoveEditors) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -954,7 +862,7 @@ func (m *MsgRemoveEditorsResponse) Reset() { *m = MsgRemoveEditorsRespon func (m *MsgRemoveEditorsResponse) String() string { return proto.CompactTextString(m) } func (*MsgRemoveEditorsResponse) ProtoMessage() {} func (*MsgRemoveEditorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{16} + return fileDescriptor_e5756d04c34e5a81, []int{15} } func (m *MsgRemoveEditorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -993,7 +901,7 @@ func (m *MsgResetEditors) Reset() { *m = MsgResetEditors{} } func (m *MsgResetEditors) String() string { return proto.CompactTextString(m) } func (*MsgResetEditors) ProtoMessage() {} func (*MsgResetEditors) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{17} + return fileDescriptor_e5756d04c34e5a81, []int{16} } func (m *MsgResetEditors) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1050,7 +958,7 @@ func (m *MsgResetEditorsResponse) Reset() { *m = MsgResetEditorsResponse func (m *MsgResetEditorsResponse) String() string { return proto.CompactTextString(m) } func (*MsgResetEditorsResponse) ProtoMessage() {} func (*MsgResetEditorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{18} + return fileDescriptor_e5756d04c34e5a81, []int{17} } func (m *MsgResetEditorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1089,7 +997,7 @@ func (m *MsgResetViewers) Reset() { *m = MsgResetViewers{} } func (m *MsgResetViewers) String() string { return proto.CompactTextString(m) } func (*MsgResetViewers) ProtoMessage() {} func (*MsgResetViewers) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{19} + return fileDescriptor_e5756d04c34e5a81, []int{18} } func (m *MsgResetViewers) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1146,7 +1054,7 @@ func (m *MsgResetViewersResponse) Reset() { *m = MsgResetViewersResponse func (m *MsgResetViewersResponse) String() string { return proto.CompactTextString(m) } func (*MsgResetViewersResponse) ProtoMessage() {} func (*MsgResetViewersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{20} + return fileDescriptor_e5756d04c34e5a81, []int{19} } func (m *MsgResetViewersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1179,14 +1087,14 @@ type MsgChangeOwner struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` FileOwner string `protobuf:"bytes,3,opt,name=file_owner,json=fileOwner,proto3" json:"file_owner,omitempty"` - NewOwner string `protobuf:"bytes,4,opt,name=newOwner,proto3" json:"newOwner,omitempty"` + NewOwner string `protobuf:"bytes,4,opt,name=new_owner,json=newOwner,proto3" json:"new_owner,omitempty"` } func (m *MsgChangeOwner) Reset() { *m = MsgChangeOwner{} } func (m *MsgChangeOwner) String() string { return proto.CompactTextString(m) } func (*MsgChangeOwner) ProtoMessage() {} func (*MsgChangeOwner) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{21} + return fileDescriptor_e5756d04c34e5a81, []int{20} } func (m *MsgChangeOwner) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1250,7 +1158,7 @@ func (m *MsgChangeOwnerResponse) Reset() { *m = MsgChangeOwnerResponse{} func (m *MsgChangeOwnerResponse) String() string { return proto.CompactTextString(m) } func (*MsgChangeOwnerResponse) ProtoMessage() {} func (*MsgChangeOwnerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e5756d04c34e5a81, []int{22} + return fileDescriptor_e5756d04c34e5a81, []int{21} } func (m *MsgChangeOwnerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1290,7 +1198,6 @@ func init() { proto.RegisterType((*MsgDeleteFileResponse)(nil), "canine_chain.filetree.MsgDeleteFileResponse") proto.RegisterType((*MsgRemoveViewers)(nil), "canine_chain.filetree.MsgRemoveViewers") proto.RegisterType((*MsgRemoveViewersResponse)(nil), "canine_chain.filetree.MsgRemoveViewersResponse") - proto.RegisterType((*MsgMakeRoot)(nil), "canine_chain.filetree.MsgMakeRoot") proto.RegisterType((*MsgMakeRootResponse)(nil), "canine_chain.filetree.MsgMakeRootResponse") proto.RegisterType((*MsgMakeRootV2)(nil), "canine_chain.filetree.MsgMakeRootV2") proto.RegisterType((*MsgAddEditors)(nil), "canine_chain.filetree.MsgAddEditors") @@ -1308,62 +1215,59 @@ func init() { func init() { proto.RegisterFile("canine_chain/filetree/tx.proto", fileDescriptor_e5756d04c34e5a81) } var fileDescriptor_e5756d04c34e5a81 = []byte{ - // 871 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcf, 0x53, 0xdb, 0x38, - 0x14, 0xc6, 0x24, 0x90, 0xe4, 0xf1, 0x73, 0xbc, 0xcb, 0xe2, 0xf5, 0x0e, 0xd9, 0x5d, 0x0f, 0xbb, - 0x94, 0x4e, 0x49, 0x66, 0xe0, 0xd2, 0x6b, 0x4b, 0xdb, 0x69, 0x87, 0xa6, 0x30, 0x39, 0xd0, 0x19, - 0x0e, 0x0d, 0x8e, 0x2d, 0x6c, 0x37, 0xc1, 0xca, 0x58, 0xe2, 0x47, 0x4e, 0xbd, 0x74, 0x7a, 0xee, - 0xdf, 0xd0, 0x4b, 0xff, 0x95, 0x1e, 0x39, 0xf6, 0xc8, 0xc0, 0x7f, 0xd1, 0x53, 0xc7, 0x96, 0x64, - 0x2b, 0x26, 0xb1, 0xd3, 0x42, 0x6f, 0xd1, 0x7b, 0x9f, 0xf4, 0x7d, 0x7a, 0x7a, 0x9f, 0x14, 0x43, - 0xd5, 0x32, 0x7d, 0xcf, 0x47, 0x2d, 0xcb, 0x35, 0x3d, 0xbf, 0x7e, 0xe4, 0x75, 0x11, 0x0d, 0x10, - 0xaa, 0xd3, 0xf3, 0x5a, 0x2f, 0xc0, 0x14, 0xab, 0x4b, 0x72, 0xbe, 0x26, 0xf2, 0xc6, 0x37, 0x05, - 0x66, 0x1a, 0xc4, 0xd9, 0xc3, 0x84, 0x3e, 0xf3, 0xba, 0x48, 0xd5, 0xa0, 0x64, 0x05, 0xc8, 0xa4, - 0x38, 0xd0, 0x94, 0x7f, 0x94, 0x7b, 0x95, 0xa6, 0x18, 0x86, 0x19, 0xd3, 0xb2, 0xf0, 0x89, 0x4f, - 0xb5, 0x49, 0x96, 0xe1, 0x43, 0xf5, 0x6f, 0x98, 0x71, 0x4d, 0xe2, 0xb6, 0x7a, 0x66, 0x80, 0x7c, - 0xaa, 0x15, 0xa2, 0x2c, 0x84, 0xa1, 0xbd, 0x28, 0xa2, 0xae, 0x40, 0x34, 0x6a, 0x59, 0xae, 0xd7, - 0xb5, 0xb5, 0x62, 0x94, 0xaf, 0x84, 0x91, 0xed, 0x30, 0xa0, 0xea, 0x50, 0xb6, 0xb0, 0x4f, 0x91, - 0x4f, 0x89, 0x36, 0x15, 0x25, 0xe3, 0x71, 0xc8, 0x7a, 0xea, 0xa1, 0x33, 0x14, 0x10, 0x6d, 0x9a, - 0xb1, 0xf2, 0x61, 0x98, 0x41, 0xb6, 0x47, 0x71, 0x40, 0xb4, 0x12, 0xcb, 0xf0, 0xa1, 0xba, 0x06, - 0x0b, 0x34, 0x30, 0xad, 0x8e, 0xe7, 0x3b, 0x2d, 0xff, 0xe4, 0xb8, 0x8d, 0x02, 0xad, 0x1c, 0x21, - 0xe6, 0x45, 0xf8, 0x55, 0x14, 0x35, 0xd6, 0xe1, 0x37, 0x69, 0xef, 0x4d, 0x44, 0x7a, 0xd8, 0x27, - 0x48, 0x55, 0xa1, 0xd8, 0x33, 0xa9, 0xcb, 0x0b, 0x10, 0xfd, 0x36, 0x3e, 0x29, 0x30, 0xd7, 0x20, - 0xce, 0x23, 0xdb, 0xde, 0x4f, 0xf8, 0x47, 0x54, 0x6a, 0x05, 0x80, 0x89, 0x6c, 0x79, 0x36, 0xe1, - 0xc5, 0xaa, 0xb0, 0xc8, 0x0b, 0x9b, 0x84, 0xe5, 0xe2, 0xe9, 0x0e, 0xea, 0x13, 0x51, 0x2e, 0x16, - 0xda, 0x41, 0xfd, 0x68, 0x65, 0xd3, 0xb6, 0x03, 0x44, 0x08, 0xaf, 0x95, 0x18, 0x86, 0x2b, 0x87, - 0x27, 0xd7, 0xc2, 0x67, 0x3e, 0x0a, 0x78, 0xad, 0x2a, 0x61, 0x64, 0x37, 0x0c, 0x18, 0xcb, 0xb0, - 0x34, 0xa0, 0x51, 0xec, 0xc8, 0x78, 0x08, 0xc0, 0x37, 0xba, 0x83, 0xfa, 0x19, 0xca, 0x17, 0xa1, - 0xd0, 0x41, 0x7d, 0x2e, 0x39, 0xfc, 0x69, 0xfc, 0x0e, 0x6a, 0x32, 0x33, 0x5e, 0xef, 0x30, 0x2a, - 0xc6, 0x13, 0xd4, 0x45, 0x14, 0xe5, 0xb4, 0xcd, 0x5f, 0x50, 0xe1, 0xcd, 0x41, 0x5d, 0xbe, 0x70, - 0x99, 0xb5, 0x06, 0x75, 0xe5, 0x9e, 0x2a, 0x0c, 0xf4, 0x14, 0xdf, 0x4a, 0xc2, 0x10, 0x53, 0xbf, - 0x57, 0x60, 0xb1, 0x41, 0x9c, 0x26, 0x3a, 0xc6, 0xa7, 0xe8, 0xd6, 0x67, 0x21, 0x95, 0xba, 0x90, - 0x55, 0xea, 0x62, 0xba, 0xd4, 0x3a, 0x68, 0x69, 0x15, 0xb1, 0xc4, 0x4b, 0xe6, 0xa9, 0x86, 0xd9, - 0x41, 0x4d, 0x8c, 0xe9, 0x4f, 0x79, 0x6a, 0x15, 0xe6, 0x03, 0x8c, 0x69, 0x2b, 0xa9, 0x1d, 0xd3, - 0x37, 0x1b, 0x46, 0x9f, 0x8b, 0xfa, 0xc9, 0xce, 0x29, 0xde, 0x74, 0x8e, 0xf0, 0xc7, 0xd4, 0xa0, - 0x3f, 0x46, 0x7b, 0x6a, 0x88, 0x73, 0x4a, 0x43, 0x9d, 0xb3, 0x14, 0x39, 0x47, 0xec, 0x30, 0xde, - 0xf9, 0x07, 0xe6, 0x12, 0x11, 0xdf, 0xdf, 0xcc, 0xde, 0xbb, 0xd0, 0x37, 0x39, 0x52, 0x5f, 0x21, - 0x57, 0x5f, 0x71, 0xa8, 0xbe, 0xc4, 0xae, 0x4f, 0x93, 0x45, 0x47, 0xb7, 0x08, 0x63, 0x96, 0x5b, - 0x84, 0x45, 0xb8, 0x5d, 0x79, 0x5a, 0xb6, 0x2b, 0x0b, 0xdd, 0x91, 0x5d, 0xb9, 0xc6, 0xe1, 0x3d, - 0x7e, 0xeb, 0x0d, 0xdc, 0x49, 0x8f, 0xa7, 0x25, 0xda, 0xb0, 0x10, 0xe5, 0x08, 0xa2, 0xf9, 0x02, - 0x25, 0x05, 0x93, 0x59, 0x0a, 0x0a, 0x69, 0x05, 0x7f, 0xc2, 0x72, 0x8a, 0x65, 0x98, 0x80, 0xfc, - 0x5b, 0xe0, 0x2e, 0x04, 0xa4, 0x5d, 0xfe, 0x0e, 0xe6, 0x1b, 0xc4, 0xd9, 0x76, 0x4d, 0xdf, 0x61, - 0xe0, 0x5f, 0xc0, 0x1f, 0x1a, 0xdc, 0x47, 0x67, 0xbb, 0xd2, 0xf9, 0xc4, 0x63, 0x43, 0x83, 0x3f, - 0x06, 0x05, 0x08, 0x69, 0x9b, 0x9f, 0x2b, 0x50, 0x68, 0x10, 0x47, 0x3d, 0x80, 0x72, 0xfc, 0xb0, - 0x1b, 0xb5, 0xa1, 0x7f, 0x00, 0x6a, 0xd2, 0x03, 0xa8, 0xdf, 0xcf, 0xc7, 0xc4, 0x8f, 0xe4, 0x21, - 0x80, 0xf4, 0x18, 0xae, 0x8e, 0x9e, 0x99, 0xa0, 0xf4, 0x07, 0xe3, 0xa0, 0x62, 0x86, 0xd7, 0x50, - 0x12, 0x2f, 0xd6, 0xbf, 0xd9, 0xc2, 0x76, 0x50, 0x5f, 0x5f, 0xcf, 0x85, 0xc8, 0xd2, 0xa5, 0xa7, - 0x2b, 0x43, 0x7a, 0x82, 0xca, 0x92, 0x7e, 0xf3, 0x91, 0x52, 0x3d, 0x98, 0x1b, 0x7c, 0xa0, 0xd6, - 0x46, 0x4f, 0x1f, 0x00, 0xea, 0xf5, 0x31, 0x81, 0x31, 0xd5, 0x01, 0x94, 0xe3, 0x87, 0x26, 0xe3, - 0x8c, 0x05, 0x26, 0xeb, 0x8c, 0xd3, 0xd7, 0xb9, 0xfa, 0x06, 0x40, 0xba, 0xca, 0x57, 0xf3, 0x67, - 0xee, 0x6f, 0xfe, 0xd0, 0xfa, 0xac, 0x87, 0xc4, 0xfd, 0x91, 0xdd, 0x43, 0x1c, 0x95, 0xd3, 0x43, - 0xa9, 0x5b, 0x22, 0x39, 0x08, 0x41, 0x92, 0x7b, 0x10, 0x82, 0xa7, 0x3e, 0x26, 0x30, 0xa6, 0x3a, - 0x82, 0xd9, 0x81, 0xeb, 0xf0, 0xff, 0xac, 0x05, 0x12, 0x9c, 0x5e, 0x1b, 0x0f, 0x77, 0x83, 0x47, - 0xb4, 0x56, 0x1e, 0x8f, 0xe8, 0xac, 0xda, 0x78, 0xb8, 0x98, 0xc7, 0x82, 0x19, 0xf9, 0x72, 0xfb, - 0x6f, 0xf4, 0x74, 0x09, 0xa6, 0x6f, 0x8c, 0x05, 0x13, 0x24, 0x8f, 0x1b, 0x5f, 0xae, 0xaa, 0xca, - 0xc5, 0x55, 0x55, 0xb9, 0xbc, 0xaa, 0x2a, 0x1f, 0xaf, 0xab, 0x13, 0x17, 0xd7, 0xd5, 0x89, 0xaf, - 0xd7, 0xd5, 0x89, 0x83, 0x2d, 0xc7, 0xa3, 0xee, 0x49, 0xbb, 0x66, 0xe1, 0xe3, 0xfa, 0x5b, 0xd3, - 0xea, 0x98, 0xdd, 0x97, 0x66, 0x9b, 0xd4, 0xd9, 0xea, 0x1b, 0xec, 0x2b, 0xe7, 0x5c, 0xfa, 0xce, - 0xe9, 0xf7, 0x10, 0x69, 0x4f, 0x47, 0xdf, 0x3a, 0x5b, 0xdf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xe7, - 0xe4, 0xf7, 0xb2, 0x0d, 0x0d, 0x00, 0x00, + // 819 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcf, 0x6f, 0xd3, 0x48, + 0x14, 0xae, 0x9b, 0x6c, 0x9b, 0xbc, 0x6e, 0x7f, 0xc8, 0xbb, 0xdd, 0x7a, 0xbd, 0x6a, 0x76, 0x37, + 0x02, 0x4a, 0x11, 0x4d, 0xa4, 0xf6, 0xc2, 0x15, 0x0a, 0x48, 0xa8, 0x04, 0xaa, 0x1c, 0x8a, 0xd4, + 0x03, 0xa9, 0x63, 0xbf, 0xda, 0x26, 0xa9, 0x1d, 0x79, 0xa6, 0x4d, 0x73, 0xe3, 0x80, 0x38, 0xf3, + 0x37, 0xf0, 0xd7, 0x20, 0x71, 0xe9, 0x91, 0x23, 0x6a, 0xff, 0x0b, 0x4e, 0xc8, 0x9e, 0x19, 0x7b, + 0xec, 0x26, 0x76, 0xa4, 0x96, 0x5b, 0xe6, 0xbd, 0xcf, 0xf3, 0x7d, 0xf3, 0xde, 0x37, 0x6f, 0x02, + 0x35, 0xd3, 0xf0, 0x5c, 0x0f, 0x3b, 0xa6, 0x63, 0xb8, 0x5e, 0xf3, 0xd8, 0xed, 0x23, 0x0d, 0x10, + 0x9b, 0xf4, 0xbc, 0x31, 0x08, 0x7c, 0xea, 0xab, 0xab, 0x72, 0xbe, 0x21, 0xf2, 0xf5, 0x1f, 0x0a, + 0x2c, 0xb4, 0x88, 0xbd, 0xef, 0x13, 0xfa, 0xdc, 0xed, 0xa3, 0xaa, 0xc1, 0xbc, 0x19, 0xa0, 0x41, + 0xfd, 0x40, 0x53, 0xfe, 0x53, 0xee, 0x57, 0xdb, 0x62, 0x19, 0x66, 0x0c, 0xd3, 0xf4, 0x4f, 0x3d, + 0xaa, 0xcd, 0xb2, 0x0c, 0x5f, 0xaa, 0xff, 0xc2, 0x82, 0x63, 0x10, 0xa7, 0x33, 0x30, 0x02, 0xf4, + 0xa8, 0x56, 0x8a, 0xb2, 0x10, 0x86, 0xf6, 0xa3, 0x88, 0xba, 0x0e, 0xd1, 0xaa, 0x63, 0x3a, 0x6e, + 0xdf, 0xd2, 0xca, 0x51, 0xbe, 0x1a, 0x46, 0x76, 0xc3, 0x80, 0xaa, 0x43, 0xc5, 0xf4, 0x3d, 0x8a, + 0x1e, 0x25, 0xda, 0x6f, 0x51, 0x32, 0x5e, 0x87, 0xac, 0x67, 0x2e, 0x0e, 0x31, 0x20, 0xda, 0x1c, + 0x63, 0xe5, 0xcb, 0x30, 0x83, 0x96, 0x4b, 0xfd, 0x80, 0x68, 0xf3, 0x2c, 0xc3, 0x97, 0xea, 0x06, + 0x2c, 0xd3, 0xc0, 0x30, 0x7b, 0xae, 0x67, 0x77, 0xbc, 0xd3, 0x93, 0x2e, 0x06, 0x5a, 0x25, 0x42, + 0x2c, 0x89, 0xf0, 0xab, 0x28, 0x5a, 0xdf, 0x84, 0x3f, 0xa4, 0xb3, 0xb7, 0x91, 0x0c, 0x7c, 0x8f, + 0xa0, 0xaa, 0x42, 0x79, 0x60, 0x50, 0x87, 0x17, 0x20, 0xfa, 0x5d, 0xff, 0xac, 0xc0, 0x62, 0x8b, + 0xd8, 0x8f, 0x2d, 0xeb, 0x20, 0xe1, 0x9f, 0x50, 0xa9, 0x75, 0x00, 0x26, 0xb2, 0xe3, 0x5a, 0x84, + 0x17, 0xab, 0xca, 0x22, 0x2f, 0x2c, 0x12, 0x96, 0x8b, 0xa7, 0x7b, 0x38, 0x22, 0xa2, 0x5c, 0x2c, + 0xb4, 0x87, 0xa3, 0x68, 0x67, 0xc3, 0xb2, 0x02, 0x24, 0x84, 0xd7, 0x4a, 0x2c, 0xc3, 0x9d, 0xc3, + 0xce, 0x75, 0xfc, 0xa1, 0x87, 0x01, 0xaf, 0x55, 0x35, 0x8c, 0xbc, 0x0e, 0x03, 0xf5, 0x35, 0x58, + 0x4d, 0x69, 0x14, 0x27, 0xaa, 0x3f, 0x02, 0xe0, 0x07, 0xdd, 0xc3, 0x51, 0x8e, 0xf2, 0x15, 0x28, + 0xf5, 0x70, 0xc4, 0x25, 0x87, 0x3f, 0xeb, 0x7f, 0x82, 0x9a, 0x7c, 0x19, 0xef, 0x77, 0x14, 0x15, + 0xe3, 0x29, 0xf6, 0x91, 0x62, 0x81, 0x6d, 0xfe, 0x81, 0x2a, 0x37, 0x07, 0x75, 0xf8, 0xc6, 0x15, + 0x66, 0x0d, 0xea, 0xc8, 0x9e, 0x2a, 0xa5, 0x3c, 0xc5, 0x8f, 0x92, 0x30, 0xc4, 0xd4, 0x1f, 0x14, + 0x58, 0x69, 0x11, 0xbb, 0x8d, 0x27, 0xfe, 0x19, 0xde, 0xb8, 0x17, 0x52, 0xa9, 0x4b, 0x79, 0xa5, + 0x2e, 0x67, 0x4b, 0xad, 0x83, 0x96, 0x55, 0x11, 0x4b, 0x5c, 0x8d, 0x6c, 0xd5, 0x32, 0x7a, 0xd8, + 0xf6, 0x7d, 0x1a, 0x87, 0x3f, 0x32, 0x0b, 0x89, 0xf8, 0xc1, 0x76, 0xfe, 0x65, 0x13, 0xe6, 0x9e, + 0x4d, 0x9b, 0x5b, 0xba, 0x10, 0xa5, 0xf4, 0x85, 0x18, 0x63, 0xfb, 0xf2, 0x58, 0xdb, 0x27, 0x5e, + 0x7e, 0x96, 0x6c, 0x3a, 0xb9, 0x7e, 0x8c, 0x59, 0xae, 0x1f, 0x8b, 0x70, 0x2f, 0xf3, 0xb4, 0xec, + 0x65, 0x16, 0xba, 0x25, 0x2f, 0x73, 0x8d, 0xe3, 0x0d, 0x70, 0xe3, 0x03, 0xdc, 0x8a, 0x01, 0xb2, + 0x12, 0x2d, 0x58, 0x8e, 0x72, 0x04, 0x69, 0xb1, 0x40, 0x49, 0xc1, 0x6c, 0x9e, 0x82, 0x52, 0x56, + 0xc1, 0xdf, 0xb0, 0x96, 0x61, 0x19, 0x27, 0xa0, 0xf8, 0x8a, 0xdc, 0x86, 0x80, 0xec, 0x15, 0x78, + 0xaf, 0xc0, 0x52, 0x8b, 0xd8, 0xbb, 0x8e, 0xe1, 0xd9, 0x0c, 0xfd, 0x0b, 0x04, 0x84, 0xb3, 0xc5, + 0xc3, 0x61, 0xaa, 0x43, 0x15, 0x0f, 0x87, 0x4c, 0x9d, 0x06, 0x7f, 0xa5, 0x15, 0x08, 0x71, 0xdb, + 0x5f, 0x2b, 0x50, 0x6a, 0x11, 0x5b, 0x3d, 0x84, 0x4a, 0xfc, 0xee, 0xd5, 0x1b, 0x63, 0xdf, 0xc7, + 0x86, 0xf4, 0x3e, 0xe8, 0x0f, 0x8a, 0x31, 0xf1, 0x1b, 0x72, 0x04, 0x20, 0xbd, 0x15, 0x77, 0x26, + 0x7f, 0x99, 0xa0, 0xf4, 0x87, 0xd3, 0xa0, 0x62, 0x86, 0x37, 0x30, 0x2f, 0x06, 0xfa, 0xff, 0xf9, + 0xc2, 0xf6, 0x70, 0xa4, 0x6f, 0x16, 0x42, 0x64, 0xe9, 0xd2, 0x64, 0xcf, 0x91, 0x9e, 0xa0, 0xf2, + 0xa4, 0x5f, 0x9f, 0xe1, 0xaa, 0x0b, 0x8b, 0xe9, 0xf9, 0xbd, 0x31, 0xf9, 0xf3, 0x14, 0x50, 0x6f, + 0x4e, 0x09, 0x8c, 0xa9, 0xde, 0x02, 0x48, 0x03, 0x37, 0xe7, 0x30, 0x09, 0x2a, 0xaf, 0xcf, 0xd9, + 0xa1, 0xce, 0xfb, 0x2c, 0x6e, 0x79, 0x7e, 0x9f, 0x39, 0xaa, 0xa0, 0xcf, 0x99, 0xbb, 0x9c, 0x14, + 0x4b, 0x90, 0x14, 0x16, 0x4b, 0xf0, 0x34, 0xa7, 0x04, 0xc6, 0x54, 0xc7, 0xf0, 0x7b, 0x6a, 0x68, + 0xdd, 0xcb, 0xdb, 0x20, 0xc1, 0xe9, 0x8d, 0xe9, 0x70, 0xd7, 0x78, 0x44, 0xfb, 0x8b, 0x78, 0x44, + 0xf7, 0x1b, 0xd3, 0xe1, 0x62, 0x1e, 0x13, 0x16, 0xe4, 0x09, 0x74, 0x77, 0xf2, 0xe7, 0x12, 0x4c, + 0xdf, 0x9a, 0x0a, 0x26, 0x48, 0x9e, 0xb4, 0xbe, 0x5c, 0xd6, 0x94, 0x8b, 0xcb, 0x9a, 0xf2, 0xfd, + 0xb2, 0xa6, 0x7c, 0xba, 0xaa, 0xcd, 0x5c, 0x5c, 0xd5, 0x66, 0xbe, 0x5d, 0xd5, 0x66, 0x0e, 0x77, + 0x6c, 0x97, 0x3a, 0xa7, 0xdd, 0x86, 0xe9, 0x9f, 0x34, 0xdf, 0x19, 0x66, 0xcf, 0xe8, 0xbf, 0x34, + 0xba, 0xa4, 0xc9, 0x76, 0xdf, 0x62, 0x7f, 0xd4, 0xcf, 0xa5, 0xbf, 0xea, 0xa3, 0x01, 0x92, 0xee, + 0x5c, 0xf4, 0x77, 0x7d, 0xe7, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x75, 0xf6, 0x78, 0xa7, 0xd0, + 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1383,7 +1287,6 @@ type MsgClient interface { PostKey(ctx context.Context, in *MsgPostKey, opts ...grpc.CallOption) (*MsgPostKeyResponse, error) DeleteFile(ctx context.Context, in *MsgDeleteFile, opts ...grpc.CallOption) (*MsgDeleteFileResponse, error) RemoveViewers(ctx context.Context, in *MsgRemoveViewers, opts ...grpc.CallOption) (*MsgRemoveViewersResponse, error) - MakeRoot(ctx context.Context, in *MsgMakeRoot, opts ...grpc.CallOption) (*MsgMakeRootResponse, error) MakeRootV2(ctx context.Context, in *MsgMakeRootV2, opts ...grpc.CallOption) (*MsgMakeRootResponse, error) AddEditors(ctx context.Context, in *MsgAddEditors, opts ...grpc.CallOption) (*MsgAddEditorsResponse, error) RemoveEditors(ctx context.Context, in *MsgRemoveEditors, opts ...grpc.CallOption) (*MsgRemoveEditorsResponse, error) @@ -1445,15 +1348,6 @@ func (c *msgClient) RemoveViewers(ctx context.Context, in *MsgRemoveViewers, opt return out, nil } -func (c *msgClient) MakeRoot(ctx context.Context, in *MsgMakeRoot, opts ...grpc.CallOption) (*MsgMakeRootResponse, error) { - out := new(MsgMakeRootResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Msg/MakeRoot", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *msgClient) MakeRootV2(ctx context.Context, in *MsgMakeRootV2, opts ...grpc.CallOption) (*MsgMakeRootResponse, error) { out := new(MsgMakeRootResponse) err := c.cc.Invoke(ctx, "/canine_chain.filetree.Msg/MakeRootV2", in, out, opts...) @@ -1515,7 +1409,6 @@ type MsgServer interface { PostKey(context.Context, *MsgPostKey) (*MsgPostKeyResponse, error) DeleteFile(context.Context, *MsgDeleteFile) (*MsgDeleteFileResponse, error) RemoveViewers(context.Context, *MsgRemoveViewers) (*MsgRemoveViewersResponse, error) - MakeRoot(context.Context, *MsgMakeRoot) (*MsgMakeRootResponse, error) MakeRootV2(context.Context, *MsgMakeRootV2) (*MsgMakeRootResponse, error) AddEditors(context.Context, *MsgAddEditors) (*MsgAddEditorsResponse, error) RemoveEditors(context.Context, *MsgRemoveEditors) (*MsgRemoveEditorsResponse, error) @@ -1543,9 +1436,6 @@ func (*UnimplementedMsgServer) DeleteFile(ctx context.Context, req *MsgDeleteFil func (*UnimplementedMsgServer) RemoveViewers(ctx context.Context, req *MsgRemoveViewers) (*MsgRemoveViewersResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RemoveViewers not implemented") } -func (*UnimplementedMsgServer) MakeRoot(ctx context.Context, req *MsgMakeRoot) (*MsgMakeRootResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MakeRoot not implemented") -} func (*UnimplementedMsgServer) MakeRootV2(ctx context.Context, req *MsgMakeRootV2) (*MsgMakeRootResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method MakeRootV2 not implemented") } @@ -1659,24 +1549,6 @@ func _Msg_RemoveViewers_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } -func _Msg_MakeRoot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgMakeRoot) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).MakeRoot(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/canine_chain.filetree.Msg/MakeRoot", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).MakeRoot(ctx, req.(*MsgMakeRoot)) - } - return interceptor(ctx, in, info, handler) -} - func _Msg_MakeRootV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgMakeRootV2) if err := dec(in); err != nil { @@ -1809,10 +1681,6 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "RemoveViewers", Handler: _Msg_RemoveViewers_Handler, }, - { - MethodName: "MakeRoot", - Handler: _Msg_MakeRoot_Handler, - }, { MethodName: "MakeRootV2", Handler: _Msg_MakeRootV2_Handler, @@ -2233,78 +2101,6 @@ func (m *MsgRemoveViewersResponse) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } -func (m *MsgMakeRoot) 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 *MsgMakeRoot) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgMakeRoot) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TrackingNumber) > 0 { - i -= len(m.TrackingNumber) - copy(dAtA[i:], m.TrackingNumber) - i = encodeVarintTx(dAtA, i, uint64(len(m.TrackingNumber))) - i-- - dAtA[i] = 0x3a - } - if len(m.Viewers) > 0 { - i -= len(m.Viewers) - copy(dAtA[i:], m.Viewers) - i = encodeVarintTx(dAtA, i, uint64(len(m.Viewers))) - i-- - dAtA[i] = 0x32 - } - if len(m.Editors) > 0 { - i -= len(m.Editors) - copy(dAtA[i:], m.Editors) - i = encodeVarintTx(dAtA, i, uint64(len(m.Editors))) - i-- - dAtA[i] = 0x2a - } - if len(m.Contents) > 0 { - i -= len(m.Contents) - copy(dAtA[i:], m.Contents) - i = encodeVarintTx(dAtA, i, uint64(len(m.Contents))) - i-- - dAtA[i] = 0x22 - } - if len(m.RootHashPath) > 0 { - i -= len(m.RootHashPath) - copy(dAtA[i:], m.RootHashPath) - i = encodeVarintTx(dAtA, i, uint64(len(m.RootHashPath))) - i-- - dAtA[i] = 0x1a - } - if len(m.Account) > 0 { - i -= len(m.Account) - copy(dAtA[i:], m.Account) - i = encodeVarintTx(dAtA, i, uint64(len(m.Account))) - i-- - dAtA[i] = 0x12 - } - if len(m.Creator) > 0 { - i -= len(m.Creator) - copy(dAtA[i:], m.Creator) - i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - func (m *MsgMakeRootResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2935,43 +2731,6 @@ func (m *MsgRemoveViewersResponse) Size() (n int) { return n } -func (m *MsgMakeRoot) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Creator) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.Account) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.RootHashPath) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.Contents) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.Editors) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.Viewers) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.TrackingNumber) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - func (m *MsgMakeRootResponse) Size() (n int) { if m == nil { return 0 @@ -4414,280 +4173,6 @@ func (m *MsgRemoveViewersResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgMakeRoot) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgMakeRoot: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgMakeRoot: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Creator = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Account", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Account = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RootHashPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.RootHashPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Contents", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Contents = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Editors", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Editors = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Viewers", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Viewers = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TrackingNumber", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TrackingNumber = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *MsgMakeRootResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/oracle/simulation/delist.go b/x/oracle/simulation/delist.go index 1aa6f49cf..83719cc2a 100644 --- a/x/oracle/simulation/delist.go +++ b/x/oracle/simulation/delist.go @@ -18,7 +18,7 @@ func SimulateMsgDelist( return func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { simAccount, _ := simtypes.RandomAcc(r, accs) - msg := &types.MsgDeList{ + msg := &types.MsgDelist{ Creator: simAccount.Address.String(), } diff --git a/x/rns/handler.go b/x/rns/handler.go index dacd50dae..e1c2164ff 100644 --- a/x/rns/handler.go +++ b/x/rns/handler.go @@ -35,8 +35,8 @@ func NewHandler(k keeper.Keeper) sdk.Handler { case *types.MsgBuy: res, err := msgServer.Buy(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgDeList: - res, err := msgServer.DeList(sdk.WrapSDKContext(ctx), msg) + case *types.MsgDelist: + res, err := msgServer.Delist(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) case *types.MsgTransfer: res, err := msgServer.Transfer(sdk.WrapSDKContext(ctx), msg) diff --git a/x/rns/keeper/msg_server_delist.go b/x/rns/keeper/msg_server_delist.go index c6e999be2..19a00112f 100644 --- a/x/rns/keeper/msg_server_delist.go +++ b/x/rns/keeper/msg_server_delist.go @@ -10,7 +10,7 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/rns/types" ) -func (k msgServer) DeList(goCtx context.Context, msg *types.MsgDeList) (*types.MsgDeListResponse, error) { +func (k msgServer) Delist(goCtx context.Context, msg *types.MsgDelist) (*types.MsgDelistResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) mname := strings.ToLower(msg.Name) @@ -41,5 +41,5 @@ func (k msgServer) DeList(goCtx context.Context, msg *types.MsgDeList) (*types.M k.RemoveForsale(ctx, mname) - return &types.MsgDeListResponse{}, nil + return &types.MsgDelistResponse{}, nil } diff --git a/x/rns/keeper/msg_server_delist_test.go b/x/rns/keeper/msg_server_delist_test.go index e06ffba18..835abc28a 100644 --- a/x/rns/keeper/msg_server_delist_test.go +++ b/x/rns/keeper/msg_server_delist_test.go @@ -36,14 +36,14 @@ func (suite *KeeperTestSuite) TestDelistMsg() { // Use postRun to return it to original state cases := []struct { testName string - preRun func() *types.MsgDeList + preRun func() *types.MsgDelist postRun func() expErr bool expErrMsg string }{ { testName: "Name_listed", - preRun: func() *types.MsgDeList { + preRun: func() *types.MsgDelist { // Check if name is actually saved name, found := keeper.GetNames(suite.ctx, "Nuggie", "jkl") suite.Require().True(found) @@ -54,7 +54,7 @@ func (suite *KeeperTestSuite) TestDelistMsg() { Owner: nameOwner.String(), } keeper.SetForsale(suite.ctx, newsale) - return &types.MsgDeList{ + return &types.MsgDelist{ Creator: nameOwner.String(), Name: fmt.Sprintf("%s,%s", name.Name, name.Tld), } @@ -73,8 +73,8 @@ func (suite *KeeperTestSuite) TestDelistMsg() { { testName: "name_not_found", - preRun: func() *types.MsgDeList { - return &types.MsgDeList{ + preRun: func() *types.MsgDelist { + return &types.MsgDelist{ Creator: nameOwner.String(), Name: "nonexistent.jkl", } @@ -85,8 +85,8 @@ func (suite *KeeperTestSuite) TestDelistMsg() { { testName: "wrong_onwer", - preRun: func() *types.MsgDeList { - return &types.MsgDeList{ + preRun: func() *types.MsgDelist { + return &types.MsgDelist{ Creator: "wrong_account", Name: "Nuggie.jkl", } @@ -97,13 +97,13 @@ func (suite *KeeperTestSuite) TestDelistMsg() { { testName: "cannot_transfer_free_name", - preRun: func() *types.MsgDeList { + preRun: func() *types.MsgDelist { blockHeight := suite.ctx.BlockHeight() names, found := keeper.GetNames(suite.ctx, "Nuggie", "jkl") suite.Require().True(found) names.Locked = blockHeight + 1 keeper.SetNames(suite.ctx, names) - return &types.MsgDeList{ + return &types.MsgDelist{ Creator: nameOwner.String(), Name: "Nuggie.jkl", } @@ -121,13 +121,13 @@ func (suite *KeeperTestSuite) TestDelistMsg() { { testName: "expired_name", - preRun: func() *types.MsgDeList { + preRun: func() *types.MsgDelist { blockHeight := suite.ctx.BlockHeight() names, found := keeper.GetNames(suite.ctx, "Nuggie", "jkl") suite.Require().True(found) names.Expires = blockHeight - 1 keeper.SetNames(suite.ctx, names) - return &types.MsgDeList{ + return &types.MsgDelist{ Creator: nameOwner.String(), Name: "Nuggie.jkl", } @@ -148,7 +148,7 @@ func (suite *KeeperTestSuite) TestDelistMsg() { suite.Run(tc.testName, func() { msg := tc.preRun() - _, err := msgSrvr.DeList(ctx, msg) + _, err := msgSrvr.Delist(ctx, msg) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) diff --git a/x/rns/simulation/delist.go b/x/rns/simulation/delist.go index 18e426157..858e0055e 100644 --- a/x/rns/simulation/delist.go +++ b/x/rns/simulation/delist.go @@ -36,7 +36,7 @@ func SimulateMsgDelist( return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDelist, "name is expired"), nil, nil } - msg := &types.MsgDeList{ + msg := &types.MsgDelist{ Creator: forsale.Owner, Name: forsale.Name, } diff --git a/x/rns/types/codec.go b/x/rns/types/codec.go index 2c9d423fa..bc193d09f 100644 --- a/x/rns/types/codec.go +++ b/x/rns/types/codec.go @@ -15,7 +15,7 @@ func RegisterCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgCancelBid{}, "rns/CancelBid", nil) cdc.RegisterConcrete(&MsgList{}, "rns/List", nil) cdc.RegisterConcrete(&MsgBuy{}, "rns/Buy", nil) - cdc.RegisterConcrete(&MsgDeList{}, "rns/DeList", nil) + cdc.RegisterConcrete(&MsgDelist{}, "rns/Delist", nil) cdc.RegisterConcrete(&MsgTransfer{}, "rns/Transfer", nil) cdc.RegisterConcrete(&MsgAddRecord{}, "rns/AddRecord", nil) cdc.RegisterConcrete(&MsgDelRecord{}, "rns/DelRecord", nil) @@ -43,7 +43,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgBuy{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgDeList{}, + &MsgDelist{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), &MsgTransfer{}, diff --git a/x/rns/types/message_delist.go b/x/rns/types/message_delist.go index 704fedb16..36c8d0743 100644 --- a/x/rns/types/message_delist.go +++ b/x/rns/types/message_delist.go @@ -7,24 +7,24 @@ import ( const TypeMsgDelist = "delist" -var _ sdk.Msg = &MsgDeList{} +var _ sdk.Msg = &MsgDelist{} -func NewMsgDeList(creator string, name string) *MsgDeList { - return &MsgDeList{ +func NewMsgDeList(creator string, name string) *MsgDelist { + return &MsgDelist{ Creator: creator, Name: name, } } -func (msg *MsgDeList) Route() string { +func (msg *MsgDelist) Route() string { return RouterKey } -func (msg *MsgDeList) Type() string { +func (msg *MsgDelist) Type() string { return TypeMsgDelist } -func (msg *MsgDeList) GetSigners() []sdk.AccAddress { +func (msg *MsgDelist) GetSigners() []sdk.AccAddress { creator, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { panic(err) @@ -32,12 +32,12 @@ func (msg *MsgDeList) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{creator} } -func (msg *MsgDeList) GetSignBytes() []byte { +func (msg *MsgDelist) GetSignBytes() []byte { bz := ModuleCdc.MustMarshalJSON(msg) return sdk.MustSortJSON(bz) } -func (msg *MsgDeList) ValidateBasic() error { +func (msg *MsgDelist) ValidateBasic() error { _, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) diff --git a/x/rns/types/message_delist_test.go b/x/rns/types/message_delist_test.go index ea3c3e5b6..8c21b3b5c 100644 --- a/x/rns/types/message_delist_test.go +++ b/x/rns/types/message_delist_test.go @@ -13,26 +13,26 @@ import ( func TestMsgDelist_ValidateBasic(t *testing.T) { tests := []struct { name string - msg MsgDeList + msg MsgDelist err error }{ { name: "invalid address", - msg: MsgDeList{ + msg: MsgDelist{ Creator: "invalid_address", Name: "validname.jkl", }, err: sdkerrors.ErrInvalidAddress, }, { name: "invalid name", - msg: MsgDeList{ + msg: MsgDelist{ Creator: "cosmos1k3qu47ycrut4sr73vv6uqtuhyyfewymu34gju2", Name: "invalidname", }, err: sdkerrors.ErrInvalidRequest, }, { name: "valid address", - msg: MsgDeList{ + msg: MsgDelist{ Creator: "cosmos1k3qu47ycrut4sr73vv6uqtuhyyfewymu34gju2", Name: "validname.jkl", }, diff --git a/x/rns/types/tx.pb.go b/x/rns/types/tx.pb.go index a57824a77..10176ceae 100644 --- a/x/rns/types/tx.pb.go +++ b/x/rns/types/tx.pb.go @@ -691,23 +691,23 @@ func (m *MsgBuyResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgBuyResponse proto.InternalMessageInfo -type MsgDeList struct { +type MsgDelist struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (m *MsgDeList) Reset() { *m = MsgDeList{} } -func (m *MsgDeList) String() string { return proto.CompactTextString(m) } -func (*MsgDeList) ProtoMessage() {} -func (*MsgDeList) Descriptor() ([]byte, []int) { +func (m *MsgDelist) Reset() { *m = MsgDelist{} } +func (m *MsgDelist) String() string { return proto.CompactTextString(m) } +func (*MsgDelist) ProtoMessage() {} +func (*MsgDelist) Descriptor() ([]byte, []int) { return fileDescriptor_26cd098678d4da9c, []int{14} } -func (m *MsgDeList) XXX_Unmarshal(b []byte) error { +func (m *MsgDelist) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgDeList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgDelist) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgDeList.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgDelist.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -717,47 +717,47 @@ func (m *MsgDeList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } -func (m *MsgDeList) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgDeList.Merge(m, src) +func (m *MsgDelist) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDelist.Merge(m, src) } -func (m *MsgDeList) XXX_Size() int { +func (m *MsgDelist) XXX_Size() int { return m.Size() } -func (m *MsgDeList) XXX_DiscardUnknown() { - xxx_messageInfo_MsgDeList.DiscardUnknown(m) +func (m *MsgDelist) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDelist.DiscardUnknown(m) } -var xxx_messageInfo_MsgDeList proto.InternalMessageInfo +var xxx_messageInfo_MsgDelist proto.InternalMessageInfo -func (m *MsgDeList) GetCreator() string { +func (m *MsgDelist) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *MsgDeList) GetName() string { +func (m *MsgDelist) GetName() string { if m != nil { return m.Name } return "" } -type MsgDeListResponse struct { +type MsgDelistResponse struct { } -func (m *MsgDeListResponse) Reset() { *m = MsgDeListResponse{} } -func (m *MsgDeListResponse) String() string { return proto.CompactTextString(m) } -func (*MsgDeListResponse) ProtoMessage() {} -func (*MsgDeListResponse) Descriptor() ([]byte, []int) { +func (m *MsgDelistResponse) Reset() { *m = MsgDelistResponse{} } +func (m *MsgDelistResponse) String() string { return proto.CompactTextString(m) } +func (*MsgDelistResponse) ProtoMessage() {} +func (*MsgDelistResponse) Descriptor() ([]byte, []int) { return fileDescriptor_26cd098678d4da9c, []int{15} } -func (m *MsgDeListResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgDelistResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgDeListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgDelistResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgDeListResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgDelistResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -767,17 +767,17 @@ func (m *MsgDeListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, e return b[:n], nil } } -func (m *MsgDeListResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgDeListResponse.Merge(m, src) +func (m *MsgDelistResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDelistResponse.Merge(m, src) } -func (m *MsgDeListResponse) XXX_Size() int { +func (m *MsgDelistResponse) XXX_Size() int { return m.Size() } -func (m *MsgDeListResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgDeListResponse.DiscardUnknown(m) +func (m *MsgDelistResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDelistResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgDeListResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgDelistResponse proto.InternalMessageInfo type MsgTransfer struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` @@ -1170,8 +1170,8 @@ func init() { proto.RegisterType((*MsgListResponse)(nil), "canine_chain.rns.MsgListResponse") proto.RegisterType((*MsgBuy)(nil), "canine_chain.rns.MsgBuy") proto.RegisterType((*MsgBuyResponse)(nil), "canine_chain.rns.MsgBuyResponse") - proto.RegisterType((*MsgDeList)(nil), "canine_chain.rns.MsgDeList") - proto.RegisterType((*MsgDeListResponse)(nil), "canine_chain.rns.MsgDeListResponse") + proto.RegisterType((*MsgDelist)(nil), "canine_chain.rns.MsgDelist") + proto.RegisterType((*MsgDelistResponse)(nil), "canine_chain.rns.MsgDelistResponse") proto.RegisterType((*MsgTransfer)(nil), "canine_chain.rns.MsgTransfer") proto.RegisterType((*MsgTransferResponse)(nil), "canine_chain.rns.MsgTransferResponse") proto.RegisterType((*MsgAddRecord)(nil), "canine_chain.rns.MsgAddRecord") @@ -1205,28 +1205,28 @@ var fileDescriptor_26cd098678d4da9c = []byte{ 0x29, 0xbd, 0xe1, 0x4a, 0x6f, 0x51, 0xec, 0xe3, 0x49, 0x6d, 0x25, 0xc9, 0xaa, 0x76, 0x17, 0xea, 0xbf, 0xe3, 0xd1, 0xf0, 0x2c, 0xa2, 0x59, 0xfd, 0xce, 0xa7, 0x24, 0xf2, 0xb1, 0x3c, 0xbb, 0x08, 0x9c, 0x5d, 0x78, 0x20, 0xe9, 0x94, 0xc2, 0x2b, 0x51, 0xfd, 0xd9, 0xbc, 0xe6, 0x89, 0x65, 0xad, - 0x67, 0x73, 0xc5, 0xf4, 0x9a, 0xcf, 0xca, 0x00, 0xd7, 0x3f, 0xad, 0x9c, 0x0b, 0xb1, 0x55, 0xf1, - 0x7d, 0xe6, 0x93, 0xff, 0x91, 0xa0, 0x98, 0x9e, 0xd7, 0x9e, 0x7c, 0x0b, 0x5a, 0x04, 0xfb, 0x38, - 0xba, 0xc4, 0x44, 0x96, 0x40, 0xc5, 0x72, 0xd6, 0x73, 0x62, 0xa5, 0xf7, 0x43, 0xcc, 0x4a, 0x10, - 0x8c, 0xb0, 0x9f, 0x90, 0xa0, 0x7e, 0xc1, 0x2f, 0xd1, 0x64, 0xa6, 0x0a, 0xce, 0x83, 0x32, 0xab, - 0x19, 0x07, 0xd0, 0x24, 0x5c, 0xc1, 0xdc, 0xe6, 0x4f, 0x65, 0x94, 0x4f, 0x56, 0xae, 0xbf, 0x36, - 0x59, 0x03, 0x3c, 0xf9, 0x9f, 0x73, 0x49, 0x56, 0xb5, 0x5b, 0xb1, 0x1e, 0xf1, 0xc9, 0x7a, 0x17, - 0x47, 0x1b, 0x7a, 0x25, 0xe7, 0x85, 0x25, 0xe5, 0xfb, 0x5e, 0xfc, 0xda, 0x01, 0xdd, 0xa3, 0xa1, - 0x31, 0x84, 0x96, 0xfa, 0x28, 0x3d, 0x76, 0xd7, 0x3f, 0x5b, 0x6e, 0xe1, 0x63, 0x62, 0x3d, 0xdd, - 0x08, 0xe7, 0xcc, 0xc6, 0x09, 0xe8, 0xdc, 0x38, 0xa5, 0xd9, 0xfd, 0x28, 0xb0, 0xba, 0x55, 0x88, - 0xa2, 0xf8, 0x00, 0xed, 0x95, 0xd7, 0xed, 0xd2, 0x74, 0x85, 0x5b, 0xcf, 0x36, 0xe3, 0x45, 0xd2, - 0x95, 0xad, 0xcb, 0x49, 0x15, 0x5e, 0x41, 0x7a, 0xcb, 0xd8, 0xc6, 0x00, 0x1a, 0xdc, 0x27, 0x87, - 0xa5, 0xf9, 0x0c, 0xb2, 0x9e, 0x54, 0x42, 0x37, 0x4a, 0xc6, 0x9c, 0x5b, 0x5e, 0x98, 0xd9, 0xbc, - 0xaa, 0x64, 0x2b, 0xd7, 0x1a, 0xef, 0xa1, 0x29, 0x2d, 0xfb, 0xa8, 0x34, 0x57, 0x80, 0xd6, 0xd1, - 0x06, 0x50, 0x71, 0x0d, 0xa1, 0xa5, 0xec, 0x5a, 0x3e, 0x13, 0x39, 0x5c, 0x31, 0x13, 0xeb, 0x9e, - 0xe4, 0x0d, 0x55, 0x86, 0xac, 0x68, 0x68, 0x8e, 0x57, 0x35, 0x74, 0xdd, 0x50, 0x8c, 0x74, 0xe5, - 0x26, 0xbb, 0xe2, 0xc5, 0x26, 0x1b, 0x49, 0x6f, 0xf9, 0x89, 0x35, 0x94, 0x9b, 0xa9, 0xbc, 0xa1, + 0x67, 0x73, 0xc5, 0xf4, 0x9a, 0xcf, 0xca, 0x00, 0x4f, 0x6a, 0x9f, 0x56, 0xce, 0x85, 0xd8, 0xaa, + 0xf8, 0x3e, 0xf3, 0xc9, 0xff, 0x48, 0x50, 0x4c, 0xcf, 0x6b, 0x4f, 0xbe, 0x05, 0x2d, 0x82, 0x7d, + 0x1c, 0x5d, 0x62, 0x22, 0x4b, 0xa0, 0x62, 0x39, 0xeb, 0x39, 0xb1, 0xd2, 0xfb, 0x21, 0x66, 0x25, + 0x08, 0x46, 0xd8, 0x4f, 0x48, 0x50, 0xbf, 0xe0, 0x97, 0x68, 0x32, 0x53, 0x05, 0xe7, 0x41, 0x99, + 0xd5, 0x8c, 0x03, 0x68, 0x12, 0xae, 0x60, 0x6e, 0xf3, 0xa7, 0x32, 0xca, 0x27, 0x2b, 0xd7, 0x5f, + 0x9b, 0xac, 0x01, 0x9e, 0xfc, 0xcf, 0xb9, 0x24, 0xab, 0xda, 0xad, 0x58, 0x8f, 0xf8, 0x64, 0xbd, + 0x8b, 0xa3, 0x0d, 0xbd, 0x92, 0xf3, 0xc2, 0x92, 0xf2, 0x7d, 0x2f, 0x7e, 0xed, 0x80, 0xee, 0xd1, + 0xd0, 0x18, 0x42, 0x4b, 0x7d, 0x94, 0x1e, 0xbb, 0xeb, 0x9f, 0x2d, 0xb7, 0xf0, 0x31, 0xb1, 0x9e, + 0x6e, 0x84, 0x73, 0x66, 0xe3, 0x04, 0x74, 0x6e, 0x9c, 0xd2, 0xec, 0x7e, 0x14, 0x58, 0xdd, 0x2a, + 0x44, 0x51, 0x7c, 0x80, 0xf6, 0xca, 0xeb, 0x76, 0x69, 0xba, 0xc2, 0xad, 0x67, 0x9b, 0xf1, 0x22, + 0xe9, 0xca, 0xd6, 0xe5, 0xa4, 0x0a, 0xaf, 0x20, 0xbd, 0x65, 0x6c, 0x63, 0x00, 0x0d, 0xee, 0xea, + 0xc3, 0xd2, 0x7c, 0x06, 0x59, 0x4f, 0x2a, 0xa1, 0x1b, 0x25, 0x63, 0xce, 0x2d, 0x2f, 0xcc, 0x6c, + 0x5e, 0x55, 0xb2, 0x95, 0x6b, 0x8d, 0xf7, 0xd0, 0x94, 0x96, 0x7d, 0x54, 0x9a, 0x2b, 0x40, 0xeb, + 0x68, 0x03, 0xa8, 0xb8, 0x86, 0xd0, 0x52, 0x76, 0x2d, 0x9f, 0x89, 0x1c, 0xae, 0x98, 0x89, 0x75, + 0x4f, 0xf2, 0x86, 0x2a, 0x43, 0x56, 0x34, 0x34, 0xc7, 0xab, 0x1a, 0xba, 0x6e, 0x28, 0x46, 0xba, + 0x72, 0x93, 0x5d, 0xf5, 0x62, 0x1b, 0x49, 0x6f, 0xf9, 0x89, 0x35, 0x94, 0x9b, 0xa9, 0xbc, 0xa1, 0x0c, 0xaa, 0x68, 0x68, 0xd1, 0x5d, 0xac, 0x1b, 0xf2, 0x67, 0x5b, 0xde, 0x0d, 0x01, 0x56, 0x74, 0xe3, 0xe6, 0x7f, 0xb5, 0x7f, 0xfa, 0x7b, 0x61, 0x6b, 0xd7, 0x0b, 0x5b, 0xfb, 0xbb, 0xb0, 0xb5, 0x9f, 0x4b, 0x7b, 0xeb, 0x7a, 0x69, 0x6f, 0xfd, 0x59, 0xda, 0x5b, 0x5f, 0xdc, 0x30, 0xca, 0x2e, 0x66, 0x63, 0xd7, 0x4f, 0xa6, 0xbd, 0x6f, 0xc8, 0xff, 0x8e, 0x26, 0x67, 0x68, 0x4c, 0x7b, 0x82, 0xf3, 0xb9, 0xb8, 0x96, 0x5c, 0x89, 0x8b, 0xc9, 0x3c, 0xc5, 0x74, 0xdc, 0xe4, 0x97, 0x93, 0x97, - 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x24, 0x39, 0xa3, 0x5a, 0xb9, 0x08, 0x00, 0x00, + 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x9c, 0x8a, 0xc6, 0xb9, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1247,7 +1247,7 @@ type MsgClient interface { CancelBid(ctx context.Context, in *MsgCancelBid, opts ...grpc.CallOption) (*MsgCancelBidResponse, error) List(ctx context.Context, in *MsgList, opts ...grpc.CallOption) (*MsgListResponse, error) Buy(ctx context.Context, in *MsgBuy, opts ...grpc.CallOption) (*MsgBuyResponse, error) - DeList(ctx context.Context, in *MsgDeList, opts ...grpc.CallOption) (*MsgDeListResponse, error) + Delist(ctx context.Context, in *MsgDelist, opts ...grpc.CallOption) (*MsgDelistResponse, error) Transfer(ctx context.Context, in *MsgTransfer, opts ...grpc.CallOption) (*MsgTransferResponse, error) AddRecord(ctx context.Context, in *MsgAddRecord, opts ...grpc.CallOption) (*MsgAddRecordResponse, error) DelRecord(ctx context.Context, in *MsgDelRecord, opts ...grpc.CallOption) (*MsgDelRecordResponse, error) @@ -1317,9 +1317,9 @@ func (c *msgClient) Buy(ctx context.Context, in *MsgBuy, opts ...grpc.CallOption return out, nil } -func (c *msgClient) DeList(ctx context.Context, in *MsgDeList, opts ...grpc.CallOption) (*MsgDeListResponse, error) { - out := new(MsgDeListResponse) - err := c.cc.Invoke(ctx, "/canine_chain.rns.Msg/DeList", in, out, opts...) +func (c *msgClient) Delist(ctx context.Context, in *MsgDelist, opts ...grpc.CallOption) (*MsgDelistResponse, error) { + out := new(MsgDelistResponse) + err := c.cc.Invoke(ctx, "/canine_chain.rns.Msg/Delist", in, out, opts...) if err != nil { return nil, err } @@ -1379,7 +1379,7 @@ type MsgServer interface { CancelBid(context.Context, *MsgCancelBid) (*MsgCancelBidResponse, error) List(context.Context, *MsgList) (*MsgListResponse, error) Buy(context.Context, *MsgBuy) (*MsgBuyResponse, error) - DeList(context.Context, *MsgDeList) (*MsgDeListResponse, error) + Delist(context.Context, *MsgDelist) (*MsgDelistResponse, error) Transfer(context.Context, *MsgTransfer) (*MsgTransferResponse, error) AddRecord(context.Context, *MsgAddRecord) (*MsgAddRecordResponse, error) DelRecord(context.Context, *MsgDelRecord) (*MsgDelRecordResponse, error) @@ -1409,8 +1409,8 @@ func (*UnimplementedMsgServer) List(ctx context.Context, req *MsgList) (*MsgList func (*UnimplementedMsgServer) Buy(ctx context.Context, req *MsgBuy) (*MsgBuyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Buy not implemented") } -func (*UnimplementedMsgServer) DeList(ctx context.Context, req *MsgDeList) (*MsgDeListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeList not implemented") +func (*UnimplementedMsgServer) Delist(ctx context.Context, req *MsgDelist) (*MsgDelistResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delist not implemented") } func (*UnimplementedMsgServer) Transfer(ctx context.Context, req *MsgTransfer) (*MsgTransferResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Transfer not implemented") @@ -1540,20 +1540,20 @@ func _Msg_Buy_Handler(srv interface{}, ctx context.Context, dec func(interface{} return interceptor(ctx, in, info, handler) } -func _Msg_DeList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgDeList) +func _Msg_Delist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDelist) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MsgServer).DeList(ctx, in) + return srv.(MsgServer).Delist(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.rns.Msg/DeList", + FullMethod: "/canine_chain.rns.Msg/Delist", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).DeList(ctx, req.(*MsgDeList)) + return srv.(MsgServer).Delist(ctx, req.(*MsgDelist)) } return interceptor(ctx, in, info, handler) } @@ -1677,8 +1677,8 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ Handler: _Msg_Buy_Handler, }, { - MethodName: "DeList", - Handler: _Msg_DeList_Handler, + MethodName: "Delist", + Handler: _Msg_Delist_Handler, }, { MethodName: "Transfer", @@ -2165,7 +2165,7 @@ func (m *MsgBuyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgDeList) Marshal() (dAtA []byte, err error) { +func (m *MsgDelist) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2175,12 +2175,12 @@ func (m *MsgDeList) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgDeList) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgDelist) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgDeList) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgDelist) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2202,7 +2202,7 @@ func (m *MsgDeList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgDeListResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgDelistResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2212,12 +2212,12 @@ func (m *MsgDeListResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgDeListResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgDelistResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgDeListResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgDelistResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2702,7 +2702,7 @@ func (m *MsgBuyResponse) Size() (n int) { return n } -func (m *MsgDeList) Size() (n int) { +func (m *MsgDelist) Size() (n int) { if m == nil { return 0 } @@ -2719,7 +2719,7 @@ func (m *MsgDeList) Size() (n int) { return n } -func (m *MsgDeListResponse) Size() (n int) { +func (m *MsgDelistResponse) Size() (n int) { if m == nil { return 0 } @@ -4177,7 +4177,7 @@ func (m *MsgBuyResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgDeList) Unmarshal(dAtA []byte) error { +func (m *MsgDelist) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4200,10 +4200,10 @@ func (m *MsgDeList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgDeList: wiretype end group for non-group") + return fmt.Errorf("proto: MsgDelist: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgDeList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgDelist: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -4291,7 +4291,7 @@ func (m *MsgDeList) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgDeListResponse) Unmarshal(dAtA []byte) error { +func (m *MsgDelistResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4314,10 +4314,10 @@ func (m *MsgDeListResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgDeListResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgDelistResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgDeListResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgDelistResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: diff --git a/x/storage/client/cli/tx_init_provider.go b/x/storage/client/cli/tx_init_provider.go index 3dfcc101c..9f444c742 100644 --- a/x/storage/client/cli/tx_init_provider.go +++ b/x/storage/client/cli/tx_init_provider.go @@ -21,7 +21,10 @@ func CmdInitProvider() *cobra.Command { argIP := args[0] argTotalSpace := args[1] argKeybase := args[2] - + space, err := strconv.ParseInt(argTotalSpace, 10, 64) + if err != nil { + return err + } clientCtx, err := client.GetClientTxContext(cmd) if err != nil { return err @@ -30,7 +33,7 @@ func CmdInitProvider() *cobra.Command { msg := types.NewMsgInitProvider( clientCtx.GetFromAddress().String(), argIP, - argTotalSpace, + space, argKeybase, ) if err := msg.ValidateBasic(); err != nil { diff --git a/x/storage/client/cli/tx_set_provider_totalspace.go b/x/storage/client/cli/tx_set_provider_totalspace.go index 67f14e6ca..2de63703a 100644 --- a/x/storage/client/cli/tx_set_provider_totalspace.go +++ b/x/storage/client/cli/tx_set_provider_totalspace.go @@ -18,6 +18,10 @@ func CmdSetProviderTotalSpace() *cobra.Command { Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) (err error) { argSpace := args[0] + space, err := strconv.ParseInt(argSpace, 10, 64) + if err != nil { + return err + } clientCtx, err := client.GetClientTxContext(cmd) if err != nil { @@ -26,7 +30,7 @@ func CmdSetProviderTotalSpace() *cobra.Command { msg := types.NewMsgSetProviderTotalSpace( clientCtx.GetFromAddress().String(), - argSpace, + space, ) if err := msg.ValidateBasic(); err != nil { return err diff --git a/x/storage/keeper/grpc_query_freespace.go b/x/storage/keeper/grpc_query_freespace.go index e291d2b48..3114a28a3 100644 --- a/x/storage/keeper/grpc_query_freespace.go +++ b/x/storage/keeper/grpc_query_freespace.go @@ -32,7 +32,7 @@ func (k Keeper) FreeSpace(goCtx context.Context, req *types.QueryFreeSpace) (*ty } return &types.QueryFreeSpaceResponse{ - Space: fmt.Sprintf("%d", space.Int64()-num), + Space: space.Int64() - num, }, nil } @@ -46,6 +46,6 @@ func (k Keeper) StoreCount(goCtx context.Context, req *types.QueryStoreCount) (* num := k.GetProviderDeals(ctx, req.Address) return &types.QueryStoreCountResponse{ - Count: fmt.Sprintf("%d", num), + Count: num, }, nil } diff --git a/x/storage/keeper/msg_server_init_provider.go b/x/storage/keeper/msg_server_init_provider.go index 6cf27ec81..171c44283 100644 --- a/x/storage/keeper/msg_server_init_provider.go +++ b/x/storage/keeper/msg_server_init_provider.go @@ -2,6 +2,7 @@ package keeper import ( "context" + "fmt" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -40,7 +41,7 @@ func (k msgServer) InitProvider(goCtx context.Context, msg *types.MsgInitProvide provider := types.Providers{ Address: msg.Creator, Ip: msg.Ip, - Totalspace: msg.TotalSpace, + Totalspace: fmt.Sprintf("%d", msg.TotalSpace), Creator: msg.Creator, BurnedContracts: "0", KeybaseIdentity: msg.Keybase, diff --git a/x/storage/keeper/msg_server_proofs_test.go b/x/storage/keeper/msg_server_proofs_test.go index c228b66e6..880e8e50d 100644 --- a/x/storage/keeper/msg_server_proofs_test.go +++ b/x/storage/keeper/msg_server_proofs_test.go @@ -143,7 +143,7 @@ func (suite *KeeperTestSuite) TestPostProof() { _, err = msgSrvr.InitProvider(context, &types.MsgInitProvider{ Creator: testProvider.String(), Ip: "192.168.0.1", - TotalSpace: "1_000_000", + TotalSpace: 1_000_000, }) suite.Require().NoError(err) diff --git a/x/storage/keeper/msg_server_providers_test.go b/x/storage/keeper/msg_server_providers_test.go index 117f542ee..53eac5774 100644 --- a/x/storage/keeper/msg_server_providers_test.go +++ b/x/storage/keeper/msg_server_providers_test.go @@ -34,7 +34,7 @@ func (suite *KeeperTestSuite) TestMsgInitProvider() { return types.NewMsgInitProvider( user, "127.0.0.1", - "1000000000", + 1000000000, "test-key", ) }, @@ -156,7 +156,7 @@ func (suite *KeeperTestSuite) TestMsgSetProviderTotalSpace() { preRun: func() *types.MsgSetProviderTotalSpace { return types.NewMsgSetProviderTotalSpace( user, - "1000000", + 1000000, ) }, expErr: false, @@ -166,24 +166,13 @@ func (suite *KeeperTestSuite) TestMsgSetProviderTotalSpace() { preRun: func() *types.MsgSetProviderTotalSpace { return types.NewMsgSetProviderTotalSpace( "wrong address", - "1000000", + 1000000, ) }, expErr: true, expErrMsg: "provider not found please init your provider", name: "set provider total space fail", }, - { - preRun: func() *types.MsgSetProviderTotalSpace { - return types.NewMsgSetProviderTotalSpace( - user, - "9@!0", - ) - }, - expErr: true, - expErrMsg: "not valid total space please enter total number of bytes to provide", - name: "invalid space param", - }, } for _, tc := range cases { diff --git a/x/storage/keeper/msg_server_set_provider_totalspace.go b/x/storage/keeper/msg_server_set_provider_totalspace.go index b1c8b50fa..42d7849d9 100644 --- a/x/storage/keeper/msg_server_set_provider_totalspace.go +++ b/x/storage/keeper/msg_server_set_provider_totalspace.go @@ -2,7 +2,7 @@ package keeper import ( "context" - "strconv" + "fmt" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/jackalLabs/canine-chain/v3/x/storage/types" @@ -17,24 +17,9 @@ func (k msgServer) SetProviderTotalSpace(goCtx context.Context, msg *types.MsgSe return nil, types.ErrProviderNotFound } - validTotalSpace := isValidTotalSpace(msg.Space) - - if !validTotalSpace { - return nil, types.ErrNotValidTotalSpace - } - - provider.Totalspace = msg.Space + provider.Totalspace = fmt.Sprintf("%d", msg.Space) k.SetProviders(ctx, provider) return &types.MsgSetProviderTotalSpaceResponse{}, nil } - -func isValidTotalSpace(totalSpace string) bool { - var isNumber bool - - if _, err := strconv.Atoi(totalSpace); err == nil { - isNumber = true - } - return isNumber -} diff --git a/x/storage/keeper/providers_test.go b/x/storage/keeper/providers_test.go index bf2c0f558..2ca96c0ba 100644 --- a/x/storage/keeper/providers_test.go +++ b/x/storage/keeper/providers_test.go @@ -61,7 +61,7 @@ func (suite *KeeperTestSuite) TestInitProviders() { Creator: user, Ip: "192.158.1.38", Keybase: "", - TotalSpace: "9000", + TotalSpace: 9000, } _, err = msgSrvr.InitProvider(ctx, &initMsg) diff --git a/x/storage/simulation/init_miner.go b/x/storage/simulation/init_miner.go index 0712e8a6d..80432da52 100644 --- a/x/storage/simulation/init_miner.go +++ b/x/storage/simulation/init_miner.go @@ -2,7 +2,6 @@ package simulation import ( "math/rand" - "strconv" "github.com/cosmos/cosmos-sdk/baseapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -40,7 +39,7 @@ func SimulateMsgInitProvider( msg := &types.MsgInitProvider{ Creator: simAccount.Address.String(), Ip: RandIPv4Url(r), - TotalSpace: strconv.Itoa(simtypes.RandIntBetween(r, 1_000_000_000, 1_000_000_000_000_000)), + TotalSpace: int64(simtypes.RandIntBetween(r, 1_000_000_000, 1_000_000_000_000_000)), Keybase: simtypes.RandStringOfLength(r, 10), } diff --git a/x/storage/simulation/set_miner_totalspace.go b/x/storage/simulation/set_miner_totalspace.go index eafcbba11..925b507e0 100644 --- a/x/storage/simulation/set_miner_totalspace.go +++ b/x/storage/simulation/set_miner_totalspace.go @@ -2,7 +2,6 @@ package simulation import ( "math/rand" - "strconv" "github.com/cosmos/cosmos-sdk/baseapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -33,7 +32,7 @@ func SimulateMsgSetProviderTotalSpace( msg := &types.MsgSetProviderTotalSpace{ Creator: provider.Creator, - Space: strconv.Itoa(simtypes.RandIntBetween(r, 1_000_000_000, 1_000_000_000_000_000)), + Space: int64(simtypes.RandIntBetween(r, 1_000_000_000, 1_000_000_000_000_000)), } spendable := bk.SpendableCoins(ctx, simAccount.Address) diff --git a/x/storage/types/message_init_miner.go b/x/storage/types/message_init_miner.go index 5c2d8e6fc..df10bb1dd 100644 --- a/x/storage/types/message_init_miner.go +++ b/x/storage/types/message_init_miner.go @@ -3,7 +3,6 @@ package types import ( fmt "fmt" "net/url" - "strconv" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/bech32" @@ -14,7 +13,7 @@ const TypeMsgInitProvider = "init_provider" var _ sdk.Msg = &MsgInitProvider{} -func NewMsgInitProvider(creator string, ip string, totalspace string, keybase string) *MsgInitProvider { +func NewMsgInitProvider(creator string, ip string, totalspace int64, keybase string) *MsgInitProvider { return &MsgInitProvider{ Creator: creator, Ip: ip, @@ -58,8 +57,5 @@ func (msg *MsgInitProvider) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "invalid provider ip (%s)", err) } - if _, err := strconv.Atoi(msg.TotalSpace); err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "cannot parse totalspace (%s)", err) - } return nil } diff --git a/x/storage/types/message_init_miner_test.go b/x/storage/types/message_init_miner_test.go index 700a8b994..583138d2b 100644 --- a/x/storage/types/message_init_miner_test.go +++ b/x/storage/types/message_init_miner_test.go @@ -18,7 +18,7 @@ func TestMsgInitProvider_ValidateBasic(t *testing.T) { msg: MsgInitProvider{ Creator: "invalid_address", Ip: "http://localhost:3333", - TotalSpace: "1000000000", + TotalSpace: 1000000000, }, err: sdkerrors.ErrInvalidAddress, }, { @@ -26,15 +26,7 @@ func TestMsgInitProvider_ValidateBasic(t *testing.T) { msg: MsgInitProvider{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Ip: "fake/localhost:3333", - TotalSpace: "1000000000", - }, - err: sdkerrors.ErrInvalidType, - }, { - name: "invalid totalspace", - msg: MsgInitProvider{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Ip: "https://node.jackalprotocol.com", - TotalSpace: "abd", + TotalSpace: 1000000000, }, err: sdkerrors.ErrInvalidType, }, { @@ -42,14 +34,14 @@ func TestMsgInitProvider_ValidateBasic(t *testing.T) { msg: MsgInitProvider{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Ip: "https://node.jackalprotocol.com", - TotalSpace: "1000000000", + TotalSpace: 1000000000, }, }, { name: "valid ip localhost", msg: MsgInitProvider{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", Ip: "localhost:3333", - TotalSpace: "1000000000", + TotalSpace: 1000000000, }, }, } diff --git a/x/storage/types/message_set_miner_totalspace.go b/x/storage/types/message_set_miner_totalspace.go index 1fce7c6e4..973375fdb 100644 --- a/x/storage/types/message_set_miner_totalspace.go +++ b/x/storage/types/message_set_miner_totalspace.go @@ -2,7 +2,6 @@ package types import ( fmt "fmt" - "strconv" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/bech32" @@ -13,7 +12,7 @@ const TypeMsgSetProviderTotalSpace = "set_provider_total_space" var _ sdk.Msg = &MsgSetProviderTotalSpace{} -func NewMsgSetProviderTotalSpace(creator string, space string) *MsgSetProviderTotalSpace { +func NewMsgSetProviderTotalSpace(creator string, space int64) *MsgSetProviderTotalSpace { return &MsgSetProviderTotalSpace{ Creator: creator, Space: space, @@ -50,8 +49,5 @@ func (msg *MsgSetProviderTotalSpace) ValidateBasic() error { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator prefix (%s)", fmt.Errorf("%s is not a valid prefix here. Expected `jkl`", prefix)) } - if _, err := strconv.Atoi(msg.Space); err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "cannot parse space (%s)", err) - } return nil } diff --git a/x/storage/types/message_set_miner_totalspace_test.go b/x/storage/types/message_set_miner_totalspace_test.go index 2e503ed90..66f9d5f75 100644 --- a/x/storage/types/message_set_miner_totalspace_test.go +++ b/x/storage/types/message_set_miner_totalspace_test.go @@ -17,21 +17,14 @@ func TestMsgSetProviderTotalSpace_ValidateBasic(t *testing.T) { name: "invalid address", msg: MsgSetProviderTotalSpace{ Creator: "invalid_address", - Space: "1000000000", + Space: 1000000000, }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "invalid ip", - msg: MsgSetProviderTotalSpace{ - Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Space: "abd", - }, - err: sdkerrors.ErrInvalidType, }, { name: "valid ip", msg: MsgSetProviderTotalSpace{ Creator: "jkl1j3p63s42w7ywaczlju626st55mzu5z399f5n6n", - Space: "1000000000", + Space: 1000000000, }, }, } diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index f95856c21..94f047f8e 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -1271,7 +1271,7 @@ func (m *QueryStoreCount) GetAddress() string { } type QueryFreeSpaceResponse struct { - Space string `protobuf:"bytes,1,opt,name=space,proto3" json:"space,omitempty"` + Space int64 `protobuf:"varint,1,opt,name=space,proto3" json:"space,omitempty"` } func (m *QueryFreeSpaceResponse) Reset() { *m = QueryFreeSpaceResponse{} } @@ -1307,15 +1307,15 @@ func (m *QueryFreeSpaceResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryFreeSpaceResponse proto.InternalMessageInfo -func (m *QueryFreeSpaceResponse) GetSpace() string { +func (m *QueryFreeSpaceResponse) GetSpace() int64 { if m != nil { return m.Space } - return "" + return 0 } type QueryStoreCountResponse struct { - Count string `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` + Count int64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` } func (m *QueryStoreCountResponse) Reset() { *m = QueryStoreCountResponse{} } @@ -1351,11 +1351,11 @@ func (m *QueryStoreCountResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryStoreCountResponse proto.InternalMessageInfo -func (m *QueryStoreCountResponse) GetCount() string { +func (m *QueryStoreCountResponse) GetCount() int64 { if m != nil { return m.Count } - return "" + return 0 } type QueryFindFile struct { @@ -2243,134 +2243,134 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 2019 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6f, 0x5b, 0x49, - 0x15, 0xef, 0xe4, 0x6b, 0xe3, 0xe3, 0x74, 0x5b, 0x66, 0xb3, 0x25, 0x58, 0x21, 0x49, 0xa7, 0xcd, - 0x47, 0xd3, 0xc6, 0xb7, 0x49, 0x29, 0x94, 0x76, 0x5b, 0x6d, 0x92, 0x92, 0x52, 0xb1, 0xdd, 0xa6, - 0x37, 0x2a, 0x88, 0x45, 0xe2, 0x32, 0xb1, 0x27, 0xee, 0x25, 0xce, 0xbd, 0x77, 0xef, 0xbd, 0x2e, - 0x58, 0x51, 0x5e, 0xe8, 0x0b, 0xbc, 0xad, 0x84, 0x8a, 0x60, 0x85, 0x84, 0x84, 0x2a, 0x60, 0xc5, - 0x3b, 0x20, 0xfe, 0x82, 0x7d, 0x63, 0x25, 0x5e, 0x10, 0x0f, 0x15, 0x6a, 0xe1, 0xff, 0x40, 0xf3, - 0x71, 0xc7, 0x63, 0xe7, 0x7a, 0xec, 0x20, 0xa3, 0x7d, 0x8a, 0x67, 0xfc, 0x3b, 0xe7, 0xfc, 0xce, - 0xc7, 0xcc, 0x9c, 0xe3, 0xc0, 0x5c, 0x85, 0x06, 0x7e, 0xc0, 0xbc, 0xca, 0x13, 0xea, 0x07, 0x4e, - 0x92, 0x86, 0x31, 0xad, 0x31, 0xe7, 0xc3, 0x06, 0x8b, 0x9b, 0xe5, 0x28, 0x0e, 0xd3, 0x10, 0x4f, - 0x9a, 0x88, 0xb2, 0x42, 0x94, 0x26, 0x6b, 0x61, 0x2d, 0x14, 0x00, 0x87, 0x7f, 0x92, 0xd8, 0xd2, - 0x74, 0x2d, 0x0c, 0x6b, 0x75, 0xe6, 0xd0, 0xc8, 0x77, 0x68, 0x10, 0x84, 0x29, 0x4d, 0xfd, 0x30, - 0x48, 0xd4, 0xb7, 0xcb, 0x95, 0x30, 0x39, 0x08, 0x13, 0x67, 0x97, 0x26, 0xca, 0x84, 0xf3, 0x74, - 0x75, 0x97, 0xa5, 0x74, 0xd5, 0x89, 0x68, 0xcd, 0x0f, 0x04, 0x58, 0x61, 0xcf, 0xe7, 0xf2, 0x8a, - 0x68, 0x4c, 0x0f, 0x32, 0x75, 0x8b, 0xb9, 0x10, 0x5a, 0x49, 0xfd, 0xa7, 0xcc, 0xab, 0x32, 0x5a, - 0xcf, 0x80, 0x17, 0xf3, 0x75, 0xc5, 0xe1, 0x53, 0xbf, 0xca, 0x62, 0xbb, 0xba, 0x88, 0x36, 0x0f, - 0x58, 0x90, 0x7a, 0x7e, 0xb0, 0xa7, 0x9c, 0x24, 0xa7, 0xa1, 0xf8, 0x88, 0x93, 0xdf, 0x16, 0x64, - 0xc8, 0x23, 0x78, 0xcb, 0x58, 0xba, 0x2c, 0x89, 0xc2, 0x20, 0x61, 0xf8, 0x26, 0x8c, 0x49, 0xb6, - 0x53, 0x68, 0x0e, 0x2d, 0x15, 0xd7, 0xa6, 0xcb, 0x79, 0x71, 0x2c, 0x4b, 0xa9, 0x8d, 0x91, 0x4f, - 0x5f, 0xce, 0x9e, 0x72, 0x95, 0x04, 0x39, 0x04, 0x90, 0x2a, 0xe3, 0x30, 0xdc, 0xc3, 0x97, 0xe0, - 0x6c, 0xc6, 0xd5, 0xa3, 0xd5, 0x6a, 0xcc, 0x12, 0xa9, 0xb3, 0xe0, 0x9e, 0xc9, 0xf6, 0xd7, 0xe5, - 0x36, 0x3e, 0x07, 0x63, 0x07, 0x2c, 0xde, 0xaf, 0xb3, 0xa9, 0xa1, 0x39, 0xb4, 0x34, 0xe1, 0xaa, - 0x15, 0x9e, 0x84, 0xd1, 0xf0, 0x47, 0x01, 0x8b, 0xa7, 0x86, 0x85, 0x9c, 0x5c, 0xf0, 0xdd, 0x24, - 0xa5, 0x71, 0x3a, 0x35, 0x32, 0x87, 0x96, 0x86, 0x5d, 0xb9, 0x20, 0x8f, 0x00, 0xb7, 0x8c, 0x6b, - 0x77, 0x6e, 0xc1, 0x68, 0xc4, 0x37, 0x94, 0x37, 0xb3, 0xf9, 0xde, 0x6c, 0xf9, 0x75, 0x26, 0xe4, - 0x94, 0x43, 0x52, 0x86, 0xfc, 0x0c, 0xc1, 0x64, 0x4b, 0x67, 0xb2, 0xd1, 0xcc, 0xf8, 0x9e, 0xc0, - 0xb5, 0x2d, 0x80, 0x56, 0x91, 0x08, 0xf7, 0x8a, 0x6b, 0x0b, 0x65, 0x59, 0x51, 0x65, 0x5e, 0x51, - 0x65, 0x59, 0xb4, 0xaa, 0xa2, 0xca, 0xdb, 0xb4, 0xc6, 0x5c, 0xf6, 0x61, 0x83, 0x25, 0xa9, 0x6b, - 0x48, 0x92, 0x17, 0x08, 0xa6, 0xf3, 0xb8, 0xe4, 0x79, 0x3a, 0x7c, 0x52, 0x4f, 0xf1, 0xbd, 0x1c, - 0x96, 0x8b, 0x3d, 0x59, 0x4a, 0xcb, 0x6d, 0x34, 0x1f, 0x42, 0x41, 0xb0, 0xe4, 0x76, 0x8c, 0xb4, - 0xa2, 0xfc, 0xb4, 0x0e, 0xe5, 0xa6, 0x75, 0xd8, 0x4c, 0xeb, 0x36, 0x7c, 0x41, 0x2b, 0x34, 0x7c, - 0x1d, 0xd9, 0xf3, 0x95, 0xda, 0xe2, 0xda, 0xf9, 0x7c, 0x57, 0x1f, 0x07, 0xfe, 0x9e, 0xcf, 0xaa, - 0x5c, 0x50, 0x39, 0x2b, 0x84, 0xc8, 0x77, 0xe0, 0xb4, 0xd0, 0xb8, 0x5e, 0xaf, 0xf3, 0xef, 0x3a, - 0x53, 0x84, 0xfe, 0xe7, 0x14, 0x3d, 0x43, 0xf0, 0xa6, 0xd0, 0xfc, 0x30, 0x62, 0x81, 0x54, 0xfd, - 0x39, 0x14, 0xca, 0x6f, 0x10, 0xbc, 0xdd, 0xe6, 0x9f, 0x8e, 0xda, 0x6d, 0x18, 0xe5, 0x01, 0x48, - 0x54, 0x85, 0xf4, 0x1d, 0x36, 0x29, 0x35, 0xb8, 0x1a, 0xb9, 0xa4, 0x12, 0xb0, 0xad, 0x22, 0x80, - 0xa7, 0xe0, 0x8d, 0xf6, 0xe0, 0x64, 0x4b, 0xf2, 0x81, 0xf2, 0x25, 0x83, 0x6a, 0x5f, 0xd6, 0x61, - 0x3c, 0x0b, 0xa0, 0xfd, 0x68, 0x67, 0x92, 0xd9, 0x5d, 0xa5, 0xc5, 0xc8, 0xf7, 0x54, 0x65, 0xad, - 0xd7, 0xeb, 0x1a, 0x34, 0xb0, 0x5a, 0xf8, 0x04, 0xc1, 0x97, 0x8e, 0x69, 0xd7, 0xec, 0x37, 0xa1, - 0xa0, 0xaf, 0x71, 0xfb, 0x79, 0xed, 0xa4, 0xdf, 0x92, 0x1b, 0x5c, 0x3e, 0x02, 0x38, 0x2b, 0xa9, - 0xa6, 0x29, 0x4b, 0xe4, 0xd3, 0xc7, 0x8f, 0x2e, 0xb7, 0xa4, 0xa2, 0x5b, 0x70, 0xd5, 0x6a, 0x20, - 0x37, 0xb5, 0x0f, 0x53, 0x9d, 0xf6, 0x74, 0x64, 0x1e, 0x40, 0x91, 0xb6, 0xb6, 0x55, 0x02, 0xe6, - 0xf3, 0x63, 0x63, 0xc8, 0x6f, 0x85, 0xf1, 0x81, 0x8a, 0x90, 0x29, 0x4f, 0xbe, 0xaf, 0x2e, 0xf0, - 0xf5, 0x7a, 0xdd, 0x40, 0x0f, 0x2e, 0xcd, 0x7f, 0xc9, 0x6e, 0xe5, 0x0e, 0x03, 0xda, 0x9f, 0x87, - 0x30, 0x61, 0xf0, 0xc9, 0x92, 0x7d, 0x22, 0x87, 0xda, 0x14, 0x0c, 0x2e, 0xeb, 0xbe, 0x6a, 0x07, - 0x5c, 0x16, 0x85, 0x71, 0xfa, 0x7f, 0x4d, 0xf8, 0x63, 0xd5, 0x6a, 0x48, 0x53, 0x3a, 0x36, 0x77, - 0x60, 0x2c, 0x16, 0x3b, 0x2a, 0x01, 0x73, 0xf9, 0x51, 0x91, 0x52, 0x46, 0x40, 0x94, 0x14, 0xf9, - 0x2e, 0x9c, 0xc9, 0x62, 0x2f, 0x31, 0x83, 0xcb, 0xeb, 0x0b, 0x04, 0x5f, 0xec, 0xd0, 0xad, 0x69, - 0xbf, 0x0b, 0x6f, 0x48, 0x02, 0x59, 0x36, 0xfb, 0xe5, 0x9d, 0x89, 0x0d, 0x2e, 0x87, 0xcb, 0xea, - 0xc1, 0xd9, 0x8a, 0x19, 0xdb, 0x89, 0x68, 0x85, 0x59, 0xae, 0xd2, 0xcb, 0x2a, 0x5a, 0x3b, 0x69, - 0x18, 0xb3, 0xcd, 0xb0, 0x11, 0xa4, 0x16, 0x70, 0x19, 0xce, 0xb5, 0x2b, 0xd6, 0xde, 0xf3, 0x0c, - 0xf3, 0x0d, 0x25, 0x21, 0x17, 0xc4, 0x51, 0xe1, 0x6a, 0x29, 0x37, 0x05, 0x2a, 0x7c, 0x23, 0x13, - 0x10, 0x0b, 0xb2, 0xa8, 0xde, 0x80, 0x2d, 0x3f, 0xa8, 0xda, 0x7a, 0x05, 0x72, 0x53, 0xbd, 0x00, - 0x19, 0x50, 0xeb, 0x3d, 0x0f, 0x13, 0xfa, 0x69, 0xf5, 0xa3, 0xcc, 0x83, 0x62, 0xb6, 0x77, 0x3f, - 0x4a, 0xc8, 0x55, 0x75, 0xfa, 0x37, 0xeb, 0x3e, 0x0b, 0xd2, 0x7e, 0x82, 0x74, 0x5b, 0x1d, 0xe7, - 0x0e, 0x09, 0x6d, 0xf4, 0xcb, 0x00, 0xbb, 0xcd, 0x94, 0x25, 0xde, 0x5e, 0xcc, 0x24, 0xd3, 0x61, - 0xb7, 0x20, 0x76, 0x38, 0x96, 0x2c, 0xc1, 0x84, 0xea, 0xa9, 0x9b, 0x77, 0x69, 0x4a, 0x2d, 0x86, - 0x76, 0xb2, 0xce, 0x52, 0x22, 0xb5, 0x81, 0x79, 0x78, 0x33, 0xf5, 0x0f, 0x98, 0x17, 0xb3, 0x03, - 0xea, 0x07, 0x7e, 0x50, 0x53, 0x46, 0x4e, 0xf3, 0x5d, 0x37, 0xdb, 0xe4, 0x41, 0x15, 0x56, 0x45, - 0xf1, 0x0c, 0xbb, 0x72, 0x41, 0xae, 0x19, 0x59, 0xa0, 0x35, 0xb6, 0x2d, 0x67, 0x80, 0xfb, 0xc1, - 0x5e, 0x68, 0x61, 0xf2, 0x0c, 0xc1, 0x6c, 0x17, 0x29, 0xcd, 0xea, 0x07, 0x30, 0xa9, 0xaa, 0xda, - 0x33, 0x07, 0x0b, 0x75, 0xc0, 0x96, 0xf2, 0xeb, 0xff, 0xb8, 0x3e, 0x75, 0x0e, 0x70, 0x72, 0xec, - 0x1b, 0x52, 0x85, 0x52, 0x76, 0xde, 0x72, 0xd8, 0x0f, 0xea, 0x58, 0xff, 0x0d, 0x01, 0xe9, 0x6e, - 0xa6, 0x0f, 0x77, 0x87, 0x07, 0xe3, 0xee, 0xe0, 0x6e, 0x80, 0x2d, 0x55, 0x47, 0xfc, 0x68, 0x3c, - 0x8e, 0xea, 0x21, 0xad, 0x6e, 0x3e, 0x61, 0x95, 0xfd, 0xee, 0xf9, 0xee, 0x52, 0x3a, 0x5f, 0x51, - 0x85, 0xdf, 0xa1, 0xc7, 0x3c, 0xc5, 0x4f, 0x69, 0xdd, 0xaf, 0x0a, 0x6d, 0xe3, 0xae, 0x5c, 0x90, - 0x4d, 0x75, 0xa7, 0x6c, 0xc7, 0x7e, 0x85, 0x49, 0xc3, 0x25, 0x18, 0xaf, 0x36, 0xe2, 0x56, 0xa2, - 0x0a, 0xae, 0x5e, 0x77, 0x31, 0x9d, 0xdd, 0x1d, 0x2d, 0x25, 0xa6, 0xd5, 0x88, 0xef, 0xaa, 0x43, - 0x20, 0x17, 0xe4, 0x5c, 0xf6, 0xa8, 0x8b, 0x91, 0x59, 0x77, 0x48, 0xc4, 0xcf, 0xde, 0xe2, 0xf6, - 0x7d, 0xad, 0xed, 0xfe, 0xf1, 0xae, 0xab, 0xdb, 0x43, 0xdc, 0xae, 0xe1, 0x58, 0xef, 0x45, 0xde, - 0x52, 0xbd, 0xa3, 0x4a, 0xfa, 0x4e, 0x4a, 0xd3, 0x84, 0xfc, 0x67, 0x48, 0xf5, 0x7c, 0xe6, 0xae, - 0xb6, 0x3e, 0x0d, 0x85, 0xa8, 0x11, 0x57, 0x9e, 0xd0, 0x84, 0xc9, 0x28, 0x8e, 0xb8, 0xad, 0x0d, - 0x8c, 0x61, 0xa4, 0xc1, 0xbf, 0x18, 0x12, 0x5f, 0x88, 0xcf, 0xf8, 0x01, 0x00, 0xff, 0xeb, 0x89, - 0xe8, 0x89, 0x77, 0x76, 0x62, 0xa3, 0xcc, 0x99, 0xfc, 0xf3, 0xe5, 0xec, 0x42, 0xcd, 0x4f, 0x9f, - 0x34, 0x76, 0xcb, 0x95, 0xf0, 0xc0, 0x51, 0x3f, 0x4f, 0xc8, 0x3f, 0x2b, 0x49, 0x75, 0xdf, 0x49, - 0x9b, 0x11, 0x4b, 0xca, 0x77, 0x59, 0xc5, 0x2d, 0x70, 0x0d, 0x2e, 0x57, 0xc0, 0x2f, 0x4c, 0xf5, - 0x23, 0x43, 0x23, 0xe1, 0x11, 0x18, 0x11, 0xa6, 0x8a, 0x72, 0xef, 0x31, 0xdf, 0xc2, 0x55, 0x38, - 0x2d, 0xbe, 0xf3, 0x76, 0x9b, 0x5e, 0x54, 0xa7, 0xc1, 0xd4, 0xa8, 0x88, 0xd2, 0xbb, 0xf9, 0x51, - 0xea, 0xea, 0x6b, 0x59, 0x68, 0xdb, 0x68, 0x6e, 0xd7, 0x69, 0xf0, 0x8d, 0x20, 0x8d, 0x9b, 0x6e, - 0xb1, 0xd1, 0xda, 0x29, 0xdd, 0x81, 0xb3, 0x9d, 0x00, 0x7c, 0x16, 0x86, 0xf7, 0x59, 0x53, 0xe5, - 0x99, 0x7f, 0x54, 0x15, 0xd7, 0x60, 0x59, 0xb1, 0x88, 0xc5, 0xcd, 0xa1, 0x1b, 0x68, 0xed, 0xf9, - 0x34, 0x8c, 0x0a, 0xdb, 0xf8, 0x19, 0x82, 0x31, 0xf9, 0x4b, 0x04, 0x3e, 0x6f, 0xe1, 0x28, 0x21, - 0xa5, 0x4b, 0x3d, 0x21, 0x99, 0x03, 0xe4, 0xf2, 0x4f, 0xfe, 0xfe, 0xef, 0x9f, 0x0f, 0xcd, 0xe3, - 0x0b, 0xce, 0x0f, 0x69, 0x65, 0x9f, 0xd6, 0x1d, 0x29, 0xb9, 0x92, 0xf7, 0xb3, 0x0e, 0x7e, 0x8e, - 0x60, 0x44, 0xbc, 0x61, 0xb3, 0x16, 0x03, 0x1c, 0x50, 0x5a, 0xec, 0x01, 0xd0, 0xf6, 0x37, 0x85, - 0xfd, 0xdb, 0xf8, 0x96, 0xd5, 0xbe, 0x98, 0xcb, 0x9c, 0x43, 0xf9, 0x52, 0x1e, 0x39, 0x87, 0xa2, - 0x07, 0x3b, 0x72, 0x0e, 0x45, 0xd7, 0x75, 0x84, 0x7f, 0x8a, 0x60, 0x5c, 0x0f, 0xb9, 0x17, 0x2c, - 0xa6, 0x33, 0x50, 0xe9, 0x72, 0x1f, 0x20, 0xcd, 0x71, 0x59, 0x70, 0xbc, 0x88, 0x49, 0x6f, 0x8e, - 0xf8, 0xb7, 0x08, 0x0a, 0xad, 0xa9, 0xf8, 0xa2, 0xc5, 0x8c, 0x46, 0x9d, 0x8c, 0xcc, 0x86, 0x20, - 0xf3, 0x0e, 0xbe, 0x69, 0x25, 0x13, 0x46, 0x2c, 0xf0, 0x54, 0xd4, 0x3a, 0xe7, 0xf2, 0x23, 0xfc, - 0x47, 0x04, 0xa3, 0xf2, 0xa7, 0xab, 0x39, 0x5b, 0xa5, 0x70, 0x44, 0x69, 0xa9, 0x17, 0x42, 0x33, - 0xfb, 0xb6, 0x60, 0xb6, 0x8d, 0xdf, 0xb7, 0x97, 0x12, 0x97, 0xc9, 0x21, 0xd5, 0x3d, 0xbb, 0xbf, - 0x40, 0x30, 0xae, 0x27, 0xe8, 0x0b, 0x76, 0x3a, 0x02, 0x64, 0x0d, 0x68, 0xe7, 0x80, 0x4d, 0x6e, - 0x08, 0xda, 0x6b, 0xf8, 0x6a, 0x2f, 0xda, 0xf2, 0x46, 0x74, 0x0e, 0x75, 0x18, 0x7f, 0x89, 0x60, - 0xa2, 0x6d, 0xa6, 0x5e, 0xb4, 0x27, 0x52, 0x03, 0x4b, 0x4e, 0x9f, 0x40, 0x4d, 0xb2, 0x2c, 0x48, - 0x2e, 0xe1, 0x85, 0xfe, 0x48, 0xe2, 0xbf, 0x22, 0x28, 0x9a, 0x53, 0xee, 0x82, 0xcd, 0x60, 0x0b, - 0x57, 0x2a, 0xf7, 0x87, 0xd3, 0xbc, 0x76, 0x04, 0xaf, 0x07, 0xf8, 0x5b, 0x56, 0x5e, 0xe6, 0x5c, - 0x27, 0x53, 0x2f, 0xf2, 0xdb, 0x2d, 0xe1, 0x2f, 0x10, 0x9c, 0xe9, 0x9c, 0x63, 0x97, 0xed, 0x11, - 0x33, 0xb1, 0xa5, 0xb5, 0xfe, 0xb1, 0xda, 0x91, 0x55, 0xe1, 0xc8, 0x65, 0x7c, 0xa9, 0x6f, 0x47, - 0xf0, 0xef, 0x10, 0x8c, 0xa9, 0x99, 0xd2, 0x76, 0x27, 0x4b, 0x88, 0xf5, 0x4e, 0x6e, 0x1f, 0x17, - 0xc9, 0xfb, 0x82, 0xcb, 0x37, 0xf1, 0x96, 0x95, 0x8b, 0x9a, 0xb1, 0xfa, 0x88, 0xe7, 0x47, 0x08, - 0xc0, 0x18, 0x1d, 0xe7, 0xed, 0xe1, 0x51, 0xb0, 0xd2, 0x4a, 0x5f, 0x30, 0x4d, 0xfa, 0x8a, 0x20, - 0xbd, 0x80, 0x2f, 0xf6, 0x43, 0x1a, 0x7f, 0x8c, 0xa0, 0xd0, 0x1a, 0x53, 0x6c, 0xd7, 0xa4, 0x46, - 0x95, 0xae, 0xf4, 0x83, 0xd2, 0x7c, 0xbe, 0x2e, 0xf8, 0x5c, 0xc3, 0xab, 0xf6, 0x4b, 0x3b, 0x66, - 0xcc, 0x13, 0x93, 0x9d, 0x71, 0xae, 0x3f, 0x46, 0x00, 0xc6, 0xf0, 0x38, 0xdf, 0xa3, 0x29, 0x90, - 0x30, 0x6b, 0xbc, 0x8e, 0x4f, 0x8b, 0xe4, 0xab, 0x82, 0xdf, 0x55, 0x5c, 0xb6, 0xf2, 0xe3, 0x7f, - 0xfd, 0xa0, 0x66, 0x90, 0x7b, 0x8e, 0x60, 0x5c, 0xcf, 0x92, 0x17, 0xac, 0xcf, 0xac, 0x04, 0x59, - 0x6f, 0xc3, 0xce, 0x61, 0x93, 0x7c, 0x4d, 0xd0, 0x5a, 0xc5, 0x4e, 0x8f, 0xb7, 0x2e, 0xa8, 0x8a, - 0xe7, 0x45, 0x17, 0x1d, 0xbf, 0x71, 0xf0, 0x3d, 0x96, 0x76, 0x4e, 0xa0, 0xb6, 0x73, 0xdb, 0x81, - 0xb5, 0x9e, 0xdb, 0x2e, 0x73, 0x2a, 0xb9, 0x2b, 0xf8, 0xde, 0xc1, 0xef, 0x58, 0xf9, 0xd6, 0x58, - 0xea, 0x55, 0x84, 0x06, 0x2f, 0x37, 0xe3, 0xbf, 0x42, 0x00, 0xf7, 0x58, 0x9a, 0x4d, 0xb3, 0xc4, - 0xda, 0x3f, 0x09, 0x4c, 0x69, 0xb9, 0x37, 0x46, 0x93, 0xbc, 0x25, 0x48, 0x5e, 0xc7, 0xd7, 0x7a, - 0x92, 0x8c, 0x68, 0xd3, 0xab, 0xd2, 0x94, 0x1a, 0xdc, 0xfe, 0x8c, 0x00, 0xe7, 0x4c, 0x8a, 0x2b, - 0xbd, 0x5b, 0x55, 0x03, 0x5e, 0xba, 0x7e, 0x22, 0xf8, 0x09, 0x99, 0x9b, 0xb3, 0xa3, 0xc1, 0xfc, - 0x4f, 0x08, 0xde, 0xce, 0x1f, 0x73, 0xaf, 0xda, 0xef, 0x96, 0x1c, 0xfe, 0x37, 0x4e, 0x2a, 0x71, - 0xc2, 0x9b, 0xdd, 0x74, 0x01, 0x7f, 0x82, 0xe0, 0x4c, 0xe7, 0x9c, 0xb9, 0xdc, 0xa3, 0xa3, 0x35, - 0xb0, 0xd6, 0x42, 0xee, 0x32, 0x77, 0xf6, 0x79, 0x1f, 0xf0, 0x33, 0xe7, 0x35, 0x84, 0xb8, 0x57, - 0x11, 0xbc, 0x7e, 0x8f, 0x00, 0x8c, 0xa9, 0x74, 0xde, 0xda, 0xfa, 0x64, 0x30, 0xeb, 0x65, 0x75, - 0x7c, 0x3c, 0xed, 0xb3, 0x4b, 0x17, 0x43, 0xab, 0xa4, 0xe5, 0x1c, 0x66, 0xb3, 0xf0, 0x91, 0x73, - 0x28, 0xa6, 0xdf, 0x23, 0xfc, 0x07, 0xfe, 0xac, 0xb7, 0xcf, 0x9b, 0xf6, 0x67, 0xbd, 0x1d, 0x6b, - 0x7f, 0xd6, 0xf3, 0x27, 0x61, 0x72, 0x5d, 0x10, 0x77, 0xf0, 0x8a, 0xfd, 0x59, 0x97, 0xd3, 0x62, - 0xab, 0x7d, 0xfa, 0x35, 0x82, 0x09, 0x73, 0xde, 0xb3, 0x76, 0x76, 0x26, 0xd0, 0xda, 0xd9, 0xe5, - 0x4d, 0x90, 0x64, 0x4d, 0x30, 0xbc, 0x82, 0x97, 0x7b, 0xbe, 0x03, 0xb4, 0xc6, 0x3c, 0xde, 0x7c, - 0x24, 0x1b, 0xef, 0x7d, 0xfa, 0x6a, 0x06, 0x7d, 0xf6, 0x6a, 0x06, 0xfd, 0xeb, 0xd5, 0x0c, 0xfa, - 0xe8, 0xf5, 0xcc, 0xa9, 0xcf, 0x5e, 0xcf, 0x9c, 0xfa, 0xc7, 0xeb, 0x99, 0x53, 0x1f, 0xac, 0x19, - 0xd3, 0xb2, 0xd4, 0xf7, 0x1e, 0xdd, 0x4d, 0xda, 0x75, 0xfe, 0x58, 0x6b, 0x15, 0xd3, 0xf3, 0xee, - 0x98, 0xf8, 0xaf, 0xf9, 0xb5, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x56, 0x8d, 0xfa, 0x65, 0x6a, - 0x20, 0x00, 0x00, + // 2021 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6f, 0x1c, 0x49, + 0x11, 0x4f, 0xfb, 0xeb, 0xbc, 0xb5, 0xce, 0x25, 0xf4, 0xf9, 0x82, 0x59, 0x19, 0xdb, 0xe9, 0xc4, + 0x1f, 0x71, 0xe2, 0x9d, 0xd8, 0x21, 0x10, 0x92, 0x4b, 0x74, 0xb6, 0x83, 0x43, 0xc4, 0xe5, 0xe2, + 0x8c, 0x15, 0x10, 0x87, 0xc4, 0xd0, 0xde, 0x6d, 0x6f, 0x06, 0xaf, 0x67, 0xe6, 0x66, 0x66, 0x03, + 0x2b, 0xcb, 0x2f, 0xe4, 0x05, 0xde, 0x4e, 0x42, 0x41, 0x70, 0x42, 0x42, 0x42, 0x11, 0x70, 0xe2, + 0x1d, 0x10, 0x7f, 0xc1, 0xbd, 0x71, 0x12, 0x2f, 0x88, 0x87, 0x08, 0x25, 0xf0, 0x7f, 0xa0, 0xfe, + 0x98, 0xde, 0xde, 0xf5, 0x6c, 0xef, 0x1a, 0x2d, 0xba, 0x27, 0x6f, 0xf7, 0xfe, 0xaa, 0xea, 0x57, + 0x55, 0xdd, 0xd5, 0x55, 0x6b, 0x98, 0xab, 0xd0, 0xc0, 0x0f, 0x98, 0x57, 0x79, 0x42, 0xfd, 0xc0, + 0x49, 0xd2, 0x30, 0xa6, 0x35, 0xe6, 0x7c, 0xd8, 0x60, 0x71, 0xb3, 0x1c, 0xc5, 0x61, 0x1a, 0xe2, + 0x49, 0x13, 0x51, 0x56, 0x88, 0xd2, 0x64, 0x2d, 0xac, 0x85, 0x02, 0xe0, 0xf0, 0x4f, 0x12, 0x5b, + 0x9a, 0xae, 0x85, 0x61, 0xad, 0xce, 0x1c, 0x1a, 0xf9, 0x0e, 0x0d, 0x82, 0x30, 0xa5, 0xa9, 0x1f, + 0x06, 0x89, 0xfa, 0x76, 0xb9, 0x12, 0x26, 0x07, 0x61, 0xe2, 0xec, 0xd2, 0x44, 0x99, 0x70, 0x9e, + 0xae, 0xee, 0xb2, 0x94, 0xae, 0x3a, 0x11, 0xad, 0xf9, 0x81, 0x00, 0x2b, 0xec, 0xf9, 0x5c, 0x5e, + 0x11, 0x8d, 0xe9, 0x41, 0xa6, 0x6e, 0x31, 0x17, 0x42, 0x2b, 0xa9, 0xff, 0x94, 0x79, 0x55, 0x46, + 0xeb, 0x19, 0xf0, 0x62, 0xbe, 0xae, 0x38, 0x7c, 0xea, 0x57, 0x59, 0x6c, 0x57, 0x17, 0xd1, 0xe6, + 0x01, 0x0b, 0x52, 0xcf, 0x0f, 0xf6, 0x94, 0x93, 0xe4, 0x34, 0x14, 0x1f, 0x71, 0xf2, 0xdb, 0x82, + 0x0c, 0x79, 0x04, 0x6f, 0x19, 0x4b, 0x97, 0x25, 0x51, 0x18, 0x24, 0x0c, 0xdf, 0x84, 0x31, 0xc9, + 0x76, 0x0a, 0xcd, 0xa1, 0xa5, 0xe2, 0xda, 0x74, 0x39, 0x2f, 0x8e, 0x65, 0x29, 0xb5, 0x31, 0xf2, + 0xe9, 0xcb, 0xd9, 0x53, 0xae, 0x92, 0x20, 0x87, 0x00, 0x52, 0x65, 0x1c, 0x86, 0x7b, 0xf8, 0x12, + 0x9c, 0xcd, 0xb8, 0x7a, 0xb4, 0x5a, 0x8d, 0x59, 0x22, 0x75, 0x16, 0xdc, 0x33, 0xd9, 0xfe, 0xba, + 0xdc, 0xc6, 0xe7, 0x60, 0xec, 0x80, 0xc5, 0xfb, 0x75, 0x36, 0x35, 0x34, 0x87, 0x96, 0x26, 0x5c, + 0xb5, 0xc2, 0x93, 0x30, 0x1a, 0xfe, 0x28, 0x60, 0xf1, 0xd4, 0xb0, 0x90, 0x93, 0x0b, 0xbe, 0x9b, + 0xa4, 0x34, 0x4e, 0xa7, 0x46, 0xe6, 0xd0, 0xd2, 0xb0, 0x2b, 0x17, 0xe4, 0x11, 0xe0, 0x96, 0x71, + 0xed, 0xce, 0x2d, 0x18, 0x8d, 0xf8, 0x86, 0xf2, 0x66, 0x36, 0xdf, 0x9b, 0x2d, 0xbf, 0xce, 0x84, + 0x9c, 0x72, 0x48, 0xca, 0x90, 0x9f, 0x21, 0x98, 0x6c, 0xe9, 0x4c, 0x36, 0x9a, 0x19, 0xdf, 0x13, + 0xb8, 0xb6, 0x05, 0xd0, 0x3a, 0x24, 0xc2, 0xbd, 0xe2, 0xda, 0x42, 0x59, 0x9e, 0xa8, 0x32, 0x3f, + 0x51, 0x65, 0x79, 0x68, 0xd5, 0x89, 0x2a, 0x6f, 0xd3, 0x1a, 0x73, 0xd9, 0x87, 0x0d, 0x96, 0xa4, + 0xae, 0x21, 0x49, 0x5e, 0x20, 0x98, 0xce, 0xe3, 0x92, 0xe7, 0xe9, 0xf0, 0x49, 0x3d, 0xc5, 0xf7, + 0x72, 0x58, 0x2e, 0xf6, 0x64, 0x29, 0x2d, 0xb7, 0xd1, 0x7c, 0x08, 0x05, 0xc1, 0x92, 0xdb, 0x31, + 0xd2, 0x8a, 0xf2, 0xd3, 0x3a, 0x94, 0x9b, 0xd6, 0x61, 0x33, 0xad, 0xdb, 0xf0, 0x05, 0xad, 0xd0, + 0xf0, 0x75, 0x64, 0xcf, 0x57, 0x6a, 0x8b, 0x6b, 0xe7, 0xf3, 0x5d, 0x7d, 0x1c, 0xf8, 0x7b, 0x3e, + 0xab, 0x72, 0x41, 0xe5, 0xac, 0x10, 0x22, 0xdf, 0x81, 0xd3, 0x42, 0xe3, 0x7a, 0xbd, 0xce, 0xbf, + 0xeb, 0x4c, 0x11, 0xfa, 0x9f, 0x53, 0xf4, 0x0c, 0xc1, 0x9b, 0x42, 0xf3, 0xc3, 0x88, 0x05, 0x52, + 0xf5, 0xe7, 0x70, 0x50, 0x7e, 0x83, 0xe0, 0xed, 0x36, 0xff, 0x74, 0xd4, 0x6e, 0xc3, 0x28, 0x0f, + 0x40, 0xa2, 0x4e, 0x48, 0xdf, 0x61, 0x93, 0x52, 0x83, 0x3b, 0x23, 0x97, 0x54, 0x02, 0xb6, 0x55, + 0x04, 0xf0, 0x14, 0xbc, 0xd1, 0x1e, 0x9c, 0x6c, 0x49, 0x3e, 0x50, 0xbe, 0x64, 0x50, 0xed, 0xcb, + 0x3a, 0x8c, 0x67, 0x01, 0xb4, 0x5f, 0xed, 0x4c, 0x32, 0xab, 0x55, 0x5a, 0x8c, 0x7c, 0x4f, 0x9d, + 0xac, 0xf5, 0x7a, 0x5d, 0x83, 0x06, 0x76, 0x16, 0x3e, 0x41, 0xf0, 0xa5, 0x63, 0xda, 0x35, 0xfb, + 0x4d, 0x28, 0xe8, 0x32, 0x6e, 0xbf, 0xaf, 0x9d, 0xf4, 0x5b, 0x72, 0x83, 0xcb, 0x47, 0x00, 0x67, + 0x25, 0xd5, 0x34, 0x65, 0x89, 0x7c, 0xfa, 0xf8, 0xd5, 0xe5, 0x96, 0x54, 0x74, 0x0b, 0xae, 0x5a, + 0x0d, 0xa4, 0x52, 0xfb, 0x30, 0xd5, 0x69, 0x4f, 0x47, 0xe6, 0x01, 0x14, 0x69, 0x6b, 0x5b, 0x25, + 0x60, 0x3e, 0x3f, 0x36, 0x86, 0xfc, 0x56, 0x18, 0x1f, 0xa8, 0x08, 0x99, 0xf2, 0xe4, 0xfb, 0xaa, + 0x80, 0xaf, 0xd7, 0xeb, 0x06, 0x7a, 0x70, 0x69, 0xfe, 0x4b, 0x56, 0x95, 0x3b, 0x0c, 0x68, 0x7f, + 0x1e, 0xc2, 0x84, 0xc1, 0x27, 0x4b, 0xf6, 0x89, 0x1c, 0x6a, 0x53, 0x30, 0xb8, 0xac, 0xfb, 0xaa, + 0x1d, 0x70, 0x59, 0x14, 0xc6, 0xe9, 0xff, 0x35, 0xe1, 0x8f, 0x55, 0xab, 0x21, 0x4d, 0xe9, 0xd8, + 0xdc, 0x81, 0xb1, 0x58, 0xec, 0xa8, 0x04, 0xcc, 0xe5, 0x47, 0x45, 0x4a, 0x19, 0x01, 0x51, 0x52, + 0xe4, 0xbb, 0x70, 0x26, 0x8b, 0xbd, 0xc4, 0x0c, 0x2e, 0xaf, 0x2f, 0x10, 0x7c, 0xb1, 0x43, 0xb7, + 0xa6, 0xfd, 0x2e, 0xbc, 0x21, 0x09, 0x64, 0xd9, 0xec, 0x97, 0x77, 0x26, 0x36, 0xb8, 0x1c, 0x2e, + 0xab, 0x07, 0x67, 0x2b, 0x66, 0x6c, 0x27, 0xa2, 0x15, 0x66, 0x29, 0xa5, 0x97, 0x55, 0xb4, 0x76, + 0xd2, 0x30, 0x66, 0x9b, 0x61, 0x23, 0x48, 0x2d, 0xe0, 0x32, 0x9c, 0x6b, 0x57, 0xac, 0xbd, 0xe7, + 0x19, 0xe6, 0x1b, 0x42, 0x82, 0x67, 0x98, 0x2f, 0x88, 0xa3, 0xc2, 0xd5, 0x52, 0x6e, 0x0a, 0x54, + 0xf8, 0x46, 0x26, 0x20, 0x16, 0x64, 0x51, 0xbd, 0x01, 0x5b, 0x7e, 0x50, 0xb5, 0xf5, 0x0a, 0xe4, + 0xa6, 0x7a, 0x01, 0x32, 0xa0, 0xd6, 0x7b, 0x1e, 0x26, 0xf4, 0xd3, 0xea, 0x47, 0x99, 0x07, 0xc5, + 0x6c, 0xef, 0x7e, 0x94, 0x90, 0xab, 0xea, 0xf6, 0x6f, 0xd6, 0x7d, 0x16, 0xa4, 0xfd, 0x04, 0xe9, + 0xb6, 0xba, 0xce, 0x1d, 0x12, 0xda, 0xe8, 0x97, 0x01, 0x76, 0x9b, 0x29, 0x4b, 0xbc, 0xbd, 0x98, + 0x65, 0x21, 0x28, 0x88, 0x1d, 0x8e, 0x25, 0x4b, 0x30, 0xa1, 0x7a, 0xea, 0xe6, 0x5d, 0x9a, 0x52, + 0x8b, 0xa1, 0x9d, 0xac, 0xb3, 0x94, 0x48, 0x6d, 0x60, 0x1e, 0xde, 0x4c, 0xfd, 0x03, 0xe6, 0xc5, + 0xec, 0x80, 0xfa, 0x81, 0x1f, 0xd4, 0x94, 0x91, 0xd3, 0x7c, 0xd7, 0xcd, 0x36, 0x79, 0x50, 0x85, + 0x55, 0x71, 0x78, 0x86, 0x5d, 0xb9, 0x20, 0xd7, 0x8c, 0x2c, 0xd0, 0x1a, 0xdb, 0x96, 0x33, 0xc0, + 0xfd, 0x60, 0x2f, 0xb4, 0x30, 0x79, 0x86, 0x60, 0xb6, 0x8b, 0x94, 0x66, 0xf5, 0x03, 0x98, 0x54, + 0xa7, 0xda, 0x33, 0x07, 0x0b, 0x75, 0xc1, 0x96, 0xf2, 0xcf, 0xff, 0x71, 0x7d, 0xea, 0x1e, 0xe0, + 0xe4, 0xd8, 0x37, 0xa4, 0x0a, 0xa5, 0xec, 0xbe, 0xe5, 0xb0, 0x1f, 0xd4, 0xb5, 0xfe, 0x1b, 0x02, + 0xd2, 0xdd, 0x4c, 0x1f, 0xee, 0x0e, 0x0f, 0xc6, 0xdd, 0xc1, 0x55, 0x80, 0x2d, 0x75, 0x8e, 0xf8, + 0xd5, 0x78, 0x1c, 0xd5, 0x43, 0x5a, 0xdd, 0x7c, 0xc2, 0x2a, 0xfb, 0xdd, 0xf3, 0xdd, 0xe5, 0xe8, + 0x7c, 0x45, 0x1d, 0xfc, 0x0e, 0x3d, 0xe6, 0x2d, 0x7e, 0x4a, 0xeb, 0x7e, 0x55, 0x68, 0x1b, 0x77, + 0xe5, 0x82, 0x6c, 0xaa, 0x9a, 0xb2, 0x1d, 0xfb, 0x15, 0x26, 0x0d, 0x97, 0x60, 0xbc, 0xda, 0x88, + 0x5b, 0x89, 0x2a, 0xb8, 0x7a, 0xdd, 0xc5, 0x74, 0x56, 0x3b, 0x5a, 0x4a, 0x4c, 0xab, 0x11, 0xdf, + 0xcd, 0x6a, 0x87, 0x58, 0x90, 0x73, 0xd9, 0xa3, 0x2e, 0x46, 0x66, 0xdd, 0x21, 0x11, 0x3f, 0x7b, + 0x8b, 0xdb, 0xf7, 0xb5, 0xb6, 0xfb, 0xc7, 0xbb, 0xae, 0x6e, 0x0f, 0x71, 0xbb, 0x86, 0x63, 0xbd, + 0x17, 0x79, 0x4b, 0xf5, 0x8e, 0x2a, 0xe9, 0x3b, 0x29, 0x4d, 0x13, 0xf2, 0x9f, 0x21, 0xd5, 0xf3, + 0x99, 0xbb, 0xda, 0xfa, 0x34, 0x14, 0xa2, 0x46, 0x5c, 0x79, 0x42, 0x13, 0x26, 0xa3, 0x38, 0xe2, + 0xb6, 0x36, 0x30, 0x86, 0x91, 0x06, 0xff, 0x62, 0x48, 0x7c, 0x21, 0x3e, 0xe3, 0x07, 0x00, 0xfc, + 0xaf, 0x27, 0xa2, 0x27, 0xde, 0xd9, 0x89, 0x8d, 0x32, 0x67, 0xf2, 0xcf, 0x97, 0xb3, 0x0b, 0x35, + 0x3f, 0x7d, 0xd2, 0xd8, 0x2d, 0x57, 0xc2, 0x03, 0x47, 0xfd, 0x3c, 0x21, 0xff, 0xac, 0x24, 0xd5, + 0x7d, 0x27, 0x6d, 0x46, 0x2c, 0x29, 0xdf, 0x65, 0x15, 0xb7, 0xc0, 0x35, 0xb8, 0x5c, 0x01, 0x2f, + 0x98, 0xea, 0x47, 0x86, 0x46, 0xc2, 0x23, 0x30, 0x22, 0x4c, 0x15, 0xe5, 0xde, 0x63, 0xbe, 0x85, + 0xab, 0x70, 0x5a, 0x7c, 0xe7, 0xed, 0x36, 0xbd, 0xa8, 0x4e, 0x83, 0xa9, 0x51, 0x11, 0xa5, 0x77, + 0xf3, 0xa3, 0xd4, 0xd5, 0xd7, 0xb2, 0xd0, 0xb6, 0xd1, 0xdc, 0xae, 0xd3, 0xe0, 0x1b, 0x41, 0x1a, + 0x37, 0xdd, 0x62, 0xa3, 0xb5, 0x53, 0xba, 0x03, 0x67, 0x3b, 0x01, 0xf8, 0x2c, 0x0c, 0xef, 0xb3, + 0xa6, 0xca, 0x33, 0xff, 0xa8, 0x4e, 0x5c, 0x83, 0x65, 0x87, 0x45, 0x2c, 0x6e, 0x0e, 0xdd, 0x40, + 0x6b, 0xcf, 0xa7, 0x61, 0x54, 0xd8, 0xc6, 0xcf, 0x10, 0x8c, 0xc9, 0x5f, 0x22, 0xf0, 0x79, 0x0b, + 0x47, 0x09, 0x29, 0x5d, 0xea, 0x09, 0xc9, 0x1c, 0x20, 0x97, 0x7f, 0xf2, 0xf7, 0x7f, 0xff, 0x7c, + 0x68, 0x1e, 0x5f, 0x70, 0x7e, 0x48, 0x2b, 0xfb, 0xb4, 0xee, 0x48, 0xc9, 0x95, 0xbc, 0x9f, 0x75, + 0xf0, 0x73, 0x04, 0x23, 0xe2, 0x0d, 0x9b, 0xb5, 0x18, 0xe0, 0x80, 0xd2, 0x62, 0x0f, 0x80, 0xb6, + 0xbf, 0x29, 0xec, 0xdf, 0xc6, 0xb7, 0xac, 0xf6, 0xc5, 0x5c, 0xe6, 0x1c, 0xca, 0x97, 0xf2, 0xc8, + 0x39, 0x14, 0x3d, 0xd8, 0x91, 0x73, 0x28, 0xba, 0xae, 0x23, 0xfc, 0x53, 0x04, 0xe3, 0x7a, 0xc8, + 0xbd, 0x60, 0x31, 0x9d, 0x81, 0x4a, 0x97, 0xfb, 0x00, 0x69, 0x8e, 0xcb, 0x82, 0xe3, 0x45, 0x4c, + 0x7a, 0x73, 0xc4, 0xbf, 0x45, 0x50, 0x68, 0x4d, 0xc5, 0x17, 0x2d, 0x66, 0x34, 0xea, 0x64, 0x64, + 0x36, 0x04, 0x99, 0x77, 0xf0, 0x4d, 0x2b, 0x99, 0x30, 0x62, 0x81, 0xa7, 0xa2, 0xd6, 0x39, 0x97, + 0x1f, 0xe1, 0x3f, 0x22, 0x18, 0x95, 0x3f, 0x5d, 0xcd, 0xd9, 0x4e, 0x0a, 0x47, 0x94, 0x96, 0x7a, + 0x21, 0x34, 0xb3, 0x6f, 0x0b, 0x66, 0xdb, 0xf8, 0x7d, 0xfb, 0x51, 0xe2, 0x32, 0x39, 0xa4, 0xba, + 0x67, 0xf7, 0x17, 0x08, 0xc6, 0xf5, 0x04, 0x7d, 0xc1, 0x4e, 0x47, 0x80, 0xac, 0x01, 0xed, 0x1c, + 0xb0, 0xc9, 0x0d, 0x41, 0x7b, 0x0d, 0x5f, 0xed, 0x45, 0x5b, 0x56, 0x44, 0xe7, 0x50, 0x87, 0xf1, + 0x97, 0x08, 0x26, 0xda, 0x66, 0xea, 0x45, 0x7b, 0x22, 0x35, 0xb0, 0xe4, 0xf4, 0x09, 0xd4, 0x24, + 0xcb, 0x82, 0xe4, 0x12, 0x5e, 0xe8, 0x8f, 0x24, 0xfe, 0x2b, 0x82, 0xa2, 0x39, 0xe5, 0x2e, 0xd8, + 0x0c, 0xb6, 0x70, 0xa5, 0x72, 0x7f, 0x38, 0xcd, 0x6b, 0x47, 0xf0, 0x7a, 0x80, 0xbf, 0x65, 0xe5, + 0x65, 0xce, 0x75, 0x32, 0xf5, 0x22, 0xbf, 0xdd, 0x12, 0xfe, 0x02, 0xc1, 0x99, 0xce, 0x39, 0x76, + 0xd9, 0x1e, 0x31, 0x13, 0x5b, 0x5a, 0xeb, 0x1f, 0xab, 0x1d, 0x59, 0x15, 0x8e, 0x5c, 0xc6, 0x97, + 0xfa, 0x76, 0x04, 0xff, 0x0e, 0xc1, 0x98, 0x9a, 0x29, 0x6d, 0x35, 0x59, 0x42, 0xac, 0x35, 0xb9, + 0x7d, 0x5c, 0x24, 0xef, 0x0b, 0x2e, 0xdf, 0xc4, 0x5b, 0x56, 0x2e, 0x6a, 0xc6, 0xea, 0x23, 0x9e, + 0x1f, 0x21, 0x00, 0x63, 0x74, 0x9c, 0xb7, 0x87, 0x47, 0xc1, 0x4a, 0x2b, 0x7d, 0xc1, 0x34, 0xe9, + 0x2b, 0x82, 0xf4, 0x02, 0xbe, 0xd8, 0x0f, 0x69, 0xfc, 0x31, 0x82, 0x42, 0x6b, 0x4c, 0xb1, 0x95, + 0x49, 0x8d, 0x2a, 0x5d, 0xe9, 0x07, 0xa5, 0xf9, 0x7c, 0x5d, 0xf0, 0xb9, 0x86, 0x57, 0xed, 0x45, + 0x3b, 0x66, 0xcc, 0x13, 0x93, 0x9d, 0x71, 0xaf, 0x3f, 0x46, 0x00, 0xc6, 0xf0, 0x38, 0xdf, 0xa3, + 0x29, 0x90, 0x30, 0x6b, 0xbc, 0x8e, 0x4f, 0x8b, 0xe4, 0xab, 0x82, 0xdf, 0x55, 0x5c, 0xb6, 0xf2, + 0xe3, 0x7f, 0xfd, 0xa0, 0x66, 0x90, 0x7b, 0x8e, 0x60, 0x5c, 0xcf, 0x92, 0x17, 0xac, 0xcf, 0xac, + 0x04, 0x59, 0xab, 0x61, 0xe7, 0xb0, 0x49, 0xbe, 0x26, 0x68, 0xad, 0x62, 0xa7, 0xc7, 0x5b, 0x17, + 0x54, 0xc5, 0xf3, 0xa2, 0x0f, 0x1d, 0xaf, 0x38, 0xf8, 0x1e, 0x4b, 0x3b, 0x27, 0x50, 0xdb, 0xbd, + 0xed, 0xc0, 0x5a, 0xef, 0x6d, 0x97, 0x39, 0x95, 0xdc, 0x15, 0x7c, 0xef, 0xe0, 0x77, 0xac, 0x7c, + 0x6b, 0x2c, 0xf5, 0x2a, 0x42, 0x83, 0x97, 0x9b, 0xf1, 0x5f, 0x21, 0x80, 0x7b, 0x2c, 0xcd, 0xa6, + 0x59, 0x62, 0xed, 0x9f, 0x04, 0xa6, 0xb4, 0xdc, 0x1b, 0xa3, 0x49, 0xde, 0x12, 0x24, 0xaf, 0xe3, + 0x6b, 0x3d, 0x49, 0x46, 0xb4, 0xe9, 0x55, 0x69, 0x4a, 0x0d, 0x6e, 0x7f, 0x46, 0x80, 0x73, 0x26, + 0xc5, 0x95, 0xde, 0xad, 0xaa, 0x01, 0x2f, 0x5d, 0x3f, 0x11, 0xfc, 0x84, 0xcc, 0xcd, 0xd9, 0xd1, + 0x60, 0xfe, 0x27, 0x04, 0x6f, 0xe7, 0x8f, 0xb9, 0x57, 0xed, 0xb5, 0x25, 0x87, 0xff, 0x8d, 0x93, + 0x4a, 0x9c, 0xb0, 0xb2, 0x9b, 0x2e, 0xe0, 0x4f, 0x10, 0x9c, 0xe9, 0x9c, 0x33, 0x97, 0x7b, 0x74, + 0xb4, 0x06, 0xd6, 0x7a, 0x90, 0xbb, 0xcc, 0x9d, 0x7d, 0xd6, 0x03, 0x7e, 0xe7, 0xbc, 0x86, 0x10, + 0xf7, 0x2a, 0x82, 0xd7, 0xef, 0x11, 0x80, 0x31, 0x95, 0xce, 0x5b, 0x5b, 0x9f, 0x0c, 0x66, 0x2d, + 0x56, 0xc7, 0xc7, 0xd3, 0x3e, 0xbb, 0x74, 0x31, 0xb4, 0x4a, 0x5a, 0xce, 0x61, 0x36, 0x0b, 0x1f, + 0x39, 0x87, 0x62, 0xfa, 0x3d, 0xc2, 0x7f, 0xe0, 0xcf, 0x7a, 0xfb, 0xbc, 0x69, 0x7f, 0xd6, 0xdb, + 0xb1, 0xf6, 0x67, 0x3d, 0x7f, 0x12, 0x26, 0xd7, 0x05, 0x71, 0x07, 0xaf, 0xd8, 0x9f, 0x75, 0x39, + 0x2d, 0xb6, 0xda, 0xa7, 0x5f, 0x23, 0x98, 0x30, 0xe7, 0x3d, 0x6b, 0x67, 0x67, 0x02, 0xad, 0x9d, + 0x5d, 0xde, 0x04, 0x49, 0xd6, 0x04, 0xc3, 0x2b, 0x78, 0xb9, 0xe7, 0x3b, 0x40, 0x6b, 0xcc, 0xe3, + 0xcd, 0x47, 0xb2, 0xf1, 0xde, 0xa7, 0xaf, 0x66, 0xd0, 0x67, 0xaf, 0x66, 0xd0, 0xbf, 0x5e, 0xcd, + 0xa0, 0x8f, 0x5e, 0xcf, 0x9c, 0xfa, 0xec, 0xf5, 0xcc, 0xa9, 0x7f, 0xbc, 0x9e, 0x39, 0xf5, 0xc1, + 0x9a, 0x31, 0x2d, 0x4b, 0x7d, 0xef, 0xd1, 0xdd, 0xa4, 0x5d, 0xe7, 0x8f, 0xb5, 0x56, 0x31, 0x3d, + 0xef, 0x8e, 0x89, 0xff, 0x9a, 0x5f, 0xfb, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x82, 0x71, 0x89, + 0x57, 0x6a, 0x20, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4242,12 +4242,10 @@ func (m *QueryFreeSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - if len(m.Space) > 0 { - i -= len(m.Space) - copy(dAtA[i:], m.Space) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Space))) + if m.Space != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Space)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 } return len(dAtA) - i, nil } @@ -4272,12 +4270,10 @@ func (m *QueryStoreCountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - if len(m.Count) > 0 { - i -= len(m.Count) - copy(dAtA[i:], m.Count) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Count))) + if m.Count != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Count)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 } return len(dAtA) - i, nil } @@ -5291,9 +5287,8 @@ func (m *QueryFreeSpaceResponse) Size() (n int) { } var l int _ = l - l = len(m.Space) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if m.Space != 0 { + n += 1 + sovQuery(uint64(m.Space)) } return n } @@ -5304,9 +5299,8 @@ func (m *QueryStoreCountResponse) Size() (n int) { } var l int _ = l - l = len(m.Count) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) + if m.Count != 0 { + n += 1 + sovQuery(uint64(m.Count)) } return n } @@ -8209,10 +8203,10 @@ func (m *QueryFreeSpaceResponse) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType != 2 { + if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Space", wireType) } - var stringLen uint64 + m.Space = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8222,24 +8216,11 @@ func (m *QueryFreeSpaceResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.Space |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Space = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -8291,10 +8272,10 @@ func (m *QueryStoreCountResponse) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType != 2 { + if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) } - var stringLen uint64 + m.Count = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -8304,24 +8285,11 @@ func (m *QueryStoreCountResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.Count |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Count = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) diff --git a/x/storage/types/tx.pb.go b/x/storage/types/tx.pb.go index d30d14323..d9df204fa 100644 --- a/x/storage/types/tx.pb.go +++ b/x/storage/types/tx.pb.go @@ -589,7 +589,7 @@ var xxx_messageInfo_MsgSetProviderKeybaseResponse proto.InternalMessageInfo type MsgSetProviderTotalSpace struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Space string `protobuf:"bytes,2,opt,name=space,proto3" json:"space,omitempty"` + Space int64 `protobuf:"varint,2,opt,name=space,proto3" json:"space,omitempty"` } func (m *MsgSetProviderTotalSpace) Reset() { *m = MsgSetProviderTotalSpace{} } @@ -632,11 +632,11 @@ func (m *MsgSetProviderTotalSpace) GetCreator() string { return "" } -func (m *MsgSetProviderTotalSpace) GetSpace() string { +func (m *MsgSetProviderTotalSpace) GetSpace() int64 { if m != nil { return m.Space } - return "" + return 0 } type MsgSetProviderTotalSpaceResponse struct { @@ -855,7 +855,7 @@ type MsgInitProvider struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Ip string `protobuf:"bytes,2,opt,name=ip,proto3" json:"ip,omitempty"` Keybase string `protobuf:"bytes,3,opt,name=keybase,proto3" json:"keybase,omitempty"` - TotalSpace string `protobuf:"bytes,4,opt,name=total_space,json=totalSpace,proto3" json:"total_space,omitempty"` + TotalSpace int64 `protobuf:"varint,4,opt,name=total_space,json=totalSpace,proto3" json:"total_space,omitempty"` } func (m *MsgInitProvider) Reset() { *m = MsgInitProvider{} } @@ -912,11 +912,11 @@ func (m *MsgInitProvider) GetKeybase() string { return "" } -func (m *MsgInitProvider) GetTotalSpace() string { +func (m *MsgInitProvider) GetTotalSpace() int64 { if m != nil { return m.TotalSpace } - return "" + return 0 } type MsgInitProviderResponse struct { @@ -1883,85 +1883,85 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/tx.proto", fileDescriptor_2194ba0b2c3d6a97) } var fileDescriptor_2194ba0b2c3d6a97 = []byte{ - // 1240 bytes of a gzipped FileDescriptorProto + // 1242 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcf, 0x6e, 0xdb, 0xc6, 0x13, 0x0e, 0x2d, 0xd9, 0x96, 0xc6, 0x92, 0x7f, 0x0e, 0x63, 0x27, 0x0c, 0x1d, 0xcb, 0x36, 0x8d, 0xfc, 0xe2, 0x26, 0x88, 0x84, 0x3a, 0x40, 0x7b, 0xe9, 0xc5, 0x6e, 0x10, 0xc0, 0x8d, 0x55, 0xb8, - 0x54, 0x82, 0xfe, 0x45, 0x85, 0x95, 0xb8, 0x96, 0x19, 0x4b, 0x5c, 0x66, 0x77, 0xe5, 0x58, 0xb9, - 0x14, 0xed, 0xb9, 0x87, 0xbe, 0x40, 0x0e, 0x3d, 0xf4, 0x5d, 0x7a, 0xcc, 0xb1, 0xc7, 0xc2, 0x7e, - 0x80, 0xbe, 0x42, 0xc1, 0xe5, 0x72, 0x45, 0xc9, 0x24, 0x25, 0x07, 0x0d, 0xda, 0x9b, 0x76, 0xf6, - 0xdb, 0x99, 0xef, 0x9b, 0x59, 0xed, 0x0c, 0x08, 0x6b, 0x6d, 0xe4, 0xb9, 0x1e, 0x6e, 0xb6, 0x8f, - 0x91, 0xeb, 0xd5, 0x18, 0x27, 0x14, 0x75, 0x70, 0x8d, 0x9f, 0x55, 0x7d, 0x4a, 0x38, 0xd1, 0x97, - 0xe3, 0xdb, 0x55, 0xb9, 0x6d, 0xfd, 0xa5, 0xc1, 0x42, 0x9d, 0x75, 0x0e, 0x09, 0xe3, 0x4f, 0xdc, - 0x2e, 0xd6, 0x0d, 0x98, 0x6f, 0x53, 0x8c, 0x38, 0xa1, 0x86, 0xb6, 0xa1, 0x6d, 0x17, 0xed, 0x68, - 0xa9, 0xdf, 0x84, 0xb9, 0x1e, 0xa6, 0x27, 0x5d, 0x6c, 0xcc, 0x6c, 0x68, 0xdb, 0x25, 0x5b, 0xae, - 0xf4, 0x55, 0x28, 0x1e, 0xb9, 0x5d, 0xdc, 0x64, 0xee, 0x6b, 0x6c, 0xe4, 0x36, 0xb4, 0xed, 0x9c, - 0x5d, 0x08, 0x0c, 0x0d, 0xf7, 0x35, 0xd6, 0xef, 0xc2, 0xa2, 0x4f, 0x09, 0x39, 0x6a, 0xba, 0x1e, - 0xc7, 0xf4, 0x14, 0x75, 0x8d, 0xbc, 0x40, 0x94, 0x85, 0x75, 0x5f, 0x1a, 0xf5, 0x35, 0x80, 0x10, - 0xc6, 0x07, 0x3e, 0x36, 0x66, 0x05, 0xa4, 0x28, 0x2c, 0xcf, 0x06, 0x3e, 0x0e, 0xb6, 0x7b, 0xe8, - 0xac, 0x29, 0x0c, 0xcc, 0x98, 0x0b, 0xb7, 0x7b, 0xe8, 0xec, 0x50, 0x18, 0x02, 0xce, 0xf8, 0xcc, - 0x77, 0x29, 0x66, 0xc6, 0xbc, 0xd8, 0x8b, 0x96, 0xba, 0x0e, 0x79, 0x8f, 0x70, 0x6c, 0x14, 0x84, - 0x14, 0xf1, 0xdb, 0xfa, 0x1a, 0x6e, 0xc4, 0x04, 0xdb, 0x98, 0xf9, 0xc4, 0x63, 0x58, 0xdf, 0x84, - 0x92, 0x4f, 0xc9, 0xa9, 0xeb, 0x60, 0xda, 0x74, 0x7d, 0x66, 0x68, 0x1b, 0xb9, 0xed, 0xa2, 0xbd, - 0x10, 0xd9, 0xf6, 0x7d, 0xa6, 0xaf, 0xc3, 0x02, 0xe3, 0x88, 0xf2, 0x66, 0xab, 0x4b, 0xda, 0x27, - 0x22, 0x0d, 0x39, 0x1b, 0x84, 0x69, 0x2f, 0xb0, 0x58, 0x6f, 0x34, 0x28, 0x49, 0xdf, 0x82, 0x5a, - 0x46, 0x36, 0x75, 0xc8, 0xbb, 0x1c, 0xf7, 0x64, 0x2e, 0xc5, 0xef, 0x20, 0x93, 0xc7, 0x88, 0x1d, - 0x37, 0xbb, 0x2e, 0xe3, 0x22, 0x93, 0x25, 0xbb, 0x10, 0x18, 0x0e, 0x5c, 0xc6, 0x63, 0xe9, 0xcf, - 0x8f, 0xa4, 0x7f, 0x19, 0x66, 0xc9, 0x2b, 0x0f, 0x53, 0x91, 0xb5, 0xa2, 0x1d, 0x2e, 0x02, 0xab, - 0xe0, 0x25, 0x93, 0x15, 0x2e, 0xac, 0xe7, 0xb0, 0x1c, 0xa7, 0xa7, 0xb4, 0x1b, 0x30, 0xcf, 0xfa, - 0xed, 0x36, 0x66, 0x4c, 0xd0, 0x2c, 0xd8, 0xd1, 0x52, 0xdf, 0x82, 0x32, 0xa6, 0x94, 0xd0, 0x66, - 0x0f, 0x33, 0x86, 0x3a, 0x61, 0xed, 0x8b, 0x76, 0x49, 0x18, 0xeb, 0xa1, 0xcd, 0xfa, 0x12, 0xca, - 0x75, 0xd6, 0x79, 0x8c, 0xbb, 0x98, 0xe3, 0x77, 0xbc, 0x44, 0x8a, 0x6f, 0x2e, 0xce, 0xf7, 0x16, - 0xac, 0x8c, 0x38, 0x8e, 0x08, 0x5b, 0x9f, 0xc0, 0x52, 0x9d, 0x75, 0x1a, 0x38, 0xd0, 0x11, 0x96, - 0xe7, 0x30, 0x23, 0xe8, 0x22, 0xcc, 0xb8, 0xbe, 0x64, 0x3e, 0xe3, 0xfa, 0x96, 0x09, 0xc6, 0xf8, - 0x69, 0xe5, 0xf9, 0xa9, 0x08, 0x19, 0xdb, 0x7b, 0x8a, 0x07, 0x2d, 0xc4, 0xb2, 0x34, 0x19, 0x30, - 0x7f, 0x12, 0x82, 0x64, 0x8c, 0x68, 0x69, 0xad, 0xc3, 0x5a, 0xa2, 0x33, 0x15, 0xed, 0xb3, 0x71, - 0x26, 0xcf, 0x08, 0x47, 0xdd, 0x86, 0x8f, 0xda, 0x59, 0x01, 0x83, 0x64, 0x05, 0x10, 0x19, 0x2e, - 0x5c, 0x58, 0x16, 0x6c, 0xa4, 0xf9, 0x52, 0xf1, 0x3e, 0x17, 0x95, 0xda, 0x75, 0x9c, 0x4f, 0xbb, - 0xc8, 0xed, 0x61, 0x9a, 0x11, 0x64, 0x0b, 0xca, 0xed, 0x00, 0xd4, 0x44, 0x8e, 0x43, 0x83, 0x9b, - 0x21, 0x2b, 0x2f, 0x8c, 0xbb, 0xa1, 0x4d, 0x16, 0x68, 0xe8, 0x4f, 0x05, 0xfa, 0x42, 0x14, 0xc8, - 0xc6, 0x3d, 0x72, 0x8a, 0xff, 0xa1, 0x58, 0x61, 0xd5, 0x46, 0x5c, 0xaa, 0x70, 0xa7, 0xf0, 0xbf, - 0x3a, 0xeb, 0xec, 0x7b, 0xae, 0x12, 0x3f, 0xfd, 0x75, 0x88, 0xd7, 0x2f, 0x37, 0x52, 0xbf, 0xe0, - 0x0f, 0xcf, 0x83, 0x24, 0x36, 0xc3, 0x74, 0xe7, 0xc5, 0x2e, 0x70, 0x95, 0x57, 0xeb, 0x36, 0xdc, - 0x1a, 0x8b, 0xab, 0x28, 0xd5, 0xc4, 0x33, 0xd3, 0x38, 0xee, 0x73, 0x87, 0xbc, 0xf2, 0x26, 0xd3, - 0xb2, 0xd6, 0x60, 0x35, 0xe1, 0x80, 0xf2, 0xf7, 0xab, 0x26, 0x6a, 0xb7, 0xd7, 0x1f, 0x34, 0xc2, - 0xa7, 0x3b, 0x43, 0xe1, 0x3a, 0x2c, 0x1c, 0x11, 0x3a, 0x96, 0x4d, 0x38, 0x22, 0x54, 0xe6, 0x52, - 0x37, 0xa1, 0xe0, 0xf4, 0x29, 0xe2, 0x2e, 0xf1, 0xa4, 0x66, 0xb5, 0x0e, 0x6e, 0x57, 0x6b, 0xc0, - 0x31, 0x93, 0x72, 0xc3, 0x45, 0x50, 0x22, 0x1f, 0x0d, 0x7a, 0xd8, 0xe3, 0x4d, 0x07, 0x7b, 0xa4, - 0x27, 0x9f, 0x9b, 0x92, 0x34, 0x3e, 0x0e, 0x6c, 0xf2, 0x3a, 0x0c, 0x29, 0x2a, 0xf2, 0xdf, 0x09, - 0xee, 0xa2, 0x6a, 0x0d, 0x4e, 0xd1, 0x20, 0x83, 0xfb, 0x12, 0xe4, 0xda, 0xae, 0x23, 0x39, 0x07, - 0x3f, 0xc7, 0xd5, 0xe4, 0xc6, 0xd5, 0xc8, 0xb0, 0x43, 0xef, 0x2a, 0xec, 0x6f, 0x1a, 0x5c, 0xaf, - 0xb3, 0xce, 0x73, 0xbf, 0x43, 0x91, 0x83, 0xff, 0xbb, 0x79, 0x5b, 0x85, 0xdb, 0x97, 0x68, 0x2a, - 0x11, 0x03, 0xb1, 0x69, 0xe3, 0x97, 0x7d, 0xcc, 0xf8, 0x2e, 0xe7, 0x98, 0x71, 0x11, 0xf0, 0x09, - 0xa1, 0xbd, 0x77, 0x7b, 0x69, 0xc3, 0x7e, 0x91, 0x4b, 0xec, 0x17, 0xf9, 0xf8, 0xfb, 0xfb, 0x12, - 0x36, 0x53, 0x43, 0xab, 0xe6, 0x71, 0x07, 0x8a, 0x51, 0x93, 0x8c, 0xba, 0xe6, 0xd0, 0x10, 0x6f, - 0x2d, 0x33, 0xa3, 0xad, 0x65, 0x19, 0x66, 0x45, 0x17, 0x89, 0x88, 0x88, 0x85, 0xf5, 0xa3, 0x06, - 0xc5, 0xe0, 0x49, 0x11, 0xc1, 0xb2, 0xe5, 0x05, 0x41, 0x30, 0x95, 0x55, 0x92, 0xab, 0x98, 0xec, - 0x5c, 0xb2, 0xec, 0x7c, 0xa2, 0xec, 0xd9, 0xb8, 0xec, 0x1b, 0xe2, 0xd6, 0x84, 0x14, 0x54, 0x19, - 0x7e, 0xd6, 0x44, 0xf3, 0x94, 0xc9, 0xb0, 0xb1, 0x4f, 0x28, 0x9f, 0x5c, 0x82, 0xf7, 0xc6, 0xb1, - 0x0b, 0x77, 0x92, 0xd8, 0xbc, 0xdf, 0xaa, 0x84, 0x71, 0xfe, 0xd5, 0xaa, 0x84, 0x14, 0x22, 0x99, - 0x3b, 0x6f, 0xca, 0x90, 0xab, 0xb3, 0x8e, 0xfe, 0x15, 0x14, 0xd4, 0x08, 0xbb, 0x59, 0x4d, 0x9a, - 0x74, 0xab, 0xb1, 0xa1, 0xcf, 0xfc, 0x60, 0x22, 0x44, 0x25, 0xf2, 0x5b, 0x28, 0x0e, 0xe7, 0x39, - 0x2b, 0xf3, 0x9c, 0xc0, 0x98, 0xf7, 0x27, 0x63, 0x94, 0xf3, 0xef, 0x01, 0x62, 0x63, 0xd3, 0x56, - 0xea, 0xc9, 0x21, 0xc8, 0x7c, 0x30, 0x05, 0x48, 0xf9, 0xef, 0x40, 0x79, 0x74, 0x48, 0xfa, 0x7f, - 0xea, 0xe9, 0x11, 0x9c, 0x59, 0x9d, 0x0e, 0xa7, 0x02, 0x9d, 0x82, 0x9e, 0x30, 0x33, 0x3d, 0x98, - 0xc6, 0x8b, 0x04, 0x9b, 0x8f, 0xae, 0x00, 0x56, 0x71, 0x7f, 0x80, 0x95, 0xe4, 0xe9, 0x69, 0x2a, - 0x01, 0x43, 0xbc, 0xf9, 0xd1, 0xd5, 0xf0, 0x8a, 0x80, 0x03, 0xa5, 0x91, 0xb1, 0xe3, 0x6e, 0xaa, - 0x9f, 0x38, 0xcc, 0x7c, 0x38, 0x15, 0x4c, 0x45, 0xf1, 0x61, 0xe9, 0xd2, 0x24, 0x91, 0x7e, 0x87, - 0xc7, 0xa1, 0xe6, 0x87, 0x53, 0x43, 0xe3, 0x37, 0x33, 0x36, 0x6a, 0xa4, 0xdf, 0xcc, 0x21, 0x28, - 0xe3, 0x66, 0x5e, 0x9e, 0x08, 0xf4, 0x17, 0xb0, 0x38, 0xd6, 0x96, 0xef, 0xa5, 0x1e, 0x1f, 0x05, - 0x9a, 0xb5, 0x29, 0x81, 0x2a, 0xd6, 0x11, 0xe8, 0xbb, 0x8e, 0x13, 0x49, 0x8c, 0xc6, 0xd1, 0x74, - 0x4d, 0xc3, 0x79, 0x36, 0x43, 0xd3, 0xe5, 0xa1, 0x57, 0x27, 0xb0, 0x12, 0x8e, 0xa7, 0xe3, 0xa1, - 0xd2, 0xff, 0x75, 0x23, 0xe3, 0x6c, 0xc6, 0xbf, 0x2e, 0x71, 0xec, 0xd5, 0x7f, 0xd2, 0xe0, 0x66, - 0xca, 0x60, 0x50, 0xcb, 0x70, 0x95, 0x74, 0xc0, 0xfc, 0xf8, 0x8a, 0x07, 0x14, 0x09, 0x1b, 0xe6, - 0x64, 0xb7, 0x5e, 0x4f, 0x4f, 0x96, 0x00, 0x98, 0xf7, 0x26, 0x00, 0x94, 0x4f, 0x06, 0xd7, 0x2f, - 0x37, 0xda, 0xfb, 0x93, 0x18, 0x0e, 0xb1, 0xe6, 0xce, 0xf4, 0xd8, 0xb8, 0x10, 0xd9, 0xe0, 0xd6, - 0x33, 0x4e, 0x07, 0x80, 0x0c, 0x21, 0xa3, 0xfd, 0x69, 0xef, 0xe0, 0xf7, 0xf3, 0x8a, 0xf6, 0xf6, - 0xbc, 0xa2, 0xfd, 0x79, 0x5e, 0xd1, 0x7e, 0xb9, 0xa8, 0x5c, 0x7b, 0x7b, 0x51, 0xb9, 0xf6, 0xc7, - 0x45, 0xe5, 0xda, 0x37, 0x3b, 0x1d, 0x97, 0x1f, 0xf7, 0x5b, 0xd5, 0x36, 0xe9, 0xd5, 0x5e, 0xa0, - 0xf6, 0x09, 0xea, 0x1e, 0xa0, 0x16, 0xab, 0x85, 0x7e, 0x1f, 0x86, 0xdf, 0x70, 0xce, 0x86, 0x5f, - 0x71, 0x06, 0x3e, 0x66, 0xad, 0x39, 0xf1, 0x25, 0xe7, 0xd1, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, - 0xf8, 0xd1, 0xc2, 0xf3, 0xea, 0x11, 0x00, 0x00, + 0x54, 0x82, 0xfe, 0x45, 0x05, 0x4a, 0x5c, 0xcb, 0x8c, 0x25, 0x2e, 0xb3, 0xbb, 0x72, 0xac, 0x5c, + 0x8a, 0xf6, 0xdc, 0x43, 0x5f, 0x20, 0x87, 0x1e, 0xfa, 0x2e, 0x3d, 0xe6, 0xd8, 0x63, 0x61, 0x3f, + 0x40, 0x5f, 0xa1, 0xe0, 0xee, 0x72, 0x45, 0xc9, 0x24, 0x25, 0x07, 0x0d, 0xda, 0x9b, 0x76, 0xf6, + 0xdb, 0x99, 0xef, 0x9b, 0x59, 0xed, 0x0c, 0x08, 0x6b, 0x6d, 0xc7, 0xf7, 0x7c, 0xd4, 0x6c, 0x1f, + 0x3b, 0x9e, 0x5f, 0xa3, 0x0c, 0x13, 0xa7, 0x83, 0x6a, 0xec, 0xac, 0x1a, 0x10, 0xcc, 0xb0, 0xbe, + 0x1c, 0xdf, 0xae, 0xca, 0x6d, 0xeb, 0x2f, 0x0d, 0x16, 0xea, 0xb4, 0x73, 0x88, 0x29, 0x7b, 0xe2, + 0x75, 0x91, 0x6e, 0xc0, 0x7c, 0x9b, 0x20, 0x87, 0x61, 0x62, 0x68, 0x1b, 0xda, 0x76, 0xd1, 0x8e, + 0x96, 0xfa, 0x4d, 0x98, 0xeb, 0x21, 0x72, 0xd2, 0x45, 0xc6, 0xcc, 0x86, 0xb6, 0x5d, 0xb2, 0xe5, + 0x4a, 0x5f, 0x85, 0xe2, 0x91, 0xd7, 0x45, 0x4d, 0xea, 0xbd, 0x46, 0x46, 0x6e, 0x43, 0xdb, 0xce, + 0xd9, 0x85, 0xd0, 0xd0, 0xf0, 0x5e, 0x23, 0xfd, 0x2e, 0x2c, 0x06, 0x04, 0xe3, 0xa3, 0xa6, 0xe7, + 0x33, 0x44, 0x4e, 0x9d, 0xae, 0x91, 0xe7, 0x88, 0x32, 0xb7, 0xee, 0x4b, 0xa3, 0xbe, 0x06, 0x20, + 0x60, 0x6c, 0x10, 0x20, 0x63, 0x96, 0x43, 0x8a, 0xdc, 0xf2, 0x6c, 0x10, 0xa0, 0x70, 0xbb, 0xe7, + 0x9c, 0x35, 0xb9, 0x81, 0x1a, 0x73, 0x62, 0xbb, 0xe7, 0x9c, 0x1d, 0x72, 0x43, 0xc8, 0x19, 0x9d, + 0x05, 0x1e, 0x41, 0xd4, 0x98, 0xe7, 0x7b, 0xd1, 0x52, 0xd7, 0x21, 0xef, 0x63, 0x86, 0x8c, 0x02, + 0x97, 0xc2, 0x7f, 0x5b, 0x5f, 0xc3, 0x8d, 0x98, 0x60, 0x1b, 0xd1, 0x00, 0xfb, 0x14, 0xe9, 0x9b, + 0x50, 0x0a, 0x08, 0x3e, 0xf5, 0x5c, 0x44, 0x9a, 0x5e, 0x40, 0x0d, 0x6d, 0x23, 0xb7, 0x5d, 0xb4, + 0x17, 0x22, 0xdb, 0x7e, 0x40, 0xf5, 0x75, 0x58, 0xa0, 0xcc, 0x21, 0xac, 0xd9, 0xea, 0xe2, 0xf6, + 0x09, 0x4f, 0x43, 0xce, 0x06, 0x6e, 0xda, 0x0b, 0x2d, 0xd6, 0x1b, 0x0d, 0x4a, 0xd2, 0x37, 0xa7, + 0x96, 0x91, 0x4d, 0x1d, 0xf2, 0x1e, 0x43, 0x3d, 0x99, 0x4b, 0xfe, 0x3b, 0xcc, 0xe4, 0xb1, 0x43, + 0x8f, 0x9b, 0x5d, 0x8f, 0x32, 0x9e, 0xc9, 0x92, 0x5d, 0x08, 0x0d, 0x07, 0x1e, 0x65, 0xb1, 0xf4, + 0xe7, 0x47, 0xd2, 0xbf, 0x0c, 0xb3, 0xf8, 0x95, 0x8f, 0x08, 0xcf, 0x5a, 0xd1, 0x16, 0x8b, 0xd0, + 0xca, 0x79, 0xc9, 0x64, 0x89, 0x85, 0xf5, 0x1c, 0x96, 0xe3, 0xf4, 0x94, 0x76, 0x03, 0xe6, 0x69, + 0xbf, 0xdd, 0x46, 0x94, 0x72, 0x9a, 0x05, 0x3b, 0x5a, 0xea, 0x5b, 0x50, 0x46, 0x84, 0x60, 0xd2, + 0xec, 0x21, 0x4a, 0x9d, 0x8e, 0xa8, 0x7d, 0xd1, 0x2e, 0x71, 0x63, 0x5d, 0xd8, 0xac, 0x2f, 0xa1, + 0x5c, 0xa7, 0x9d, 0xc7, 0xa8, 0x8b, 0x18, 0x7a, 0xc7, 0x4b, 0xa4, 0xf8, 0xe6, 0xe2, 0x7c, 0x6f, + 0xc1, 0xca, 0x88, 0xe3, 0x88, 0xb0, 0xf5, 0x09, 0x2c, 0xd5, 0x69, 0xa7, 0x81, 0x42, 0x1d, 0xa2, + 0x3c, 0x87, 0x19, 0x41, 0x17, 0x61, 0xc6, 0x0b, 0x24, 0xf3, 0x19, 0x2f, 0xb0, 0x4c, 0x30, 0xc6, + 0x4f, 0x2b, 0xcf, 0x4f, 0x79, 0xc8, 0xd8, 0xde, 0x53, 0x34, 0x68, 0x39, 0x34, 0x4b, 0x93, 0x01, + 0xf3, 0x27, 0x02, 0x24, 0x63, 0x44, 0x4b, 0x6b, 0x1d, 0xd6, 0x12, 0x9d, 0xa9, 0x68, 0x9f, 0x8d, + 0x33, 0x79, 0x86, 0x99, 0xd3, 0x6d, 0x04, 0x4e, 0x3b, 0x2b, 0x60, 0x98, 0xac, 0x10, 0x22, 0x6f, + 0xa0, 0x58, 0x58, 0x16, 0x6c, 0xa4, 0xf9, 0x52, 0xf1, 0x3e, 0xe7, 0x95, 0xda, 0x75, 0xdd, 0x4f, + 0xbb, 0x8e, 0xd7, 0x43, 0x24, 0x23, 0xc8, 0x16, 0x94, 0xdb, 0x21, 0xa8, 0xe9, 0xb8, 0x2e, 0x09, + 0x6f, 0x86, 0xac, 0x3c, 0x37, 0xee, 0x0a, 0x9b, 0x2c, 0xd0, 0xd0, 0x9f, 0x0a, 0xf4, 0x05, 0x2f, + 0x90, 0x8d, 0x7a, 0xf8, 0x14, 0xfd, 0x43, 0xb1, 0x44, 0xd5, 0x46, 0x5c, 0xaa, 0x70, 0xa7, 0xf0, + 0xbf, 0x3a, 0xed, 0xec, 0xfb, 0x9e, 0x12, 0x3f, 0xfd, 0x75, 0x88, 0xd7, 0x2f, 0x37, 0x52, 0xbf, + 0xf0, 0x0f, 0xcf, 0xc2, 0x24, 0x36, 0x45, 0xba, 0xc5, 0xd3, 0x05, 0x4c, 0xe5, 0xd5, 0xba, 0x0d, + 0xb7, 0xc6, 0xe2, 0x2a, 0x4a, 0x35, 0xfe, 0xcc, 0x34, 0x8e, 0xfb, 0xcc, 0xc5, 0xaf, 0xfc, 0xc9, + 0xb4, 0xac, 0x35, 0x58, 0x4d, 0x38, 0xa0, 0xfc, 0xfd, 0xaa, 0xf1, 0xda, 0xed, 0xf5, 0x07, 0x0d, + 0xf1, 0x74, 0x67, 0x28, 0x5c, 0x87, 0x85, 0x23, 0x4c, 0xc6, 0xb2, 0x09, 0x47, 0x98, 0xc8, 0x5c, + 0xea, 0x26, 0x14, 0xdc, 0x3e, 0x71, 0x98, 0x87, 0x7d, 0xa9, 0x59, 0xad, 0xc3, 0xdb, 0xd5, 0x1a, + 0x30, 0x44, 0xb9, 0xdc, 0xa2, 0x2d, 0x16, 0x61, 0x89, 0x02, 0x67, 0xd0, 0x43, 0x3e, 0x6b, 0xba, + 0xc8, 0xc7, 0x3d, 0xf9, 0xdc, 0x94, 0xa4, 0xf1, 0x71, 0x68, 0x93, 0xd7, 0x61, 0x48, 0x51, 0x91, + 0xff, 0x8e, 0x73, 0xe7, 0x55, 0x6b, 0x30, 0xe2, 0x0c, 0x32, 0xb8, 0x2f, 0x41, 0xae, 0xed, 0xb9, + 0x92, 0x73, 0xf8, 0x73, 0x5c, 0x4d, 0x6e, 0x5c, 0x8d, 0x0c, 0x3b, 0xf4, 0xae, 0xc2, 0xfe, 0xa6, + 0xc1, 0xf5, 0x3a, 0xed, 0x3c, 0x0f, 0x3a, 0xc4, 0x71, 0xd1, 0x7f, 0x37, 0x6f, 0xab, 0x70, 0xfb, + 0x12, 0x4d, 0x25, 0x62, 0xc0, 0x37, 0x6d, 0xf4, 0xb2, 0x8f, 0x28, 0xdb, 0x65, 0x0c, 0x51, 0xc6, + 0x03, 0x3e, 0xc1, 0xa4, 0xf7, 0x6e, 0x2f, 0xad, 0xe8, 0x17, 0xb9, 0xc4, 0x7e, 0x91, 0x8f, 0xbf, + 0xbf, 0x2f, 0x61, 0x33, 0x35, 0xb4, 0x6a, 0x1e, 0x77, 0xa0, 0x18, 0x35, 0xc9, 0xa8, 0x6b, 0x0e, + 0x0d, 0xf1, 0xd6, 0x32, 0x33, 0xda, 0x5a, 0x96, 0x61, 0x96, 0x77, 0x91, 0x88, 0x08, 0x5f, 0x58, + 0x3f, 0x6a, 0x50, 0x0c, 0x9f, 0x14, 0x1e, 0x2c, 0x5b, 0x5e, 0x18, 0x04, 0x11, 0x59, 0x25, 0xb9, + 0x8a, 0xc9, 0xce, 0x25, 0xcb, 0xce, 0x27, 0xca, 0x9e, 0x8d, 0xcb, 0xbe, 0xc1, 0x6f, 0x8d, 0xa0, + 0xa0, 0xca, 0xf0, 0xb3, 0xc6, 0x9b, 0xa7, 0x4c, 0x86, 0x8d, 0x02, 0x4c, 0xd8, 0xe4, 0x12, 0xbc, + 0x37, 0x8e, 0x5d, 0xb8, 0x93, 0xc4, 0xe6, 0xfd, 0x56, 0x45, 0xc4, 0xf9, 0x57, 0xab, 0x22, 0x28, + 0x44, 0x32, 0x77, 0xde, 0x94, 0x21, 0x57, 0xa7, 0x1d, 0xfd, 0x2b, 0x28, 0xa8, 0x11, 0x76, 0xb3, + 0x9a, 0x34, 0xe9, 0x56, 0x63, 0x43, 0x9f, 0xf9, 0xc1, 0x44, 0x88, 0x4a, 0xe4, 0xb7, 0x50, 0x1c, + 0xce, 0x73, 0x56, 0xe6, 0x39, 0x8e, 0x31, 0xef, 0x4f, 0xc6, 0x28, 0xe7, 0xdf, 0x03, 0xc4, 0xc6, + 0xa6, 0xad, 0xd4, 0x93, 0x43, 0x90, 0xf9, 0x60, 0x0a, 0x90, 0xf2, 0xdf, 0x81, 0xf2, 0xe8, 0x90, + 0xf4, 0xff, 0xd4, 0xd3, 0x23, 0x38, 0xb3, 0x3a, 0x1d, 0x4e, 0x05, 0x3a, 0x05, 0x3d, 0x61, 0x66, + 0x7a, 0x30, 0x8d, 0x17, 0x09, 0x36, 0x1f, 0x5d, 0x01, 0xac, 0xe2, 0xfe, 0x00, 0x2b, 0xc9, 0xd3, + 0xd3, 0x54, 0x02, 0x86, 0x78, 0xf3, 0xa3, 0xab, 0xe1, 0x15, 0x01, 0x17, 0x4a, 0x23, 0x63, 0xc7, + 0xdd, 0x54, 0x3f, 0x71, 0x98, 0xf9, 0x70, 0x2a, 0x98, 0x8a, 0x12, 0xc0, 0xd2, 0xa5, 0x49, 0x22, + 0xfd, 0x0e, 0x8f, 0x43, 0xcd, 0x0f, 0xa7, 0x86, 0xc6, 0x6f, 0x66, 0x6c, 0xd4, 0x48, 0xbf, 0x99, + 0x43, 0x50, 0xc6, 0xcd, 0xbc, 0x3c, 0x11, 0xe8, 0x2f, 0x60, 0x71, 0xac, 0x2d, 0xdf, 0x4b, 0x3d, + 0x3e, 0x0a, 0x34, 0x6b, 0x53, 0x02, 0x55, 0xac, 0x23, 0xd0, 0x77, 0x5d, 0x37, 0x92, 0x18, 0x8d, + 0xa3, 0xe9, 0x9a, 0x86, 0xf3, 0x6c, 0x86, 0xa6, 0xcb, 0x43, 0xaf, 0x8e, 0x61, 0x45, 0x8c, 0xa7, + 0xe3, 0xa1, 0xd2, 0xff, 0x75, 0x23, 0xe3, 0x6c, 0xc6, 0xbf, 0x2e, 0x71, 0xec, 0xd5, 0x7f, 0xd2, + 0xe0, 0x66, 0xca, 0x60, 0x50, 0xcb, 0x70, 0x95, 0x74, 0xc0, 0xfc, 0xf8, 0x8a, 0x07, 0x14, 0x09, + 0x1b, 0xe6, 0x64, 0xb7, 0x5e, 0x4f, 0x4f, 0x16, 0x07, 0x98, 0xf7, 0x26, 0x00, 0x94, 0x4f, 0x0a, + 0xd7, 0x2f, 0x37, 0xda, 0xfb, 0x93, 0x18, 0x0e, 0xb1, 0xe6, 0xce, 0xf4, 0xd8, 0xb8, 0x10, 0xd9, + 0xe0, 0xd6, 0x33, 0x4e, 0x87, 0x80, 0x0c, 0x21, 0xa3, 0xfd, 0x69, 0xef, 0xe0, 0xf7, 0xf3, 0x8a, + 0xf6, 0xf6, 0xbc, 0xa2, 0xfd, 0x79, 0x5e, 0xd1, 0x7e, 0xb9, 0xa8, 0x5c, 0x7b, 0x7b, 0x51, 0xb9, + 0xf6, 0xc7, 0x45, 0xe5, 0xda, 0x37, 0x3b, 0x1d, 0x8f, 0x1d, 0xf7, 0x5b, 0xd5, 0x36, 0xee, 0xd5, + 0x5e, 0x38, 0xed, 0x13, 0xa7, 0x7b, 0xe0, 0xb4, 0x68, 0x4d, 0xf8, 0x7d, 0x28, 0xbe, 0xe1, 0x9c, + 0x0d, 0xbf, 0xe2, 0x0c, 0x02, 0x44, 0x5b, 0x73, 0xfc, 0x4b, 0xce, 0xa3, 0xbf, 0x03, 0x00, 0x00, + 0xff, 0xff, 0xdc, 0xba, 0x8b, 0x54, 0xea, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2998,12 +2998,10 @@ func (m *MsgSetProviderTotalSpace) MarshalToSizedBuffer(dAtA []byte) (int, error _ = i var l int _ = l - if len(m.Space) > 0 { - i -= len(m.Space) - copy(dAtA[i:], m.Space) - i = encodeVarintTx(dAtA, i, uint64(len(m.Space))) + if m.Space != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Space)) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x10 } if len(m.Creator) > 0 { i -= len(m.Creator) @@ -3178,12 +3176,10 @@ func (m *MsgInitProvider) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.TotalSpace) > 0 { - i -= len(m.TotalSpace) - copy(dAtA[i:], m.TotalSpace) - i = encodeVarintTx(dAtA, i, uint64(len(m.TotalSpace))) + if m.TotalSpace != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.TotalSpace)) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x20 } if len(m.Keybase) > 0 { i -= len(m.Keybase) @@ -4079,9 +4075,8 @@ func (m *MsgSetProviderTotalSpace) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Space) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if m.Space != 0 { + n += 1 + sovTx(uint64(m.Space)) } return n } @@ -4165,9 +4160,8 @@ func (m *MsgInitProvider) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.TotalSpace) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) + if m.TotalSpace != 0 { + n += 1 + sovTx(uint64(m.TotalSpace)) } return n } @@ -5741,10 +5735,10 @@ func (m *MsgSetProviderTotalSpace) Unmarshal(dAtA []byte) error { m.Creator = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 2 { + if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Space", wireType) } - var stringLen uint64 + m.Space = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -5754,24 +5748,11 @@ func (m *MsgSetProviderTotalSpace) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.Space |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Space = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -6297,10 +6278,10 @@ func (m *MsgInitProvider) Unmarshal(dAtA []byte) error { m.Keybase = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 4: - if wireType != 2 { + if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TotalSpace", wireType) } - var stringLen uint64 + m.TotalSpace = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -6310,24 +6291,11 @@ func (m *MsgInitProvider) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.TotalSpace |= int64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TotalSpace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) From c25f033e02a05d9d60889cc42433a3c8c0d76a11 Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 9 Nov 2023 10:54:41 -0500 Subject: [PATCH 064/256] fix tests --- x/storage/keeper/providers_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x/storage/keeper/providers_test.go b/x/storage/keeper/providers_test.go index 2ca96c0ba..3ec994b6b 100644 --- a/x/storage/keeper/providers_test.go +++ b/x/storage/keeper/providers_test.go @@ -1,6 +1,7 @@ package keeper_test import ( + "fmt" sdk "github.com/cosmos/cosmos-sdk/types" testutil "github.com/jackalLabs/canine-chain/v3/testutil" "github.com/jackalLabs/canine-chain/v3/x/storage/types" @@ -75,7 +76,7 @@ func (suite *KeeperTestSuite) TestInitProviders() { suite.Require().NoError(err) suite.Require().Equal(res.Provider.Address, user) suite.Require().Equal(res.Provider.Ip, initMsg.Ip) - suite.Require().Equal(res.Provider.Totalspace, initMsg.TotalSpace) + suite.Require().Equal(res.Provider.Totalspace, fmt.Sprintf("%d", initMsg.TotalSpace)) suite.Require().Equal(res.Provider.BurnedContracts, "0") suite.Require().Equal(res.Provider.Creator, initMsg.Creator) From 8c0850adcbee954531c9729fdab0d3ec216e771f Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 9 Nov 2023 15:34:59 -0500 Subject: [PATCH 065/256] fumpt --- x/storage/keeper/providers_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/x/storage/keeper/providers_test.go b/x/storage/keeper/providers_test.go index 3ec994b6b..6cb052cec 100644 --- a/x/storage/keeper/providers_test.go +++ b/x/storage/keeper/providers_test.go @@ -2,6 +2,7 @@ package keeper_test import ( "fmt" + sdk "github.com/cosmos/cosmos-sdk/types" testutil "github.com/jackalLabs/canine-chain/v3/testutil" "github.com/jackalLabs/canine-chain/v3/x/storage/types" From 8f211f3441f95321f849b6c827b18ef5223fcd78 Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 10 Nov 2023 10:20:21 -0500 Subject: [PATCH 066/256] fixing some comments --- proto/canine_chain/storage/query.proto | 10 ++++------ x/storage/types/query.pb.go | 16 ++++++++-------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index 433f75f2e..b9a294370 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -9,8 +9,6 @@ import "canine_chain/storage/active_deals.proto"; import "canine_chain/storage/providers.proto"; import "canine_chain/storage/payment_info.proto"; -// this line is used by starport scaffolding # 1 - option go_package = "github.com/jackalLabs/canine-chain/x/storage/types"; // Query defines the gRPC querier service. @@ -33,14 +31,14 @@ service Query { "/jackal/canine-chain/storage/files"; } - // Queries a list of File items. + // Queries a list of open files. rpc OpenFiles(QueryOpenFiles) returns (QueryAllFilesResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/open_files/{provider_address}"; } - // Queries a list of File items. + // Queries a list of Proofs. rpc Proof(QueryProof) returns (QueryProofResponse) { option (google.api.http).get = @@ -89,13 +87,13 @@ service Query { "/jackal/canine-chain/storage/free_space/{address}"; } - // Queries a list of FreeSpace items. + // Queries how many files a provider is storing. rpc StoreCount(QueryStoreCount) returns (QueryStoreCountResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/storing/{address}"; } - // Queries a list of FindFile items. + // Queries where a file is located. rpc FindFile(QueryFindFile) returns (QueryFindFileResponse) { option (google.api.http).get = "/jackal/canine-chain/storage/find_file/{merkle}"; diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index 94f047f8e..c6a26a5cf 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -2391,9 +2391,9 @@ type QueryClient interface { File(ctx context.Context, in *QueryFile, opts ...grpc.CallOption) (*QueryFileResponse, error) // Queries a list of File items. AllFiles(ctx context.Context, in *QueryAllFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) - // Queries a list of File items. + // Queries a list of open files. OpenFiles(ctx context.Context, in *QueryOpenFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) - // Queries a list of File items. + // Queries a list of Proofs. Proof(ctx context.Context, in *QueryProof, opts ...grpc.CallOption) (*QueryProofResponse, error) // Queries a Providers by index. Provider(ctx context.Context, in *QueryProvider, opts ...grpc.CallOption) (*QueryProviderResponse, error) @@ -2409,9 +2409,9 @@ type QueryClient interface { AllReports(ctx context.Context, in *QueryAllReports, opts ...grpc.CallOption) (*QueryAllReportsResponse, error) // Queries a list of FreeSpace items. FreeSpace(ctx context.Context, in *QueryFreeSpace, opts ...grpc.CallOption) (*QueryFreeSpaceResponse, error) - // Queries a list of FreeSpace items. + // Queries how many files a provider is storing. StoreCount(ctx context.Context, in *QueryStoreCount, opts ...grpc.CallOption) (*QueryStoreCountResponse, error) - // Queries a list of FindFile items. + // Queries where a file is located. FindFile(ctx context.Context, in *QueryFindFile, opts ...grpc.CallOption) (*QueryFindFileResponse, error) // Queries a list of GetClientFreeSpace items. GetClientFreeSpace(ctx context.Context, in *QueryClientFreeSpace, opts ...grpc.CallOption) (*QueryClientFreeSpaceResponse, error) @@ -2645,9 +2645,9 @@ type QueryServer interface { File(context.Context, *QueryFile) (*QueryFileResponse, error) // Queries a list of File items. AllFiles(context.Context, *QueryAllFiles) (*QueryAllFilesResponse, error) - // Queries a list of File items. + // Queries a list of open files. OpenFiles(context.Context, *QueryOpenFiles) (*QueryAllFilesResponse, error) - // Queries a list of File items. + // Queries a list of Proofs. Proof(context.Context, *QueryProof) (*QueryProofResponse, error) // Queries a Providers by index. Provider(context.Context, *QueryProvider) (*QueryProviderResponse, error) @@ -2663,9 +2663,9 @@ type QueryServer interface { AllReports(context.Context, *QueryAllReports) (*QueryAllReportsResponse, error) // Queries a list of FreeSpace items. FreeSpace(context.Context, *QueryFreeSpace) (*QueryFreeSpaceResponse, error) - // Queries a list of FreeSpace items. + // Queries how many files a provider is storing. StoreCount(context.Context, *QueryStoreCount) (*QueryStoreCountResponse, error) - // Queries a list of FindFile items. + // Queries where a file is located. FindFile(context.Context, *QueryFindFile) (*QueryFindFileResponse, error) // Queries a list of GetClientFreeSpace items. GetClientFreeSpace(context.Context, *QueryClientFreeSpace) (*QueryClientFreeSpaceResponse, error) From 1fd0bb86bf9dd6e3ffdf173d72e64951db683acb Mon Sep 17 00:00:00 2001 From: marston Date: Fri, 10 Nov 2023 13:49:02 -0500 Subject: [PATCH 067/256] fixing make root name --- proto/canine_chain/filetree/tx.proto | 6 +- x/filetree/client/cli/tx_make_root.go | 6 +- x/filetree/handler.go | 4 +- x/filetree/keeper/msg_server_make_root.go | 4 +- .../keeper/msg_server_make_root_test.go | 8 +- x/filetree/types/codec.go | 4 +- x/filetree/types/message_make_rootv2.go | 20 +- x/filetree/types/test_helpers.go | 4 +- x/filetree/types/tx.pb.go | 228 +++++++++--------- 9 files changed, 142 insertions(+), 142 deletions(-) diff --git a/proto/canine_chain/filetree/tx.proto b/proto/canine_chain/filetree/tx.proto index d5db66523..ab8b10bb6 100644 --- a/proto/canine_chain/filetree/tx.proto +++ b/proto/canine_chain/filetree/tx.proto @@ -10,7 +10,7 @@ service Msg { rpc PostKey(MsgPostKey) returns (MsgPostKeyResponse); rpc DeleteFile(MsgDeleteFile) returns (MsgDeleteFileResponse); rpc RemoveViewers(MsgRemoveViewers) returns (MsgRemoveViewersResponse); - rpc MakeRootV2(MsgMakeRootV2) returns (MsgMakeRootResponse); + rpc ProvisionFileTree(MsgProvisionFileTree) returns (MsgProvisionFileTreeResponse); rpc AddEditors(MsgAddEditors) returns (MsgAddEditorsResponse); rpc RemoveEditors(MsgRemoveEditors) returns (MsgRemoveEditorsResponse); @@ -67,9 +67,9 @@ message MsgRemoveViewers { message MsgRemoveViewersResponse {} -message MsgMakeRootResponse {} +message MsgProvisionFileTreeResponse {} -message MsgMakeRootV2 { +message MsgProvisionFileTree { string creator = 1; string editors = 2; string viewers = 3; diff --git a/x/filetree/client/cli/tx_make_root.go b/x/filetree/client/cli/tx_make_root.go index 54e393e33..ff44c0df4 100644 --- a/x/filetree/client/cli/tx_make_root.go +++ b/x/filetree/client/cli/tx_make_root.go @@ -18,8 +18,8 @@ var _ = strconv.Itoa(0) func CmdMakeRootV2() *cobra.Command { cmd := &cobra.Command{ - Use: "make-root-v2", - Short: "Broadcast message make root", + Use: "provision", + Short: "Provision your file tree", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) (err error) { if err != nil { @@ -51,7 +51,7 @@ func CmdMakeRootV2() *cobra.Command { return err } - msg := types.NewMsgMakeRootV2( + msg := types.NewMsgProvisionFileTree( clientCtx.GetFromAddress().String(), string(jsonEditors), "Viewers", diff --git a/x/filetree/handler.go b/x/filetree/handler.go index f490e8fc4..7c28df66b 100644 --- a/x/filetree/handler.go +++ b/x/filetree/handler.go @@ -32,8 +32,8 @@ func NewHandler(k keeper.Keeper) sdk.Handler { case *types.MsgRemoveViewers: res, err := msgServer.RemoveViewers(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) - case *types.MsgMakeRootV2: - res, err := msgServer.MakeRootV2(sdk.WrapSDKContext(ctx), msg) + case *types.MsgProvisionFileTree: + res, err := msgServer.ProvisionFileTree(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) case *types.MsgAddEditors: res, err := msgServer.AddEditors(sdk.WrapSDKContext(ctx), msg) diff --git a/x/filetree/keeper/msg_server_make_root.go b/x/filetree/keeper/msg_server_make_root.go index 78668867a..4c86618fe 100644 --- a/x/filetree/keeper/msg_server_make_root.go +++ b/x/filetree/keeper/msg_server_make_root.go @@ -32,10 +32,10 @@ func (k msgServer) MakeRootFolder(ctx sdk.Context, creator string, viewers strin k.SetFiles(ctx, file) } -func (k msgServer) MakeRootV2(goCtx context.Context, msg *types.MsgMakeRootV2) (*types.MsgMakeRootResponse, error) { +func (k msgServer) ProvisionFileTree(goCtx context.Context, msg *types.MsgProvisionFileTree) (*types.MsgProvisionFileTreeResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) k.MakeRootFolder(ctx, msg.Creator, msg.Viewers, msg.Editors, msg.TrackingNumber) - return &types.MsgMakeRootResponse{}, nil + return &types.MsgProvisionFileTreeResponse{}, nil } diff --git a/x/filetree/keeper/msg_server_make_root_test.go b/x/filetree/keeper/msg_server_make_root_test.go index 07e44a6cf..b417dd44a 100644 --- a/x/filetree/keeper/msg_server_make_root_test.go +++ b/x/filetree/keeper/msg_server_make_root_test.go @@ -18,13 +18,13 @@ func (suite *KeeperTestSuite) TestMsgMakeRoot() { suite.Require().NoError(err) cases := []struct { - preRun func() *types.MsgMakeRootV2 + preRun func() *types.MsgProvisionFileTree expErr bool expErrMsg string name string }{ { - preRun: func() *types.MsgMakeRootV2 { + preRun: func() *types.MsgProvisionFileTree { return msg }, expErr: false, @@ -36,13 +36,13 @@ func (suite *KeeperTestSuite) TestMsgMakeRoot() { suite.Run(tc.name, func() { msg := tc.preRun() suite.Require().NoError(err) - res, err := msgSrvr.MakeRootV2(context, msg) + res, err := msgSrvr.ProvisionFileTree(context, msg) if tc.expErr { suite.Require().Error(err) suite.Require().Contains(err.Error(), tc.expErrMsg) } else { suite.Require().NoError(err) - suite.Require().EqualValues(types.MsgMakeRootResponse{}, *res) + suite.Require().EqualValues(types.MsgProvisionFileTreeResponse{}, *res) } }) diff --git a/x/filetree/types/codec.go b/x/filetree/types/codec.go index 0e44bc4e5..350f16b66 100644 --- a/x/filetree/types/codec.go +++ b/x/filetree/types/codec.go @@ -14,7 +14,7 @@ func RegisterCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgPostKey{}, "filetree/PostKey", nil) cdc.RegisterConcrete(&MsgDeleteFile{}, "filetree/DeleteFile", nil) cdc.RegisterConcrete(&MsgRemoveViewers{}, "filetree/RemoveViewers", nil) - cdc.RegisterConcrete(&MsgMakeRootV2{}, "filetree/MakeRoot", nil) + cdc.RegisterConcrete(&MsgProvisionFileTree{}, "filetree/ProvisionFileTree", nil) cdc.RegisterConcrete(&MsgAddEditors{}, "filetree/AddEditors", nil) cdc.RegisterConcrete(&MsgRemoveEditors{}, "filetree/RemoveEditors", nil) cdc.RegisterConcrete(&MsgResetEditors{}, "filetree/ResetEditors", nil) @@ -39,7 +39,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgRemoveViewers{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgMakeRootV2{}, + &MsgProvisionFileTree{}, ) registry.RegisterImplementations((*sdk.Msg)(nil), &MsgAddEditors{}, diff --git a/x/filetree/types/message_make_rootv2.go b/x/filetree/types/message_make_rootv2.go index 22aa41792..cce4d0bfc 100644 --- a/x/filetree/types/message_make_rootv2.go +++ b/x/filetree/types/message_make_rootv2.go @@ -5,12 +5,12 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -const TypeMsgMakeRootV2 = "make_root_v2" +const TypeMsgProvisionFileTree = "provision_file_tree" -var _ sdk.Msg = &MsgMakeRootV2{} +var _ sdk.Msg = &MsgProvisionFileTree{} -func NewMsgMakeRootV2(creator string, editors string, viewers string, trackingNumber string) *MsgMakeRootV2 { - return &MsgMakeRootV2{ +func NewMsgProvisionFileTree(creator string, editors string, viewers string, trackingNumber string) *MsgProvisionFileTree { + return &MsgProvisionFileTree{ Creator: creator, Editors: editors, Viewers: viewers, @@ -18,15 +18,15 @@ func NewMsgMakeRootV2(creator string, editors string, viewers string, trackingNu } } -func (msg *MsgMakeRootV2) Route() string { +func (msg *MsgProvisionFileTree) Route() string { return RouterKey } -func (msg *MsgMakeRootV2) Type() string { - return TypeMsgMakeRootV2 +func (msg *MsgProvisionFileTree) Type() string { + return TypeMsgProvisionFileTree } -func (msg *MsgMakeRootV2) GetSigners() []sdk.AccAddress { +func (msg *MsgProvisionFileTree) GetSigners() []sdk.AccAddress { creator, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { panic(err) @@ -34,12 +34,12 @@ func (msg *MsgMakeRootV2) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{creator} } -func (msg *MsgMakeRootV2) GetSignBytes() []byte { +func (msg *MsgProvisionFileTree) GetSignBytes() []byte { bz := ModuleCdc.MustMarshalJSON(msg) return sdk.MustSortJSON(bz) } -func (msg *MsgMakeRootV2) ValidateBasic() error { +func (msg *MsgProvisionFileTree) ValidateBasic() error { _, err := sdk.AccAddressFromBech32(msg.Creator) if err != nil { return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) diff --git a/x/filetree/types/test_helpers.go b/x/filetree/types/test_helpers.go index c842ea3f9..c2036aed8 100644 --- a/x/filetree/types/test_helpers.go +++ b/x/filetree/types/test_helpers.go @@ -40,7 +40,7 @@ func MakePrivateKey(fromName string) (*eciesgo.PrivateKey, error) { return newKey, nil } -func CreateMsgMakeRoot(creator string) (*MsgMakeRootV2, error) { +func CreateMsgMakeRoot(creator string) (*MsgProvisionFileTree, error) { trackingNumber := uuid.NewString() editorIds := strings.Split(creator, ",") @@ -49,7 +49,7 @@ func CreateMsgMakeRoot(creator string) (*MsgMakeRootV2, error) { return nil, err } - msg := NewMsgMakeRootV2( + msg := NewMsgProvisionFileTree( creator, string(jsonEditors), "Viewers", diff --git a/x/filetree/types/tx.pb.go b/x/filetree/types/tx.pb.go index 7648ef2eb..02e7b941c 100644 --- a/x/filetree/types/tx.pb.go +++ b/x/filetree/types/tx.pb.go @@ -571,21 +571,21 @@ func (m *MsgRemoveViewersResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgRemoveViewersResponse proto.InternalMessageInfo -type MsgMakeRootResponse struct { +type MsgProvisionFileTreeResponse struct { } -func (m *MsgMakeRootResponse) Reset() { *m = MsgMakeRootResponse{} } -func (m *MsgMakeRootResponse) String() string { return proto.CompactTextString(m) } -func (*MsgMakeRootResponse) ProtoMessage() {} -func (*MsgMakeRootResponse) Descriptor() ([]byte, []int) { +func (m *MsgProvisionFileTreeResponse) Reset() { *m = MsgProvisionFileTreeResponse{} } +func (m *MsgProvisionFileTreeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgProvisionFileTreeResponse) ProtoMessage() {} +func (*MsgProvisionFileTreeResponse) Descriptor() ([]byte, []int) { return fileDescriptor_e5756d04c34e5a81, []int{10} } -func (m *MsgMakeRootResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgProvisionFileTreeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgMakeRootResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgProvisionFileTreeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgMakeRootResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgProvisionFileTreeResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -595,37 +595,37 @@ func (m *MsgMakeRootResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *MsgMakeRootResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgMakeRootResponse.Merge(m, src) +func (m *MsgProvisionFileTreeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgProvisionFileTreeResponse.Merge(m, src) } -func (m *MsgMakeRootResponse) XXX_Size() int { +func (m *MsgProvisionFileTreeResponse) XXX_Size() int { return m.Size() } -func (m *MsgMakeRootResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgMakeRootResponse.DiscardUnknown(m) +func (m *MsgProvisionFileTreeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgProvisionFileTreeResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgMakeRootResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgProvisionFileTreeResponse proto.InternalMessageInfo -type MsgMakeRootV2 struct { +type MsgProvisionFileTree struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` Editors string `protobuf:"bytes,2,opt,name=editors,proto3" json:"editors,omitempty"` Viewers string `protobuf:"bytes,3,opt,name=viewers,proto3" json:"viewers,omitempty"` TrackingNumber string `protobuf:"bytes,4,opt,name=tracking_number,json=trackingNumber,proto3" json:"tracking_number,omitempty"` } -func (m *MsgMakeRootV2) Reset() { *m = MsgMakeRootV2{} } -func (m *MsgMakeRootV2) String() string { return proto.CompactTextString(m) } -func (*MsgMakeRootV2) ProtoMessage() {} -func (*MsgMakeRootV2) Descriptor() ([]byte, []int) { +func (m *MsgProvisionFileTree) Reset() { *m = MsgProvisionFileTree{} } +func (m *MsgProvisionFileTree) String() string { return proto.CompactTextString(m) } +func (*MsgProvisionFileTree) ProtoMessage() {} +func (*MsgProvisionFileTree) Descriptor() ([]byte, []int) { return fileDescriptor_e5756d04c34e5a81, []int{11} } -func (m *MsgMakeRootV2) XXX_Unmarshal(b []byte) error { +func (m *MsgProvisionFileTree) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgMakeRootV2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgProvisionFileTree) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgMakeRootV2.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgProvisionFileTree.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -635,40 +635,40 @@ func (m *MsgMakeRootV2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error return b[:n], nil } } -func (m *MsgMakeRootV2) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgMakeRootV2.Merge(m, src) +func (m *MsgProvisionFileTree) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgProvisionFileTree.Merge(m, src) } -func (m *MsgMakeRootV2) XXX_Size() int { +func (m *MsgProvisionFileTree) XXX_Size() int { return m.Size() } -func (m *MsgMakeRootV2) XXX_DiscardUnknown() { - xxx_messageInfo_MsgMakeRootV2.DiscardUnknown(m) +func (m *MsgProvisionFileTree) XXX_DiscardUnknown() { + xxx_messageInfo_MsgProvisionFileTree.DiscardUnknown(m) } -var xxx_messageInfo_MsgMakeRootV2 proto.InternalMessageInfo +var xxx_messageInfo_MsgProvisionFileTree proto.InternalMessageInfo -func (m *MsgMakeRootV2) GetCreator() string { +func (m *MsgProvisionFileTree) GetCreator() string { if m != nil { return m.Creator } return "" } -func (m *MsgMakeRootV2) GetEditors() string { +func (m *MsgProvisionFileTree) GetEditors() string { if m != nil { return m.Editors } return "" } -func (m *MsgMakeRootV2) GetViewers() string { +func (m *MsgProvisionFileTree) GetViewers() string { if m != nil { return m.Viewers } return "" } -func (m *MsgMakeRootV2) GetTrackingNumber() string { +func (m *MsgProvisionFileTree) GetTrackingNumber() string { if m != nil { return m.TrackingNumber } @@ -1198,8 +1198,8 @@ func init() { proto.RegisterType((*MsgDeleteFileResponse)(nil), "canine_chain.filetree.MsgDeleteFileResponse") proto.RegisterType((*MsgRemoveViewers)(nil), "canine_chain.filetree.MsgRemoveViewers") proto.RegisterType((*MsgRemoveViewersResponse)(nil), "canine_chain.filetree.MsgRemoveViewersResponse") - proto.RegisterType((*MsgMakeRootResponse)(nil), "canine_chain.filetree.MsgMakeRootResponse") - proto.RegisterType((*MsgMakeRootV2)(nil), "canine_chain.filetree.MsgMakeRootV2") + proto.RegisterType((*MsgProvisionFileTreeResponse)(nil), "canine_chain.filetree.MsgProvisionFileTreeResponse") + proto.RegisterType((*MsgProvisionFileTree)(nil), "canine_chain.filetree.MsgProvisionFileTree") proto.RegisterType((*MsgAddEditors)(nil), "canine_chain.filetree.MsgAddEditors") proto.RegisterType((*MsgAddEditorsResponse)(nil), "canine_chain.filetree.MsgAddEditorsResponse") proto.RegisterType((*MsgRemoveEditors)(nil), "canine_chain.filetree.MsgRemoveEditors") @@ -1215,59 +1215,59 @@ func init() { func init() { proto.RegisterFile("canine_chain/filetree/tx.proto", fileDescriptor_e5756d04c34e5a81) } var fileDescriptor_e5756d04c34e5a81 = []byte{ - // 819 bytes of a gzipped FileDescriptorProto + // 824 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcf, 0x6f, 0xd3, 0x48, - 0x14, 0xae, 0x9b, 0x6c, 0x9b, 0xbc, 0x6e, 0x7f, 0xc8, 0xbb, 0xdd, 0x7a, 0xbd, 0x6a, 0x76, 0x37, - 0x02, 0x4a, 0x11, 0x4d, 0xa4, 0xf6, 0xc2, 0x15, 0x0a, 0x48, 0xa8, 0x04, 0xaa, 0x1c, 0x8a, 0xd4, - 0x03, 0xa9, 0x63, 0xbf, 0xda, 0x26, 0xa9, 0x1d, 0x79, 0xa6, 0x4d, 0x73, 0xe3, 0x80, 0x38, 0xf3, - 0x37, 0xf0, 0xd7, 0x20, 0x71, 0xe9, 0x91, 0x23, 0x6a, 0xff, 0x0b, 0x4e, 0xc8, 0x9e, 0x19, 0x7b, - 0xec, 0x26, 0x76, 0xa4, 0x96, 0x5b, 0xe6, 0xbd, 0xcf, 0xf3, 0x7d, 0xf3, 0xde, 0x37, 0x6f, 0x02, - 0x35, 0xd3, 0xf0, 0x5c, 0x0f, 0x3b, 0xa6, 0x63, 0xb8, 0x5e, 0xf3, 0xd8, 0xed, 0x23, 0x0d, 0x10, - 0x9b, 0xf4, 0xbc, 0x31, 0x08, 0x7c, 0xea, 0xab, 0xab, 0x72, 0xbe, 0x21, 0xf2, 0xf5, 0x1f, 0x0a, - 0x2c, 0xb4, 0x88, 0xbd, 0xef, 0x13, 0xfa, 0xdc, 0xed, 0xa3, 0xaa, 0xc1, 0xbc, 0x19, 0xa0, 0x41, - 0xfd, 0x40, 0x53, 0xfe, 0x53, 0xee, 0x57, 0xdb, 0x62, 0x19, 0x66, 0x0c, 0xd3, 0xf4, 0x4f, 0x3d, - 0xaa, 0xcd, 0xb2, 0x0c, 0x5f, 0xaa, 0xff, 0xc2, 0x82, 0x63, 0x10, 0xa7, 0x33, 0x30, 0x02, 0xf4, - 0xa8, 0x56, 0x8a, 0xb2, 0x10, 0x86, 0xf6, 0xa3, 0x88, 0xba, 0x0e, 0xd1, 0xaa, 0x63, 0x3a, 0x6e, - 0xdf, 0xd2, 0xca, 0x51, 0xbe, 0x1a, 0x46, 0x76, 0xc3, 0x80, 0xaa, 0x43, 0xc5, 0xf4, 0x3d, 0x8a, - 0x1e, 0x25, 0xda, 0x6f, 0x51, 0x32, 0x5e, 0x87, 0xac, 0x67, 0x2e, 0x0e, 0x31, 0x20, 0xda, 0x1c, - 0x63, 0xe5, 0xcb, 0x30, 0x83, 0x96, 0x4b, 0xfd, 0x80, 0x68, 0xf3, 0x2c, 0xc3, 0x97, 0xea, 0x06, - 0x2c, 0xd3, 0xc0, 0x30, 0x7b, 0xae, 0x67, 0x77, 0xbc, 0xd3, 0x93, 0x2e, 0x06, 0x5a, 0x25, 0x42, - 0x2c, 0x89, 0xf0, 0xab, 0x28, 0x5a, 0xdf, 0x84, 0x3f, 0xa4, 0xb3, 0xb7, 0x91, 0x0c, 0x7c, 0x8f, - 0xa0, 0xaa, 0x42, 0x79, 0x60, 0x50, 0x87, 0x17, 0x20, 0xfa, 0x5d, 0xff, 0xac, 0xc0, 0x62, 0x8b, - 0xd8, 0x8f, 0x2d, 0xeb, 0x20, 0xe1, 0x9f, 0x50, 0xa9, 0x75, 0x00, 0x26, 0xb2, 0xe3, 0x5a, 0x84, - 0x17, 0xab, 0xca, 0x22, 0x2f, 0x2c, 0x12, 0x96, 0x8b, 0xa7, 0x7b, 0x38, 0x22, 0xa2, 0x5c, 0x2c, - 0xb4, 0x87, 0xa3, 0x68, 0x67, 0xc3, 0xb2, 0x02, 0x24, 0x84, 0xd7, 0x4a, 0x2c, 0xc3, 0x9d, 0xc3, - 0xce, 0x75, 0xfc, 0xa1, 0x87, 0x01, 0xaf, 0x55, 0x35, 0x8c, 0xbc, 0x0e, 0x03, 0xf5, 0x35, 0x58, - 0x4d, 0x69, 0x14, 0x27, 0xaa, 0x3f, 0x02, 0xe0, 0x07, 0xdd, 0xc3, 0x51, 0x8e, 0xf2, 0x15, 0x28, - 0xf5, 0x70, 0xc4, 0x25, 0x87, 0x3f, 0xeb, 0x7f, 0x82, 0x9a, 0x7c, 0x19, 0xef, 0x77, 0x14, 0x15, - 0xe3, 0x29, 0xf6, 0x91, 0x62, 0x81, 0x6d, 0xfe, 0x81, 0x2a, 0x37, 0x07, 0x75, 0xf8, 0xc6, 0x15, - 0x66, 0x0d, 0xea, 0xc8, 0x9e, 0x2a, 0xa5, 0x3c, 0xc5, 0x8f, 0x92, 0x30, 0xc4, 0xd4, 0x1f, 0x14, - 0x58, 0x69, 0x11, 0xbb, 0x8d, 0x27, 0xfe, 0x19, 0xde, 0xb8, 0x17, 0x52, 0xa9, 0x4b, 0x79, 0xa5, - 0x2e, 0x67, 0x4b, 0xad, 0x83, 0x96, 0x55, 0x11, 0x4b, 0x5c, 0x8d, 0x6c, 0xd5, 0x32, 0x7a, 0xd8, - 0xf6, 0x7d, 0x1a, 0x87, 0x3f, 0x32, 0x0b, 0x89, 0xf8, 0xc1, 0x76, 0xfe, 0x65, 0x13, 0xe6, 0x9e, - 0x4d, 0x9b, 0x5b, 0xba, 0x10, 0xa5, 0xf4, 0x85, 0x18, 0x63, 0xfb, 0xf2, 0x58, 0xdb, 0x27, 0x5e, - 0x7e, 0x96, 0x6c, 0x3a, 0xb9, 0x7e, 0x8c, 0x59, 0xae, 0x1f, 0x8b, 0x70, 0x2f, 0xf3, 0xb4, 0xec, - 0x65, 0x16, 0xba, 0x25, 0x2f, 0x73, 0x8d, 0xe3, 0x0d, 0x70, 0xe3, 0x03, 0xdc, 0x8a, 0x01, 0xb2, - 0x12, 0x2d, 0x58, 0x8e, 0x72, 0x04, 0x69, 0xb1, 0x40, 0x49, 0xc1, 0x6c, 0x9e, 0x82, 0x52, 0x56, - 0xc1, 0xdf, 0xb0, 0x96, 0x61, 0x19, 0x27, 0xa0, 0xf8, 0x8a, 0xdc, 0x86, 0x80, 0xec, 0x15, 0x78, - 0xaf, 0xc0, 0x52, 0x8b, 0xd8, 0xbb, 0x8e, 0xe1, 0xd9, 0x0c, 0xfd, 0x0b, 0x04, 0x84, 0xb3, 0xc5, - 0xc3, 0x61, 0xaa, 0x43, 0x15, 0x0f, 0x87, 0x4c, 0x9d, 0x06, 0x7f, 0xa5, 0x15, 0x08, 0x71, 0xdb, - 0x5f, 0x2b, 0x50, 0x6a, 0x11, 0x5b, 0x3d, 0x84, 0x4a, 0xfc, 0xee, 0xd5, 0x1b, 0x63, 0xdf, 0xc7, - 0x86, 0xf4, 0x3e, 0xe8, 0x0f, 0x8a, 0x31, 0xf1, 0x1b, 0x72, 0x04, 0x20, 0xbd, 0x15, 0x77, 0x26, - 0x7f, 0x99, 0xa0, 0xf4, 0x87, 0xd3, 0xa0, 0x62, 0x86, 0x37, 0x30, 0x2f, 0x06, 0xfa, 0xff, 0xf9, - 0xc2, 0xf6, 0x70, 0xa4, 0x6f, 0x16, 0x42, 0x64, 0xe9, 0xd2, 0x64, 0xcf, 0x91, 0x9e, 0xa0, 0xf2, - 0xa4, 0x5f, 0x9f, 0xe1, 0xaa, 0x0b, 0x8b, 0xe9, 0xf9, 0xbd, 0x31, 0xf9, 0xf3, 0x14, 0x50, 0x6f, - 0x4e, 0x09, 0x8c, 0xa9, 0xde, 0x02, 0x48, 0x03, 0x37, 0xe7, 0x30, 0x09, 0x2a, 0xaf, 0xcf, 0xd9, - 0xa1, 0xce, 0xfb, 0x2c, 0x6e, 0x79, 0x7e, 0x9f, 0x39, 0xaa, 0xa0, 0xcf, 0x99, 0xbb, 0x9c, 0x14, - 0x4b, 0x90, 0x14, 0x16, 0x4b, 0xf0, 0x34, 0xa7, 0x04, 0xc6, 0x54, 0xc7, 0xf0, 0x7b, 0x6a, 0x68, - 0xdd, 0xcb, 0xdb, 0x20, 0xc1, 0xe9, 0x8d, 0xe9, 0x70, 0xd7, 0x78, 0x44, 0xfb, 0x8b, 0x78, 0x44, - 0xf7, 0x1b, 0xd3, 0xe1, 0x62, 0x1e, 0x13, 0x16, 0xe4, 0x09, 0x74, 0x77, 0xf2, 0xe7, 0x12, 0x4c, - 0xdf, 0x9a, 0x0a, 0x26, 0x48, 0x9e, 0xb4, 0xbe, 0x5c, 0xd6, 0x94, 0x8b, 0xcb, 0x9a, 0xf2, 0xfd, - 0xb2, 0xa6, 0x7c, 0xba, 0xaa, 0xcd, 0x5c, 0x5c, 0xd5, 0x66, 0xbe, 0x5d, 0xd5, 0x66, 0x0e, 0x77, - 0x6c, 0x97, 0x3a, 0xa7, 0xdd, 0x86, 0xe9, 0x9f, 0x34, 0xdf, 0x19, 0x66, 0xcf, 0xe8, 0xbf, 0x34, - 0xba, 0xa4, 0xc9, 0x76, 0xdf, 0x62, 0x7f, 0xd4, 0xcf, 0xa5, 0xbf, 0xea, 0xa3, 0x01, 0x92, 0xee, - 0x5c, 0xf4, 0x77, 0x7d, 0xe7, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x75, 0xf6, 0x78, 0xa7, 0xd0, - 0x0b, 0x00, 0x00, + 0x14, 0xae, 0x9b, 0x6c, 0x9b, 0xbc, 0x6e, 0x7f, 0xac, 0xb7, 0xdd, 0x7a, 0xbd, 0x5b, 0xef, 0x12, + 0x01, 0xa5, 0x40, 0x13, 0x89, 0x5e, 0xb8, 0x42, 0x01, 0x09, 0x95, 0x40, 0x55, 0x21, 0x90, 0x7a, + 0x49, 0x1d, 0xfb, 0xd5, 0x36, 0x49, 0xed, 0xc8, 0x33, 0x69, 0x9a, 0x1b, 0x07, 0xae, 0x48, 0xfc, + 0x0d, 0xfc, 0x35, 0x1c, 0x7b, 0xe4, 0x88, 0xd2, 0xff, 0x82, 0x13, 0xb2, 0x3d, 0x63, 0x8f, 0xdd, + 0xc4, 0x0e, 0x6a, 0xb9, 0x79, 0xde, 0xfb, 0x66, 0xbe, 0x6f, 0xbe, 0x79, 0x6f, 0xc6, 0xa0, 0x19, + 0xba, 0xeb, 0xb8, 0xd8, 0x32, 0x6c, 0xdd, 0x71, 0x1b, 0xc7, 0x4e, 0x17, 0xa9, 0x8f, 0xd8, 0xa0, + 0x67, 0xf5, 0x9e, 0xef, 0x51, 0x4f, 0x5e, 0x13, 0xf3, 0x75, 0x9e, 0xaf, 0x7d, 0x97, 0x60, 0xa1, + 0x49, 0xac, 0x7d, 0x8f, 0xd0, 0x67, 0x4e, 0x17, 0x65, 0x05, 0xe6, 0x0d, 0x1f, 0x75, 0xea, 0xf9, + 0x8a, 0xf4, 0xbf, 0x74, 0xa7, 0x7a, 0xc0, 0x87, 0x41, 0x46, 0x37, 0x0c, 0xaf, 0xef, 0x52, 0x65, + 0x36, 0xca, 0xb0, 0xa1, 0xfc, 0x1f, 0x2c, 0xd8, 0x3a, 0xb1, 0x5b, 0x3d, 0xdd, 0x47, 0x97, 0x2a, + 0xa5, 0x30, 0x0b, 0x41, 0x68, 0x3f, 0x8c, 0xc8, 0x1b, 0x10, 0x8e, 0x5a, 0x86, 0xed, 0x74, 0x4d, + 0xa5, 0x1c, 0xe6, 0xab, 0x41, 0x64, 0x37, 0x08, 0xc8, 0x2a, 0x54, 0x0c, 0xcf, 0xa5, 0xe8, 0x52, + 0xa2, 0xfc, 0x16, 0x26, 0xe3, 0x71, 0xc0, 0x7a, 0xea, 0xe0, 0x00, 0x7d, 0xa2, 0xcc, 0x45, 0xac, + 0x6c, 0x18, 0x64, 0xd0, 0x74, 0xa8, 0xe7, 0x13, 0x65, 0x3e, 0xca, 0xb0, 0xa1, 0xbc, 0x09, 0xcb, + 0xd4, 0xd7, 0x8d, 0x8e, 0xe3, 0x5a, 0x2d, 0xb7, 0x7f, 0xd2, 0x46, 0x5f, 0xa9, 0x84, 0x88, 0x25, + 0x1e, 0x7e, 0x19, 0x46, 0x6b, 0x5b, 0xf0, 0xa7, 0xb0, 0xf7, 0x03, 0x24, 0x3d, 0xcf, 0x25, 0x28, + 0xcb, 0x50, 0xee, 0xe9, 0xd4, 0x66, 0x06, 0x84, 0xdf, 0xb5, 0xcf, 0x12, 0x2c, 0x36, 0x89, 0xf5, + 0xc8, 0x34, 0xdf, 0x24, 0xfc, 0x13, 0x9c, 0xda, 0x00, 0x88, 0x44, 0xb6, 0x1c, 0x93, 0x30, 0xb3, + 0xaa, 0x51, 0xe4, 0xb9, 0x49, 0x02, 0xbb, 0x58, 0xba, 0x83, 0x43, 0xc2, 0xed, 0x8a, 0x42, 0x7b, + 0x38, 0x0c, 0x57, 0xd6, 0x4d, 0xd3, 0x47, 0x42, 0x98, 0x57, 0x7c, 0x18, 0xac, 0x1c, 0x9c, 0x5c, + 0xcb, 0x1b, 0xb8, 0xe8, 0x33, 0xaf, 0xaa, 0x41, 0xe4, 0x55, 0x10, 0xa8, 0xad, 0xc3, 0x5a, 0x4a, + 0x23, 0xdf, 0x51, 0xed, 0x21, 0x00, 0xdb, 0xe8, 0x1e, 0x0e, 0x73, 0x94, 0xaf, 0x40, 0xa9, 0x83, + 0x43, 0x26, 0x39, 0xf8, 0xac, 0xad, 0x82, 0x9c, 0xcc, 0x8c, 0xd7, 0x3b, 0x0a, 0xcd, 0x78, 0x82, + 0x5d, 0xa4, 0x58, 0x50, 0x36, 0xff, 0x40, 0x95, 0x15, 0x07, 0xb5, 0xd9, 0xc2, 0x95, 0xa8, 0x34, + 0xa8, 0x2d, 0xd6, 0x54, 0x29, 0x55, 0x53, 0x6c, 0x2b, 0x09, 0x43, 0x4c, 0xfd, 0x41, 0x82, 0x95, + 0x26, 0xb1, 0x0e, 0xf0, 0xc4, 0x3b, 0xc5, 0x2b, 0x9f, 0x85, 0x60, 0x75, 0x29, 0xcf, 0xea, 0x72, + 0xd6, 0x6a, 0x15, 0x94, 0xac, 0x8a, 0x58, 0xa2, 0x06, 0xff, 0x06, 0x9e, 0xf9, 0xde, 0xa9, 0x43, + 0x1c, 0xcf, 0x0d, 0xe4, 0xbf, 0xf6, 0x31, 0xd9, 0xc2, 0x47, 0x09, 0x56, 0xc7, 0x01, 0xf2, 0x9b, + 0x8f, 0x17, 0xfb, 0x6c, 0xba, 0xd8, 0x85, 0x06, 0x29, 0xa5, 0x1b, 0x64, 0x4c, 0x1b, 0x94, 0xc7, + 0xb6, 0x41, 0x52, 0xdb, 0x4f, 0x93, 0x45, 0x27, 0xfb, 0x19, 0x31, 0x8b, 0x7e, 0x46, 0x11, 0x56, + 0xdb, 0x2c, 0x2d, 0xd6, 0x76, 0x14, 0xba, 0xa6, 0xda, 0x66, 0x1a, 0xc7, 0x17, 0xc4, 0x95, 0x37, + 0x70, 0x2d, 0x05, 0x91, 0x95, 0x68, 0xc2, 0x72, 0x98, 0x23, 0x48, 0x8b, 0x05, 0x0a, 0x0a, 0x66, + 0xf3, 0x14, 0x94, 0xb2, 0x0a, 0xfe, 0x86, 0xf5, 0x0c, 0xcb, 0x38, 0x01, 0xc5, 0x2d, 0x73, 0x1d, + 0x02, 0xb2, 0x2d, 0xf1, 0x5e, 0x82, 0xa5, 0x26, 0xb1, 0x76, 0x6d, 0xdd, 0xb5, 0x22, 0xf4, 0x2f, + 0x10, 0x10, 0xdc, 0x35, 0x2e, 0x0e, 0x52, 0x27, 0x54, 0x71, 0x71, 0x10, 0xa9, 0x53, 0xe0, 0xaf, + 0xb4, 0x02, 0x2e, 0xee, 0xc1, 0xa8, 0x02, 0xa5, 0x26, 0xb1, 0xe4, 0x43, 0xa8, 0xc4, 0xef, 0x60, + 0xad, 0x3e, 0xf6, 0xbd, 0xac, 0x0b, 0xef, 0x85, 0x7a, 0xb7, 0x18, 0x13, 0xbf, 0x29, 0x47, 0x00, + 0xc2, 0xdb, 0x71, 0x73, 0xf2, 0xcc, 0x04, 0xa5, 0xde, 0x9f, 0x06, 0x15, 0x33, 0xbc, 0x85, 0x79, + 0x7e, 0xc1, 0xdf, 0xc8, 0x17, 0xb6, 0x87, 0x43, 0x75, 0xab, 0x10, 0x22, 0x4a, 0x17, 0x6e, 0xfa, + 0x1c, 0xe9, 0x09, 0x2a, 0x4f, 0xfa, 0xe5, 0x3b, 0x5d, 0x76, 0x60, 0x31, 0x7d, 0x9f, 0x6f, 0x4e, + 0x9e, 0x9e, 0x02, 0xaa, 0x8d, 0x29, 0x81, 0x31, 0x55, 0x1f, 0xfe, 0xb8, 0x7c, 0xef, 0xde, 0xcb, + 0x31, 0x23, 0x0b, 0x56, 0x77, 0x7e, 0x02, 0x9c, 0x39, 0x7e, 0xde, 0xfc, 0xf9, 0xc7, 0xcf, 0x50, + 0x05, 0xc7, 0x9f, 0x69, 0xf1, 0xc4, 0x43, 0x4e, 0x52, 0xe8, 0x21, 0xe7, 0x69, 0x4c, 0x09, 0x8c, + 0xa9, 0x8e, 0xe1, 0xf7, 0xd4, 0x5d, 0x76, 0x3b, 0x6f, 0x81, 0x04, 0xa7, 0xd6, 0xa7, 0xc3, 0x5d, + 0xe2, 0xe1, 0x55, 0x51, 0xc4, 0xc3, 0x8b, 0xa2, 0x3e, 0x1d, 0x2e, 0xe6, 0x31, 0x60, 0x41, 0xbc, + 0x98, 0x6e, 0x4d, 0x9e, 0x2e, 0xc0, 0xd4, 0xed, 0xa9, 0x60, 0x9c, 0xe4, 0x71, 0xf3, 0xcb, 0x48, + 0x93, 0xce, 0x47, 0x9a, 0xf4, 0x6d, 0xa4, 0x49, 0x9f, 0x2e, 0xb4, 0x99, 0xf3, 0x0b, 0x6d, 0xe6, + 0xeb, 0x85, 0x36, 0x73, 0xb8, 0x63, 0x39, 0xd4, 0xee, 0xb7, 0xeb, 0x86, 0x77, 0xd2, 0x78, 0xa7, + 0x1b, 0x1d, 0xbd, 0xfb, 0x42, 0x6f, 0x93, 0x46, 0xb4, 0xfa, 0x76, 0xf4, 0x3f, 0x7f, 0x26, 0xfc, + 0xd1, 0x0f, 0x7b, 0x48, 0xda, 0x73, 0xe1, 0x5f, 0xfd, 0xce, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xe9, 0x77, 0x6a, 0x76, 0xf7, 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1287,7 +1287,7 @@ type MsgClient interface { PostKey(ctx context.Context, in *MsgPostKey, opts ...grpc.CallOption) (*MsgPostKeyResponse, error) DeleteFile(ctx context.Context, in *MsgDeleteFile, opts ...grpc.CallOption) (*MsgDeleteFileResponse, error) RemoveViewers(ctx context.Context, in *MsgRemoveViewers, opts ...grpc.CallOption) (*MsgRemoveViewersResponse, error) - MakeRootV2(ctx context.Context, in *MsgMakeRootV2, opts ...grpc.CallOption) (*MsgMakeRootResponse, error) + ProvisionFileTree(ctx context.Context, in *MsgProvisionFileTree, opts ...grpc.CallOption) (*MsgProvisionFileTreeResponse, error) AddEditors(ctx context.Context, in *MsgAddEditors, opts ...grpc.CallOption) (*MsgAddEditorsResponse, error) RemoveEditors(ctx context.Context, in *MsgRemoveEditors, opts ...grpc.CallOption) (*MsgRemoveEditorsResponse, error) ResetEditors(ctx context.Context, in *MsgResetEditors, opts ...grpc.CallOption) (*MsgResetEditorsResponse, error) @@ -1348,9 +1348,9 @@ func (c *msgClient) RemoveViewers(ctx context.Context, in *MsgRemoveViewers, opt return out, nil } -func (c *msgClient) MakeRootV2(ctx context.Context, in *MsgMakeRootV2, opts ...grpc.CallOption) (*MsgMakeRootResponse, error) { - out := new(MsgMakeRootResponse) - err := c.cc.Invoke(ctx, "/canine_chain.filetree.Msg/MakeRootV2", in, out, opts...) +func (c *msgClient) ProvisionFileTree(ctx context.Context, in *MsgProvisionFileTree, opts ...grpc.CallOption) (*MsgProvisionFileTreeResponse, error) { + out := new(MsgProvisionFileTreeResponse) + err := c.cc.Invoke(ctx, "/canine_chain.filetree.Msg/ProvisionFileTree", in, out, opts...) if err != nil { return nil, err } @@ -1409,7 +1409,7 @@ type MsgServer interface { PostKey(context.Context, *MsgPostKey) (*MsgPostKeyResponse, error) DeleteFile(context.Context, *MsgDeleteFile) (*MsgDeleteFileResponse, error) RemoveViewers(context.Context, *MsgRemoveViewers) (*MsgRemoveViewersResponse, error) - MakeRootV2(context.Context, *MsgMakeRootV2) (*MsgMakeRootResponse, error) + ProvisionFileTree(context.Context, *MsgProvisionFileTree) (*MsgProvisionFileTreeResponse, error) AddEditors(context.Context, *MsgAddEditors) (*MsgAddEditorsResponse, error) RemoveEditors(context.Context, *MsgRemoveEditors) (*MsgRemoveEditorsResponse, error) ResetEditors(context.Context, *MsgResetEditors) (*MsgResetEditorsResponse, error) @@ -1436,8 +1436,8 @@ func (*UnimplementedMsgServer) DeleteFile(ctx context.Context, req *MsgDeleteFil func (*UnimplementedMsgServer) RemoveViewers(ctx context.Context, req *MsgRemoveViewers) (*MsgRemoveViewersResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RemoveViewers not implemented") } -func (*UnimplementedMsgServer) MakeRootV2(ctx context.Context, req *MsgMakeRootV2) (*MsgMakeRootResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MakeRootV2 not implemented") +func (*UnimplementedMsgServer) ProvisionFileTree(ctx context.Context, req *MsgProvisionFileTree) (*MsgProvisionFileTreeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ProvisionFileTree not implemented") } func (*UnimplementedMsgServer) AddEditors(ctx context.Context, req *MsgAddEditors) (*MsgAddEditorsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AddEditors not implemented") @@ -1549,20 +1549,20 @@ func _Msg_RemoveViewers_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } -func _Msg_MakeRootV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgMakeRootV2) +func _Msg_ProvisionFileTree_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgProvisionFileTree) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(MsgServer).MakeRootV2(ctx, in) + return srv.(MsgServer).ProvisionFileTree(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/canine_chain.filetree.Msg/MakeRootV2", + FullMethod: "/canine_chain.filetree.Msg/ProvisionFileTree", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).MakeRootV2(ctx, req.(*MsgMakeRootV2)) + return srv.(MsgServer).ProvisionFileTree(ctx, req.(*MsgProvisionFileTree)) } return interceptor(ctx, in, info, handler) } @@ -1682,8 +1682,8 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ Handler: _Msg_RemoveViewers_Handler, }, { - MethodName: "MakeRootV2", - Handler: _Msg_MakeRootV2_Handler, + MethodName: "ProvisionFileTree", + Handler: _Msg_ProvisionFileTree_Handler, }, { MethodName: "AddEditors", @@ -2101,7 +2101,7 @@ func (m *MsgRemoveViewersResponse) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } -func (m *MsgMakeRootResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgProvisionFileTreeResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2111,12 +2111,12 @@ func (m *MsgMakeRootResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgMakeRootResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgProvisionFileTreeResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgMakeRootResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgProvisionFileTreeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2124,7 +2124,7 @@ func (m *MsgMakeRootResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgMakeRootV2) Marshal() (dAtA []byte, err error) { +func (m *MsgProvisionFileTree) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -2134,12 +2134,12 @@ func (m *MsgMakeRootV2) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgMakeRootV2) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgProvisionFileTree) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgMakeRootV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgProvisionFileTree) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -2731,7 +2731,7 @@ func (m *MsgRemoveViewersResponse) Size() (n int) { return n } -func (m *MsgMakeRootResponse) Size() (n int) { +func (m *MsgProvisionFileTreeResponse) Size() (n int) { if m == nil { return 0 } @@ -2740,7 +2740,7 @@ func (m *MsgMakeRootResponse) Size() (n int) { return n } -func (m *MsgMakeRootV2) Size() (n int) { +func (m *MsgProvisionFileTree) Size() (n int) { if m == nil { return 0 } @@ -4173,7 +4173,7 @@ func (m *MsgRemoveViewersResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgMakeRootResponse) Unmarshal(dAtA []byte) error { +func (m *MsgProvisionFileTreeResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4196,10 +4196,10 @@ func (m *MsgMakeRootResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgMakeRootResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgProvisionFileTreeResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgMakeRootResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgProvisionFileTreeResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -4223,7 +4223,7 @@ func (m *MsgMakeRootResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgMakeRootV2) Unmarshal(dAtA []byte) error { +func (m *MsgProvisionFileTree) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -4246,10 +4246,10 @@ func (m *MsgMakeRootV2) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgMakeRootV2: wiretype end group for non-group") + return fmt.Errorf("proto: MsgProvisionFileTree: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgMakeRootV2: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgProvisionFileTree: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: From 97430e98d09baf48aea2be343f503db4a10a3070 Mon Sep 17 00:00:00 2001 From: marston Date: Tue, 14 Nov 2023 11:41:02 -0500 Subject: [PATCH 068/256] erin suggestions again :p --- proto/canine_chain/filetree/query.proto | 4 +- proto/canine_chain/rns/query.proto | 8 +- proto/canine_chain/storage/query.proto | 29 +- x/filetree/types/query.pb.go | 86 +- x/filetree/types/query.pb.gw.go | 4 +- x/rns/client/cli/query_bids.go | 2 +- x/rns/client/cli/query_names.go | 2 +- x/rns/keeper/bidding_test.go | 6 +- x/rns/keeper/grpc_query_bids.go | 2 +- x/rns/keeper/grpc_query_names.go | 2 +- x/rns/keeper/keeper_test.go | 10 +- x/rns/keeper/register_test.go | 2 +- x/rns/keeper/transfer_test.go | 2 +- x/rns/types/query.pb.go | 161 ++-- x/rns/types/query.pb.gw.go | 36 +- x/storage/keeper/grpc_query_active_deals.go | 31 +- x/storage/types/query.pb.go | 861 ++++++++++++++++---- x/storage/types/query.pb.gw.go | 204 ++++- 18 files changed, 1102 insertions(+), 350 deletions(-) diff --git a/proto/canine_chain/filetree/query.proto b/proto/canine_chain/filetree/query.proto index dfef7ec35..8b9413310 100644 --- a/proto/canine_chain/filetree/query.proto +++ b/proto/canine_chain/filetree/query.proto @@ -31,12 +31,12 @@ service Query { // Queries a Pubkey by index. rpc PubKey(QueryPubKey) returns (QueryPubKeyResponse) { option (google.api.http).get = - "/jackal/canine-chain/filetree/pubkeys/{address}"; + "/jackal/canine-chain/filetree/pub_keys/{address}"; } // Queries a list of Pubkey items. rpc AllPubKeys(QueryAllPubKeys) returns (QueryAllPubKeysResponse) { - option (google.api.http).get = "/jackal/canine-chain/filetree/pubkeys"; + option (google.api.http).get = "/jackal/canine-chain/filetree/pub_keys"; } } diff --git a/proto/canine_chain/rns/query.proto b/proto/canine_chain/rns/query.proto index 49f3a26b0..b7317562d 100644 --- a/proto/canine_chain/rns/query.proto +++ b/proto/canine_chain/rns/query.proto @@ -22,7 +22,7 @@ service Query { // Queries a Name by index. rpc Name(QueryName) returns (QueryNameResponse) { - option (google.api.http).get = "/jackal/canine-chain/rns/names/{index}"; + option (google.api.http).get = "/jackal/canine-chain/rns/names/{name}"; } // Queries a list of Names. @@ -32,7 +32,7 @@ service Query { // Queries a Bid by index. rpc Bid(QueryBid) returns (QueryBidResponse) { - option (google.api.http).get = "/jackal/canine-chain/rns/bids/{index}"; + option (google.api.http).get = "/jackal/canine-chain/rns/bids/{name}"; } // Queries a list of Bids. @@ -79,7 +79,7 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } -message QueryName { string index = 1; } +message QueryName { string name = 1; } message QueryNameResponse { Names name = 1 [ (gogoproto.nullable) = false ]; } // TODO: Check if this breaks everything to change it to Name @@ -92,7 +92,7 @@ message QueryAllNamesResponse { cosmos.base.query.v1beta1.PageResponse pagination = 2; } -message QueryBid { string index = 1; } +message QueryBid { string name = 1; } message QueryBidResponse { Bids bids = 1 [ (gogoproto.nullable) = false ]; } diff --git a/proto/canine_chain/storage/query.proto b/proto/canine_chain/storage/query.proto index b9a294370..a2c47aad2 100644 --- a/proto/canine_chain/storage/query.proto +++ b/proto/canine_chain/storage/query.proto @@ -38,11 +38,25 @@ service Query { "/jackal/canine-chain/storage/open_files/{provider_address}"; } - // Queries a list of Proofs. + // Queries a Proof. rpc Proof(QueryProof) returns (QueryProofResponse) { option (google.api.http).get = - "/jackal/canine-chain/storage/proof/{provider_address}/{merkle}/{owner}/{start}"; + "/jackal/canine-chain/storage/proofs/{provider_address}/{merkle}/{owner}/{start}"; + } + + // Queries a list of Proofs. + rpc AllProofs(QueryAllProofs) + returns (QueryAllProofsResponse) { + option (google.api.http).get = + "/jackal/canine-chain/storage/proofs"; + } + + // Queries a list of Proofs. + rpc ProofsByAddress(QueryProofsByAddress) + returns (QueryProofsByAddressResponse) { + option (google.api.http).get = + "/jackal/canine-chain/storage/proofs/{provider_address}"; } // Queries a Providers by index. @@ -177,7 +191,16 @@ message QueryProofsByAddress { } message QueryProofsByAddressResponse { - repeated FileProof proof = 1 [ (gogoproto.nullable) = false ]; + repeated FileProof proofs = 1 [ (gogoproto.nullable) = false ]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryAllProofs { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllProofsResponse { + repeated FileProof proofs = 1 [ (gogoproto.nullable) = false ]; cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/x/filetree/types/query.pb.go b/x/filetree/types/query.pb.go index 81763c58e..347169f2c 100644 --- a/x/filetree/types/query.pb.go +++ b/x/filetree/types/query.pb.go @@ -505,49 +505,49 @@ func init() { func init() { proto.RegisterFile("canine_chain/filetree/query.proto", fileDescriptor_f2d116acb9d238bd) } var fileDescriptor_f2d116acb9d238bd = []byte{ - // 660 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x4f, 0x6b, 0xd4, 0x4e, - 0x18, 0xc7, 0x77, 0xfa, 0xf7, 0xd7, 0xe9, 0xaf, 0x88, 0xa3, 0xc5, 0x12, 0x6a, 0x5c, 0xa7, 0x76, - 0xb7, 0x54, 0x9b, 0x61, 0x5b, 0x50, 0x41, 0x45, 0x5a, 0xb0, 0x82, 0x55, 0xa8, 0xf1, 0x20, 0x7a, - 0x59, 0x26, 0xdb, 0x31, 0x8d, 0x9b, 0xcd, 0xa4, 0xf9, 0xa3, 0x2e, 0xa5, 0x20, 0x5e, 0xbd, 0x28, - 0x3d, 0xe9, 0xc9, 0x97, 0xd3, 0x63, 0xc1, 0x8b, 0xa7, 0x22, 0xbb, 0xbe, 0x10, 0xc9, 0x4c, 0x92, - 0x26, 0x65, 0x77, 0xb3, 0x42, 0x6f, 0x49, 0xe6, 0xfb, 0x7c, 0x9f, 0xcf, 0xcc, 0xf3, 0x3c, 0x13, - 0x78, 0xbd, 0x41, 0x1d, 0xcb, 0x61, 0xf5, 0xc6, 0x2e, 0xb5, 0x1c, 0xf2, 0xc6, 0xb2, 0x59, 0xe0, - 0x31, 0x46, 0xf6, 0x42, 0xe6, 0xb5, 0x35, 0xd7, 0xe3, 0x01, 0x47, 0xb3, 0x59, 0x89, 0x96, 0x48, - 0x94, 0xcb, 0x26, 0x37, 0xb9, 0x50, 0x90, 0xe8, 0x49, 0x8a, 0x95, 0x79, 0x93, 0x73, 0xd3, 0x66, - 0x84, 0xba, 0x16, 0xa1, 0x8e, 0xc3, 0x03, 0x1a, 0x58, 0xdc, 0xf1, 0xe3, 0xd5, 0xe5, 0x06, 0xf7, - 0x5b, 0xdc, 0x27, 0x06, 0xf5, 0xe3, 0x1c, 0xe4, 0x5d, 0xcd, 0x60, 0x01, 0xad, 0x11, 0x97, 0x9a, - 0x96, 0x23, 0xc4, 0xb1, 0x16, 0xf7, 0x26, 0x73, 0xa9, 0x47, 0x5b, 0x89, 0x5f, 0x1f, 0xfa, 0xe8, - 0xc1, 0x2f, 0xb0, 0x09, 0x8d, 0x26, 0x8b, 0x77, 0x88, 0x67, 0xe0, 0xf4, 0xf3, 0x08, 0x66, 0x5b, - 0x78, 0x63, 0x1d, 0x5e, 0xca, 0xbc, 0xea, 0xcc, 0x77, 0xb9, 0xe3, 0x33, 0x74, 0x0f, 0x4e, 0xc8, - 0xe4, 0x73, 0xa0, 0x0c, 0x96, 0xa6, 0x57, 0xaf, 0x6a, 0x3d, 0x0f, 0x46, 0x93, 0x61, 0x1b, 0x63, - 0x47, 0x27, 0xd7, 0x4a, 0x7a, 0x1c, 0x82, 0x9f, 0xc0, 0x29, 0xe1, 0xb9, 0x69, 0xd9, 0x0c, 0xcd, - 0xc1, 0x49, 0xba, 0xb3, 0xe3, 0x31, 0x5f, 0x5a, 0x4d, 0xe9, 0xc9, 0x2b, 0x5a, 0x80, 0x33, 0xfc, - 0xbd, 0xc3, 0xbc, 0x7a, 0xb2, 0x3e, 0x22, 0xd6, 0xff, 0x17, 0x1f, 0xd7, 0xe5, 0x37, 0xbc, 0x05, - 0x2f, 0xa6, 0x5e, 0x29, 0xdd, 0x6d, 0x38, 0x16, 0x11, 0xc4, 0x6c, 0xf3, 0x7d, 0xd8, 0xa2, 0x90, - 0x04, 0x4d, 0xe8, 0xf1, 0x4b, 0x38, 0x23, 0xcc, 0xd6, 0x6d, 0x5b, 0x2c, 0xa2, 0x4d, 0x08, 0x4f, - 0x6b, 0x11, 0xdb, 0x55, 0x34, 0x59, 0x38, 0x2d, 0x2a, 0x9c, 0x26, 0x9b, 0x23, 0x2e, 0x9c, 0xb6, - 0x4d, 0x4d, 0xa6, 0xb3, 0xbd, 0x90, 0xf9, 0x81, 0x9e, 0x89, 0xc4, 0xdf, 0x01, 0x9c, 0xcd, 0x39, - 0xa7, 0xa8, 0x77, 0xe1, 0xb8, 0xa8, 0xd0, 0x1c, 0x28, 0x8f, 0x0e, 0xc9, 0x2a, 0x03, 0xd0, 0xe3, - 0x1c, 0xdb, 0x88, 0x60, 0xab, 0x16, 0xb2, 0xc9, 0xb4, 0x39, 0xb8, 0x6a, 0x52, 0xf1, 0xd0, 0xd8, - 0x62, 0xed, 0xfe, 0x05, 0xc1, 0x2f, 0x92, 0x5e, 0x10, 0xc2, 0x74, 0x0b, 0xf7, 0xe1, 0xa4, 0x1b, - 0x1a, 0xf5, 0x26, 0x6b, 0x17, 0x35, 0x83, 0xe8, 0xb3, 0xb4, 0x19, 0x84, 0x0b, 0x7e, 0x05, 0x2f, - 0x24, 0x27, 0x23, 0x7d, 0xcf, 0xef, 0xd4, 0x7f, 0x00, 0x78, 0xe5, 0x8c, 0x77, 0x6f, 0xe8, 0xd1, - 0x7f, 0x84, 0x3e, 0xb7, 0xb3, 0x5f, 0x3d, 0x19, 0x87, 0xe3, 0x02, 0x11, 0x7d, 0x04, 0x70, 0x42, - 0x4e, 0x0b, 0xc2, 0x7d, 0x50, 0x32, 0x83, 0xa8, 0x2c, 0x17, 0x6b, 0x92, 0x84, 0xb8, 0xf2, 0xe9, - 0xe7, 0x9f, 0xc3, 0x91, 0x32, 0x52, 0xc9, 0x5b, 0xda, 0x68, 0x52, 0x9b, 0xc8, 0xd0, 0xb3, 0xf7, - 0x08, 0xfa, 0x06, 0xe0, 0x98, 0x98, 0xc9, 0xf2, 0x20, 0xf3, 0x48, 0xa1, 0x2c, 0x15, 0x29, 0xd2, - 0xe4, 0x8f, 0x44, 0xf2, 0x87, 0xe8, 0x41, 0x3e, 0xf9, 0x4a, 0xaf, 0x6b, 0x8a, 0xec, 0xc7, 0xad, - 0x76, 0x40, 0xf6, 0x73, 0xa3, 0x7f, 0x80, 0x3e, 0x03, 0xf8, 0x5f, 0x3a, 0x96, 0x37, 0x06, 0x65, - 0x4f, 0x54, 0xca, 0xad, 0x61, 0x54, 0x29, 0xe7, 0x4d, 0xc1, 0xb9, 0x88, 0x16, 0x86, 0xe0, 0x44, - 0x5f, 0xa3, 0x62, 0xc9, 0x56, 0x18, 0x5c, 0x2c, 0xa1, 0x29, 0x28, 0x56, 0x6e, 0x9a, 0xf0, 0x1d, - 0xc1, 0x51, 0x43, 0x64, 0x30, 0x87, 0xbc, 0xb3, 0x33, 0x27, 0x86, 0x0e, 0x01, 0x84, 0x99, 0x21, - 0xaa, 0x14, 0xec, 0x3e, 0xd6, 0x29, 0xda, 0x70, 0xba, 0x94, 0x6f, 0x45, 0xf0, 0x55, 0xd1, 0xe2, - 0x50, 0x7c, 0x1b, 0xcf, 0x8e, 0x3a, 0x2a, 0x38, 0xee, 0xa8, 0xe0, 0x77, 0x47, 0x05, 0x5f, 0xba, - 0x6a, 0xe9, 0xb8, 0xab, 0x96, 0x7e, 0x75, 0xd5, 0xd2, 0xeb, 0x35, 0xd3, 0x0a, 0x76, 0x43, 0x43, - 0x6b, 0xf0, 0x56, 0x6c, 0xf5, 0x94, 0x1a, 0x7e, 0xde, 0xee, 0xc3, 0xa9, 0x61, 0xd0, 0x76, 0x99, - 0x6f, 0x4c, 0x88, 0x9f, 0xd4, 0xda, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x0d, 0xa7, 0x03, - 0xab, 0x07, 0x00, 0x00, + // 657 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x4d, 0x6b, 0xd4, 0x40, + 0x18, 0xc7, 0x77, 0xfa, 0x6a, 0xa7, 0x16, 0x71, 0xb4, 0x58, 0x42, 0x8d, 0xeb, 0x54, 0xb7, 0xa5, + 0x6a, 0xc6, 0xb6, 0x20, 0x05, 0x15, 0x69, 0xc1, 0x0a, 0x56, 0xa1, 0xc6, 0x83, 0xe8, 0xa5, 0x4c, + 0xb6, 0x63, 0x1a, 0x9b, 0xcd, 0xa4, 0x79, 0x51, 0x97, 0x52, 0x10, 0xaf, 0x5e, 0x44, 0xbd, 0xe8, + 0xc9, 0x8f, 0xd3, 0x63, 0xc1, 0x8b, 0x27, 0x29, 0xbb, 0x7e, 0x10, 0xc9, 0xcc, 0x24, 0x4d, 0xca, + 0xee, 0x66, 0x85, 0xde, 0x36, 0x99, 0xff, 0xf3, 0x7f, 0x7e, 0xf3, 0xbc, 0x64, 0xe1, 0xd5, 0x3a, + 0xf5, 0x1c, 0x8f, 0x6d, 0xd6, 0xb7, 0xa9, 0xe3, 0x91, 0xd7, 0x8e, 0xcb, 0xa2, 0x80, 0x31, 0xb2, + 0x1b, 0xb3, 0xa0, 0x69, 0xf8, 0x01, 0x8f, 0x38, 0x9a, 0xcc, 0x4b, 0x8c, 0x54, 0xa2, 0x5d, 0xb4, + 0xb9, 0xcd, 0x85, 0x82, 0x24, 0xbf, 0xa4, 0x58, 0x9b, 0xb6, 0x39, 0xb7, 0x5d, 0x46, 0xa8, 0xef, + 0x10, 0xea, 0x79, 0x3c, 0xa2, 0x91, 0xc3, 0xbd, 0x50, 0x9d, 0xce, 0xd7, 0x79, 0xd8, 0xe0, 0x21, + 0xb1, 0x68, 0xa8, 0x72, 0x90, 0xb7, 0x0b, 0x16, 0x8b, 0xe8, 0x02, 0xf1, 0xa9, 0xed, 0x78, 0x42, + 0xac, 0xb4, 0xb8, 0x33, 0x99, 0x4f, 0x03, 0xda, 0x48, 0xfd, 0xba, 0xd0, 0x27, 0x3f, 0xc2, 0x12, + 0x9b, 0xd8, 0xda, 0x61, 0xea, 0x86, 0x78, 0x02, 0x8e, 0x3f, 0x4b, 0x60, 0x36, 0x84, 0x37, 0x36, + 0xe1, 0x85, 0xdc, 0xa3, 0xc9, 0x42, 0x9f, 0x7b, 0x21, 0x43, 0x77, 0xe1, 0x88, 0x4c, 0x3e, 0x05, + 0xaa, 0x60, 0x6e, 0x7c, 0xf1, 0xb2, 0xd1, 0xb1, 0x30, 0x86, 0x0c, 0x5b, 0x1d, 0x3a, 0xf8, 0x73, + 0xa5, 0x62, 0xaa, 0x10, 0xfc, 0x18, 0x8e, 0x09, 0xcf, 0x35, 0xc7, 0x65, 0x68, 0x0a, 0x8e, 0xd2, + 0xad, 0xad, 0x80, 0x85, 0xd2, 0x6a, 0xcc, 0x4c, 0x1f, 0xd1, 0x0c, 0x9c, 0xe0, 0xef, 0x3c, 0x16, + 0x6c, 0xa6, 0xe7, 0x03, 0xe2, 0xfc, 0xac, 0x78, 0xb9, 0x22, 0xdf, 0xe1, 0x75, 0x78, 0x3e, 0xf3, + 0xca, 0xe8, 0xee, 0xc0, 0xa1, 0x84, 0x40, 0xb1, 0x4d, 0x77, 0x61, 0x4b, 0x42, 0x52, 0x34, 0xa1, + 0xc7, 0x2f, 0xe0, 0x84, 0x30, 0x5b, 0x71, 0x5d, 0x71, 0x88, 0xd6, 0x20, 0x3c, 0xee, 0x85, 0xb2, + 0xab, 0x19, 0xb2, 0x71, 0x46, 0xd2, 0x38, 0x43, 0x0e, 0x87, 0x6a, 0x9c, 0xb1, 0x41, 0x6d, 0x66, + 0xb2, 0xdd, 0x98, 0x85, 0x91, 0x99, 0x8b, 0xc4, 0x3f, 0x00, 0x9c, 0x2c, 0x38, 0x67, 0xa8, 0xcb, + 0x70, 0x58, 0x74, 0x68, 0x0a, 0x54, 0x07, 0xfb, 0x64, 0x95, 0x01, 0xe8, 0x51, 0x81, 0x6d, 0x40, + 0xb0, 0xcd, 0x96, 0xb2, 0xc9, 0xb4, 0x05, 0xb8, 0xd9, 0xb4, 0xe3, 0xb1, 0xb5, 0xce, 0x9a, 0xdd, + 0x1b, 0x82, 0x9f, 0xa7, 0xb3, 0x20, 0x84, 0xd9, 0x15, 0xee, 0xc1, 0x51, 0x3f, 0xb6, 0x36, 0x77, + 0x58, 0xb3, 0x6c, 0x18, 0xc4, 0x9c, 0x65, 0xc3, 0x20, 0x5c, 0xf0, 0x4b, 0x78, 0x2e, 0xad, 0x8c, + 0xf4, 0x3d, 0xbd, 0xaa, 0xff, 0x04, 0xf0, 0xd2, 0x09, 0xef, 0xce, 0xd0, 0x83, 0xff, 0x09, 0x7d, + 0x6a, 0xb5, 0x5f, 0x3c, 0x1a, 0x86, 0xc3, 0x02, 0x11, 0x7d, 0x00, 0x70, 0x44, 0x6e, 0x0b, 0xc2, + 0x5d, 0x50, 0x72, 0x8b, 0xa8, 0xcd, 0x97, 0x6b, 0xd2, 0x84, 0xb8, 0xf6, 0xf1, 0xd7, 0xdf, 0xaf, + 0x03, 0x55, 0xa4, 0x93, 0x37, 0xb4, 0xbe, 0x43, 0x5d, 0x22, 0x43, 0x4f, 0x7e, 0x47, 0xd0, 0x77, + 0x00, 0x87, 0xc4, 0x4e, 0x56, 0x7b, 0x99, 0x27, 0x0a, 0x6d, 0xae, 0x4c, 0x91, 0x25, 0x7f, 0x28, + 0x92, 0x3f, 0x40, 0xf7, 0x8b, 0xc9, 0x6f, 0x75, 0xfa, 0x4c, 0x91, 0x3d, 0x35, 0x6a, 0xfb, 0x64, + 0xaf, 0xb0, 0xfa, 0xfb, 0xe8, 0x13, 0x80, 0x67, 0xb2, 0xb5, 0xbc, 0xd6, 0x2b, 0x7b, 0xaa, 0xd2, + 0x6e, 0xf6, 0xa3, 0xca, 0x38, 0x6f, 0x08, 0xce, 0xeb, 0x68, 0xa6, 0x0f, 0x4e, 0xf4, 0x25, 0x69, + 0x96, 0x1c, 0x85, 0xde, 0xcd, 0x12, 0x9a, 0x92, 0x66, 0x15, 0xb6, 0x09, 0x2f, 0x0b, 0x8e, 0x45, + 0x74, 0xbb, 0x37, 0x87, 0x1a, 0xde, 0x5c, 0xc9, 0xd0, 0x37, 0x00, 0x61, 0x6e, 0x8b, 0x6a, 0x25, + 0xd7, 0x57, 0x3a, 0xcd, 0xe8, 0x4f, 0x97, 0x01, 0x1a, 0x02, 0x70, 0x0e, 0xd5, 0xfa, 0x03, 0x5c, + 0x7d, 0x7a, 0xd0, 0xd2, 0xc1, 0x61, 0x4b, 0x07, 0x47, 0x2d, 0x1d, 0x7c, 0x6e, 0xeb, 0x95, 0xc3, + 0xb6, 0x5e, 0xf9, 0xdd, 0xd6, 0x2b, 0xaf, 0x96, 0x6c, 0x27, 0xda, 0x8e, 0x2d, 0xa3, 0xce, 0x1b, + 0xca, 0xeb, 0x09, 0xb5, 0xc2, 0xa2, 0xdf, 0xfb, 0x63, 0xc7, 0xa8, 0xe9, 0xb3, 0xd0, 0x1a, 0x11, + 0x7f, 0x53, 0x4b, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xca, 0x86, 0xf8, 0x0c, 0xad, 0x07, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/filetree/types/query.pb.gw.go b/x/filetree/types/query.pb.gw.go index e0c12b404..0f498972a 100644 --- a/x/filetree/types/query.pb.gw.go +++ b/x/filetree/types/query.pb.gw.go @@ -525,9 +525,9 @@ var ( pattern_Query_AllFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "filetree", "files"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_PubKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "filetree", "pubkeys", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_PubKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "filetree", "pub_keys", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AllPubKeys_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "filetree", "pubkeys"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllPubKeys_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "filetree", "pub_keys"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/rns/client/cli/query_bids.go b/x/rns/client/cli/query_bids.go index 03cffa827..cb6c5c35e 100644 --- a/x/rns/client/cli/query_bids.go +++ b/x/rns/client/cli/query_bids.go @@ -55,7 +55,7 @@ func CmdShowBids() *cobra.Command { argIndex := args[0] params := &types.QueryBid{ - Index: argIndex, + Name: argIndex, } res, err := queryClient.Bid(context.Background(), params) diff --git a/x/rns/client/cli/query_names.go b/x/rns/client/cli/query_names.go index ce0c6c036..c4d41187e 100644 --- a/x/rns/client/cli/query_names.go +++ b/x/rns/client/cli/query_names.go @@ -55,7 +55,7 @@ func CmdShowNames() *cobra.Command { argIndex := args[0] params := &types.QueryName{ - Index: argIndex, + Name: argIndex, } res, err := queryClient.Name(context.Background(), params) diff --git a/x/rns/keeper/bidding_test.go b/x/rns/keeper/bidding_test.go index aa6954aba..de7802d1d 100644 --- a/x/rns/keeper/bidding_test.go +++ b/x/rns/keeper/bidding_test.go @@ -65,7 +65,7 @@ func (suite *KeeperTestSuite) TestMsgAcceptBid() { suite.Require().Equal(eamt.Int64(), biddee) // cost them the amount they bid nameReq := types.QueryName{ - Index: TestName, + Name: TestName, } res, err := suite.queryClient.Name(suite.ctx.Context(), &nameReq) @@ -97,7 +97,7 @@ func (suite *KeeperTestSuite) TestMsgMakeBid() { suite.Require().NoError(err) bidReq := types.QueryBid{ - Index: fmt.Sprintf("%s%s", address.String(), TestName), + Name: fmt.Sprintf("%s%s", address.String(), TestName), } afterbal := suite.bankKeeper.GetAllBalances(suite.ctx, address) @@ -135,7 +135,7 @@ func (suite *KeeperTestSuite) TestMsgCancelBid() { suite.Require().NoError(err) bidReq := types.QueryBid{ - Index: fmt.Sprintf("%s%s", address.String(), TestName), + Name: fmt.Sprintf("%s%s", address.String(), TestName), } afterbal := suite.bankKeeper.GetAllBalances(suite.ctx, address) diff --git a/x/rns/keeper/grpc_query_bids.go b/x/rns/keeper/grpc_query_bids.go index dc7d67210..d86ee5b45 100644 --- a/x/rns/keeper/grpc_query_bids.go +++ b/x/rns/keeper/grpc_query_bids.go @@ -46,7 +46,7 @@ func (k Keeper) Bid(c context.Context, req *types.QueryBid) (*types.QueryBidResp val, found := k.GetBids( ctx, - req.Index, + req.Name, ) if !found { return nil, status.Error(codes.NotFound, "not found") diff --git a/x/rns/keeper/grpc_query_names.go b/x/rns/keeper/grpc_query_names.go index 5bf7c449d..e788dd8d2 100644 --- a/x/rns/keeper/grpc_query_names.go +++ b/x/rns/keeper/grpc_query_names.go @@ -44,7 +44,7 @@ func (k Keeper) Name(c context.Context, req *types.QueryName) (*types.QueryNameR } ctx := sdk.UnwrapSDKContext(c) - n, tld, err := GetNameAndTLD(req.Index) + n, tld, err := GetNameAndTLD(req.Name) if err != nil { return nil, err } diff --git a/x/rns/keeper/keeper_test.go b/x/rns/keeper/keeper_test.go index 412c2105c..a992bc891 100644 --- a/x/rns/keeper/keeper_test.go +++ b/x/rns/keeper/keeper_test.go @@ -107,7 +107,7 @@ func (suite *KeeperTestSuite) TestMakeBid() { suite.rnsKeeper.SetBids(suite.ctx, bid) bidReq := types.QueryBid{ - Index: fmt.Sprintf("%s%s", address.String(), name), + Name: fmt.Sprintf("%s%s", address.String(), name), } _, err = suite.queryClient.Bid(suite.ctx.Context(), &bidReq) @@ -138,7 +138,7 @@ func (suite *KeeperTestSuite) TestUpdateName() { suite.rnsKeeper.SetNames(suite.ctx, name) nameReq := types.QueryName{ - Index: "validname.jkl", + Name: "validname.jkl", } _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) @@ -177,7 +177,7 @@ func (suite *KeeperTestSuite) TestRemoveName() { suite.rnsKeeper.SetNames(suite.ctx, name) nameReq := types.QueryName{ - Index: "validname.jkl", + Name: "validname.jkl", } _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) @@ -213,7 +213,7 @@ func (suite *KeeperTestSuite) TestSetName() { suite.rnsKeeper.SetNames(suite.ctx, name) nameReq := types.QueryName{ - Index: "validname.jkl", + Name: "validname.jkl", } _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) @@ -231,7 +231,7 @@ func (suite *KeeperTestSuite) TestSetName() { suite.rnsKeeper.SetNames(suite.ctx, badname) nameReq = types.QueryName{ - Index: "badname.jkl", + Name: "badname.jkl", } _, err = suite.queryClient.Name(suite.ctx.Context(), &nameReq) suite.Require().Error(err) diff --git a/x/rns/keeper/register_test.go b/x/rns/keeper/register_test.go index e8b9f0988..a8d2bc1e8 100644 --- a/x/rns/keeper/register_test.go +++ b/x/rns/keeper/register_test.go @@ -39,7 +39,7 @@ func (suite *KeeperTestSuite) TestMsgRegisterName() { suite.Require().NoError(err) nameReq := types.QueryName{ - Index: name, + Name: name, } afterbal := suite.bankKeeper.GetAllBalances(suite.ctx, address) diff --git a/x/rns/keeper/transfer_test.go b/x/rns/keeper/transfer_test.go index 88a1feb5e..9e9e4b698 100644 --- a/x/rns/keeper/transfer_test.go +++ b/x/rns/keeper/transfer_test.go @@ -34,7 +34,7 @@ func (suite *KeeperTestSuite) TestMsgTransfer() { suite.Require().NoError(err) nameReq := types.QueryName{ - Index: name, + Name: name, } afterbal := suite.bankKeeper.GetAllBalances(suite.ctx, address) diff --git a/x/rns/types/query.pb.go b/x/rns/types/query.pb.go index a9b3763ed..893970e4c 100644 --- a/x/rns/types/query.pb.go +++ b/x/rns/types/query.pb.go @@ -114,7 +114,7 @@ func (m *QueryParamsResponse) GetParams() Params { } type QueryName struct { - Index string `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } func (m *QueryName) Reset() { *m = QueryName{} } @@ -150,9 +150,9 @@ func (m *QueryName) XXX_DiscardUnknown() { var xxx_messageInfo_QueryName proto.InternalMessageInfo -func (m *QueryName) GetIndex() string { +func (m *QueryName) GetName() string { if m != nil { - return m.Index + return m.Name } return "" } @@ -298,7 +298,7 @@ func (m *QueryAllNamesResponse) GetPagination() *query.PageResponse { } type QueryBid struct { - Index string `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } func (m *QueryBid) Reset() { *m = QueryBid{} } @@ -334,9 +334,9 @@ func (m *QueryBid) XXX_DiscardUnknown() { var xxx_messageInfo_QueryBid proto.InternalMessageInfo -func (m *QueryBid) GetIndex() string { +func (m *QueryBid) GetName() string { if m != nil { - return m.Index + return m.Name } return "" } @@ -979,67 +979,66 @@ func init() { func init() { proto.RegisterFile("canine_chain/rns/query.proto", fileDescriptor_8561b6b36d651aba) } var fileDescriptor_8561b6b36d651aba = []byte{ - // 951 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x4f, 0x24, 0x45, - 0x18, 0xa5, 0x61, 0xf8, 0xf5, 0xad, 0xab, 0x6b, 0x89, 0x2e, 0x36, 0x4b, 0x03, 0xbd, 0x81, 0x81, - 0x4d, 0xe8, 0x5e, 0x96, 0xe8, 0x41, 0x4f, 0x4e, 0x0c, 0x6a, 0xb2, 0xea, 0x3a, 0x26, 0x1a, 0xbd, - 0x90, 0x9a, 0x99, 0x62, 0x28, 0x9d, 0xe9, 0x9a, 0xed, 0x6a, 0x04, 0x82, 0x5c, 0x34, 0xde, 0xd5, - 0xf5, 0x66, 0xe2, 0xc5, 0x7f, 0x66, 0x8f, 0x9b, 0x78, 0xf1, 0x64, 0x0c, 0xf8, 0x87, 0x98, 0xfa, - 0xaa, 0xaa, 0xed, 0x99, 0xa6, 0x86, 0x71, 0x33, 0x37, 0x3a, 0xef, 0xf5, 0xf7, 0x5e, 0xbd, 0xfe, - 0xe6, 0x55, 0x80, 0x3b, 0x4d, 0x9a, 0xf0, 0x84, 0xed, 0x37, 0x0f, 0x29, 0x4f, 0xe2, 0x34, 0x91, - 0xf1, 0xe3, 0x23, 0x96, 0x9e, 0x46, 0xbd, 0x54, 0x64, 0x82, 0xdc, 0x2a, 0xa2, 0x51, 0x9a, 0x48, - 0x7f, 0xa1, 0x2d, 0xda, 0x02, 0xc1, 0x58, 0xfd, 0xa5, 0x79, 0xfe, 0x9d, 0xb6, 0x10, 0xed, 0x0e, - 0x8b, 0x69, 0x8f, 0xc7, 0x34, 0x49, 0x44, 0x46, 0x33, 0x2e, 0x12, 0x69, 0xd0, 0x7b, 0x4d, 0x21, - 0xbb, 0x42, 0xc6, 0x0d, 0x2a, 0x99, 0x1e, 0x1f, 0x7f, 0xb3, 0xd3, 0x60, 0x19, 0xdd, 0x89, 0x7b, - 0xb4, 0xcd, 0x13, 0x24, 0x1b, 0xee, 0x72, 0xc9, 0x4f, 0x8f, 0xa6, 0xb4, 0x6b, 0x47, 0x95, 0xed, - 0x1e, 0x1f, 0x0a, 0xee, 0x46, 0x13, 0xda, 0x65, 0x16, 0x5d, 0x2a, 0xa1, 0x0d, 0xde, 0xb2, 0x60, - 0x50, 0x02, 0x0f, 0x44, 0x2a, 0x69, 0x87, 0x39, 0x5f, 0xe6, 0x09, 0xcf, 0x34, 0x18, 0xde, 0x84, - 0x1b, 0x9f, 0xa8, 0x63, 0x3d, 0x42, 0xab, 0xe1, 0x87, 0xf0, 0x4a, 0xe1, 0xb1, 0xce, 0x64, 0x4f, - 0x24, 0x92, 0x91, 0x37, 0x61, 0x46, 0x9f, 0x65, 0xd1, 0x5b, 0xf5, 0x36, 0x6f, 0x3c, 0x58, 0x8c, - 0x06, 0xd3, 0x8d, 0xf4, 0x1b, 0xb5, 0xca, 0xd3, 0xbf, 0x56, 0x26, 0xea, 0x86, 0x1d, 0xae, 0xc1, - 0x3c, 0x8e, 0xfb, 0x88, 0x76, 0x19, 0x59, 0x80, 0x69, 0x9e, 0xb4, 0xd8, 0x09, 0xce, 0x98, 0xaf, - 0xeb, 0x87, 0x70, 0x0f, 0x5e, 0xce, 0x29, 0xb9, 0xde, 0x0e, 0x54, 0xd4, 0xf1, 0x8d, 0xda, 0xed, - 0xb2, 0x9a, 0x62, 0x5b, 0x31, 0xa4, 0x86, 0x9f, 0xc3, 0x4d, 0x9c, 0xf3, 0x4e, 0xa7, 0x83, 0x20, - 0xd9, 0x03, 0xf8, 0xef, 0x13, 0x99, 0x49, 0x1b, 0x91, 0xfe, 0x9e, 0x91, 0xfa, 0x9e, 0x91, 0x5e, - 0x17, 0xf3, 0x3d, 0xa3, 0x47, 0xb4, 0xcd, 0xea, 0xec, 0xf1, 0x11, 0x93, 0x59, 0xbd, 0xf0, 0x66, - 0xf8, 0xc4, 0x83, 0x57, 0xfb, 0x26, 0x5f, 0xe1, 0x72, 0x6a, 0x44, 0x97, 0xe4, 0xbd, 0x3e, 0x53, - 0x93, 0x68, 0xaa, 0x7a, 0xad, 0x29, 0xad, 0xd7, 0xe7, 0x6a, 0x15, 0xe6, 0xd0, 0x54, 0x8d, 0xb7, - 0x1c, 0xc1, 0xbe, 0x0b, 0xb7, 0x2c, 0x23, 0x77, 0x7c, 0x1f, 0x2a, 0x6a, 0x71, 0x4c, 0x1a, 0xaf, - 0x95, 0x1d, 0xd7, 0x78, 0x2b, 0x37, 0xac, 0x98, 0xe1, 0x67, 0xf0, 0x82, 0x3d, 0xbc, 0xc2, 0xc6, - 0x96, 0xea, 0x4f, 0x1e, 0x2c, 0x14, 0x07, 0x5f, 0x61, 0x71, 0x6a, 0x34, 0x8b, 0xe3, 0xcb, 0x34, - 0x34, 0x67, 0xdd, 0x13, 0xe9, 0xa7, 0xb4, 0xc3, 0x08, 0x29, 0x6c, 0xe1, 0xbc, 0x59, 0xb3, 0xba, - 0xb1, 0x6d, 0x38, 0xb9, 0xed, 0xb7, 0x60, 0xee, 0x40, 0xa4, 0xfb, 0xea, 0x67, 0x67, 0x52, 0x79, - 0xbd, 0x6c, 0x7d, 0x4f, 0xff, 0x2e, 0x8d, 0xfb, 0xd9, 0x03, 0x3d, 0x23, 0xfc, 0x02, 0x5e, 0xb2, - 0x51, 0x58, 0xe9, 0x71, 0xc5, 0xfc, 0x9b, 0x07, 0xb7, 0x07, 0x66, 0x3b, 0x2c, 0x4f, 0xfd, 0x1f, - 0xcb, 0xe3, 0xcb, 0x7c, 0xdd, 0x34, 0xc4, 0x07, 0x09, 0xcf, 0xc8, 0x22, 0xcc, 0xd2, 0x56, 0x2b, - 0x65, 0x52, 0x9a, 0xcc, 0xed, 0x63, 0x58, 0x35, 0x2d, 0xa1, 0x68, 0xf9, 0x01, 0x08, 0x54, 0x54, - 0x93, 0x21, 0x77, 0xae, 0x8e, 0x7f, 0x17, 0x6b, 0x40, 0x71, 0xc7, 0xb7, 0xb0, 0x3f, 0x17, 0x6a, - 0x00, 0x27, 0x17, 0x37, 0xd6, 0xd8, 0x70, 0x6c, 0xac, 0xa2, 0xdb, 0x8d, 0x55, 0xcc, 0xf1, 0xa5, - 0x77, 0x6c, 0xea, 0xfa, 0x21, 0x97, 0xd9, 0xc7, 0xc7, 0x09, 0x6b, 0xe9, 0xea, 0x73, 0xe6, 0x38, - 0x90, 0xc6, 0xe4, 0x73, 0xa7, 0xf1, 0xab, 0x07, 0x4b, 0x57, 0x28, 0xe7, 0x99, 0xec, 0xc2, 0x34, - 0xde, 0x5f, 0xa3, 0x75, 0xa3, 0xe6, 0x8e, 0x2d, 0x96, 0x07, 0xbf, 0x00, 0x4c, 0xa3, 0x3b, 0x72, - 0x0c, 0x33, 0xfa, 0x62, 0x22, 0xcb, 0x65, 0x0b, 0x85, 0x9b, 0xce, 0x5f, 0x1f, 0x0a, 0x5b, 0x95, - 0xb0, 0xfa, 0xdd, 0x1f, 0xff, 0x3c, 0x99, 0x5c, 0x23, 0x2b, 0xf1, 0x57, 0xb4, 0xf9, 0x35, 0xed, - 0xc4, 0xfa, 0xad, 0xed, 0xc1, 0x3b, 0x9f, 0x9c, 0x40, 0x05, 0x2f, 0xbd, 0x25, 0xc7, 0x5c, 0x05, - 0xfa, 0x77, 0x87, 0x80, 0xb9, 0x64, 0x84, 0x92, 0x9b, 0x64, 0xc3, 0x29, 0x89, 0xe9, 0xc5, 0x67, - 0x58, 0xfb, 0xe7, 0xe4, 0x5b, 0x98, 0xcb, 0xef, 0xc0, 0x15, 0x87, 0x80, 0x25, 0xf8, 0xd5, 0x6b, - 0x08, 0xb9, 0x8b, 0x0d, 0x74, 0xb1, 0x4a, 0x82, 0xe1, 0x2e, 0x48, 0x06, 0x53, 0xea, 0x4a, 0xf2, - 0x1d, 0x73, 0x6b, 0xbc, 0xe5, 0x87, 0x6e, 0x2c, 0x97, 0xdb, 0x46, 0xb9, 0x2a, 0x59, 0x77, 0xca, - 0xa9, 0xea, 0xcf, 0xcf, 0x7c, 0x02, 0xb3, 0xf6, 0x82, 0x0a, 0xdc, 0x27, 0x52, 0xb8, 0xbf, 0x31, - 0x1c, 0xcf, 0x1d, 0xac, 0xa3, 0x83, 0x15, 0xb2, 0x3c, 0xd4, 0x01, 0xf9, 0xde, 0x83, 0x59, 0x5b, - 0xda, 0x2e, 0x69, 0x83, 0x3b, 0xa5, 0x07, 0x8a, 0x39, 0xbc, 0x8f, 0xd2, 0xf7, 0xc8, 0xa6, 0x53, - 0xda, 0xf6, 0x76, 0x7c, 0xa6, 0x52, 0x3f, 0x27, 0x3f, 0x78, 0x00, 0x85, 0xdb, 0x63, 0xcd, 0x7d, - 0x46, 0xeb, 0x65, 0xeb, 0x5a, 0x4a, 0x6e, 0x67, 0x0b, 0xed, 0xdc, 0x25, 0x6b, 0xd7, 0xda, 0x21, - 0xa7, 0x50, 0xc1, 0x22, 0x77, 0x6d, 0xbd, 0x02, 0x9d, 0x5b, 0x5f, 0xec, 0xf6, 0x30, 0x46, 0xd1, - 0x2d, 0x52, 0x75, 0x8a, 0xaa, 0x26, 0x8d, 0xcf, 0x4c, 0xb1, 0x9d, 0x93, 0x33, 0x5c, 0x7b, 0xdd, - 0xf9, 0x43, 0xd6, 0x1e, 0x09, 0xc3, 0xd6, 0xbe, 0xaf, 0xdb, 0x47, 0xd8, 0x02, 0x2c, 0xf4, 0xdf, - 0x3d, 0x78, 0x71, 0xa0, 0x83, 0x5d, 0x85, 0xd2, 0x4f, 0xf3, 0xb7, 0x47, 0xa2, 0xe5, 0x7e, 0xde, - 0x46, 0x3f, 0x6f, 0x90, 0x5d, 0xa7, 0x9f, 0x0e, 0x97, 0xd9, 0xbe, 0x50, 0x6f, 0xee, 0x9b, 0x5e, - 0xb0, 0x11, 0xd5, 0xde, 0x7f, 0x7a, 0x11, 0x78, 0xcf, 0x2e, 0x02, 0xef, 0xef, 0x8b, 0xc0, 0xfb, - 0xf1, 0x32, 0x98, 0x78, 0x76, 0x19, 0x4c, 0xfc, 0x79, 0x19, 0x4c, 0x7c, 0x19, 0xb5, 0x79, 0x76, - 0x78, 0xd4, 0x88, 0x9a, 0xa2, 0x6b, 0x06, 0x3f, 0xa4, 0x0d, 0xd9, 0x3f, 0xfc, 0x04, 0xc7, 0x67, - 0xa7, 0x3d, 0x26, 0x1b, 0x33, 0xf8, 0xcf, 0xc3, 0xee, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5f, - 0x1a, 0x6c, 0x79, 0x83, 0x0d, 0x00, 0x00, + // 938 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x6f, 0x1b, 0x45, + 0x14, 0xce, 0x26, 0x6e, 0xec, 0xbe, 0x50, 0x28, 0x43, 0xa1, 0x61, 0xd3, 0xac, 0x9b, 0x2d, 0xb6, + 0x9b, 0x8a, 0xec, 0x36, 0x89, 0xe0, 0x00, 0x27, 0x2c, 0x64, 0x40, 0x2a, 0x50, 0x8c, 0x04, 0x82, + 0x8b, 0x35, 0xb6, 0x27, 0xce, 0x80, 0xbd, 0xe3, 0xee, 0x6c, 0x70, 0xa3, 0xd0, 0x0b, 0x88, 0x3b, + 0xb4, 0x47, 0x24, 0x2e, 0xfc, 0x33, 0x3d, 0x56, 0xe2, 0xc2, 0x09, 0xa1, 0x84, 0x3f, 0x04, 0xcd, + 0xaf, 0x65, 0xed, 0xf5, 0xd8, 0xa6, 0xf2, 0x29, 0x6b, 0x7d, 0xdf, 0xbc, 0xef, 0x7b, 0x6f, 0xdf, + 0x7e, 0xa3, 0xc0, 0x8d, 0x0e, 0x8e, 0x68, 0x44, 0x5a, 0x9d, 0x63, 0x4c, 0xa3, 0x30, 0x8e, 0x78, + 0xf8, 0xe0, 0x84, 0xc4, 0xa7, 0xc1, 0x30, 0x66, 0x09, 0x43, 0x57, 0xb3, 0x68, 0x10, 0x47, 0xdc, + 0xbd, 0xd6, 0x63, 0x3d, 0x26, 0xc1, 0x50, 0x3c, 0x29, 0x9e, 0x7b, 0xa3, 0xc7, 0x58, 0xaf, 0x4f, + 0x42, 0x3c, 0xa4, 0x21, 0x8e, 0x22, 0x96, 0xe0, 0x84, 0xb2, 0x88, 0x6b, 0xf4, 0x4e, 0x87, 0xf1, + 0x01, 0xe3, 0x61, 0x1b, 0x73, 0xa2, 0xca, 0x87, 0xdf, 0xed, 0xb7, 0x49, 0x82, 0xf7, 0xc3, 0x21, + 0xee, 0xd1, 0x48, 0x92, 0x35, 0x77, 0x3b, 0xe7, 0x67, 0x88, 0x63, 0x3c, 0x30, 0xa5, 0xf2, 0x76, + 0x47, 0xc7, 0x8c, 0xda, 0xd1, 0x08, 0x0f, 0x88, 0x41, 0xb7, 0x72, 0x68, 0x9b, 0x76, 0x0d, 0xe8, + 0xe5, 0xc0, 0x23, 0x16, 0x73, 0xdc, 0x27, 0xd6, 0xc3, 0x34, 0xa2, 0x89, 0x02, 0xfd, 0x2b, 0xb0, + 0xf1, 0x99, 0x68, 0xeb, 0xbe, 0xb4, 0xea, 0x7f, 0x0c, 0xaf, 0x64, 0x7e, 0x36, 0x09, 0x1f, 0xb2, + 0x88, 0x13, 0xf4, 0x36, 0xac, 0xab, 0x5e, 0x36, 0x9d, 0x9b, 0xce, 0xed, 0x8d, 0x83, 0xcd, 0x60, + 0x72, 0xba, 0x81, 0x3a, 0x51, 0x2f, 0x3c, 0xfd, 0xab, 0xbc, 0xd2, 0xd4, 0x6c, 0xbf, 0x0c, 0x97, + 0x65, 0xb9, 0x4f, 0xf0, 0x80, 0x20, 0x04, 0x05, 0xd1, 0x93, 0x2c, 0x71, 0xb9, 0x29, 0x9f, 0xfd, + 0x06, 0xbc, 0x9c, 0x12, 0x52, 0xb5, 0xfd, 0x0c, 0x71, 0xe3, 0xe0, 0x7a, 0x5e, 0x4b, 0xb0, 0x8d, + 0x94, 0xaa, 0xf3, 0x25, 0x5c, 0x91, 0x75, 0xde, 0xeb, 0xf7, 0x25, 0x88, 0x1a, 0x00, 0xff, 0xbd, + 0x20, 0x5d, 0xa9, 0x1a, 0xa8, 0xb7, 0x19, 0x88, 0xb7, 0x19, 0xa8, 0x65, 0xd1, 0x6f, 0x33, 0xb8, + 0x8f, 0x7b, 0xa4, 0x49, 0x1e, 0x9c, 0x10, 0x9e, 0x34, 0x33, 0x27, 0xfd, 0x27, 0x0e, 0xbc, 0x3a, + 0x56, 0x79, 0x8a, 0xcb, 0xb5, 0x05, 0x5d, 0xa2, 0x0f, 0xc6, 0x4c, 0xad, 0x4a, 0x53, 0xb5, 0xb9, + 0xa6, 0x94, 0xde, 0x98, 0x2b, 0x0f, 0x4a, 0xd2, 0x54, 0x9d, 0x76, 0xa7, 0x8e, 0xf5, 0x7d, 0xb8, + 0x6a, 0xf0, 0xd4, 0xef, 0x5d, 0x28, 0x88, 0xa5, 0xd1, 0xb3, 0x78, 0x2d, 0xef, 0xb7, 0x4e, 0xbb, + 0xa9, 0x5d, 0xc1, 0xf4, 0xbf, 0x80, 0x17, 0x4c, 0xeb, 0x02, 0x5b, 0xda, 0x4c, 0x7f, 0x71, 0xe0, + 0x5a, 0xb6, 0xf0, 0x14, 0x8b, 0x6b, 0x8b, 0x59, 0x5c, 0xde, 0x44, 0x7d, 0xdd, 0x6b, 0x83, 0xc5, + 0x9f, 0xe3, 0xfe, 0xf4, 0x65, 0x6d, 0x6a, 0xdb, 0x9a, 0x93, 0xda, 0x7e, 0x07, 0x4a, 0x47, 0x2c, + 0x6e, 0x89, 0x4f, 0x4e, 0x4f, 0xe5, 0xf5, 0xbc, 0xf5, 0x86, 0xfa, 0x26, 0xb5, 0xfb, 0xe2, 0x91, + 0xaa, 0xe1, 0x7f, 0x05, 0x2f, 0x99, 0x51, 0x18, 0xe9, 0x65, 0x8d, 0xf9, 0x37, 0x07, 0xae, 0x4f, + 0xd4, 0xb6, 0x58, 0x5e, 0xfb, 0x3f, 0x96, 0x97, 0x37, 0xf3, 0x8a, 0x4e, 0x87, 0x8f, 0x22, 0x9a, + 0xa0, 0x4d, 0x28, 0xe2, 0x6e, 0x37, 0x26, 0x9c, 0xeb, 0x99, 0x9b, 0x9f, 0x7e, 0x4d, 0x67, 0x84, + 0xa0, 0xa5, 0x0d, 0x20, 0x28, 0x88, 0x14, 0x93, 0xdc, 0x52, 0x53, 0x3e, 0x67, 0x43, 0x40, 0x70, + 0x97, 0xb7, 0xb0, 0x8f, 0x33, 0x21, 0x20, 0x2b, 0x67, 0x37, 0x56, 0xdb, 0xb0, 0x6c, 0xac, 0xa0, + 0x9b, 0x8d, 0x15, 0xcc, 0xe5, 0x4d, 0x6f, 0xa4, 0xa3, 0xfa, 0x1e, 0xe5, 0xc9, 0xa7, 0xa3, 0x88, + 0x74, 0x55, 0xf0, 0x59, 0xe7, 0x38, 0x31, 0x8d, 0xd5, 0xe7, 0x9e, 0xc6, 0xaf, 0x0e, 0x6c, 0x4d, + 0x51, 0x4e, 0x67, 0x72, 0x08, 0x97, 0xe4, 0xdd, 0xb5, 0x58, 0x32, 0x2a, 0xee, 0xd2, 0xc6, 0x72, + 0xf0, 0x18, 0xe0, 0x92, 0x74, 0x87, 0x46, 0xb0, 0xae, 0x2e, 0x25, 0xb4, 0x9d, 0xb7, 0x90, 0xb9, + 0xe5, 0xdc, 0xca, 0x4c, 0xd8, 0xa8, 0xf8, 0xb5, 0x1f, 0xfe, 0xf8, 0xe7, 0xc9, 0xea, 0x0e, 0x2a, + 0x87, 0xdf, 0xe0, 0xce, 0xb7, 0xb8, 0x1f, 0xaa, 0x53, 0x7b, 0x93, 0xf7, 0x3d, 0x1a, 0x41, 0x41, + 0x5e, 0x78, 0x5b, 0x96, 0xba, 0x02, 0x74, 0x6f, 0xcd, 0x00, 0x53, 0xc9, 0x3d, 0x29, 0x59, 0x43, + 0x15, 0xab, 0xa4, 0x9c, 0x5e, 0x78, 0x26, 0xfe, 0x3c, 0x42, 0xdf, 0x43, 0x29, 0xbd, 0x00, 0xcb, + 0x96, 0xfa, 0x86, 0xe0, 0xd6, 0xe6, 0x10, 0x52, 0x13, 0x55, 0x69, 0xe2, 0x26, 0xf2, 0x66, 0x9b, + 0x40, 0x1c, 0xd6, 0xc4, 0x7d, 0xe4, 0x5a, 0xea, 0xd6, 0x69, 0xd7, 0xf5, 0xed, 0x58, 0x2a, 0xf7, + 0xa6, 0x94, 0xab, 0xa2, 0x37, 0xac, 0x72, 0x22, 0xf9, 0x4d, 0xcb, 0x0f, 0xa1, 0x68, 0xae, 0x27, + 0xcf, 0xde, 0x90, 0xc0, 0xdd, 0xea, 0x6c, 0x3c, 0x35, 0x50, 0x91, 0x06, 0xca, 0x68, 0x7b, 0xa6, + 0x01, 0xf4, 0xa3, 0x03, 0x45, 0x13, 0xd9, 0x36, 0x69, 0x8d, 0x5b, 0xa5, 0x27, 0x62, 0xd9, 0xbf, + 0x2b, 0xa5, 0xef, 0xa0, 0xdb, 0x56, 0x69, 0x93, 0xda, 0xa6, 0xff, 0x9f, 0x1c, 0x80, 0xcc, 0xdd, + 0xb1, 0x63, 0xef, 0xd1, 0x78, 0xd9, 0x9d, 0x4b, 0x49, 0xed, 0xec, 0x4a, 0x3b, 0xb7, 0xd0, 0xce, + 0x5c, 0x3b, 0xe8, 0x14, 0x0a, 0x32, 0xc6, 0x6d, 0x3b, 0x2f, 0x40, 0xeb, 0xce, 0x67, 0x93, 0xdd, + 0x0f, 0xa5, 0xe8, 0x2e, 0xaa, 0x59, 0x45, 0x45, 0x8e, 0x86, 0x67, 0x3a, 0xd6, 0x1e, 0xa1, 0x33, + 0xb9, 0xf5, 0x2a, 0xf1, 0x67, 0x6c, 0xbd, 0x24, 0xcc, 0xda, 0xfa, 0xb1, 0x64, 0x5f, 0x60, 0x0b, + 0x64, 0x9c, 0xff, 0xee, 0xc0, 0x8b, 0x13, 0x09, 0x6c, 0x8b, 0x93, 0x71, 0x9a, 0xbb, 0xb7, 0x10, + 0x2d, 0xf5, 0xf3, 0xae, 0xf4, 0xf3, 0x16, 0x3a, 0xb4, 0xfa, 0xe9, 0x53, 0x9e, 0xb4, 0x98, 0x38, + 0xd9, 0xd2, 0xa9, 0x60, 0x46, 0x54, 0xff, 0xf0, 0xe9, 0xb9, 0xe7, 0x3c, 0x3b, 0xf7, 0x9c, 0xbf, + 0xcf, 0x3d, 0xe7, 0xe7, 0x0b, 0x6f, 0xe5, 0xd9, 0x85, 0xb7, 0xf2, 0xe7, 0x85, 0xb7, 0xf2, 0x75, + 0xd0, 0xa3, 0xc9, 0xf1, 0x49, 0x3b, 0xe8, 0xb0, 0x81, 0x2e, 0x7c, 0x0f, 0xb7, 0xf9, 0x78, 0xf1, + 0x87, 0xb2, 0x7c, 0x72, 0x3a, 0x24, 0xbc, 0xbd, 0x2e, 0xff, 0x6d, 0x38, 0xfc, 0x37, 0x00, 0x00, + 0xff, 0xff, 0x03, 0x20, 0x2a, 0x1b, 0x7d, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1542,10 +1541,10 @@ func (m *QueryName) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Index) > 0 { - i -= len(m.Index) - copy(dAtA[i:], m.Index) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Index))) + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Name))) i-- dAtA[i] = 0xa } @@ -1689,10 +1688,10 @@ func (m *QueryBid) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.Index) > 0 { - i -= len(m.Index) - copy(dAtA[i:], m.Index) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Index))) + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Name))) i-- dAtA[i] = 0xa } @@ -2238,7 +2237,7 @@ func (m *QueryName) Size() (n int) { } var l int _ = l - l = len(m.Index) + l = len(m.Name) if l > 0 { n += 1 + l + sovQuery(uint64(l)) } @@ -2294,7 +2293,7 @@ func (m *QueryBid) Size() (n int) { } var l int _ = l - l = len(m.Index) + l = len(m.Name) if l > 0 { n += 1 + l + sovQuery(uint64(l)) } @@ -2663,7 +2662,7 @@ func (m *QueryName) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2691,7 +2690,7 @@ func (m *QueryName) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Index = string(dAtA[iNdEx:postIndex]) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -3034,7 +3033,7 @@ func (m *QueryBid) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -3062,7 +3061,7 @@ func (m *QueryBid) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Index = string(dAtA[iNdEx:postIndex]) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/x/rns/types/query.pb.gw.go b/x/rns/types/query.pb.gw.go index 6b7abaf7e..38be4f02d 100644 --- a/x/rns/types/query.pb.gw.go +++ b/x/rns/types/query.pb.gw.go @@ -62,15 +62,15 @@ func request_Query_Name_0(ctx context.Context, marshaler runtime.Marshaler, clie _ = err ) - val, ok = pathParams["index"] + val, ok = pathParams["name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "index") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") } - protoReq.Index, err = runtime.String(val) + protoReq.Name, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "index", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } msg, err := client.Name(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -89,15 +89,15 @@ func local_request_Query_Name_0(ctx context.Context, marshaler runtime.Marshaler _ = err ) - val, ok = pathParams["index"] + val, ok = pathParams["name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "index") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") } - protoReq.Index, err = runtime.String(val) + protoReq.Name, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "index", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } msg, err := server.Name(ctx, &protoReq) @@ -152,15 +152,15 @@ func request_Query_Bid_0(ctx context.Context, marshaler runtime.Marshaler, clien _ = err ) - val, ok = pathParams["index"] + val, ok = pathParams["name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "index") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") } - protoReq.Index, err = runtime.String(val) + protoReq.Name, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "index", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } msg, err := client.Bid(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -179,15 +179,15 @@ func local_request_Query_Bid_0(ctx context.Context, marshaler runtime.Marshaler, _ = err ) - val, ok = pathParams["index"] + val, ok = pathParams["name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "index") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") } - protoReq.Index, err = runtime.String(val) + protoReq.Name, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "index", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } msg, err := server.Bid(ctx, &protoReq) @@ -966,11 +966,11 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "rns", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Name_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "rns", "names", "index"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Name_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "rns", "names", "name"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_AllNames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "rns", "names"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Bid_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "rns", "bids", "index"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Bid_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "rns", "bids", "name"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_AllBids_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "rns", "bids"}, "", runtime.AssumeColonVerbOpt(false))) diff --git a/x/storage/keeper/grpc_query_active_deals.go b/x/storage/keeper/grpc_query_active_deals.go index 0242a3c85..27ea9a4c3 100644 --- a/x/storage/keeper/grpc_query_active_deals.go +++ b/x/storage/keeper/grpc_query_active_deals.go @@ -116,7 +116,34 @@ func (k Keeper) Proof(c context.Context, req *types.QueryProof) (*types.QueryPro return &types.QueryProofResponse{Proof: val}, nil } -func (k Keeper) AllProofs(c context.Context, req *types.QueryProofsByAddress) (*types.QueryProofsByAddressResponse, error) { +func (k Keeper) AllProofs(c context.Context, req *types.QueryAllProofs) (*types.QueryAllProofsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var proofs []types.FileProof + ctx := sdk.UnwrapSDKContext(c) + + store := ctx.KVStore(k.storeKey) + proofStore := prefix.NewStore(store, types.KeyPrefix(types.ProofKeyPrefix)) + + pageRes, err := query.Paginate(proofStore, req.Pagination, func(key []byte, value []byte) error { + var proof types.FileProof + if err := k.cdc.Unmarshal(value, &proof); err != nil { + return err + } + + proofs = append(proofs, proof) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllProofsResponse{Proofs: proofs, Pagination: pageRes}, nil +} + +func (k Keeper) ProofsByAddress(c context.Context, req *types.QueryProofsByAddress) (*types.QueryProofsByAddressResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -140,5 +167,5 @@ func (k Keeper) AllProofs(c context.Context, req *types.QueryProofsByAddress) (* return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryProofsByAddressResponse{Proof: proofs, Pagination: pageRes}, nil + return &types.QueryProofsByAddressResponse{Proofs: proofs, Pagination: pageRes}, nil } diff --git a/x/storage/types/query.pb.go b/x/storage/types/query.pb.go index c6a26a5cf..d5462986b 100644 --- a/x/storage/types/query.pb.go +++ b/x/storage/types/query.pb.go @@ -279,7 +279,7 @@ func (m *QueryProofsByAddress) GetPagination() *query.PageRequest { } type QueryProofsByAddressResponse struct { - Proof []FileProof `protobuf:"bytes,1,rep,name=proof,proto3" json:"proof"` + Proofs []FileProof `protobuf:"bytes,1,rep,name=proofs,proto3" json:"proofs"` Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } @@ -316,9 +316,9 @@ func (m *QueryProofsByAddressResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryProofsByAddressResponse proto.InternalMessageInfo -func (m *QueryProofsByAddressResponse) GetProof() []FileProof { +func (m *QueryProofsByAddressResponse) GetProofs() []FileProof { if m != nil { - return m.Proof + return m.Proofs } return nil } @@ -330,6 +330,102 @@ func (m *QueryProofsByAddressResponse) GetPagination() *query.PageResponse { return nil } +type QueryAllProofs struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllProofs) Reset() { *m = QueryAllProofs{} } +func (m *QueryAllProofs) String() string { return proto.CompactTextString(m) } +func (*QueryAllProofs) ProtoMessage() {} +func (*QueryAllProofs) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{6} +} +func (m *QueryAllProofs) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllProofs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllProofs.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 *QueryAllProofs) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllProofs.Merge(m, src) +} +func (m *QueryAllProofs) XXX_Size() int { + return m.Size() +} +func (m *QueryAllProofs) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllProofs.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllProofs proto.InternalMessageInfo + +func (m *QueryAllProofs) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllProofsResponse struct { + Proofs []FileProof `protobuf:"bytes,1,rep,name=proofs,proto3" json:"proofs"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllProofsResponse) Reset() { *m = QueryAllProofsResponse{} } +func (m *QueryAllProofsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllProofsResponse) ProtoMessage() {} +func (*QueryAllProofsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9fe03bff51a37284, []int{7} +} +func (m *QueryAllProofsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllProofsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllProofsResponse.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 *QueryAllProofsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllProofsResponse.Merge(m, src) +} +func (m *QueryAllProofsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllProofsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllProofsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllProofsResponse proto.InternalMessageInfo + +func (m *QueryAllProofsResponse) GetProofs() []FileProof { + if m != nil { + return m.Proofs + } + return nil +} + +func (m *QueryAllProofsResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + type QueryFile struct { Merkle []byte `protobuf:"bytes,1,opt,name=merkle,proto3" json:"merkle,omitempty"` Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` @@ -340,7 +436,7 @@ func (m *QueryFile) Reset() { *m = QueryFile{} } func (m *QueryFile) String() string { return proto.CompactTextString(m) } func (*QueryFile) ProtoMessage() {} func (*QueryFile) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{6} + return fileDescriptor_9fe03bff51a37284, []int{8} } func (m *QueryFile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -398,7 +494,7 @@ func (m *QueryFileResponse) Reset() { *m = QueryFileResponse{} } func (m *QueryFileResponse) String() string { return proto.CompactTextString(m) } func (*QueryFileResponse) ProtoMessage() {} func (*QueryFileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{7} + return fileDescriptor_9fe03bff51a37284, []int{9} } func (m *QueryFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -442,7 +538,7 @@ func (m *QueryAllFiles) Reset() { *m = QueryAllFiles{} } func (m *QueryAllFiles) String() string { return proto.CompactTextString(m) } func (*QueryAllFiles) ProtoMessage() {} func (*QueryAllFiles) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{8} + return fileDescriptor_9fe03bff51a37284, []int{10} } func (m *QueryAllFiles) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -487,7 +583,7 @@ func (m *QueryOpenFiles) Reset() { *m = QueryOpenFiles{} } func (m *QueryOpenFiles) String() string { return proto.CompactTextString(m) } func (*QueryOpenFiles) ProtoMessage() {} func (*QueryOpenFiles) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{9} + return fileDescriptor_9fe03bff51a37284, []int{11} } func (m *QueryOpenFiles) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -539,7 +635,7 @@ func (m *QueryAllFilesResponse) Reset() { *m = QueryAllFilesResponse{} } func (m *QueryAllFilesResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllFilesResponse) ProtoMessage() {} func (*QueryAllFilesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{10} + return fileDescriptor_9fe03bff51a37284, []int{12} } func (m *QueryAllFilesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -590,7 +686,7 @@ func (m *QueryProvider) Reset() { *m = QueryProvider{} } func (m *QueryProvider) String() string { return proto.CompactTextString(m) } func (*QueryProvider) ProtoMessage() {} func (*QueryProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{11} + return fileDescriptor_9fe03bff51a37284, []int{13} } func (m *QueryProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -634,7 +730,7 @@ func (m *QueryProviderResponse) Reset() { *m = QueryProviderResponse{} } func (m *QueryProviderResponse) String() string { return proto.CompactTextString(m) } func (*QueryProviderResponse) ProtoMessage() {} func (*QueryProviderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{12} + return fileDescriptor_9fe03bff51a37284, []int{14} } func (m *QueryProviderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -678,7 +774,7 @@ func (m *QueryAllProviders) Reset() { *m = QueryAllProviders{} } func (m *QueryAllProviders) String() string { return proto.CompactTextString(m) } func (*QueryAllProviders) ProtoMessage() {} func (*QueryAllProviders) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{13} + return fileDescriptor_9fe03bff51a37284, []int{15} } func (m *QueryAllProviders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -723,7 +819,7 @@ func (m *QueryAllProvidersResponse) Reset() { *m = QueryAllProvidersResp func (m *QueryAllProvidersResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllProvidersResponse) ProtoMessage() {} func (*QueryAllProvidersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{14} + return fileDescriptor_9fe03bff51a37284, []int{16} } func (m *QueryAllProvidersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -777,7 +873,7 @@ func (m *QueryAttestation) Reset() { *m = QueryAttestation{} } func (m *QueryAttestation) String() string { return proto.CompactTextString(m) } func (*QueryAttestation) ProtoMessage() {} func (*QueryAttestation) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{15} + return fileDescriptor_9fe03bff51a37284, []int{17} } func (m *QueryAttestation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -842,7 +938,7 @@ func (m *QueryAttestationResponse) Reset() { *m = QueryAttestationRespon func (m *QueryAttestationResponse) String() string { return proto.CompactTextString(m) } func (*QueryAttestationResponse) ProtoMessage() {} func (*QueryAttestationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{16} + return fileDescriptor_9fe03bff51a37284, []int{18} } func (m *QueryAttestationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -886,7 +982,7 @@ func (m *QueryAllAttestations) Reset() { *m = QueryAllAttestations{} } func (m *QueryAllAttestations) String() string { return proto.CompactTextString(m) } func (*QueryAllAttestations) ProtoMessage() {} func (*QueryAllAttestations) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{17} + return fileDescriptor_9fe03bff51a37284, []int{19} } func (m *QueryAllAttestations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -931,7 +1027,7 @@ func (m *QueryAllAttestationsResponse) Reset() { *m = QueryAllAttestatio func (m *QueryAllAttestationsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllAttestationsResponse) ProtoMessage() {} func (*QueryAllAttestationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{18} + return fileDescriptor_9fe03bff51a37284, []int{20} } func (m *QueryAllAttestationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -985,7 +1081,7 @@ func (m *QueryReport) Reset() { *m = QueryReport{} } func (m *QueryReport) String() string { return proto.CompactTextString(m) } func (*QueryReport) ProtoMessage() {} func (*QueryReport) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{19} + return fileDescriptor_9fe03bff51a37284, []int{21} } func (m *QueryReport) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1050,7 +1146,7 @@ func (m *QueryReportResponse) Reset() { *m = QueryReportResponse{} } func (m *QueryReportResponse) String() string { return proto.CompactTextString(m) } func (*QueryReportResponse) ProtoMessage() {} func (*QueryReportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{20} + return fileDescriptor_9fe03bff51a37284, []int{22} } func (m *QueryReportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1094,7 +1190,7 @@ func (m *QueryAllReports) Reset() { *m = QueryAllReports{} } func (m *QueryAllReports) String() string { return proto.CompactTextString(m) } func (*QueryAllReports) ProtoMessage() {} func (*QueryAllReports) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{21} + return fileDescriptor_9fe03bff51a37284, []int{23} } func (m *QueryAllReports) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1139,7 +1235,7 @@ func (m *QueryAllReportsResponse) Reset() { *m = QueryAllReportsResponse func (m *QueryAllReportsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllReportsResponse) ProtoMessage() {} func (*QueryAllReportsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{22} + return fileDescriptor_9fe03bff51a37284, []int{24} } func (m *QueryAllReportsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1190,7 +1286,7 @@ func (m *QueryFreeSpace) Reset() { *m = QueryFreeSpace{} } func (m *QueryFreeSpace) String() string { return proto.CompactTextString(m) } func (*QueryFreeSpace) ProtoMessage() {} func (*QueryFreeSpace) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{23} + return fileDescriptor_9fe03bff51a37284, []int{25} } func (m *QueryFreeSpace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1234,7 +1330,7 @@ func (m *QueryStoreCount) Reset() { *m = QueryStoreCount{} } func (m *QueryStoreCount) String() string { return proto.CompactTextString(m) } func (*QueryStoreCount) ProtoMessage() {} func (*QueryStoreCount) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{24} + return fileDescriptor_9fe03bff51a37284, []int{26} } func (m *QueryStoreCount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1278,7 +1374,7 @@ func (m *QueryFreeSpaceResponse) Reset() { *m = QueryFreeSpaceResponse{} func (m *QueryFreeSpaceResponse) String() string { return proto.CompactTextString(m) } func (*QueryFreeSpaceResponse) ProtoMessage() {} func (*QueryFreeSpaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{25} + return fileDescriptor_9fe03bff51a37284, []int{27} } func (m *QueryFreeSpaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1322,7 +1418,7 @@ func (m *QueryStoreCountResponse) Reset() { *m = QueryStoreCountResponse func (m *QueryStoreCountResponse) String() string { return proto.CompactTextString(m) } func (*QueryStoreCountResponse) ProtoMessage() {} func (*QueryStoreCountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{26} + return fileDescriptor_9fe03bff51a37284, []int{28} } func (m *QueryStoreCountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1366,7 +1462,7 @@ func (m *QueryFindFile) Reset() { *m = QueryFindFile{} } func (m *QueryFindFile) String() string { return proto.CompactTextString(m) } func (*QueryFindFile) ProtoMessage() {} func (*QueryFindFile) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{27} + return fileDescriptor_9fe03bff51a37284, []int{29} } func (m *QueryFindFile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1410,7 +1506,7 @@ func (m *QueryFindFileResponse) Reset() { *m = QueryFindFileResponse{} } func (m *QueryFindFileResponse) String() string { return proto.CompactTextString(m) } func (*QueryFindFileResponse) ProtoMessage() {} func (*QueryFindFileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{28} + return fileDescriptor_9fe03bff51a37284, []int{30} } func (m *QueryFindFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1454,7 +1550,7 @@ func (m *QueryClientFreeSpace) Reset() { *m = QueryClientFreeSpace{} } func (m *QueryClientFreeSpace) String() string { return proto.CompactTextString(m) } func (*QueryClientFreeSpace) ProtoMessage() {} func (*QueryClientFreeSpace) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{29} + return fileDescriptor_9fe03bff51a37284, []int{31} } func (m *QueryClientFreeSpace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1498,7 +1594,7 @@ func (m *QueryClientFreeSpaceResponse) Reset() { *m = QueryClientFreeSpa func (m *QueryClientFreeSpaceResponse) String() string { return proto.CompactTextString(m) } func (*QueryClientFreeSpaceResponse) ProtoMessage() {} func (*QueryClientFreeSpaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{30} + return fileDescriptor_9fe03bff51a37284, []int{32} } func (m *QueryClientFreeSpaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1542,7 +1638,7 @@ func (m *QueryPayData) Reset() { *m = QueryPayData{} } func (m *QueryPayData) String() string { return proto.CompactTextString(m) } func (*QueryPayData) ProtoMessage() {} func (*QueryPayData) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{31} + return fileDescriptor_9fe03bff51a37284, []int{33} } func (m *QueryPayData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1587,7 +1683,7 @@ func (m *QueryPayDataResponse) Reset() { *m = QueryPayDataResponse{} } func (m *QueryPayDataResponse) String() string { return proto.CompactTextString(m) } func (*QueryPayDataResponse) ProtoMessage() {} func (*QueryPayDataResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{32} + return fileDescriptor_9fe03bff51a37284, []int{34} } func (m *QueryPayDataResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1638,7 +1734,7 @@ func (m *QueryStoragePaymentInfo) Reset() { *m = QueryStoragePaymentInfo func (m *QueryStoragePaymentInfo) String() string { return proto.CompactTextString(m) } func (*QueryStoragePaymentInfo) ProtoMessage() {} func (*QueryStoragePaymentInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{33} + return fileDescriptor_9fe03bff51a37284, []int{35} } func (m *QueryStoragePaymentInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1682,7 +1778,7 @@ func (m *QueryStoragePaymentInfoResponse) Reset() { *m = QueryStoragePay func (m *QueryStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryStoragePaymentInfoResponse) ProtoMessage() {} func (*QueryStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{34} + return fileDescriptor_9fe03bff51a37284, []int{36} } func (m *QueryStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1726,7 +1822,7 @@ func (m *QueryAllStoragePaymentInfo) Reset() { *m = QueryAllStoragePayme func (m *QueryAllStoragePaymentInfo) String() string { return proto.CompactTextString(m) } func (*QueryAllStoragePaymentInfo) ProtoMessage() {} func (*QueryAllStoragePaymentInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{35} + return fileDescriptor_9fe03bff51a37284, []int{37} } func (m *QueryAllStoragePaymentInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1771,7 +1867,7 @@ func (m *QueryAllStoragePaymentInfoResponse) Reset() { *m = QueryAllStor func (m *QueryAllStoragePaymentInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllStoragePaymentInfoResponse) ProtoMessage() {} func (*QueryAllStoragePaymentInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{36} + return fileDescriptor_9fe03bff51a37284, []int{38} } func (m *QueryAllStoragePaymentInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1823,7 +1919,7 @@ func (m *QueryFileUploadCheck) Reset() { *m = QueryFileUploadCheck{} } func (m *QueryFileUploadCheck) String() string { return proto.CompactTextString(m) } func (*QueryFileUploadCheck) ProtoMessage() {} func (*QueryFileUploadCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{37} + return fileDescriptor_9fe03bff51a37284, []int{39} } func (m *QueryFileUploadCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1874,7 +1970,7 @@ func (m *QueryFileUploadCheckResponse) Reset() { *m = QueryFileUploadChe func (m *QueryFileUploadCheckResponse) String() string { return proto.CompactTextString(m) } func (*QueryFileUploadCheckResponse) ProtoMessage() {} func (*QueryFileUploadCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{38} + return fileDescriptor_9fe03bff51a37284, []int{40} } func (m *QueryFileUploadCheckResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1919,7 +2015,7 @@ func (m *QueryPriceCheck) Reset() { *m = QueryPriceCheck{} } func (m *QueryPriceCheck) String() string { return proto.CompactTextString(m) } func (*QueryPriceCheck) ProtoMessage() {} func (*QueryPriceCheck) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{39} + return fileDescriptor_9fe03bff51a37284, []int{41} } func (m *QueryPriceCheck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1970,7 +2066,7 @@ func (m *QueryPriceCheckResponse) Reset() { *m = QueryPriceCheckResponse func (m *QueryPriceCheckResponse) String() string { return proto.CompactTextString(m) } func (*QueryPriceCheckResponse) ProtoMessage() {} func (*QueryPriceCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{40} + return fileDescriptor_9fe03bff51a37284, []int{42} } func (m *QueryPriceCheckResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2013,7 +2109,7 @@ func (m *QueryActiveProviders) Reset() { *m = QueryActiveProviders{} } func (m *QueryActiveProviders) String() string { return proto.CompactTextString(m) } func (*QueryActiveProviders) ProtoMessage() {} func (*QueryActiveProviders) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{41} + return fileDescriptor_9fe03bff51a37284, []int{43} } func (m *QueryActiveProviders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2050,7 +2146,7 @@ func (m *QueryActiveProvidersResponse) Reset() { *m = QueryActiveProvide func (m *QueryActiveProvidersResponse) String() string { return proto.CompactTextString(m) } func (*QueryActiveProvidersResponse) ProtoMessage() {} func (*QueryActiveProvidersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{42} + return fileDescriptor_9fe03bff51a37284, []int{44} } func (m *QueryActiveProvidersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2093,7 +2189,7 @@ func (m *QueryStorageStats) Reset() { *m = QueryStorageStats{} } func (m *QueryStorageStats) String() string { return proto.CompactTextString(m) } func (*QueryStorageStats) ProtoMessage() {} func (*QueryStorageStats) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{43} + return fileDescriptor_9fe03bff51a37284, []int{45} } func (m *QueryStorageStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2134,7 +2230,7 @@ func (m *QueryStorageStatsResponse) Reset() { *m = QueryStorageStatsResp func (m *QueryStorageStatsResponse) String() string { return proto.CompactTextString(m) } func (*QueryStorageStatsResponse) ProtoMessage() {} func (*QueryStorageStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9fe03bff51a37284, []int{44} + return fileDescriptor_9fe03bff51a37284, []int{46} } func (m *QueryStorageStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2198,6 +2294,8 @@ func init() { proto.RegisterType((*QueryProofResponse)(nil), "canine_chain.storage.QueryProofResponse") proto.RegisterType((*QueryProofsByAddress)(nil), "canine_chain.storage.QueryProofsByAddress") proto.RegisterType((*QueryProofsByAddressResponse)(nil), "canine_chain.storage.QueryProofsByAddressResponse") + proto.RegisterType((*QueryAllProofs)(nil), "canine_chain.storage.QueryAllProofs") + proto.RegisterType((*QueryAllProofsResponse)(nil), "canine_chain.storage.QueryAllProofsResponse") proto.RegisterType((*QueryFile)(nil), "canine_chain.storage.QueryFile") proto.RegisterType((*QueryFileResponse)(nil), "canine_chain.storage.QueryFileResponse") proto.RegisterType((*QueryAllFiles)(nil), "canine_chain.storage.QueryAllFiles") @@ -2243,134 +2341,139 @@ func init() { func init() { proto.RegisterFile("canine_chain/storage/query.proto", fileDescriptor_9fe03bff51a37284) } var fileDescriptor_9fe03bff51a37284 = []byte{ - // 2021 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6f, 0x1c, 0x49, - 0x11, 0x4f, 0xfb, 0xeb, 0xbc, 0xb5, 0xce, 0x25, 0xf4, 0xf9, 0x82, 0x59, 0x19, 0xdb, 0xe9, 0xc4, - 0x1f, 0x71, 0xe2, 0x9d, 0xd8, 0x21, 0x10, 0x92, 0x4b, 0x74, 0xb6, 0x83, 0x43, 0xc4, 0xe5, 0xe2, - 0x8c, 0x15, 0x10, 0x87, 0xc4, 0xd0, 0xde, 0x6d, 0x6f, 0x06, 0xaf, 0x67, 0xe6, 0x66, 0x66, 0x03, - 0x2b, 0xcb, 0x2f, 0xe4, 0x05, 0xde, 0x4e, 0x42, 0x41, 0x70, 0x42, 0x42, 0x42, 0x11, 0x70, 0xe2, - 0x1d, 0x10, 0x7f, 0xc1, 0xbd, 0x71, 0x12, 0x2f, 0x88, 0x87, 0x08, 0x25, 0xf0, 0x7f, 0xa0, 0xfe, - 0x98, 0xde, 0xde, 0xf5, 0x6c, 0xef, 0x1a, 0x2d, 0xba, 0x27, 0x6f, 0xf7, 0xfe, 0xaa, 0xea, 0x57, - 0x55, 0xdd, 0xd5, 0x55, 0x6b, 0x98, 0xab, 0xd0, 0xc0, 0x0f, 0x98, 0x57, 0x79, 0x42, 0xfd, 0xc0, - 0x49, 0xd2, 0x30, 0xa6, 0x35, 0xe6, 0x7c, 0xd8, 0x60, 0x71, 0xb3, 0x1c, 0xc5, 0x61, 0x1a, 0xe2, - 0x49, 0x13, 0x51, 0x56, 0x88, 0xd2, 0x64, 0x2d, 0xac, 0x85, 0x02, 0xe0, 0xf0, 0x4f, 0x12, 0x5b, - 0x9a, 0xae, 0x85, 0x61, 0xad, 0xce, 0x1c, 0x1a, 0xf9, 0x0e, 0x0d, 0x82, 0x30, 0xa5, 0xa9, 0x1f, - 0x06, 0x89, 0xfa, 0x76, 0xb9, 0x12, 0x26, 0x07, 0x61, 0xe2, 0xec, 0xd2, 0x44, 0x99, 0x70, 0x9e, - 0xae, 0xee, 0xb2, 0x94, 0xae, 0x3a, 0x11, 0xad, 0xf9, 0x81, 0x00, 0x2b, 0xec, 0xf9, 0x5c, 0x5e, - 0x11, 0x8d, 0xe9, 0x41, 0xa6, 0x6e, 0x31, 0x17, 0x42, 0x2b, 0xa9, 0xff, 0x94, 0x79, 0x55, 0x46, - 0xeb, 0x19, 0xf0, 0x62, 0xbe, 0xae, 0x38, 0x7c, 0xea, 0x57, 0x59, 0x6c, 0x57, 0x17, 0xd1, 0xe6, - 0x01, 0x0b, 0x52, 0xcf, 0x0f, 0xf6, 0x94, 0x93, 0xe4, 0x34, 0x14, 0x1f, 0x71, 0xf2, 0xdb, 0x82, - 0x0c, 0x79, 0x04, 0x6f, 0x19, 0x4b, 0x97, 0x25, 0x51, 0x18, 0x24, 0x0c, 0xdf, 0x84, 0x31, 0xc9, - 0x76, 0x0a, 0xcd, 0xa1, 0xa5, 0xe2, 0xda, 0x74, 0x39, 0x2f, 0x8e, 0x65, 0x29, 0xb5, 0x31, 0xf2, - 0xe9, 0xcb, 0xd9, 0x53, 0xae, 0x92, 0x20, 0x87, 0x00, 0x52, 0x65, 0x1c, 0x86, 0x7b, 0xf8, 0x12, - 0x9c, 0xcd, 0xb8, 0x7a, 0xb4, 0x5a, 0x8d, 0x59, 0x22, 0x75, 0x16, 0xdc, 0x33, 0xd9, 0xfe, 0xba, - 0xdc, 0xc6, 0xe7, 0x60, 0xec, 0x80, 0xc5, 0xfb, 0x75, 0x36, 0x35, 0x34, 0x87, 0x96, 0x26, 0x5c, - 0xb5, 0xc2, 0x93, 0x30, 0x1a, 0xfe, 0x28, 0x60, 0xf1, 0xd4, 0xb0, 0x90, 0x93, 0x0b, 0xbe, 0x9b, - 0xa4, 0x34, 0x4e, 0xa7, 0x46, 0xe6, 0xd0, 0xd2, 0xb0, 0x2b, 0x17, 0xe4, 0x11, 0xe0, 0x96, 0x71, - 0xed, 0xce, 0x2d, 0x18, 0x8d, 0xf8, 0x86, 0xf2, 0x66, 0x36, 0xdf, 0x9b, 0x2d, 0xbf, 0xce, 0x84, - 0x9c, 0x72, 0x48, 0xca, 0x90, 0x9f, 0x21, 0x98, 0x6c, 0xe9, 0x4c, 0x36, 0x9a, 0x19, 0xdf, 0x13, - 0xb8, 0xb6, 0x05, 0xd0, 0x3a, 0x24, 0xc2, 0xbd, 0xe2, 0xda, 0x42, 0x59, 0x9e, 0xa8, 0x32, 0x3f, - 0x51, 0x65, 0x79, 0x68, 0xd5, 0x89, 0x2a, 0x6f, 0xd3, 0x1a, 0x73, 0xd9, 0x87, 0x0d, 0x96, 0xa4, - 0xae, 0x21, 0x49, 0x5e, 0x20, 0x98, 0xce, 0xe3, 0x92, 0xe7, 0xe9, 0xf0, 0x49, 0x3d, 0xc5, 0xf7, - 0x72, 0x58, 0x2e, 0xf6, 0x64, 0x29, 0x2d, 0xb7, 0xd1, 0x7c, 0x08, 0x05, 0xc1, 0x92, 0xdb, 0x31, - 0xd2, 0x8a, 0xf2, 0xd3, 0x3a, 0x94, 0x9b, 0xd6, 0x61, 0x33, 0xad, 0xdb, 0xf0, 0x05, 0xad, 0xd0, - 0xf0, 0x75, 0x64, 0xcf, 0x57, 0x6a, 0x8b, 0x6b, 0xe7, 0xf3, 0x5d, 0x7d, 0x1c, 0xf8, 0x7b, 0x3e, - 0xab, 0x72, 0x41, 0xe5, 0xac, 0x10, 0x22, 0xdf, 0x81, 0xd3, 0x42, 0xe3, 0x7a, 0xbd, 0xce, 0xbf, - 0xeb, 0x4c, 0x11, 0xfa, 0x9f, 0x53, 0xf4, 0x0c, 0xc1, 0x9b, 0x42, 0xf3, 0xc3, 0x88, 0x05, 0x52, - 0xf5, 0xe7, 0x70, 0x50, 0x7e, 0x83, 0xe0, 0xed, 0x36, 0xff, 0x74, 0xd4, 0x6e, 0xc3, 0x28, 0x0f, - 0x40, 0xa2, 0x4e, 0x48, 0xdf, 0x61, 0x93, 0x52, 0x83, 0x3b, 0x23, 0x97, 0x54, 0x02, 0xb6, 0x55, - 0x04, 0xf0, 0x14, 0xbc, 0xd1, 0x1e, 0x9c, 0x6c, 0x49, 0x3e, 0x50, 0xbe, 0x64, 0x50, 0xed, 0xcb, - 0x3a, 0x8c, 0x67, 0x01, 0xb4, 0x5f, 0xed, 0x4c, 0x32, 0xab, 0x55, 0x5a, 0x8c, 0x7c, 0x4f, 0x9d, - 0xac, 0xf5, 0x7a, 0x5d, 0x83, 0x06, 0x76, 0x16, 0x3e, 0x41, 0xf0, 0xa5, 0x63, 0xda, 0x35, 0xfb, - 0x4d, 0x28, 0xe8, 0x32, 0x6e, 0xbf, 0xaf, 0x9d, 0xf4, 0x5b, 0x72, 0x83, 0xcb, 0x47, 0x00, 0x67, - 0x25, 0xd5, 0x34, 0x65, 0x89, 0x7c, 0xfa, 0xf8, 0xd5, 0xe5, 0x96, 0x54, 0x74, 0x0b, 0xae, 0x5a, - 0x0d, 0xa4, 0x52, 0xfb, 0x30, 0xd5, 0x69, 0x4f, 0x47, 0xe6, 0x01, 0x14, 0x69, 0x6b, 0x5b, 0x25, - 0x60, 0x3e, 0x3f, 0x36, 0x86, 0xfc, 0x56, 0x18, 0x1f, 0xa8, 0x08, 0x99, 0xf2, 0xe4, 0xfb, 0xaa, - 0x80, 0xaf, 0xd7, 0xeb, 0x06, 0x7a, 0x70, 0x69, 0xfe, 0x4b, 0x56, 0x95, 0x3b, 0x0c, 0x68, 0x7f, - 0x1e, 0xc2, 0x84, 0xc1, 0x27, 0x4b, 0xf6, 0x89, 0x1c, 0x6a, 0x53, 0x30, 0xb8, 0xac, 0xfb, 0xaa, - 0x1d, 0x70, 0x59, 0x14, 0xc6, 0xe9, 0xff, 0x35, 0xe1, 0x8f, 0x55, 0xab, 0x21, 0x4d, 0xe9, 0xd8, - 0xdc, 0x81, 0xb1, 0x58, 0xec, 0xa8, 0x04, 0xcc, 0xe5, 0x47, 0x45, 0x4a, 0x19, 0x01, 0x51, 0x52, - 0xe4, 0xbb, 0x70, 0x26, 0x8b, 0xbd, 0xc4, 0x0c, 0x2e, 0xaf, 0x2f, 0x10, 0x7c, 0xb1, 0x43, 0xb7, - 0xa6, 0xfd, 0x2e, 0xbc, 0x21, 0x09, 0x64, 0xd9, 0xec, 0x97, 0x77, 0x26, 0x36, 0xb8, 0x1c, 0x2e, - 0xab, 0x07, 0x67, 0x2b, 0x66, 0x6c, 0x27, 0xa2, 0x15, 0x66, 0x29, 0xa5, 0x97, 0x55, 0xb4, 0x76, - 0xd2, 0x30, 0x66, 0x9b, 0x61, 0x23, 0x48, 0x2d, 0xe0, 0x32, 0x9c, 0x6b, 0x57, 0xac, 0xbd, 0xe7, - 0x19, 0xe6, 0x1b, 0x42, 0x82, 0x67, 0x98, 0x2f, 0x88, 0xa3, 0xc2, 0xd5, 0x52, 0x6e, 0x0a, 0x54, - 0xf8, 0x46, 0x26, 0x20, 0x16, 0x64, 0x51, 0xbd, 0x01, 0x5b, 0x7e, 0x50, 0xb5, 0xf5, 0x0a, 0xe4, - 0xa6, 0x7a, 0x01, 0x32, 0xa0, 0xd6, 0x7b, 0x1e, 0x26, 0xf4, 0xd3, 0xea, 0x47, 0x99, 0x07, 0xc5, - 0x6c, 0xef, 0x7e, 0x94, 0x90, 0xab, 0xea, 0xf6, 0x6f, 0xd6, 0x7d, 0x16, 0xa4, 0xfd, 0x04, 0xe9, - 0xb6, 0xba, 0xce, 0x1d, 0x12, 0xda, 0xe8, 0x97, 0x01, 0x76, 0x9b, 0x29, 0x4b, 0xbc, 0xbd, 0x98, - 0x65, 0x21, 0x28, 0x88, 0x1d, 0x8e, 0x25, 0x4b, 0x30, 0xa1, 0x7a, 0xea, 0xe6, 0x5d, 0x9a, 0x52, - 0x8b, 0xa1, 0x9d, 0xac, 0xb3, 0x94, 0x48, 0x6d, 0x60, 0x1e, 0xde, 0x4c, 0xfd, 0x03, 0xe6, 0xc5, - 0xec, 0x80, 0xfa, 0x81, 0x1f, 0xd4, 0x94, 0x91, 0xd3, 0x7c, 0xd7, 0xcd, 0x36, 0x79, 0x50, 0x85, - 0x55, 0x71, 0x78, 0x86, 0x5d, 0xb9, 0x20, 0xd7, 0x8c, 0x2c, 0xd0, 0x1a, 0xdb, 0x96, 0x33, 0xc0, - 0xfd, 0x60, 0x2f, 0xb4, 0x30, 0x79, 0x86, 0x60, 0xb6, 0x8b, 0x94, 0x66, 0xf5, 0x03, 0x98, 0x54, - 0xa7, 0xda, 0x33, 0x07, 0x0b, 0x75, 0xc1, 0x96, 0xf2, 0xcf, 0xff, 0x71, 0x7d, 0xea, 0x1e, 0xe0, - 0xe4, 0xd8, 0x37, 0xa4, 0x0a, 0xa5, 0xec, 0xbe, 0xe5, 0xb0, 0x1f, 0xd4, 0xb5, 0xfe, 0x1b, 0x02, - 0xd2, 0xdd, 0x4c, 0x1f, 0xee, 0x0e, 0x0f, 0xc6, 0xdd, 0xc1, 0x55, 0x80, 0x2d, 0x75, 0x8e, 0xf8, - 0xd5, 0x78, 0x1c, 0xd5, 0x43, 0x5a, 0xdd, 0x7c, 0xc2, 0x2a, 0xfb, 0xdd, 0xf3, 0xdd, 0xe5, 0xe8, - 0x7c, 0x45, 0x1d, 0xfc, 0x0e, 0x3d, 0xe6, 0x2d, 0x7e, 0x4a, 0xeb, 0x7e, 0x55, 0x68, 0x1b, 0x77, - 0xe5, 0x82, 0x6c, 0xaa, 0x9a, 0xb2, 0x1d, 0xfb, 0x15, 0x26, 0x0d, 0x97, 0x60, 0xbc, 0xda, 0x88, - 0x5b, 0x89, 0x2a, 0xb8, 0x7a, 0xdd, 0xc5, 0x74, 0x56, 0x3b, 0x5a, 0x4a, 0x4c, 0xab, 0x11, 0xdf, - 0xcd, 0x6a, 0x87, 0x58, 0x90, 0x73, 0xd9, 0xa3, 0x2e, 0x46, 0x66, 0xdd, 0x21, 0x11, 0x3f, 0x7b, - 0x8b, 0xdb, 0xf7, 0xb5, 0xb6, 0xfb, 0xc7, 0xbb, 0xae, 0x6e, 0x0f, 0x71, 0xbb, 0x86, 0x63, 0xbd, - 0x17, 0x79, 0x4b, 0xf5, 0x8e, 0x2a, 0xe9, 0x3b, 0x29, 0x4d, 0x13, 0xf2, 0x9f, 0x21, 0xd5, 0xf3, - 0x99, 0xbb, 0xda, 0xfa, 0x34, 0x14, 0xa2, 0x46, 0x5c, 0x79, 0x42, 0x13, 0x26, 0xa3, 0x38, 0xe2, - 0xb6, 0x36, 0x30, 0x86, 0x91, 0x06, 0xff, 0x62, 0x48, 0x7c, 0x21, 0x3e, 0xe3, 0x07, 0x00, 0xfc, - 0xaf, 0x27, 0xa2, 0x27, 0xde, 0xd9, 0x89, 0x8d, 0x32, 0x67, 0xf2, 0xcf, 0x97, 0xb3, 0x0b, 0x35, - 0x3f, 0x7d, 0xd2, 0xd8, 0x2d, 0x57, 0xc2, 0x03, 0x47, 0xfd, 0x3c, 0x21, 0xff, 0xac, 0x24, 0xd5, - 0x7d, 0x27, 0x6d, 0x46, 0x2c, 0x29, 0xdf, 0x65, 0x15, 0xb7, 0xc0, 0x35, 0xb8, 0x5c, 0x01, 0x2f, - 0x98, 0xea, 0x47, 0x86, 0x46, 0xc2, 0x23, 0x30, 0x22, 0x4c, 0x15, 0xe5, 0xde, 0x63, 0xbe, 0x85, - 0xab, 0x70, 0x5a, 0x7c, 0xe7, 0xed, 0x36, 0xbd, 0xa8, 0x4e, 0x83, 0xa9, 0x51, 0x11, 0xa5, 0x77, - 0xf3, 0xa3, 0xd4, 0xd5, 0xd7, 0xb2, 0xd0, 0xb6, 0xd1, 0xdc, 0xae, 0xd3, 0xe0, 0x1b, 0x41, 0x1a, - 0x37, 0xdd, 0x62, 0xa3, 0xb5, 0x53, 0xba, 0x03, 0x67, 0x3b, 0x01, 0xf8, 0x2c, 0x0c, 0xef, 0xb3, - 0xa6, 0xca, 0x33, 0xff, 0xa8, 0x4e, 0x5c, 0x83, 0x65, 0x87, 0x45, 0x2c, 0x6e, 0x0e, 0xdd, 0x40, - 0x6b, 0xcf, 0xa7, 0x61, 0x54, 0xd8, 0xc6, 0xcf, 0x10, 0x8c, 0xc9, 0x5f, 0x22, 0xf0, 0x79, 0x0b, - 0x47, 0x09, 0x29, 0x5d, 0xea, 0x09, 0xc9, 0x1c, 0x20, 0x97, 0x7f, 0xf2, 0xf7, 0x7f, 0xff, 0x7c, - 0x68, 0x1e, 0x5f, 0x70, 0x7e, 0x48, 0x2b, 0xfb, 0xb4, 0xee, 0x48, 0xc9, 0x95, 0xbc, 0x9f, 0x75, - 0xf0, 0x73, 0x04, 0x23, 0xe2, 0x0d, 0x9b, 0xb5, 0x18, 0xe0, 0x80, 0xd2, 0x62, 0x0f, 0x80, 0xb6, - 0xbf, 0x29, 0xec, 0xdf, 0xc6, 0xb7, 0xac, 0xf6, 0xc5, 0x5c, 0xe6, 0x1c, 0xca, 0x97, 0xf2, 0xc8, - 0x39, 0x14, 0x3d, 0xd8, 0x91, 0x73, 0x28, 0xba, 0xae, 0x23, 0xfc, 0x53, 0x04, 0xe3, 0x7a, 0xc8, - 0xbd, 0x60, 0x31, 0x9d, 0x81, 0x4a, 0x97, 0xfb, 0x00, 0x69, 0x8e, 0xcb, 0x82, 0xe3, 0x45, 0x4c, - 0x7a, 0x73, 0xc4, 0xbf, 0x45, 0x50, 0x68, 0x4d, 0xc5, 0x17, 0x2d, 0x66, 0x34, 0xea, 0x64, 0x64, - 0x36, 0x04, 0x99, 0x77, 0xf0, 0x4d, 0x2b, 0x99, 0x30, 0x62, 0x81, 0xa7, 0xa2, 0xd6, 0x39, 0x97, - 0x1f, 0xe1, 0x3f, 0x22, 0x18, 0x95, 0x3f, 0x5d, 0xcd, 0xd9, 0x4e, 0x0a, 0x47, 0x94, 0x96, 0x7a, - 0x21, 0x34, 0xb3, 0x6f, 0x0b, 0x66, 0xdb, 0xf8, 0x7d, 0xfb, 0x51, 0xe2, 0x32, 0x39, 0xa4, 0xba, - 0x67, 0xf7, 0x17, 0x08, 0xc6, 0xf5, 0x04, 0x7d, 0xc1, 0x4e, 0x47, 0x80, 0xac, 0x01, 0xed, 0x1c, - 0xb0, 0xc9, 0x0d, 0x41, 0x7b, 0x0d, 0x5f, 0xed, 0x45, 0x5b, 0x56, 0x44, 0xe7, 0x50, 0x87, 0xf1, - 0x97, 0x08, 0x26, 0xda, 0x66, 0xea, 0x45, 0x7b, 0x22, 0x35, 0xb0, 0xe4, 0xf4, 0x09, 0xd4, 0x24, - 0xcb, 0x82, 0xe4, 0x12, 0x5e, 0xe8, 0x8f, 0x24, 0xfe, 0x2b, 0x82, 0xa2, 0x39, 0xe5, 0x2e, 0xd8, - 0x0c, 0xb6, 0x70, 0xa5, 0x72, 0x7f, 0x38, 0xcd, 0x6b, 0x47, 0xf0, 0x7a, 0x80, 0xbf, 0x65, 0xe5, - 0x65, 0xce, 0x75, 0x32, 0xf5, 0x22, 0xbf, 0xdd, 0x12, 0xfe, 0x02, 0xc1, 0x99, 0xce, 0x39, 0x76, - 0xd9, 0x1e, 0x31, 0x13, 0x5b, 0x5a, 0xeb, 0x1f, 0xab, 0x1d, 0x59, 0x15, 0x8e, 0x5c, 0xc6, 0x97, - 0xfa, 0x76, 0x04, 0xff, 0x0e, 0xc1, 0x98, 0x9a, 0x29, 0x6d, 0x35, 0x59, 0x42, 0xac, 0x35, 0xb9, - 0x7d, 0x5c, 0x24, 0xef, 0x0b, 0x2e, 0xdf, 0xc4, 0x5b, 0x56, 0x2e, 0x6a, 0xc6, 0xea, 0x23, 0x9e, - 0x1f, 0x21, 0x00, 0x63, 0x74, 0x9c, 0xb7, 0x87, 0x47, 0xc1, 0x4a, 0x2b, 0x7d, 0xc1, 0x34, 0xe9, - 0x2b, 0x82, 0xf4, 0x02, 0xbe, 0xd8, 0x0f, 0x69, 0xfc, 0x31, 0x82, 0x42, 0x6b, 0x4c, 0xb1, 0x95, - 0x49, 0x8d, 0x2a, 0x5d, 0xe9, 0x07, 0xa5, 0xf9, 0x7c, 0x5d, 0xf0, 0xb9, 0x86, 0x57, 0xed, 0x45, - 0x3b, 0x66, 0xcc, 0x13, 0x93, 0x9d, 0x71, 0xaf, 0x3f, 0x46, 0x00, 0xc6, 0xf0, 0x38, 0xdf, 0xa3, - 0x29, 0x90, 0x30, 0x6b, 0xbc, 0x8e, 0x4f, 0x8b, 0xe4, 0xab, 0x82, 0xdf, 0x55, 0x5c, 0xb6, 0xf2, - 0xe3, 0x7f, 0xfd, 0xa0, 0x66, 0x90, 0x7b, 0x8e, 0x60, 0x5c, 0xcf, 0x92, 0x17, 0xac, 0xcf, 0xac, - 0x04, 0x59, 0xab, 0x61, 0xe7, 0xb0, 0x49, 0xbe, 0x26, 0x68, 0xad, 0x62, 0xa7, 0xc7, 0x5b, 0x17, - 0x54, 0xc5, 0xf3, 0xa2, 0x0f, 0x1d, 0xaf, 0x38, 0xf8, 0x1e, 0x4b, 0x3b, 0x27, 0x50, 0xdb, 0xbd, - 0xed, 0xc0, 0x5a, 0xef, 0x6d, 0x97, 0x39, 0x95, 0xdc, 0x15, 0x7c, 0xef, 0xe0, 0x77, 0xac, 0x7c, - 0x6b, 0x2c, 0xf5, 0x2a, 0x42, 0x83, 0x97, 0x9b, 0xf1, 0x5f, 0x21, 0x80, 0x7b, 0x2c, 0xcd, 0xa6, - 0x59, 0x62, 0xed, 0x9f, 0x04, 0xa6, 0xb4, 0xdc, 0x1b, 0xa3, 0x49, 0xde, 0x12, 0x24, 0xaf, 0xe3, - 0x6b, 0x3d, 0x49, 0x46, 0xb4, 0xe9, 0x55, 0x69, 0x4a, 0x0d, 0x6e, 0x7f, 0x46, 0x80, 0x73, 0x26, - 0xc5, 0x95, 0xde, 0xad, 0xaa, 0x01, 0x2f, 0x5d, 0x3f, 0x11, 0xfc, 0x84, 0xcc, 0xcd, 0xd9, 0xd1, - 0x60, 0xfe, 0x27, 0x04, 0x6f, 0xe7, 0x8f, 0xb9, 0x57, 0xed, 0xb5, 0x25, 0x87, 0xff, 0x8d, 0x93, - 0x4a, 0x9c, 0xb0, 0xb2, 0x9b, 0x2e, 0xe0, 0x4f, 0x10, 0x9c, 0xe9, 0x9c, 0x33, 0x97, 0x7b, 0x74, - 0xb4, 0x06, 0xd6, 0x7a, 0x90, 0xbb, 0xcc, 0x9d, 0x7d, 0xd6, 0x03, 0x7e, 0xe7, 0xbc, 0x86, 0x10, - 0xf7, 0x2a, 0x82, 0xd7, 0xef, 0x11, 0x80, 0x31, 0x95, 0xce, 0x5b, 0x5b, 0x9f, 0x0c, 0x66, 0x2d, - 0x56, 0xc7, 0xc7, 0xd3, 0x3e, 0xbb, 0x74, 0x31, 0xb4, 0x4a, 0x5a, 0xce, 0x61, 0x36, 0x0b, 0x1f, - 0x39, 0x87, 0x62, 0xfa, 0x3d, 0xc2, 0x7f, 0xe0, 0xcf, 0x7a, 0xfb, 0xbc, 0x69, 0x7f, 0xd6, 0xdb, - 0xb1, 0xf6, 0x67, 0x3d, 0x7f, 0x12, 0x26, 0xd7, 0x05, 0x71, 0x07, 0xaf, 0xd8, 0x9f, 0x75, 0x39, - 0x2d, 0xb6, 0xda, 0xa7, 0x5f, 0x23, 0x98, 0x30, 0xe7, 0x3d, 0x6b, 0x67, 0x67, 0x02, 0xad, 0x9d, - 0x5d, 0xde, 0x04, 0x49, 0xd6, 0x04, 0xc3, 0x2b, 0x78, 0xb9, 0xe7, 0x3b, 0x40, 0x6b, 0xcc, 0xe3, - 0xcd, 0x47, 0xb2, 0xf1, 0xde, 0xa7, 0xaf, 0x66, 0xd0, 0x67, 0xaf, 0x66, 0xd0, 0xbf, 0x5e, 0xcd, - 0xa0, 0x8f, 0x5e, 0xcf, 0x9c, 0xfa, 0xec, 0xf5, 0xcc, 0xa9, 0x7f, 0xbc, 0x9e, 0x39, 0xf5, 0xc1, - 0x9a, 0x31, 0x2d, 0x4b, 0x7d, 0xef, 0xd1, 0xdd, 0xa4, 0x5d, 0xe7, 0x8f, 0xb5, 0x56, 0x31, 0x3d, - 0xef, 0x8e, 0x89, 0xff, 0x9a, 0x5f, 0xfb, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x82, 0x71, 0x89, - 0x57, 0x6a, 0x20, 0x00, 0x00, + // 2102 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xdf, 0x6f, 0x5c, 0x47, + 0xf5, 0xcf, 0xf8, 0x57, 0xbd, 0x67, 0x9d, 0x3a, 0xdf, 0xa9, 0x9b, 0xaf, 0x59, 0x05, 0xdb, 0x99, + 0xf8, 0x57, 0x9c, 0x78, 0x6f, 0xec, 0x90, 0x12, 0x92, 0x26, 0x6a, 0xec, 0xe0, 0x10, 0xd1, 0x10, + 0x67, 0xad, 0xa8, 0x50, 0x24, 0x96, 0xf1, 0xee, 0x78, 0x73, 0xf1, 0xfa, 0xde, 0xdb, 0x7b, 0xef, + 0x06, 0x56, 0x96, 0x5f, 0xc8, 0x0b, 0x48, 0x3c, 0x54, 0x42, 0x45, 0x50, 0x21, 0x81, 0x50, 0x55, + 0xa8, 0xc4, 0x0b, 0x2f, 0x80, 0xf8, 0x0b, 0xfa, 0x46, 0x25, 0x5e, 0x80, 0x87, 0x0a, 0x25, 0xf0, + 0x7f, 0xa0, 0xf9, 0xb9, 0xb3, 0xeb, 0xbb, 0xb3, 0xeb, 0x6a, 0x11, 0x3c, 0x79, 0x67, 0xee, 0xe7, + 0x9c, 0xf3, 0x39, 0x67, 0xce, 0xcc, 0x99, 0x33, 0x32, 0xcc, 0x55, 0x68, 0xe0, 0x07, 0xac, 0x5c, + 0x79, 0x42, 0xfd, 0xc0, 0x4b, 0xd2, 0x30, 0xa6, 0x35, 0xe6, 0xbd, 0xd3, 0x60, 0x71, 0xb3, 0x18, + 0xc5, 0x61, 0x1a, 0xe2, 0x29, 0x1b, 0x51, 0x54, 0x88, 0xc2, 0x54, 0x2d, 0xac, 0x85, 0x02, 0xe0, + 0xf1, 0x5f, 0x12, 0x5b, 0x38, 0x57, 0x0b, 0xc3, 0x5a, 0x9d, 0x79, 0x34, 0xf2, 0x3d, 0x1a, 0x04, + 0x61, 0x4a, 0x53, 0x3f, 0x0c, 0x12, 0xf5, 0x75, 0xa5, 0x12, 0x26, 0x07, 0x61, 0xe2, 0xed, 0xd2, + 0x44, 0x99, 0xf0, 0x9e, 0xae, 0xed, 0xb2, 0x94, 0xae, 0x79, 0x11, 0xad, 0xf9, 0x81, 0x00, 0x2b, + 0xec, 0xf9, 0x4c, 0x5e, 0x11, 0x8d, 0xe9, 0x81, 0x56, 0xb7, 0x94, 0x09, 0xa1, 0x95, 0xd4, 0x7f, + 0xca, 0xca, 0x55, 0x46, 0xeb, 0x1a, 0x38, 0x9f, 0xad, 0x2b, 0x0e, 0x9f, 0xfa, 0x55, 0x16, 0xbb, + 0xd5, 0x45, 0xb4, 0x79, 0xc0, 0x82, 0xb4, 0xec, 0x07, 0x7b, 0xca, 0x49, 0x72, 0x1a, 0xf2, 0x8f, + 0x38, 0xf9, 0x6d, 0x41, 0x86, 0x3c, 0x82, 0x57, 0xac, 0x61, 0x89, 0x25, 0x51, 0x18, 0x24, 0x0c, + 0xdf, 0x80, 0x31, 0xc9, 0x76, 0x1a, 0xcd, 0xa1, 0xe5, 0xfc, 0xfa, 0xb9, 0x62, 0x56, 0x1c, 0x8b, + 0x52, 0x6a, 0x63, 0xe4, 0xe3, 0x4f, 0x67, 0x4f, 0x95, 0x94, 0x04, 0x39, 0x04, 0x90, 0x2a, 0xe3, + 0x30, 0xdc, 0xc3, 0x17, 0xe1, 0x8c, 0xe6, 0x5a, 0xa6, 0xd5, 0x6a, 0xcc, 0x12, 0xa9, 0x33, 0x57, + 0x9a, 0xd4, 0xf3, 0x77, 0xe4, 0x34, 0x3e, 0x0b, 0x63, 0x07, 0x2c, 0xde, 0xaf, 0xb3, 0xe9, 0xa1, + 0x39, 0xb4, 0x3c, 0x51, 0x52, 0x23, 0x3c, 0x05, 0xa3, 0xe1, 0x77, 0x03, 0x16, 0x4f, 0x0f, 0x0b, + 0x39, 0x39, 0xe0, 0xb3, 0x49, 0x4a, 0xe3, 0x74, 0x7a, 0x64, 0x0e, 0x2d, 0x0f, 0x97, 0xe4, 0x80, + 0x3c, 0x02, 0xdc, 0x32, 0x6e, 0xdc, 0xb9, 0x09, 0xa3, 0x11, 0x9f, 0x50, 0xde, 0xcc, 0x66, 0x7b, + 0xb3, 0xe5, 0xd7, 0x99, 0x90, 0x53, 0x0e, 0x49, 0x19, 0xf2, 0x43, 0x04, 0x53, 0x2d, 0x9d, 0xc9, + 0x46, 0x53, 0xf3, 0x3d, 0x81, 0x6b, 0x5b, 0x00, 0xad, 0x24, 0x11, 0xee, 0xe5, 0xd7, 0x17, 0x8b, + 0x32, 0xa3, 0x8a, 0x3c, 0xa3, 0x8a, 0x32, 0x69, 0x55, 0x46, 0x15, 0xb7, 0x69, 0x8d, 0x95, 0xd8, + 0x3b, 0x0d, 0x96, 0xa4, 0x25, 0x4b, 0x92, 0x7c, 0x88, 0xe0, 0x5c, 0x16, 0x17, 0xe3, 0xe9, 0x2d, + 0x18, 0x13, 0xac, 0x39, 0x93, 0xe1, 0xfe, 0x5d, 0x55, 0x42, 0xf8, 0x5e, 0x06, 0xcf, 0xa5, 0x9e, + 0x3c, 0xa5, 0xed, 0x36, 0xa2, 0x5f, 0x87, 0x97, 0x05, 0xcf, 0x3b, 0xf5, 0xba, 0xa4, 0xda, 0x11, + 0x02, 0xf4, 0x99, 0x43, 0xf0, 0x4b, 0x04, 0x67, 0xdb, 0x55, 0xff, 0xcf, 0x39, 0xff, 0x10, 0x72, + 0x82, 0x21, 0x37, 0x64, 0x65, 0x35, 0xca, 0xce, 0xea, 0xa1, 0xcc, 0xac, 0x1e, 0xb6, 0xb3, 0x7a, + 0x1b, 0xfe, 0xcf, 0x28, 0xb4, 0x92, 0x7a, 0x64, 0xcf, 0x57, 0x6a, 0xf3, 0xeb, 0xe7, 0xb3, 0x7d, + 0x7d, 0x1c, 0xf8, 0x7b, 0x3e, 0xab, 0x72, 0x41, 0xe5, 0xad, 0x10, 0x22, 0x6f, 0xc1, 0x69, 0x1d, + 0x44, 0xfe, 0x6d, 0x70, 0xcb, 0xf3, 0x0c, 0xa9, 0x95, 0x7f, 0x18, 0xb1, 0x40, 0xaa, 0xfe, 0x2f, + 0xec, 0x93, 0x5f, 0x20, 0x78, 0xb5, 0xcd, 0x3f, 0x2b, 0x47, 0x46, 0x79, 0x00, 0x74, 0x8a, 0xf4, + 0x1d, 0x36, 0x29, 0x35, 0xb8, 0x1c, 0xb9, 0xa8, 0x16, 0x60, 0x5b, 0x45, 0x00, 0x4f, 0xc3, 0x4b, + 0xed, 0xc1, 0xd1, 0x43, 0xf2, 0xb6, 0xf2, 0x45, 0x43, 0x8d, 0x2f, 0x77, 0x60, 0x5c, 0x07, 0xd0, + 0x7d, 0xb2, 0x69, 0x49, 0x7d, 0x54, 0x1b, 0x31, 0xf2, 0x4d, 0x95, 0x59, 0x72, 0x33, 0x49, 0xd0, + 0xc0, 0x72, 0xe1, 0x23, 0x04, 0x9f, 0x3b, 0xa6, 0xdd, 0xb0, 0xdf, 0x84, 0x9c, 0xa9, 0x62, 0xee, + 0x0d, 0xdb, 0x49, 0xbf, 0x25, 0x37, 0xb8, 0xf5, 0x08, 0xe0, 0x8c, 0xa4, 0x9a, 0xa6, 0x2c, 0x91, + 0x95, 0x9f, 0x6f, 0x5d, 0x6e, 0x49, 0x45, 0x37, 0x57, 0x52, 0xa3, 0x81, 0x14, 0x2a, 0x1f, 0xa6, + 0x3b, 0xed, 0x99, 0xc8, 0x3c, 0x80, 0x3c, 0x6d, 0x4d, 0xab, 0x05, 0x58, 0xc8, 0x8e, 0x8d, 0x25, + 0xbf, 0x15, 0xc6, 0x07, 0x2a, 0x42, 0xb6, 0x3c, 0xf9, 0x96, 0xaa, 0x5f, 0x77, 0xea, 0x75, 0x0b, + 0x3d, 0xb8, 0x65, 0xfe, 0xa3, 0x2e, 0x4a, 0x1d, 0x06, 0x8c, 0x3f, 0x0f, 0x61, 0xc2, 0xe2, 0xa3, + 0x17, 0xfb, 0x44, 0x0e, 0xb5, 0x29, 0x18, 0xdc, 0xaa, 0xfb, 0xea, 0x36, 0x54, 0x62, 0x51, 0x18, + 0xa7, 0xff, 0xd1, 0x05, 0x7f, 0xac, 0x6e, 0x5a, 0xd2, 0x94, 0x89, 0xcd, 0x6d, 0x18, 0x8b, 0xc5, + 0x8c, 0x5a, 0x80, 0xb9, 0xec, 0xa8, 0x48, 0x29, 0x2b, 0x20, 0x4a, 0x8a, 0x7c, 0x03, 0x26, 0x75, + 0xec, 0x25, 0x66, 0x70, 0xeb, 0xfa, 0x01, 0x82, 0xff, 0xef, 0xd0, 0x6d, 0x68, 0xbf, 0x01, 0x2f, + 0x49, 0x02, 0x7a, 0x35, 0xfb, 0xe5, 0xad, 0xc5, 0x06, 0xb7, 0x86, 0x2b, 0xaa, 0xe0, 0x6c, 0xc5, + 0x8c, 0xed, 0x44, 0xb4, 0xc2, 0x1c, 0x47, 0xe9, 0x25, 0x15, 0xad, 0x9d, 0x34, 0x8c, 0xd9, 0x66, + 0xd8, 0x08, 0x52, 0x07, 0xb8, 0xa8, 0x2e, 0x1a, 0x46, 0xb1, 0xf1, 0x9e, 0xaf, 0x30, 0x9f, 0x10, + 0x12, 0x7c, 0x85, 0xf9, 0x80, 0x78, 0x2a, 0x5c, 0x2d, 0xe5, 0xb6, 0x40, 0x85, 0x4f, 0x68, 0x01, + 0x31, 0x20, 0x4b, 0xaa, 0x06, 0x6c, 0xf9, 0x41, 0xd5, 0x75, 0x57, 0x20, 0x37, 0x54, 0x05, 0xd0, + 0x40, 0xa3, 0xf7, 0x3c, 0x4c, 0x98, 0xd2, 0xea, 0x47, 0xda, 0x83, 0xbc, 0x9e, 0xbb, 0x1f, 0x25, + 0xe4, 0x8a, 0xda, 0xfd, 0x9b, 0x75, 0x9f, 0x05, 0x69, 0x3f, 0x41, 0xba, 0xa5, 0xb6, 0x73, 0x87, + 0x84, 0x31, 0xfa, 0x79, 0x80, 0xdd, 0x66, 0xca, 0x92, 0xf2, 0x5e, 0xcc, 0x74, 0x08, 0x72, 0x62, + 0x86, 0x63, 0xc9, 0x32, 0x4c, 0xa8, 0x96, 0xa2, 0x79, 0x97, 0xa6, 0xd4, 0x61, 0x68, 0x47, 0x5f, + 0xac, 0x25, 0xd2, 0x18, 0x58, 0x80, 0x97, 0x53, 0xff, 0x80, 0x95, 0x63, 0x76, 0x40, 0xfd, 0xc0, + 0x0f, 0x6a, 0xca, 0xc8, 0x69, 0x3e, 0x5b, 0xd2, 0x93, 0x3c, 0xa8, 0xc2, 0xaa, 0x48, 0x9e, 0xe1, + 0x92, 0x1c, 0x90, 0xab, 0xd6, 0x2a, 0xd0, 0x1a, 0xdb, 0x96, 0x2d, 0xd0, 0xfd, 0x60, 0x2f, 0x74, + 0x30, 0x79, 0x86, 0x60, 0xb6, 0x8b, 0x94, 0x61, 0xf5, 0x6d, 0x98, 0x52, 0x59, 0x5d, 0xb6, 0xfb, + 0x2a, 0xb5, 0xc1, 0x96, 0xb3, 0xf3, 0xff, 0xb8, 0x3e, 0xb5, 0x0f, 0x70, 0x72, 0xec, 0x0b, 0xa9, + 0x42, 0x41, 0xef, 0xb7, 0x0c, 0xf6, 0x83, 0xda, 0xd6, 0x7f, 0x46, 0x40, 0xba, 0x9b, 0xe9, 0xc3, + 0xdd, 0xe1, 0xc1, 0xb8, 0x3b, 0xb8, 0x13, 0x60, 0x4b, 0xe5, 0x11, 0xdf, 0x1a, 0x8f, 0xa3, 0x7a, + 0x48, 0xab, 0x9b, 0x4f, 0x58, 0x65, 0xbf, 0xfb, 0x7a, 0x77, 0x49, 0x9d, 0x2f, 0xa8, 0xc4, 0xef, + 0xd0, 0x63, 0xef, 0xe2, 0xa7, 0xb4, 0xee, 0x57, 0x85, 0xb6, 0xf1, 0x92, 0x1c, 0x90, 0x4d, 0x75, + 0xa6, 0x6c, 0xc7, 0x7e, 0x85, 0x49, 0xc3, 0x05, 0x18, 0xaf, 0x36, 0xe2, 0xd6, 0x42, 0xe5, 0x4a, + 0x66, 0xdc, 0xc5, 0xb4, 0x3e, 0x3b, 0x5a, 0x4a, 0x6c, 0xab, 0x11, 0x9f, 0xd5, 0x67, 0x87, 0x18, + 0x90, 0xb3, 0xba, 0xa8, 0x8b, 0x17, 0x03, 0x73, 0x43, 0x22, 0xbe, 0xae, 0xc5, 0xed, 0xf3, 0x46, + 0xdb, 0xfd, 0xe3, 0xb7, 0xae, 0x6e, 0x85, 0xb8, 0x5d, 0xc3, 0xb1, 0xbb, 0x17, 0x79, 0x45, 0xdd, + 0x1d, 0xd5, 0xa2, 0xef, 0xa4, 0x34, 0x4d, 0xc8, 0xbf, 0x86, 0xd4, 0x9d, 0xcf, 0x9e, 0x35, 0xd6, + 0xcf, 0x41, 0x2e, 0x6a, 0xc4, 0x95, 0x27, 0x34, 0x61, 0x32, 0x8a, 0x23, 0xa5, 0xd6, 0x04, 0xc6, + 0x30, 0xd2, 0xe0, 0x1f, 0x86, 0xc4, 0x07, 0xf1, 0x1b, 0x3f, 0x00, 0xe0, 0x7f, 0xcb, 0x22, 0x7a, + 0xa2, 0xce, 0x4e, 0x6c, 0x14, 0x39, 0x93, 0xbf, 0x7f, 0x3a, 0xbb, 0x58, 0xf3, 0xd3, 0x27, 0x8d, + 0xdd, 0x62, 0x25, 0x3c, 0xf0, 0xd4, 0xeb, 0x8c, 0xfc, 0xb3, 0x9a, 0x54, 0xf7, 0xbd, 0xb4, 0x19, + 0xb1, 0xa4, 0x78, 0x97, 0x55, 0x4a, 0x39, 0xae, 0xa1, 0xc4, 0x15, 0xf0, 0x03, 0x53, 0xbd, 0xb1, + 0x34, 0x12, 0x1e, 0x81, 0x11, 0x61, 0x2a, 0x2f, 0xe7, 0x1e, 0xf3, 0x29, 0x5c, 0x85, 0xd3, 0xe2, + 0x5b, 0x79, 0xb7, 0x59, 0x8e, 0xea, 0x34, 0x98, 0x1e, 0x15, 0x51, 0x7a, 0x23, 0x3b, 0x4a, 0x5d, + 0x7d, 0x2d, 0x0a, 0x6d, 0x1b, 0xcd, 0xed, 0x3a, 0x0d, 0xbe, 0x1c, 0xa4, 0x71, 0xb3, 0x94, 0x6f, + 0xb4, 0x66, 0x0a, 0xb7, 0xe1, 0x4c, 0x27, 0x00, 0x9f, 0x81, 0xe1, 0x7d, 0xd6, 0x54, 0xeb, 0xcc, + 0x7f, 0xaa, 0x8c, 0x6b, 0x30, 0x9d, 0x2c, 0x62, 0x70, 0x63, 0xe8, 0x3a, 0x5a, 0xff, 0xdb, 0x0c, + 0x8c, 0x0a, 0xdb, 0xf8, 0x19, 0x82, 0x31, 0xf9, 0x10, 0x83, 0xcf, 0x3b, 0x38, 0x4a, 0x48, 0xe1, + 0x62, 0x4f, 0x88, 0x76, 0x80, 0x5c, 0xfa, 0xfe, 0x5f, 0xfe, 0xf9, 0xe3, 0xa1, 0x05, 0x7c, 0xc1, + 0xfb, 0x0e, 0xad, 0xec, 0xd3, 0xba, 0x27, 0x25, 0x57, 0xb3, 0x5e, 0xb5, 0xf0, 0x7b, 0x08, 0x46, + 0x44, 0x0d, 0x9b, 0x75, 0x18, 0xe0, 0x80, 0xc2, 0x52, 0x0f, 0x80, 0xb1, 0xbf, 0x29, 0xec, 0xdf, + 0xc2, 0x37, 0x9d, 0xf6, 0x45, 0x5f, 0xe6, 0x1d, 0xca, 0x4a, 0x79, 0xe4, 0x1d, 0x8a, 0x3b, 0xd8, + 0x91, 0x77, 0x28, 0x6e, 0x5d, 0x47, 0xf8, 0x07, 0x08, 0xc6, 0x4d, 0x93, 0x7b, 0xc1, 0x61, 0x5a, + 0x83, 0x0a, 0x97, 0xfa, 0x00, 0x19, 0x8e, 0x2b, 0x82, 0xe3, 0x3c, 0x26, 0xbd, 0x39, 0xe2, 0x5f, + 0x21, 0xc8, 0xb5, 0xba, 0xe2, 0x79, 0x87, 0x19, 0x83, 0x3a, 0x19, 0x99, 0x0d, 0x41, 0xe6, 0x75, + 0x7c, 0xc3, 0x49, 0x26, 0x8c, 0x58, 0x50, 0x56, 0x51, 0xeb, 0xec, 0xcb, 0x8f, 0xf0, 0x6f, 0x11, + 0x8c, 0xca, 0x97, 0xbb, 0x39, 0x57, 0xa6, 0x70, 0x44, 0x61, 0xb9, 0x17, 0xc2, 0x30, 0x7b, 0x4b, + 0x30, 0x7b, 0x84, 0x1f, 0xba, 0x53, 0x49, 0xbc, 0xc3, 0x64, 0xb0, 0xea, 0xbe, 0xbc, 0x3f, 0x42, + 0x90, 0x6b, 0xbd, 0x31, 0xcd, 0xbb, 0xa3, 0x25, 0x51, 0x85, 0xcb, 0xfd, 0xa0, 0x4e, 0xba, 0x0b, + 0x24, 0x81, 0xdf, 0x21, 0x98, 0xec, 0x7c, 0x26, 0x5c, 0xe9, 0x15, 0xa5, 0x16, 0xb6, 0xb0, 0xde, + 0x3f, 0xd6, 0x10, 0xbc, 0x2d, 0x08, 0x5e, 0xc7, 0xaf, 0x7d, 0xb6, 0xd8, 0xe2, 0x9f, 0x20, 0x18, + 0x37, 0xaf, 0x10, 0x17, 0xdc, 0x04, 0x04, 0xc8, 0x99, 0x94, 0x9d, 0x8f, 0x14, 0xe4, 0xba, 0xa0, + 0xb7, 0x8e, 0xaf, 0xf4, 0xa2, 0x27, 0xab, 0x8a, 0x77, 0x68, 0x88, 0xfd, 0x14, 0xc1, 0x44, 0xdb, + 0xbb, 0xc4, 0x52, 0xcf, 0x85, 0x93, 0xc0, 0x82, 0xd7, 0x27, 0xd0, 0x90, 0x2c, 0x0a, 0x92, 0xcb, + 0x78, 0xb1, 0x3f, 0x92, 0xf8, 0x4f, 0x08, 0xf2, 0xf6, 0x4b, 0xc1, 0xa2, 0xcb, 0x60, 0x0b, 0x57, + 0x28, 0xf6, 0x87, 0x33, 0xbc, 0x76, 0x04, 0xaf, 0x07, 0xf8, 0xab, 0x4e, 0x5e, 0x76, 0x6f, 0x2c, + 0x57, 0x58, 0x6c, 0x91, 0x6e, 0x7b, 0xe6, 0x03, 0x04, 0x93, 0x9d, 0x6f, 0x01, 0x2b, 0xee, 0x88, + 0xd9, 0x58, 0x67, 0x92, 0x76, 0x79, 0x02, 0x20, 0x6b, 0xc2, 0x91, 0x4b, 0xf8, 0x62, 0xdf, 0x8e, + 0xe0, 0x0f, 0x11, 0x8c, 0xa9, 0xbe, 0xdc, 0x55, 0xd7, 0x24, 0xc4, 0x59, 0xd7, 0xda, 0x5b, 0x6e, + 0xf2, 0x35, 0xc1, 0xe5, 0x2b, 0x78, 0xcb, 0xc9, 0x45, 0xf5, 0xa9, 0x7d, 0xc4, 0xf3, 0x5d, 0x04, + 0x60, 0xb5, 0xdf, 0x0b, 0xee, 0xf0, 0x28, 0x58, 0x61, 0xb5, 0x2f, 0x98, 0x21, 0x7d, 0x59, 0x90, + 0x5e, 0xc4, 0xf3, 0xfd, 0x90, 0xc6, 0xef, 0x23, 0xc8, 0xb5, 0x5a, 0x3d, 0xd7, 0xb1, 0x68, 0x50, + 0xce, 0x63, 0xf1, 0x58, 0x13, 0x48, 0xbe, 0x24, 0xf8, 0x5c, 0xc5, 0x6b, 0xee, 0xc2, 0x17, 0x33, + 0x56, 0x16, 0xdd, 0xb1, 0xb5, 0xaf, 0xdf, 0x47, 0x00, 0x56, 0x03, 0xbe, 0xd0, 0xe3, 0x62, 0x25, + 0x61, 0xce, 0x78, 0x1d, 0xef, 0xb8, 0xc9, 0x6b, 0x82, 0xdf, 0x15, 0x5c, 0x74, 0xf2, 0xe3, 0x7f, + 0xfd, 0xa0, 0x66, 0x91, 0x7b, 0x0f, 0xc1, 0xb8, 0xe9, 0xc7, 0x2f, 0x38, 0xaf, 0x2a, 0x12, 0xe4, + 0x3c, 0x0d, 0x3b, 0x1b, 0x76, 0xf2, 0x45, 0x41, 0x6b, 0x0d, 0x7b, 0x3d, 0xee, 0x0b, 0x41, 0x55, + 0x94, 0x68, 0x93, 0x74, 0xfc, 0xc4, 0xc1, 0xf7, 0x58, 0xda, 0xd9, 0xc5, 0xbb, 0xf6, 0x6d, 0x07, + 0xd6, 0xb9, 0x6f, 0xbb, 0xf4, 0xfa, 0xe4, 0xae, 0xe0, 0x7b, 0x1b, 0xbf, 0xee, 0xe4, 0x5b, 0x63, + 0x69, 0xb9, 0x22, 0x34, 0x94, 0x33, 0x57, 0xfc, 0x67, 0x08, 0xe0, 0x1e, 0x4b, 0xf5, 0x8b, 0x00, + 0x71, 0xde, 0x41, 0x05, 0xa6, 0xb0, 0xd2, 0x1b, 0x63, 0x48, 0xde, 0x14, 0x24, 0xaf, 0xe1, 0xab, + 0x3d, 0x49, 0x46, 0xb4, 0x59, 0xae, 0xd2, 0x94, 0x5a, 0xdc, 0xfe, 0x80, 0x00, 0x67, 0x74, 0xdb, + 0xab, 0xbd, 0xaf, 0xfb, 0x16, 0xbc, 0x70, 0xed, 0x44, 0xf0, 0x13, 0x32, 0xb7, 0xfb, 0x6f, 0x8b, + 0xf9, 0xef, 0x11, 0xbc, 0x9a, 0xfd, 0x54, 0x70, 0xc5, 0x7d, 0xb6, 0x64, 0xf0, 0xbf, 0x7e, 0x52, + 0x89, 0x13, 0x9e, 0xec, 0xb6, 0x0b, 0xf8, 0x23, 0x04, 0x93, 0x9d, 0xbd, 0xfa, 0x4a, 0x8f, 0xae, + 0xc0, 0xc2, 0x3a, 0x13, 0xb9, 0x4b, 0xef, 0xde, 0xe7, 0x79, 0xc0, 0xf7, 0x5c, 0xb9, 0x21, 0xc4, + 0xcb, 0x15, 0xc1, 0xeb, 0xd7, 0x08, 0xc0, 0xea, 0xec, 0x17, 0x9c, 0x57, 0x1f, 0x0d, 0x73, 0x1e, + 0x56, 0xc7, 0x5b, 0xfc, 0x3e, 0x3b, 0x1d, 0xd1, 0xf8, 0x4b, 0x5a, 0xde, 0xa1, 0x7e, 0x4f, 0x38, + 0xf2, 0x0e, 0xc5, 0x0b, 0xc2, 0x11, 0xfe, 0x0d, 0x2f, 0xeb, 0xed, 0x3d, 0xbb, 0xbb, 0xac, 0xb7, + 0x63, 0xdd, 0x65, 0x3d, 0xfb, 0x35, 0x81, 0x5c, 0x13, 0xc4, 0x3d, 0xbc, 0xea, 0x2e, 0xeb, 0xb2, + 0xe3, 0x6e, 0x5d, 0x9f, 0x7e, 0x8e, 0x60, 0xc2, 0xee, 0x99, 0x9d, 0x37, 0x3b, 0x1b, 0xe8, 0xbc, + 0xd9, 0x65, 0x75, 0xe1, 0x64, 0x5d, 0x30, 0xbc, 0x8c, 0x57, 0x7a, 0xd6, 0x01, 0x5a, 0x63, 0x65, + 0x7e, 0xf9, 0x48, 0x36, 0xde, 0xfc, 0xf8, 0xf9, 0x0c, 0xfa, 0xe4, 0xf9, 0x0c, 0xfa, 0xc7, 0xf3, + 0x19, 0xf4, 0xee, 0x8b, 0x99, 0x53, 0x9f, 0xbc, 0x98, 0x39, 0xf5, 0xd7, 0x17, 0x33, 0xa7, 0xde, + 0x5e, 0xb7, 0x5e, 0x1c, 0xa4, 0xbe, 0x37, 0xe9, 0x6e, 0xd2, 0xae, 0xf3, 0x7b, 0x46, 0xab, 0x78, + 0x81, 0xd8, 0x1d, 0x13, 0xff, 0x78, 0x71, 0xf5, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x94, 0xfa, + 0xd7, 0x47, 0xad, 0x22, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2393,8 +2496,12 @@ type QueryClient interface { AllFiles(ctx context.Context, in *QueryAllFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) // Queries a list of open files. OpenFiles(ctx context.Context, in *QueryOpenFiles, opts ...grpc.CallOption) (*QueryAllFilesResponse, error) - // Queries a list of Proofs. + // Queries a Proof. Proof(ctx context.Context, in *QueryProof, opts ...grpc.CallOption) (*QueryProofResponse, error) + // Queries a list of Proofs. + AllProofs(ctx context.Context, in *QueryAllProofs, opts ...grpc.CallOption) (*QueryAllProofsResponse, error) + // Queries a list of Proofs. + ProofsByAddress(ctx context.Context, in *QueryProofsByAddress, opts ...grpc.CallOption) (*QueryProofsByAddressResponse, error) // Queries a Providers by index. Provider(ctx context.Context, in *QueryProvider, opts ...grpc.CallOption) (*QueryProviderResponse, error) // Queries a list of Providers items. @@ -2484,6 +2591,24 @@ func (c *queryClient) Proof(ctx context.Context, in *QueryProof, opts ...grpc.Ca return out, nil } +func (c *queryClient) AllProofs(ctx context.Context, in *QueryAllProofs, opts ...grpc.CallOption) (*QueryAllProofsResponse, error) { + out := new(QueryAllProofsResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/AllProofs", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ProofsByAddress(ctx context.Context, in *QueryProofsByAddress, opts ...grpc.CallOption) (*QueryProofsByAddressResponse, error) { + out := new(QueryProofsByAddressResponse) + err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/ProofsByAddress", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) Provider(ctx context.Context, in *QueryProvider, opts ...grpc.CallOption) (*QueryProviderResponse, error) { out := new(QueryProviderResponse) err := c.cc.Invoke(ctx, "/canine_chain.storage.Query/Provider", in, out, opts...) @@ -2647,8 +2772,12 @@ type QueryServer interface { AllFiles(context.Context, *QueryAllFiles) (*QueryAllFilesResponse, error) // Queries a list of open files. OpenFiles(context.Context, *QueryOpenFiles) (*QueryAllFilesResponse, error) - // Queries a list of Proofs. + // Queries a Proof. Proof(context.Context, *QueryProof) (*QueryProofResponse, error) + // Queries a list of Proofs. + AllProofs(context.Context, *QueryAllProofs) (*QueryAllProofsResponse, error) + // Queries a list of Proofs. + ProofsByAddress(context.Context, *QueryProofsByAddress) (*QueryProofsByAddressResponse, error) // Queries a Providers by index. Provider(context.Context, *QueryProvider) (*QueryProviderResponse, error) // Queries a list of Providers items. @@ -2704,6 +2833,12 @@ func (*UnimplementedQueryServer) OpenFiles(ctx context.Context, req *QueryOpenFi func (*UnimplementedQueryServer) Proof(ctx context.Context, req *QueryProof) (*QueryProofResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Proof not implemented") } +func (*UnimplementedQueryServer) AllProofs(ctx context.Context, req *QueryAllProofs) (*QueryAllProofsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllProofs not implemented") +} +func (*UnimplementedQueryServer) ProofsByAddress(ctx context.Context, req *QueryProofsByAddress) (*QueryProofsByAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ProofsByAddress not implemented") +} func (*UnimplementedQueryServer) Provider(ctx context.Context, req *QueryProvider) (*QueryProviderResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Provider not implemented") } @@ -2850,6 +2985,42 @@ func _Query_Proof_Handler(srv interface{}, ctx context.Context, dec func(interfa return interceptor(ctx, in, info, handler) } +func _Query_AllProofs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllProofs) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AllProofs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/AllProofs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllProofs(ctx, req.(*QueryAllProofs)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ProofsByAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryProofsByAddress) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ProofsByAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/canine_chain.storage.Query/ProofsByAddress", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ProofsByAddress(ctx, req.(*QueryProofsByAddress)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_Provider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryProvider) if err := dec(in); err != nil { @@ -3180,6 +3351,14 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "Proof", Handler: _Query_Proof_Handler, }, + { + MethodName: "AllProofs", + Handler: _Query_AllProofs_Handler, + }, + { + MethodName: "ProofsByAddress", + Handler: _Query_ProofsByAddress_Handler, + }, { MethodName: "Provider", Handler: _Query_Provider_Handler, @@ -3465,10 +3644,94 @@ func (m *QueryProofsByAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, e i-- dAtA[i] = 0x12 } - if len(m.Proof) > 0 { - for iNdEx := len(m.Proof) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Proofs) > 0 { + for iNdEx := len(m.Proofs) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Proof[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Proofs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryAllProofs) 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 *QueryAllProofs) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllProofs) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllProofsResponse) 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 *QueryAllProofsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllProofsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Proofs) > 0 { + for iNdEx := len(m.Proofs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Proofs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -4972,8 +5235,40 @@ func (m *QueryProofsByAddressResponse) Size() (n int) { } var l int _ = l - if len(m.Proof) > 0 { - for _, e := range m.Proof { + if len(m.Proofs) > 0 { + for _, e := range m.Proofs { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllProofs) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllProofsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Proofs) > 0 { + for _, e := range m.Proofs { l = e.Size() n += 1 + l + sovQuery(uint64(l)) } @@ -6095,7 +6390,213 @@ func (m *QueryProofsByAddressResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Proofs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Proofs = append(m.Proofs, FileProof{}) + if err := m.Proofs[len(m.Proofs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllProofs) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllProofs: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllProofs: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllProofsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllProofsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllProofsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proofs", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -6122,8 +6623,8 @@ func (m *QueryProofsByAddressResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Proof = append(m.Proof, FileProof{}) - if err := m.Proof[len(m.Proof)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Proofs = append(m.Proofs, FileProof{}) + if err := m.Proofs[len(m.Proofs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/storage/types/query.pb.gw.go b/x/storage/types/query.pb.gw.go index eaf2bbe48..7b66ee574 100644 --- a/x/storage/types/query.pb.gw.go +++ b/x/storage/types/query.pb.gw.go @@ -377,6 +377,114 @@ func local_request_Query_Proof_0(ctx context.Context, marshaler runtime.Marshale } +var ( + filter_Query_AllProofs_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_AllProofs_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllProofs + 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_AllProofs_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AllProofs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AllProofs_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllProofs + 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_AllProofs_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AllProofs(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_ProofsByAddress_0 = &utilities.DoubleArray{Encoding: map[string]int{"provider_address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_ProofsByAddress_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryProofsByAddress + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["provider_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_address") + } + + protoReq.ProviderAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ProofsByAddress_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ProofsByAddress(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ProofsByAddress_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryProofsByAddress + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["provider_address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "provider_address") + } + + protoReq.ProviderAddress, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "provider_address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ProofsByAddress_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ProofsByAddress(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_Provider_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryProvider var metadata runtime.ServerMetadata @@ -1408,6 +1516,52 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_AllProofs_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_AllProofs_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_AllProofs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ProofsByAddress_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_ProofsByAddress_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_ProofsByAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_Provider_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1940,6 +2094,46 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_AllProofs_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_AllProofs_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_AllProofs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ProofsByAddress_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_ProofsByAddress_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_ProofsByAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_Provider_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2292,7 +2486,11 @@ var ( pattern_Query_OpenFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "open_files", "provider_address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Proof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal", "canine-chain", "storage", "proof", "provider_address", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Proof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"jackal", "canine-chain", "storage", "proofs", "provider_address", "merkle", "owner", "start"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AllProofs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"jackal", "canine-chain", "storage", "proofs"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ProofsByAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "proofs", "provider_address"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_Provider_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"jackal", "canine-chain", "storage", "providers", "address"}, "", runtime.AssumeColonVerbOpt(false))) @@ -2340,6 +2538,10 @@ var ( forward_Query_Proof_0 = runtime.ForwardResponseMessage + forward_Query_AllProofs_0 = runtime.ForwardResponseMessage + + forward_Query_ProofsByAddress_0 = runtime.ForwardResponseMessage + forward_Query_Provider_0 = runtime.ForwardResponseMessage forward_Query_AllProviders_0 = runtime.ForwardResponseMessage From 30ef4b0cbafafba7f92c37efa446d598a93e2546 Mon Sep 17 00:00:00 2001 From: marston Date: Tue, 14 Nov 2023 11:56:54 -0500 Subject: [PATCH 069/256] some tweaks for testing providers --- scripts/bulk-upload.sh | 5 + scripts/test-sequoia.sh | 9 +- x/storage/client/cli/tx.go | 2 +- x/storage/client/cli/tx_post_file.go | 222 ++++++++++++++--------- x/storage/keeper/msg_server_post_file.go | 8 +- x/storage/keeper/rewards.go | 23 +++ x/storage/types/file_deal.go | 9 +- 7 files changed, 182 insertions(+), 96 deletions(-) create mode 100755 scripts/bulk-upload.sh diff --git a/scripts/bulk-upload.sh b/scripts/bulk-upload.sh new file mode 100755 index 000000000..cfc74582a --- /dev/null +++ b/scripts/bulk-upload.sh @@ -0,0 +1,5 @@ +while : +do + canined tx storage post-random --home=$HOME/canine-test --from charlie --gas-prices=0.02ujkl -y + sleep 60 +done \ No newline at end of file diff --git a/scripts/test-sequoia.sh b/scripts/test-sequoia.sh index c0bf7489d..cb72f91ab 100755 --- a/scripts/test-sequoia.sh +++ b/scripts/test-sequoia.sh @@ -38,8 +38,8 @@ canined collect-gentxs --home=$JKL_HOME sed -i.bak -e "s/stake/ujkl/" $JKL_HOME/config/genesis.json sed -i.bak -e "s/cosmos1arsaayyj5tash86mwqudmcs2fd5jt5zgp07gl8/jkl1arsaayyj5tash86mwqudmcs2fd5jt5zgc3sexc/" $JKL_HOME/config/genesis.json -sed -i.bak -e "s/\"proof_window\": \"50\"/\"proof_window\": \"40\"/" $JKL_HOME/config/genesis.json -sed -i.bak -e "s/\"chunk_size\": \"1024\"/\"chunk_size\": \"10240\"/" $JKL_HOME/config/genesis.json +sed -i.bak -e "s/\"proof_window\": \"50\"/\"proof_window\": \"900\"/" $JKL_HOME/config/genesis.json +sed -i.bak -e "s/\"chunk_size\": \"1024\"/\"chunk_size\": \"1024\"/" $JKL_HOME/config/genesis.json sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025ujkl\"/" $JKL_HOME/config/app.toml sed -i.bak -e 's/enable = false/enable=true/' $JKL_HOME/config/app.toml sed -i.bak -e 's/enabled-unsafe-cors = false/enabled-unsafe-cors = true/' $JKL_HOME/config/app.toml @@ -51,9 +51,8 @@ canined tx storage buy-storage $(canined keys show charlie -a --home=$JKL_HOME) sequoia init --home=$PROV_HOME -yq -i '.chunk_size=10240' $PROV_HOME/config.yaml -yq -i '.proof_interval=10' $PROV_HOME/config.yaml -yq -i '.queue_interval=5' $PROV_HOME/config.yaml +yq -i '.proof_interval=300' $PROV_HOME/config.yaml +yq -i '.queue_interval=7' $PROV_HOME/config.yaml yq -i '.chain_config.rpc_addr="http://localhost:26657"' $PROV_HOME/config.yaml yq -i '.chain_config.grpc_addr="localhost:9090"' $PROV_HOME/config.yaml yq -i '.domain="http://localhost:3334"' $PROV_HOME/config.yaml diff --git a/x/storage/client/cli/tx.go b/x/storage/client/cli/tx.go index 24cabebb5..b47b2214c 100644 --- a/x/storage/client/cli/tx.go +++ b/x/storage/client/cli/tx.go @@ -26,7 +26,7 @@ func GetTxCmd() *cobra.Command { cmd.AddCommand(CmdCancelContract()) cmd.AddCommand(CmdBuyStorage()) cmd.AddCommand(CmdUpgradeStorage()) - cmd.AddCommand(CmdPostFile()) + cmd.AddCommand(CmdPostFile(), CmdPostRandomFile()) return cmd } diff --git a/x/storage/client/cli/tx_post_file.go b/x/storage/client/cli/tx_post_file.go index 627e635e6..2772a4c6d 100644 --- a/x/storage/client/cli/tx_post_file.go +++ b/x/storage/client/cli/tx_post_file.go @@ -123,7 +123,7 @@ func GenerateOrBroadcastTx(clientCtx client.Context, flags *pflag.FlagSet, msgs } // broadcast to a Tendermint node - return clientCtx.BroadcastTx(txBytes) + return clientCtx.BroadcastTxCommit(txBytes) } func uploadFile(ip string, r io.Reader, merkle []byte, start int64, address string) error { @@ -191,115 +191,167 @@ func uploadFile(ip string, r io.Reader, merkle []byte, start int64, address stri return nil } -func CmdPostFile() *cobra.Command { - cmd := &cobra.Command{ - Use: "post [file-path]", - Short: "Post file to chain", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) (err error) { - filePath := args[0] +func postFile(fileData []byte, cmd *cobra.Command) { + buf := bytes.NewBuffer(fileData) + treeBuffer := bytes.NewBuffer(buf.Bytes()) + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + panic(err) + } + cl := types.NewQueryClient(clientCtx) - file, err := os.ReadFile(filePath) - if err != nil { - return err - } + params, err := cl.Params(context.Background(), &types.QueryParams{}) + if err != nil { + panic(err) + } - buf := bytes.NewBuffer(file) - treeBuffer := bytes.NewBuffer(buf.Bytes()) + root, _, _, size, err := utils.BuildTree(treeBuffer, params.Params.ChunkSize) + if err != nil { + panic(err) + } - root, _, _, size, err := utils.BuildTree(treeBuffer, 10240) - if err != nil { - return err - } - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } + address := clientCtx.GetFromAddress().String() + + msg := types.NewMsgPostFile( + address, + root, + int64(size), + 40, + 0, + 3, + "Uploaded with canined", + ) + if err := msg.ValidateBasic(); err != nil { + panic(err) + } - address := clientCtx.GetFromAddress().String() - - msg := types.NewMsgPostFile( - address, - root, - int64(size), - 40, - 0, - 3, - "Uploaded with canined", - ) - if err := msg.ValidateBasic(); err != nil { - panic(err) - } + res, err := GenerateOrBroadcastTx(clientCtx, cmd.Flags(), msg) + if err != nil { + panic(err) + } - res, err := GenerateOrBroadcastTx(clientCtx, cmd.Flags(), msg) - if err != nil { - panic(err) - } + if res.Code != 0 { + panic("tx failed!") + } + + fmt.Println(res.RawLog) + + var postRes types.MsgPostFileResponse + data, err := hex.DecodeString(res.Data) + if err != nil { + panic(err) + } + + var txMsgData sdk.TxMsgData + err = clientCtx.Codec.Unmarshal(data, &txMsgData) + if err != nil { + panic(err) + } + + fmt.Println(txMsgData) + if len(txMsgData.Data) == 0 { + panic("no message data") + } + + err = postRes.Unmarshal(txMsgData.Data[0].Data) + if err != nil { + panic(err) + } + + ips := postRes.ProviderIps + fmt.Println(ips) - fmt.Println(res.RawLog) + fmt.Println(res.Code) + fmt.Println(res.RawLog) + fmt.Println(res.TxHash) - var postRes types.MsgPostFileResponse - data, err := hex.DecodeString(res.Data) + ipCount := len(ips) + randomCount := 3 - ipCount + for i := 0; i < ipCount; i++ { + ip := ips[i] + uploadBuffer := bytes.NewBuffer(buf.Bytes()) + err := uploadFile(ip, uploadBuffer, root, postRes.StartBlock, address) + if err != nil { + fmt.Println(err) + } + } + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + panic(err) + } + provReq := types.QueryAllProviders{ + Pagination: pageReq, + } + + provRes, err := cl.AllProviders(context.Background(), &provReq) + if err != nil { + panic(err) + } + + providers := provRes.Providers + for i, provider := range providers { + if i > randomCount { + break + } + uploadBuffer := bytes.NewBuffer(buf.Bytes()) + err := uploadFile(provider.Ip, uploadBuffer, root, postRes.StartBlock, address) + if err != nil { + fmt.Println(err) + } + } +} + +func CmdPostRandomFile() *cobra.Command { + cmd := &cobra.Command{ + Use: "post-random [p-count]", + Short: "Post random file to chain", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + countArg := args[0] + count, err := strconv.ParseInt(countArg, 10, 64) if err != nil { panic(err) } - var txMsgData sdk.TxMsgData - err = clientCtx.Codec.Unmarshal(data, &txMsgData) + url := fmt.Sprintf("https://baconipsum.com/api/?type=meat-and-filler¶s=%d&format=text", count) + hcli := http.DefaultClient + resp, err := hcli.Get(url) if err != nil { panic(err) } + defer resp.Body.Close() - fmt.Println(txMsgData) - - err = postRes.Unmarshal(txMsgData.Data[0].Data) + if resp.StatusCode != http.StatusOK { + return nil + } + bodyBytes, err := io.ReadAll(resp.Body) if err != nil { panic(err) } - ips := postRes.ProviderIps - fmt.Println(ips) - - fmt.Println(res.Code) - fmt.Println(res.RawLog) + postFile(bodyBytes, cmd) - fmt.Println(res.TxHash) + return nil + }, + } + flags.AddTxFlagsToCmd(cmd) + return cmd +} - ipCount := len(ips) - randomCount := 3 - ipCount - for i := 0; i < ipCount; i++ { - ip := ips[i] - uploadBuffer := bytes.NewBuffer(buf.Bytes()) - err := uploadFile(ip, uploadBuffer, root, postRes.StartBlock, address) - if err != nil { - fmt.Println(err) - } - } - pageReq, err := client.ReadPageRequest(cmd.Flags()) - if err != nil { - panic(err) - } - cl := types.NewQueryClient(clientCtx) - provReq := types.QueryAllProviders{ - Pagination: pageReq, - } +func CmdPostFile() *cobra.Command { + cmd := &cobra.Command{ + Use: "post [file-path]", + Short: "Post file to chain", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + filePath := args[0] - provRes, err := cl.AllProviders(context.Background(), &provReq) + file, err := os.ReadFile(filePath) if err != nil { - panic(err) + return err } - providers := provRes.Providers - for i, provider := range providers { - if i > randomCount { - break - } - uploadBuffer := bytes.NewBuffer(buf.Bytes()) - err := uploadFile(provider.Ip, uploadBuffer, root, postRes.StartBlock, address) - if err != nil { - fmt.Println(err) - } - } + postFile(file, cmd) return nil }, diff --git a/x/storage/keeper/msg_server_post_file.go b/x/storage/keeper/msg_server_post_file.go index a98e48096..dc0e5fd78 100644 --- a/x/storage/keeper/msg_server_post_file.go +++ b/x/storage/keeper/msg_server_post_file.go @@ -13,9 +13,9 @@ func (k msgServer) PostFile(goCtx context.Context, msg *types.MsgPostFile) (*typ ctx := sdk.UnwrapSDKContext(goCtx) window := k.GetParams(ctx).ProofWindow - if msg.ProofInterval != window { - return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "cannot create a file with a window different than %d", window) - } + // if msg.ProofInterval != window { + // return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "cannot create a file with a window different than %d", window) + //} providers := k.GetActiveProviders(ctx, "") @@ -25,7 +25,7 @@ func (k msgServer) PostFile(goCtx context.Context, msg *types.MsgPostFile) (*typ Start: ctx.BlockHeight(), Expires: msg.Expires, FileSize: msg.FileSize, - ProofInterval: msg.ProofInterval, + ProofInterval: window, ProofType: msg.ProofType, Proofs: make([]string, 0), MaxProofs: msg.MaxProofs, diff --git a/x/storage/keeper/rewards.go b/x/storage/keeper/rewards.go index 1f6fd5dec..f4a867fcd 100644 --- a/x/storage/keeper/rewards.go +++ b/x/storage/keeper/rewards.go @@ -2,6 +2,8 @@ package keeper import ( "fmt" + "strconv" + "strings" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -9,13 +11,33 @@ import ( "github.com/jackalLabs/canine-chain/v3/x/storage/types" ) +func (k Keeper) burnContract(ctx sdk.Context, providerAddress string) { + prov, found := k.GetProviders(ctx, providerAddress) + if !found { + return + } + + burned, err := strconv.ParseInt(prov.BurnedContracts, 10, 64) + if err != nil { + ctx.Logger().Error("cannot parse providers burn count") + return + } + + prov.BurnedContracts = fmt.Sprintf("%d", burned+1) + k.SetProviders(ctx, prov) +} + func (k Keeper) manageProofs(ctx sdk.Context, sizeTracker *map[string]int64, file *types.UnifiedFile, proofKey string) { st := *sizeTracker + pks := strings.Split(proofKey, "/") + providerAddress := pks[0] + proof, found := k.GetProofWithBuiltKey(ctx, []byte(proofKey)) if !found { ctx.Logger().Info(fmt.Sprintf("cannot find proof: %s", proofKey)) file.RemoveProverWithKey(ctx, k, proofKey) + k.burnContract(ctx, providerAddress) } currentHeight := ctx.BlockHeight() @@ -25,6 +47,7 @@ func (k Keeper) manageProofs(ctx sdk.Context, sizeTracker *map[string]int64, fil if windowStart > proof.LastProven { // if the last time this file was proven was outside the proof window, burn their stake in the file ctx.Logger().Info(fmt.Sprintf("proof has not been proven within the last window: %d > %d", windowStart, proof.LastProven)) file.RemoveProverWithKey(ctx, k, proofKey) + k.burnContract(ctx, providerAddress) return } diff --git a/x/storage/types/file_deal.go b/x/storage/types/file_deal.go index 76278c528..ffd5dc298 100644 --- a/x/storage/types/file_deal.go +++ b/x/storage/types/file_deal.go @@ -126,8 +126,15 @@ func (f *UnifiedFile) ResetChunk(ctx sdk.Context, k ProofLoader, prover string, var newChunk int64 if pieces > 0 { // if there is more than one piece we pick a random to prove + var gs int64 + gasMeter := ctx.BlockGasMeter() + if gasMeter != nil { + gs = int64(gasMeter.GasConsumed()) + } + h := ctx.BlockHeight() + r := rand.NewRand() - r.Seed(ctx.BlockHeight() + int64(ctx.BlockGasMeter().GasConsumed())) + r.Seed(gs + h) newChunk = r.Int63n(pieces) } From 9dea2ac9f0683c40a3528ed2ec6742c757242814 Mon Sep 17 00:00:00 2001 From: marston Date: Tue, 14 Nov 2023 12:05:14 -0500 Subject: [PATCH 070/256] tweaking readme --- README.md | 22 ++++++++++++++-------- assets/jackal_logo.png | Bin 8666 -> 10897105 bytes 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6de2e4a39..cc5f505a7 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,31 @@ -![canine banner](banner.png) -# Jackal Core -**Jackal Core** is a blockchain built using Cosmos SDK and Tendermint. +![canine banner](assets/jackal_logo.png) +# Canine Chain +**Canine Chain** is a core component to the Jackal Protocol, a distributed cloud storage platform running on blockchain rails. This component is the replicated state machine that manages storage deals, payments and data-permissions. It is built using the Cosmos-SDK and CometBFT (formerly Tendermint). [![golangci-lint](https://github.com/JackalLabs/canine-chain/actions/workflows/golangci.yml/badge.svg)](https://github.com/JackalLabs/canine-chain/actions/workflows/golangci.yml) [![Test](https://github.com/JackalLabs/canine-chain/actions/workflows/test-unit.yml/badge.svg)](https://github.com/JackalLabs/canine-chain/actions/workflows/test-unit.yml) [![Build](https://github.com/JackalLabs/canine-chain/actions/workflows/build.yml/badge.svg)](https://github.com/JackalLabs/canine-chain/actions/workflows/build.yml) -## Pages +## Wiki Pages 1. [Modules](x/README.md) 2. [Tokens](TOKENS.md) -3. [Storage Providers](/cmd/canined/README.md) +3. [Storage Providers](cmd/canined/README.md) ## Installing the Canine CLI ### Prerequisites -* Install GoLang 1.20 [here](https://go.dev/dl/) +* Install GoLang 1.21 [here](https://go.dev/dl/) * Install build essentials (GNU Make) ### Installing To install `canined` on your Linux machine: -`go install ./...` +```shell +git clone https://github.com/JackalLabs/canine-chain.git +cd canine-chain +make install +``` ### Pre-built Binary [Releases](https://github.com/jackalLabs/canine-chain-chain/releases) and download the latest release. Move the executable to a folder in your `$PATH` and download [this](https://github.com/CosmWasm/wasmvm/raw/v1.1.1/internal/api/libwasmvm.x86_64.so) to `/lib/libwasmvm.x86_64.so` @@ -34,7 +38,9 @@ You may also need to run `sudo chmod +x canined` inside the executables director ## Testing this chain -`go test ./...` +```shell +make test +``` ## Version Map diff --git a/assets/jackal_logo.png b/assets/jackal_logo.png index a491e2fb9e9a27ba1f1c48136e9282f19163b7c5..360e3f81ab758c355ea20e36016ceac19e9e10cb 100644 GIT binary patch literal 10897105 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%0D+Jb4z#o8#fV*fi81EP;00a*@h&d(q zd7$#2cYC^B2+f;e(^Wb8wLKIOQ=}s?*ght2(${L#6`j|m zD%u15mK48OtJ2Y18|^r{;~WY~giy2tQ8My?xLOej?;(8QAq)z+Rvw;{jvE0D8hq_4);@hs{o_y68MYI@#4!lt6-dY z^tW@dejmZEdN|Hc%x?L*(^yhZ?KSS<)@W+vud5YQ6rzvcWKn(hp*8}RKxBzNixA<3 zBQ?FMXbG}@$-DIp4$8;`CM(dbY=$Hhr;C=oHSTcsN9*!L;5p8Ypl9rqTa+P7OT`u3 z`4piB_I8ewrDJLQf;`Pl;T8RUYQyRvf0^Y;u~>9A6)8zk1!{r#9Y_4#_-|$3PKF`f zqi3L9xq7J$QaPHi@g53>2T4k71F9~II_G>J;-!^9MQZDZIG!b=y&G#2<(l&)!CB zd_eXM2zj!J5I1YCRc}@#&D;6BOH{AmkGW8DCUZ^_jy&<;uQ*;up$Cb9H&T&=R6|pK z`6_Kj-u=A2vEs59*Y_DLze?p{>*~QddK2VKdT(^x%2zMs7je9c1|GgO9$nYx;id+t z`mn+VZUJL*9(*fmL5njYr4qT70leN|rh~&^djJ06Nf2}oNF zuj*e5x>kFu1z@HC>jDp=ZIgP+rMwLe=#b*3=vP-dK1zObLk}*Kk+G;I04xEt_r@S? z-17)%koZt*A7rXCI=#ml)z8ckU37d$vwYid8sU#9E=GVC#w-6r5)z0$SeQ;YQ$fEM)_M5Aj(lF!-Af=t{4RQp> z2S|R;gQll{IbzcUFoZ+CU;HNKP>6vt04icl-$c|+T>othGY5~dfOY8E?T4K%C#H~BbR@;lTk1Q+9LeG*Tv^p(SgCb4NY%< z`v80fC!0xhG`50FM+Yj;U)X-U?nQ=0?I$VP#EpG$khUzP#fSur{sbEJOE>NqmZhXB zmnVA0;-B01e?>$aG@WvcM7>HrjlrdQo{v_N5xixT**)}T8X4MFT6e!v?4c}V`hflm zoJ~9??qPi%xe@K&Fs;ji5dVV?z4uv)+-4?#D&YOjDnq*CJ{4`doG{!|N((BGJ3xN3 zv9W^qbZd$M=v@ZG=PCHeoA)IQM?+zAJS3#rb~YCDBrSs#kKPBHt>6RH9)ei+mnEk* zna2R4iW(~k?*)9+NOd}T0BYUkQZkC`+D@5$iRu>n* zNpWec)+(7;YWH=#XlO`Jv!zzM7az`Fkuai4AuN7fKYTJ~kMc=6`$Yxjoz=O^&ULL1 znnlGI_v^>Eq_dpGW;1(&PdHS`J~)@{NxD|upDj%L-do}k6NOG%v=6&grZ2)1|8jQH zT~ZOCf1L~2)4MT~63aIkOUQ!UQix70?E`P)`8vw5ay^`14ylMed#pYix1&G#i(l-t z7SD(N8@E2;HJI}pl;+V?HfMY11#0~LGd*($z9UO4WrBa)-x<^L`~`$XPeta*#*8!= zW;4vG+6UdbN;@TJs(trFPpJ)2rJVo6Jbat$vlE`LaBd zoa5`ZAE^ri%1Wkr%DeuG4^K%L@Ao*PwA}9YB6RnF>6h{)uN6yf3I)$Z{S=d!!rDzc zn^4rXv2O1!Ul{ z1!Rp>Pf^Vk)`|q*`Hv*YW{{{iC0}qh_8_eH@|PoeP94ubNGiYrC9Us_eZ)9Z~5NM5ZkCqf7L9a zGzf9%O17T9i^7J6a~aAhnzt62Sl^5CIRUn07jZ4SLm=hr0F+o-@Pm=w`;&YhxV}&b{1P$JL(=v0x8`rklj~sA#Wgx|nctdd8AACzV<9k ze`5D~Qoxa!j@yc4CV@Wp@C{Zvc1*?Xy)G{z#ckn#&j8&8cd@*OD2cGugrCO4n*lpt z^4V*Zj_C-;q;baYdpXD(ds}r7R&Y0@BdOSRz7gMdp+d{(mEj&-3uK!@@0clP76{w? zEImM2hJJXe)pW^hP?&R>^Q^z+a9sCEmvz4dH~R?8@&%{J?B3Yj&(66Vb1+tc_=s*$B|LBst=etETPgnU(}O! z47^QjZC=g|4r@Jn+GU?u-lR-c9Xpdk4icB&v%X6Q!H`{K0T5ctg(GKn4Di+8xVr?< zyQox&m$}J|;P$z)9YpG(EvdI4yZ5SReEz&f-=i|i;;9gfmfx#YsRe9Sr>zO>(v4W| zUU>FHDS_(r<8sj^SlUL)A&$T_XKl?vWMVPOKgj7BFU@NgcYdJpNc`djrroo*!pIPV#d0 zTcufH4<*zSjP@H2m=`3i+lmgf_mC`mD0w+reTDoMN2LzK&?DBHa+`#_R9f~SCir8c zesYQ}TWmFVR`4ic4vjnXZ|Fv<J{ZIw15ZDm9!a`=)*ava9N}qC>OjLC1otK69_zZw~0s0?8~M@Xe2xxW^o= z0&Q9+N0#$>rc)k0Qte~;opF1CD~E(gRk@4IIk$Sb)`@X3aTz?XnL-=iyj+jHD>c(M zk|ydk;cf3zU@mCtL}%82Uz0h~$Ka%q{m*ge@{#HM;`A-(H`Ekp>-UC8N4rJ$g!djm zRsk$Km^F?&?Z4gr=D_m6+oS{krJn0hcSKsN3g&mIZJ_TYkHxsEkKE79@d??v9U!}F zwSatQ8CWcK08nXXx3=0mx5wsk6||JzO-O0m&rDKWENy(ea}@_VXU%JVN93j~MMVZa zP8NuI@mA)OWn(*Iq>@T+>u7n{yVRey3dVp%eK!u|o%qbF^D%**>ZX{mvXRB0-e9 zD^RY*eUxe<3l^u2%q%b@)VW8^f!~(ErAPbb*&__zgQl-4@ow#k2ymPKz=d4;kPggzr+MDjOypzh*kADJ?SmJaNj-)0X zPv5|U#KJ{|knTa4;F*U1h&BeH>+4oDCxGIBqp#i@wKGregi5LCRWM6;q-I78Ta>`O zJL`*AjeUJyEw!8~Y~}PaDoR$QJ8q%JlcX_}_!neC2inCR|0Rh$?A&ZTHxNcgHnn5C zxdKQ=UF8OFBteF=LsoOnA+n?B8n96S?CplrcNk<&K1t`9NpBH{H5m6WLy$5yxucws z&e4=n9~Xi&dakQae2*~47O&naEz(GyYFs$pWqYYCZB%jX5+y%h$@EWfli)VZ? zmONxz5=h=B;6a~r>TxsjQ|yr*_LOao?icaC#W1AsOS|QY#A5m?;4@d6oiMdR6Xk#4 z0ps;ph_UaS<=7|%tgJv-=};)8nLC=feu4<}SI$2&59|JZTrfA@jG)|f97|lfs}{IT zV6of2b>!KZ(?i-(JXQ;KJEj1QfYOH&2ZZitZdL4oRz&a19|)gtPGYQA~AX{{%(Gc)r>QgiK){nYoDVNae+ zQ00Zsa?sI4k=q=5{PgtlBxCIhjDFQ1{oL-EeVIrxJ~bxfs4bJwwsJ5%Sk1$OC>L)g z+FL+~hF&5m1wdm#fu)a%%3k7Gf&4k%*s-s#@QSwUo8Q3#iQ9f;O8V<3lzT0Gs}~G@ zj=LCv31Ql7;s?Jh*EC@ZRXD-?z#BJ>krXEhCo#cR4&)Qy{ag!FcJ=VwWO@GWX(V)z z@2$$(U~5YQb_KMUP@KZvV3XO{oR1y@+GGN&)q046%Qz#gS4X@J&ZW7?_R^qsIvPZQ zvB2`@V|*^GDwVU!@KqkRUVD0^$%>6mo{p2&o!{XQ-iw=a1*C6BW}BziR@4D+Sd|V+ zR9miyFJAwm^bb0ASb4q&r#n`6LZ88Q-Ic8gFNZO@B-#@D;Dqz0M_`?o!Y~*Qs?SBd zhw1he(`MIoGpw&UwnLY*q*Evu0&?=I|8s&Gah1w0ODXA`x5md`ZKEUflhGQd(cue zAeKaX)JhZ3px%~?0UtfYBO3Yf&o(GQO`o9O08NH59~3UBbdG2Lg9{^02rurn7-c_{~zSCgN z9W`HJiUqACJQdgKk){pJf;j_%Udu;}Bu#O!DyF(mqr*rA^6#@hJl& zv~8rF%mn!wR;#`H$_?AvgL{@|{wbKW3gPD-yVkP1yLqPFEWdU8S#nWljBvw*=qqD; zy)XEJu!{0ziu_p=-&PXLCFE0*DX-~lT>gEs?@QWjTWzVA8`s&j9GBsfL`sUEY=Rjs$rT;m))DM>_#}?)pLKRkgd!B}d(q9E`=mgS9G4VdxW)LBmz!_L_1(GT zGu%Ek6Hbh<<}vG?JGQ|43@v6aF<8x6ZfUlVG>(mIiLX#0WrQ0jRRp@ACojo}e%!y7 zE_Uf%hk4PoQ+(bLbF=ul+aJ{A7J9{-nnT(b+*9Wa@a~fq5}9c34eEH`Xxq+5&~^Jk zoY)l?AO7P_o2dXV$Xl+hV9l@~&>}gSa5q$Yr}&J)q~$&H2y@0aF=^j>f8$PSY!Vni zk;AU#CgP>)m>X^*C+%QF1CqN{=LnN8Y6VWjS{v+t&Jp^T^qDl3yd`rTNgZ>^@}2w{41#Lb3+xmb4QlumDFEiC$4d~n5r(D3WgHu<<99Q zkIsCxNlc27yUdU?V|p$5hoQ4ECeaqwuPuJxU-;_PoZ>1~JCq;1iT>|u&)I0Mh|qFF zm2Zr{>?N7=&bHl{_X-Iu+`qg^GGUo?{x3%@JVb>blMBb!>|iqwA%x^AXTh@fuG@rJ z{gUAOgw6Behm7y_RytMC zVEW#N^D>;xdLz5&h^q7W1n0G=7k-KJmt3vrdX)dT2GmBxzLNJ>J6B$lG(L8PABo>h zy|8=oPRu!`iTPNb+j@v=l8KHRG3-$*G#9twknt@51)egR_Yx1h>CE)hcyPDI*6tc} z4j3V!2hQ>oxCx!1@syNHnzAv3`7%%IfN#;OCAH6}j!{R2zIxtzDQcxb?=7ddq0OW& z`s>lmSM~R^HLWi5|0{;G;hII|bm%O^&+=5ee_Z)!M z_P>MLd;J|(%tCw0I8$cDPs0{SY+rJPcW;hC+4)DA%UzJkzJ<%Pvksw9Z9l|V4YzW- zJUWumg8qV-W%RDwyI=3S{eF-UV1;jnw;9o%0vEm`cGTXmKQF?*P($F^CR}tka@1Hp zdQ5~6#}~Q}+AmiMxBafHP>Qa4PRE>3cUq&STbLJs6>hqI{ux+P%Xz6)+B+Mz(imWg z+LJZsKSDC4VEg~FD_N-Rwdf`NIv+nP{!iCSn^%{Esmxu^nO_XvYo9eh|AFc7zlTsPkB?`4CvnojUTN z&ZglySD%ue`mn>UX{C}!*fcvc^<|&3y_KAqeA_330 zL(o@jRbNfK`RC5%Y<0WP6sgt>1Q8@qKnwNG5##-OP}ujl?A4KG79TM`aMX6zwBT=-oSY6v{}%ys-6 zuM&A5`FS{L_nFdREh;nyI@d4E2a8A|McDm7bCNnZGer8J@u2}(!^?pd}N(|iKM?|RBnpq)hn#k$ZXz8Ek z_+m}W|A}eE%NVFl;a+;f`7^bEM$f{hU9zoJXPBv#p- zS_t+70e46|!^bEFp!9d=6ui~~m7cIGB69)Lui!o6q!G0ppCuwgxXq2AtBs;$R2@4g zWSnrIVND%rB_##m?LUmD5+cg$ykN^zrG8kq1XcFahUY#|yP1XSDOcez(mQ7VU+z4U zF|e(fDjDM)3biKrey|R2ye7rF4z8~80pXyfsKD?sL6HLxY|o)`m?(;4@)3UhcyWfV2#U+ebfJL&weYkuA2UUa}<(SW6neQ^5c zF9WiUt%F*-k2LK~(1@xL4GU*i%L=uAsgq9)8oJctZd5QMx^{o!jxAPk?{Q4Rt3wxA ztv_~zwH=OqOo{9?PuEe)L&9W)M!nlW?Un#KT66` z(@RQVEw3SA3Y~!$RQ(kmHBV-X{@ny?x#uaJ4gkcH}hc!0{RmW}o!1A&Ah;BvA}egSK?wNyk*J z4ejR?xn7~ftU!NToJT=25!uS#-1_z(dL2Ai#_Wjf7|VGRko7Kf0OZ|sZ{B%jkVs!B zT```qBzJU-qR7mZ*$emXxY^%fb)2qSfi_V*jIvVzuk;8T-9(lLxtMU0W%iS6BLBOK zsMaQ3exLWXoJttv_yPVvgHTV1ZRN97IfTKba8f&>P-R4Fy9-)E3sm{N}zn= zt5ca|YWhgfTe$bz8aSc#O~GI`>HunZlUv6Xp(2WPQe4DMnarSxoTReasYa>M$V(6+Y z0ID5ZVwt>vYL(I@;mkF-0xGGMu*_@CM<-05@GjYILIdE5+oKzg!$wA!PdtZh&sHwu zdgviwF^~G=^29fL{Eg;jI_4{DNtp{9}eFb zzBur#9*ZBkxGOAjTc3zl_-CSb?awGsSOT9LUsNYZHYxs5977`^@1I%^Kuy4Dk3RMa{@s5hEN$WW(5vzDeOsi=VXM^8QDYWDb7Xe?Y2`zv6v zKx`?K+iWZ$-o0(rmyWy1@QVq%kF;yFbyOFOW+5XGp#00+K;*vf?Sk=rP}ZDN5=qro zkkB=p-7EDIZy&$SiY(C6m$Y|A3L;PE-ZXD`zG4_3C|Rx!-uwm12MZC;C)Qq-unrb;y<6=Mq2&mCL^Up&*na%^Fi`r)u^F|IU-(k$F)hh z#XX5*k!j3*2n$DB^v%yk)VaL*z-0pI?bz@#Ud2i;3G=xgoIQ=fe(YNh^*&Gyf8O^cg+#*1D7`w1#Q4Pk zLr$fgjb?OJh&v;4FykWEk&&Ch$Ju{qVrz%&%m^(6I)D7(;qrg!Rno?+KC3vuxP1U= zgmWn`!>r0C{*Y@eY6E0Ly|B~%ns9;6hP8|CPt_?BMtQ2zRQxQYw zS@>>E1g%jjR*m{&p^1IAe=&>_+veN83-p z&Q6eW_tmd4pz;r~Cv{u%O$f0S&0aa*a<8J{!9D6f#hDrGio%TED|U{a4I@t|?JCaVLgtr!NcT}DaZ zH?DIZ*gP#o`tSubh7jFxAsWXc>qy0G@e0{|b=2JhXxWqUbxL6f$nAadw)w{c=TDaI z#!ylJJoy?*pY``K1fG=>p#>C){uHXa3lleh25e8METR;^_}w2g+e!<0ngR*R)hq1O zUqYMbh^#Rfu9NNQ={HCH`u7gdWes87`7n4y@3pj|I})ks^QEe^meqd$C1R^_~jVHe9!&2BG0vf--ts07(9rboS0JQOA_ z1c0`WGfD_=ofLDm&*J*gYj>pLu*D7n3hN_0u4rwUm|51?Sdc}(T~+L`qB{0 zjIT(jf6@HrPm^G^Qd;;{_Z#9!3b{I3mEXW>ve;Ow2HS&s^g%Yue2M41 zGu(&zXU|q7OgL?>?tLj}13klS`rNp=yvXN0KQMN#sUP#BI(Xj(M@FSre{Q>P7bl}C zmU)xyXi?!!pI>*?CN@Z@&=a}A+&%ercl|n`f-hh6Gls2s0%2^rTdZpFCP|%7;$Ah( z4_|)lX3?zEbvIYzz-)AY?P1}Kh2cUDf!A_VZ@)8UM3%jn*Si=NcW|=e$Ik)C^E{a3 zOq}5Ee!b%TA4P#qs9B8LZGJ(fg~NcD?ihY67bAIaGF1wn=y)XiN^?}=Xs7XWeiVt& zJUv`)a6Le*fT5VV-@)0+R6T{b=)ZMRFeH3L>$#;>r!%7Z1Zt)HYlc)F0NcLZ^jG(G{7r#!YD4FcWhqEc3F+}X)0 z59$$aOsMFE)|YNE_s5hk$^{Na@2XUylSN$f^aNZq5F9Hwz!~7F< z%Re(fx7$#a&%iF>Gk{;pf4V&Dy@+F?6U9|#Q~P^VKQ3p1gVRSr&{*l-%y0Q~h-z+) zEZ^qRdE3O%HeE_a%J@9iuH!B}p6z`(Pu$bo8ztdtFN5vR3^4{BV`uqxfif%2Uf=fS zfrNgM4QJa9_or{4U3=8FBB?SvOi8fI@xOn=m6PF64g?FRm#qW(U6*n|Y%epF@TY+I z_97RxSAWZh#>6LK`7X!fKEOxSu6r&&GRTlocrMz(dEL?G;;ji1A*qxUd}CIE@{Do7#iCCC z3==(m-oRFuVuj`Y6{xvym{Y&~Rv`Wt$FEw%X6gXq7X_KDm&APvfF8cD_6sFz z1#*2tMX4gwgVTcFGe&j^*|6TdkFw|fK;AFL6Nncc?yUXjRht;kcO^h^yHeeUbH-AO zSb<1)1=55%HaV+ybvk?vAurz-qTHHV%`0@8!D0ST-Rt&mpX|B@^MECI?jR~S6sp-o zpOO0;xIbIv*~<~PWbxzE)uc5qo)qb+)a&p3a=7e9cQGg13jnW%&6mY`XZK+!CgVFp zJ6OnQK%Ya;U``K}<>|R)N+1#Ky4i4izGXA|6WF~YBygI(KLGqp)W7S-^rISZBjA|g z5?YJ}*`tel{DyERdKXH#;r;zSFpW-BP#m~I*u_0v5Fh7sXZalVvP81ke^PZmC_1?k zU1Io5?Lc8|XW9%STp6s@41X_7cCREXt%d{^4hxtW`Rx zb)BiN-j`WS+tN(M^I|Rg-M-zzVI)Z+Aj>V44IxSGNiYIxPY5J;8B9_jrvHbz<_&wm zp{Hm6KB5yU>+zuB6^ns`2G2y3>a{9_DAJf5dWp6Y&ECSFl^?l%6V!g9^{UPy@H#6J z_(w>yNt9PwfvRiVzS!qcp+$f%gGDj(;w(&m+o2LWb-rGjOz8hmvxu4E4{rBBjgDfh zlUa!;L1lkJHRG?G)i{ljl@$}DsIZX-0vTbo}zS}$9(mbhWNnV>k`p( ztQ&r~NsxP_x4)tZ!NQ(w9C=c{^=YXJ#)~FBD9~2Oo6A-j7rS`MZX^ZL?)be^%;fRF zXdv|Og+|_4lkLaXpFYlhyfq*d=g9k5kX05@vT9wwXt-rPkD(7C#w|x51^|osq%gTw2qt=NB;G~pi>BpD|IhD<| zRLvNUGs_Y-Gjky>7XESVXAcDKKf+tlXO^=XsVF0W8}DB7SUNczRGLJyUC#FymYZSK zL~&bQy)UW3TG?fAvHkxjI`ep_-ZqR^Dk)N_kY#>Il8`;?C`BTQBI_g}WKXglrKs!_ zS;sE2BqZzDcgDUmwrpc(m>DzYdC&WQfAryap8L74>-t_+IK+}-f*#okNZ)aY61whP zP<}};^>p|B*ALVMk`j1!q9o9wp?*z9_UZKvbq^Sqk+7=4jz0eG=7|nuhM=(E%iWxCq zwDi97?9+o=0mwHU)D;LzDK80jc3q*#;UzK+l`2#nQsDIM3N7`U+ql4lu@^F@Imfrt z|CNhvJYhOB)C!y3qar z`j2|gBy%rngEJAR!!q|5ZQ1!bw6I7{&x(%L81NQ(Ta4X6XsP`gT;REPJZMG39kc@m zASTN}VN{t%1wfi(&G@*se7B4vGtD?+@5$2(46#1HXvbcpR~T5WbJC;|?X>n@1006D zQJ%R0TrPHm?NbRWQG{jaa>3RATm~U6sb?2@h3I9nD%96`Kr@>pKmXSF*{Pa7>;k6| zrj&%%wx3fH8nU8=$eVII{1(DLFytJ5s`U``(?ACiLaeiEN%T|_gbH`R)bMT8dI(59 z&8k|C(maTXexxyw#z;J?wj>E8~kXf50teft`JxUT^3o^ zSOWpviPxv008qWW(p*pF77i@-l*xwe);$7vBIHDM>Xy)|6$~}*EVtB+HaWbcc*J9S$%CBu_ltVwsl{) z@cJECX&cln2u0@>g{uH5^Y3P%Rn=p=MF5g!+g(rW>gu2aLtkQ9*a|u!$ zxV}_-k9gGE1v?q}EO$zt_onq zec!|xo62P#a}N1-jknIqe*zf3)8;-`(QdY!S_I1(h5HxZSolta9(l&@EJJZpkEA<9 zs@T2fG3^ZxfSGaO`0eVS)z#yG4UYXKFF1~L(!tO2VW+kj18Nm$;avx33lBbn3!h}h zibIzc$7jeN5kENMC%yTjVIUAs-gj9Eg|hbFJ~&vRx1m+$35_X8j$;P#HRM|v&0xKM zbQLLl#cqbr6U1pdTLQ4H;=Fd(mLeD80}C6hWnS$r0v)bgsB8$0SyWr zdta*^^4ud$*imDOUHp(WM}xJaR80{*(3X!@R25QCjC0SPf?1{=x=A=gherNRYyBn)SII8XYCV+~tj_2bxZ% zJ{WJ+e`s+y{|Fyd1R^LcTeG;p=*gya?PDIF_v$*?J^f&oRBAW5- z0@|8*3rylk=wbKww%WIpTWxE+o8k@jIn#PT2#Ef)qhtR3+cl)4a+XNC3s=Gq3B$@r<=mTFT`4#q zLUA(hOyQ=P6atZAR}L93d229-7;DdxPDn^`wcKp`(RH%rp2T5`D>*WcWDh&u!?zKNtYP$`gd+ehZcMDmA&1N(F@(yg?I*w$u zNR>5oHgo;lR`oxt$zJsGOA+Td>NeNs+Pd2Ar&S?IthRgyZG);>1!_;*<*1DsH|Hgo z_S!j8CR|Qrv}BY`^bFC_{nlc!^r>)Em!TlN!J0 zvwltg-h0dIxR2HKo8959RSqhv;pEgH)Gv*#c~q)@(BI|-vSnf-V&oF2xB<^x%=rFkMdqab|8xHv_)Q9Jfzlgbr0K5kZ_@ENpR&aTZJc;Fxc8M zOn~+R3P97zWD*R!Utr4polr8uI72BMCgr zzfMM^#NPA7!F_YSt3P~Ei?J3B-wW@_9Ka_>>IR@9(L=9rqYp{gi|t;E9d`Zs4<2A$ z+{Ng@lZ$ht&!ck`5CV2OE)o(9c4*Cv!F``@9U7MPd3*1PlKp&qjuK*oPb%JugbmT2 zjmH7mh6?fj`|4mS1)DWExVWT;nl|jV`1*IUM;KITo~;tU`14 zGj^TDaVwJLXDB1ot}+WV|&!x-w z0MIlr3myUnM%W5B9zAHqwB0fwv+%=Yl@*C+p`1FY7%%uK*l&3U{(VAhJ55h$Hu+I3 zq6?D0vuD8>K zj@vJg{y$B`LH=;J^S;3q_BT0GDDj}=4bLA;JG4Yx28 zM8i{2dPjWQ(Id^Dfs{vK2RyQqMB%3IocHNO--l}8=tC1_WUqz^>nY4U#8qzsa~_f6 zp}htuJs<+IC4LzSqma-EXoK?l6X263Dd=@t?2RxI?ta2)HuM6nToXf}4C4W<5jR%> zmvzbZhy(y$Wv>)kWYulbYCBNC-##(07fu#eT>2DG7lH)=;*LB-Afp@`glH`jbWQ?R zT>Wh`VX7O~ftH|YPzgJQR~pvbm@*hjPHh*CdUcs5Iw?Ws&I~sSYQu>R-Xc4RvBhT&)N^l$Cmh6*i`Jg}Q1t+=w zqSM9$E#&AQl%a3#){+{C)Ua>-9}yhDU>11i8}ek0ciw2*<$}A)F#ouRylsNc?)Vr_eAs?U`c65PhBBGFS=bdJBP2lNMJS7(m6OTUzT&~BAbzb z%VJPvK88m{sJBJIvJm9!wRe70V;ydEtXOE+u}W{Vm$ggF`*d6fsbXcF!J2K*V&R6< zdjtCJUwxcwInEJ^WyJ2;sr*MPlQ)3lxWcIY3-?GU`8Q#VbvW`r)dAcO&;?7miOMN) zCk&6j*_EPiVB>cGY;&WiPCo%-b03#pXB{RfZ*2S_TsF9s zf#iDdR+d$3;DXlF>gwLeJo;4v4ePTXKnL0pNF1l1eTrdp5ylih3zzjBMBnredus3| zime9?L||LD3afnl0UhT7TZKu-JZP4q*c?O`{oYVSGKGO~+0{|KcV5mIurCE`A$Uko zNggIjP_knZ3;IcDB807JL@z?_LuAy{I0ZdWIw^ZEbh{Tu-F8#MBPk%H^1O^@bKN%s zNH8FMAb(Q^Z$tLks8Wm`eAVr7L4Rjvp{gn}V5P$VRVE`-{_GQV@Rn~xQw*8A*2H?YT z6_{*)y@(G_?(p4&mI&J0+FM|9AG{vHhyU(E3KBY|f_b&d5?s*D?sPmiZpZ0!x1%-5 zsvhc0NIX3DljamnR)E_UA$p|J=VuS#N_s$f;LOror<4vQT?aY8(EkYV9*pHT%O?ee zwDFQ~?*+I9WSoYf$bp*j0UBz8 z(mnBAgKG^4wd_Nr!i}BSaG87ZZ#z8(tfw5FIo>V6i+gULxh0@6tXLe{syzk^JC?)f zW!x%|v5?-lMHi5b62fom3L-tC@CF1 zEHm8+4OXGH!N>-#5hOW0>)1DWZ&yxhMGN`@+J-*Nx^okAZ+XWJZllD37wq61sCZZV zsFV&ehwhx0gDJ_ccm3#Cisv?AI^S!v7S!Owcc_?M^g(3wyG!fy7DvL>SSYOz6NPB@ zV^2R`Jk7nY5$qpM4zJn?K7dM0#<#byS~X@`CJJY`kjkkR`vK376=9DS)%D$s{$mz^SBxCG#~FvR?B^c;x=?Csz|Zc>_WX!;hR;vkmHPAi}p znwu3kBI6+EMPKn&_pTAiHrOq!O{~zb7X6>Hn{iv&@P9bUbASK!%k4TjO~7MHys42TtXA3!3ylap{D@CsE3 zKep>b^9K$4V5QLrq?`WniB6a9g|6AlX2NQbTIgs^}UOa57&h>r`J zB2!af3{{)}*yln#3&gA>kCt6U9FQ>H{*v1~u23!^8f^rSomKy~0%x2j+(E)w<^?&i zx=Qj};R<#MubRk)T^|=VSrKc(pD{8%oKKpiEbVY-xFjgtx&~_9=$Lf9%BdyXmA4xN z@a|?Eoe>Apc`SU?&G~?-w>zCtE<$@)tr`vw2npsbY+zBEDTfznP#2YuQ3SYYvnR~3 zRmTk!FQ2yRz2y;XKS#4VIooih@lNkJw`NA5yTF^^VA0nW%P$JscS^%#Nv!PH&BTCT z1t%XZMwr9l-`{vhAMpF8s2`)NJ`;?&{sR$J7``4ofBKq}ZA6aKzysr2>-mn$FH&Fr zez|z!x={V-9p>+mPAR_z<9qXcb}BO7%G#&-cV5Z-b0zMYlASVx{hxah>K9ijm`{P< z(jV3Rj&D_(-woCd{hJa+@37*GzOXzw5wC`tE;mm-W94E7jw|ebdvg1>9qFXkT5P z3Vy1!y$cHAOkJpluHD9CuJG6}-qs<4_JBp=f}b)P}KfBP*b-OS18 zm`&cs;@wC;M$l_}+3(`R3qW9sE6`x=bLR(>)3n8MqeD#-N?V1aiph4X0VH+ieL9p+?gePh_BFs^&F|uk;mlKWhhrdA#Kpx5YK}~dy z3esGY2E~e5L|RRWm_Nt>YN!@>(q_yo*Qu;c7}}x6?2rkC!{^_&Fw$C3JI1%3SN`Lm zqSCC+z{IR6MZkIC)L{G7!NlGt9e28gDf@j32z_Zab^qkm1Yc^gs*e$Zu9m1L;dEpv z!_th1)6u;+6Di+(b!x@`!|h4QT>_#YI(>T@yfR@_0!jtpg{wAVc4nPHr2+1{ zA$2AVp6!u{je08(`kH_zLHTk4&^>9yLK*$1FHM@cGcy2W8g}r^oX4v_zj14K;g}O| zFB4Ml`R>;iVye}4eAd|fnG0OC3RIn>*yzq9r$#RY@6!>qiML#0t>k9x9^J0}KjS9l zQNMeM{Q$66;U$Z|4rwF!Be@+TI)M`IPt&9mkpB`!C=wtoD6v$O5Zv&wl0}#1O+u(~ zq7hI^?zE&3vh+NzyiT0`Y#_)zma;iMlg zd*b%O#*I*H$08FVb%4${)o@Uv)G+ANo&)F$wYW~Ooy1+SgDKeUmQzJHi#U0DZ#yCX zW;=YT*}462J6eZU_Kp{!+2FQjE8*eB;~bWBY;6NqA#NJl`?03^CF7-tg*{L>5-lc35N5l4*)=zk(Nhmz*yz{P&TT~kkwTn6bi|lmo z7`Q^rb#}OT5RcWSv6aR;EaRmaHCHn*c3y^SrQ7M7s2fFW_slCcH`rk}=I78HinB~| zNs=!~mDX|>b)lu3R@7Rw+ryV1uW&|7j~9mf6Zo@>-p-=-si=0S zv$)$s`2)XVHGx{xr~f9iwlZle=tHok_Q+vq{*uA-KPm*xZ(n4TghtDzZ!0`EYOEFS z;xcdk3*@@xbP6}Ianj?r>Gc9w*~b&kAL^k|_Bq>zB_hOB+8L^hDGTEfw2AOaWp0g( zc|bY+^bkiKU)bmT*B5frsD$jfGlo{L(~kATjRk6MmE3-JW}LT#lZ$i1ymR41aqR2= z49)7$>AwpmcL@nN|0}tW>>EOJ=t$|I^M3*4i<^faG>HfQAvT-ony|(R@W`Y zYiLq8;GO#8?Tz!=FV|LlfjDFF?MHh+$=qOhS!z1sY&q4m&dA=n`+>C}oIvyTB|=cY_qyfXFis{ZZi;M#kX#Mp6_#- z?nU!K89$fKvDP9Y`o_YKU9|6^^tyj}-@T>bNYt^W@@2w6;OcD>%4rv^?1CVFs7|@S zc9V6NAbCrTE|s_tsehV^RP4yyw7>7u9q@!J{(iObfJ-o}7J$a!O;5RF7isF_$*m!O zk;^t@;OjS@kv*``(ECwp@BOs}zVv6qwX8$n+u=v0_};JraMtporq2*?wOT~}bZP*> zdzE$_zT5m2C<$K=C{8OlU%wXsu3Qro5fyDOR-0%FnU_hn$DRVjFHu;I_iK^&=;258 zhuOiX^D)9S%H6Wog-$4${lAvV3?D8Jt2U=BB3n%W?!k<-@3d^usDl^hIXA1}*w^-m z2h%AjnT#SLo0*WgZsd;Afny!Q+A`)+0LDua4Tv@5Bslox<%gMI6n&byLD{(l5aws! zeSBK2OqAf)IQzFexe?@7^zf=K{^hT3R)?FZ=$+sHAmp#Og`!S}wyw9OE#q9yzu2~* zV-H7IdX}5BarNas3ec=(Sl%QiPpL0 zYM4DGZ@u1cXaOaE`zxAn5(3ggM zP2K6dv>>!q`QwJD8)vUx^9eCM)6)8{Z|4UXZ#BbzxAwX`J{T*+dUil8#+L3Rf5_5U z^?NWapY`JtpAjRlM%yPao+Ux8Y^M=x19B^!T0}h0v6_AJ6b(B2(Uh%I!xE{>VCXtt z>2h*6ZUsGF=x5(45QQZ{%;yCsISmoCDJ>!mAs_{FWD`>kdZ4gyGaItvFoIkSy(l_(~8ZQkxfXv9cQkT|iPh@pw z-!rQ8gCWEgG9)O%6bW4+tjb8q=1=Q)az>GGPz8*{58VPSM1y$9El!k{IPg90(?ZYz__c$*lSIZ+_L?E{ z_qbLZBPchPL`=#|*XHG5BNcTMC-UOrP2TFbCOU440)CgnC@Pj_7*L1%W)s*D2)A(G zecjl`PT!A_yz$WXo&5b4$+R6pPxP%B0r;-$)DHG`=K7H-KY&r(V*tz6ANsvrk!@CC z3A}&h)nWbb24-5kR-zmae4li%(oiel?M!)0uS#vT%2+ht68i7|qv2<3Q1F|D+gSO* zI;Jp5;XU1XV8Kn7|$%0&I*Z66dzMB{XXOsHE=_z@oWb=(GWpFy?tK)3wi7jc7NcM0 zYYGY-SAPC3Wqh*$?O+I-wlw{nw6oaqgRj;i9fjhbSm=f=`G0=byq@_)+gP@l!_~9b zK{_uLgx>4#5+?5gH7SuB^)Jt!jHN>E>qs$=63?VQK-NxoCXWLv2ii|6o{ApiaacYh zz~7J98RR&T^Y8MXYlWK!AQQ+}XZ2rLYm|51M)zGs9`3jKbqhWra_v{?i_0>Pf2Jd> z3Zx2rQ9>~(fn>L}@p#pZj_^xR)vyOACREVIdl{YEJnbu#O(oc?>ypsd$gRjJp-#t3 z@2;?Zw54n}p{aCq3l)7?!q@XBc(98J^vDBJIg;lD*$o^s%oKPmy~L>Dbr9!0*y>Rs z2}chH8({lNR?9Ev*Sak%=h6?Qv(M^kKGiJ`iRGsM<{#Hp5olvLVxsdh#DK~Ci`AMT z700YCanIw!3EpNlvw7-&t0pJ~sjqKMQ@^Boa9r=IJ(1R9~2nakI{%+`Mq|_H7Ss+xHx= zTzfnSWDkQAS+S{9V~yV>d(CGKL47}xw;aQ%n7EB;&}_Qanb2DQ&$VF|gUDTq-! zRdn+whD&xMm@yR7^2aXz^aPu#^sg;R^Fpzq3}eZ1nW2`?|6-@$IACCsWw%JRZ>*R{ zwfQ#zYPq|}TD5sXB6H*~gU8v*7mf<1%qib{p%@Rv2O@&N9yR!1_Hx?(rApNVc=}t@ zAq5+DSc0sv-GX~tTXM=btQj|wVA)4nJc8)WROjOr$!{pdYv!E|(C zWEIr*zgZ)n+NnoQihq|wi8&1UM3(8u~B&Gi$`->G~4i!&~Lkm>-dLc9<>ej^8% zdy8JT&cmqMbeLL~%kL8OvY&3r!0AQzY6m-vK%Bn`cf+&om}Ds#t7?zgy46lxA#V2E zU7|lzLr^p`V&)YFp+46eey)1|dNgjUo?QA&*IRiXz@Q-a^d_y1pZteoh zwDfj&9D#p;hm44_`SaCTxM}f1hRB(kn$C;?m$t`G<>zjJ#oFvpeUPB;NXd1*SD)N9kU#`@wyA&Kqh# zu%J?m87IuD4+P(US8pl%`<|gGyzKBR=NALS75a^)0A#p0@XQ78?ZS-7g}j1J)~qZa zWAsLrl*I@u=&!&_?UIQ4eWp$?^n*!9syJWyQ(h{8Txg$CLDm6Sq}5vv-rsX&F`O$3 zuMoagR_Lh*L`+Ld5d%o;=*{+Od;+)(b3wqC zoy`(5H`g~@ZMp=&=LDxDg8ozPUCeW?R^<;X<1>Ro*lQef8(LO zMc8J!;hOQ|j3bqhnMp(oQPY4m?cAqe_HQ8f({b*QBYY`6XaO z#~ZY+&Ib;v1WX$&(lodj{Hn|dj~Jw!R`+g z#ozk!bgKb7_&Wf?utY$Z#dRxe7HVyiwf4doVKeO?eY40FzW3?)7r=IE^i`4D3~t5U zoMwPTe1>@wEE?(6u+ZIkEQ22&GV-NN++*GwZCOr40BY#|htb1@Hgwi5m3HXc`@uy6 zkT7V|(;3zI6XBa6vQ4)f++@zKGq#$vz4+RiYyTaTkzbvPYXx7KmV+3OFN9m@mBQvj zV7aQcMzcBn1l}>GKecb{CMK$`j%4PT&Nng z#a~yJOZ4stvEcNr_cGmY1WV%MtNSgaF;TD3>gHbw1$S@r38#%&>BY3ZY%|V^@D5M4 z2sq~1Cj0y|Q}iJtIr&G7@5½K20uYf7L6tD3P8H=oJkMI5TFth&_xa_0lz2pgb z1>~O|DI-nXunYC>kn>@A7Idm*6Q!cKAUd)nmG^5x?c7YiW}er|4Y=W#A}}dfjgnjq z-H{pI{WqP1mVFnw@wjBA=icQDYrQpNLtZ> zzWup1KlZh|-+P5&-=S))=sEv7ICu;+A9;(<22ZB1S&?K7*y_N>9$*I;W%OxfJNr(=1uw+Dlq>wX zw@v~I4r0T-J`!X@dQ{z~IOC8K3n|`u!*+&rPIq6kqhH(m=H20(h{z*$bA;2hV&xTR z!Ey6#&X8{XVm5(9Hm558mDo>Z1eWG(k%-7h?b zdz;@Ho7g%O3%dk|NSI3oU380(YF08BP29pVj4k@sWS_3B3r9~wFT%4@w&kVgchE)Y zLq*Xb3*^6Y@f@o5}8v_cJ8~VTk$_St+>WPu_z9Yq5Km|ux+?&AiN>lZ?YWc=xxD*2 z{5qkrr=MddLjY_=<~y6N@lbEGvnDPP#>%UX>pU8yNZB+K0y&c)zVdUN!sN z;(_q6VZ2^gAa3H|rt=ByQ4qVI>qmE6IhXZ1neGA&$q5E zhi$%i7XWdp`1rY&bAIcFR+YJ|gE@&3q;cao42Z1GH4yGj?OXV6X?OHi>znqFWX1z>_R?3ba^Qp-LdIEcmes`rNCL66v+|_E`>Ji6 z2Rry-zA&$;5PADsL*0t=RRy&{h1T~9G*JtW4v7jpQIo&2I{snRWc==qVZx#rn3>zb z#YmCjd4rnJr)P9)!o3P;;d@j0Ae@JHRiVbfQI{go9r-LS#N+G>#qSOwezP>|s!+s$ za*f|CJVJaO3pDuOxHx=Cvp4mpzcTPrED&%x0dD4f9Q{22bQn9lGc}tzZw>)pmA`OH zs5qnU7v;aibITPcWV}IfU<3T?i#XqTpJGKCdVq!+tImy_EJxEv7)v%&=Y_-z9#Lyy)hdk zx%3$n0X+S~RQAz5EL1>SJlvi71Ppb1&jWnFAJU{DA#u;!6d?YTc>nIhzPz>yJ_f$I zFcOa^AzK_1JUNI8<>u>*B%)Ypu^YL3?{Y{@&$d{}h5PDyd6yl|)~e)|EFs2Qd0rF& z98l=s6c1DdFi{`!M8arb=>YBj0Os2VNU(|d zoO-C%-B}UH(m$BaVb$RTDteycK*!id@lLD&nGYt&nGHgLDSiFcKQ}sJOE6?xDR~5n z!;8ID@{uJMYqbF|L>9M2ZFIypv7LGm+0|DYG-R=bf-O4eof@ZtzZZL|Ue6K!D-x#} zx;$EoWgGL67FCnGsu+ET{s+cl^{Z#K$t^BQDmCC>hX5?uVHw>^Q$v7Ep+mjPJ%GLg zX{r{s5OpTMm(fPYG>Rvr*@xualYR;bV_(iJjsBK6V|S>#HYa0ELW(y=gRf6OFrP_8 zWavdB1$#%daXTz^6rK?`Hi~czd(ElYZyB9wM?IXVo3gxmU!#1pebhAn`Ke*Ulwt#^ zvt`y$Xsp+q(KuhBny$8sZ~Q-3-(-PXJZwW;{$JcXHTa`saomKR-~A0yD$g5+J*}Da zlTF+XFLJa)B@|Y}0&64qF58ylRsFYz`g)CT{IO5(viN2=xOKAO0td0{i~`rAG9PQ1 z`%YM%dXbRm{|>A4*Ti#&dL@P=Be(o4^rOo^IPK`+?B^K1DM!=I0*#p#*Ercn!Mrm- z@U=qaAD#4Ww-Qg=7%q1Pzq`lp#!nupy4)?liOLyE2yXXudEX>$&98S&WtyM>F7_wU zw0v+h|7+j#8Xc^JDgX9gdR}eJe!e6H6IJ?70UD+{p-yKJDZ{08ctl-m%sZZ{)Aj50 zk6t!a=cJHB%2406BMaoQ_k98BR0J1%Qj311XhL*zeg{=6=kBwkv_QLPp}2~H6S zqSq0b2}K+2^h6b#V$Gt{10n`YHG?8HdrRl@vA=Wf_7_hkRuzEcsrC$;zyc6SG50Lp z#XQhnyWuQoQwbY#FM2hg`$0pN!N1OhIV^(qu~`O&h{cKE{I}<_N73=UKm7@+VM>39 z=-P>kr+PRn4Twi_j-F|)Hv@tK+(f2y4LRh|RV6mZ=SZE!s7SYlsSI1U$Og@35X?z4v(nfQMHGg|4oeUuL_y|*0Gp%RT{u^2RhnC zhWZq8J0j{HE47fOvB?f(cOmFSUYrqL`pQOIc|L+y{=1FS+kBb5>`%_O;)-ceEF z`Eg6n+5=^>|Fpe%6Jf~@gio^4yd|0ECGU*eS*`a#62khAm(iENONope*<*$BI5Kwm z#B*ls_^tDHc~dvj9SmHj>6g%(1RIVV`-opp=o&1^RHw;HIr!_vr$0d2^zd9EI&-1; z;K~Q1(k=#S?`_$+oEN`R!CnfuTji(M*1PEKF1(ce`Od!Z<`2+>!|Y-&In95zzQdOy zHq&(6x%o$j z7$txsqObV`gNKrAT*DvRA?b!M7Q@hsxKqHs>+{(i`)MU9@--txO^VE@mtIdgk-FWB*437hBhmm`LsOdhA66 zs|{}$nHC~8KWHbgh|vQje}Ic;<8Hmh-6NM-T(S>f#yQ?mOByyMYc$;$7qJo-{%Xef ziyEWz;{KqRBC{4moyMJ$H-1UCc*rj?Y06x9SRy{LvO5P=eF-v$j$wj)f3pshMY zW{CXHBy^-ypqPt<39&x%aD;+lO<`NgjUG`LBfX$oAQ7h{Ak8rc$k%htIh#G zBa{b#4U7*sg74V7g(LrgQ^U*n!qqSMeZNu-OBL$tn2GV{tV1P5g6!G_G*Ie%7~8cXV(0T_3<8rH}STfupiRJT*I9VES!hlW79pqW$!ioAac$PNLx z3T`>l@>A0J-U5^EWdJv#10rc|rW&x3r5PC|+K5kr1i)S(#0L9TwYXVbT`os$BTARW zpsj7wX9&GnXfbg;Y}JNF+h_;-(agW-I>8Ln;P`hFW*`dNZ>H*_E) zOQ9(K${_AKzx3Vjd-i`fH`;NFJlXC)+E3ablxT6@UA5`onU4TN669{XVyJV+#K)WI z%GWE=l-57Tf!JJOtqm%Tufd3ZuQU1Op8}AsJZ|6jz2WzR&b5OSnPEwGLOHyzGRp?k zuKT>uDx6ci*pC(Q!(qumtBdE+jwgQ!feFJ&wYzt(mwjnW>vRxP`!y0Ey$Oh++UrfY zjoA#cNuW_#SM;M&k4hj{cy|2H0VEaM+-UNlxF7qIz5i*Sj`}QvjWm7s{Rhn#od@5L zhroB;eHn#GRg)fLJGKwwmZVsTnM+({!8e;Tc6NC&iw*w>bvW*UND9KK*~|qNi7`)} zTP&hie@_Q&9X#kzeuuEcW8#N|nU>>HEzvXEQ)*gs$Iy6Hyz_jo1Sl8$>-cs2wNEL%^D zeQ<5f0cV5xz8wDnkM{t8^4@sQt69i(>Nu5a45nvG99r*YpJu;`G}EQ+LjmY6ofGT) zMYierXCy9=Hgc`|!G{s?J`f+Ui-ox+q@s&<374V&A33=Y0bj{0)~b9e;H+Vg7YQ z2J$XFjkU#yJ-nckG!e)DhmNK~rDfAQ=rUWjb6i9AV%xYifMnIorMg_tC4Q;AV8F(8 zd#0O@^EGi7X3aOuBg{lg{EBZ`K54W2!{oW?nbVm3M4FJb08I)jJy&`-X6`r~{O|wRJf|nSMka&``pB`6t(+gunfEt={Tl%b+G@jp&zrG z>-Em7M>bYKtjq^!VFmXT$ccpRK>jidPXX6381YRc;YMqCCN~KipnD<|fzPyjRiPc9 z!43(vWZTD53Gx8H2sM_JF3wR=jI{mePFtt2eQT}Ry8~LWWD(;nbuvjYAJHUFr8LdOzkp4+mTZE8ROZtP#@geR1Lw)&f=7&n1=mi7kL#Q~dr=KmG z`$BdxuTG{eX?@I24EFsp!cH8xAmVUOq`G|I5jFf^2i-ThWV3Yn^ata7{dmW=#kF-C z64cn4PBAYa%d{<8Xz1CoW=#Nwy!0WB@s zHf>{)g4=)pf@P5Ne$BVi3b0rw%@L-b9OoxU)h*Q?D3srH0pUpeq9+<2mZ=A8beydx zXPl0grsV~8V!@~o8C?zLa?U=vze+;iRn1_}m0m|AG}X()8$G%!K$PFF4oZ=4n=*D{ z0_uul?G|GWm zj^`8SEE^1&ZQ`K3*(c8FB5a`Z&=JwO?@dh@kgAV2yfH!@<5*BAZO&iA(fFMnmrRdPxvCAZg{E`C=1Wu=s2t_jl9!A=*c*+3t z60;+X^{8#g+9&YO2T>Xaoet4ri+{!kZR_uYDE;TO*)fj?$h`JVjuSF>oYgJVE! zYu2@E)dwCXJE69Zw{*zSaa91NA-SWJ51Zxe`9s{Bgyw4q`2yM?YkY`s8)5>_3utg* zW6Pz9)8vg0k8$kDTwtJ`sm%hxZm4iBxWa~8zfE^)lNMhi!0`>RGaW(OH-2qfPc{t3 zlOdQwh{{F6H0vy|B3_xDG+elI0R3?O%z9QtWa6^G!}VL6xCP-0#k|KI-sFW>&i|Sw zXadVqw?{&*i^SW~1a?vW4bJ}P^DqNA^yauTwY-K~$lYQZ1m_$zayV<&z5)Kupf9ic zLyFUck9L#z4Ny;Bgx*$2UMc0@3_lxifBDj%S4iRDXpKZmo6{h4#A)pO!ULMnt-rx$ zl1Ein1j%529~u#WwdkMCTTdA$_9ZyY;)c;K5o0Ibfkp^aE(5t0&=(UnT@4q~q4Dv# zOr(3lJG8%Z!S>b+hT~|CxU}X567+(8^4A}SXP&=1o_RHS_=eM+=u}`3(H}9khyx6S zpCB~k2^~vDy1hQ9<|#OQ8S0(R0Seqi=paH`)Dg8yI02F_e}RY#$;-bKT82~tKWWVv z1tRSM8!J!>5$fZ1zrTwrhRbyQ0BfR7P}L55odac<1)&jOW)IhSNLHYB(XDD* zc=eQB0z8KX!J6z(&fGmLEtRLCN-W=b&)(AKw72Sh&-?fBr?*4}gj?fI=wP}Y+z-uyLd zQ`q$r11VuhfUPx*N<=kBTM<$OWfv|i#Rr@THIC#b(L_!)b*EfyCUKmKInh>lcArV1 z#BbF^taPh1{{7g%kKc#+0s<9}EUh$X$`rv-t)ZAeczuO@^LM-`}gQ0iX0Yi{LIdTO)h)B{S!MMxh$x{TWJY8 z)%)G_JUooa;P4ZZO?8{uUJ`>ph9q*)8=UL@8?helP$pWOa*L|}V`4XYBM*ABR&ejf zp`4z*#P%<7IJ&nJ`v>~-;4sGj-u3*^15)ZW#pjHu@^D*`Gq4?bXeTm-@FZ5en@Lz> zciJ;fqE;+59Qg;Gj~`gsCS^tVVMmrO9EbB;uqn644yskSHL@OAxxrrWM6KGkX5hc7 z&g0PnnM>b(l)Zk7OPM_fk-#Qi~pFT)pRP9{dk{$-ZCEH%-{c` z`ieAMbMh-Fk4hss)0i&Ky>eK`PHEP42Sse4`EA^(EvEc#HTV+6Qk2IV2x9^n? zK3tuSGDt!9kab#pyUd0qhr#^^mm>GkV~auri>3KAkt7SGUqy&HM4C2r#&ckd$ADR_ z+tzI!Hv#clBqxX-1vScr?df2ps+KHfF1XNXNWlSShln=^>Y* zxF^g^Vd5AG{QV6XjIaj@0uf+l_cYvBTj+d;Y;yZQ*y009aK*dnk-YevARvD>wBd;ign zKJuf~4ko|f8jaj$9>0#Qd|?uQmfw24%K1g~8pPoch}$GtiTq`pza%bZ_(IiqRZjZJ zYA;vvUxoLfvzxzYD#n<2IEZYq%<%E8l{#C(@7OO+3(2{?{%)!Si=dM}*>k%M8udTiF1`3CATDAk9e4}OP@}C0S zpVbA9{l}+UJHr+&A`^S&6rD-v;jGu+7}UU(1|gjSh{kp4u@`wWqhCXD9)&9d%W~hV z%^&o9Qz}Sf*Hj&#OVp5>A}2Owdk`eV_HmavKaTMbaEu697mhj$%;$!u-cDg`B`$`r&*bGIFR55pe{l>P+3Y z8L>&vDvJX)JizGzl%Sh4!b1f+yTc@;3z}wb4SjQCb}l)y;IC5n$|u+&I1<6R`gMy6 z#C{{fr-AQsFldI2$Obu=;3&QX;!Y>&cX$0Ij!7Q(4JzbPn}4J)UiI{VY3nnkhiG*C zs8~I>)q+uWSNG-7DYAncx(j>_o0?J-)sbBBf4f;OKz$nA@D5}^xV%1$+<27QHN9{_ zeVULvf39Rj0~vY7JP~oLA_0UueL1F9JTMpBz#k{1`dea{-)rpOSeo5G{t;XGz4E!U zUBaz)F$^nOTJLi>NcMKko@}mBjqn>F$@FmVNy_A+GQrWp5&GwQp?4W<$!kZqkOsK* z85K-zO*I43c5>7qZ&cM72UUcpnn(FBZ6tya*vqtyUWZuFipmWbfoil#_qbAIBHkKs zq60JVxYLUJnCeIIp?$<};y3DQ@;l2|vla(zWJ09j{wvP$<+E7If^XO0_=CS-MB)flTq@d^N5C*vKdsPC?N_I-+h9cI73@XrTTZ}u#{ zF!c^?u*pE0K=AQseyQfdgpv>jTccF;JPx&wP5NRK`_lzaKeBU}6NRB{5HdX|3wygr zVMyl;m_D*#q4H`U=rzv48%0~Q9G?WMs}RFnCs;C$E@&(l@p0oDQY#)N_So(K+oO~w zV;^a8C+`H{6l7EU-#~2k($*9+c)n^&^ctj|$8=$zJithbexp#Nv+!jH#hUsNK5h|> z7I>_2qB74g*hOB!7A6fyl`m)i?;z;M)Cd&esAfmWBA_yNezD!Q&FjPJ18G-rZxzu1 z5yjrxs!03CmMhPH%3+2>BCDo488sJb6>4i^gwQKQCxd>5DX*c`vs!A+5r2>>wEc(H z-2S?+Mc)`UaNdXttOMw@(eIZ_tQ1W_z~Abc&Q12S z%6ux3vw9!G7t(N7&GB)&x~t&B=y8U`tD&bPrhi)1%??#TY0SBGa5h*RgnEu}Dxkkd zmZU4bpzt?=fI0O0Ei?yu!%kBhpmUrgz3zef_e-|N&_t;lMVGAn-ru-pD`bM_)qm7% zhaTo-(i#ikvbm9nFr|Qm`j{CC;v95axbcF&Oi;pmOF};&%H5gx-7i~~kF&-olw-)w zX`y7lq>pk-%n@(FKpLp7p>D=1AJpFlmHpGhm@auc&Cay4mlg7*i zYe;`WNrTc^0EaE;DKb=UE7bI#&?5Wg6XACx#gj>Dv~V?B^k&d+nR`FNmmDalIx*L8 z=c4MoIx4r0%{qAD1h0j4hU2xUk;jS>6%7|gap zQEdf8Y}B4CK4JD4&Gj6=%_1LVO+nHk@kONlAZA01QP_vrhk#eGu%b3 zTsBa{0!;X*yhlI;1(6tCeqzagSjs>4uyh~(jPHmQ7Mk~c6)4Kvsr=SwiFTl=eu#!V zb_jJ3gVHuuz%}STnH0fC=Z4NF%F>_8<~M zUGYcWLxwy_n{S*KuylI6!%qhCoXG_jLqhDHn{NABQo4R}#JQlDz;GW#vw*b|?~p83`M9DLJOwtk+D4we<@WvovGaE(4l9t| zJrxn`%!s!&d1}g1fQr7r=HtPhN8ZNWIMmL6i^uh>0?dPY<7xGA@;wR+{7tb-XhmQ| z>7fQRkUB-Q*K@;82G8_GmUk1BuI@eptIWc2%@ZK9&3B74tv?J-<6; z2xQ~=7!llvcdG7M?w)QHEBC6qM!Jr zm^iIbQ^4yo^a$wATq|!YMpR0k4N>Uz{dbL<3Y~8 zdzRr%Gx!B@8^+T(2@XS)ro{e#PozslrG4Ka0((eQz7fZc*HX1=d6aAURYE6AL?K$8 zxm3zrNKh&Cvbb$*n{=GASf*R|;*-MphJ)o7Xcd>OE_0*U(E92tcdJ%*@y(Mo6{E#2 zXQCrUU4P=9Cq~R~_cA}K{AA7BJ!L@?|00gt;*zvWcpQc6m~VB8wW>Jj0l#}nl{M$H zyZUWsR$?wDM{SyihFlGBFiXz;YuO$lb7wmi^qnKF1!ON@dOe`f{@i5yc^GtR_HAwB z{i+h9Y9|J}jVz*QrkVKW#cwmRO|;5w&P_F}WBZY(EIasE7wROn++jFphCV|!|vS2 z8to<|26uA-@}T24-L$pIz#z)>d!;LhfkY~>r6At6*_bbOpq#8!bk_aS-IMJa+x$K? z@G2&#bej*iX+J5Ib@D^{yMvqXCa?1dC-{XxH>RG?W3l}Tjk_(6`KQ_(Y67k5|KT=7 zo3NeYFuiA%k+}Dz;Q}|wG93hul0%bpQC$^`Y2^ES)s7MsMNLAXDA0hfwrAfqCH9O! z9PtF`Df{%;LDMzabXODSNLT>=oj`d48gJk9dHGwbc-c1}=F7S8_{~0M^sLsr(wU#{ zG9*ay>*)Ky?#oBNn6H8&#o)ZsphRj?sw$qe6At+Ir&CvUiX*FyE$%AWNTW(Tft_qbhMwd`t@l^SbzKx3Bwv50t?u%dUna5V+u|4%pPTxds1^x zq1)qim7sko3H{1~fR@blFo+}F2ZYTyD7KdM6DaL=d2zV$@WFkbly1JT+n-uCZm^M* z*P&R^!72Lc6!(92UEBFU>YA`#@yilis!1vPPuFhrf9wZk zFTWA6qY$EjF(rQW8+Z?=oIB$SwNzB?o_yPlAz*;58Qt73QPu0$qFTeZO_Q1rcd_QY3EZ%<}{VBfHO2YM}M@`UFfBrotOR}Fp z1Pj$4>B>)lmdy1zIRP#Kn}Jph>wH(K20Ps^3wEh{r-wH3+EWDI*FW}MhX(8e&giAQ zCc5`N*S7fx8x4^H2Mgg8nngv}ZFwa9$9G|M+vwMMC-~@V;8SM5Tna0M6U4D1gV8P- zc&5SU8beMrL|X-JyhY7@zX>P<9R|6}Tyf(m0WwZ@=ctG4PkCP-MplkfKty9zAI|%t z*Y|55wO%-mm{GWcV>EV1nC`>763j1LpG_a?A@GOVT{_ctZ0;s>9u~Uv8T`oI0I^Ji zRSQ^8rRk20hxd;^i9c9E6VSWPhE(H9X>E2{#Xvu%c?oNZ*#-YDBl~7BM1Tfw$~mba zSkx${A08|e0Tw1=N@0So-z95m7%M_7+l8GFiL(S~fJtaM`^jV9qi2%fb06iw8n0dYe$WuG6G11KeHSnTJ3tzqZN6(X0eEq)6sAj*&oPmGJHsgg!V@nG zcQp7FoUGK3m_)*4DYl^>TzHQ`b$f+)D{>gAQQ2<|>%-IKu!WG?R3VJuCBUy2vCpGL zzb0B!3Ot`HSmA>KxqX&!)U{CAZE|0J0n^tl1Tzz5>#xn6(`oSRN9_*ZO5*#3NX9(W zOQ>j|^|B4>*W6-o?d*F~VLJ9TvA6B_O#CUB=W#t^!kKx`YHy-U3$|Jo(Ubx4>{VcC z?7|N>fh%xxQIqom?xjfM0=DrL(PF*cSMi6@+^MWx=aV_`1zZ>Q`tQk+Fo5F^40r>~ zbFVJW0D1WyqG-#%lgO+rU25d~a=Q29wlR$~vOymV@P}#W$;Yi&rFqnY;eB!5pn+(l z`Oyl`1Cq49f@nayrStQ{12yn_qRIS#a%Az`__f6n^t+lf{F>?o@wTN{h@R|qAvTqy zLhn0h%^D#KHzvJI`AG$o@mK-PC7j~SvjNU3&MBZG#e!_= z0b9VIBlHFE$F@d$!bFDUwRQQ|tp^#AW~(`}3Et(dJ+m~lFNZwqxCL6O=P5Xr7W1## zJkMyCgJ+S-7XRhjf!lfW(^BR~-xUnU<|fNYCYgS@fG%5f)iv^@;McoPUhEWa^->jg zgm(*gYG&{V9RAL*H?DM7<{5M^ez%UR5d4{BenD5L*vZYv)V{cBk`+~-JZCKV*`+Ym zNI&}0)Z*V8*3a&SBiVY!_rGpP^n1Pa#oY?2OW4Csots-%%Q!LKd}`?mU+Q%oxc%dK zh0TlKSDM-E+%gZI&iUMtQY5xY& zmKPHJcb=5;8e3j8kRqHZzIX1nLB4x7U2WYc9r#yv{Ki!vM_Trh%A`zhd$-wtH)Z)g z?4B|<&o#oh%9?HZi;@-7q;{QK5k^K}*&)LfEHX-f}2w5@YzzMRq zHz~NnjM1b~s)APeXhu&8%@x1T0h7pa@AdNODzk%t-@1jse@AA3nWS52xgoPGGr3@5 zZLj4Sd@P7n=*!9yUGKVH(x)^E#jpPx*Xt54p1OLl_)``(Iw2~1D}E+Sc## zuI?);-On$%zIQ)hm=CLKG zSXJ{0W1hJy==rvy8HpP6xLDdqJmOMOyU?Ken3H-G3WRN^_i@IEBccT46L<3LMu{5x z5S0<$*?SHkLCI2(27Jnv88W6-iYaJhX@9wH{PB;U{7RyD!@0=|VnfmAZ+&+u*Ksd( z88erY`4Q*+C*z&02@sf92+gvw72X_#vg>3tbE#%lOyl2eyZ1{fSyKnmWWS+H+85uk^{36^wC`pYMFW8)3E7xig|d*S>$qi(&*%Y5yf;CHF^z^-xMSIy*#w# z23@VSZr%)dA@r6AIEm=tsq;*OKPcEO;ttX)9^3(Admrq$5KTjGQ@yB1LV$V=>@`gd zXM&T5oiV`AB;MpT%}e>GV|{{}A*8E!+H@XYKC?zHOMYLeulyg!eTK82{XI%2EOT?l z_JF#c8sC>ZqGN4m_>DJteVbEf| zFUL};dC$O&JJCV41CnfyC^&~AB8~9a%}*5`{1*>Dz2+GLo2xsIDcB2b>Od=-LKdYF zNw%cWB&BKZ3aW_1yJRe0;iqX~-Kkf}=RDve%yj0T>ZM_D3p;2$B}-wu{K8@x>>{^v zP0vqZmf_entp3%IQ!$e)%jd@48WzsHeeLnUUH$SQtClW>j9wjBk^ZuQWfE%oid6Lk zd>aY}u$OGr>`j>EE{9C7xDk1l8nnG@zN1dG*n8~6?s*0y6VJ&~1vHjW$PHNxUnWJ# z8Nu%&+AAIKoC5`WI!CrI$wu?vam0k@6K{-}gZXgBeXG^hPB;Ia0_6XcS`$BBE)%Ws zTEr>0qT_V`&bg*FM+&fliaUsAM^E0Pl_gIFP0HfSP=7j=+E_X6Wypii1XuEaow82o$XL6igL3b@L3oa%7=( zCrGWrC+o!B6EE$H^kmL(fEGlPYNQiV943}E?9_oC2Jjg47CQMvn}?n@4v3NPvn^<% z=D5@CfevESB_;$|u|8x!fgz$(Ut|`=Lg*!Qo%AyU>&{V=jmNjt811DFTcIumJeJlb zuJ&2twO-;5x2F_`+)Vz!l|}V#XkjXo*wV5Xve>EHSV7&b@a)t1e6Jm1Paur>jVuKE znuTDclpC(I@88mb-)2mm=ZQ267#t|SG~D^@`PSLWNSdHq9ms4@oTpE=p2uAT69=@+ z?bscnGjHC4{i}9pH5ls$&^yVB*CJ)fH0m!;pPlN&@~jTxY%i^dJe6C-i4whJ%tp@| zky8?{wTKdR17EjeqkN@mW}oYp-yp9#reFY9zr@RgkNY>fTo3sbwifg!yO1-6oyO%cE&trA1Kf0__Q?xln&<7SkZp7R~uXd}u#(2?E{i*I*&dTzX_cviLw#)+_ zN43Y{+tq(F+2-XwKXv=7-&2W=c-zQUKp!?nK4|ym!&;+RKDn&S&G$-DO+eyKPZUZo zwlsw}yU*Jst0t?zg^i4ulm-x*6>C=#)4jws4}>V$o+ehV1p0kr5$f&LQn5cdpg+b7 z;W6ne?4le52v|1wkc3maB*EHz=P5AgL=baR*%YXvyI)x_iMxk{o7wwtak3dIh6U`5 z%N;(xBJBV@%Fbo+u<1`E)Kr^J>K_-r;^Z_9GoB2~IDWArdF#+MXNJru5KS;?)(6P1 zbenl0LAsaODD*7YYz%+bC3N-Co;1vo!$cZxS|6VjOr(wof^zk5E;2s$LH4)bTvba$ zY{T=y%ObDM3Vn3WU zNpP@gl(6X(KD_gd^t5eK=TlL=d(=R9zQ_|VRzXhqaFcnJJ*zI4HKK$u9B=nx2 z-=zb*$oPR{T>8PD^ni_QbT+(LisKB2AAf`2a=iGrxM%v?=l3cqY#9oD>ei^mKGKD? z3al#LknPX+89eRP{zCM^+BZhB->L}oa#_+szB&Uoy`r#x>Kl-bYv<2oX1$yqZSPRK zsoh!QKbUq3ytj6o$D#1Jz0;l@*-9^td4rz5Ha=tp7RpAvA9+5XiUwPi4&9FD%h|c_ zBB#dK3Prx8be#@_tlrn0+rTchTHP)D2-CoB?*wEaHL&m@WLI?A7Bwa%!0p0p(P*F$ zBzumPaYS7GKyA@u;j~22J9src30G+1~?oxyKka4R$*?m;w%0RiVK!Z!+2D;690X?2`^yDgls*NbyeJV5FGA$cpz_|CjH%(66kY-<+xzXa0}0cb|6*h*1*Xq` zguqNM9-HY`B2K6Ln74^8wITbUUIea(3k<4Ker?a*Q2Zs|eFGPxnUBe*Ty8s0_R7g~ zr{XS5ukFrl3M>Gb3P~{^;nhxAikHcFDBdi2LZnG)L(75UgG#MQz~0>)Oza1NcN)-nO1rt}CT=FL@yGB%x?Wskri34O{w z2c#b^#*WFa$|%`vykYsa0nG;wPFVf?_Ze}}3FK~m3y3!qT#47+{C`jFYlhX7%a%88 zw0IY#87b~D63ZAB6bmp6b;fv4VS{QaZT8>Yw|-9N1b2QP5kW zf>+Lg)#1}6a({G~3czWg&{YBpaGQ^hx=GTT9XY)$MrIzo-uuE?cR z&LFD(bX*LaVvJe9X!&dnx45qJL=4A6yHI!sZvOx4YWomvy9X6?W08KE2ns@}zS z76@AThb~oEp6(^_AtEYyo7hv#_51jKgj|$eCdT>gMUHEFSuP6Pxgi@l9y)qav1*cM z1RROOr}tzD=#e9RVJ$7ztWD`DCec${==c2+*|Hh^9_A%gM)e8x9`m5}dbF$8Aq{y` z^N)~>r{G@pF{s=s99b5&HTh_R^yeLeI84!t9gwG!bfxysrh~X48=GC=pVQ3^lM8bM z#Nxbhmb!C~g3|eRtI<0{-qCHe%z{uM5l6Gu>G6u|osfBv92s6vjA3Yvq**{cs^RhR zC_SqfubDN0zudCrAeJ$lxFTmnNwDQw?hg_$1eD<+z@*h3;6-LDe}tBO(C+j{?dg46 zZ#A`UZh??D&Xb_l@F3w3`1e2EOZTYn5ZitGaI$xg>aBTM%;5`{o!Y0UPqH=Ylm zY?2w3Ccz)I_$iOVRmII00E|RtwI+{bP1SUT^TA!AISTg0n9!w*1lWW67S-EBup88qOu`S zqj?B?9Iowr*>BzgDb{A9qiIS!_Xd2|YJi3H6A^!Wx=~a2N+W6eC#jG2Kx=bjcNc32 z`tfm4!QpjhnQJ}R%1T$FWuuMr+_vPkDq1*q6*5g|x_G&6!J_AFy$o4Hu{!Kqk0ooS z<=ZmNBwsn-cx~Ix0UB~j_F3%W`pjb>Yt<|dR;%-uFMII>Uh%pUk>~dg$6NmlSvDWK zrY`8QX^{_!aUe}Cg)_HfyK3V1uCqIgkwMP0)-RsMgWwS;2$Y4Ip0N;$%gq;ONw{Yw zOH{aVD4kdXFnbcPwBA<1&+e`g@WSlOu?oQ521O^{!jLOmrXM-?!B(-7r*6A%In(1d z%~NX%FtJ6+bf2oWsE0S#$-3T$18&OcD3U0-><#nq^Vt5BJfLjtx}+u*9xxB2lIhnK zMOWq2i2~e@w9}{Z63Xw<%+8YQvU@7WT0&r)k!3Y-+M9X`qBLGjc~a1?hc$>8%*vNx z0)})S@;{{DEFvGyw8q#U;NgVGmjbk+ZbMg&pOx1NobxF?&;0()JFVN9el|LXHUpCb zRgP)oBI14g4r&|tw3H_<3YZRK&Y?euqT8^40UhF7@(|W(kWpF!)upoJvaprJ#j*v= zpYkkFpaTTqU3e9&G}jW*69Dl(;JHUdjUs&HQ^wx3NAkAgg53 z88o$FtzOd9{kbvlGJyKF+3YUHlCn?1nxP#vUzY-=Cm+s5ez z;P6z%c7+Ahm+aAy4Y=|7FmB&shCwW~d+clSTze)DD-b}|jh;Wir0Vx8E8PxUhdd5U z#$y(f4NVx)6LJrCBw;2-a{?IKgUmKS0R~(bTbUNWoA>dZ$XWR(43~J87F#D1HbMTk zrUSnk3*0oI`H6!7ZXieY7&2sRn2$#+LrYzw(RYNUt_v!UgPI0Bld||G0?zBZL`k_CN|%st-L_ey@t&Gh|k4o2TjycAMVdMp*NSQ4!f-juQDS;))H<@aRI zMD5M9i+hIt!Kb~SX+Fb8)(MmtD}|Q!#>)SCFL0LZ6golmSeJT`sVsJT`MVTBN8Gzi zI_^j0&_$7galPKk(_WK|S#b>fW{Mq-7e|I96ME@MQ?!4Bp&z%I@7KJ;CtsaIZ6t)W za!^FwbP-9!XZzTozjz~pzqLZ#<P`J9O3%H7k=-DSNMYQB{sXCm^8%!PD=9j@O= zc28#Hzx1x36FHdFJPwc^JR%m((Xmmx_x=qB?I+Iq3v%BlgteE#qQ#zEOREjx5NLM_cs_bU`g7eT*p{hSD{hw*w%lR)aFM6r zuj(P+^OX!cv#WD6O`qRBAARm(Za4w@tV706WTjoUIljC-33;M^ioez;9-h&fy+t8J%3Kcni zpnYQ(#AUW`ao});w)7Awg1SWSVtEEZ`v#H7+J)+B|1Y=%#9o-BWfI2r|Y2)FyfM#0PXn@Nzq zE&;_bK*Y`!R78rNo!Q5{aO^fd2pGX#%dRp!tCn)(i@V%ey$2~qWP5(U>*ZjNs zyGtKBMCP1GOhwp7kr}CtEu=u70G4qL`A3lt$x|n0Z9faLoUUc2lu+cLH#T2CIgc|>(xnYrEW2J%$3T7P-|omkGWai%(b8LE-Ef}Q>QOw z?xO1Tsrbv1+RI258HS^lk5{xP8jD!4I&%E9JHM6x%(;}{*HblT-u*tpK z4&aDJZ6=R8EnDANy1j1j7zvex2V?P~b8=R9ZZ~Z}uHOGG|5Ch@8X};wfIS44Nf^@b zAHyixZnWDEE=pMgeJC_8SG~sEs3Z4Hk+Q!;4{y&^tp{hRf1EgsvbH^2D39RAI35O` z>|-Kff?}@6EMe1ckx|4Hxl8vZuBI(?`l&bs0oPff%f&#QIQ;0rkkT3&L31l+t}+i@ z#aTGHHn+62)YOe;} z=I&Op*ek947X^6E@C?2Fm7421Hx9xcZyp4WK;3Ab$Sb=T(#~etD>hhYC0T~@|AYv+ zOd-k3xA}D}Hmm@l594p4k#k z@Xu48?633NTLYEklm%f6}PcJrnge42| zMjo}E4H@7GY{RBcaeokt?Jaz|0Zkm`fu~3~vl*Y>KYlE@Ia7p3h5B}4SzvKIPDEuN zXJ5wKFNw!}dQZY$C_QU;*T;E^gxyD>77nj>W#JjjE69N+IZtA;i3;?T#R!k~|qFz~59A6Mz6k zdwtIYC#AHIc5RgUmQM7U=dP@@B4mMMAnBm@8(yfMx48&zCm{RwV>uo4 z>+}+{?%ii6ob50~1SEb&EGRSxaDEaVoca1jzizc_Vjv;jsZM*{4sjdq<@iFaSb@R4 zYx4gj;dR^w{?P%3l6FQ|6fvat-w!Z(6`0 zG3@u5zPS4A8*jbQW^L0Qk4}=+Dmh^eyjV7F(TVqExEOb`bg(A|r4ny~jd@!`;OBoR zQ?0m*J7AIWzfN_e+3k79(e0z$!ap)LK!7ZOm8AM?{$%3Q9M_3WQBH7X#bIexA_t`U zSt10M*PX+wNPU-Ta!=I+Vgf6><<-f`>~{F=C9a0U@3|g*7a@h<^#1*pgDR5Il*>FI z-?|Mm@cI{k_9~mOI9}FgIuXls;LLfYoEtvl=N~AbB9U$f0_xCa)_Rtz<>Kr!+Pm~n*&L3B1w7rcE`wHIOdEoCwWk^EfaR)qe zV2OHQ8(CkT?7P#Bo&rs;bch0!vg)-XPQ)?i1G$z1}(Usy_C zF|h9tN`F7D#7C}#L+qrYihP8+k=`{91NiI-xIt-qan zZWN5Su|<~A947_W%TR_$HguL1=kn52Jx4zvkx7EC+{^7i4>=Q%nwsAJ?NY6 zW!_Vqf6}H4h^y-*DHix)@}_iIF5TtrL%bJRL*yl63UxGOwxxCNjIunaRRC&_!k&Aq zVfhTEeIx$C6m-IOe@*a$idn^h4UUF$37ATO5Iz#q)yqqr1AT#0kTs`GhaJF_+`7ui zr!GkQl|>CqJ!`u9SUi&Bt4OB`_=%Moh}qKjc5TN7*=I#ptU=`W#=ouO_JDaxDOk7Y zK-|OjhcpC)QC?1$y{cQvoW7KxRsY)lDPWt4lmFD+`|4@SG;3QJH2AoYE3GBqHB9sD zSnkv#3Sv7w>u6X|9=E^vZ$EM6Gl3-C<}}XV(~9STTEK8#0rl=ojh+^=s1xPmbTZ;k zZcIJu-Gh`BMbz(YX+&Q*RcwCnUiX3k)1DVO271OZ0nC@a|BHq>Gr<^))?4~8Y{O%$ zRuH-du4a6@h@OHTeQ&VVhfy2Y=jA7c5*zKW%Is}s!dyp-_bG#+F_uB~Y$J!z>t}Dq zBPWf1BTxU}E%WnC1<3;-;?Hhep2J4rZUVX#jVac;h6a;qWA@{;MEFhPC2@$S8y0;ug zn0VUk2;DXr$Jcg3J~dL~^uM!o*qmZ#e&6C3mlgv@-Fwima$xy8iJ9n*3;hEvkGYd} zKoX0fdK{?T0h4Bf4Ci_E3J`gnhO*;+gDfk`odv{U2Wam52+?GCM@>k37o$FTg!@Q= zwhV&ztk>S$dXT$vgyTa%TIayU8{?_LK>gYT;HgSIUZCKDpaBvH29`p@q&zcrG0!8_ zOWaHZu(6mYRYTO&8k#T0zIu* zj;>t~jeT^v{4VY#7fH9Rk8|_^8xwM@1J!4pR4g4dWZ4(rwf($7ZG(G`VU>*crzzoX z6#oPsvxLoKS-S{zg9i6@tO^FC?R$`FvstSd8D(m+ue7C2eC@Z)u59|{d$+Q(9(V1_xx+Z<%TDG%7Zo78Tz{g%hb*c3nQ#4TjCGK~5Jk@xf@@M&kSfoFdQbA9 ze1Y>U)Qy!*nM5cMNjE|v0p#z!gUsL4varxW18p#*oB1d^)h@it&aIQ8M&`?X%v-+{ z3)be#0pJE*pO;vyzPc|+a-;rl6*vq6I$jbE^N{>U@@_1!vt7<(5}xA>dY@A%JcGPQ zryutvJzS(qXvGR{xIRSou5A=*z|Mcth*&@s22y)pMoG|7eFZ|76L!E&cpad=R9 z40({=<)V4?(jpDn@9z4<74a-SCi2o7s0gaK@w9fG0@~4KA~)4sx*%^=Qo<9PSC z%kD!Fwlp*SRDXO=$E=2#)jYWx>wj?2;TtR+A$<^g-syaLcKUj8Ng)Y+pt4N$Lckk4 z9v?Ce75V7L#xG=5 z-z*?uZg`GC2%8yluk^mOcvT5C0S@#4Uw|v?M;RD54xH|sxq(l(8t;93m3*aH4VRj<{R^b80E;Z}f70O&2pziIHm3 zPw`CE`fgU}(lzAkRZ{4GjL+RS@i$--3O`+{mHc%mhcXW4o2)4blVC^?kvj+&JUcl*y6>|(&ZpCb-a z)PJ{|WgXk(-%$)=%@T7rFH2Ipohh&zx4$H5EVf=r>cSYG(`=5Nr~MIa)Ho@4xI6nN z=xc2;HQGL-nvubz3~PUHo_om|V*WIPS7k0|_f;hcQPC~%dIdNbCgk0S^C7<$o}F^` zfdYQ-opP*@O)k<6lr)LLAwkF6_F22t?N%j}Zkcq9FP4sqy8G7nRi1yzUOL|`EWd}} zWsnkhYTzefm%Ljhu0kCYn$#Ml=hmSWJD``|TP6E4Dg092`Ii9O|Tqd@la=T!ng3iBxLmZijM_?;@XtO)A)0F!6gml_?ZDL=0Tr+GBK9D}I% z?9v~{)oCvoT1$V($&`f!XiT4d_7pfjqp4^=LJ@^N7sUp>Ebuf*Fz^(5#h#*__wv=a zJlzbI3rJ9kCYwvohm?2i2Sbu34m)#O|1F{Z*?zwh;NarQ+i<43t@qN$)b#wDFeN+Z z&d2ZYQ7D;8kq%-}?af%u1{YPG16~@E6iK*q7bq>NkSSo;pArkVtcsO?(tZ{& z6t-(iN8zNm1t@^xtmN1}@-?W47rpp{n45iz47uFe6InWUA^CN-UtMQ8;Y0Wan#O>rJH1hep@8a)HvHFThm=77)?O|pB<(@cSO}Y@#?8041)di9E3cvN8sB^^ zL+?bPSsB{M270+NzUwlWHMEt=?5lG=3s;S@Y;}?TCIra-qGbd^5lxrO*s}Hm$H2T3 zOGKT{tJ;gepXZ+~i=>xknZ0rW8;33l7o$Sd=v>MH2!Iy-8BCJt&Kibo5r7+g$Od+i zY8t@MLjlV^kKcBcf_i#^^LjsgNQH7T_f}F3D+Z4$u@lM_zXLMduD@TMW6_|X ztQhE9O@M|C_de#s=^1t-itWvR1_swRwFAx*(XZbnlyWn6lme{}Y0i$kttK@SxS0zy z6z3tJ1=1dp-#`t#I3mK-4%k78bv{t8E+BV2U0}UiVH5n?c^+iKvUeYV0CY(G26oy# zeB5z$`=LR@8q^=f1P{o23g`dI`orFzPb$;=a<6!d$~p7r5|XaxWTUWkxGCS0Jq!A{ zB{tUGuw&X;`_RL_YqAeOWCt}^uVA>z>CvSPesE$naU+mc{t5L#@!{0^;c)PEQw)Ff z7;pe4Vm#j-!-Bo}TpU2e(ak&(@oEg1Z1p35?(uPC#;Nc4mEO5*YEP*KC!=1E6vg9#R zS8eE&N_8wGGTDH|Am&<(K`P}l%)}-`#%w|(BpHSsjK-~p2P@FkyHg~Hewu)0SV4`0 zv_s3Qmm0ST&=O{Lcv|MZ80YXNW(r(Csa|(Uk_*hbJL5sMcV@^>o8leic5t`}5zmu) zN#>si$1R?yv0aOe8!wp3YcMA!R7Z`A`7}m?ww&i`aS3-dfoRK9y0 z0vd;o_JeP~?(98S9{+MHodj|21sU+OWc^#RjQo?ji2Jsy{)-nW)U(Z!UxT;}FWRUO zBb29ZXNaC`%vM@Lej8MMWE5oLayC7YAn~dF!&7T=X2A{rNBz}h$|-WSD0z*py+gDG zuU}s$`u1jLu-#U(uHZ3wHAPK7sOXdjA^O z4al$Lt-nQrZ6 zI|~uVz-tvcO%rSC-Xr^dpPb-vCqmq@hQFs{rZ#~2>bI&NIWQN@q3nKe#WQrlsyGYS zs%DTrW4YB(MD!$((()G~+GbkkoYm|T!SAWFQ83Jki)d}Tma=;|ysq_1@{NOpAMdgp z&YUy_0dWe8s$N_VN-}=BI{u7|U7AB968wDunVCP2I9B7}MXo(QFML6t-S_;mC z$jS{``#!SKAWOj2u`!MXU7oZZb2@oIbh))cxfI!b%9N4l1iOZ@nxnw=I*tO6u!*!e$>&O4mS|NrBplB|SmM@cFqWRFuR zO14VoNeCe;E917J%%rlNWcIPMGIDH5w(K0UV`d!VIOBf*?(gqU*Ja$-x!m{tem!5$ z=i})$kM3FyaAj6tz6+Mf$P%|goSza4HgQ0E8)hb>Nd!^art(F}DX+aql_R28WE`oG z>!W-1uj`zD%Dz{Ss(7?{0N%cA<(1{Nk$Ri#TO}B;_&@L8OvBZu0_M{C?@BcCD06Sk z(2pPmr(M`qH5 z_=UO+V5C<|^w97VSYTpOhO=ov*yDg19-cQw&hf-UEV)S}Y5xYbn?Xs~qlZa=lyFC~ z=^lf;l=8LQDPEhIJ#5Vz0T@z*KRlV*_)k}@=kMHF{dID}^v$P@B~DSt59479$6b>z zAPi2=I5o z`#Q|mD{r}RVRT~J#=TZ*r<^=AU-K32_-(n0ht6YMQ{LuY;(p)ofdQy*#u~_{?13fQ z$lm-o6Mm)wgT=k-xJms+cdO{dPb}ll7d0-NtX&i61dAgnImanXaD{aADkQU}m<1LN z2~d%S-CD{*t3cL|=g1e7NJwxWD9zzMhchI1@Q*xcuG5Uu?)Uw2jdTKJ-PA?mqI>8O zJN^2KkQ5RIR(0j{lo%r=JYHJXrYg#L92JS-h3DMnAR?8jJP(!biIci&H=%g&CqyQH z@U8z`BrXfNhL=R@CI|Q)83%qwSpl>^kdB<*!W@P&QZc(w#LG7H%cg#$E*&u-UVkpt|(D&LH51{QTHcc{L>MIk0A4ve9RYngd7w zEtun(uJ8VHUkLeq`aiEn!O{dbT{w+Y7RaL8Z}?{m=gL*j_8xL_1SD=K?Wtep~h|fZ|Ek4Mg zi^u^^eoAVMRZpKexPIl>q!+q6|IW{O^%*6whBqTriL}Y4ab}Lzf928w^l;MLVH?o^ zIoS2q2{h?1^or~wTnClxY5UBA6;+t{d>*J>;1xBb+H@Ljxz%cjoMM~q7Jb#%CILGe zod7Rj+#Kc{ZcYbD?YJwzX21h^^{^`(NFKS#U-KKN!l?ymp9K;`Xh?b|I?4V&IrxA8 z1s)%C5D55-_&zj2;v&l^^rO|Z_e>7p0wbMVo10tM9 z2GqtHoSJgk9T{Xh*y=7=j#TNd)~I?Tux##6sEHN1>iotmlW%XuYizXYU&9*IaCx%L z`|n+FNo9w!t&_0kt8?{)oEX2j+QAeVZ@qW>=T_V!igBP#0W8=7;!pE;8H>8qFK zn?3GN_5Gm{U&EeP&xS0YINq%hBZEhC-6OxPmN6N!Q3&>5z3onD9F%SY)7K%(%Lo>|mbbJDw0EWa816mtt2ShSF2q<{O(H zAGvb+*7^GDD^W(@US{RLtI_*Wx*;;JcHS&+XQfGHeE&|L{M5hh1_Gz4wnymJrr0NE z+J2*SQvGP_T}h9j4z7uC5q9eFE8$+1kKVjsqcYdNwlMR%2zSKq$PJljVkY|Adx}DY zR3+0`70w*D9%0Lf(>#i$XaCNx_+J2Y$Ezy!P01bICm>|Wvb0}WR<%Yg+vV?I`9?ye zzYT>P`ix|!`NTpz2ce;k6JJ&yeSiJoKeIURotK)6xgf;lNc;8Hk=4lx!DA1D+_=hj zz6@u3m2X$B01hzuP_p+FA?V6^X9AbA$?a<*JE>UqT?jWBp?*cD#|(e|&3L=+)W)q+ z*RPeAr_5xNXwmX;M7kE!d6NgI@nL0^jL!$o*>rsC4BbR@?51HK6cs8Mgo!Xa^IYv>EIj z|1DiSeTsH)=Uo_A+wTD814@k=onZKiB0I@}<=scRIH=v)w&&haSf^ zqeVHq&OX;UIw{$C(r8;+NR%seM4`~a*V>70W(B<<$@1U*bn@o+NhAZI!$oyaRd-pD zca>&M4m4tUp+HzU$zK`TkVd!`|Cp24NtfBN(S72*{Pp~^@8dC9@iB0}3vLw>I5geG zxt?DC{u@I7L*1Y+|K%D)7owazd(4y?9;C6WMx#>~l?!}V2ZtUms2ZcjJ zK+dBc-DoHKS0~U|>6xoju%>Oz_8;$`H-N-9{2&l6>T>InQQQ_eh@;84%BOB{QXSHM zX9#AUWz6jRwu0sn4&oS4nYtXR11{wme@VF?jkj(Z7~^_Yy|Pxe3XK}~YI??-6X~J^ zf7Chfn^4UGg?{nbOTVqk1kV;|aqY9^Z-6hQer>C3U8e9Kc;n6#sE#*753V+*A&A~r z9*Tg<3LA0b$u^?MWON(X$Kcs-mT+3LF*p>F0gH-fx^^}`k!LSG4GLcG`7BL3$Oe(3 zPYXp|`A2zUhh6&f3TJsDpaP*5CLrkj4{__s!7?9F7F-@9P^?H^a{QWqVl2MHCHbiO zjKlw!J}wf!K~eC3*9BK0R8C5xnvD1-t`BFqK*~a;tA98l?omlI$(DxJ`;uKoHaKt_ z=OZCOCni-yT#Zx}FEz4iK>Pw?O6l4Q3wT7UhPC5+1uG2JfMrk#*k;^A^L=u{y7PV^ z^T8OQ?@VvV%&=9{#s9AHVfR5LoSZE*Mn>gj-c65%ydP;GE;4UmaQ2Op=^aWkar@5k zzY)Hq{(8rG5H^L($Zxbfi#5_{1VcEg_*Ia9l>}SsYOqJUKoGO;j%6l${CN zudgTUA@I4C-D7|O$6uGf2uZ-I?6@c>LNjTIKP3)A@?QrWu>beMjHSB}hB}!gKaB;U zMEY+j;*Y(5Sg%R?gaL<{E~h6gxV}qq38a1t|2a+?dbfYNrRL!~sTvDtS*G;<%yEf3 z-z%3Nd&a~UQZnV>jY4V zw#Bdy{<=%zNngtdzc{7fls-7n?P}~<1{#wB#YUt9L*5jkm;as3qV&ztzJ{fHs z>7cfaPh6uuHc{Ov|3?Yp!)>G4=nCWOdy`B%h24)tdeH9KGP%HXm*nQxIr@&~NSFRgD zQ^4&$;oKoA1IQdj;KOc5E93BM)#omyX$~4rmK_fGbP(T-W`)D)t4?j$c`It@7uVAz zyAA8>%NJqXK4HhCZHF=-nz3*GqGrXf8RQ^$K7Or$Bu(>eR%}R3yQsA-EW5T0Z+DUL zpEx6mK7*Bey_1%o$>_d^aq|NTDz2&zz>R}&dJQDI$l0Z5drqNHIyHe*2N$uPDtpEf z#!x%EcR|%IH|Wv6wu`zoLp%Y(WqPk~i0unj*2uh8+AiA!p$Bd`h~bYww0vC=4hXwVLKlLGgc|v^>`go<335Ns8brac)bI>(;q3@&(b5O>t z3J(SzL;%YiZ7Qd}A&HL!=J%{hK-WAD|65@ESwlA)-y3vI$9Y8 zT~jS6)927Gy({PQ-lv*zw<6W#|XJ#1P!K6~gyD_f{R z6UayK7H#RtI$$fV-xQKc~p>||$fAnA(%rMp?4)lYX9F~?nNMnthGef%z_v&3za zRJ&8Ea5Z?K4YdZb?OD;rC>EcZnQzqSU}cbFY4;p&S=tt?o_R+Utiq^Mt*IUloARLT zEvnn4&w26t(ra?&nU&VxkP4+(4;X5P6q|OG;&=$qIZs~Ob<-dw4myTT5Y1C&X)<5l-p}4`MbTC zCyA~BA}#&}=LkIrXjmN?-o^oui1X%A^Y6bY^Ku;2GM5q{4;Z&8u{gX3qDTcn0SQxY zZWdqNLW^ttMlt{iWI%=89k5e@e+@mssE}hfqSEjcN63I>5~p*V1ijO zctyme{1v70Jmh@pK;>jWSh2?r1W1bJN03Ci>nzqY;h?9BUd%X|@LcH^HyKw?nyS#p z+Fa7FyVg*37h(jDHP#GgGaTDC7+M<1HeaLG92vRWa!LX4qotVIoYUAg^VF_ylgW(~GuVDyo z26ZsHIukp%a&*2xV@$zdI1@3O3m~3AE*1pCjS&DQ;NC55nzWkY7Q5cr7Q%_UefxX* z0RJ0!S&9yCH^HWESIA|yd2m$t+sPZr$Hupy!$YhB#RzPmVIr{p$_6gJsF?Sd3Yq)~@7wR9yk5@|_iv8{I)= z=^^bWBjc*}?~{H{?=;^PTBa*}9m?>R;usuhcGSqzSw;&6|@etU`Kf@=F#wiFw? zfYxB+lYQsg8UC$~zcOPdSw3bQeNn>Xd}c~i!1FS%YNA)Mr9l)|q?GwpbLHIG-p8M& zD_eDipACd~NH?^T!)UqN%`T2&Tf0YYk_8!3=3;?=`|Y|4{7AxDunexL_3Eq9C7}#{ z+e6nW=}!wR?Wtzh(_ee#j;eXqaU}e#G#+7T63W|@ITP_x+!(!i$RgWP{LmjLE=|loO=;9TgIx@cX@eswUsrg#< zZbibh{?AAU!L;{JrS-IsoH^m#9c><(?^xPN1f>7*irN}_BdGY9Tzmp6wF@KrS*$31 zm-Ya7WyB5@knyh!1%eJO5rC#k4viEfj{LKNDf*Gp4-OW~Vyk=?p=Mm_uEC=HW8TZD zW$Rvj-8Ya^Ix868PUsydxzHEbPfndR{33o3n)Vojc451mwAy(4-0^T&dO_9L zbyu5=+A^kfy{<78!4>>3W|heQ2zZ#)dG#qCmmvAH;7k)nqH|y`HjaNf0M`kFe4s5U zw2POi)`4BA21oqPhlvZ5CCKb?6><7IT0BlY4Dex~eRaIRTjM9=45L8i3{rKuc1|bw zXb;oSgJwE~T~q~Q#h)ELAR1!^e5qc#F$*Vv@@*FbTsBztvUAz(ei?y80gp*Ee?0cU zf*GzG{J2^F?B9{tzmHUs5AOraw>8FVd4Sf&s9J#7Fn#)py^I4MeeylP_f`K&O%aqoXDnQU@hgz}9qkMD&bRu%Jjx;_!iuEee4tZjwqF^+N;SQYOk8qz z_=^}!eYUc85&2lSz^hOxk{S=o$?x+VR{My!EbcxIW;}NMZ9!(|I!E{L(=M@)c{+^? zomTVDR^|0dyEp)S?>F1;rn@gs-4-;h2`mQOpBbqJ870jI8^&YnpX`GS!o5WGxKZ)l zUQ=mzj)Pl3yxR{e^}XePSGG6yFa6UZpcNY;&-JFyUcrE*m9F3ZgvuC!3lG(|>lV_bz-LHo%C6a%Ok13PhZ?!L=7 zp1M|1cc*0SE!uKdvTyxz^EInNFtKa?jf&4?6t98xzc z`@@B_*=Y2zY2;-%bxk+)c+10F#Hg$O$XaeY<>-xBR`}A{DD|J&5vr{~?97$OU4FJj zJ?ij_@tsM>bq^Ttm-B?`3A013xGNq1OkZ^hy!8weeH$>7uc%4A%Mw%>{4 zM}a{GsoPRTL`$92_jEQFkqJn40JrU;>9f#PSZ3|Y_p@EMSr56}XDI65S6-yqw_GRz zPkj6T8ow^@E$Zm&{#kUByS<`ZU;k~XL~_1RoYxsE2lxzKNE!R4m*9!9va;%MR_Z3T zG}o3ugye!zU(?uVC=yRvvC`u)@cPZE#NiSjuNFj^fg1*O2Go3+Z4txjmeVNUdU~g0 zq~;+lp(IFwNWM`a+GC{qGWPqv;DXMSc)Hi_GDV8!P_@87D$>s&`#0=%bd)*Nawg4!nj`KwAO13>QK70IVJ2ZUpKSmFJNQC}6wnAE=da zay@VV`mI5b-Hqxib2U}ypG^-MZeI_l=oai`lrxc8K6d-nQyLeF{kE2kn)$lvqg?{@lJ2w; zifmvji@pM3O!(QkFRgMv_xz2`Lei*+%L9c4W$z4KXAX^~B<>4qm{PlP-}+1LI`JkQ z{P!^vWqr`8KJ|$>D_3wt)0avZH%|(!`?Q7aux9|2*Wn+Bk(Y>jq5%+t{Gx{Ww(yaC$)qAX_JTAV_*~WcGv5!|_?u$8G2%D+VOS zOJ`A0Ay7tlA^*fNFwt24bBz`Op4X~A=pW$+MqMp8EEK7y056`mrXf-e zmSg1w-P^HHjVv4#gP_Qsd;dj5BFC3mfSs+spJ_PYX-I7xR|+xpww(EK4rHY`zEu`* zBmXb|ryY3D?b<&XQ~mouvoZPuTKlkLv~JO3v8+3juf3 zHRo^>Ng7N?^KTX8g5-IKuG(__0MP3 z9N5vIP5EUTF#q^~{ptlOJ!VB$-N0obM!4>Ka?yQF|0I*etMo;E4HJV>bYb>G;AJCWls}*yCqaqP z)Sl0=ETC9&Oy7N*`N8=@^$oip6)@w6P{TVJ5J)(G;X0iYODEkas_inQUsrrN{#;PQ z1|SA>K+5q$q=a3x=Na@DFeo!#8aFdFj|le4`TQk&XnhLgvIm$F$_C?jnz~pT;BPQ4 zD1n)Ue~?rRGrEZQS9X1&nd6D4+I^-kK23SVb6WQFVoLeZ%Uvl7HY4@N*%L?@LP{ic_d&vc!nfOY zbHRM`>pG#5=QQ*jP8CjsP2kn?nQKoFzDO!z`l+D)W5JVu>uJy3I|1E>I2r$rX+rW< zcvgD1qd;Bnki+zTa-61gzV#QPyCVYvCxqj+aC1dt_xu?GgMxAh9pjuU#lYf~XB)Iw zx5c@F+r)`@+f}bZdW?gRH7d{)v^dqwNq+y-yN6waW~O!_!4BM7LcfLsH9(r2513Y4 zkxQ-p{yNTX&HnVHAUH4g{19-`z^tY#xDLFVM{{0I z2&?FoE%Z4Af2%c%8->;>K*w~Qyea!k%x(qRJ9>3>tkLX^1c^tgVBb+PV>dXs-{#vq zRxEtJcmDYj*9w~L>~kJ&fFA}v#|k66a^M~f&cIAbdZvEe^YV<^)6=KR z|7`^6tgw>`?wHZ$K4b&pVMjU4m<=hDI#jDGbGuua?lGD0Zx8nrbSD~U z@X**bH4DDFF5qkoHX0Epm(^{(k1g^%4&DrggGY;9CosUZ{fy4t-c>?d((=k3(<^n13ji4!in}7Ag2)=%iuK5>+L5cV;I~5; zSa*KLGiOHiC)uU%hd+*EFv#&>3)BWki;<~b--kX7;w;Y}0g0t!WGq2eT~X(>AvJtR z?9O5|NRbz zkaLrW^;b&Yz%gy@Nlx8g;4T3gZVng&2d?$;0~G`pkICe&>~|;o{swP%k8T8NwStB< z@ElQtTKr;v)Sr72g0lv;v#0~HHSq@`syda<#1Hf zn;uRCo$=Qta_Ivd@BHxf`>`%WWmq%;-HEn+F?x~P+W{Yq zJ+{fqE6qMYA~?Ic5p3s?Yg3F|z;>cprw$hnPZv+q_+SD-n`FS-b#HQvhVDGX5@Q(d z`m&P}q&+&7Hy5}uLjaIX{XLnFjU0oE!-K_pC{VUv)U5< zB*uS!gfnj`NN|ODb#t5D-{JNya2cz4A(Ry8lSE38cc5yLjaBlzb6~v5mu>7TM?Df1 z#>`>&I=IE8RRaA$f>`!$igH+W|DfTv?T+dBkQujk->HL5zoKly+h@pXwo!uhaREy& z7yCMe7AV4rfyo3}6Ga-UG~B0sn5WLqHam?rM_tR2658Sln&a~MekpYaFeO4ZV!l$+un=4n~Q}Ox|Wl{6zH~n2JcH17b95FRE|kJx$x_v`R}ziH!Rxqg6DSF9-MDi zVeWY;KDqO>%z^2j;t0FfgBMdGC)e62I15_YpG=h6b|^eV8-2*w>qM)AQvintK@oG)1UMk&e$_B!$l*n7sD>G z&A5@H3hQqr9i(KksEq)B?Ni*6(waF$p`yLGkkY1j)cMfTy5S1)Iu)v$-UR#Jj#rSw zA6K$b<Aw1(-G`t_u2hqOWP3cB4vv2DXDyH2fG8gp_*~Z2dX_ zj_R_Dd{aiEY%a`84I^72hHT|%kbJ$|?WUW$!(gi3s!E`vx@VcQOTMn2EzO7qRfVq_ zEijyj#8;q8`utrU8%I(+07eg)!~Lb|4IA2-+_kh>$VeO}sMr@DrF^0OeS{)~8y4?z zqkvkhF$+K@jVA6+O2uufIx$(unpKORQp`=E72{65N6;pi^#rHhx=3%cN+N+ z_m6UoT-Q5}dk=T%YC9#1(+su^n6mr|m)n!WK#P=XQR0hW#J2QOVYue|HKqf}f|wU} z{pJzF!8e}xbwR7ePAfSNZ%;p7M~#`uw@dZ=v{R<&0dEf}RS&V`cI|=>kJJNEfxHiWM zBq#S*`T@(4IEA)9iUg>X+=Qxk=q5yO|&J&C4z$Iz^E){pAMj6Y~DY}Pj6$XV?)VeFs z-#Qs>vEfBG5Jh4HS^45r1_p+m?)Sl+=yOtpeh}6c;r#XIj(2($-en$a!T23d2=p6P zYv#P!b~9`ZleAdCd)=}UElGdvi@3u&7ufswhCC^T`zM~_KfRfRHA&D*;2W%;(w2P* z(Zn_TK~YkM!I*|?7qqEtd)DcOK4~mK6;80Jn+@{PY0^_`w?0`yoP7J@>(zI>*1|zy z;Mj%`SP6yJ9RrB=@uGYwI7sM% zfn9Xp+Y0U<2{aFiI}G=d(H_P@%z}0?kDtzBtJ-Pf!iqF@)2qtAh5G>S!~Jk9!aL$` zPFMxef^5cDw-ZV{nd0l3fH>(i6^jLK|7)297?Ih|IfkX%yVV)eUwhZ^kGY7txP9fx zwmBuHvYwMqKl=x1vomL=7w5^(-Ip$?yi2q=O5pw>jiC<<42wX5-7oB(JgShfqRz+i z_Om50K za5JrCHR|EBHv{Yy$%B{~!RH^Ib~b(Bm>WFupZ1SCjW>&OO`lPuvNQxQ#8V z`kgLc;|a3S+d`!_?ATSGv%1@s$>NsK;m&e7FwyVDnX^evsaD+Y%L|*bJ%S4!-+VN6 z-Y2F>DA@09+V64>b**j1!){%oNcJK}hfaAbh)#TSMw-Fay7Top_qn^Rt>eE0a~Z@; zZWjtOfE?rQKbv+ni}y**5LbnS^A3;N?Z&Jv{EhS0C#e>E-|QVCGBQLGdrx>N3;p}1 z+Hji4eTM%UrAsyR2OE=KyvgKT*RGqKQt;a9*52@=4HZra_q4Lc6@SSNmT>Uia9N*FF0y4_afl z5+;pree;(&0SfGUUR9qw#dw1dEDmW`H6R;Lh4QJ*LaVqJ#pAUwr4sJKdAAI9X^GQ(6_RKbhQ>C& z=S5B9AKggc&e_AY`M03Wkx#DmQ7`^r*+4IP{`}LcN%`D$mZ`1iRo(L!yHs5Mn)xcg zUSEVhgIS)vtyI|eOdk8}2jx}h*biSCK~Ut>(0whrzfbzsc&PV^({Bd^={qE9vn+le z38>PZ$yQkgI1OBIb>B5u!l(!1u8&JoTS0%hl`VIWlMyOkgH@2)pP#jJCVRsa;o>GU_QRI~zX**x)v5BDz`E6xo8C=!n9_a0XJsjI43B_)l4;S^t9V`A(i>1j{`<@+8TJ`^L_^HMM zTFfo3;eVSYEfUh6^95jf>6IHsfIg|q8kmxn8oY0>LIpR`0)E#R#uP%K)b~NJACFrD z?ev5-s0B)vcyGZ-RYiX~HtybnJ~Z0{?NG3*P}J9lNSk~C?2B&fK$kB-!IFZJa*+by z6b&QFH-};;Noz9JW$mH~d-dgGfB`Fd30Upn6x7Fnp9xTeCv*pzBO74MD&)*h%7xvi zgxSo2k>sre%~QjV>OI?WY~NHSxPeTb(fE};$RDAtsw3&;oC9#L{k@K?_dX3;z$*}P zBKiFt*va^uPM#^3_7p~{SFx0#`GXPJ(I!*C-~~4MikV@IDqT;Nyve^c@>&RB?P8=- zVjD)AE!g+)AVDb6~dPeG0J39JE z7SgNJf`CsZc##it=GA@k2S3sXK!h4l!(OUG?WX}olA@XATVGWe0Y2_WkrdSy(5zV` zj1h@S#kybKLmvSg74!B6Uzn&CV-Exn{lj3;Lxr<+rS)VBdiM~k`0-_G;OJ@WJPNyj z=LO39$G}pdP#C;@SEM_21j>F;M#ni z$-Lrx0XRqv6p(QnMP~QF+I2bZIpioK@pW_$`o$Nyp-aet%SxpFO9^`}_3^IFwc9$& z?3ThM`m)DQwA4%r^lsG5L45ZmtX96SqCWPJ&mFLbK?4-@&pP$be0zzvBpc3*9(y)( z`-K64FC*IN7|Z*@xOzcmuaan|u<)xqVsR|`wpkgrMtvhk9{n^H;2p0KzNvWBTJc?P zaKi3`uh~~VY$P8*N~<6B6-+xI+wb;N*|!mBsi3&Qu*nMnhfzXj)*oVi)H%<|*jIk6 zy(BwIx~G)*x3KbGA2yTjQ{;uKofPP&O0lZ{gR=sb^GaCoKvLTnA@`MJd#ck)wBA4! zm7jYINx?LO4xh>A1!Q!3DpETNpN(1b%8QiwaO>vAec*6fXDeejOuBQ+ZhX+!9CgCa zx$$)3f8p<-FLOJI&PEp+Ka9+awl+&2^uV|oY0-^~y+@P6PKSDMJa#px;Uy91d|Xe( z7!Kx>p__6K?GZ)}K%!SCA{{4&fV6{eOc={0wK&jx8Tko0cf$B|kK0}UQJTXGZ@I1T>;4^d$;->9*wm>123O>g>RIlY_&NRc8_gz32gvnk zxrR6O`_NaX7k$gvLpNRDxjrW%>$!}x9fMFvd#lDBr}@2=ZoSFH`nRxR&;9k&pwl*4 z=xaLLQH@RT-9<58!mwL)7bnH!bG77xHD-&uEKNQy<{>*`BJ;>V2;l9H-qkB|T~NK{ zi%>!OfT-XhL!GO^1hRy#Q+g(jOG%-NWigm)#!V;7_jr-iwnAosZM!C zFykC9XPIl(Z2_eTZjci=;R1N7TxCDo3=C&5gPlXnDWG4$kn_DuV;(6L#;}vh-oN#h zpcYL0uO_0VL{Wbay7T;Wd}GW5?{ zrl!#?Y|d$#`FvIeQznMISqus*ek2GME!0&-y(>#s(4y}S7^Y8U+%5#~7A!eLrtAm@ zd(cvb$XC<$Rm#`jg(v)q045jkk~iy5bh`!r5c;zIq_ZQ*ZxSTmcsNTupD#FO()Q36 z8N|JkTLS?VB^K}ibXhW@wf|&0OI6z)`hNl1A3vz`j*UUDYgZjwU!EMA2zy67#0)dW zW3LxMBp7=@fyyu^F&+;#87}ilI$ZI@pYE>6vv&E?BhORpb-5PxqekbGc13dlEsA{R zSjyQi)#C9_ZZmeZL;YX-0PY_dW$W?JPP98Y37*Qv8c@g9p!A9BFMG2yU5pwIs29FpQ5N&u$)p#b&MVgv;r>bdSR zq=JLOgS7GN{GMdm@5Kwqf2b3UeEKHwS2`>3{$Sjv`t}M5 z((`~o?S(5tp6bSwfBj&73*MX~K+#g1;J=#p7`H9-Q{*UCN=mr;>Uua&7g`C}qFun! z>uBH)J0LmkLIH~E79#!jyx^)<`3|BO+=>%3r+*YNeA;&)C8$|>Tz4J*!fN|kux<_= z96wzEJE(TWBYcj95KzVOAZ5Es6_#_VyIH&KX*-W+gdLPzI|p9(ca1RZx>~i0bOOa- znDM5u_37wCB4l)q3HE5l=^X?k-6$>*M*Hrk7!1;saselx-wUEa0tFJ_1W%qZQdH!*CM#05rm)UL0&oiaI8*6EmeItE8{hQR(@0NRw zc`!;)>|)pW?I!!m7~Csx7t_j_q58X!wtbJ*PwM~JCmuHQm>9;%ugJpK6~&ZS z(kYqg@Bckm)uMq+EXYeqAfrW$x^3H+ZYLllBl!huK=FkDPiw9wZPQGS&qr8r4-{JP zgCf_MBd_=kD8N-rY73arHre-Z&F5I!vf-`~kFS{?yESma{Zc-uE_e#*c*6bDh!x;D~kht!2DMG+>wTA<&1Y6ywcGYSf9Pt#}$h%~=MeBm#F(+>omCG(l zCp3O@2wWKYdp39JqMP*4z_#WOwhJ5Qx>8852mX-wi~5*8J|LD=y=G{8(DYh&R7A;n zn-}7cJ6&wJdYI8ea}0h*JUU+nuV`2N)#_tBmq> z+5>U>UV1LK^)QsChNQFjz>!gYi%PEXklW9rm-TNhhmIPGB@&gbjtk3r<%z${bjlTU zzyJ2tCj81gzi%-}{!!d!qg>0<>+aoM3#<@mW;h{c#b%prGq?YmITf{=EP8=3-Xi;C zx%0ZK;jiOQEz<8^h(S;DE4iO^dwPG#XNm1NY+F*;`$IL>E~)xMxsP#jP9mNGRO(4Y zu#Nfa*9np^Q0SLm>5tCJ#Sp_#P7bp&@mx*U7@H|u@y*oF&>?kEQg911{wu)9;nqH(AC4U`TE>ZO4n}aK0@2@EQCdXa#?#x02+~%P7cS z`hIl#8^C}yCAQDi?99_##1Y$F=njXE3n zxJ=@@v+gMP@GKWpU9-}fF9waVLcO{(d&(=gXFmdH22$EWt6c{lVw4_z&1hNyHr$A4 zf^W1iW9Dc-6_xV>1>hCVpLIuT>*|8I(aQ=-=9Ne`t-zo{enCZ5afle*fc< z!5CW-8t#?{vhc*4@m7cC6d?TZb2w@lz3GtSEdF|#Wnt(B8KZwX6f=v{vsIeKbE|w7*cmztm;tRV&b@ zmhBsFn=tpjEDkztS#-4s)-DfHB`Ehs+4|`de*ONSQ~rWe)OhLuHHZD1YO5>NbFWNB zHNp8s3&i*?J`tI=#<#Jyf0bS%{5J#suN&G3FE`$5VF{ILks=y9d&VexZB6*a)sHoV za;Fnhi=DWnz0v&VUCpjnHU(BR`tO9we4Qw1kb@gwc4l@$iE<>bH>Jwv*S40gYoI*i zIN>AvhW|g_x;VT)nY=cD(Waq~%A89+gzl^Bn5lA5@htao=<^m7+jb!Cev@H$K5mX3>sUJBDW$7$RYMP`k_L4ED$1lBI z{KX2m3XhTs!C4a4Klc$dF!c4ViD@TQi-!9>i*Cj#cA<1UEVqHd2oQUVn#E|<>aLFh zPPjJX$bG|Ht?6y>Op{cQp;W|;+yzdmqU3y7+*t?JzXuezu}vpo4}`i&EBrw&G&t_p ziI~Supz881Xt-nbQWu)&0tFU^$tc2a^=k5_xo16!e&QS93|bF~F1rXud% zCR(FkJZlTR^Vd&tV<#ItaUA*Aj8K)HzPNgtv()*qid#xr`SVaiD;`ri1*(HlhBAI! zcwDI8D7UKUh^4wMwbG!MeM!!P+ybV8|ejL&&6YixIcjB!wrx{tTxUl()4583OXo=td9 zGXqOg-4bok#)=av7T$0cB-UAJYK zHNZWqJ830#&k2z1nIP=36NktWOkd?{SF;@K95_G(3~&oMfp`d>-$bWuHS0`HnGcgt zsx^N=Dkk|gscB0IaRYi};u^V%2J=5p_K@A>@B@4x$x$HTq%+|TDdUa#lN zQ~fEv`MZcp=xx>HJ6|a3<8^|v23^(KC)<8az8t)FwI5D~S%yYzoD)^NePRgiOxaHf zd2G2wKjtS^vX9}3pcOk{yA9U4?sT!fNU}bmw|+%n5<7-iO2r>o`yw<@w;VDTi0JkD z+u_Cs&4x2)NYEY)^Bb}E?LyK7N#UK}-3P|*7Pnxo&JWfoo3Y>cY-jo+8Xp9xUZcRS z`m@#0LBs){PelhTNqAKQ_6>|nwh9Y4o}58}*+8675scfKxKdX}MZ99xO)TDGGfE=1 zci@0splVTBy;C|(%mQBStSYz33LmTl?oel7Wa7lR2PsnT^gU_j6x$7X{c=-KB;$+1 zs(#|u{_D5%gODkOthB`XyAG z);_;qpwWFU3FYI?g!mU5^vc}b`BBFOv$rfDzo3t1!w`V+WXTdobyq_+x8SCQGpnC3 zYN>2ATk-uZIk^$|(2wV{ZVV2L6A{^d<78unTeytz?3FNa=8IU>$xr0P0og7v?^Dh|`eu9)JMC(NIrQS!=&Ma zyi(|n&}$euTa-X^4toh)CPjE+7v~fqu>{$ZM@i6UosmPak=HDCNk<0f-ewZMRsoC( z@ZN=qc0B9~#EDNWiD`MN_a4AWV=T$&$3>4dgGQS$+ItmyWE!LbdT%=~sfavEUh^ey zmEVcZ3b~r(E5$LlJX_7F5?XO`F`$`0pfSAStw!#8r$c=6Cat~!JR_DgIPY`L0q574 z9zObGdUrpHp_0LokjGEjAB{|3ru+>$r zdmlhAJ@33H%l09lc|lru3ZHS`zRLMcxJNS-9I%e#K-On~NdifKk$ABcxStd|JjIAa z_L5!=_#kmH-ylc@tMhVdd;)>xGKy=NVa>@FNN=-;-32AV8Hp%~YQGV*n6>YS@v8%) z%=X~V&B*TWky9&~-k3X(rLrH_fN?2$eCN!Z80nKzsQ`XaVJQsE2MBgxs5GMS>$)+v zruaw#{dEnrtHzB) zFwj;X=P;REpGbhT~I{^+?0{CP4m?9IxZ$LTHE$zxzX*FDR>##>A9}?Trk_ z^bRHclXA}xN6i=Qt?m6x*L+2`LkBi~W0L9~zZNZR{aRYB z!C#fDclCf@acjtyG>+Zb2SJ87HbYLDK>xs__pD9PDPqdAq&uZX!Y(PJ2If64hKgW|@4b^K ziin8uzDj>Op6rGuJlQ#Y|7XD$VY}59re)ONQ--v9SM<%!m>rH_ohn_G{ErfzHw$0r+J!3Jx8nY|&pJGPQL>*r@5?x52ZH}La;Vbu`CC#KYE+t&&T?N z5&7-WgvPN(%nRsK^jBIKgrlmTZu!FD*E_c?_%fPrwey)xLz|Q+qhgn*%InMpv#Z}b zqP{+R>3(a5=;?G42#AQxNxSD-sGI+GHTik#*!XqsjG5)Gu&db$^?wW~)(9M!V*$x%F`o2kNv23NkHe7nfm8Wr)2JLw zD98^0ng`mW)3s*z$6PQPIBW;$4qu2GGn&Ds+)L&Tke(a0@+ly~_nqsps$&+c(Xnp;h}htAKOe}wLAzRs_WuOe ze?}HWXcU@GNOp}gP?S6rluJHSjzIrJKHW5k!u;!!%G;Kx!-&z*ac7mb9d{Kh>^%k zhxJcO}h%zW@BY1JeX^>&T|^k8prN|DDRQ~ zZYSyDgJi;c^1ylk5}l@v=AdJ_ScP2nI^0$6*!M-egY=E}b*Qj1^noqsfc*Ah<xP0TI_mqi7_ki7o&sviNnCaX^c~1-LvGS~O#kafER9{uq4OmX2`ABpaZ6v$ zR=_L?1Lt(FQLs<5g2VSjMn2#E&*}�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 z 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

    <;iS*7Do2U` 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

    %1IUS`AO{>z5*}!5apE)<+uJ|9MeN@>#$Q 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

    r_S_@w2F%`g=vwAu^ul%MF# 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 z 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�vYVEZqeF;YfWlF~8?P*7nt)BB+Ipx<(-P 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 z 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 z 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

    |C5&us;+BdWMGya*tL0E!EH@y7$eZ7~;?%%#@D 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%0DONOLJ|BvF4166sSQS5LlRhcr{7P{ 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�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

    u^}*+g>SKNi-JR{wB{51{j}SzCc3I+E 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

    RFuxofOVUE5EcRrCZ;LrKlxhE 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�kLK$A>BV@n33dumHl#aW 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

    6XstzMO@ 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 &h9*_F;}L zI`=A}FNq?uw&v&=Gdzals{7aruaCq81Q5{Q0v2Bn$z0Y;u|m8)fDfy5`uf<;T;(Jgk;7 zH2scRm85>2w8#uJo0%k*8Gj8SIF`$L-6lp;Cx>?|{jMCr8n^h>C@S;UZE}oJX#ZQL zYbT*96g>RDc)pnTo)VB?r~pC`)QjBTiwh;lg+gh7){NFuUg6I@XNDwocEiwLlsuTe z2=*O?zkUjpE9N%pS9;0GCg3imsLiH|ljupRzp7yUd19YN5XqEOJfXI`#qv7_$-i|I zx9D@Kb@NXP!4FVfwh{1OF+_VK0?&0b(@ew%l^L6PFb4Iqo#5^re6!yBOFRB)`k(J?-#c6Ce`q>|izh`0um%zya@+Ot zaK?szKwx>5@#-PONFb`w@E(FK{j91u5MYo#RCNY!1{2nfD(xTQy+G{@O6vB|;SxOn zi3wi2#m?=fk`=l-pj{iFIzZoHUO2(&9vK2PN1h-1%t7( z<95U`2KATR&Uf_Y1;6%F`8htg(Qlsmu^QW43mFT^=UsFngyJWu*pkUTWZ>|n zXP)!ob!*R4meX%L6A9?3#vD7=u+N)Iu#Exlqr6YYjxaKN2^Nn|@q7&Aqr@HJ4^?T5 zyeBcJ=mhdpi#ZP-e#<@Wy9K>wA7lMOz(HsWAWqOp(5&Mg-{+%{Dne2K{oi&5Q<71g z(b0rn!=BIT(}bvVuu4+VaE)K_Jorc@U-=l7d^#Rfsq;z6?*Z~jWS8Rg>ykPPs3X&9 zK)>3)Uj%sDa$!9=Q%70qy15|f0y&-vJ83X>1lhg4{ILOErQd}9@{_`!WE2J1;I79^ zM%E^62cb}`@l~{hzu_tUR;QfArm_D$VS-^VXd)Yg)?Ib!94=UgKL0FLC(esq5=SS# zUUwv%1NqH$rrMhH?-E=>ez$#A@qjuj{NOlqRdS7%ft6DgNn20iV=ybf1b=gW!*V$&u(2yxmt(a z9X8=pd`(@(vm=w8bSggty|0PvYD$z0vzqImNPS7EzL%j)N$s>#vl7L9oeX!ki%1Wyq%Z8P_<$YPoGWA|1h4Q|Xln5f^?{eyU0(GjcbuO&vHw|*f> zzGuUt^|s&`Q@awNGgJmzj~fhu09(DSUIb0?J0d0eJwz%{F27vef^g=-TWpP<#KPoenWmQ;(|kUp{Qx&{tKMH2^Yqe-)=`zq{-1fT z%fAyI?oYqmm`P?mmY3C`Nq~Y0YBY7t)PElL`Pm>I9dtr1I240kJhY5rv3W2<@bR6v z!>pu(okgNacatPYJVT;ZPB^@5=v#jM(R+S`Ucw`;^-=#tjcAiyuIO7P?G<>10ZS5D zGEAp^G-_=V-!kji~D{#C|L~bXXA(i)b)*@iNC<$F>!+1Ls!az`c)3Z7!4TM(c#h z+x=4UYt9z(%6`53{zb{sd#Ve!Pfy-Eh0hE_FFQkfnBW1?uIIxZ0+zDBpS_q#`Mu@W zXt=klHs%g2bQ)Gc7rv`02$<A*a+$MLb65C-H#59t@+{O<(XuRml*D!2@qKjZnW9(etv3xhO13ZJ zyMk559}qpFkJ%Kn9?hKU=`E86Wj#h29-2dZ<@Z|W3vG)yW~PI^1WAD z&zLo99_2rb<~E7@*>ORjsxW1Ut%wRgy}uhh`u*)SzEPi?opt7WY3Z`ayo(QiJr#Y8 zdhuD@aL=&(?j@ER3@LkjK1EexlqL&CSw%JZm0N&G;Qvh=rSo@&JDyjpcZ z5uczQ%U90Cnk?#LDq}Zt@0Db}l4_uHcs(Q8qV-_isT`xkvDa2z0=B-hOPz-I+!(YBQPk+*5i2JX ze2;!1T`L}2(vb4VeHf8P!@I{y#*-gEVb#VMY{!&X6`p(YM4G!`mv{9tY+$tej=kU- zn&1}>Vz=v`0K^d4lDg4n6%t-W`H!gBUD~4Mq6xDJoi+{`?X@^jSxd(Sltw&TvlpR> zhJMsmqlw$GOKKtw*C_k;l?$eUR8ae(9&#I z;%wZmNTC=1nW~4PwMX!(+{mv1O-L_xD~m?tTsTmkNk4Ost~M`C8lUXELaHIcR8 z56Q9x`Et<)N32V2?pEJfecvp*rZ(o2h+hmvs>!x}kb_aicYE^2O9kyJO~OOj=$DCq zPgY$BG_}oQn4J(M0MovhAos5*YS%Hv!|bG=xg%~JSoBvc*V!HVS9tl+l(p*Xsj+Z-(?$2&8-I@GeD?*v1z!NOwVaz#AnRJ$#HNiY zLkNmd$2ohjW8ERk<69Oi>%qVH=@C-IIf}qc)OaH-bskH)56<}bSX(Cpx+{!Ms7Ol^=!6N;G z(7QO}(6Vt%!w`5$X9U>3xX&T)eXJlh*1w}xlLq?^P z5K-w8kOq-%7NCGMN+YEp9U@4}&>`I^-CYC2Ff-S;?(ccuXM2CM@n_Ap;=In|*mu*V z-3Tidb)d+c^Bdotj%L6J-&Rc+xr%p!`|J~oE;$vmLWW*Hz|Zg+TdIFDt6HU;4eyKu zv9GSE`n>g3HG2(&PdLQK!QCdN{^2(Y^*sx}+2hYGZQ>(7maHb;dYE{0qJ8?`j&c|I zzn!)HQ#+`ytnSYhjDyTJ^vh#@?yo;;8yPT@a6@q#~#f{fq{(E zVB+WY)#peD9Md1db&re+6l?0w7H6~KbJ%iv4kmZvfkDdMxzoRG%VkNX;~f%xEa!-U z-uApJZmS@T3)Se;1Iqh=1onarI}u?ufS&MrD%~PPu)^yt94{vDN zoGH{PPwza6?RO4mYX)94u*hy6Ul<}p0lhueVuI#&tx^@1#zeSGj z3k}BXQt|-%FT+{e03%THt(-vVNt|Dmc%xRed?_$D@2y!MzjUjkwmZN3v>SzV117YR zm1KQ?I>aJSoiip?EuG?*0mbcs;0w>JV>4VC-b(C#g^Z!-7CJ8`&Q23;Vx#FVw~dT+ zIhIrj%EhzH@Z+lQS@n=}d<3kfL318hgHPdBX(V{_vl0`@O3Ns6Tl)IVkGt2AjYKch z(GUNglLEd!sW2v%{k7##b~iuq$hkJXaEUgKdj3r*cs%=a=?MW(6#GdgR}RL+yFm`N z^At72n&mo8mMh>$M%#7}1*P{&hV(w_$dQs<+m{YY&OsU$;0d%$VuHuQZZ@yoc2R228vKB(5-(d|3!pg#_V@rkQ^4D8Hyg5N~Xk`lmYd7 zZde_tipyQBf91S?78qlf10WkxJOOYWFsxXLG3y8EEn3d>-snt*Qmp% zQmNu=k3ozBQwGd@c|6D7JP0*>*F8D1UN6#?#(!Xpc^%NqhLu^an2k^owq#h54@sh< zJlg|3bdFZx_Nb;OQzpu9an$NCD}4drF(#denw7~zM}dJi!SHgz`_jE+AT9h4VlTLhVM^NfcU- zjvs^V4_qUvrQjlT76`dZ*7rFIUYMR^H836e0^>*EiNLXF5jj)(unGvy`krFH&JAK7 zYmU|JM!fx@ubVf;hKnimxyDz-_B@gOz&y<~J0uX0UF(O!Q+@EzP}p#}Pm{|G^mM8Z_n)!7A;i)Gh6ehI@(L@VX`;q=ezCNsy7 zJxfCOEppFJM7R(P>bv&x$*arGtx#~~29ocS*7#VaowBW~jMmowo~)dnPP@csrabddTl zn?=tc_?udfU*0lAqDSE z4P#$Y3<`)nk~R0Zx3`77(@8=on%Tu0SI7Tc=&;O~6W^T^3<)VE#&A^)V4`fv%z>? z)5&NEofB-JnK=Lwp)bm-+mqgDrHvl4(=ACG5Vo)3Pz6YBDO1!$Mfz+;riq#Yt?oR%08r86pQl7>)~RZMPxfdOG85)3aueaHx;B zMZn4dx=IMmCiUo5YGP5KWFKGB77LfR~L!rW){_li3Jc8Y+6xKKA zEZlx};IU=yb-2C?-vvlYBboMk0>K|;uPtQAn+x4u-RratWBv>FoEP%Y*k%%jHE9uixIeI#SG%G<@Vkz`&-;qw^?r{c*Klor1KCarNkK&r=Sd$wqI}=kd ziD6i{=!zHDP5gGX<~!>~)aw-AX6p!c<$FP||3yiS;xYncR<0CNMa4(0XAA#T3HW~H zZg+u+!dOZ-$-6w$c!k2L^`ckR(RRbh1wp@?K6!H+O>et8eSYz3i8F0BTfc88$~=qk z(wUNYrIs}0oyJGXEu7`SdSyx|r&L;1ctzww6W6@vxzw|gq~@$fBeAEf)3Q$p?ktFZ z7`k%Vp4#>+MTDhkIP|b$5usWV=oF|UUH6KH5N0taMQeYxi}hO|4T4CIIh1^T|gCt7v%57Z>YpO7ifpOY^-c1pS>G4`|=!vtvb zr5@)$oHXQey5aWs(WAHdsI-VjQN4gaFZ$McDF`W_RRqH?uTB+e?p=H6}-aH7dF{28h<;}mE*1bY(B zZgUG}Np7YNiy6*bIgLM;!+QnNr0^2T@a`JeF^r9wpLh39Q;~9-TZ_hCI0l>12FZwe z=9N(`*3I(z3tZ6tjE1Y7{yblZ4+=#vciw*grqmbhWcNbjd&=HD25PK%C)j8lZSv2( zB~=@jT>Y1~+U-*I6&Aq*#I8W%yzu&vM{q8O^j8UrwMRFyaCa|p4y<0(*Bek7UdPES zDIH{T9`ii!hv84qrM~4_pEUM?)*F9y`dl-nQPA)~uyQ~kBmha)wim3k-ydX$4I73| zx?hspYU}lLLds6&i6Kg!ScvUC8~%9c!3bS!$cBNz-?Cd<*h zLNj20C;t5Ui7uWtH5w)y8Zn{~^@ufB?NnN-FuAzlfwyks5W=l#)WZ4$rX0h;IEl(c zAN_MFVW<^cHZuA8$No46wD$LPuRtuAOk!gv3-!}Fe5iFdD+PrJEF3SJ&3Op(UsPH& z0So@p4)@w2XoC)6ymhAKH!~*phxC~j6dngL6>zyB^ZJbL#Ycecl`>$rtNWf$D*K6@1%QQ>E>={LH3 zhn4AbQ5@^A)@XkN;$x6g0-CYYHNT$LZzHLUO#jyM7H$2rrfVvW$BO)Xdh=Z?WAJX8 z>3!-7avUO)uRYj`LIXn+A^#QwPsME`%opMH%q@I}n*q{c3AcwW?OLpOik za^D>_IG;cBfd=u@CU~-p83vb&zZ$r)8EDqBf9T76IVxVO-zMqhMB+K01bbB?^-%p~t4o9o!no(1}%J8`9C`Ae^(AGnqa<)&uckE4+@=2#V`IPd`6u6TTmwYY)9GU zs}2m3)995_oNl3aqK>B2_mRv@=85w2qx~zvw8PEWS@-1%28%o%YsB-?mk?U=7My4} zff#x*wkpCqZQn(7yjPnFOtj)C_qNk&+-%#@4Mm22u(axSeQq&*trW;MJ@upp%4}dN ziJ8qa6BX+yHfDY}Fc1gRt{IROnciNHb_>0@39F^~Nn|ZGb2Cng|tFP1J2bOOcF+|h#_?7}a z{v9S(-W*?dOj&k-+)&NMfr!&x7D2u5_OU-;s0L4aA1e>aFPT zzP}#A(C@y-_fW=7N!!mV>r%f4F?{ z+UU3J`hbFWagHujk$yYTXSu)M_JC}Ajak#hw`i=+TjL)%HJPK^#etwi_*2Z%PKKlB# zbJn(Ad)QJ@auIUt3|*e7U}Es%Xx;RNAAxlgbAiB==sI9L25J3W4`mHr{d#knvOHhf z>^~_heerk#kjX?H-?hYD!i#K_9SW6{xP8f=WX3yv$`IHqn!O>nv3>XDa$XAPTxUis z&0FS}l!D*%Uyj|I0M@DJV)Ze08&`iXbHFS;KYx+u+`M<2TAjRl+9tTQ;|#;>gr*q) zS2uDyxV&S;Pn%Mn);YMZ;}Hv&K}p6H#$R%4RBcd+)=Tm{hbM9wJr*_7N@`Owd%!W? zO|zmHh!t+*9+m+Vc_ep6IKX3tV%QzLI?F?5R;Q^=zaWKD; zo2Jj>(*@*#dD{Snx>=&MmM0o93bk@2Jgm)zkR6Cq-#I~+XrrYLWB+1M&03sg!GXc< zcmGsv;A>xyKjC=LDOzF9!aNcTRkWJ2{t5C112WZ2MGnI+dT<`_Gpcj(+ywTy!5`bn z1Rf0dgU*XRFyJkLRjsJzStJ~z)4?)4_mu{Fvm8WF>gVduLjr(>?On*y@_Aap8pX(d|B%d!6%Fn{-~@n|t< z?@gjIMwDDJK2}kG;;Xf&wp4SrhuH{3m8@vE=TLAd2%O0Q@?GCC3gj_922L!`fkPS$ zB53@#&%-=pREj&vy=6%x$o96CR{L%Qzv?I@N!?l@Hb?2P0vcspwYj6d49u!jb%sB) z^ovq|%wjs{3qbBZkY;iZPLj^O?y3XSVVVT*)|XT`S?MbktJ1y8k;=;_=_#n!xjbiB?wDTAgzTs zp8R%gDsBNic7sp~pPDn53c5nzU?=JN$W_T|7$+~Y{t4>Bn*7bIdK}ToJ-HN((@Kaq zgC6WCfQi~WO5<0lS{aUg=1n>d<{DIS^M_EOjFilY$+|5Ut)lms+ggtx;~UiY!wL^! zZhG8Y*G^k5I6K(qIK&I(&t_zT{nn=}x2nIh=~XV8ghXK+$;2y1q7R=bN1~uHK;bHQ z+`q|Eg1ixMmvBt$O=Q^0Yz@I^d+n>d=yjVgsfBfy6C6T_5~L37NYc*H2z0dy{VV0H zd@o9et8`t=S&CX_Ijp_U6W8%JH)ljFv}SCx5)qK@NQC^|_$h}VE+?*PhVu8&T%ft= z*OrOhz@qBHL#x!~2l{R4%tujKvM zmE#D#ey+)jr*F9#ED%xWdVG+3-PlCHwT0}B;$z^OsTWpyt6})8S3uABs?z zRt=^1C0ImxKFWQT-*Fw#TxbuEGEcHO(P>!8h#$m6-uVYxd93wJdkTbJJV-ddb#nQ8 zyS}!+1*i055<9Pv5D;0WmGAal?yK}I;)$1bKRUz0zG{7tNu;^$Kq!NcC`rU8Rb;EZ zeMJXW?`-*;JbIw_Y}o6`FSCQ8eoItPi(upnn}PP;>7J^r*FXI=a~E$NP!~NFEV<9s z4Oh*TtzfIRz+5we7;j{>!ti)rML|EbK=0+#u*!pd*7h5gMBNnJIbq`$o;I&59CygC z#@Y&@5WAnr!uJg%*o0^djDVEj_=X$hw!UjODOq<^u)9g=)@V%K3tIHPEf=NlX;(K@F_kB{g_dYW^6GdxSH%%T$zA_r zgZ5})`^Q@;OfXg*zPxHj;#Kum=><97pc8#aAVmB_b?(u!9h7{(#k^HX<)d?CRf6oQ zWmHijwaW%oZ0;p1?Ah8~^9NzsEy!@KBi3)mspTync|-{*?OPQ2$4- zN+kKx^kcmq@x3}r8W`%YO%|Hku;wX_m!kyMOze%;148acUF_xzq%ce-x~>KPCkZ{S%b482w#hMAO$` z86m7Z0a@+X$s}PMr4pmebsqg2gFXrsb!KJoxoMi4-7`Fy7cml%)+VCoQPFcxub13i zpt}0tOS~@Ev6Lz|Etcg&^raf5Kh!av!`pC>&~#Gu9>F+#9oolX-mlZ)j1sn$2vpj9 z)I&X-cr;lX`LE*#nHLAz3WVTQ?PxYx@V{SgL5hVjBKFvl$(1^_>5(V;&nAay1zw{a zQSvjw75&|)vqrp?Jq=)0Oopq<4_%)b-U+-dDaO@-Mh;dTScE}h=whqt%_I(~Nh63RsS;hbN z+&R zcc{V7oI&$v{zvnUz89X~K;!1;EijLrLVhU2jzTa9v3<4?`-9^T?yPDT<0ucjQhSg- z_!yaUkorkmK(lNOh#!NYd-{0Cv_|DBTr@T_WWF1;_p2QlT2?&Tmi_J}vjQYOSX_E| z486JS{RJRTW~Glo3;P;;6pmO2_&Y~nY7>s-Y+_&7wDCZVY3Q*ZPwDU^PJlXQUS%zV*Jb5$B>gpaRS>BR1u=v4e0m9 zN?M}9Y~~HdnaM-Q1CKZm(h4P)#?QoG1VCTWW#>qz%jRM~?1kA)qN>TiM}4lU=iGkC zJk)C2iugBID%M^%Z5!C*D;zs?rVoUQQx=d@S$3IDlq(f25WYIyxfagokc1_mlWyB% z>3<0r+SVxOxM>VWK4$XWMQI}RW$YdbM)fZI+$lvKV=}LV>k!bq{{HSZb!$F;bm3nq z-M4p&gC&a`Ew_d{but(9g)I#$-V^^?4RKF*Y?nuF29`+QV&R zlhH%2#>H-J%;YSYttcjEsP2@W8gYeV0(BG(WxvTP+m4F82h(JRwbOGc4Lw44~rieq?!_0vEc4 z{C%9SzCR2VF+XuR!WLIyR{QFDS&W|E9n(7j0Z@{h7c4l`%ivPFib6qO8_Nz=Dy1vv zQMv2WD+lxiPY>x}AKntSuFtffy*{bZaDmcbc&=-e}v-+0+mNl$0KEut;pTmFqpC+eYsJ+PrM(8c(y$%rRGrncZCTxKm2Pd)>vPI1d>cOLwa zlmjG2wWpq5Pf~J-bUH*VrD8kKSZWvT6ri)_%5MvE^9rl*)Np-{-1|v!$%nAJdnKU! zrjmgYo$Y2%C&t81^9X`h@rA$CLQT^y1^A7hCk^=wGdz3d_Rh63xSwzWyd_Qu^XLQT zz1Az>Psv|!hC=)vjy{HplJ1Gql^g-TS80{Ljg(2Fo*p=4?copxx-ihx6d`mWopu}a zn~c8|P*nJ+ryKA)7f~Go0?bPLdK*u2 z-{SX^j=^d@!^}E(j%9Iv9wBSanSWri4Jn#v4GWF~Y$e{q6OT;qgn9oS){!}jo0EN* zC#FlJOnu`m-NoshB1U`QpA6|G!$onY>*a3)CB|dMOZX}t0`u}%-&*{{HXSxe=l+C( z8rorB{V>txki2yCH9gzG{8qs_VBq|f)}Rn^tm6fgQ`ER0z_%|5i(@T%z}8)jkG=p& z(PpPDN>lmoHXwI@2+vC-cslAs$&3$EPyW7j-NIJ)F`gEGj%&xfG_nn=Y)3(kO}77R zFpi8iiceZcg#^($b$s?HPr1!hVk1cW?F2}VyI<9nx5?#`hwouz%LJEl@n55d2SHz{ zXg&f^ckFS20ZhZx!*K*PCPp4VFaDwUKf>Gr0)?E?A~tRSp>4i{5ONseRVpMR4GbYK z8cCww-vF!{qSQBZ6eMPj5x3GRueqfQ&pe1tGXLzo2By;AtgCnYbsI7^ZKs~q^4(@Y z?_-c+@2zp}Ktp}qp4o=_gu{Bss|i97+pA5^gKXZ}5%BAvsx{pWX##kRJ+Lem-?m_= zN0^Q{FWTxTWn$+E_^_3S_jn_Y^I*zfi~CC;ZFwY_eUXmI3>MzY4`aLW&#n@bb(GFE2W`kkk^(8TceoO%qNGLX^B_5F+Wv z><0l_J%OIKbo|NP^RwJ2*XndEq8$asK4e2f*Kfy5(L2fS!kqe}?KF}H z&E~JG7A72F_Xk1c8|i+v$2BJiWI$?MCx0OY9~UYbqSzM44LIB6@SfFJV=e)X13dD8 zv!`^wYE9zm4(Evpx24a-1N^Y?gzeuBSRndKe*L79*O=Lzdxnn9n3fnU7(x1#7Fj z&DS2?XAWUdkBTjOMzk=TUlzE=g+WYb&kQ?OE@saGc=@l`@ZA3ZFEn<0WvfB! zYWC~sdwi>g2MN61HMTeblVXj~GeCxixubh|__9TEtPJc1_Lbmt-L4Ix@!4CCeOX2< zko;I>zlg4JMll2d>% zHogduyY4f7jJ-^%-Kp^9y+&gwweipk{oU?(&X}H?%Jfmq_xigd{{&4&-d2*wrkQP6 z?6-iTrTO)&us3h#{S6QOV(A~BpZ}BzkZQdQPJCQ%8YHQXjrdZ=Q(xrp*k~D8U z5BhQWRryDL3$I^c&h9}qq#42?I9FN406@GM3@P_as8fPuiTFJ2+%wSE}oB zEwv+dAoEW*xo?cp43s}mov>~a%McdNV9Wd3G*zgzuKZpwiKa2vbY=9T=RNYHUuW!& zY-Ms`WV{U&SP^lD>l(B*0(^hVGfEY-)Y*&i0_sJwGDRK(AKRaz>V(a^^ywr{?C8e| zvvK&r17>bV#g<={J@hQGkqxgqzh3D7YT9a0eG;!0KK5R>d^hrKjA`f+5^1fPrisb? z!f8}E`Q6{^g2n1e>0LK&d{{6VX{|o0H?(%%=D5i5f#7@V;}hIJ)=DXd1N*xH2|{^A zD91`{rg8a*pre25$ymqy7&|eZrQ}3iYO}IQOn|ZdH!TWefbISAjbpc z(Yc@`CJ_83B6yaem$!xZ(7pAZsDN}cVNfyoH1^R4Xw-Ah!a4cIb)1mHQd!C`67H&e z8x`h~Z?B}Q`_=bcQx~4OMvvYl6FcP4&BC|d+HHKM5w$T0wtO>a7WjFu64(1+^EtkO zATYOo`TK6hnaXX$vr7j8uSUwHHXsVqYb-sthYVEpbv0+=%&$h}eAcI2WZ#A|?aRtc zKgDweR_R-9{|>QhL-bXLM9B{5ex=m83cn(Syv<*gb=Gvw9UA?JIgWs{Bn5!)Zgk=4 zCRfGV${byVX*d1%pA3?0A1DXc{q`MLFul034Vl#vVh_ti@D{Ou%7BH<;fpIo(|uA2 z8;_>M-w9NZ-Dxd$QLX2R676=}T)L??2G*jOOMhK2Vf4Ek`;$R`w)$6xuRF5_<>R)U z-4{}GdXI5asLa=KVU#ny=*;GlJFFghMfcpFy)qQbcd6$p+g7r!t+{(6T;}~`pD(z+d?s0A+xLqsPAf0|CYyp0z0z5e8} z$><&#YHR9eCgh`XXElz;!1*u)B=r|pyCpDk-)cU1MG)RW&vZ|g?VxNriMiQ{tlmLS z62(!D_(+&P`bx=l6L3;4MB@o%V&+Dmyg6Zi6Kae360q{u*w6;Mi{_PNQIF&*7QcnB ze>S#;v8{oBx9Iy&lkXOUk-x!gYj5Sa)u10E(u_DCAQtD8BotMN8{d5b95$eDTV2m) zj02x4DRm;mv7yn^8$o%zfsJ!^lx8$OQq3dh%8Px!mg{lXU;YPpp!q*2yxB&PD#Y;* z#L=nM1o$QspO{K8+X$@+VYRR@9nVX)T4?R`^zsH09S4!Y%aK8y7hSS?$5jFV(My_g z={xL|kbLgaz5A;!0k}l?!Z^INQpaO};jSQ<5GgwbTQAqXCT=t2VL2ww5&Fbd%O5-s zD!M=k)9~MnBS=pNyMUcHF|o4f>i%&io|3OqtHxNe^Qq#S%iGZtex&g_7=-s;omZSs za=+|fb?k;YN60DIZ?Ea0@?63e54J2~)_@?qy)eOL`LZk&VKXz1Jyrl5_t~DW!h5tq z!EX4OgZWOMB~uJmGPdnVAv z!O3Wb9%fY^+B`ip?Pza)njf<2HP(15V|4Zss<1D)ezy~vGOwiB zX!@^{uEJ|LjYoxKDFXrqefE=|h3)m0-1Vp8a6dZ`w2hJLRfnS>oz9sCD&v%h^6k&NUs93=a|-Gcr88lX*mwoga{tYt0>l}0e2fqBz{{Q7{yDPNiPd)x;OrUWr{- zJ=UT70b(zp;aEC+JGJ5&=|km1y29JUte=K|)?M@)DKm2tXN9$eE+boylSsfR6?T~! zT-_tr40E>>aqvhnIa_8%T_4{5KACyGi3t6#l2$V_k2k?f_^u9sN?w9-W3##HtdJyp zs3)Qm{7+@G(WT1KcN@5+P+J&#^4)nRI}wpaZY~Crih0*N>+rmtzfTk5^nCCn4(dur zDQcy?=)pf81_pf_aVu)fjW zuG0piom~{B1|*RSluRbia%OG^Etur-iLps8n`~FKAT_Y{lg7;n$EaSVvO|Q&&zE*C z*t-l)ht4oK&lkodsORa${+5`MI*9SJL&KHsy4wfy|Ez^Ba7aA{n(D=Q-m>^wN+1W{ zGH8a&d}%Itr~`Q69XAHR2w4i?UF%0XUdo1k$Fv`R@>vL{{ML!7wRzGyVrw2>dcJ=b zB|YDlpemw$gN1kh&|dpPnYwlo!Hc<<%*#GAhVQp+SGQr6y0uN6&wbF3fhIciqS#J2 zJTid;{S~~J`@TILY*tU_R|F2NklEEXXjyX6iUG$koZl?s=2flzG}xhdA^!O_U~e`8 z+KUv2G!+e!c5L6bA^kHkF>!e1XRpLWt~OF_gB|CE%>HZGie*Elo`8oXfG`g`l;Zm6 z%lC<83`emRSu>LJpcp#f<6hFcx#!Uuiz2s-bV(dVD5*1msgMEj-6N zih!6)F_Sn>-2B1*KZ-XEfRF?mN*P7-%92>g# z)4EZ|4)etQ7nu1&*NY1JTyX{RnR+RrR<;3tn0`L50NT5>^(uKk8uI?YFXsU5EX~TS zPhRG<)IK_&Qf*Qq)$J^kG;F^l?#AOU9s~MpK>@yYkHSRpp2Vwj{txcx<$vo9rN%7w%m5Qjgq4A1we+YCIX6^&YPn{1Qbv~x_UWcLl(Bp?! zr0%oOUtcD*Hxf|M-ou#8J#vnJdQIU&sLxA8K94MiJlI}rAi>03=`IE0gfX+MnEg02 z$&b_-K(UC=d#K^E8ZOi|n}!;|^WodYCgv4!!rt66i_ z%aWhtn!s$GKQ{SQx=0w51+DrhS)%r;Fa-(Cf)=boKTu&Vr32s7=fg1yeZAnW;FK?AkWM5}2LJuta5d46_ zacxuR?p^}+>Fn7Vw90BgrK8;|sba$0ov~*?^pW66c2!rn_KJIE96pqO6nti2SxFaq zX?!6WEdv|pUj{UqJ>m25@(+{B!XQ~+1@d8#&p+LH#FRpBk9O1xv*T^aqDA+P$?_(N zA7;vL{{T!6m0@HH1Vs12lZo=jFLx3jX%XjWFstb$HIiek&LRk^+=r9@D#tzPd*pHX zuA!1p>&}8f_bXL^I-kcpOuTiOvTUYm@yB8&<`z11y!r(EU>lhdDJpcQpjTD@@~Of$ z(@kO4O`aS`EvV#}J-PktMVY|{a#4}LebE2bO#*>S^oF@7Wl0}jR;z11%22(lbeo3i z8AXEvoVC4c^~pro+0pT#L`nduPt8YJ@%iiXgVv6f2`+NCu4rfmFz&FR=x2B)v}~hk zKEP~>j@(Su+qRN7JFj>zIt$v41+RQ4bus=kZreaw;xl!PFyU5TWRd4^oxhM0`&E%R z;gRIKs*G31N7elUCsuw4QKfwKmaJFk?d_$yi~M4gy?&putA(iQ))kf*T}6pUvQLrs z^l)_g1MEKS&Bm+EYdMS+x3vT#ZEw!blC(nzu?S-1ny}T9joNb@50as*A|4mdt+T z($j0^nbp;W|L!{f#^;Tm^4rDS6uuIbD=iU4qLJyW;?u_&*Jxp8-3jAr#-Yp?uXM>Z zPoK6GrH89GMFl=dh1{al-loZY(E6QC_R=`^3aW!pjC9LVfAJ1a>t#A(=hb zuTMWND7b2(=85sjRqIc_48f8?uhjq`#dY#45as!@SW%4(j_YwuqJSX2g!VB^CXrp? zK~lB$ui_BKN|w2wcQ=z+E?7Q(@MbC%D~$I%3(pg8`bidg@N%uSuI;c2hzb4d>HEY= zsuSaoGnO3k+#NrxjbAMf0Uz+n24TuJPitUMftF6hE1^Gku=NV*akLK<$L?Hl(RTXe z({A9NTBRpKk9HwQ|wR@h_vNM0g z7Z#bBnOB$Jl1Q%9vp3HbtloNb5H9m=_AsVD`5I-nFz>wPWv3=2B{uuc78Ce^cu)GX zbjOY{WXNbh^GcW1O`W3N=LV%4g^%6DnL}bQ^Uub|$6}uHSx4&Gs*c{FOg}-$+UAAP z<5Gg|BDov8O$*+&Z)63QS1%*C49{U{C=}wms6pl#U+T2OIeM7&u z!Z~yUJXI4_erg=)LL~p8?7`Y9wgAlC*A`zp5QLA#z(lBxp|9~DZ!%M0iydTE{UFnM)GlW$|o1oV%biE;aPQb7+*{bIknmB{5=(naI^#P>n0g zXw$pW*UDKtlh6lKD+k|C9c0#=`0Z6&SJj#F;y9K`T(jO9IPJB;r!kDjia!d0ngJ2` z2INpC#>@ophHFeJ%fkR$dnywbsYcjfYX{5LKog`#(N*+1_Jte$syJ<=+^3GDVWr

    ;`SvA4|KM? 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�-6|G|8g=VsK)8k-s7B&sbqK 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%0D(s%MBJG=AthIhQUBFXMwJfFXWxA} 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%0D^MVR9ujlsXgfL9)a*GuBBU!$Ck~WpG@_d0rQV} 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

    @T=S!p}h9dPEj%^B-j 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

    $o&VhT39}V{M{D+mF;J-Why{8&#w)7X1tBZ4~R_ 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%0D5AJ+nFeF19)Z>;#ZL(>j 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%0D39dtsKN0MSLc`(NWGxw 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

    QG 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 z

    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 z%0Da;-*mgS@!RjiLrx9Y5W~-t9-}0iPp&3*^>vYXrggENwOb>lMw{hm>hQ?A$r}>) zk9sBU>1SjccD=>UljCaSp14AhQt3Cz#xzRFCI#AC*PAM;aaxoOv&=$+J({dr(RryA zZiEdLENul5g{G!$sKh0+&leReo(`CNxy@v%4SB|>+&g*`h*+|eBzGhImSJ-@O62O5 z)LZzT9}ea5XRAqWTd_LfF>W;|O3yniqGng+uSAkx^}6{(uY?Q8#{_&sJ6E=rQ9E>< z{pP|`+kB0BMs+!~4nBQfi|0^i)$^wQ;KmQew5Q=YQCQX6lgL8%?47cBdS zyv(bE2Bp!z)AsfF20ZXvd44}ot@_v0orlD!xkfv#%(~DTs1{UI%XjeSjUK^I(ux8^ zdhkO+p~6wY+`WS=JH4Od7bV0*hr@>5kNXc2EZh$kzX%fCT`%EMQx3JRgSv@axgtqR z7{h@YmU!%SLdZSRn&HL9&h4H21P%!s|C$?=uTR5_rrjaExTR^^mSzPDePJJ>9tyXBs7v;dTJHcBNull=uk>~zy*y*Q0 zNI447333zls&ldZS{a>T8 zbXH5Mi;F|c){I_yf z3$xJIm9m~Sn3qEW3VP~4(hF@qxM$>NqHqI71D19hhRm$Z|Mj|c^cR{@)G;WWT;?@& z{3k3THGqv>vl&~4wkHibIKzbzJN9pku-@=>FwXKn^P8v4U*gefZEZ0t>NfC~P>@9< zmnJF>5wV&m0gP@RvyysLidC5LlXMB0+EWse{ak_9w*@mJ^#5!L<^Nd79fodMNmCWe zB;CZ17cS-z*7afy@%xgRTe2VGB5snap~o^mlv>U(pS({qU51J=e`%k%EJB{FJL(gZ zT+?^daN^5axe^_ugb-Dj+G;!whp)9E-qXfQzhRq*@6ARdyfTaNW%#R?J)WbXCYChb zH>?+^FK*SZG>qgC zQ8!4a7S{STDm&@iuny!6mP}1kIMbt&dwO3xqIUnW{%CHJXl_Cu!i@hXviN)En`lg0 zLW1)yIY!IglxUtY$*z1HFS<-3g!jJXgpVzShddqPPpMS2Rv&Nb;_1fIO$=%t!$?wP z%%0)Q%ud`y+lrL%Z9ma+NkW}$0gCaaRf@4$f3n>q%)Lbeud*55lw(8}bh}w(=TIBx^*7*`SO*dF$WH_U_sE>{&q| z6#DC!EaTk;9EAJHC@Kh>_||ibNNmoOzstei`jqsO>W@soYumNFR)c2k;caYo!fUR* zW8|qRFY(`N@B1F-hqgcHi{mR5is`K&o#HLQn?grmdLR5m{=aJ-!U1%c!luZL%l_MN zX>*A9{xXz}fe_v9ocD3i@6}xwpj)d+uta#lp`*;r=y$Q(n0{y%`gsp|toq+(QS^L9 zcew|7diB*#5}o`ry8z~Gd-l}|(+(p<$aqNk6Z^kdo@le07jF9PR(y*$2;SMs`{oeALNTC1oKofUX?lx)EgO*V&QMewI{44g#>#^>U1xY~uHej4PuBK?Sn70gvT&3m* zCl?1lAr66L^gQekZR^7$yBmH1;|K2f-!n?rz!1M$9moR9abWxv2_UBRlJX0*-%r8v zuth4i-@703P$LrueQ&%$b-Q2i7!sNE)AB<@0jR~?Bg${%KLpE2v-wfW~f^59Q zi~c=vd)cC}&V(KKVK)X|z8MVizLzw0G5`Gx7^Ql@X@8b+dW^iz;DLWP&B9hReVVoq z(jxC6&-omM;Yp(Ap>2Ek!T()+kE||CB*m13y>$?H;BurD@=lF^Z_s@w4zb-EI~%}r z0`zX^MFc^%vI#Pe&dWL9kDuP$QhEb-0?U^Y-3T`VMFvVwN1%p>x5d)2<(dok)w2&i zHa_)V(&|4>9DhteJT)pMUX5P0dnJWjSI>?A3GV?R-r_?@LS+%khR0s%_Zb)4Ait^I ztQ4x|rllR5lsgao9AUf-f%J?AZX*9jZe0668dSvjU*sXyuNU;@?Dg4)Cv4f&kHsD$ zX$U7LxNLEymKD)9OPxR5Dd5q+Ik(%r3$H$IR(LDCyP()W5XH|g!8gNzsNls-7hJ7{KpZw%j!C&`3K!vbxEi}|T zaCWpBQ_(EEh_O^2tzFHPxp5vVD!=wSNByli3Ix{uoEX-S>}@P2)ZLJ`8%Ke5cm-B4 z*iWzk9q?Iq@F^zP=MlzTpWgU$25A<)<}@_?$T-~QnqgS@Ea|Ux0!ct1WE}n@i`Vxa zEv(D1I!yDU<;Ov~PyEk(2EgLEihwht2R_zsKHW49&jYuUV*?0cV9r{2%ClWR84eYt zyf^aty)#F2%PZKK8pQjvr2p7kA&wm&5VB z)8hYh&dX!seb=(1)`4S9>o7e+3+7y!e8KG7Sh?Dhm>tYU0d~ zAf!j6cCP#Atq~B}{|>7$u^-xf^VABBG#)=;N&4ibXWJ~3j4u~hd&gQDLauOt2$pL! zWW+0@QOJ*g>jT&h?|BcuIt8yTioiKcj)Mvtz8@{eDkugkOYra3AeryfTs-U0WkQ`d zcHXV53+P2R>>Nk{)Y#at#KXAdPXLBWY?6y(=hNIG-I-x3{4&n+T{{p{uJV;%hv=&U z!4kB52;1x@ZFcTGv4RMQ?qcCG|5xLliYIhAR4bmIE@r^qjJQ1#qwknNp#7Lg|305= zb753=)a|d-l^A_&ta*OTGt=);=duE1%2p$XX8-mRK>X;xdP3b@xBhjAuJwj_A%#l5 z?$+N=*_uD&6n#srMjtI@dpX|)&p8q+bLr$@Cpw5A94S11{zI?zMdBCIfG%M3orYr} zmdr}(L83|N*Xr2ORygVh15dxa{I0-*3k0bMyaKRI`OH|s@f?&+mD zubEfOJHxs@3!Ts*11uI_fWCrVtoxuU3E7o|3;5p)+G_ULM=|K25yrZOCvHl~7JK#+ zf*fqrwwJ(}4`A&qUv2I_hCHxzc-Zc7to>Dv@SUN$#*f&5q?+2U9I<$9e zUFV_*qbFiJ!_&8M^E)*KMLl-lIzcz82A0QC+T(ubj6I&>If-fbB;ChH!TqJKp|q)Z5?MwYK_yzyQ>^gA6^|w#vj*Bw`4F?v85|-(p;`xMmj#) zVzMQR89fBX@+N}SFr?V>ZWGzv@4cVHDfo6N7Xu3j?0k4X7qAjc4zUt9p89w=r}YzZ(GBJ^bbLn6~AiRtj(Ef7jn(e2Ye>d<6L-hW&T*?XLL+c}J#_F>ipzQPTcc0uE|D=;V~v&ET%m7eevIe z38!313~ZLp-SgtfhEMFB<7CkFN6c#Pn4I!EECn-I1F2uta#@dEW+ZvLN7Z=qZF|j9 zzsrV>!+CJMLLwuj3Ik(oFWsL)n`WXsmYC6ysdhdw_6HgRRX-{UBxco5q*cN~TvPR( z8^#($$FF@9q@LHtP9ZVb&s3(stG)dBOfi#(Bk z9~2D8_{fr6c`1EUgzK}nall8A-xi9iFh)5kc+F>FMQ6w4_dn9{vui0%>_)&LywJF$ zR=~Mbtoz*c61HJ>*B>z;|B5lIy{BI{*J@M3pOiY^iLfQDhoo2-XLdTu-^V)qF;pix zD^c^o2glA#VGTh?O%`t%L1wj%kF9@Cly(bu8n>OX(Lyl2n>0WFz^1H>gt!y=(KQnA zEwd0thjiDrIYJLsKFLLSesm@yq%_{FS7EG<)|~LhUggE?e*nTJ`<4X7(6;VZ5B+45 zWa{W8b|(h}vH^Mom2tMrX{$t}{hkl&|&C=(*V!tb-lYYpHP=93> zP@8-FR5cen|4^N!jMY;)Js;4um|WYs9W_HqEck+q6N~Wv)lbz;2MfxL=EaXc- z$`iNd#vok`x80qV8*MWl@5#_oeQ?D1hVtc%x^Xq!dEjMMSR--OlY)_qupBEbky11N zP&u$y^Km%Ob%M~AxuoIsa$j+7RY@M8oj2pQ*-#s;Yx727C?0Exb}qysPgKj}IOc;R zER*V7soie9FA1d1k-7GBB@~c3#g}rgSu|ExuapQ!ba}q~JMs0Y0Ej1P;p&v`{eG}` zAX!iYrpp5$LVXP0&KT$f{95Tkgd(8bB@pudrH^$*$kyP#{!gIs_~rd@ZX zBDqouo*VXwv?7VdJ7spUmOO9TJL=%tScuu!SeDNHSE`Q>O$wg|(U84wn!KnCv<%p; z5`5wJ6Z9)1m*)_*77?uG(;L(!4<6kD?uhF#l82H@$7Ut z){=?dQmu6`jrzjp5XhLII&{ybFZ#kCooHW^A+24`yYA-2jXCX)MJ?#YO(K{Vku%Rx zR3q>@qZKiK_VGQ-zilVsl}LdXVaop2+x&D!1W^nLSS6Cy`A5XQ{tHCF#-YgrHpkX^ zLvEdzoIK1WUhKS7yNFGk45A0f?lXeKk^XXpFZ*+MP4ycWcqVLf{umAAuNeAWh=i-P zjPFrOq?(nqec(0>3IkTv$a6Vl*#EJZiRPXU)A@mE9`f5*OGctNyeu(X@-OX-{cDPh!vZ+36Q7()K*|^WFWT zK{eURU&UCS6by14y5$+e0>+8ify79UFkw7nQWc+VUJ6wa!st3d5-gRWlv@L`1r}(F z3#*b=(Rf5sucXh~z8l3@MQSU1WmE7%KW8%9@A+XONYQ^upd0+8O0bkN#33n^Z=F*P zKka%j;dy7O(w$wf;MM)L1yYrANBkY2D=9`de+bov|9{A-*-+MKzi2qL)i7woj2-O&&Ji!s|-wrZ3~k z`xJwLi}>x<2Hl7-(|P25`U9Rlu-Ksg!|<|k>SGiQxUN7<0_0U0GDLGt(otB{HpS6l zK~+M{bv*2wYyJTBm8>{k_g-@I*?i4IE=M3fh}@vK4rnf&bXEseKC(F37*^)KTI3dw z(wQDTZyI8+F8pgba$iEp)T0lXm>qZH`tt+Zp%85=#RxCPX?o1ioq&< zw?iPEf;wS-AGDY+R-XI(rT_;mFV?=)j$gLrRNjZPE>aw3`WO6H0M>;N+XuF#?XxV6 zD5~+8<*~tMW(ZO`M>){Z2vq3nln#Xr zWS^p`{Jrs)mm1bEc-3{@jBf37ZXA*;{sc^V@RDUu9c)-?9$F|4!ICcc6mPl5-9h{?gW@hhl#~hXl=krR zWBiWdB3y2?mmu-UrSoz-%mH zN&EqaIx7ds9A$D#;e++CLzk%tlLx>96lzRxvfbaPxA3Ky-bx-o zZBX4b`Q5>_Gw7ioC)%>aVSFE`ahqF>?*iurJ>v5uWXA zMdY+UYDjDy%!d-c#_DvRA?34yD#L@a23m_48YXFfB}EXmD3Y@eCj67D?V9ZIBs+>R zLIn2_7QAJ+h4p52XAVPzdcC05XL8%evG)6*7`(+%idc9Ey>t81ZZc81#a&`}o$%LE zA*Lw;#kLO~oaraOCETl99jazro_ET;Ygcvx3H)Havaz1_sE^#1(-c)KZ1_{I8{ zafPRU|M9cb68j?VJ*vUEPUI1?VTBxj*?Del=1D>Es_fYo(%tcbL65_-6w0AVZ?|)2 ze#G4+%W9Vd=(vbRbT+tYbs@VL`L~9>!ZH5MpuhXiT4UkiBQMMIUX8DgCE!->E!YJr z{#8Nba$j)YqaT(BkQe6!h1MbUPei85;=Ey~r|zmGD8IGxbAva?X?Fc#oH|oKT{=EuVbV*hcM<6h03}g5_rD3T*$TTx51~ zE!_f=h_}IOW&TiWOkuyyPRS#joRgq)p*Q66vo@oH&)2y#A7_ZDwMWG_a|RVIOA4az ze*;Dbh4T``q+r{Vu`gB>7%sZ#T`sAfY{<4*OkY<0*{w|imiQF(|TR_?}~AE z(8dSNhW9uTyA~eqKNubfV>;u0J#9<8O=**SnnQp_@N@bZE1r%ety3 zn&=a0;K3L>l0BkSKvVIee?wD@O>gRRCE=-}Nnd7dGJ=h%mEZ-7*FBu5&C|mx?%15i zY*!U2HYkxQG6o8EL6C7$l542O$j_oSHR@|AG7|gs^nxLms{VO|vPv~;6P!9`-`%Y* z5%!-NDUTg3;q+cakliHVPePhMM73&QzDfR;`Q4(VLMEhUt%e`>I*w(#E`C&#K8mjW z*}Wo2_>iUGZ1!VIT)L3f^JO*-P{i!38S4L zm_U3i%O8$g?ANE6$rs8l8sL$)ubcEh4KA35RlvX07wDcNM`#$kJ}>lvO$Pb14YSSc~yp{|OCvq2H)qk1~i!omC5j-SL-nlI)AAOh>2if$L(g5~#Lk0xF5qNBPLLtQK$mCTZ>Vqy87CjLt;ErKvzkp62!8qHJFx#A z9E*KzYw%@WG?q1WHUCy1#li?w=;Hc>-`o+V?fUcWKG)1ve)20+A7Dm@nQcZg1Yc{F zR8L;ECHjrtcNL#xc3|SD@UiyLAWJ5`TV^^iITb|3Ee%J8yzxG;+$vr~cn@Nc@&(Rk z9eP*K?=df9PAqDpg7m7kW)|8ntv)X-c6n^ePZCL5CH`?o*twR8c{Zdp55;ozZ4Z5LEW=ngi{fu{Z8TtawY>f-tMB9hIB)30Ku9 z_;NGxTKe~Iz0FrQmtCead#cl0f~Nav@K5K*XYFPdLPusWiNjcNu|2=9d(cLGuP5U( zlBj_>GXtC_`oevaCv&Qd60-r_e_kv^fMNGVz7Pg{onh(Ovqfm?O=I$&93@~(SHBlk z_=W^9Q$=yY!8t?7PGpqFpXL)AQWx6=sghTxCPj|SkuH8e5we7B`MX?cbI$Z555dU- zNl{^G&P8B5vBKP#8>i~0HRV#0woduX)BbV#cwgRNAejaO=jzN16;oD};Bd^h@j;`8 zs8A3{8yHh;ic>-r%7@^P^8 z)?Kc}qnGsAw!37l)&13Br=-6ZNi{A};|q&lcbjADv=ci{dLQK>Pxo$AdBuBupH5(H zX)+vnw+^&&MEdG7wBAPM8p}*~p$Gbc^+VZTDB_Us`(>!{Vg4I#v{)faq5>=he!k{q z$@;_!#DB;4(Zd_~t1^F>=9W4&tL7fHc0!rThGa=jn`Ti!TULz_tB%RIyW0zfZS&H| z2(Ys&@oNyc;OwMy<%`#oM#|==C540T#PzcIc52IN=A(Bduh<{XyZ-2QdDi6d6D&ZZ z4<2=@nRRYkQ`?axtd4Gf!xRI3B#) zuDbO(qiRi<%r_pydTgcwQ8{7Gt}C1eP{Dc;oVF;l4!Rr0*^PeC<4g(JRRzCHoGWfz zDXAVWMt1sqU;BWAL7XNc+t~gRMQSnM>h3xtpn0{c1U1=^W%#{c*P6QooEd>>hv5;4 zeY&)h{2$WnqKVx%XTHgc_l8zCq8Yx=qIKEDw%FpjM0uLB(_EhLbSm)q^+25O5N2A> z3fW;_S+tBP%}G%u_fBR9_ts z{JJuTyx5|OLp>w=hZZ64eiis{%S%6SmMmGVmIFeh`HEi&+UUsQyr;B zF~u-&IrA&0axt0#2xSX{LO*wf(cX3WC;vF-wLZ#}QTdiyrVEi%&(H4EV!*BS+``_k zVi;XypYPY3`LUyB=Blr1v15dz6l6bPA3ET`N?78!|7(if?Lr|jC*b#VPiz-xPr}q3 zA{5&I^VfqZ;U*5+UvhEJAgw#O*$d}Ouovi_iU?j6AdYwfkVy3Lf3uq$EFYhxY=^zQ z7qo?erWpigm-SS>LC?%41Mnj=nn1R6eG8o zBvq+fHP&f){;@v#MokBhcLP9mtBoHcym)MLKHpWPj^I>HVW=_UcOzf(XSsOl`Ux1e zQ{ju5_m`jd1J4_eN8dv&3+?DvIOtW)!SP5HX0J?;MQoecr<@SmagMNxd}Y=~mX%t+ z=w1wHM04up7I=c7?_cc_UuVk<4WX{zMo8Jwo$jKW$TOKG9}qp!4Y z9YP%+ckrUL&$;bt4rd!ssKEt0Sir+OmFf1BpgRtKbl~ zLTt1NmRG&-9Iu1>Zv^{edtTLX$b8k*an3T^x^qHg-QcW4@ezoOGU82rz_gcwfxejr z^{h{Oj*T3Sr}Dz^M4{MYu6UcduMLvvl2>J0%!I!jjiFz_E0wv){o$okZ0OMFJ$1nl^qoszS^3U_xmbD&)!=-yCAmu!!5OS zzfSLblfX0ZVx%~V2Kq>UbG+r>uZL;^zp!V!(kZ=v{f=;!-{;&-JX!ACGt6Wr6q3_Z zM;gNu(iG&kDvvjMvZJ2Wc5*lD^)G##Yzw$Tt{t0tyZOh+00z!KfL?n|=gL@Le8fxx zLZTRLeH;hYL22^X3qr$M1oUe@BcTNrM#9F(5Wp93-Gg~1;jPQQ*|p-I@jFFwa8k_$ zK1XxnRoPN3{2cURyg?dbjJF33aOMr4qGfdTj{g#zZMPqoejqR1!-s@tWxsAZE+CfO z#v=|hBlc)!JA=n%VRNI}@N^*1cX@F9`K|cuBxc`s+sKu+vZoUfai9K~d-)S){HJLe z50ioypALNcNSwI^cYDLyZ9~k3X!L6qvR^OY9?gLsPO*8g=o!GF`qrzjK=I@vILE=+ zlJ)BQIro10%SI)t&jTAHuU#(C=qL6QsdI@7yeQn1>p4T-Y>02xZ3=Pw7Cc=4(qVl9 zjj&eS-v`%iyEt?H>2xr0!H%v~U3`@Fh;|QEoAjUdAc;1#E64znw+L%C?<} zYhEet3SJ|R>rMH9UOXZyQ{mq0TD_Uzcmh6i&4IuEjxlk)$!~NelMG|IXM}o=u8!3^ z<=B=oC3njvAJ5Q|LbyHtKZ%qM2qTeluRvz^GqJ30aD7DcBh2K<0#E9$=7gS7MJ@-C z>+m{O>P_989mevknu}tf%djy0Yg!9UV(^jlwVBH|D{`I3DhyKfv1S+9LqiNbgXUJz zmt=W*p0a0_9P)CAl8bUr8Z!vWkGhmxYWq%iDP)y*@OP?Cm%sF1TaMc?HbV*yWfb>c z%Th2zBZltN3rV*mtjb1G*!YP;6~udi&Nk+PT1hJNFZAhd8Q!${BpvnzEw%r~`=W}r zaFFNlA#=RR>5UW@-ppQcnOZ+fkIkmF#qXyR>)*ugKjxx4{u(Bs)A{TQk*mz$jhm~& z`4qnVEfpD}YiZlmjox3Z6Rh^Fnr4Nn3D--q5~LLt5%Td1uvt-!gZW>)pVK5FG_^LC zq%5C`kgiytoP)wM$dwEGdb2Y=42@%yUc3NaSq8L0RfjXh{m-{v@!$Sq$)wKgD|3im zf4@D_o6#>3^)&>VvKwswOD(;h8vL<0G&?7uHh`h`TO?&n+oCLiRV!hu-PJZtZ+J{* zSf<6lVOFbJ7M*>eEyVTEE{L6ewF}dZoXCiS>VAG(O?|h>Q#owc{@F7tV;1ea3J2^q zEg(PQvD4`J0R`0I?TUO7!*uCKF1F+uRDX1gd903GKa9x|v@xi7S}dZsTFYj`XB`qC zBvkE%1yp;IRq-~4f)9v+%OlleX2GD8xI&oK{r(d2{xb8Epqq{nP?vpYEZ2;1?5u)? z8mje!VA9LMjij5K{%}KhsXYC&pF?L$ZsMogv9pl&cfY_BN&UKDQ$pi2olU`jPLj9% zw@g-V6n#HSKiH3;>4NZ6d);8qe@hROf&NX@cC0hmh$DUx_w4SCfSw(fs|Zz-FU8|PCks)L6miM)(bz{?MsN6ovTXp zhQ?}_)$mk3xsRuJoK{~AKN=!X0Sl}%ulI#t-sC^fue{p8CxdY!hlV1{3%9G73FMvh zaYszpazZ4>S>ruIPx$|0>OB0ZjQ{>GlCrm~q>vC9*_=v+WG9>Ktc2`w6=jd?WL1ViSS-xTsAy-X_nJ)4m;ix!fgI zGx238{Tbb@el3*JxA!l?ZQ1di26j#aO)v5s$4bi80}j!@uOBa$3hZx3-|Q9cSVUDb z>oSK1*L26QSqmi^;V~Hd%MsAKnmmf6pRx1k#Dv-XpKn2?)VByBdQS<$A~E z&i;i_{ITRu;YfZVoHnz%@k5vVuJHGq!1EU*ef>2%9Xv+i8xF3fwFHd?J_t~rGM;Ze zl{fgOF29REDgf;U@ssa`zGh(=oNcDkP`i$o=~+G7NLSjcw1wkzT^%=rBOrklnpzVw z^~tiAtn7e+g^Zy4$F2LHc87b1Q-&P}m)w^X5RKiZxoj68H=A)LPUcSK(T#*5sef(}l{xO(}2VaV0UMyDO^ zY&Nsr%dt^uU7-LoI>en<$GW8F-K$yW*B#DO`B0#VqkqK+tiA_UtFJ2^ANSPmEkr}uGvA~@_ zDVra4qWf4*9QO*gUMaSa(NZZkO(lYdHSbQc1&BYr4%0?G?f6vs*TmOY@Kh15XDa?( z&!R*5hm9RRKu@sa%+V&ARCJ5;jq1Lv_@fZ$ri}(+|JjTA7Alr|VHiA$)Dd(yd~PN3FcVvB1F|O;4+8j2W07! zfJG^#F|O+#Lsj1npkq0}_P@{^fT_A6q zX=Xuf_87`7S3a8!zyNV!2|2CLH-QxwU!7vQ%?E;c@XKvtI=vOq!H@EL%OMUW&a;5FzwKv6`T?n@hJ$T}1*kp`B#muP?vGF2 zq>+4Ftc%jh*{*!VFl2_8x-)*~dy#6WaR~zYQrG@bkLNRQ9NL}#}Yyct%nDDtNN!g6=-Z0fklD* zbzt2bI9x!ao82AA+hg08O_((apLO_=0ayhK*h$v@5xJ85^O292!2LyM5!6sKVN3tJ zSCsn;AA{3FrMC*)@tA~!m1yosAKNo+4%P9!j|e)jbnEsMUsk|pm<$Y`pq9*jPdKC; zpt~MQFMaIj({zpnemzXS{pV$sf|pG8GC8-@l32=5QNISk<>eK@3P)J z!U%Q$ehY-k2|l~i*0~2N+NJrDA8hq%;>YrT1aEx=Lw+2{27_rxO(I$1d;kd-63iwb zSY6|hpvt1H1!7Q%Fcue3&s6uacDBNhPGjv)6SmMqvkkw%m@@408Pt0ezJ*|yEd1cC zGM6%zxte52QeK&fJVcM6QXR+Ok;Y<0L21o7K0$xoi{`x?4@YZoBhlujpNx=X;E zWL+6s)go-1pkbqXUeROzu%<-dVYQTEVJg!;bV(CAjM&1Lst z)d6$NQNngK05;{*#;#lI*cN3~`mQsrJGdfM7L8!w`1Viqw*e0w+~1b)$1ZQ(^|SG` zKs=KcmYU9jX66CiqJ)TI=P=XEsa#L0{ywj;!|LB(zjdHh5Cc(P_tznCK^enU4&HoY zUqjL}fC9GV6b$uBS8YO5DJ$E^Nj?UQgysuUt3ElN{q#-_j0q6~&i%}$+87UVl@tMu z2eW`1zq*fNYk!HSK`krWtv)bJe|N|cAx#t*`sB8VRH6BUmws8mC7R3W-@bIFT!iC9 z556O#SLesqOAeV49_c5Kjk)kxq;DsI2t1_1%Ax|Wc~huaFm!Z|&Ck1$Q1#UH7xXFL z3u9cgdD#~LPbcZN%_Hc`tBOQD)yErUBcMGy@3n9fauJ&GLw=l((c1ma9qWVID&8Ek z*jX=OK=eH12_M0w9OlYu>`s5FjnArQ z*%Sra??3t--0NdkAsh6?F9E;JNkveHh5Oy%F~1{0f^F22)RO$XxqrmFq*3P-F@qJ> zg)BMNj(fbJeL{^tSLHXZP&oW?%xnm}Lcnx>C3NqD(94+lb)0iVtQEdBz4;wfvLt2&tLP@jTgVE{SjX5LIPe_^N9q(QD zelAT?fk$ayu38P+kN;V(N<;R1@)W9YU&_gdz%hVMHqZLv6Eyx-T4@o7Nb!&Du*Iw< zkkC@>dV`Du%f$&@sPkK@oq56$1Z5L`$1P}Lxe_WVV7tL@A8tB?t$N=yly2&@GbN!M znT`kIK@lm7-@!p_0}$kso3fuX&jccOZl}GaA^5#weyY^nEaszW=P?KVUA64AbPs_3 zJmId~CP7lmG&o7Qo+E(7s0US4*nhrc`Q;B{7jDji{iQSWOb(mUsk1ZlWP;bv0-O)> zAdW&!)Y?&X)OCv1bG$r3z-7Jrhq3hw1Nqnw48P8&80+#3hqNeTpEXst#{n+x7o!SK zngy;jjDW{i_9DC}jPO#0Vuo0#?Yerd%wfNvYq{jEeCjoWTcPC;F+D-|tww*3_9(I7 zKz5u8?en3cT(W1I0!3|*Y1Cb-HxfQ18&t68o(EIGgms7ywhT(Z?MW-8vibGA=)qM>t6ZA9ahF!TbYD$`1-$PeQgjKMb zhD`6Ro^(I>fctv1`J;o9Dgx5=Q4_USsWvdX{}oMH`-=IVzw~9VSreJ?`#Nhe;M1$D z?7Ey$R;nc`-!}Aw(8FtgsR+R$1s`hurkxVi&;3cm$tJQ{8F%3g&NIc#h`XsYl?S~H zceW{5sObsTl1Y_+8zc5^61PiA!vnw13Wq+@qr>}sPFqX&NLRm#Y{WEmy?TJu85a2^ zAO8!1-VHo3<)1Z2M5xmp5AbI^$IQ7mA2eRl4G0Tf$Cr>ObmX0_dvN|6k0 zod(W5|p!} z-roCR^iVb?(1QCP*3+L5M6H)fZeXurJ0>RluSRcCO+qDJV*cZeuz8gz#ON;rnX;|D(eG`Z@eg&q2VoHZr^ohJ{?G!60TP%?E(p|K_{XNQb4PBG ztIhU(mgf4;D&8FfPY^;^)1Z?6ph!;HMQj$Hh)?%wd27KxjY4(Pe?x z*HtPYZZD#jf0*jfB2??C)2%-t-Cb)-tpFYSjHl0Z=Z0>5%(fW?;}EKWUOl3E6x_ zdDb?y1w5Vpz&f+qBp)lv7Z1O4vUfGgZ}UD`3=v181}80oGhN$JM{ zCDboaDuF($|NmpD1!rv#Y=z%TX(}Ym^3&)H$N;>)-Tm#rldYKkfCh`2kh3+udX;Xp z3+Q2&AT9!WLo9@HPEl?*3!u>9vv?E`MKCCeyN9#zu;!cy7}gANe)b$bob54u*1O3< zukbdi?)%aOtc$rt%hKN^mWp`Nc82oGqh92d? z3hXG+7bv3}*um)#ezr2x_Q&NtF%{%2^78>ntj5II^_kZzWtmT~M0A=uR)z8&rnMDp zLyjHWA--(dy)~cScqF{BNIu5{q*lP?1C;7*wXc%Bec<4s#LT{N#>1r+%pRnUkGJ2G zwZ#Bl)NTMP{>dH1WFW$UIKyvVvY{N)BK?#|v`R2<@0J;JRY(1&MrrUlrpD9r7g{Nj zXogX%iv9py04Be{H{1@s$p|He5%-yru61UuY<(qu9(ux6@Y8Zjc~e;%6sDV6KRfU} z&#o}gs158f`KM<9M zuJAgzNNZ|oO!hHXKH&sKK0hKC%(q*t&n#>3xj$bh>6is&jETxCwMbi+d|j#a$J~rL z0KCEH^nkeQNq&~FRe%Vbn~+%fYYrmST0pO)?c^TC$&a24#JvNi9bPO~B%USJj>e{h zgbK!9{aq6v+c#DTe}g7;+*JIBX?5o~2ZVz2-q3SZyU_y%vWJQD&1$FM<#G`jU{fhwVi_q#BH25Nqy4iUJq~3cPE$n!g zhWF(Wuv`Is;tro~DfFJuz464@@m(ovtf<@pC0AoFY55nPLPAbgTO>PP3m<{+8b6YL z{b0;=_|v{{tN!?|ci#6@XB(fkXg{mYlnyn|y4bJbsV=A8-o92gV<4{jamq?Bt( z6uP5T#VHx!^bB35QJd^}SR$Z%vX{m=_LTR|i*s8f$LLj8cDNBJ{o$l!IYtYi70opq zWkHVnTte-_p^e(rU zJ@70ae8>QDjS3FtuKpws^kv0eMGs!FZyW;&+k)AlepYQ&A&8jDuQ}BqBu3%^=a)R`&9mGM^e+q zGk_sLV!$Z8>kuw6Nb%2qI1ja_=2z*wAHVm>Le07e(wEosUv>&m{L+)1)*CloJ=Qen zcUSIP@9wT5xE^x#T0qM_`Yi}TC&k&Ws%Z$aOxQ=>ke`RV=VyK1Ju2JiIuD2%g7Z5h z6n5W0{}eYU*vQwDC+S{DDo8kVIzoQ(#$#gUE#3P4Hj&W>tAIIlvA|& zqRL6!Yw}h{R9uy=9~y?*>n^&fTZv_FA~mbDhrK=+a8&mAU6y(_XKfISvT3o)fi&^f7zO z^Tjc^xIgW&$FH(xiH9QvyIGJze4V@icZoDgs`&OGo7->qH17+T11x9y_ECJR9X zKQ`ha-wD0axWvb%xsycInu@!wo;f7U6M}k8U}ogZ+cpC`YPW!u|Ju6 z5iid(Y#qTa6YF>lTk`FKn9|)&ROcEF{o61;ln+eOHg6uvS6}ev0{7K=K!9SVgT&_< z5t5Xxm}`c{bUg4TjIxbVEC$?-mPLiEj#W$)zvG6;ZJfZ?r{;JWYC47tcimq`<4|Yh zcGhTkIFm{hA_f#k_p$PrjXP0G7$r)WoqDEK+~mF|_eR%x`P7F)UwXVxO z1)^^4Zz)+Gx;UTk15?>hrgxccG-&8rTQTKjnHzc!TxUn4qk63vOup~ZsjsRkao$!o zd18VV2w#!-(?o2fHt*hC&hqLJKkwKSqfZx+59zxEYM#g0R@-zz>P*r;f77B4w7O;l zp6d^=$k62e4ptmrpGoa|#b&#k8}G47*>-GbJ}&*x^s>k3{cGE`3*SZED2?IXnu4KU zKVp>T&9{m=?0bjLa+A4;ffpBEiq7;7Blq3rFXXy{7hUeXm7)xp;{>-p@>8#0$P;0V zx#%k+&hn7eNC@*VxxJ90vp?eot+qzqwRbOnCcc#|M6y)KWwKuR& zxyz;PLzv}5ZrF=8sMvF^a@h3=(Kc$-`cb6S+5fzJt3i-B_%6M6_@%;m48Ho!(<>I@ zlVYX*6EbQOwvt%P5ASuX0wIO%$7_f8Ahjz4j}jF|TvofSFQWyvE~j?XxwhwLC8pv~ zpPbdRw@7j(4RvyaCUF-yq)QCb2i4YQJSly1Y*{xWT-fm#_iN%ooYv4qKDM zBA30rJpdFjhB2eh+3h45lJ}h)hIn8aHG4wIsCeCnAsT!M2aliH-zCQ<;E*8UW1*W7kx!2Y z_lR0lNheJddVQ>jtA`hPrB;XM&0l_LiTj&_Mm{#dItWO>7!}uqBpI2&RCR?>b@!pRqmOE>E zreX}}yuLra#*+BaA&&ue|C(%e+jq3~oAtNcf3A_J)8F#NIP}H%MFaK9O<6vzuLw$r z&&bj(O;YEqSY{;|GusP9Vbh>gm(^Kt^%Pdj~gXe07n)+;otGE1NZyh@#L z`j=pQmIykVrcEwzzp7$yR9J?nmq|b^pR?AyTu1Z5vzmyTy?ZA0Lr#i~uL>g#@y)O* z)?BoEBbQGVCi8@2;U+j5`ah|iNI}4{8bprzM*?X`rK0A6uF+o&$;@&bu<|=N5(eT5 zvvRUCpqxx=pFV7uL)|9;cLo6z!NY&w7<%{LtG_>(GYR+%I>I;zZ8p5pN}<;}Rpf=u zSFe(&HMD~xar`5>c7VZ^ta_$?y4|^#EN}jgju4y@P>s)e7=8(rqQ8=LYrF5SI|0N0y-pJ!@s3 z^j0%2tY0m7uIC|#6@jN2UTKR87%0FKe3w&lJJv6n?%#1GGCp$=`E@-*y+v!iI(AWv z+Q(|%ZVF6}y|>NgChL5)a3k+)-;*aQAKobNBY)|KNlNNMMjI+iyBNa1dw*_nBI7|V zr9%3K9I0c1DC{zs9JOxQwAVNrj6N1bzxl6sHsFjM3PbPd17S3p3*2xsncJPF@_z>s zf`^6$i|Jq%YQan{f+qUI8K0;UEUaa0f|l@+iX1%Bgc0o}5*prZ`9Cqn$U>;E_~!se z+t6!9TfQ8H;SXW~70c@0cwD5uXKB{T9?c@@)d}YmZ0iB~;>4ZzPv8`e!#$Ymrh8Nu z$3aq3$c+QE$17$x4rDVnHvN_juy1jI$uKY`oKo>EOMg;g6%k03GG9H0rg!y@!3*J} z>O9Q~zZi#IHdF+;noF@yt*Wo1`rgwm4rn4sNWSVMyj)GahtGyB<$7*5$Z>8?FI5TYsPjAJvbyl!Xwpb zU{`HsA4u0N1NZUd09xk$hWw(#aYL@uoqL;55O95+RF5(P+p^@6&*^?CuH#<5|L(BLQ}_3!u`P*$JwfA6rl z(|rbg-IaOsJL|jF@N+rEJ`Gui_3g55F%_3F$sF>I?Q_tVP02K)9xr5Uf<;CWv++t_ zcJ=~b1ZBfj1KZibhy&0n>kpAVY1cyjhzyd5?yVBxI7M(%jQ|y%-Z{FDW{0EAc+Rb< zz$|`O86CEwfv!C6cXB6LsjjjMfh%E?pjqrQ0M@TJei3z5+a43hoghr zPjI`xuIMKT-3#IINE_KmH}iY6GnIlxo0h5P&a8K@g zhvGh3VIC6JadshyyySl-(h}FWKhXM5#7D^q4Ny_%BRa<$CJ=P8umF1x+Ge}*H7oSPRj`|DTBVcJ_^D*gInGvJsm#i5S7RPSzAv?Q7=A|}iT z`QLUyC5vbd+ptA4LZn;1K?;k@#~GUU9bh7M0WIO-^wz(}a`GTyW9+OfZKGtXku#tl zEPvv{fSO)Wt?VV+&L~i?bY0Lp&@58Z0V{F$h#XK9UmJ}9!d3pIy+`1Dbo#(SI_8PJ z!%N9(xA1s=c{a?Q+;lA6C=y+yd2fKLyOmqcC3-mm&WxIBPzz3@zK+1#ULpIpYJJ zDX-h~39;80v}lD-Jnyf9@67AF!5A>farGF*t2Rn3vp8<3#SIi2!xHay#K_cBOK~O>pwlWm?FU%l1h78hU@fSl8tMYpk~c^u9^If!kMpem-IVE zPeER$TadhP^z-X#+-4UW-{n@UOgz-8y-h5*>U+=R z=xG|m1>Xlu6v>1vxVr@sK1U9O@vFzjW6d7smKPJau;}OO7I)}$418{9lZf`u7|Cys zFfC*MHN2-|=k_p)Jgxfl`JXES!0DAvBI);%*Y5Qc%w7=oiYEO-m5$3A5VB(^P5F|@ zJ46nfSDEp>_6C|cx{{P~q_OecFdX~O=JK5VS=M$_UA506%U}ARq}{&^-9A11IleMP z0d!4TR8NAvC&K~lzniet&h{C)RXTOocM-_8^j?n8Of=Qv$js_IMHv^_$LBArrgyid zpBGHrD)-D*UiA?zE`(HmbGD@ai&$q|$eqsn{jng$Ysi1tEk?PrK8H_KlgQLXW`6Ir zaAz_vjZ3$xEOz)Zr|b}KV<(yHBKfC{I~;eWZwm8VTRs*x>-kC2=J%G%!dlcO)LB~n zZb|vNW#kq9EY3l@1@B~c%5EN4ckV@Yhd15WQUs&iO_3D{S+wC=0daquQ%-u#&%P z{56duqF`fV_lUa;;pXGrn@OL0AK%$nm(`lT5Fd33mhx}^@M7WdtZ=~FMVF<5Z&T7y z+!b=3cz1ZQbFp)AJ|6dfM~`D zO7jJSbN|mpu5d^uXCC5}X0F;1BY$Q8GWMl)f9~qVF@Aj3lzQ58X&q1Vx?=PC2_CvF zy1RcG!%gnk&ZF~GvAaISpNC1`3FFcAnY813iSi`+uHknXRDRvVIfvC*Fa}aVmT#`J zK^DQ`F;`}jb58XiO{Wk_@KTK3A!PEHhb~(N=Z^+M>-2LulRupM5E18}AgBNH*TC=E z8BcN@+CuB@V8)_F6tzj2&!@{b4DsmHYh8CdTyta1E?I7<&KsegWip6fT8&e=9ew4s zp{b-nykyBI11+ys^jOJdrif7ejYXj^?|Uzi9vank{zCBR(5E7%2iIe&zW(iJApMUZ zj}Z=-L#22Vmvd39a5-OzfZ{#xwv&R?Z1(T%&TcKPAFlA9wH^2Jk5Jyt5FtI0AQgwn z^Y{7nv{{sF9es3uXbNl2XANZ0iGOZ>91PkZjc_TO2o6PTY=be?Q!lBbHp4k|?>$26 z1(?F?5tqgy5*Ru78;+#!x3F*O_E2>L0ZDG@9HjT!9jjK1c123hgNDTE9< zM}MVoyk1?$T_Kq^`R3iO%n)dR7WrRsm8Qm5Q-S(0Ka=bTFJ3k3)P@EQ)?@I!>Z_IP0N?+}^r)fcyRQ!oPTfr9LnkvR z%<-LNEG%yy*c`Yab_RBwNb;~u#-!uhwo9Z*H!i5$rHl2J`7V%AGe*_XOtS2>rhot9 zxw}zL84~6E!b0vwpY|>}FI%}X&|CQ3dcw~5^(3L|VPF)uCGKa+R%=d)MFR1(iDUca zy#*tNR@poX?C(n*xF8@g(`Iv|nSvjyx!@sTBh>n$soVP6dgsgPAE5R~aY(`ZUIE|J z>(0^zXKxf_pgAt4l2j@JGH}PucCbwgzzn?>2APPc7qx*rx4|GNaW~n(-Bpuqd#S(g z!X0=uo({Nakfi9GFY4bnnHfr5lYKA9zpYEUQb*@6CP4q#5`Tl)LPfo`1~AKr8d;G;@;rqUV{oE}^Vh5Z>LN z$Uv^!>&>iu=c2A8fDGY$Jjy$}g!9xfQUy?5HyWIdHQlT`p(VK2#eU1Xji>+~&Dhvu zH3_|T88m&58V+ij1_|GpFu7jU!wfYq`TB&LSljtGvv*My9~C=nbUm)(3sWW@1m0vQ ztC*yXzGM=G?5E1KRv}$j>Y=%w9(egOf_cYzCt7rmm98o zTdfwDck|h7gQ(*&s30pc@)5*5<@#`4%&r8EK2wUJPiu1$4&c}Woo=6=rQ7?*UZ)uY z!g~}RWV1#&nW)+C5bSDc_E z38&}4MH2Bi_LGdZA1mi2*4Y2%GTckr{EzmRia=$g&Jkp01z`4|X$EFQqE zHb1-iARBfGf*e~lYh__IHr)&PdZyDQKxeG<%?(0HfY3M}Oz}{_E10L@+1;YjNOhO! zD*ap8aTLm;60_GGoNjlqq1+ya zGrpP#*aP=OVCnx6Rg5&{9X{iNx3YqN+uL3m=_}p?$U0*bXvt{vCJdTtI2eJV+*Ecz(J~mi;!;fKRBz)OWN#^=9qn9 zq5*hKfg64eI-0t?fBQ6eK`63vd%*vqcbzxs{#2RX0V;L#PmunZ5@yWr@wMtYo3#gW z-S2LFFR1(^lk)w2y0XCIG1ZlYvn7MVtyW$4{9R=kYwGRQRUxd+RIgvC&^|buVY+xo4$9;|38nPqzl#Hc@M+U8gOivW$Iyn)0++W4 z@OlBq_7cn^&2L>l+9<62<}Uc)xJJ`B<uS%DY zg>}j5K+fg_>e9T`5vUv)=ZLH_coz-{ZeKnxRS2gf)>R#?LT){@Xd*_~%dmy5#RXwb zWH7_4Z9t|tH}d?@>rMu^q++`Kr=z__Do6;s8t@vXp*cziZyyB;OD?hWT4%X|lEQ59 z!uDtuxq|HaIxtq%ZTVyUmx1fcaMwVX2660K?2)W-AqS4BINkCH4wP$fg7_RjUJ)VZ9>F~udjqbH}raiMyitkZNjry zJ7l^QayUO6MG8{(RZ^`ku;8U!g}!bx)?v+0<*g#)v*l23S=m86+INM`IIPs?dCS!a zk(Z1u58Hqi!OnVRLGu}z4`miWwmNGe=1IU$kYKg=djfJ5d({kN9hDV;RWQIs0rr%` zRcO$=y(Qoh+_{fB$PBInC>))m<%d(i%N^C~h3r53^Q-bv4_L4KiZE;N;)*e$e}Um# zPjb7T>BmZE^oTfumOKaX%0#i6_!46?Pft$pF(ArZ)aVW zWH~1iOG;nGZ@t*c^{1LCoj*B&-U$Q&15M%NLPL{Fg%_UYWq179BL$Z+VDN93XGbI5 zJ*7oR+vH;O3U8m zk?X3JtPFe^6LD)3zW{ZH+!4jCo8Mw$KmHp6IT4I*93?wW1gIK?kE#2~&}FCf&<&%V zm3V-NIJyJEp{b5PnG2?eg;NrSI(okASSo_vng@8UX)CV8r232BUIED?uh#K_qr<M!gXO*(kyDeh?FNi>@=J?sBYh+fK5Ldx%4Wn^7=bjd8LfYR`rpU z;LT|gn==0{{X*GfGW3W}992>|Sk)!*-7k4?+*361{===3aPA@;^oi;cdAIgoQk=_o zJz|{o%mTQwd(%3r0jR~sqKn?KOhDVQWKZA8y1vca zQm5o_M3E#x^NxLJ+2iH937Ud7={_b|;CNSbW#MLQ8?`hFB>b@^dq~uDDdTWK!c56) zCs}4{lHzmgM5Bdeh6_{RV`Y`xmcD#?ay8+|U(GGeMXo7&a(Yjz$~89o7|*2)b^G~j zMol+ZThM;!{Oxbaf5aBm*~>WM`%meB!j-Kxf@{CQ?`Gznp1$yNpAGySM2aB#-kVnK zJO?Y5`%B~nH%d;7wQv5yXqxC)j{>WIfoBvq&D;0B&4#3*wOwrw&R?);&CkZ}DYoqf zee1REVA!ZOWyPUsgJ)HKR0UE+cKl4g4YB4NF@fbDqv`2*ZDmz=O<~o!YkKRdWoDc4 zOIn9YLvxW<^5OUYJu)z=c$@FW^2p)|rTd)u_;gY_dq|#P@5NYmgT#0O)2n`WX}Rp; z2i^1X0?*#KWePUm$z}DwNiCbg?fa@!FP&I=(}DKp!-uv*3W?Xf?mI6at1I7ovSbCv zd5Xw47EJMpMdUH_IR!9N)wx>SJarYTQqzC>x%I$_e0l)G{YP;mUn0%+5p7Jl&&m2CXAKwP(<-}P}X5Q;f`%&qsei1-tRG>qFk}^W8V{Pmy14cpVjuQq{$?V z^2a4U-t4?Ee6_GwGrF(bsklhH)sn4c;e{*DMYz+QfbyjydcGL;3Ksi*QIXe(|MR?T zH8+Rq2cvd+4~M10brgTOGexIr=4Q_W!>8Y~9#_8S zy`%lDL~NW=XArylcDIdbWJREyKJCe6UJ+TC;<|8JHIGPcDSd6dpn?|pZ`Fa%^eF9` zJ+!U@wS$TaGsBRVcPJFpT6Q&V)NscuS{jQix`La}h#y-sadbB051rwb%L~SFgpxp6 z{oLnMudS6B=?ZiPbXv{<*=QpXcHm~DaY7FNz(c=OB>1?*qA(>36yszTMuYj%zjRu!)lJ7XEYw(+YB0);zi?DybGcSF``Aq@p z?4e`s&`B(sk8djcBGGx^CfXy4h2|jLB>kv+yw+Q)&B@NQa+&L6yec%4W?So|werm} z0U1?!2=|S6{?YRdqd2;jt#5bOCrR#RNY`pU%B1b(5VGsJEXhc>`XgQW!H>2ESDhz3 zkc?00eczaz{BJ$s;5DyJc1;_q0V&y>C0pk!R-XU$z1oCSW1v3hlVw0#nF)%~lV{;p zgTX3vi7gE9?1Y0?L>ZuenA)SZ5FYEV`L5zwPDz$hMacxx+5jsh`OO=iV$*aUhFDU8 zB5gwGjKGrTHMJK%9u!~vj71Kjl!S6B!v5!-R-wQzu`s=GX|Z<5T5##BBNq}teUHYs z@A>bfOYoP`R90fy!0&n|lKKah&)&jDKb{C)V9n7`M7<* zrEQRBgsm8nv)T4fCtqwu%QK@q0ZuCoi4~%G@T*J{W_c%3Z~Wa(_(UfMH3zYDyu(&d zyllI|5MQB}*UA99P!zkqb5paIJ49hcWcQeLwL-4(WX-XQhOd3J@{SdyWu&di7_U+z zJQy3Lrn%*a;#F(?miLyLmiWz2u4Nk$IAw;l*D>=M^>-iT_pXV_Vb9_wd*9YS*$F1l zM3@m~C%f5y)Wt~Euf$4+jkCG-Rvp-^LhYzO_TFyFoz)bqJmvXVj`2Tj;&v(zEcRmf zFvpb`MN^xJcN@dOD;Ho>tjMO-bf6q8p1TT%Vbks~X*4#CX|QZ9lfr@o7xyW=IUVid z#F-gxSLYnn-3;i^D+5d#gg%W^hediZ=aP(@H=(~{Zx~ghS|6fhODgxPq1B`RIO+cT z^{|o)ev1l4oh|Q9;JMb05$w9A&*!D2eLSm>85UeSobYJ|0bMh>Jy(OMS;+uPC`dxX zj`%Z|hQP4-5k+u_Tpg|uf=kXEdgZ=Jnth+>4{QUY3t+0c9X$8pJ)M^xiCUfDhH1Q` z6W<)a>bZb;CtM2KOfj89crZIIuI`jn}u4VpAE=Loq9cuYavJ~xT-#T&P)&50w-2}K3re~+QFTZG*7kk?r*Szx7v&~m-W@4s-NV`y9`UJebjTX-Pt zOLYz=RyT@J8UoGF`xz`mQm`F*z^n$%Un?)zeIIXbQZ0p9ZFpvru|8Ynzk3u|4F+jo z9|R5a-`e{C?d|HoRrAKPzY8GnX&Vp+E;y7i4`sYsV+!EffHr66payeLu5ty5E=Gdi z)fOed?&K2=X?exYg7T&pgjmJLQ=m0k)F9^`Q?H-RV6k3kRP^ngTa3Jhjf7ys$7o>J z3)~-mEL$IbzF6OzRU8#o^UKLxCs8`$0Co6skDxgPXt3|;yMCAyxECLRwS9E9JcH{; z`#_J_8W-`?q)gUr)P>OD8(Rf18G>hLHH#+72mOn8={C==UT3!%r%x-MFctPxz|t(a zCoRILr$Je~Rc2ft-Lx}(zdN;}_4ee4tXPM9Ic?`=#Y#aAVHR6TK({F_15(BrkkE;0 zN3C#tgLAJD&ptaV8SuKL>pgX^DzP~`gS^=rrYV~<)Ya*vP1Yn`k+`W2!MQRTILE0m zta-T!So&n&qWK4MUM+1?##ZJAjH^?6um5 z;}R-uxhQ*eSd;A40_4GX|J!kC}Dn=|fqfETVz(ngEE!;=vy=o=f)MM3Ta}{O3BSs)yR%9GHkSmZ1GRLiw}IEW=E=s^m# z{5&X#W~zRjLXSrh@v>f71d+4*FKQn2$E}x(u4bKIfGbj@6 zWIVeF+w94F#6oVDLn%$GFNL1ici6s%C_^saQWr)SyY6rgGQmDS;7tN%w|ZHqYUps_ z9y8JG&^b!@25ePWSHu7Zr>qP8b%8*rv}ZFaa}WAmM+WaN4uA!Wg^jVSOJO^|CLE?Y zdUKs@QRaC{P0Kyca@!3OpsMk;DGx!il9b*WxNk3e@hcv6IAq>E*b-M9^P9rUSjPYZ zY^75K2Bd48>fL>)^ag&GkW{%lu$O7>z6#gQl9+v#5Tt)&SqQ;?vbi1h2234H_(3q& z{&5zz>A*ZQ)a}(W`nA9_I{_C3lj~!7`L|zQE_f@7!)yZ26|k{)2|hiAHuhZPgcYTE zOuVMoyS)4_HLEuKEY8QQg7d)9f(CEyW=N2-a-FbG80Osg6;SN6!#^(4$9I1J7-|GJ z_{@%`C<&1t=9`C^57k1u0`3T3j~eI^K^a0OX-A#i~2tTp+}$#3LPFi0^yoQ;-a`AM+XGvDpq}t zP0k~Y@^ZVvowGCZrICe{9j-sqiG1mbN*@vxq`fn)C>2>gb`AV`?--H?yP>PV>Z(#F z{aqFprqR2tzRl=Jk?YkrW^Tqks`?Hubb-OxjsHj0dxul~{_*2PB%+M0I2BRZdplA_ z5kirX6_UL(UrF{jm6@4@kYsPi-XnWE_Q>AnaJ=r{dH+7w_c#7J*LD8A?{n_wD@*CMA*OWA4GCA7pbjPa~nsTr_|SrO_`RyJ_`dmP55(R<+Vb zMXWLiUigq23?(_Xko_XrO}Y4y2Y(=)B&H#H`LmjC2}`ylG6AS+2NRg%Q2p;*v|?n8;h|+fcoG5p zQ!gfPrfe@-4TdZ)SW8qZ1~eW=@O(tLJh*+~%PqFg4bqf}nxs@WFR{D$xdevC1#1!= z9vu87>-r~j6!+`43xiYAtssjBAGnbr>(^YZEZt<&HIDg<)OxeOWS6CJMQf8D>T_MZ z@m5pq?QjaK>P#!MZdV+m?csAOrE33w6w62D^sm{Tx_auqXWhTO<*_bPr|V$%`T94_ zS1sR_zkMyYwP_P}L|ea@vc6ePl4l%fo>KH$l+0Ol{;ho^!N4UKqfR8k)j4GOd$f-O z-WXq*IN(i7_W{%{Vu=$?II8F9*N}zdsV(gh}e!rEl zvV(YE8~w??Uc%QGH~sCHAKvS-e9)3geoli|yE(^3qM-FTi|(Py<7U&T=+gT&%wnu+*e}rX(k@kYCxy zLwfbndj;JJ8>(vUh*6+;!JkkZtMt*5Pq?k~MO6QnYE$KhL(CxEumwL#!y{p^|1MCu zZIGkF>4>MMX9AVAOPZ+AH`wtxby=Gg(&BU;z+qhFnB=rxs;Voit`3zg3I#=Rv zJqgNlD_Qmsg3F&@zc(t0f1W3tdsTJhr3I6v(Z(bHFG?2PE+W!d`l5R_kTpK1SzTM@_W+U0~t{thcN`K&fxtnC^U!hK5Mz09yY^vtgc zjlv0g>7M-brryOJzLm(hYIa;Y{k520Sme*eMt(v*p?W*N1C@Ko^L@08!6wV$fSo)Y zwTD_qGN;Kx+bS+ZlW7mRL^p7IXi$x$6>R z?@*3_Pc#&Zr=1ek>x?K1fcBr>7|+Ou3U_z3@Mn=PyFHQ)LRMn^J`}SLi|rw%lAgV1 z>>(A%UZu>UGM?`M%%dn@K3j5^FOS(rdQ|BdDIZfgeL9UdPfpp&P;-9nwC)*xL&l*~ zz>76|6x_Cdi)GB1Vu?s75c|>YTvXct^^WCCgnzo;9-Jj+0kcidumi zy|ht!%^e8U%#KYEGU(|d$n}mnbN-d?p;w=7T}pkq2QjNZdra8fVcW&v5#Nspquxh3 z3{z5RZ-^9Tm-O8UhPkAy-#hX>N@s^|ba`SscmYfIEAeFVT7PQ5l z(D9~%`E%&xtj-H|%ID&EzkQ^qeH0cggr>(Qkle+GFn+q`{z0*yrN8a83YBpYNX}>p zT(GPQRf{E7xU4VygS0ni$ZWmmin)Od$X|JLq4-VI<@5va6o>vVE_9vHSiTgb)O=4X<0T zQQ%fl#cK@?_{5U{9L~{fk_(Vb3t$6Yr0tzlWQ6fTvpC|^9Gz*_!i+PjGiFSrV=djfn$g4ZTc_z86E6=+oH73_YG}yk?hO3| zC@CKs#uFb2e@{6KC0J*;>wleRL?7oO;!MwG=Ny?(PanE7m)>31+d0&8<=2URCy)29 zen|-)Jjp?&6IYHOdv&R_U5pM}+uI7()$3Ty9CBClpp!gY-Kg;*$mb>We22$Ymk2vl zJIq5{fp}D8n5yxQ;N3>#@d!fb|Am49TNO|O@~`0!?<`g^~;|b(0}g_lW3Z2e*LtM$J1_SX2#49+EYe@kYlb-$6Z`hh41)- z!1|hafnJe;(qD$R4t6Bl+eGf)m@3gF>{SvrnUqMm!johx7Jr$&tpN$Ptw;Z$rx(-1 z+*aPL;ULz-$h@R4WKFDa^1QkFGl}3(aq%1jk3e{OA55tbD)rEr#TIoyfX>}hN^F-V z7nIp3D2I%KU5E2R8KV0HB0#Nm5r_DEdrmPqoJO|g?>{hxMP0K?)Hz&!PBjmYKS*wC zf$j-XN=SaussA{lg20WboC~ylfA*38xq@a$-Gd4^X(@Q|n`SjYM_Zs}Y1eLsC7I2k zFOhuhP&VGngRMP&gOLw7IygtB_)Cz^UCKl2$6o4ei_iSijASiq-maDm*ZaNkD=5c+ zF*b$Ws`rUQ%qJkB2`L5~$8-lpd#Le_tRQ(8^8L}=U-G12ElnQx8Jp8|nNPQG4jjGQ z{x9G}YA6Vx`T>VY@e#RN5|{he0!5DRrR&SifQXziz;di@`jDWTl)9{XKsF}r z_o>r`7O?q*oBR3bJx}TLO7==Z0QPz*59WB zoC?Q*bmQqjg4$-7Vqrl)l`K`dHna;NFuT3Wh(9qN&PJU<8u^?L(OcN1RnX;)g=t(I zKfbiTGF5V$_^l}fpA4(}zN#AO1I>Nvfs$)U+e4ai46u@GGdD%>WYsI|1P*MKvTn_L zGpES|&-_*JCd54Y(<&s0!<^xpY%<(wO=}54^*bC?#*3YEAg!{q0T#l`lq;NIicf&T ziF>!#RqSE%)aVb7s3p6UH#cm)Jev@sx|UWfI}ppvd4ZO+iIe`)lTRJu;>(xR+Ma*9 z8AE~NO@)E{5p^?L>KHF{WV&x<5lB$jIsFvI$x^E10x4?ddD?cR0QDu z?LRXM+2hifPsHDKjy)gsFY5&tX51rq`>q1D^auG}X@@#^x)d#0AH1^#DW8(u!NJ;2 z{w%QMq2E?k!rgfkS&M2PIum(Li;z{}N->Q0A?#bwXFfmb!ndbpfW<9ERSl85Ixi-L zr=#}b2(d9|(50xi-L94uZx0^BfbdOcl8RWY7e#5kO4lQ}OxLS#mUt)Y{9NoE!M`mTKmd92uLnzkibh-6|m{ka8Jsl!3 znVpa1CihRV(~WH=j(J10zHvVdwb2hkx^oG88lOpexnoq4AZ5fhC&Tni9q1a|qMo)|j5B)^#SnNCahW>_x#CAI}dbX-#6OvTOp>m<4e`On~rOk4|Ej=N4fs<<>?>nR5l`lHVZt_a1&0+xiAxHFv29{z|qUWEj z9lbg#E?{}Y@x0|I@z6Oi$~mCv`tr-dQEl&wNCHnqHn#2*A3lF~ zgX(&bT_D`2iC{EC`TX$7xBXp|ebDTHbfkoe6|F_8 zl@WPqNYrN*wJV*iUhe`#(Ji<92Fl5wDQt(+n+(jeD*w0(_XbwjEB5obtH-2^2$@W? z&MHa5bk|$jsn=M6UPk2a9)Bv}-|I8(I6G&8@OwuRsLOV0ca*_WD0GK)givP@FR}1; zE>Gitb4{_cj^uAC!`!0O)Uo(zrn-PjRo3tIX!HY`Zylw_>}O#I?{%II;q|`HD25h> z%Z=a?XDb(6T3&yA*1jHkh?t_ryXI1X6lvhRpV5Ny*9Z^__B11}Rdu7ecFf=*esYdsB=CS2ghMZ^niVDA1ma&bGoHyfu6V)=V!2 zxplGW0TMr`$JT80=ofWj4hDzs=f8x9BoXXV4{6jXfDrrlVx^sB5%G;IM@H7fOM^NR z3<~WBl26e7nQ>PCCa?$xX{$f(DGZc3md!dgN$J{@(_eL+Ah&37uN4Y-_4JS>%9s`C zW5ES*@+Sq31IUVzChI5J_rC)YA5+u(RV&lz)c5*DFoiLN}j|mx>DN z_>&u~V0oFXCgakndN7f{wFkSW1p5!AtAnJ1w-X)-V3Qu;UbNnRS8e=iwDFJGf=Qj- z>f;)XJ_h~1?A4P;k%!L2-El7@EFMYEGwl&#idN;|Azb=JmIh%IQIGPUU1X^O&KXVN zYf$ZibTH$ARdR+WLizBS_DNh?_s}Q>y1~f5ehOAK+g?{17E+|$D@n)KVr6}M+6RBw z4eio2Ba?tdfb<$#^`hDEwWQL%GbeNWe41$c{Q0PS8`F57kAF$-%w`Nt_FbI-!VOCpv z+vxiWWotUEm%iB(tu_je6>h`XftQQWA$xvzH145NqU%jLm|UQAX3iv{z`5VaA|>zF z(;HW9g;HB%9?Q>zXxZ;qa$i_a1!GP8jy@5uLaa~JW99kN7QrDGrR)bkHrRC$DWfa6 z^H;uxX(apQGYE1)L)O_ti&;@Irx<4P5BCh>&1mbm2I{|Ylg=aQ7z-G}T~wb359H?L z2l97WEf^&*i7r!~Vg(GgMxU|pl@~?{{d^}QwCQNi;ac1 z(-~{uooEY}J0?!F0SrLG`Qwdm?-qm~&ZCuj8UY9DKm$v1!}1=d~m4YU&ig;WXxW z-+`qouJkB0AsW@G@ngb5KohONxOl=2;G=!{`DO(@=!mYBpa>VlSD)@SE zp@b56-bGt%`DI!iAYJL$3H`|)yXEEFcw|V`Ja8^=m2@}Wc>Mj(WGm(j0p#IXuzRvM z`D)6uh)__76+pfsEx;l+0zK|p7qB$?;ZZ!nyl}{gvnxF9-io{q8&>9I{oS+^+Pj1A z$EE}M2*S+c0~GOvkGY{rEHyB^;|DNFQ}*WqdU%=$Fh92Ulknjfe(CwYDgvCd=lr^t zHA7BkTsgeQ%2pg`yhOz{!6H?E8z7Ww5qH7P@RZ&4Ohmt?SCkG8!nx0hgZ{!EV1|S4 z;D6(O-C#`v-13jL+y7J?fu1mMSVc9nThIS(Lx17e&fJzSU7^yK1bT!JI-ED_=myxM1C>#&PbXh0XZ{QV1cQMYFOf?uX?UKO}mig zQPKoq|GRK%a&-8{F|Ew8VQepl+H@9>d`)8ZZ@}*^Z}r{LHP{fEt%Xl=N&e#CvD3!A z61&n}#J>$PkcbVL$54ly*?ga=zMs$#C&4+LD`_0t^DJ z+^n;ur+>UUUmEW@dbCz;yVk;vw2!D!f;%8;vrq|2dYGdY*e>zOE4xL=-aWK8yBVF!qNboX)c3Hal`$AH(| zBM?*y?$Ib@!Woct)2w;akB8RpIm%;3d-qugF`q%#37M>YX)=%%8{bMD*STYlM_HFt zgk#EA!ob%LxK;yhCFi{K045&OmO>b*$*{eytxmb^#uv=lI_H;r4CRMN0KD^^xtnYFbm(m2=2{W-ksYebbn&SB_wlk5XdavLuJ@ z9ggo_g%^LrC;?d@GLNb!KVgQKM=pbg-FwB~*W_5ie*Nx4Og$`N6}Iu?=7cYAxn?uB zU`qChkdx}QidL>WEz<@GQqs0hN;SeS_MPh0@M}q;gcLG-+{>YrtWDxdr5rk@%N(=p+9ntIMv` zep!S;E9hPqkk6aP>lVDzNYKS2YmJB)-}(0*pe?>`W58!QM$^;YFi>;!;}flp_d!Y8 z0(4dN=DYa_D?wcO42Q}5am~By+2i3vx+0y5zMc=%Kk_1zPzfwgE!p;dfja!RD#yF4i-Fy->&S0Yx=PIedSfH-r1 zehEX#xuq(&hN2ZTg^;{AIt|0v)MN03Sy zk-QH;No$1Yau{&&@^@zWgy1iNpx#!tcjc{Yz}05xKd+4rxyL3wdiovL zE?(;P6`i17)%lkHu}~^o-R)y>J;wIx^8 zZPhq7ENye-#d9(BkkLDn>}TXfp@lJK-r*t>!H*<;^W9?Hs2`FaOW7vLi#o`2CrEV< zPAa=Kiv=7=cA1c7>1wcJlxdi@m@&$Fmx&)K%Jn~q^3$YBfa|jzA9DhVDFEh z4m+BMR7EKyT&0r++Arfy9rr&+j1{7lCn?)~*IXLTc|Mn+0?6g=#l6pcZWdJc)a0pA zHY>?f_oF)kCz9+b5t)x=hajy4czoOFv_8L`-Y?n@4^6r(e8Y;f4 zo6$!9Jldp^(J4`vdjBZKUzG!O$J-WfwAWv9`>^2?&uwX;#OPdnm~CYg<1Rfjy^cZqs`Ef`%Ur45FVFLpoUgey;&kE}1I zR7GbqKj%2xg_dPR`YD)Tv%q8SV7ex-07{3leL954J4@CT$+=@RcM(zG=2g230sGH% zEfx{-cbjfR_S|2Us^kqt$R;*E0?Rx}pkKg9(;8cAe@tVZASlN;A?nl*h*&@zwk0Sa zy4Xn1Y>}${y0I!18C4UKq0d_XTt;YR=x(}j&-43F`FDzpO~?t``q?LjyYJ60f7*qH z57QEQw6S9v^9V**K>g1N(<=d)6w-jii<5(syD7A{Wxhw0iJIPEkcu|ZGYlfA;hqJ~ z-Ul~8_UtE;4sA=`41)^nd)Llw zEk{w|3tQc-K4M)lSP+^>0+-^#w=_53mPjdD>kv(@NWhtmPap95uEG}0JDykxhi{or z4n#O$eZ1pzN5B4DqyD9##`7YV+%Y;yu_UeA+#qwOZOLGn1BQ6;Q$9Bigv;kKt+F#h zqa}Y-&%7r8JAR|xM7-nij@qvHE+QCOwR?Z#wNUnHL(~G6c%zv%TY3}|0Jexc1Q_yL z78!p(7j8;rJRuZC>!lMfgDrx;Sa8|C;I_q&%uqI}I5E*6J@LiGNzTLkSu-5al^iQR z4>%JI(P$CXOZIB_=tN9?k9hL-@pf$Lo6x+Wk1f6*pwMJ;`0?9r^ELYMdW&zhjSv&T zrQ_60Uzw(dxv?B)IMdSpRkvLb7vlRZVkm?1M`2F#;=HyFCBNC1 z6&ZKiytrYq36zDSNjIQ3@UK4mneA%r;NF}2jl__3o!o;Ssc7<*dy=Ub>Svk2bZ(V~B|Y z`0zu@IuQd{fxNnX!VF@Wl*@U-2+%UbuP*FPkDBMM13WOm9$z=`iAg+f zrM__m7B`mO83?pDd;1liE;p<7nW6tj>xB`+i$-N|GWV>eO&phPZ4iv`wwOrFTCytosN})5(ri8MF33m++_i zzmXbY$bL12ayc79;vk>e*z)qj$-X(l84_$hG&L}z9(CE%k2NmCzpmPTw&Rk0!Tw+0OSMa(}@6GAWmeuvsLZ29q6C0 zEdrh7Anst6 z5%OfUeRfjfE^kB}t&>Iueu4+f?=!w@=Z);WfH7e;on{3#FVaAc)7tXG-JZ{&B!__N zY*T#W!A82{W}MqWXixVM zA;)z^*j1)XM^Nxh^agm5S~o@8Uol@3k2s1MtecR2-8O!NE^b2=nw2oQGs!k1JILwz z&b1biPAF*M-GiZQnNxc|?kO?2-Iva|>wD2weGZ8eU5g058yY%adOkG6nLYUnc02)h z1hjk2D6s9!zZ^5W>}q`9JsbYEAcJo=+Bh9PKaN|74=Ff>5gQ>tL{a%VZald8!N6iC`(`c~ElRf&vuy z5Q1{D^}mxGIZgnRh1d7HFjFKg?w6(9_8{1a5Ei)zTyFDN-4l42CSjEMEh*BtA*8C^ zOG92#zz{S{|DPSe*m35x|2YEAERBWbpCwI6Rf#ln@1c>_Ofve`{{Yri4@6wglff&V z)A*kQmNWT65Cg9D0)iH8eg#I@*kt40)@}oz>%frMb`<2jY-P~W`i@1DHW^?3R1m0! zMK3_uPqa)P`BeNWC5ySz96W{L&kQr}K9O?Xc3D4rCCYx5cQ3(?MN0bo^cT!%)M_L9 z0tmaKP7!~bP}7A=rsZN>tJzaoB>BSMtxX3b`}1LLFGoR<9C|-c$V~M+xuUny56(%d zs7+r)q=7{`ya+(#6ySj$`NlcEzXRAmb?OCSy=$H^iSMemfvuEN6$o+dEUX0;+u-q$ zyARm82;@$ikiVGabAjcFOA&SA=bCtRk9L3)H^}L+DK(Rk)4Uc8DmFv?(wFP)cYA^2-^|(eeJ2vMt~W+sf>C0i}8Ao z7P{y8y%T!HK;F+T|pxhzbz=kx}>O*g^j`I1>hrfGMcgY2@Ud2f&EHA$v$= zXS;p$B8b6bc0j?wX_8{s7a_u=U@}jDTm7vJmrH*&kM4f}((~gD`ewWl2+sHkrzh=@ z>zhT;d4T3hc|7=ifc*~^9W5RzzY4(;0!_~fCa{hW4_vhjd1hsZw2#yMQ90>8z?Q%G zn4KV`8D?$I$;XbBfcp#Qz__H{iP`=NO%R}@{*@cnej)t;>41fNCC)CC&7XjZGA-dW z0#TN7*zj==YWP!)#mK3fw}PyMmhyocW@e|QH`BEUjN40gqRaL{1Oeo@x1iLtWwX4i zto(v$RBepM&7ctZtUa1wBJ$z|P+ehkK}mhRRM_S_TcGMtg8icRY8zzr$}at^!edFG z9_LdzBznXQR_S20!C9Ur0hh0-S5Tls}0wm7k@fceng43@WfX%+gb`NRFY7K@P zZktm-f~}4H&)BFTJ;1Fs^F+2@Ej=cFDU{YfZ-NbX-*p63X*JR+hQ4(q#CP6$l8~fb zP8joiSlN_WmX6f-pi$3CdtoShh&A;?8;X0X36hoSTn?c#U}w7@ZHrGQCrY4Tofg27 zdlUB~%yH~sxX~95k+;}|sCPa*wM9U)yvBrgC8pkj_d$+$v!i(1c+bkFh({1BJjH-w z=u~4}_&0}12Q!Hb{bewQ@XL*_z4B(CuoQ}|tJqwHTDlnt86>3+se(-Kx;3+mj*?AU zfSgUS2wcdu0D8QD<`iest|%6nh6bxcCs2plxBops+@N{SWWkvc8R9!GOmkHI?Zx+( z_djy)hA0yCWsSVXqoOlhk>KRVSiaVsmrq;v9K~aXAIx=uKYq}&;tX&q?C{|aq8apQMc2^rQ^#^%a0R_<1Q1e^ z8vHagT@OdnWtTAVzu5!xB^KRc^^fmjl1117jC;pJ|0yPiklUTpDm*Z233$*8KePQH7-1oYYx!%4*B__9KT`dhbUKdIV2iwP)Tt zszm#Kx$y=Noxc!r1Pcg0Yuv7u8+7pE7h&eXEV95tnwQTcY{hRp?gs>} z%ZA!ZzArbSfEv%L($xF$p9TapF@VS6pXALjH8)=;u2&w+oLl;2oRRJ^M-{2w<7ZHF z$IRHpvbKpGdW#dQ+rfaazcQ->gp`4hWy@x4^Lq0vxR?ISI?Gc8119zhv1sRI_b8@D zN*kltm*>~tpyb+&iN8(FICwP$AHjvm2hmz$d0SA7NRZ|%=E}q7@(7^|uNEU>>VDM}_ZQtR>$F**@)7$G0n_*Jf6outIES z7G~_L^)}8Tha8pn22*qr*+r-llHJ}jITS4Kt&?5<(_I)Cro~HnhGkz8Ie4&mpT9qU zzTEVsT1=$f+q9#mf8OGp2MdpGZxRv=nU4!EguCF$$-cf`%c7I}YWTtqWq|h1Q%E8b zF#Nfaa?fP*_OeYZho1V?;ID+3vBM?Of?K0f5Zg$$sieG#(eDqviwIy|C zlf=*sv@M5SPpOX}d99fjaJyI;SM}=Vm%G#A%$Jt`lJ1$*%h6p{XTJOQ_@NT_CzYnM z;r%g+MiaTGUiuxZeG(X|o?fJT+sKfST>tM&7CATUR9FkZHL3|NMgowc1Xg}_W5dr) zepCFpRx^(gQj(D{*^uW6iEO#pk@nu~QKj&6*=8t+%APt9xB4y<1W$I$I1Ac42t>h zUZsd%-<#8vd`ond;p)X7b?s2%hr#rN*Wa$%?Gbx*vlF%jt{vPGAnDW(N})EVZds^WDmUD^yDjht!r*D zNe53Y>ycjF{Xx;InI*FzC(o}@>s2_qf~Or>cz?L0jYa(%j0ss^U^&nW={?X3#a zRKKzrHy`v3|5ns$d6SM+cj(fCwklSjt`zyM##lX-PUpL4GcdHUoeSh2Ga^WYBPRYz zPz)4l=ZW-bW?T}B7la)*KRWX&$@)beTU;HpGgKXjxS`65V*n4V3p=mhTh@5UlrT8| z+2OToJ)#Y`VV0nd?T~(^*O0-IOCIeTy`Q$sfAa|F%~+M29q*R{i#w+Hru1Raif>E5 zSXG4idi>cfWbNd6+0zHQZ{A2>f;PBZU7Qmw;@QXrQp`knhZCwg8OJKc=3n21sn5wLDw-n#3TaYU%w)7?OS%;CG_!6xqv-FxVq=B@Yk z5n^+IhyIggV2vf6ui=Y7E-_Y}%e5WgB8Lm>ugRD4$v?lKW8^my?cUB|{6bFaYAkYa z>3(84(X8E~3OrN0{S9|GcNqZ1?{_?6uhCMZ+Y}kbW{=lmLZgeOGzY}C8Mzbw5>Scj zq@UM2!q6)UcN2@kVs&BQE4c?AF<{GDqRZ-Xmw|4TK}D@L5V{I{JBbss-}i;-4+>{K zl(9oPF#=nhBGC?{>fxT~5@GU)=}PTzWp>M{Cx4=XBCNN5|3kO_dg4*cDGx`?crHW+ zayF`sXr4Zk(_kx>e;2HhAkHkpYn#v*|>&#-pg|_O^R1fC(>?M zbe-%XKo(9*FK!pJ6$-Q$TL^{Ax>Ak}m#8|Ipb=ha*}KJ|%S277pGN@wwkC|gRx}C( z>(^ZO(B*w|&1C`Uddg94<@*YBM@zl^XDz|)%Z?p9mV(LSqYZ<6nS63AdJjX-3Z}YK z^&*l9g;g=L0$p{h!m`Jg*VQ2hqKbt)ZL z!}t8{V1!xM*e=uxUKkefIV@}(9xu9n-n?Wd{c1jFZz#?4U)tI;A=3l2>uEUPlV5}# zE194JN5J+!+6R?D4tJT%j}ekobXjn`@G7GPeyjH1;sQoxhn~OOko3!62KjT-wgenjlUL<2bKy6Vk*WfRq#O_dG~EQ+4mk(O z0F>C(Y$dC{igo!;@DPV)4ql$?PQvZkz`&yuEXspbm=NdL#s2OK(1Yvgzl$B=)5{x5 z<6NZ}Xu9;&2FiK^p^uSiEKO`M<+b35AF?DGCeMJidx7%0RBUolQ4M^e-+i_Lh#Zp; zbDf9YMv*w*?hRTxdp9ryRfcC3qWeGj(fiQj=qbP}TH0pcT|$%_O*jJmaMtq{R{cddU1 z%s02Ni3D_#=U`pIrb)y92PMwJjgI(5({kIrGYVbna~|b|n|*yVS*>6K!>3{`H*u>o(7aP+0*t`wU z=`}l#C{^5o{XK}iaSMo2?Z=BDWqZ-+&s1Zxtx5?gT`o`vZkkFpxBwr>{A2txoiO_D&)b3LG8biFmniwGDmn!p0#$< zRl{u;UD<>~KVlYYd^vOrb<-;Z%u%^?j1Y*gelUPTu0Kz_Kl?|D4A+GNFpPEw(4nk~ z>Kq zu*L8nZDjGd*I(@^fyYuiN5ABnluj33(K`T2#<6cJ{T7RSV3WGdGrf=G^%nCXjexYa zR)=uAF3#oOx*YLMY{-7^by^h;ZIwx$xVB6NI~IbB9?LywdKZ*zKubGcBJd`6s~f@R zJE14<(*UY1C>Hs_uZZh69wher!zTV&yM^BxvacpwWQ2#X(Eby_J6c0qK659)BwGG= ztTiDiKLz-B_g!f$TlYu(bWbbXS^}c5=Pe|GnIqT~oA0EF$aGy~^G~mC|IuK_8M!U> z@-iRn*z~Pi<8jd*#`lr*-3>oi7_oA#bZc7vp5t!%X-;HlytLPgL20DT+x9ydq~V4B zuz+J4c$n;XxEs6VkOMpWscvo}5DD&t;(R$GfIS^8w6Kf;FR-R@) zk8WQPCQkx}L;?Ft)#ot zdO`)KU)N=KSOyH%wiI-Fa698H_&gEr7?UCJY6q;ZiWv$^A7|I@4850lb?D^QM>drpz6X}z0{^ZFnM_89SkFx#>O!LI#&cO zRBMl9wp}W|-r~-Q<=18Ed?mP6tY$M5H;FIlS2_T@AFxel&}7iW8FKTwkjy%7M-ws> zSX?!0`Vv`8k-Z3g$hEt>GYi(S0{6^Si1^kP6_CJ?@Q=J-;;ZpB^8hr+1b-JQ|1@@i zzAxf(K&M#49H@Bn?63PLN|4X72fZugyh`jj`GHU?@v-P~eH*;SD6`x0c=!2LWczDU;qemEo@E)yuK45&QAFjf_oPDA zC!7*P-=L@TOcMf3wPRx1l?ME}8ai)Oz|0QUT~-*?q;f(OR<49bkL; z#^vBuN&G0*k=N3*u=UFob{U)eZ~c8Q)iq)k$bekX4W%zHEW$%sGQ-)zQwA?MM6u3t z?}gWGc?i1lo1?b1vC_Nl#jl4M|%^yeE%v$V$FEMiV| zIf(1t+&fW`y+2!I`lS1oGaZMQZC0gt85t86Fzx%zqusUT${DWkUD!hGheL^DWE^*k zvts{>-&NdK`fiDMtPNw7S#0}A6ThSnaKjJlHHX$L>+H5RtS1!kCJB2Rj1QZYi(QLG zn!Z1}%s#}aCefhU5dV?afU|hUzdNVqy}~c=k6xXl*|8R_s7I(pUQvdz5Du}#$KkJH z*M3O0F46SWFzwxi>U8Vk??y% zfoW=AdNWBmo1TsQIU29^IOIawi}%L3q(0%76G5EJhJm3FcH0qp4fV1g|0Ea8MY6-} z!km|(gjTK#tfk&vBe+@i;)0_RY`CeiP((U*!s3$JWjI;Z(f-Lt87uMFi6xTH_`hSMZ&iU1ATJgBiL{ zl=C5D*f%3dc`-OCLglmb0#FCx;6{P1o-%4tw?WK(@$P4CfRXb0X7ZPqc6K>7>yadE zaqRt7eX2NFyKIJUWUCP>^XX?O`$Q+Ro>-Y}=K4}*yXU#$)>XOn+or|Lu%%dhWXE36 zgRUMIU_bE!4yFKt`HnLK={x*i4M%0$;G~hq7lcC!ll&g-Sdbbn)sq#IaT^QZ(?(}e zy&YWZJ=&D*Yg`_dJ&eiJPlcC8baSY;cQHs~`?MeSnpJ7*^xG#NA>D!wqj+0Khc>Wy zhpBht zJZ(mU42`>Q`D^wLsHy2gqDR*0wJEM1RxoXM0T&rL=Ug)mz014KTwry?wA^R@cJrBN zoRX1K_VF{ypV)Lk^-E?89tMIIii8E+sYj32r6onWyMz?y=F1W#mbPk3#Ck1SMw8B} zt--*9WUm~HkX?QE1SdQX*~-hnJ8lD9vN*(>Dkfl|z8egj%R&ehN|2D|%D>(Rb+G49 z?iS;kMfKI@zpV&&l8N{uXrC9Ld9vKH_OaEzG1-|H64kgb(iJ~u;^j%(-y(IWaS!82_l$~FJW3E>;*9fb%~Yjic@vpE z8wJE)2+g~ED#9lF-;d`*iSN@^HUb;}-yn)Y!`9uXtZ4aCH}`Fqr>5#Z?lsk<(9otH zIABdw#Nm@m8Ow8|(+@NQWi9r3lii|fQrd;J5C@_ua;fsdAuQj)d1dFE(FZn>$~ySu z90M?WhUf#$-Tw#qo!_lUKaW5LBF-$J!^OoVVC(TA8NC|ul& z^XCw?g=5xn+mV3Kwq4r>D#O5u{PMR=G5l-Gzpm~pYyykhE*QkCL(jtP^o9GkR}Xp5 z3HBAEkJZr|>(8fGfWem-ulyRj)HhoFO~w15*idc7xf2X1{rDbXAr+7c^eVbQV1qsm z@V;F1g3&7+W%l@x$Twg8rwc#r73?AqV$Yi)kza1NT>G6hFFB5y6i;~1jDqJYwX2|g zux;oR(kFhuO5)3`LWMj{I|NADH`I&W9DRQgi zFk%e&UhpFEFx@F(;kmP4LXu#hGEpe=v(lYt@f4X&@<%8k(w;^LH~){Q=i`;|SLTD~ zJd|LS$^ILk**x^yI`y$brPeERsrTE)+?54Z1}29}cc5Pr8UH~5sO?2TM-+se)QHegv%*>)RKS&)jVija4`Qg`Y=IA`wt-YpNw8x_;ll-*uT#%>mLhl-IN6< z>$>qvJY(zQs&yh`C`_enWU2<~%D=ZYukA*!J@20O(ujN{H*i9=Ra@U{HVs77OX(aM zO2pN^oyztL z`~EfmIp#3;@jTacpXd2GrG1``a~g}tx6L}ii4BOMbuGdU#^~)pGJYN9*@6ey*OYPw zxQ9W@Fq&a%iAvJ3J6ZL{GhZWsMOIk8ltWZdZln0{YWbl><8EP~HyN{wL8noRnC_=} zQ(Wte4{L?0l$>6l2FMB+0Ncrv+uft=HNsaywzXndd>Qf=N(N?X=%*7v z$pyjl&XZNw&sCW~h^$wTV|}lWgk}JLg*Jl+uYBBuN&*fiM>XeMj(NY2z_P%u&2qo7 z`5~%w#$_*vFb%buT%*6An#hN)Qa?Y};w_-_8=6T5I^}l0`((Y6m7p_IsUI_m$n5}R zS`0L{u*&wSUF%I)cd&8I!*^7~ zLg(mG7cqy=>~?>qM}oFsFNB<0BU|-#ejT=8Gzl?Ae*C{=^p-{a_}Jv4Zsulm+O;!k z71TB~3jZLnsa?)k;6*A-I%cGK_V{FxvYAgib_eQFnE5L^IlKd%-{68BP!wBvrOaXj zWwyd$y39Fo1=`_AON3u8$S+FQjP>bFC!^BASt$}fJHY?_FcPVS4bDAio!q~Ad#&YI zekLk=EI>&y4aYGucvSzw=32)*aOjSq&Qdn6{WQZ-hr4%A}`dV&BbIkQT{e`&bZcf1xcRSc~hGg9|URv-OK zZEc*1;|U$gOJydK0<(Z1`cN?yz z@s5ctwDp)RpCGE@;WGs~dqZCgwB2@HX8v-gDJcg*US;u?CviNBJ1QmL0Z$q&)A~{JmTVJ z{Wsn%X!6y|xVXReq*G?hNcFh!^R5o?mxPYPuXRn&$YXfk6FynI6&3uLLe)}gJs%ZQ zrdtVd8;Bd7-EMh-1%hLz!|i7ZYO9LaE9*{W(Ath?O-^H7=6|c(d;M^!|aR1a$SCUed$eX~cq#h!aC776tKZM=IYqv8QV|Hg=LC&*| zgI~P^W>MS%Us_y)!hpXwW7Vb`=bqHvgjHGgE_p%(Sc;k}au#5mXBVxCS?-%Vz)p~` z5R6_-^|^pWu7Z{`W&AWwo{G!(8%_@GP{?{c{K;f~S;vwX)}3M5h8}C~`4E1%8$8?< zs6M`lQLP|khCgEx>V86Ingf(c*Yye20uv+&_kxqDyVi3s-j}gS=bd=wk>AVkqiP31 z4nl5M&0@fqg%vwoVlzxwpP5Cvk*FX6Y&QR>v_idWkOs&H;ziJ)!fvCc8jT%%xzXT?hicpiK##TAim%w_pXdv zzxQ+gQWpEqwxrj-6WW(W(C&OMv42m8{gaGy**C;udo6u=5Y@!B&giQS^Z<`GF@n);${d|Vk8P}S5 zc8*(U68|C8jWTNDD zPYr|A9=fzH0|DX=?l#j%H)r;ENhb|W^rMn}3&bGEHK}%!rO)!C0+ngn?Wy+4cu>RV z&QRQO>fvYw#bd3og3oP(Epzm`Y9v98D~0lN;!Od%>Il=4hs<={aF?6sY}4+SI~7s> z&TjKSv2Sm?;J>>Jm{f(^Ldhht=x)8Zyqa|5_X48yU-W_y=SC$*pV_ z^3tA-qGYhmxWB`yZ~{8DRdM=Rl|%4*DUEtd#^&{cq?Abo)^D*?H9^+r9%BP?8d-tt z=3EL@1h6lR60KthCE?D)%cF&o*UDZyQC9ml^erD$IxC@hwy+NXw%|0?eVN|iv3LAkDIWq&g)3C#M|k4Rk1&cP9~Oc zI@S0Q|6Z)l?$fkV*+BkzhJ>8w%zwjMnQhY4K9t#4cVdZ%OPH#v@0pC3ew>d^vk_o~J0 z+-zzNa&^(Gu1|{EY1T6MwuN(LpUyrNh_-2&+oRX^k(9ryj%Y5wQgvfWzf*(V$+MmE9z$l8tpo5#n5FtF$J(S3fXSaG+C zHM;fdxWS5eBTc-;VaN{2g4RK^^E@K`rY14y;cW(fsZ3A^4fafKsxuWer;>;=Yb|b6 zt2Xz?|1n4Yk!=bE)-(9G;$thDeb331Hr&bL%!U4y7smFYhS(huTjwcm(9hfT-iiEf zrc}FR(}IkNlsqitgGWC$an}8!H;sRc50Ffcd)>C`v9D#ZF(u$)!I^CEjunhtI}fAe z`C*-koU?gD!((h<-{90F%dD~vQDzGtw^s4(L((GBVI9~!Fm=$eDKG$XE34H zm~zKZl#HM5YW%bINI3LwJ-}}v>psdCX1CcVWMyk$wG{4)R@{G&ZMO23&CB1Ns z#i&47L@qp0HUc()`$QjIdFtu;9i`G>WNuPf(Jni_Nk%{AU@nAHin8mBFUmZixWDq+ z=M7Rz;3wUT4EW!U@-@GbEp9yJN484EePw_h9Jf1wkeN+#oxTq|M!A3Tm`Fp;-X5r8 zGv_g$O*1HL@bpSJ9@NkewKbK)E`VX2%Q3c-YY+OoVkIl(_;hSC`KD6%<+ahA=&P$4 zUQ?~gx2m*O+}j?$S%#PH9$?c_ejHGl0lL<|=`W7Hg|t3@mS}2~ty5CWP&R5bi!vdU z?ROtRs&(>Ao-0od|CnmqFDS8Q(>=_KdQlWTbJfhx(>H$wz?5G;mNS@7sgdMpZipj3 z?op|CwlgS;W~`W6-^{bp10ih}n|1O;6W0hFRh9A7)6HfOu`BJHoH^QFm zqgPf=c(bpH7`XP(CeB95&h1u%RV5S=`XF}m5W}*pd+9OA4t)4uXGi^ zuFqSYQ1b9?obMsH2*{DJi=bSAkYn4c(0=xCt3hJ{#5lqDg?|lqV(ZCxdh=TMiZf%! zka=g?0hAh-uh~YG^gPk9ga|r|GUg6YhDnS1sJ}a{Xu;TC@c6Q!`R8#f2H>zyD{;NX zy}9za@oRZvc3pNI4!P2*rCx0rQ9k~7l@lHku&-{FJjj28Z?2wkd%hY9A-+Is+%eRg zvH`*#M`T^1T!BHFe)DEx>7||iG+&z9s0u_E^Q$TTSvS3KfSULNa{pL-16w?wwL9Cx=(NWc>0Hr^A9w2U67VqW^`vYp%5>N6qo@Co_CdKTXl7*1Uu@kRn~ z=V=-&YJzPC*{OARykH!m4=9|o@hL8HD3K%K{`QtrcLI+#&?{&=gBW9AHCFAy70CZA z{|+lm;G!UW?2zzJgm$m>ceH!^#v-;|IM2u%WGOgay~fRBJqvB4Ymaxm{HtR(stI84 z9yVTp;P#!&N0zWQBS}DNaCp3isweEWG4+HN3#v(232>8>fwd=BfK25@>w2{V9B2PJ zpCRN-VdK77Ph&LNGr4_&4@7NYow{T#WjimmCRF!vlOgVt=kFu+1OnuG9u9HV#XDb0 z?UnaAsR^H&wb*wugm99#8BZbTa3u6>kKqV53!YIQCd*BY7IKzeu_?em#mTgIcyT;B< zq6yR4K<8C6bA($8YXwd$0Pe9(e5qb_T`R;x{sV2ShO8YR!)~Wd?jEM`xBr}EI*?Ev zd>XZ(=TYdtE-Fwjg z__K~^z|6Q`jrP8=Vglo(NvUiBYEigv=OU3NIUM=2;XLF((Fs}a9T;^F*0SCq)e#S1 zR6Bd)X5s;v3E8>%9>(BrwYx*~tDIT8lh?)GOGV}aL8gv!0(5?#2Pj|woiYTpPP8?q zu=i%_x(zaWWt!Z}3i)|RJEv2ypp(;JzO)BpR)rM+ll?=((G+?S2WHz(-b+ z`Nke>wh2AJ_ZTAUzvwT!TE%(d?#WjdmB=a9#zCI4v*-xpIk09J1Nn?!wRzChh|_P| z$#4TOlb1#-_4I{V=Jm-VC^sMtgjK!{%~a1FmO35Doz0x?qt?jOO+p_ZSfm?PBx-LS zVEukS)Vwu^Rlf0rWPn?`7uDg`_`WGyMR?0iTw?7Q6(0DkPbIG!D?jk0FL4V`4e-h! z(OCRyJ9Qr(3Hs0>5<2?u-e>{1GGmX;H>-n`dr(q1-(sNQx865G&USd z{iwaA;8vQrkb^oN#+g2);-%HRl1iPL5=gqtWc{+?#oWK8urskGnaXSbc+MO0%5Y{q z+SE6GKR;~Y6{+w|)mSY`jKcmL6RLmN;iT0|d9I8bmoq%u*>r5bP2V$pMW)ZRJZIFP zm1vZkbV|SKF?Ygi-pbMiu7VSfW!WqRd*75d8XU3p@VK6{?BKdymmpvi&iC;Can5vD ztmpdDS(NU@G3ThAbEHn2D9YanW$!7ctxC(Dt=C^x6-cya`f{2wJHN-vW{$jf{Y`36 zw=rQp%8^|9zV3x685JBo^|Z>hX1)@0@Z!Vl!6RHdx=YhCW1GJ<@YTH+=F8Iff)csk zgSWi6mJSrc#Y<%pKKn>+E(gzX(;w70rpNMK6RYmok~EmZgcz=9^PPiDA{sxcg#0KP z4b+_`N&NO$ivf~kLMwV=_|DyvZ<1tW*uMMvH+KRqahC2a(dI<$yEPPd4?bTHTT3a= z%66E!C^>;UtFl)h$o_gvC;~(uw)}Wx-}O>*PgjYTV|jU{d7JY;+m$<$sWub323nYL(@mZ#;b5;Bs-`DDisyW$B>q zOP2>5aJaUwNP|FXLeT+=wIw3#liOBAp2G);80vc-9i7I zydB}25)tq@P}7FK0+-KGBhFa$HmC^M9wx?`#vo4x_wpW64!BdJM0U#Wf1}rD^Tq^2 zk~6(F?0`}$R-j{R{n3eb-7HDbIizREW%be)3~P*+t#yDUM=G$ z>V8{%3GuSQF}WV%j+ka0If}0A7@(BzL7cYssQ8o;;eS^&K(zV}-i&>dJ=oNpfyaq| znUNZIJb7sdauh*RAr?foX>RG|MB}Cu)mvKk}i%_dAH1ciDIj zHK`B{xJ}u2zQ9rEW`2eJ-s9{3@ioo4rdp#qd+X_?aT#PpHs%9LFvET-xkPvVA&UZ$ z2WAbC>dyGuo?ZJ{#(UF(@rAEjT{Ta5(`As}*QA2oyMd8Cz^_1I7Ww=eb!KMa9Zni* z^D?bp624Hde(8C8_zNIdBl1-cHG_%-_An<2Q=VUSTpQkeQWK01F82Jejo415IbnGu z+N-c^=N)K_WTdFFDENCMc}x=Jml*-y*=QgJk6dyui#L|ion{12ScOAqiW zvHYq8qk9$ISckPCCU*8Ie53S=KBl}8ul$Vgad5Hgw&J&%ZAcdGYIf?SJk>b32%HTV zilOLpKQHHmwF-3(B!#}J_Il3K{Mh+~C^7b|RPQPox;b-EoQOfWSRUXlYQlO}mtmq@HW$CedUB*hnTfxj&~%XRetf0tmJ@pcM1mnEPa4Pn zFiX0~8z2gsi2R|Zf;BXG2)n)IS)MuaFED`wJPKEUF%c*uo8a9v8g9x*BTuX*%mIy| z(0Fv|s7C%`wu%Uhdq={qyRTehyy>cKu{({w3hVVyyf>Zd0IOqLC|RT2e{o=eWk>!C zQn)OkaOXq{3G;yy!2%s`WTng1{|j#xkBl_veSPBxQk?x~BIh19MKV{t!{vCRoQyI{ z{JaqowGIU^)|G)HSoUgNEJl=I&K(6Fq7Sc1E_hEX=+eOD|se<@+R-(2)Hv`e~8)KxeVjP z03D#V8xpqXSUX|mtHESfGm}A89-^uJ7n(^tQDoTsPfLK{>$`jicz_rkNvD1mGJCqHoCmFIJV9X!zH);}*Ks^r@nFr>5#2iI` zC*Q$m#quBkm*7fHsesRI%pjx{kYveBJ;G}&lSp(G(=5?w4wJ{4+SUTG$Mq5uuP{2|0MkNtC2V&YQs`y^Dkrwt67+4gnVaj|=*Lq;>SaH59oG zzZ)d$>smm+<}y#82`s8>j;0(ULIaxLCMXgSY)B6Q$^b(x)BhHMKPcJ4(q8WYnY0L| zsw57q_=`+kaKE^IBWmf+V^oy7_KQ}oE?`%~*hQr11Lb!EGDYT*j`G1@&?dnGb>>dD z&8cMec*hUg58I6RWQiuQ#U6SjkC^HUAaw1YGmfVc-;=A8EEPYkNxFz-mJjw~92*}> zbKWgtQBOWyDAt}2a)v;$>>20#h01kKn#4UUrMmHoz=J2p8_`1wxqH};U~6gb-i9KW)StJ>+C2 ztZywax=e$cOZf-=+&vCI9_B1-?jvO+={-!f#9VVr-MnN1W=fgWxa*I^Wi0dj2~DzL~&rZ+|1AH9OARY-=$qiUR+vrFVP-Z z!nT7>t-b>!9wM1e&*QiI?|Vi4$!EuS$&~fwS3F_+mJPBeKgMfQ|E02g-!@La!STXoIt0L23^Dj=`8N7gx17AFGtlq?u+LX-$E z!LD8V$^oj4qT&r5=mfvr&uheP=f^}A)3qtw%b2+ zK2faTxmis)e;(|RJAX%fay`I5IyJHr1-{h=N4pY1w!OD9Sc#VM`-9^ED1k5QS65#@ zcFG-^cUPqa_v4jUp2quzfde>kZZa-If`kSQ4CHcrO}}I@8IwvzX$Jmz5bQ?IQvuZn z&=f!r20sp;kmx{l-)+Lo1X-f47s=iA-)3+n2?||Pk+YGT*C62!S8KC7FS`yj(NA8? z168AWdtsFZizfTar>tytrcUvwXomD01CIrOtjiCpb?*9iKoba8Do#k%AC_}FfUd}S zS;yQ|jZg4319m5#j>S-f*LdFxxy|a{2n6WC=GWQwW?Vp5ZyLwOX5u2?PN{Rdtl?C# zplopkMqa2R#CtI!+tuVpJ>iCPBsQiWXgY8cp}~L~-9*US&6$>|O;xuc5Eg6)d_4&B zArBLCM1<_mXOYLF(|8d!!MAsp_02dm(&Skf(!smP&fbAuOSI3h@yAKjKdccW^@yEg^gbC<_J>i8x2l?v-8AbvQpw8=3>g+U_6O>yK7muN zQ{Xbg#TC_B0vRhiM~3Ac9N$f}zv+-LHvZv%2j55K1d2s(4kNU#lr~0TvEO9>LKr&qoHGnrrJq|{xXih8}j+G$ZI z*fZ7B`h)~3@)XB*?S1%y>>oB?@0Ap;9M8Mbql4qTfU+3BpCM#bv+L|}M!S`c*AjzU zWGux-Y2T%K56<5xsQl`X*JbVKQQ96ox;Am~Tqxrmm@%c{)Dh)R)S9u<$=i_(yt--? ziwmGIL#v z5S|oV#lFwecq(*O4aM4`%9Y2XRAK6Xhv*>&EO@Am^D1*;4o53fHU*{ z2c(jcBJzlVOE+O-`nQ6M>?kq4wpTggpTe>xUzxCv$knCkPq)8uOERBn|3iE1F4ZuD z_Ex9L^*W2Y-jp^l{Sf(N ztJzVZcL9|eF%h790aJH^W~bM;#{Wae;x%Dr8H9Lt*~*maMc-D5s+w68#MFJ;c^X}n z*>$CuG~((xOn;uJeW~8$>UG!GFPFXy>5RLHkJhw5i}BWYvK-!6LDvfy4U%Yz%oXK{ zDud5h-vNPhtx}=4(|5gJ-xy4aX+HOJOHWp8r7-;Kk0#bC*qav*2nf>dWRY5x3x!b1*B1mZ{})PCIcj z2N+?bfc}Sr_V5P7Rg@$8I%SKnK{U~b@S327v*?{~&>lAsS&Zp-uC z&Q=ptSGrUSXNBau2fiYYcM3u{#gc9|GVyZ4ZK;fG?|hatRyriP>TJ&zXR;z}n7(3k z_Y%3}D-Z0IpRHB*)?q-B2OR+grb@}e)f>N5%T4-)4#^n`--kcRoNQ-m22v;cFV;&; z&D8wZeSKyLvtX79D8%2fOV^x!Hknxa5Sme^1vl5ZJa7D7pQ&Lj5~Zv1Sj)n_S*DaD zmkfLnUJC_Fh7=&fwi%I+zV=j0Y+@l)se5`)C-#cd9@f73ksKY!f=Dy-IYp^j^wfE? ziNS7*MQfqo=3caJJ!A2kYek#Q8+YZ7b_;U0{-C1)*v1|Wf_!7PV8{$$15A1Aqz$gi zF6n$10%-4IG{-x6yB$#XIN>awV^)S&Ub?!di`-#FOS8KB?_G9Ui)&lBE|mmZ&V7lG zl?`~z$P3y)&MMk|P)FF|NDvuk3S?-k3v(hqhZ#4ClCw`;mOauRbaP45383-I9Kk!A z-a|?|LsnK$a%S^~<}C9a&rl@PmlUb-9H#G^h?!YOUO6|OlMyvGqF=zyZ)ckJGf4y9 zp%)`ldB1t>@yp?)MxslN%cZx<3|@Dggrw%1WeBf5=1J0oYjswtf<|v%+1#);@iEx+ z)Vafuk)n1%(|lotR-xw&?l;?8-F%biJ9WIc}w zlsqsI8I?M~GhH#u#QC=sX$HlBF4+~joKz#+cwRuH0e z9+y`A$60$4jN%W7D2$)u{MXshEz-!Hwf{(&P$Twq^`3|3-}@HL;8YW`4kP^)-O(br zA_^tA59!yWYAz>Xw=GqkD(CK9f{j9yXQ4JUUN`VsQJOd5_mw(I3*skZs zGae<-R}9STCGR{e5TEWRj9IOS!kp%)OcFYRuh@SzD;#(SFScWo zM5D;!^*RpkB@3mcm7!8K&DKi6Iey zQbYZ-el73$D_ECr?-#WooR|sbME-$0XOG

    M;pL8rb3KIy5yf*)YkH$iGCJvmuXuJ3w%AWs0bJ8H^eu2MN#2 z&2QmR*aumnU1I(?Ssc1v^3nB=3AuMfBj|`!C{f)gn4#t}sk;<5XuDW=2CsR8L$VYw zX4_tW;FM^i?MRdu1cvotP~~TNhd)+A>G&g2gr{&tbX(KVENC5cK$bStx04#$M+sY1 z7*X=rFUve4DYR46;M?O+4*9f(&FJTlsWF}OW z{*@9jY{^p;&-TGOV&^@_O+~520_J`I=g)|}n((8wzN1>TMVwOPTMvGxmTg}!PNRG* zo*O*PpP(bymJN_ZV5KX2^Z>pDW=e0Z==^?69BY#9B0zU=bnwhU`XVNe=9|`4=7=y` zWAO3-;v<^&BL+zh;FT%97f(f$qbKGL2~(FMJzMDd@)zBqM6m>hBanNZYW30fMeu}Z zIx(P34F-1WyCGs=G^CWFjX!!`j;GpJxN`jhV>1pRGvVO=f-8p3d!MVM%;CGrZ7EXY;Pc7lT5B-pg(Q zd9;_Ka2#msu27pWS;sdSU!wvdID>1el}&O}W*84OJF=ubM@_#NKTRimb%;MIDG96@ z#ogS{n*92rN%!7Yth}RbDkGd*KK-wwr_kcV3r?b8S`?Gl#V;LL+_CeIr!RttWmfXb zfFRo&8%jC#Y`Y9kMU~H`ziGEw_3`J)*cfZXTfNQBm*HtfU*8WpAWjoQzD-VY#v^`= zP!YAZ`YF~FkA>y0?GVXR@vnKW%7g76%Xb=HO!Vl9U5UOk5e{-9cWdezr+bWb&=V@O zBtD}3(9opu8EQvYq7bQn;99HlI(iB9aGS%hT&y^@#NtbTPfKdwHL$~Wjnth8Ugogh zCZLYV_Z?Yzi4ho6FjDvOxZDs+YZGFeZFZyeX9t59KsAH0&EylHsQrNGmBOty;fuIS zRW=Rz?1Xjq&q9XL&oaAtqV@Vi8%!8UDHQoNkvhjvyorT5Zb4W_VUA)ioFoz^1hvY!$m8*@_Z(j}IK-X@mB{SCA~+r80rG>BJS2R<<3uMYmKAFdv}*WF7WcFwuiVJwkEjDN_4k`oWcBy#A4 zp*a0)YaVgzv(SWw);r2I0Tdjyp|fpc>I3FDfvZ-X+_l&ovM0oN$MfmA92_lDlQDx+ zn`;Lov{>5eucDwL&A7&%M(Vo7?%`!YLo!|>>rJ8VocvcJv&=6N z-AyI`6<3ZlH%5Y{AbjQlF#2N8*9d0<>+n)!~2J_Sj)}ndt2we8Na_M zG9q*ql*qvJpjTpCYT0#Lv`m*+75*thy!JX=UzmSeMcn+U4P8!3sCBd8#2%(7HSQJ( z^?x-RhnxKf8Q6?Vc95DAH__SweqH{6*xv!U$u)PQ9|A`09X#I{wL{jfWl-Aa`U;>$ z8elV4pt3arC5%9bMOpyw^1!S4vmaxit)UJVLqR*|D6mJ2x7_&Xs-Vdw+GjXT*kpbI zt^1r}jmM+tF0G9`AfHZJM3ZsoNJnbkawskBFrFR%YLaujcXMMnRn@uL zJUBi;532r@`3na9x42{bfpWkIq~_kz2_5Mo4wOr5_;}y5?RCfK$VcJdg-=F;xsTDq zmzVoINXUV2egJrmH~r&gzFir7Ceel!7tzRGJi-&>8HjQVAU$a1Pj+ll5A`$jmQ*dW zIg?y(r<>ZKAN3%8gARX74@z(Q)@%$xMpv@SCHqGl1QD{_scummnxLM(=h+ly5C#&6 zbF)Zg^Z_(41$0X#O~BN5z<4z^KYMg*`~VEe-WTd5SYG8j0@3cJU!r`&ec%2B8z}?7 z-QpkI(F~!p*=~aAwAKh{vhUI;*PEWynuaMaVzE6S81Xx6E&V{!H z!nh2FfygDVpW@Hx5~aM26-~b$nuFfSAP=U5y|(Ovsj$Ng>WlKZUmCWr2Ye7h9B!B_ ztDTDss(kl0#=hnF4iVsE?6cxNipgmG@-cJGLu{ZR(I}?~xgtXZ)xCZ~e=D~aQ)|FF zw&TG($kP^WAdqF!z~w5>aF%Vj2I7X{2GoHS#@$((nl#7F)nq;NqIGESdPxRYuxl$D zL?Y3x;bN?T{Wi@EKZ&nh4#9D=oPL~tt^8^xwi7K95psz#Et_^CxAJZVaT!M6mz91t z`065?U+lX#8_&AO?b?$eU7hHKKS4(@xOd82t}F>&$@#X_v2bMM?0aUsw(5N^axW;C zYUpOn^jyM?oIKU!Tqx`6m|!(d*jAa4$8cU_bbtRRm3&e@MaTX9vf*G~cIex2VF8QG&koXc`V z28zfZh_U$H7_wIT{-j#*T5H-Vt33Xtl8pf)4Uz1X$j&l0zuG}M0rUmB&eT@;oAz<< z9rRiGr8nvmkG_k&v9$jntC}uIofgS5s!EYVC6#=q@+X@;apyw5hMsG8ucDv(B2#Hg zS3;0Mll>Cv`TmDI^2poX{-=)2iV9sHkwunxrq#w zLKvWNDNbG%el?+nP#$0ut6f1nl zrq5t;u%YGu>n<{*jo#I6tbOjUvZuQ(HWVXNH$SIObu&G!SX%pr3k$NPxInSPRTdz~ zGgzWPU7i1tEOs&^)AtXnEB?a`#7;nmP$;k8YE1K%D!0}y9; zMU}p}4l~|R*8f)*!htWpVU_Q+Rh+CsRqoqsr@)ie@5sNbUBc8lD$%K%5_%^rZoj}z z>^v-oxkWW_;~|hU%oPf$fmzRalU3|mUbmk%ca@!aW0c9@@9a%FPr_c89#IQ25pE(w z)W{JHQpEF`i2iK<*!{nuUAi6{K3NypN|DN}c}162NY`nFal)V7h%pV#$=p|Myp7}+ znDPu;o~RIZCTpc{-oAh3cRvM%w;{K{ucrtJ(5;o!qihgbL{cq__L4fq8h0@9DK_f< zjcsq8Ue>gc%WN616w==W87HJNdyNz%k|7>1;S9{F4M?Tfu$tWWv-W_%22_tV9b<jh^)_gUl#!?gKjhD zOUn<+?Jx78+zv503+bH8G&26&+3(n<4LMQkXt#fUEaF2T&a|z|XCmg6xLUXLYqsw7Nj9Rm3DG^Z!2+gznAz&sUV1v3elVL5{nM}9cCLW{#j|&{v7owo8NiC z>Su|=w*B~Cc!})xdDy;8aZlLm!Y%WU#YVz*mWNnb?c%(UNYrL9Bc;6B*UV&sMQt{^kIMw$rwzyOslr zIBZo!iQDmkDgniITn5|I+>I>}c=f)iWfg1FieAIE#}7|GpSJzmX)R6fXApkhO;4bh zyCbYiZ)vn!zES)chptDdnknB4**JHtz{-$&}B9?h@h+jszBD7A?sNF$Tc#yn=N7=QD%UTCZ=Cu4z$8k;X(SADHW zpXDL)ZbvP9t0sIbaaS@m`mOowBB@SZ3Gc?Sq;Y6H2xh^`+udQPDD$?y$ntY{Ca>h! z2af0$NczXp-V}I!lWn~r(7aMHe*5F~W3)EZp}jPBeCBBk3xnb=hG3bla=Wg$M%wK* zp25!3a+vz*y+FzY{ec?e-|1dIVhUdF3gb^_@_o`ML0qjpd4)jw5b8jz1^iYB)Q`Y0 z2m}gTh;>G8GM_23Ou(%NORLLeRVsCd<1`B4pOTQ1N?-J`>?6AurVZyl!$%RfuHJNs z&k?YwC1QLUnsfb`{-fxuADU|WFpeUEQu2TzITaO)mX3*(h=2hiEue&mbjK0t7Ev0e zq9BcQk4EW6x;wU!V{GSs&-(}Lhn=(C_cyNVb5U?t0&(eOvx0wbKV29I;bCprm%?k) zM4h~O6NDZeWZCV}*#nc|hn3)o9M4_Et(YrkMzwm{h(O z^MJ4Bn|cNy#G6j@68UiKkXV8LfcR1H_U=U7%RnTj74L`GmA;uUCF9(Cfep}FcD?#a7 zvZ|E||LP$EJ3|7GF=y0o{l^LJEl(X1V|F$F$PKGjYLeBG`t)0&#r&>B#4KEC7}ymJ z9(Mb@PyIh#&G#SARKh&kb%z&JgOJppZURh{c1AdYPZ8hxI9%j17t9)Cj9ysR{qxPV z&0@TMeTD~a=Xe_+GI4qhfAq(ME^zkqNi6;qHF%<28RCgMo57?Nvb;Y1O!tRbSATg%x;LeQ!9 z&9y=D%=Qk1tB*>P=Ip+7mNEINig=e)0vF}@2LFCr=R7{Z&v+E@F1=#7(2L94x!P=T z@)CiiDhd+7A`uQxX_Ccm3MIP$)`|K8Yx!AkYXr?;#oXH`V_ z-zx!;J@iTT$u(I@VbP`h;6(Gag6IS|^6`g@jkmQVLSc8*#q?_wbQTtGUnhQcv0VQQ z>)cG)Dx0x9zK2B@!EpSXTn8U=7kn~G48e*lKOHX}bJ)x#y762j9*&)x z5c`xgg3MRlNjPM*;Yl(bg(f$!N%K&7Sh!=>L9u{ICy6M(XPV5l0d0lnm@*>EHw)6b z^1N~LpPR6mr8mRFiFDVaz}zqo1Sz)bLhOa#z^10d9?%kr)^^PgljI5dns7!j6=}(sqZZ!-52-I0|C|rmKD9= z6kK?fFVi9N#6iG5c2}R3%>XTVzIcA1>6-e>*nq~|G+xh*1Vpe@SAWxg{NNL#*f_wQ zqkRbYW^$I2*7B5b=^ICyAg<|Yq1f}Q5P^XM=>i)JDg5WfN1%0%2)IO2krd;_Ta)sD z-RiUOWv%tvhdhDrmx|IBts52=pHA}AmT%C)z1zn@4>L>KTLrm-Vfqla_a7PCQk{lH zw{JZ)PnIRfJZdm-+iJ}B z$kc1jiFY&ZO$F6+U(b94Z`BInYX)Lbh{Z>sa08OoJO=Nrlcwe{IS*kpVdfZ#UcNO| zDv%^l(c+qQH>4QJtf*}2KhmFU(V0W<{g;aRgzAg?y?}MizwK3!^0~s6n32l^ULbM4 zK%u{C2`F}su7D#LjZ9PPwqA*rxyAu)^2#a1+WzLTk=lPzDqYGec*aOz?u#A#v z>&r`hOv6kbyd;!oW{8-SkTaRC*ltd>e0jEy$c#&qo)m*i1eTn2Ejw&Ew zzWu8k5k+t106$R(_aCeTg?_4g=p{YZf*qt__bQYwcyFp*g}Y^pE`rgRt2fSShIi)j z)4_#QV)2)5v(f=%TAna9J%_RER$jrM2Giq?vopwjs9G4l7$cf9Vj)7lbCuY;v31;Z z3w5H)2wJ{$t3dgVlCp{T1NrRaeOJs((7PF56j@0oud3O%ssEQkR z=Z)~VYxh2NE=oV7;Y7-2jLIfM?pux0vr)r;ZGxbef7xkaB^smUf#~`*yRU$nEHudP zZTWEW6Jh}dySwOXYRpIITl!BblE}}O$#J>0%u z(uX{Ci$-i*)hbE*2@ z^wKuo&Dr8}V??S;!V`}@mmu>EYzb^7j#S>?TUWohP8~4JVb=d;gDYpb;A^M6KT_p3 z{rJQwj85qvsr>XoJyq6FOL4pVbypa}vkmdb;lHfkr}^@&@Xvs`l1Brgm>A7QIW z?+vW$fOBc9onH>PxYylp$?;}i%O$HLoitOcPvn<>N(POG;35P@TZ6F2H^|4@d#DkD zO)j(Ct|Hez+_EBG{j7)fGDF-7PAIjG2eSC%|Sk%@Y0`KM>MVkl`oG=hscEY zdtR7aSLl)5-pwFZs*k~jYf<1o*9rYW4n}R+!RIA5Qimx@4DKv{Iad0IPeCFv2|Wz4 zH!i-2`3VM$hm)3snJ6`vF2r%MwTYy$`@O0ZDdeQ0VWDUPjD3m;Y#189s0*i$QZoKD#dGK{w@EV znZ*tT<9j6qPV2wRhz@(uE&5l(l9F2bqo`r=+Zi2`bCEymWXUUiIrm%dRxh!`5E{3? zZy%CKIBU|Se)&qRicg8wV&%($;ATayF1AG#w!cBcuX_!vqr?>)Uj7g}`Fh~>>_zr= z=ed_M#mfEfb@c`V5!({KZl|hel4T<{s4Y@>)shxwKmEc*E=@6qb7V|%AEhJ~C9py3 zyS8sd!n9f48@>~BVoCa6;sb$EuQp$9K~^~FO5mnRTI|i-xl$veQKMf~3+X2UBl_4{ z1=QD_`p;#;adQclT=ws4Zy6EY>)pm?+B-ov|m@p z^r(KwIIAHl)K10ht1Zvrx%4o)UFlsyl=D;RgtWS5F@p@_jsC#42JNhdYrUTH*)>&L zk58$5KW~pRTC%9On>X!vnl5Eeni@VrVtZZ<-?(>_o6cAHxOVWDKKPc>$zZbh24>$D(AB6q}r(UEA#oH zm|$xSia)U0x#Kh>&$n53GH`aRSE)zmwFp9ZPsUW9GyJ9UQDd{|A$t(ZX) zA##-%5w47tv)(UvPRNKR@vosnm@oHxLFb!ruqQ#p*4WI3^-o&nox z|7RdO@}^?qK8pF5)3Xg4Fy%Lg35dY+OJyn%dVTNhW7;zcIc^X%D!1<-CffG>9jWxa znH3m_v%9ULpS9#xx7%8DKcQHWF~RrA1}lFR>P<%_0>;0WGb`jM^ps_Mw(Wovv?!3E z50x|RMsUyexl6v-W_0v*Ht@((phs=nAbk=KQSe;ICamR3c|)X?B$0o?m!Q_NH3Ule zHou3^KE50#4%%Z)UmQiIDu0u4Db}<|aP|7g`;ln5{@npP3~8xYOU&;emHHKZzfovd zbpEV`!elhHnmY-&-0|Z%(B&Sj8oMuR6(7dkNTH_C9+c+}DZyyw;OM&*vlxDlJ)Xb4 zMWu`4fsQ(5Ib8O3uT|9+h&qwj4k(;FoQ6->#1H$dd!u$!RLoD@dQL9E*DDK1HG+ecvMa2Dw zJ466Xrt0&Ksl@hr5K}|7sffV1E)FQV8J;XbXvooF2i8X6z%F!>gQhjg;vE6SBG&Mq zfh8YpcGZvP*RXZJ8!e{{)Bp38-hA~_mtwH7l~Ly_b-B01Qm!=cHDeZ04IM}5xplK* z4r6VP!={LHej*`@n^k**kt2Sx8ZHR(-`#Mp!Blk{XMsHMO{d1{G3*R)9j*cB-!KDPRPu2Cdn^^ zuI}&P%Kl(UY_q>|EkV2CvgX!5UIYqMBDTE?2^a3YsFbUF&h=L<9LQKAp&>zfC7Yw8 zqk{^gEIOaSalMdlxf9!v+r$aqZQRsOj59nWKM zg~EP+@#0g$y!<=zc?#~gU}u!eCB`Y<>sMT^i17HCQ~OK+uoY~ICE&d5GbbL&Huy^C zm%Lt&8A{FBF~~ie<$L<_b6MAKqaFH zbMt=1s)tO7%7Us#Cm=}a%6p5^F@UGd)qlAtz;34yn+4oCUD=GrDKV>HOU9#Ozhu!e1vB9+ zDe)()$8eW(2?SK;%Us3@1BNtTIyrQbdzJwGcW3wtG;NB z+rUB&4DKvwzT-__$Q%pJ7P=FynyP$q<&Va=uRJsm@jM|Py&4M;M#@x29+mB9xm6xy5^~BH( z=(t@wxKQrS!NM~#>qp6SCu9;qh(hl1xSet>@O<@qj@irbEQZa|F0UEtvzE=T+eB-v^fzQHRx5J@j z`?*g0c`yfKG&NppT}Lv?Go1CIvv3)u<&^VA7|_Om?o=uyetg^OMUZam!Q6H)0mJB; zxGbm3H>Gy~y|kYO==)t9aUPSP!qs>`nYR&maZ6QC09HY%JYx*_<;FK@#inj%xNd_| zi>6-w^y#xqWO7{n1LOpRs6Hfr{r$XFsUp7k*WITlKbiSb@D!1csaA&4&*U9EdQ#TE z7rva4rL->>L{r|RRI2Zp3VU(hPW&nw$qfFkKzSW-J^5f4DxSVVcQU!Wp_kHqY`sS4 zFjy&PDoK(rmz>6tuydGw)Jy~D0{%x{r|DN1tnT)Zq47`03~!m8!|Z*zm)zF6Nvb$Y z7?PyXSSno{Y7Q08`^_9eXmU0Xbd?ktVW6OKIl6p_Li-^!}n126c# z#tJ0lkKcv%R4-_6nP><^gcL@89ju^{S?SD*t_V?i|=kobuKYTnjx;3SfN~nsJ_$N z;5(iSjB-(8cJiJ$xwbZc6MyYOwpV(~2BfP#{=qLYEm!fLeNv(1QS?`dfJu|GkBzlA zS^3MzT4G&LB`mUsZQJ_Mo0)hcea}wuW*p%*-M68l@1pIv077@*=iPO2Y7T?_pxpeN zD38MH-ya$0CDB>^vpMSI;FYJ%P(JH0T-04KAI>ZQtiY?gmloyKm3x^D* znp`k${>$RoH~!yY8_ON@nMOgykcXFqY~$Ry8HXgIQ~?o;V8i!8S{p07L3 zuuVTT@ z8{el(ul{A`-ae|y42Y*ObGJXZu3EqoprefaFn(5v{mH3SzVs_URxoWjsBy$Ysu2m0{V@) z?hw^_w9RXS8&1U^nOHxhs8}aUS;=yE(Z}C**An=1^NxJB%};)LU~7HxLC(ytVA35@7f88Q7^pK#HmWVOjg*X-Q0(N;cf`SI-n z>L)f3bYi9%()st@hwR9=B?cfH8PhBW;r^)&2F9GfBfr*Er|uRws^KNv%<#sQ8A@FY z%tUPp$!R^e-8Kr5$h;BXLp#{t#qh(o^%dFqS+%ZgZ(&az#+f(p(#>wEJY%| zsOIz()D^&2fX9vdGAj(Xvbm=>26+|*9G7v8G@k)VAfNDc3)>Hdn75Vvo^-GgOxmiQ zYq2J!=*Z3QGS)I59WQg8yhIeTedz9#?zCL8l_%ED&Ug;4(d=m~q`FLDb~gS{SG^MT zap3cTnwyAH=$|T@UMWb$BGKt!hlP`WWW_Kvw|fB6CjC00>u|8BQ?Z{>H+Ik-;!8Dh z`|RY~r3UQ6qVzelU&tmS%2~o`F1g)xZA@j&LNm4qI3H%Z$Ib|`m|uHT=r_7m__ zuaY%%-BI-Hm09H72g$l7#;jIvmG=BWAn`jwwp93Tnka+U+kJ{Y3m7v5>b=c{;-Vac z@iW97A7;AisdWRc+7y)P5W;au+?ZTaY1?NQOw>DM1nF26)TA!>wjO;TJ~q9nFL4H8 z@j_}jL;D85PTV~=3@v5NE1WgMMYN9PgP`=Pqg;!%?ZV5cG=**t;1?E_XFl2R$vUj_ z6>v%2ZSsco`X2JpEr48r}aI0=jv_cmY z%3RjDbT(lhib9fgRo~_-QUg7n?`<5m=PmOP&!x@1Ho?04t97syI-~C4w(r)ZHaE^| zL~Zg|1NzOe;{FURyhJ}AM1J6wrpn-OR}$c}@SALgv&nYMo}K%|O&QoG#Bk%N{T zsPlznlmP#z%7bq+9u7A$xl`@BG^58Sdb)lX_nfe~#BHeYyY*bswE}`#l0PKteEO_Y zlh^{u2#M;8G8VBYqPq|Ry9b)TN6BX=JTa?~ZGYzduj`a)4*2@*5jo+s$^>ggu*;Ef zzgW~C>B=@;*9&ClsVYkWcm}#j$B#z>D?N^Ww^k1tmB(`(?9}=x44zG|<)?`^;y!{~&)tpj@Bg7z8 z687^8ylJodg^0&0s11+=gowSF|AA6Ml$+auH5;w;l~(lj0bo4y;1SvI-)~N1bEs1#jDW+h&c|Y~5Pgu}{Oy-h z^7U49#A*G03Wo$aWl`_+zM2+5STJ`B36lFk7@u=f61WKFD7tMkTm ze4(rSe8R6AHzp*>>?hpSIB5KL*x|yD!qf}sU2uKC%QilUWlrbL<0H@-QQWQQ_JT7Z z?9CtLWTV0WR0A%CPNQ6O)o6u;UW*S_3i)EE_56D*wejE zf3!X&qjr_^pVXaisqAUM>T#D4+kG5InU*>SXZHrN!%9Z=!Uo2)FgGZtQ%Z@}$g+TZhC(g1~L;B+{yM;NPH#w{B%bUsUqz^#M0TfK`cMY*oE zym`6?bw|Yvr4vxS^`q5^>&m}=hOP`$H{BXl6JZ)o?QHp@zf(dZXl$h(U~{oCtXq@M za&{&sqk3E}mLdY1-8G$NRUZ0Mzsq~t^&HXO-HWr8D70PT4=I}@M7>CIiUFHT;Y_V) zDwNA(6XQK>-HTy$>BK;IrWtKC-@u)?kefoZuJzf#z} zD5es&K8p_}f-U>wub!D!h}<}@{>9+23C&dgBQqOv?>;D{bBdm{+T|pZ7UG|#+(>t) zLLmJ-fzo`h5=;YJd4uNqK)KAK^gbH@G39zJbzgl=z+gL5w;V@vFw3%>_+f`}`7xlX zj9EXD=w2txki zvB&qGF&uGp-){*6o!?o3T6zG}qcvqtbgw!bdxW+0vhm1Y%7|@)CPsM9!8}N!P!E`y z#kd|e0J%VO0sdJrvb*ZF6pnV%OiiO9nfBSev%_95XHhpeC;#s?`iI9wf!n5cspn?? zJEQgWz#l|!w4qTrJWhHVVH+IZ)yO0P0)h@TjXUxKF?kN8ccO56BsK+*;vRkvLapmE8)w z(6Y<|X5kJ2{UMGZgq2T-lAad6^LuBH43WgY%?Cor)1RJ4N%e=o;EN zY{q3D>^%BAN1_L{ZM?(lv3oYB|1&r0DB&I>MMC1nd1H8Hne+J3+AGwJ<^rbiCcEof z&yK!)qvb<#WIS7cFbCcpK(y4mH)BI8TwP=;&+bN0g|7|hG(u)Ihkz3jQ?u5aqs4%~ zj>@pTt7(V=up&{=js@dCF5#Z(|9jAR6F;Q#K~Kjt1sd~nc!ZwAbO<=!To_LWe{WN} zOX0CgV2RV-$5{Q@Znbb0Yt?_S80eJHa>)4@I>&q0l!%-!KBJmc7deCNy#!|QV22}tGFUIj}s zg>aA9!SJP&#BE{WE0`YxLssXZeFes3>gOLam)|4Z70)ih{`(%m_&1 zU+ztf+!WZ@m%on7taVh|&JcAn;y=UzJg*hQIE3@^piZ36D<{z1KX~ zy(VkaFH?gbU`b}&&*@P|l9`=PSr&WMwASx+coz|TzvwAiAUfz3z@y*@Yua~8!o77} z=pGjo!xe}TRTpo3{5xK~z3^~MLPe!|*4%c;3zSinbH9EqKcb^+OIJ8|F#m5j85qA;N6=UwopPWzX*8qT`%>CpSnT_Lt*OUS5XA^ zv;xonPQR5kpLDV#^||!D9;}1-P>$APglR`*L*@%`DIsEXWrtF*RJBOmjH?Hw9nB{ zY#fFjmi|gJ29A zdc4W*vP&_cSv-Jt`_=WB%BR&+>t@v#nYY@HgpEB`IogF6%#;ie=oA z5sfWu_t7R-Ojn}*Tadgb6v)^Vf0PN|{d4pusL*NSgx-7Mxqs0eFU_T%i$ICicI74g$lE&rT2d3a58?wVBy08>0zk-K5*hA z2GG|3_r5^cF$;|TR056*cISML{Uct^HND*DE;|Dh@K6>=EmXZ3-x=2MWF=eRCO=_T zdWzcc(M`+-*h3-i*MJAb(`g7n5wi-u@B3j=%>RaXze_o8<{DYrQT|#sPh>ytAn?Nv%B`AUzBRPPoRh#Dwlmnf^3f6Y|8T%H;~6cZYwbc8)o)ves%hzZ z;Z{hI)Ao+lvna{A#^(BtGC1SX@8>)r1t*;x2y-!h6Xh~pK54&&q{IMPN%dscT?AtP6+jsYM z50BEN)T|?I!l$k$AH>4WRoMt`S52*Q6jHQHxJnLzGtw)Iv@LZJHMIrVdw*L&(&LtW zQKoRXp^$d^2E;qJ=iF*{&p{XrLDg;P*^|b##2=s^hv>uN8cEFo-*&NBhpn?Ait4&6 zi8q?i|Lg)ms8Hhv0iyc=$kq)xtw^{Og6Xiy@V!GUB;?seZ$$UM7k7`oF}pLm(FQCQ z(cjIvC^Lgl?f+Fx&s3vRsj{EY7Y~3Y?DDou)3(GygQrmS_dko@*6G{Bh34*E*K&Hb zY`N9f%6)*^7`emTq&bIeT4n+F)zNL}5NlhL<(-St6G2FB=99zS_!?3fuy1ro20`sxF`Zj=K~2Yvx@? zBM5b^AaYF`k5PTk=C`}>0dTYU6#*>wArV_JIgfqjyNQT!(K7%|z#Q?-r@t?=^$Ubb zQiEy9+H=7OIVyATpXjCQf{qRU((Ev#nB`u~9M-~}Ftb8Ldnmh-ThQ+1Hf`r(?k9`1L{CWp95r(2t6asaQ!(s86CUB* z_Z^60N<29lc-5XsNsVM9R&*rg@(7Aqu;!7)^(yR$zw5yE&@1HPuobZ65QXl0Nb_`A zw=2VqHcA^jleGc)T9lZzsSV?I$8tRVYLRJ0*iLr-A#p|OoUCkZvC#%v^svazV8vr* z8C+?`tYX(6y_wAh4=H}7+R@9CRpT|ahOwXSR<^b6$2(zYfbx9wCy}j%ucy?O3uXpD z?wdK_mi)HMyD@yvl=AbFQ<~%tIAtFD%dcnu)V=5Gl3X5>mW0Oaj(a)6((Wl2wEfS? z-l=2tUmWw!aBKO~S@8q#0ryFBHPgNM6N8SVlQ>EZ*0a{;+g zWXy5mGc}_9rw)9X235r|Wb-xdLD=n}u)lUgp?kD9d&L6$>T}x|N@2ckpZ^**@BQ)} z0~wwD?qfA7-8WCxg%H+AmB7DmC|$a z~|JaHmP`EhF_rVwNYo6xp-#8A*(`{?7MXSN?KrRha=mKN1e8m~JlepC`2^(x+=#JRvY5rZS=>i3 zV--Y{r@<2VBq<*>PfNu4%I#g%3)*@hBhiR9wk6Zwv~woMAf~VBd!&~EG^kmjd93HY zH*w{NTQDU(LchDrnk(258SA~fdal)<=Uud-sII+%{3eUSlrZPgdEm6g0-B!GVshOa zET4MnJjXrfJHX+!SJ2geNXYp#k8z4< z67!mGAmL=rbbjtk4&?u{3!^NJU0__C=oiL+UmVj$+gc<@;y}=2n^;r;W)O|FSRcssI#iR+G$X*7XBLV8$n?8SrasgAAH+;C7#tPB#6$ z`C%e+oZ7bF@G3DDZs*#T zms0xtyRy@2=@T8tzbI&BHKf;r_VDxqQC48`Y%J@50x{7Xk3y6R4Ze~S>qZ~Gj|H3- zWia1iUJ(6_<&FzHIpw#@9m=|9Tz6vSiuw(kRO$_8W&6HH9#-C2yz@KhhEj|P-DBTE zPqc&!-Kn)4mPNN$#nb*x4@cG7Tx$zn1$Nur8G7kg@!t$yaZ?_X8K)^tCl+K2)y!7k z74_GsKg&JW9=r_Ln2Rgv{1Fi%SSG7-lJEKZP1!i(x;^$68bq~ggaZA2AsaQ#N$<#&U@xT_qF7lIUDS!ijIUO!b^h{}_)13UDJ~trd1w#AD6Bb%Byl;I72B8h#vgk65y61^^(7%Ht zcJq`~CwBSVgi=Spp9>5@#Czwl907-$ddMkD;v--e{KX`y;wDMOB^S&wT`gmSExAjYbrLj-e>Z~UF z_xF@Ax`jKl+4UqHg@)&60-^aIKNCyEmRI^91@zc&DXVlw3L4+bAiMF7gx6Fo@Nu#yKg4XojktrbJ{B)D9e3OHEheaI4Uyrb=tv6gBbgrH=JWb_Ons2B%?Tc z@a@+pI?j`fcKv5jwZu~bFX>-SG3TD~RCf~MTwCwG(UQz}P$-aQruAYwB1(SBnriuJ zNwZ#NJg$+Kab!GXU#fqwHL-_wq$V4IFutJUf`Ue0C&2*kL~9fyvA?|Z3CYw7-48{J z4Qz*VUWHe@TnC|MX+cZ?6)yrx66>u*k-%|tg`(qQAGtYj7oP^N_)S|2LOnDOg8at@ zd=C$kV9d}`v&it1wghUgl56HV6T@EOvj{JnS^y_-)$cl-P3G9m0n-L~U)SAw zF1Lz44J*CmQ&j=>1XHQCe;3wMn4Qe!er5B@?SkK@&PbAB`*tt{ULIf6UIMy^JZp4K z06;D1VAu*Q9!vO@Y8c0jeX^)rI4yLm?ViU{9fsy z+o28UEr*7>&krDzt9=9><vYwIf zL1gE)_0YmQJ#z2D1z-jDo+D|&n4OvTchtQDpmuZ|2zaFIuIZajG-cju?sMMP+XZ3J zV-H(6hEJ$UdVBS)j)q`{6wanrdV2>tq@IAzfT__~;G7|O1o~fpDdHlxqbgLF0T$Lr z?r2%K&VNjclY8D>vbs1Qvw+#nUHiL7yMQ&zBWkzX5hc4qNSeW2ex#QaQ)iv?`5Wc$ zxe(nK%?6ClSN!wq$;t^J@6ZG}H$70#v_LllEn8-y+7$FcSk~Z(4(RqYBv(sWZU1M6()=XGcvEI#W?7WiJ48uFS#Gso~IuHzi7 zigZ{$6TVXa@Jiop>FqOmiZytvv5c^^vcum?UU9LVR|nLYyq{H!lAz_QDGR%wF}=X} zSkCk!Ue> z68t`j&%ADHtw`GbG!i%Z%I=DJp+QEgN=i|$GgfC}}#7%G4H<=6TVl}!V3q zB-)<_59;qM3VeD;6&POq<^jo z$InnVI=)4WJ+WIdvwdLN-+5^9^LD7}Adhy&N7Y5G%T~}6psn?pfZ(>b_(I`Aoe%w) z50rn}hzLe@sQT8PrGqD8^p2CD2)H8c128B|cN3ZSK68JibL7A~lMl{11bOvr)f)r@ zd&ihko_eno(CcWNV7fgB|GG7ya&)OK;olJh=#pLeS04gZy>^+0+TIK%Pa785&tmM> z{Gm{YHN`I)64xQj7$iEz@)FK$uKDr0zztL?ThR8x3~W20y7$6M-^BXtG{!8;Ge$8C77$_vwd?UKnH<7}@lj5V}g z@_vI=z1wqBg_&%B44w0ROUase#r6rx1JcqZy!(7|K3TbgnKcsa#CoIc#yA*5`Dw-P zZb||Xd#Dw8&hjHd6!gt3iJPD9ylv>abjIs?;C$T(GOk*{ z?%EH0*int1idQINd0*Z*Ia`ao6ev*>x!LTQ+cz`p9^`jQ)8-0vyI)E^ z1XI1eFZ&Wk^)L(#+o?`(Le_UF@14m{ubN8)! zM*LNnI%DdI%NEgMDz7 z%EHIzJrEo@!uT|DpWbIC^U0Rjo^)mWqA52IMa-E_B2YFzV`7Xd*#nmJ{%tQ0ke7(U zs(inOT#E@)Z$PWf?Q+2CAJT$b}>o9E}GR!L#w;(Rh63kz| z&+I80V@dRLg)4Rdo*-}GyGu-h?J)q9L7=_MCVaQB(~PEpBqVKj;hejf!#KSb>$97W zIYytxe0?p~8%#@a7oqv?FC$TC1RcT5$}o0Sdtt_5722D4b;yqa(n<;1lYSuN^;_h@ z-MD|*{%RvP5tDdUkN%xO00ZCCmNC(RxMRw8d1&F$!JS~PJ92bAi-;dlS2of631ka z2A*#J1pDyN|50?_@l^eP98ZeA$tX(Zt%ynp+2a;6Dx*|XqR7hL+p#xSl+8_wB%$ne zZP|P8y}9;v$NBuu?{AOmk9*I(pU?aCe!ZSA^;)T1$M*N}`EJwcnRTVZF}x+dvBeQQ zJMW|ShmkswcVE+G#k50aTD}nVEWd{8T+^EBl*UUzAL`% zvZtS+_0Rleld~c^$G&hWhJyE9_A%^|_%9(1)1!dU$w^(9HU)Mdnb^UUzWPu}J}pyh)j zEE~(@bW@%_BDqJ8;{-xplS#x{52Mg4*Cv?`&G!QK+Rn#|?sUHE+-VSwyQ|N)dCd&V z5Gncj*)aVfZ~sue7gqK9z*knYlc=lLE57R4Pu+T~@zFif?Qkm1y68?d2Yt;(QS!aV zq6{2kP1igyM3lJfJleS0J9RmU-#!zhu}#iw!RGXRDZGiq{A58s$<-OV)4^l67+S8e zWd8Rqyy!>;>lZaCJ7D9XF6aE`Vc5133EdB2O~M`5L2EIcratQc*Q3h4Tds2My)1Zy z7o?(hkfU*7{T=l><&U3RXYu2+Ux?eAnL1$n$!UvRjs$98yN_t#BVFe#h5RzNq<%sT zKY?`2(7mSfr|1Hq-uFLtK6KZD;HzA67CqdVoB}8GaG#xAI6I8LIefFka)oSp*t7h{ zUtjbux|7#Sw)#J6UR$p|0GF@h%t`CR8Q|uN1yby4?nh+(!p}%#^zq}=tLmL7TxOyE z|I<8pFC|hp1-BWIV(Po%%_q!6`^H*f1*c>9UkFd6g|qGE)1;O@P>T~|YAIs-BGbWd z#Rdmo7hD*o{m<0wCs?*Om_rocINNut&ohRDIlI3;8Mzx)`N`ai?al6;utE3Ni^(cR zft4AA0$nhcpI~>g$8+a_##dl;!7^nU|ELIKMgI*LiCXTj>yi%1^&f_Sx#(@tdz~lo zDj+j@`!(=$-Qe-^3VpW$qjp{(slB zNVCpQ8&Jg{KL6wC?M#AXxsTD03P&sUZtMKvZ|BFSHM?%fF;co~WV-BUP-8=WP-=Ui z3Cp|Yg5#NIY|XEc5mc-DNVjHTQfmghqOP_;i*IFd+F>B#9SseirNs$<$K(uq;0F(T zojJ_PlQX7kaw$YW!3jnb*Ne(I&`=vVnH%ux^qYc@U{0INfTB?~7bs_SKYb*Z3{+M#Gq=!Qy>W z$u7&o2p?S4Fw`Jufk@6o-2R?A2&29k?=A*hU)Dj3ye;W;(bhrf20667(Ao8Os!lf< zU;az)T6r_K*#qS+sx7gE1LykDQEG4(T&TDD_rAP>o7JKxIqo!!?gi8#nT)sC$gYl` zGG_N)qVW*NE;Y_rfnjD;a&7u@)g10p^W;B2@Xb7(=tZA4M@%E|@0|kd_|eP5<=x$M zv`8NPv8^PgN;mK$V1)&6f@EXOIcj*;!|*IEESr^PkJySF5o`lj1ikDF{i+Uu1v=%B zOBS#KQn3Y_{X)%g5m5JkQl3dqpadkcgDKpOUSF^y>+|z8pwJC5tyjels3lYTIzBAad*t=oPg>xvn&q}d%ulal$f#fb^(X*2X01L2Z z6M)~?S!EYYE(7cgx^-Ct7A7##$XCIk0JQ|lL5q`93YZtVLgRZ)KO~sq<2?tWUo9~) z#2D!6l6B=M4Foj3?r`fhRxD=`t@9l47-W|zy6i~MGAj}26zwKVZ)`GOtd0WB;<1%o z&Z}I)Ovt#6b@V%}W ze3M8e=*C-}5Z~|#2CX#^HE8zyN(XEGW*a8y>)`3(&tF-|Xr6EfrIJl$i&p8^3Qw&4Dx{w%AF5C+ zq$!v)4B__vSI(R%?m;J|!HyoEjp5xZ%DdYxb2A8pl#Gw67b>XD#Qg zO9aR}!!`vS{A)5kjceuec82zhT!c^2?w>0)YUYP3dq#BR**?^%kCFt|!xi`H08pl4 zsqIliUFCC|p8nU&$P!g^&A(0xPMneUD0kK7$xB(%MOVsf_lJO)Y62x*duN*f}{gLqTr@4-UX;CugnK}%^FV%=23bF%l(;qP^(!=Hkk(Wne1M} zPUt-2BIQ~Xx~u+FTM9K{e065-boQIT;!MM$Net0YK`ly9$tMfES39mEA?9paafGOL z^h0}wc{uT2_k)j`k13Ki0Yx(BSq8;yAA@3BQK!`5xK%_spXC{;h4}WrIArZ*IG)d1 zb9^C8!I;H;y%`?mel9%3%IY&cW`}LP{1q@W&ei&hS{*M&H-APAU-G1ZL#E^H5tijg za0;Af+yBQq3lW@uH_-PX^;1xmw-%C}L;-Xx;IEOm^N{k6j_^QSlN;}C>`QDtg-|f1>Qr6 zhG9JK7AB+*$)K6xRyUs$4BZaF$Rtz~y%g|T3&3|*l<`_*P?B5ZNfHbjemXDu{nD^`K+I1K_v!wZg zw0Yn%>;>Ph*`$2`!xTG~;I`iLzdAoc zwjlqIV>s#3#N;NRa>etLm4?517=D;Rbqb;ffsf!(ugoombhU?`jsSytfFiKIxtPMe zv)#H#2WKGor6V%d3&Vc6dDLhw?;FSX*w*rjBRWA~<&o9ahtoa+#ocTO8@v$=>m$v& zr;z|;wu8}`m!c<2{Lc1PAk)VX)p#L<7AWTxCo#>Ft&nNF~>-teU(}a ztDk7gPW!Rvv8k6Z7S_c7f1u7w13R_y8}krLdqR~0rv8A8vLVaAxx%3Ax8(-2jw+xL zf3cGAKr#B0z_rpeEKuj{uaOJ5ilq7kupDPGt|2l`y=<#3v7)R}w+X_(q7O7TkrL@3 z@L@e3)$(2NH@faW(A~clW8MH zD}t|IzI5V?L+mYcln;!Wcz>`eHNTokMtfTs85o>?&qbgM3kTG7fSV@Ttbvi#Ns?X{HOxPW z?x2^!j9jL^`&?|-bKv_M;2y3kUv3OuPdvs&I_%7It2ho&%90h#c6O`1;3G|>Wc3;z zadp9vb;`sBn4dg?dKb)+)+ux6Qt}wddo2I^(W1Ph zBsidLV%X475~;hI-oaX5M&#kTSL^DZrwlc0x$P8Z@gtW&FBPu2SGWMp=H>ji0XUC;bZCSShPR{;he8#hdX-11 zP2st8x+HHi`p<<@g)7r3>V@Y$`?HH{W7J*~8{eFn`*VK$T3WJPufq5hoitvTfpX=b zjbXP)lm#E!w(KbVC^Q_%U=39B$+y2r*3Wf>H$L~LSzxouHp zp2@HOT(<0-I?)sSG-GYvw>pMX&b4I&i>NB(FvwT{KIpLFhC8;GkH}}S^Hh6nld}IDPKNq$+dqIPh>H0ka@Gx9> z6!yFBrKQKu{KAQu>6;6)bg-jh8s2t*_Ks6T-1i#B5coM=IQ!YaI~*W~Clb6`7|8G| zxI>%eZT;}Mnb*}hiG6_Ql9B6ITXW|Q1l83XvYD;pqPo(_M^j8LYYFN7ju1=yb70Gu zynnxMz_oEyCxB+`+>eY~E<5yOX3eph*A(H#j$ZXxq%vgn-Ykywi`mzErh`-K-@g`p zak@*(P~jgP9~Lj*w2L$Y^jzrEt4F&~LhOnZyqFkFABF9notk@{D*8r&orqD~vt(BT z>etL@pYClCUw}9Ik2$E$S`PtFvg9<6J%S?QZ&KjCy`B(eYA97_x&CAA3 zUsKWZL+U(^k}3svUlh)uP^-8J0@Y$_u+F#`EAbidbDTe^N$8fs`~4?^JyS0;_Gb6P z{Ah=vkl^k+^f2UaaK6itZ0Z^9X;nQ8sx=csCAI_Kja+sq6aK&Rj2e|l8@BTt@Who3 zLMN$cVE5W+Nh0KNmcGkl)VgfnK=IDF$Ikvi&so94OYC7H>4a?ut4l`DoQ>O>Ji};n z-HP(65tQ1ixHmq(08W@fj37dy!}boB%zsw*f`V+TLM-DP$kZKkCV5bnRx0^HMKox!TTj#w$zqKZW@2-xr)u z*c?prOU6I*cMP+{zBn*ECvc=6P;?PQYaoLyVmU)i<RBu07?!)L(HX1!O z3ByV}#*@;0*t(to^TT!J;_-z84d#~XF-KiDY$;k~Mhbe}kumJl#iM$(8ra4Q&r;P$ zeqJAccgjBUCM_#W*BJ=37&r+0eXCQy?U^^B`LeYmIW2`1{~EdXBFXBxytI|;VsnJ{ z>HH8+r%t;I3L!A!x%l=?<@M{wE)KSDP$_T) z;qx~8-@#5#3X0ms^(^dN>2d^b+NS{5@QVc3aDUe~6BssM>x1cKaN@l+BAg}Mq$ju3 zTqw>gudXU^5T9BGc1dx5kk=_5rfJ zXiwJKfqcCh(54ij7Y)=}EUQ3#A^$pP@gH0!2xEYok94EhhylAxD} zC1V%=y-iJQ@&`}vJ4{U6!&>*kV0+$@wELeS9&;Ym<=*@x zUt&R1^Y|*9*ThW?4#w{cbE>jdUD(C!#>EY3k-IC<&zP6DIp}wQiZTgIxw^AJ!K+Ld*cxtE?mmh z4IWO<2;At3uPT{Zp`d5HV8&hfH^qW?85lb`EV*_UUoFGtd8s12s;uRM5SZG-(Ip(7 zc(TkoHB^do$L$*$+i}^>f(=>vaUpJVwP=N1(2II@ue9Wr74Fcpi}q49*=~7j2&$r7 zSmDR!wM-JxWeLtfZq7x1X+}h+@?SgXwlyNqqrR^fEKQIbGmJO1kr#I<788EZFTijS z6stP~Kmdk;(fH*{iOA=MdaZg$PU_ZF7A#!TymHS7v$vE3j3ecQFUsrTu?(w)rqR81O>QSPf7+5j zu(7wYlmzd21Z}G3Yn8=!9Q7hm#@7T)bK`LfAa&c0AGHb6j({pV4QGWD^KcIZaDmYw z*F%7Af<7^kab5B=s6MlfqgVj>gLkwFbzrdVOsyw*{nact*f}k!FeY6{_aU}!rpwXE zChz|E6{UQ?l)0d;Uq`9R zeYpS2RQr|j_fXm~#F+bU%jQmto^%ixy8lLg5y<~WcZ2*4goIG)3~+l;?+b0&(T*JO zmosm4ML)-87WEAp50h91_KLVnP$88M(N3gwA z@L`@ommhv)yZfwZGzdz}`!!43{7mYvlinl=AWNFLR2|P3{iB5@I>3|5VP+b>N=fLk zdy&Q&m;WBLx@Yp6N4}WRSi&E@e)^(RHQ&U3_m?HSxi0%R_as>y(mp z@o-H|JOvk*&`kz6cn+=&;d_=kfMneewW-8=$X3Da3 znSc@z+5o-!V*g#d_ajopW*s`!kq0N#YoDu>$-|=-b4aAC=;QBkA(K!es+7p+wZ4aD zR`XL&Q>u_vzx$0E?-3u{7TxmhiTA*=P~%?Nj)vjzp&!x^-Pky!5`|S(UYbyW(Ri## ze;ya%=x0L69BS>{hnsnoF9A3KL^h{R&gYJBzwrtMFAqJBA$D>U8B1iga!qT$Rfpy) zB)O1UXX<+*mPyU zkyusKxvB=RNx_NSvnW<%tN;n;9l4;>fT4qej$94i070?}9xygWpCEa^(6$?lS{-f9 zmWeH3@X&3BVbO5V9P_qvUH`>{@*~2sKL_k-?anKka6S;Ei-wQY<=(na6MQzK%{}7| z!&yIOpo`1}AhU$iGJXH7V)Q&_2ihY;r96b~(M-HEdygMfSq&H~8zP)yUa^%upIC?x z3|^dg-s!yo1WoQ)=2$#q8+$M$icxK>W3#6ByDVu#CHa&4FmF4=?k>E%2h}djrkaSG zU2EBgQ7JAGDT$OJ3h0wgDEwHsulJ+u^v(Z#Zo|ukWzL$H&VYRHPuUhH`!CHS)Dh$$ zQ~=cY^uYP0W1OORi`(5d#BCAd|-pn6?b23AXNs1bDkJ_G#ycJl{h zL7!xRdR5nf|6)06O3a-jTf=CN|2Rs>fKy|&R{Gv!GKYPe=rSY=T3Ra-+70$GAVoBVV@$-=zmRBhD+eX*;S^mBY}D z3k>;BIaE7)55k~^#=tG0!`AX{2;rz(vKpp?&-V#s7rbi*p~_(K$WHc zcW|* z@Va(j{ma$g9Afun4g7|#sFZppY3cI`tCbi)FY99;@;qROc}0u;K5DF)|3Ecz;$e~l zK9sj(JYD5eX>0tXHaYl;-js52dsBn_N2eMYk76U;*BVw9J>u7r6}V_03KQQq-h+OK zYzX}EIWW!4xb{pv)a2h#P3{TTpD7f{3jv{jb=j!v#{S8LC=TRw`hRTl`}2do>eZoT z-D8mR9_y2#t_uJMSebCK zvUESKq?`>sd^pEzJb3NU@{7R}>Rk=e=0o48j(;K6%$!{=9+*=@Ix`}t74TS_Vg_E@ zYnECUsqjnNi^Pi{-}eJ&nD?drlaiemHzD{8=S|FgnvHIv7ymu0R-z3sjk79HUl zU>do@m>DRNuXppWYL$bY%=^slUmr^3sg@c;o)b+j_&#s=`m!L<{o&I%#j|b?GVSl} zdzsYh5Qg=|c1$zqIH$s)vQszg)*#LJP~aSGTw&+Gc58Wd0Q^+kXka<#P)ur_*xFFD zo3!Ef+GAbVu+#TuHCx9e4sp6?1GaO@;hV!t_?5H}H6p5aKxk`L|Gq<7D+_%ttcyYd zr~R%DYU%bb*n?aLrDJt(x;3TSDGzVLQF5sUVtmKBZ%@5KYCL~OiDX?iUV#Enloz>O zRJSgy7cB@)x@EP7zO`f-mAw3=Y9r0#;YbOwm^Q7SK2G~anS_Z+XdXfGYO2kh1{qrV z-^#@8pCIhPhqzIko&O*2nd#Ker$ok|q}2BQWY>8n^rKa%&*}cH3m!SZP?PuNluL|t zzMGlq)0_pZ2Hjkgk z^#57$sY3@vx8FVdlDK=-YuL9dadYoUUB>eTuj+I{y95qFMA20%f&3cl{T}q3Hu-{Wx<>J+s~3PVENVYVlZ4#rnH(VyUUmJ%;y` z?NEV`w}VhwWJcO!_s#)uq2bv%9On}dEE5p?;J@AMuL7aS#79rfQEZ7x zk6t7f+-j5{k4uYXC0@|*T?4i{YOyR}kwdiLEJvv-LDKd|quo6sV{?yq^#cXpvd8}M-q zJoc;>w2FBmo`5^#yms=cqwCy~252XJCc1ce>maseV8&<3F|wY}(BZZ#rr1Z4{(8Ck zJj|gv%DxU+N>X(rLHVpie6D?&N|PUO-xj`Z@CT!)>xpNNwe3?8>Ui6d22*qCu3nPw zNb3uVI85E7l)&9DGrMwriVYgsX-W>{e-}Cc2gLTi26cpFN=b;RQ8B%J-GH=9(V{nY zsJYe^sWM6IE?n0z8nqdZiAp*Tdm054UzAmuKcRuW?#Kswu6zZ3id9BaUu(=Mn%)M| zib4`sg{4jtRq~;)WvQ4LFJ2A5(~ihbL~&d{ixjRU-ysZ^B^;TRYf_ z`-Syw*G5Y}(iqjF8y0Fc_Gs?@-Zg?Fb-#j|RjAl?4ccyauU0Ph0uh35B%|@RO5n}R zL#6*HxFv+nuR=(8>HO``W5fC5Npbi|uZqZTwxIKsPXlkk)p)~22C^aW9}Xl0P>ro-%0XcvLRl$Fz$*wV)P)BkOR}2OyYv=1E7>C>r!4X zdhw!WXh3HvjdP6t*D=JpRP|#neN2sT=($Bmw(SITchU|rCb9Fgnagj}yH%d*_P7a> zU3ZZ31wV-WTsj_8)a~&_ZaNV1@`u7c-9;S103m`1b>UU*@GV0K1-FPm_5 z8kmOhq#i?BzEmV4_7I!~NYz-OxjkY}v})h~Qc^SS$_yGax(V4TY@lQwSD;P;il zxH_CLq4ZgQGy0)MT0gX(9CE@Z1af%JzFzWGVh$71d$DFxe~BxM=lY} z)ET60b?s1#mqo38z*`OqP5y57u^v4Hfaj1curyV4E_~z1IvLE0+b*oyf zhB}&z7I{O+AAdSvfabrc{5s<6-OcBR9UyHkSe$3PlwsvzzYI&|qxKUWj2_>FL!qS~ z|19h;6(O{sh0kuhgQLARy1 zwx{SM#T+!pXT)CyJ^yyXVB5kp&!xf!&-hV8>mtWxRtm~a<*~smG}~FYbg*CPxhG?q z*>=_OoI+O`k+DpE0R%C#8_gPSE=pu+$doYYxN30s3r9Dw9%eD#TVm5MeWP|)IgXL- zWFBeh$|>M8b8&NR9X322-c3d+7SGZx=Zbgj2WWDTeAB^of4ghcGL6e^GNRnsB#@&- zi`ck_O;ZU5M}QezA!m#Hpj)76cWaGPocyKM;=&3o_}}dxdOot?TmpquFn>f>D5W`_Nls;J6fIm=qC;8 z!+B3M39M0}O#>r9nEbll?ictEaEALs#yac|N2_fK!x`VooM6C3PQWR&Kn_o7*Uc?w zz?muzvMf7DBrr04m#~|9lF?QkdR?#FxE{@oN10jj>g`WUi>Ye8ePFq#w~Euir4wx7 zlhV&H3&(sXvcDWVQY5{;0E)prmj2&$L}TnTh;$@gK9RnUOHP#-a&P-sFnIco{W_M6yRWjP+P59Q)b#%SE}gt1pT;mZE?Eg^~IPxqjIVqV4Gk zzMYEn?c3uUmo+GcN8pGAN{QP=uq!LWxAQ7-t6n^uY|j8QYD-^s?ehLJ zow`$<#%s`ma{Tb16Ay(xrjJ!#1ZEp1leLD-C{WVudmX7BxE_Wo^q(r$*XCAx1I+7$ zDjq+&$onscW0;s|7Mu#^5G6tJN5!EXAC(bjxALq^={7JNe$6KH=M_l9k^lQH$q%

meXTh-~D_hr;F0rAbwJVZ)^_QoI@ybKMCBKuM(!=g^LA`&3Gu0UPFSJIs zM3DGt%-&O(+pC{nou?8bGWe^_R>z$t-{OC38Rm!`SxSr*lrQDCIZRaRXqiDJ(m*6w zq#uH*s3O|6PyafwY+YaeK*#rUx=m}SI`E+jMJ2HMIp-qY$N;^kO#%$`dsUvbJ_O;s z2ws=3M1`2@kb*929|O|w1lb^a0hxGz_9|Win1|p`u9VBX61~O>V4E)C;#YLvX0!$R zTDYb2sWNZXOzkQJGQ}bEkN;jHLNM%q3`#C=^K;jBTAvl5(1VZaaR{R)Sa@bsN?Pc2 zu)|(gnB%>4=$A=lr^h%@9tN^$u@{R~|2fKHv#rOmoR7wcdZH$+YQlG|90o09sO_u< za%BZaE2=*x^cmB^91A+uHQ!X`{OUojWbM>DrNrZa|x|16fCd; zRwSexxmXpfwjqKaz~SgEsr%x`B9?Y~uHkJp$Wcjce##!C z>nzZ3j4b%SnCwK0_E>o!hh7OeXMCQCxEhD{ zHTLR}O*j~y%}**R4Yjy+(8mIP49cik*4o3!(s8K-1 ztz%7&Ny7m;!R_elQ_V1GWt*_E_ykGmgP`|o=p_=Ck$oVgXYDH}8SZ9|Fc3U2oUs5s z=HRw7wX=|u5I5Lh)q#@IRu1^;BQ5Pe> zZ1?kg^h)Z%#%xT*S{ix{%w*{z9x#!Ms@S%~FkcuZz3r0SoVALbRny9@r6Uh0cp6Aw*eh}(&Z%oc>0SLql2+!GNgACs_Z^b zghTWU*IMDYOaPL+z5d17ugCUt{g}dCm8<%MC2vE%u*>|kmtbo@maVG1o+^TFXf3vI zw5HkEU0keSo>qZ2PjImQr*ykmB)f(HUYKiKlHoJs1>bpG$9;`bBhoA=jE?v*k zhgZ~mI?z`^{gSMxqzhk^odji>@ad?NhB(5sSdn;G0_VPsw#Mg5FOHTrrbHz%(7rd> zE-xRr42D3O^@c-0NlW`>KmAkF_sLHU;jqcwe-waP3^Ft7H1R9|#(JA9z@#I^6p{ev zZro3EhL*N9FMej5U=Aodjn6%*wjz>k*B~-)J9;Z*rz!`00Ac~1xe(IMv^`O% zCPLZVhHBrbPkaSAzc(J3rT(;^@0da%hfD~VVUc;f-h#pX+H4Zo*C}{pslU=N6B+iP zaDcN^sNg(lPnKPsg7A-bCUr)M8_g9)#~+_aew)rFT5N_SC7R{MEEh|eqs1-?e_ft$ zR3jw(!4TBWoSgJ2A&B)n8N5X4xgtWI*m!d^m2De1)bxsWWb@;WgT61G=AMq*@w-Xm z%bQ&j-g0(^ABvAZ<(Wz}Y_`+PTQ$Vp^U#=&4y;;y9~j+EQ1>&`Op4i20N+*#zvpAa zzF2!iMOLQ$w_>J1+5@FCbxBfk%9>}gd}Noz{z)a-52ior+BeLb?@o!Bxn`V^B4~Lg znupbNRn0E?psts>f?w1ZJ|31ufqH0?<-vnTkNT$r^%j{krY5I{l1~3J#WPm(zK^L7 zM5Zhc4O4Fh6neo7nm&eUKZ-%d zZfyfaAU?bGsq=+YkAcrJ_h@L$ViAHkJ?oRLAU$P6|;d@84 zyaR|_I7?QuFN}urn>I8)(?Wlh70afP+=tKOX{4HBqRK)4bM$}#^iSt`!=)lQ$MgP6 zkbQa=4b|u{52-h`nF~hXz3?o`=L3_6&vMhFdVgI~wt5)iD}B~az4?V_G5Z!fQ=vUe z74DgpB1@uJU2L#4bPt$G=Yjdu0qgI_A6YVtfaK5p(i~#}QBy?uaVI0JBzJsk;t&UA z`4yJ-d_9;2rgj)`CU&%Vm%TIVUwX5ufapz-POBKR*&KKd08K!Z`6Nd&$6=kj^VF!P za)vuaz7OkMyu$HWoQ!=~a1GcT~JSCVm;$ z9I&U-`=3zJy7I4z+_+AQ_Cu?<>Juys^I##cfoA7#$Yt7$3`1cHhM-Td-gE()7S6J} zk7MDyRA{JWYQ(#HH)lJ3ZR$Ah?G^20QI2sGI7d*UG@Lzqt=l()MX`3+$BPu}$0DP zi{Zmb5o*MrSpl8bc~*GWpuuOEO}?*d1wmr-ao(?>6ZOXT_uKMtw_`}pWpF(Uj8o0c z8y9r1`b`mZ0+ipMAoADw*uIRFFko{Rf?UF<8{O%76S`d=ZPo;)P(Ba4_B^k>^vqaS zj1qrZo(A5oCEG5YcDN-_36nImZdp-{RS$fohbmppWHckbLiL5AP*^j!eCF~LhUnLU z46zVIhOr}Ta$;|xBd7VVF)L^7D7HMNJqs*D&lRkRE{F~0aRLc~u7{%K$L;A}}tMYnX zX9+~VD<;Xkx%>s(%Qyg>q?a-ol%D0F{!Iikq5$h+Rbh_8Iu^A?82+9<7=c(amuEbu z`)AO}=im~ljuRnkNF^tQZISFdfm@z9?a;JzAE4K8L8V)!Q}r|Go&M7}U0MSnw#Gjf z!)TsBS%KOj*>^wN_5oM|WFV4Jb)TUD9^?rzf%55INKJ$8Cc^3rr18chR?@UM&h1y* zQ<50K>!b>(Vk!LRiiHrny2I@vDpzZjCuIQVG8}(^L*C>eCXuI;~F@f*< zDl>1@vnA)wtLUP(Hw$U$8#rdPyoIf@T}NNDVds)Be_f#W%wHBd-RD2;6(HzyeZTTIwV^aU zcSP}U8|Y(=gnJg1=QY99R(k8=xeJ0#eSgtCu~Zj8%7n`zs)QaFg%3#F6kkyMJ9w*O zUrZ_s`>3FK#JZ@&=D4c5BggL_^sDwhKtGQRCe(08hM1Mz1{mCT+Q>=gR2XB!$Cx1o`U4eepA` zCfqf_Ih8%c?i0H=o^LlVET8w4x#G_We6X1DyE~@uae(U<85+9Q|5qz#YoFOEb@x`Z zH^7pma|K~-gZw~8dL*(_g7u3uF^TTm;7pKjhbr?=)$HNiIW+ac7&s(&fbT4*_`V1C zSvy@eORW!~tekE@YxtecYuxn;#LH zy6a$<9ex!s2f(vBga(unoPcoJZ7*6mR){f+Y3L>v`tFWzo|zfyJQSXFpBV-2LL;#Y zm+ix8YKYskeNyoI9Y8cYe-sSKRgoMx?(u?^pIa(R_I(qvXOex!FnK`oxZX?zOfmSj z!Gm?sl%b*0Udu#3EV&lE{_OA=&@F7cTet`*m<_9}9Rj{Wh8Xf#Pbm^a1^eULNj|gl z9QN+om9cI7p;`h#@^&w@B47okKSpi^vzwQoL5TxYTs_ou^pfC54Wv^iJCiEy4-3@C2d_Mwxv6??m zi`sI^egHGaw1=lS`aWZ3nWHIk%QQ$mlZt6^_Slx>WHa)r%*AQrm|Jp|C7=EkYweIN0*mN9PU=tfg8K_u}G>Zl8Lg1~kT zQ+N@Oo%v!7`d%!9S-l=@SR+^Q+Uea*{?KYG{E+bIo;mZ6W;y)ST8|;BIPTs(#1;=l z7RHIxB;;s?x3+eX}qaTQ=Q^w=Xaq_0R<@CV z{kgiK!0l&b6YTccVwiy`40;aS)6op~@igOD`c#yVK9!(ms68LBzO!)(B_CN89F=Uq z(4T?2{gOT+t08yCmF2^6u0bQf%l&rrv!^%Ikk;(Q5sQOAwcTeslt3Li5CcpyC+39= z^zaX@jm@8x_^(k~5wM%;DDphU9lbFt_9w!P@5L-S6?uds)9OH^GNeP;AZ_o_M1rPk zNh<6paG`eWX=YmK0@L&V-3m*FyY4s@ecSMmtr(tZ1`E)E(A@?KTR+u-O4$DtUVupv zjn~@4z-tV$Trjp)+{BC>I9GT-bw$=R^t|7ecFxco!Fd+9LE)bx{EO;*)(d8E`@*|{ z^V&}sWBtYF=|T`sN{VT-vfxUZ?r)=#1M&aPwmUGhN4V&%cBAAjw%WOjWs%CIzF&Eycy zT4-4bqitLFJ$O)$VV8B|ZwCIWHwS*`i?X6X9KD{$saVHJej9wBf74?9vs-}JUpjEz ztKa&6cJW1YcZFa|Sb&hwu459re;PUk$&eSg2#_2~$6Bm3Pm^+TO3yp3Pf{~;Xjny?sj`OI||6aw2Gfsv)% zav#}PEyDn*uhVdylRFT4k9)WbgS)!(T^qV-)4!H*x2^(6@1Y?3_n^J<^p5Jjoy2EK zKss9T%5^i}X>5`3y!&%q1>ry$jPaSs7nVrB4Z=AGZ2VUYmnXhJ_Ho2EF1i8_JGTPt|+E-)}SYx&W#jWHmVh)w!se~=wV{%-bH-(Pz+mBT0(gp0b$wgzBfn9v5%*{^Z_?{bE&* z$7qN55X?%3qjrx=xpA9sn2;G?HF_^9xX$AF-Y0iPZzjD);0r|yZ8ZfKE$jzE|1l|c zfqp4ur_RF#htKD%pW_e??#kfLTNP;>HAv7v>4@oHo}W$NQO97~sZ*Jk*34L+$&SnO z!Y-FldRN|kyQOL~FjKE`SI?m^i4xKCT6iZs&Byt+K}Ca}?unP2^XlZ`jl26O|C$&v z$p@PrPmu7-oYEeD`(GKF`@D?uyXg7R=hhyQSW|&5m+#ZdfdQp;g|RKIHa$Q7oYeTc zbMwu;{(i^9j|iXAW=^RaIvhQpk#J{Gd!pO6U$m2@&5gAQ2FZ;DKLacEFpr}tpZ zBULrGh|d?IL(UjIB?WuC3Ck88x1!e=T(8vNx_S)c?PaM5HZ|W2?j~4WSRatZCFhS5 z4LZLC*h}m0ldC%lXRfq5AO!4Ot)fv88B;UuJ0R+N2q`TM)Nlsn5xvDa+E>I^volSR zM(`1UgfrzA{o)^$-g7>>_bI9ciR1B5np)mgFrwh{Bk!SbiX6_O<|>Za#Sl#V`t!vU zBaNl$y_#!BEc+%|W+E>pH&l*=1ex^HLxfww_XDx{t9i*iCgh6w{kcGXmsiItC3csh zyrQ*APJB6&I%=qphOYAZTa)wKuMuSgFU!fv=-c2ykaP2UUW z!@;Cgmj`nvKO!>7!>G`GlZcd)dS`vOEjtSg+heVjL(R832Tn_?ErP{vd#*?=>;_6l zR#qO1uR|EB3U3(RBOX1_{S~pKc7p?f2K>^Sk4E-hdK_Ey*6;` z{*?dphUZKEX)~pLd(&GPJ^{}Z=}_O@JpqGexhHEenLw|Q-EA=xK9gKMUPmwtiwpPx z_+I%un}?e1tIgcUnr{MOElPz|9crGSKjq&CNj*C(Jt52eKny;2_oSvaThw&7n7Uu} z=mzdWu)~@;lvcO^#gh|Z?I(wKxR_lT4gF(c8h1c|^6oIZo8g5R^@()4O>^_qIhu=R z*1F*GZ!sk^DIQoGTeIAkF=k7A?Re2bU<3R)7vC74m(oKomTH3iy_$@roJtZcHd4Xg zozt5dx)blW9$h_FXU+7@8L|m*@aMTGuZEt|ScKl~UtvO%gyv@kNzB|XC3d-++wAbT z&=vEUSXZnKD@|n0S?!z^VI~(G7%bV$;)DZ8acN+B^f!!Z)=o~RFjE{RVw0GVZ~u)$ z?&Ip#Fc-!O6xS4q_JoH9IlbN%!{8pb!tExv3g7yJws zh0C>Ejm~qyQBO)KnDbtQEFh`BIWO(b*IBA_TG~J23+qDaiu=(y0lm5z-_(Rx{YXjd zoFmJZDg9N76?&3`tp{(tbVw?4O|BG-WEp0rfhUR5Fr)|S>DAQWX!uBQ{)g4x%vF5A z>d)1$kbSJ_heX&p^5TgOszR}#ipDB9Hnw$u+ft_`fe9$xHGm_tBJ*sO%%H?TP)dk5 z*$fCXGF8a;5rFFmV~2?lWAio9ix9TC@;GV`OwIKCcL3xfbQA2F>5h(^l&}|W8&ts1 zG|I${xJ^9v^4&%V%hGe}n1BCP5XwHi6Q)lL5l+;05{UM6C05&=DS$R`9HMUCaf5yd zeR?&q9sO6oDU%%*`X?3fAf0_wTf+)HOq@IM)Ya|<;X!H zdO3W0b#t|3|RD35MzSsuK_%FzTn_}Wkeh#vSR7& zh6nH8^IS-cxVV$?tJ`%U_(yd>%^FV5=2cBO1mhX6>a$-uJcfDFB#%ZiDAD_h=(4e) z3^UgHb5DThm%G)i!lhe(6g_POr2Q1gi_f;0m_IHX+AaNZ zo8J6>FxRNGoa#nRX>*(hj{!vY{;G+mK;d$~eoW9tnVgs~C25v39kUE6bI}2B^o7Sg zX$L;|Khofo<&s@m(-w<`hnNIK-O;1tn!^mGz!MtSIz;H6gZgNk6Zf)=`&*(Da5R8NEsrq8$$2eWxT{|AAchPSr5|Xt5&xS$vHJRFE33A?~pA08`9a0%Q7tL@;ac zpC8)@v|ZY%=hjxn>UuAGhimw*xb{OYwvyq<;Vhe_S}065Ux4<>u<>s#3uW=m=d;R3 zQe|^%jml)?Q&HOtJ4abcH(HWF$cmr2LWXbYq{8+rEMh*QezJ$i%k(?lvkA)^_|O zyFq;URDj122FXn4U=S7z3uG<=UT0Gg!)MHyT1<$nSjm0H=h45EO*+IlqVP6B?o+AU zs9dyql-5bpayKE&esV5%)~+a(>S@md_`8b2gH!itMWs826o@}Rm-@qJ*gWRdRVJ$0 zp}Nm$0t1Nu=AAbI*A{4ZzfZaYUgbWhoe zFocBW5F-@KYmdYl^4ccvl-qKrJGm4tLhg2jfyqGgr6Zejg+X7##+0p zRUkLKKzCk)t}ePPw|q@p^Wj>hPGTyVJTQON6_DKDM0L@DixJMKl;&3Mo{^gbDQ9>F zr*_jwB3%j@(vzg7s+f1lrhk*b|x5`bcJ1i?CRLhD252&$C ztJc3d8FgeZSv}8lw*&g1Z~t(mFf~?4tz^9|21+ei{|gOWI@av}5YYDA^yw#4z!n>- zVzZ?8-(e7`Kq$cUaDz_DO-AoII@H?gXX_Z*aCa^=T@l9B#&E8{3X#UFZ6wgg& zg{0*j+PTS z!LrAvXfw7C@l9 z8pTR#|}@b1fi3dU1FV|lK`1mw&lTpx}7uWT9n6UM07Yxzio^i`Nnrn>(C+taK)Y&`DYWQ->SV?Y6US&44z)h}ixjy)974{$?z?`zWQ{QiMnUaF z-;w+eEY?lGgaN~f3N9;JBpsRyCnEI5B)8Q5g+_wT7L#Z3;3NkfY0#Ygj|R@5Bjy{XJr6Kwj`S_Lbq%A!6I(|srNug?or}*p_~I*BaJ|##3B>_ z9OgtO1_e|tr<&0KCMJq{&v2u)>>y`yMm6c85Hrco7}K7X|&OMQ6byw-u3Q1e;hB^q-v*= zESJswllkwxUATT}Du5xjCu?tzh*Xo4j|N6h{HU>&(f+D9$1n8lKTh{k+6}(hdDrWl zvnsr+EE0Mb?rF^K?xRd8aM;Ki9e*+V9ZPuj&i-;2?>ar#=3K4V$#z=a0cT@=CU1=w zdG&c@-nSUjQ-y!(D&W)Rw{_YRr{&$m~n&_D16JjPQgcPqw+W&sfJ-B1L zaBzWmu*Cy?zwk_*&9sDgu3V?&<9hw>28>qKjRG6tFK7<%*s`S>nCqWIw~1x@mj9!DNlSw zW9knXrAUiOhx)XSuVY~^hl$LhW0tE_vCh$BGc8*moAVDV#^q`y%!ChKV&(Ror!apY zUOoAeDe7-nI9ek0vpNHx-?~Ubalqf>Cg~Qs6G+Hl+$r5y_{-VYs)uJPn5G=!mei3` zv5rK8J0USWp)u2{DIb7GcRo0ILJJc6>&(K;6AZQvqy%TbjR!)uLpmAYTuD1Ld@}K7 z8d!>(#kuk3x(w4XPujV3nR?fKhagW2#pjdEE5ujxK;?7i_FGW3z)A%g+lG`QW{99y zW|}x`_4neSeVwVXa5}5lquJm)GE<#9&WQ6qSNIx5N6{K*iN$^-f~5finf^2!1Pwhi z<6#TcuQ_03mV%VP0+nl_GL$LEySN`f%Kz z2I)SmO0@d+)6liP6T6eQPAE9AxfhQ&&qcAw-kI>;Bol4ND0rtED&~L-7ce?_P2|$* z`lOZ>tGHtdsujvbdrUw$N3z0DLeOCu|7=jIdviZ@py_k0DJbMr;_X*kZlAZfM<=Ms zZ(!~o<>F%TJ4qpM$eUUmo>%O7nUVbvjt*%grM{$GHov(h^BD=mI`by{NDpmsIeh6} z?s@^KRYk_IT31CZw!h(GMGN7m0oiL6G~PeOgRIGOWrsMSU(1GFnjn+m<{_3wuj~Du z1reWlGcLh^w%c#h|W#l4QQwH@!azQ37iEbOx}nd>zRG}&IQi4KBe zoxGJ_tq@Gxhf{0R)3A0#gifhdvu)p_r|)6E5i9laUY9^d4Tm{ zF4jyfAsU`>1sEG;r=8P4>Y}Zz<=prdtJnY;^IrpGzVj&vFn2-Q^{THoiP*(TEWQ72 zv3AHw!Xu#4JTVlviqlkIbLN0!?WimyNA~D=PoTEqwmZyLVl=-6e{VZ8Li&$Gkx)X- zO6Ud(IS@27Aw0zF`UoZzsIi?HReG(a@VGV#0ht=3(f@F(@4^k?YfRiS+Na^WS^Don z%F-Z&ycIavU8`qB=dM)q#v4#H6q3Il0m<3}*QVO6Uk$_>6MWgF+j?5Pep*9c^%hy5 zPoSW!t z2{e47*&b!-UEdaZS=Vl+Xv#zC^6te?YGG8Z+aSx>Dvy`>VD4^s5e4dP{w{Ti1KqDy z%yOs(wvVXYqQ^`mMOZ_V`n(@F(u><2%xhU*ipxjD;!pl=qcmU^Ft@-1{VyMA`5;R8 z0ZZQzg#cohQ4lnV`y$F{p2di4VZK5ok;>fAA82EY73sRl#5r{K;y+3y%$McmrQwae zmz;OPAtA&Ofqxwxw=(@~9wW3}-kU|p1d|dWK!Qz`?Mtz5ro;9*vn(r@~ zZDrPsf5q~BFF7T`yPaaQptpg&KJ?on*1PGeb-h$Ja9B>IW4e7rXtB0zlcx;&1@M$jox9+{ab{XT^AXT~L90QUE)Ep;iseK&lU=Hj%1}l|x~Yp$ z>_dk>u=0RTm{w+B=44b7xo;YUs#@mun{;Fs6a3UP+>VlJg9ikd1*_bH;I_K@*n-^c z&3}3sFDQMS!meb$(&oO+J{VhjT{!ZcH(qsvxGluhq4W({b6-9B`{^SmyWl?As2WC^jhwex4A^nE`YF-apPkt@@yR^%Me=S$v&U7ih*pH2k=C6sBwU*h_ zyML~FU?KouI=d`Rsc&^ZdG+~okD4czkUxN=Hc=N&51-g2rC_pYxRU$wIqBbrqb}Xh zv4n@{2fekVxh2ene>981PP@ECB|ZwWgye}bbYF|s#dqo@=u7-YZD6;lIz1<{=c-VW z4^w^jnhMO8u3na^c+k2zN@b;}Cu=_1Mr&s%T1~q1m=DXzq3;g4u$`NYm_sn|iZw+O z?uQuNjI~#?L|UoqTr{u9Rc=A;4nySwF@9Vu?Xl78fiQQ%^OrQ3#agvNU~N;b zJ^r5IP#6=JU$2M6WN<$Ux;VjISRtcKpxm*2ZMu_ipzke|nSx9r@FaA2^ViUT(Y68} zAhRIhQM7r;6JAyaXo2hviJQm<_(igR6JdBp6*y)}i20iEXu}J;T#SGw0qC<31?Wn3 z9=Q0|09fAm%S3Zq8GZkH=pNhR`V*JeCy@5WjQbN{DX+c=P5vRw`Pss4Z6oho6Thw_ zh!asM)Go)Z2nj;|Pkx8EgJ-8O69vq|A#g0sImuL_IBu%~5bXj579GItJin1~u zZxH^x+m6jWu1MS6;*|kf2=b&sG#&%GbRrTOzr)hN+ROcV2!hNs42cOs1`>fF_NAUx z?eoJQ!0m=$#Ho!dy8r|d)t2iTVxTYb-jX+-{<4B~u1CYW^oiLbq`yy6A&U+W1uc+av$&JBs}{jv zzTym0hR|Jjzx7~~e2Kogtiy%wGZCB*g&u*fgCzIVfc~kCQo}uR8kffTF@K_BzI_HM z4nu*72x8F;Xi~sSja-r858%QA2LaTVjwq`K0*;AQ>NB?2?WuqO{;LaHt2>0HRIn7) z`YB=S(0yt3>*C)Jxg7FfVH7@EHjI_8@R=NxRA0cL>GWv=yaU}8@ z73H7bRQ|pUZA4YwivHJ(P0Ui>g4>kS%2s|kqXhG`D85~K{vQVYSH`_m5>I69v@~DL zv*N$JH^M@?Sg%Q-lA!U1}OA%O)J;F2}efBowu3n`+J_@c1963DHziCZh zNDYX;!2eQnGfJa3YBsduk7xbdtVEodGv6n|)zY_VQnLpqP6&S7>RZE_)2y#tvzG`F z{wsRMcZwsPXBvCwjjNeZmtuC8vey|gM!lo1OoFVliJUfPKl=FR0vQc?3rE^a!@e)) z`qg$BM9Bc*i`FhHtaKo!wHA2=oXd8tKCO90xZ{rmjoZMyux9<~t^}29CT)#I)#MK7 zZd$}k#*4x$(K_omjrlw7rl)m};+`MP)yU1V7byE8rCT6L+CpDznvVTGQFV%4G8|`p zhD_4zIX?a$t9h&M4~alKaXX+JdMhftc&$$UWq~ZMK3VpV-6M@bh&z$EfC<~~;;DZh zCKO>FJ#-KKeeWQz)#0q8gS#(3ck^}D3PcIRvdOJM{1SEdStf6N7o@kPtILU3L_hrC z)|c3moS(_Uy?Ak|$?mgiP)y`h6exyKoy%9_eRui)0PuFK%da89Qd>6Bcae8lZEsI9 zwiybTCx73Mv@~1# z9ndLuc<9vJ;3A!@3#C>0QuZQ{$Ky#421yndBPg~{m z;xG4*u}Ek6s+GHun}8{3IqG4kP?HAgr4t^WW$LLQ&b`o6?_tU>S}x$%7B~A*lEt%` z;W`8YVLJUHR&lfX-7`f!?mSIyYHUynPn}ZGm+YRyD9>Z-BjUPqbq|2C!@|4?d#gyr zQHY8A_bDt8vjCoM!iX1p%F1gl#MD-1q4I6aYGg}{yT~(kWQzF3T^)#D?h0AZ%{N#S z+V5tko8;3EoR%NjjEx*QrpLMu43}XoAYHYMpfLjlbP47x?IFGA}e1Bfiy2cE^qYPkLoplZDbPU{Q$asyDdpfXH3?U%rgWbJcdtpDeD3D$V=b@gs5e(me(qQas}^$hekMDZb9(ko zAAFaW<2g+S;8LQ!zMY)B2KuGvLzj1HWgDtS+!0F4LUu~J--ksE-n4Jm)|zrvek9sA;fqnDKRXBotE zazC?W})QqxIz0ZHzt;`}-MD7cwv3#?ag>*Mgga zK)8ae($EdK1lY1T_zPnnqlZkUqmGBj@diEtWBE#)Zfh753z)H{51)GpYts<`OfIrI zL(uKs^-u)&AA$mcU*9?=HhvU-u8VwD{_c0{QH95LWgq8uJVKaBnsI2~nxKGiAbbZW zQ@wn1CJHF@{^r#)f9Re<0e$IX%S^0@Tioc77`SwK`x(HEKCN%5PA(2=1TS~x6l$`a z{i=?GiXGAkolvkHN_U(p1KKrMbLvV1wBr%(A!FgWWJwd7L_Ut9)I4FPfA~ zaBHLr;N1Ue`SM*0E&BnEh1Z*JLw3Mb3Pdejt}kpC&J3}&>t+-O%^g2uFj`8UQEXU} zf4g{gu}Ms8(F4PG^K?I@GuT()`<)#&W~tbWKmYK7ip7?KOCm<@w?+IrWLt@jw9Lqy zPID4#GHUa^jqY;73(~RH3(6yRY^w(#k6Im`f6_XnzqUwT|J>G(-b!TQtVrQy5?`KN z1|6=8FO}GtkGf3_ojf;RXCxl2#UbGEto*T7flJHLLDpv|Tr{2+a55d-jd;HB*d_*- z05*EUfg|Bl#9*_lnm_FP$bmO(5&F2OP{ukfH=%qc>yqR;URd8!Md3One<~%ih}&Vn zx6vV=g!A_vgqB!(gg&%I&XbKznD`r!Ovp0Hh1pJBbWpIP&4dajp_^dJ-}%c1VHvm! zi;qlMvJL$f*e^K0T(BoNAo)o1M4<0ac6TA@gE>=0za(!a3*S`kHee1S*=7#)b9dM* zY;?>fc0rAO{4$M_ExqFcBHPuGdfZsF`+@daBzkBuYlcbfKH)Nj+XNo@BaWyg zwN;1+x(-|0?JZ+NIneL%C?b4?j`AkJR0nVi(3t^n)b;^E`Ftd$ziHUjLb1yO3Q9M; zIIq#ASvx^}b6L+{4+5@<&>1cHIgi?bL_wLn6!}`H3LbJ7sNyb7AMBu!EVlnC-+npn z^~_Vz&)ct_=_ZHg)clpd0}T(B&S~r1Brw@raEHdZ?sqz@_&+{uZeyrR5n`q)%6HbW zW;lVo(A26M*Gd_SLEuWu!ap#Ljo%IfUUW>M(b}dG1Mic~Xv&p^8X%>c&DR)x zUT~#QG`$47?d%?;w*_Q`MkbIKfVgp)G@gYbO%}kSnJYBK*4z68MTRijuro3pof&A{tB(Bk8q878p>OWh!BYzH&3Zc$OX=x}NX9lH4Y0f;t< z)n7_Ajp*dxHfLjdf;4K@xGOi2$7c|slxb($4zK@L=MCYG3a}iiaGhu+pTCi=NfzN< zNPcAW>LFX}G-#q(k`{(Z|m7rq-ed0MfZ11iTb8Jyf5JC$&>~=ytw| zi@-LSwZ9h`uf&WX>r-^=#6KWyac5a=0Sp81@dM<8mXFDLGErVIJjfI3Ugc?~_V0#{ zMD{#3vox|7lauBqdly_gq9+>V|5jGKZSmANE&b`W8|B!K?ng4o3T*z?Y8;+dAvE;` z)cA9lp>XK&>GQ>=B9J(-=Dadi`ufj5Ial2?UAH@HRBxZUT!}x_Iyv)UlOA~VhrgXV zL0-v>{L43S^tDy&%PR38ffk2Bv-6eAk(#UX0+l*~*5_3!?`~xuc-qOC^3cEIiW_gO zZ%zIV?1}pG@64UCNLsdBLj_laROqqzocB*$3{=is6VTD$FJE8!qukP{t7xOqkq3RB zJ3Ei0yUjheNa);i5~YzTK%cPCp8v!0 z6Zs_JW#;){_x-L==<-L&o=d^kShg}@E@JS5wNqRHFZX)fuiYlyD!GNew_t^dkUerx z*pOv7T{@qx>~hm<6?grWnxS95Qn8mWM+>w*dx_dW=z0AuBki*@x1bc~(0khDV_-4) z?(lI+%+{j(m61zq`jB+m3qe+WC7AchVLis4^yU1FSX$$_&lDG#je0PizfBT`)+^IL zIl+dqNl%)KJ{9yOS^X&B-o_hEY!Gy!&h|EjpS1iLp4#H&Ia@=4ivDK)UW9ayR(0&Z zMb-ycvJXak?q;SPzKE0y)WaV$ovYLIS?+ZT&e^TQ8!7iO7k63j?%+5gvOvfoTNeF* zhrVZ=9Kh*B`Ard)*W$vvEvSWV+M3`&V6`uqREQ{XMuYzxPRCB zq!!)s@!~mmj`!$all`n0AG>noL`Mft$EWDW3-#P1D#QtwQy@6c7vc6U;QM$ z?Ywfln8R&;SARz)woIbm65I5Lb87o&_P~wBAj7J6;T-JDf0XMs^tEMe1Wtp>&+9qF zmRFySj-uI<6#29A`QeT#mmW~c8^Yx5jl^vhm?B5J_^cGEg6X$mtzP|KcmFPhgC9Ea zsbq@d>u!fRyq0Dl!-aIxs z`Q@4cI6|NISaU|)I}Rs*)FnmzH>1gJj)qlpRX^ZhgRb!!}O$3{y;se0*-)~tfjhV0}CN&s*{#ggj6Abx-p)T2tokYA8 zlX&dAsiST62{!fQ{`pb6uN%0(5NI6JvNpd~euBA!P&c$v;$K36 z#M9`XmTED{mQF{*esd|=jLx)s^#OX?_eH`rI>7*gh$uwispRV-FRxN@KGRq4zMm*HhS%7Yhm?n7II-B>r%>rt|T*-nB zPyYkDtgTB^d5r`;_=rl|-d><$^=YxWd!X|J*dtDE_PK2TiCrwPTe7k!HqUsgrmXRufnySMF*NCfdn^YT zd(7}6kl3w}2iA1hgahMfL~(Qk92FNO83Vugf0pZY2*fZ~|Bd07nP4Uc_CZA1ZOF_O zvptC$a}<56U;s3?3CNg~jrgId>IO+gUCF=$c|WNkBM4l)G*1M}ggfIK^66RNaYbfb zIUi=--)1J=z7svAKh<*dG|Wh7fvUI4;H_pRRxW#Z*m9iFb&-o6Blqpd1s`fx4V3#oAlS^|$a*Z4hE5$pgh2fyst{(tS)AqLKZICpk#7hyVqp zP5Tu3avb&YK4s5y9-X9o(AE$}oFrJ5oH$v=#GZSfujaP@WMUdap zp=a2+7UUATGfQ9=sB}Tm-~djFUu_gqi(t?ZyYw>mHtzMhC~M{qbdA`dV$Th?V>D)Q zO>QJ;5i>keqK9~^C}DLNocsnB)wD-z`8W{%uS&0Ip7|GgVjaViJTZ=#ETx%|7B6Rr zx=5r0#ribX&c(#dT$Zn<@JHZc3@Zzj16FaI8}!oVW20ZlDGb}TA>X{E@S^2*XtO+U zbFF0TCp_e1>i(FHXi+0t%{a$MmOPer+?V$nP{!?5(I=DT?!pUsSdL~k)aF&F+e*ji z@w)zWUCxhI+xg-kuWcRn*fbOSM7EzTR0p=Yr?WYhtc=6@`KW4fl|R2VGVk&Gv^<^A z>V&MT7eBkahXmOuc_-w;5)#CdOaa2d;|9u{MgM5^IxYtS1xc3 z7$HpooGHHJvbG%{oY;o1O*VFz;pJ9?kx zgY;9%{lE&_R21@LvILyA480=zBYGS0Nu8L!e?&wf%IOh^qJ3kPHxzHSl9AHYm3^O~ zOhtJP-;u;o#M3Ml*bTY-Tuis9r%0sqF_kDt%tv(Q}zNr-6sCwI%>)1ul_|(&V z@zWy>gXfsk+HT+M$TTOLqFcS{ROd&VWq<&lxu#FfI=Lt-#m3RHFg(0xh~4>*!z` z)^j^}pOtUf3duPSQ^4)n?P4ZId-D+(LOQj&)c$z~|N@~}w0)7AItVDM$}pjN}C!oi7%;3Vh!ombXF zIN@ZI=hj|H+jx(B<|F!nt1<6p#U~2@h6;iv0H#StVxySGhNA9#gpQl=37C=)#k`t1 zX^+Kuj;HRuYp6>F0Q(;)bP<}$%-?X+k}nwt{FQe5kC(Y#+F9`2N`@+sLA|IA zDxix=1$2a23@ zho?AT>xl$w={r;wzfETa4OPQB4rU`w*wnyny5LXcw!N*GiB&x2x3&6o=97YPRj%@J z^GEB>Zn~}ctC4k>S_j_yV|d(-|A-&lqk6aqa7-iVGo|vN-h3oLo44on(s|g2R~OM8 zUIB*=Qo$kQK-a=@l^$~N{T8pWj^k`_tuPa1+3q^S#ng+hrAhD3I}i+2 z#@-(Sb-oHZEV9hKKVnHn0W!D-XmtfTaK%Zx*H`<)lLVvCzvmJ&mPB3UY6!W6>nZMs+#DJ)4OLeQT3C=*4~0?cbHt?R%t9e%OM{O6k>&3W_tv> zIzf@^8X+$I?_yl<^MZ{-d8e&`GZ|9&HDvF57tv*>C;XSG@NqSgwgr8w?%M*R!JW%I zVA4tMSA_)fqT5e=3&Na++V;&j5=WBiFy)6-&xGZVGR}Buc*l5?ts45v-k( z502%x-cJw#I&3m4TrD$NFU=q{mQ0RZA{K>0ZkOD&ih#zyv6J{Cy$s>Z(oaEAz z_teQ&*IRv-9F#@p_wPE30~f&rD-PlqDXZ@(nZ6OjH!Y%z?SUK$%ze0JE-&x6sG zkJzzHqI&{zX@|xjYktpnJb)1o^M(^t$H7zqsQn zO0wJ1PIl)+*-y?a-UqPoA!L{485Y7vnfjXhC|Wau1$stX!kXUMC6n%AAQO zal>tQg{9BLKJe@X6}^`ZegVH$YoUh17%#JBB4bO+fE-sn7=TOyppj^V{LID>Wqk;` zbDy4ws9eUV%IVDpsMRXR?Fl{8oZ||IZ<`%&iE^;I#(RTsX1t-&PW*(feb>cXnOEoN z)jzc9LsF?S_SQIRP0HL(4^|gmf;jgtaQtPaAJ&#TIBMCYfDf!XoTXbOnM_x+???$P zQ1BD4n|WpN)XwKmr@3QK{_=4B%8pt*`5rz`_0oT5iHQeM^8(a!!?8LE<8lYS|FHbq zV4YKs-G4Lm^**;wvTs*~j8ViwM*KA%DmvowG}oF{-nniF?bsNrBG#FQEt4Hx$-1x8 zavi&#+Ol6NMD>6dp+~LDrWWl(#=&yGWC7nXA1Sic`P7&9e9IT`_UY@!W~8bu?WfiP zk9zm7Vex+7W_&uJAAcfzEN7b4O5OUWACSJvpE9xY8}QNCmR{>w<|wSAXy%m&bB2@o zl4XUSU8sCm==S&A;FTXOOm)$kDWc2e4-++prW#KZ1*J4H#Aa!4pj7n!_rNi48AECi zn%R6(8tKz9E{0jvi%)Yc%X*7EKkULIiBP}v@PP;>=HvVI&G8ziMGz1*O@+4vOrMaO(Wyuum?(HY`f~3m+t+8PD=?7rV#Z{Z%#?`eSY`oRZAI;Bs z+{L6;joilkJX=Ry1a%Qz#GwYa0kH2))7eU0`ds7&_9n6PaZ%RyIF=YtZ&1+qDWW&U zA;rXpJpvdc01&*w)cYqXa&`sDbI`57e5*Gf*LtP+FC#578ZJg@3<81RhTjdT7sj4C zynJ$oNjp}r>nEFPH!@bcL=>9Xwxxp?UGZSKBy;Fr$35V61h;|N%1-#12C8auZ#XvP zruZe{^;lHR=U;Dm4Wi3;a{%F$OSuBvNYCs2w%V#*V7lGi6(79g5U`(eXGeN@B598u zKepax36Vs=_O&Rl;)kYL6|2(q?D;5H-Ze%V+_kl1-Jc|^BA$z?*yo`>8dyz%OjWn3 z*MD>o=87`6G%CydSoFHVOM1(!;Gx;iJ1wAD zdgH!TQ=>#8!!k)f^ER8>fMGZx@Ey<&F)Ef***TA!{EntDnje7Tait-ve_R;8YM0j& zD|C!P*RoYq*>;}0?>D74jA7pz8qWFl!^X*1OkVX|FD)`_gadvJJKxnO#Sxj|*&28&G>@WVrSA4`2)L9)xZ^Z7z+*3ZayJ3-8r;Z8rzQi4|5u2uL3< zv48Rjz^r%GbBCBBQ=&vP^2!-|3k9Unx-T(^X26+6L)grn&p_gki=Q6%!a z5azNt7ia{itgW?VAp1h}2rpF_grv0x(a|{0?LSb62W4+ez3+r38{6SvO7O250MzZ+ zYiRpD9x_x4v|^i_Idm7kh?=%#bvcxW@G=b-p*$rd$Z_dp@A1`ZY-k2mTb-|C`0k+# zM!=%>=)_iOox%{NY<&|MgKaQR7^d{lt zHoB0+BJ%g7_dV_`Ar!-rI6aQ&@i^~N!>Y!-7#mQ?Cf&ArsIG8%1qH) z1m?C?Lg>>UsgG0k$oqe8j^zp{PJZj!a0oH4j7IE0uK(lcyyL0*|2R&PO;Xuzl2Jl- zh+7fL%E-tnBRk2SCnF;(MY2gq_9!E|B75(ZuDxYmuIt|O`JM0Yzx%j*Yh>@6o|RFM|A`>hM3`#eec|3{5b4fU`3WpK!s9M5GmkR#JmRYXf!xH=s9_; zGy#y~!oaN(-ieX?XxK=5@9^Ct^GEr@*tX+*f+Je5ENSr+Lm%SYd&ky%*^Olv?Iev; z@FJmzEz1*b<#WYAgqPb$ibwlKLHn*`{Gs(BS^nJF{*RvFVQX(okq&rPC^AOGs&Lxg zS%cbzPP!E?F;!^h7O!=UZ{xQ+y+Q{dp|gG4+2?k+v0!#z$bbZ?KOp6fyJ%^Q z`L-r$mo&}Fb$_O{&itK^c%}SL+scMOMKncK*GRa_`Nvd#ee?HJl^d3hq~C9qxe~-8 zeO-MVrtM&p@#kyP=4J8sQ+2OwWf1lg(%Yp=7m8NsN0ucS?hs)D_B3W+TG47I!nlgj zkGzk-TxrU!Q@}Jmamb_u&`gDa{FE)!csZ?Ho-jtb=|vG&k0eRdW*Ld}C70|}2YJku zfs7Mq3dY_CzogHr-TiuZ1KcT#D_cMyFMo%{H~+Y)SZVkWQZHZ3Dh7{!jQOTR)jRnW z-$M6OE%s4LAesx~@%g1N=QsSy>(>d4FMLbuD%wN)inz8uKSms$F6zzVOj-Ls5A{2~ z!=W#wwRvWyx`MtMRtyd=jE;LB9_8ZK1AJ-^zIZl(_T#q-=|m@VYQZBf1MG47I${Gy6?>i2?F+~Y?nED09LEAA zj3T%n_**4GAAX=pfq#ZP-^Ir7|1fDD%VS9loE4ULU_DiiQAKaRgN zz!uN~BER%WsxI|gE@sscBmYb1c#@grN?;o0V`AEz>nA057F?DoZ= zim&lzAJQ??$hE%R@;3f%Am=aK3FgtZ`$96|Tz36gZz!`Xsyy`wZm*-ox z_mh6bpr8ew3Z30mlHQtGj3d8s~OS(1brJf{{=p*6M|))_xfQ zyTH%wW|RxxC1EUL<7>XA|Ehp>(1~%egsg3cOYBG%vz<4>S{F=)+R%qy;4ukZ%CGZ; zskeGI0AMG{vl?K01-^C+AaYUG4h9({95fHcnD(6**0L30fVJy#Gek3V6Q>VL`ph08 zJ>gyGEAUoD2KCjwwN_`*1HhTA1n4f@^_a}w4BmInSik;+tJ?6HFT-TeXTVTBvOLPY zqYaQaQ1xF!(_%LRZ=MhA!@#7<$WgP?)hQUliL{WYeHAAC!@(W6rWreYNuyju@J@~9 zo%dIN`CG^qhmjnC?R1U$jnD*Ng_vD(52@j@ADL6s;*6Tt$eJ^6*i#z&UlJ5ee`hm- z8}-DQWXt2WiyDVoX)D>v5|TE;j4Ziba7vWbrNX~UlnCrUgs{Gl=I z%$3g@H7%U8!>3ZQm09mp+MYbM{K;U!AJd#5uE-wWoup#f^yBe210lPDF*CmC7k=?4 z)wWqinl(9ylMs_sXCbb!@Li@iq&r}{3A$34By@{79z0VKQ&uLX+HV)kQPC6fL0nt8 zno!moe_4>uU-H_X;Pe?26|Uo&l8uiTb-I)QMW910v-)j5=tp`K{kv*<=GaxL?z1MJ zVea3{OSdHDzIJ69MkOI>uJ#MT_@m8U;To|rI_z(o16@Z!4VB!SGYf7>6OTAjsM0`( zzUsfys|~wZ)*p$$FMvJfrBW1)AL(~j3U`IK_e_36kNSTB^;;SJBJDkP&P08* z;MSW{cK#W`!^@9t3o6LpwN&?*cVWI5WR4S1#X>br?|>c|D>e63SI^LE_BA)%3`kfp|_l3Ls(IiFO^{Sz_v3vmy*lQG?* z4+qmXCqTp=^pSFK&i!wck1Xs|83fgk@VLW{x+ak{2Z4bknlpRr^P^!WBV#^W85)<( zli(^>y1_!Asyb{S@|2nsAE3*(W(@xqNGk@%R<7OwzM0qMtw=|ufn@|th09{7?I-TO zHA+>&!0VJ}MGJBs?f$DJ42kLl?4Fd*^Def`qV?L4*Er}>unsa~cVFn_lpBH)Va^To z%eck}N<`%r-bLt7;mc3HSu`@wK0J3b`E=k?RvFbX{{f1Mlyx5^p=f>m-7PX_hh90) zJRWWw#&fbG<&Qc08F~^{|7u7MNqPy~_;P@Lf5+#`as2ZnsJl}|Wo_y+^+p=-S}04l z`~ZD)KW^=cd&ASOrTcIpox1=IJwUCccUdZfX)}3(Dp;uBMwHK%6xS}vA{IG;tMGaC z5}+Ma&ha!A;q20rj9m7dTgrn5e{|%8#Y83fhTHx4#_B!*Rm1V!ED zACU))1oV^vGQ)WfYv{*Gf>EKHH(m@u(le4@6+=$)fqAm*of#SSbM()a`GQ~Fo<|^i zUN-M>#28SGa`PM}^p}3JS0{mS&^12=*MuD`x*{_qtHVO9=?EQKB8?qqI|tzPBAKqEGV(`CbEqn*(PWC;Ub0 zFYZ&uGJ^mSg_~OAq8lc80;-bc&tG2WV@iX)(`WG$;f}kNt#!TPA{l$qykuCYH6QfPfN&0>M_2 z1Bz&bBcjNEgBv05-XMj!xjbrvqC(`3eLW}r%Gt|HHSqKZwEVfWfM&(v`m}t=;#}g( zc1~uy$?-*uXZ-SkGO6G=`l5?P*@s&wHw6r|45>5fl@~pZj2N7#gbR+G4?lb_SB`*9 zWpL|T{;%KeSZ*2jeO*WMuiJXA8@Ja!)eoJ=UNx+R<25Oo>qw#V67?!)95>L_aDiSS z>3(~%Q~JI`#(N%CQkfJn913+h?^`jyHr9!bKPT7x3;HidyFWa016s0d7=E;&M%<>a zrV3_o|AQDDJtGbc%gxrINO*;}^CJ_{yH@ol*ZA~mL_QUgg0$fI5t!m2lQ#Gq%&p(i z@e{R!LdK0n{|6HeCa z7as>rz5wxTNRP{kxFE9zRrJ&ww(JFdwTFL>v6jROu`?dW*;3R zhCIdNg7jYEu$1cNZM^JXzPCB#f^hFDZWd)nk~L7&T;vDuJRZ_?PuLyYN>l&Kk4p4^ znb?Ic-+%;~SO8JCgcsb7EYfIdV+KX8FZllT#*d0JFRgKv(PS-keJm~oYsXUe#t}Um zcRlRAjD6Vs@0rDMd{kfa8?z1T$=x0d4&P{YzWS)n9%WplB3O;^I0yFTVTflnaRqmb zwpSH-S+W{4j3JrO%blOM;Ntm?dhQZ(6!_}xV2f(n-@VSW{0g2Ri(@9P(@dYgs^^r7 zo{&`FqJoZZBE`!xJ;knoCa7?D}x82m;OazG<&$|{69IxTGtzHol1$!`C zO^Z%lQAEkRgmQSiS}&^q(9dVv=CCfRyRhUI*ro;j z$xgHzXA#Lk?rI+^=~Yo{wsDi+JMOKN@WOzv z&ERWK^IEHdcZLgkJbw?c$fLnF_Q=S0r5F^;y|$HmRmG|h;ch&Amm>Rd)1U<2uW=vv zt(Sd!r+f&elXO=+wR?O^j0betC>@!K!;!ec)~5;?IaH zQ&6ELJpB?M({E_3pSw8lGbr*jN4Ov)*LBQ)tZ&<%P-t6RKg)oEcUgkDW`xH>P~Inb zllt=Vg^2Ul$Gl9BViT!dU1PU6-`1&j?{O$8?;I_U&nvjtmU(jd%!E6x4VHq&#&4s5 z!CQ5~4T#0YC1P`5CO@0A)|W)gew0~9z_>0~p3d^*fPTeP1ZyBt>lD<&M8Jq@oA3Qg z<8TYCl5pVgXw?osY#|>Q}ngn${1FgE*AhyPrv(dcAeVv~A(dK?(QZ68l}oP6d1T zOK+UkYy*g>gU20S8KOb-2_)<)e*mKff#wx<1+JMQwSpD$`HNLs=k-`eA!LrKcK1W# z-S_P*qgN9Wb5$>w{K28QnUcxQU33Oz$#h9Y9wgWN_ur-lNhq#uAbYufGi*1^tzmbv z8tB;VXmn5W`vCNr`z#!N94a<0j)rBf-#R@(KiTl%UYAMLqFID(?l$?^oNAaosMnjg z6Hfje#qTnoHA?va@jqFe?Yo~(!H+|W3Lj~asMauy3}h?&7dGu+Q>%DFmYhIzv?i;2 zSG`V4if`wumK5R?b*~H~7u}V!(yizBPwtjrYKS{RaNv%P*RzbLdXCv2w@oN^u@PaA z2WeKy&+SqW;TVd#Gg{6#1WjqA(2%ttMd^xnH)*G%Y!!w$ zEdk1ZJ7lRNjxUO1ujhL1xMUTeq_lV)8PBd>e?G;xsJ{PJS^d?{4Aj}MlwgnKPk)vL zxw03EdC3)n4vA>h;hEZ_Liv~}sUNdhE@^dFmHW!BYG> zZ@|S=(LbR7@*VQBuisUSFhH0fc2hH4ZWeovq9|(fOWW7xM2qMLVUXBGisY46*Ey6T zKF*SJ1M}Ifg8=bt_t(0lZhR@k%wxt{!l0wNXSqr)^^c-U3Ol!cSC;T9?0^d_Pv0Hc zgg&qmB#I@UiF?_jcwU|ZjCfcJ-C&tGM|4lW0pFRvqe{R`Nq0t0naRaZA3=KaW4lBW zx|&C(&W(*3<`fLa2EgOUZRBLS6SBtQ&2@m9-5r*`VyW^Y2b5xvlW3m!)#$-Z+>?uK z7Ovlk=;u91kIuzz0b};=A_LKgPTK`Zy^MPqdY~(QYxA9hLzp@l4V)l_q|WGkZWzfy zF@!P^ovs{-L&H|Lz_{yu5PN|A>M3aRfxDfEogr+5Oz)cK1OdMMcgz=6ReGe;^BP}y zRi(4Q%KO?_kaT;Pi1sOpjggRSZCt?8fM{|n(=3PXz(sKXn?+EEc)DGU!ry%evj{$% zKuV$GUpiS}@tycF=--Js%p{FAH~r~kMR(yBC5RwmD(Yi}Ps?hs-sZ)(tEY3>A*5a^ znZS0zEIO+rBKm&J&bGqb=Y+3dFDI2N)7xB~0)GiG1v=_ngtPV`&tu2?yE-y{%2$o^ zq0L(soO68ONErqj)v%q0pc7&41iB=~53g(k4|;DH6aK_x`7=0{xgF!`;vcdKaaL}J56gt)$vvluUl-xS)QpE|dXhnE>xAEb6k^2He3r42jQm^8^(;g$J$5%0bXq(6T%{PxFs z3l(QpVa}4SlKE-E%QJA`uKl+Pi7m?faF3~L)`uP1pJviAqpnm2{RryjgHia_pJitu z^A}R*3Tw_Rwn}tvP}#e)bxI_7OpI{k&W-uMs-2nsGk=?D_A!n8qYknIdy2sSI!ju?PeNld68<)k(ExjN3Ps2tY|?#)Gd$_%h!N45|3`!4XE<$T`j8E;B1HoJ87A;Np6`~{5*1}r7-`e~=pN_KMKBW${J zI8$!RFVr{Bq%F_~+I^he(z@u79p*w=c&qVJm&0e=rJBuv02i@esT2n9-{z!)pFxA>-MhLaC|UCSM!Wq zfDh;9o>d5Q-s6)$_p>YX`zNEorBT(_D!+KW4Cn%LKGm+G)uKhzYDGQ1_FKFQyHhds zr14xCYyBPE2UQc0$8C{qOWk18LwA!Wjptc5XZnk6X;yVGPR2k*Vrmu&+F|_dner(Y#9h_T|);#@pvz zvR9}Z3RX{)xrTU0BQe2|u&+_@SSrhXW>ArhFBmJ71@L z(QvC6Os;&8o@kKE2_!#DQq%d>oX@IlO?yi@yV=vX@Bm_9l6aE-Ur#{{!DGmW!^wxg zg%eD-I%I1QdSmcfj*#CVax(7QZv#T6XSpw3(|?It((8ZGteI)=H}}kxthQ|TqQ1nABZBW#xd^E)`S{H|Z#GsKO7 z>sGgkQ5(=4SG{;u|Kw$DzwbtWbn?FqNL#hYh0nb{xmes^N0LS14RCg<6WQRJ#q78q zmk+b48dDEKtdm<~CtSCrf6)LHeb}F%GsTQY!B0uvFGa)|&q=<91c_?V+7_!)*A9IQ zZF6oL2sJ-`;K+0Rat~XX;$Mz?BYC#2tj@#&c*Qs@-iuhkNCUed366%H4ij3ZFO8QW z=@>Pf4DW_t%~3~xe~$djtQ#^zb{sEKzAHhHYn=XJ{u}!{B9}==8Q-2xjJq&kSTpq^ zLpa%dEq=~@Pl@T4LP!|bstPT57i0dF#(v_9P@PA8pV>UkDfM?lCUsrsemPDeY*!1v zedU8xXWXh7ab={e!q34_)rw!^49pp+_0Gj@)i?ix-ZBMAu8VCi==q#4){ zvIky+^{9pq$53h=vAzswU3W!utU=))mO<@2Dt-BjQ`gU2a9+oupAX(X1~uJTyRH<# zCT?Bl-Jl#0BUZeYr&$m(IX+zPh( z>RdeZ9+=YC*}k^d4EfS_G`bvH&CNJPh4?DepE6 zcE^=g;ukvNaqPcW&7ml=Uc~foD9XK71C1iHA7J z2K%|WWr+nj+`}#!RkJI2wA0-SfzgopenUI@_m*zfHh9EFPqZ_25`mulzH#$JeintA z#o88C2MisK{M(BIaUIl_*8AsyT)T&;1j~(tkw}}^2%2g3xJdblVYUxS@*u0(P7P7(j3RD2gj-oOGF!7hm&6 z^kEn3_+kH5jqD45%b$(fyMDPj+Xk}~51mitv%ZLiPT>%`$dBWNu;WoNDR-9r%AT7n;H{D4`Y4DE*W0Msr`l9px!%*2NZxWNe zNn5%ONh~q!s1w;X%G<+7Z`55x4*>ROd`NLU%liBH*65DX|qG_&KWCL_%-zAbniT>0k1okEE zewq&6@r|$d@ijcgug}h5a<2tQA7t$^)dM>gARSl9@!~knfLwvEh{KD>1#Zq}h0I$M z7a%g&-Q&=;2~!ns5i3G8>O9a}$%}!q@bNx<1W)pk-%$`d-RG7uz(Fa!svV`*wEPN8 z%A4L{;C$bMc?5(vX)#TlB%Q3$B1FxNIWSWh_A+S?zi0X6K;V%**>&)!q48FA2}mKo z+^=Fcxu&S$cvm$2{n_a?aU;XiMaO8rxO&AE1HP+`a+gXUK4x(!dBmA0S*1`}DA6N! z0t$J{i0BFC0wTnd4%AvU{4d3&TAdZLy!Sm(qvEddPEtW%R#AwZKr;~~ST zw|a#yC>=8&KL(*YXlgS4H(_9&Xf!Q_4nxFG)Z|LTV79LrTr(9v@B%su%1z)4uvL&r z9{v`<{gsvR=-uV&|1^hcq-2_V)3JdhtjuZdse9mkE0XHM73)DhJFqG6?tKCv>Xp#e)_8D z5%q+^Px#KVv$D*UeL?rk@Qd{Ctu?!i=TB$jpatyoFVSW3>6>EFF5{5ryZ1=TA-8GF zobx_?NT@TUZL|k1k}wD6v#3_oB_6h8h(#^MCJe-7{sb%Hu3Qhs_JeQGEA1f3CZ)$1 zS?4s~_0pnqf7#CMS0P8(llkK^FnDd-113n3r{)G#A$+7P6g zI6=C&hNxZaQjKnm;RS$aAjV6?IE;SKy)P%kV~Fb~m}ZOG;jgWW$D!HyY}CSUwu>sX zFXL+PWi0w7vPAb%&o*#K#0=eAr*|_259LE*-K%Hh7qT?36AQf0z`53pMcm+LEPtCH zfrvz=T*>>=|FX%%YYvPbnu*hb-;uigPUJWL+y1K&`?!Nc8z0j?O2?wu6g! z#1$=^Sv>5qa=3nsmUnzNRT~9yjRQ}cXij(`WZ@NLwgV1`uKmF?KYlOH*DEjfDG|U{R?oUMwZ4MG}wQ393{VbgZ zE1#SvMxfIJ7lRxLJI88R(8>pwq>^A_x3d$gZmFKY8`2;5j?1zAqv87vjcum7ta#Z< zk)yxXk6${bJNM5y6Ogp_DQBzLW~ZofYW|&gdh6%?E*dr;u0D%_4icr-TUQv&9~ViU zrUZTU5Aa#X5Xa~h%?KRV!~lqy3FxIpVeYSg#YL^qmwX=V-*KHU=+X#|hTB2d+pj(3 zAeZXT4o2?Uj;l8jwGYMgOWF8i5K+F<23nyaRYoG98<2KL7?tQ{Q226dJczM}=@^sp z-SouqOfzJ<<~jy^-UH6ZU|%bNYsdc>q-Q4pqZhQWX}0Sz#trVDGY)%3)pNl9MZt2vdfsuuUk==!fXZ+ur)L3dQPEmt0%b$RbhrH-P?DzV|O4Ker#Vad!qZ~!-$X|TKnFImhp_K{d>R7u9rA_cx?A{$YJsb zDHhACw>rb}Gb+c1d0D8BaJTZ1mnRyzFHP zmfhBNi0cAnLaZ%c#@c{W>$Nitg|<#amOwTUX9-$P`Fo`*Pr4Ox2_f=N%w(B-Rp`dA+=7;C6%YTqK3~f3zj|YF{9ZJoWgR_6&iGqF10}yMHrnleXWJ&M+>%p zmGoS-c8&;41$(9%cxSMD-u=%h54rIi;d^2IOL z9>mP0y&6t+x>Q~%u(6A?)ev>!DZ4UwP4e25(k$j&oThb~ZuO5{kA7|@-tLOT8;u-u z1>tieMsP4iHea2Gv{jbe@Y{bfB<89sOP989FwQ(*hhBHQJ*BXLuB*QO#OVgqT&E2S8a`UQQ&Qk-j>qN@~tlhEI&tSlD z>RsLYu}WJpg1*e!jVDBJ%_$Qy=Lw1G(0APy!uL~rxs1cPCh&IjNw8g(s-n+v&@9@x z=5@92lW$I$m$?`@!vEndRjM^L9&r$|^4e}smj=~@^lykQ4`eG1Kn6+^1f5)KQaqRR zi$dcc>*yORVq2_8M_QrPXAO#pxK_W8W+cR$1NSc~NFn>_=62B7QZq&negtv?^)J4^{k9A>CtvGOF^tt;)B(0QHDCy;MeQ(2g&J#D`{Wg} zofJ{nlpZoUj~+WNc8i`| z`F`rs$bMlVq7oW9Zm0DrAgMygVmN ziVyh)>zI5p;Y<*=98y?^N;OK@bOlD=`?5R^U!-ve-*{4xaxv=c*Cy>|d2mz*Q$2k$ z3@R@Nj(QzG8=wTtA@>T-n3K_y%F4;|(iLC5X4P-_Jb9ifYZaP0`zz^KdJc-KPH^$J z7_%Pp?gWf0EmgrA6b}$RSWr(I* zKdE6RwFS#5x@E;Vj2pAo5JMqt4O#5jOr8_4I^yE2u`N?eG*%Ua_o zzmKa@y0bqSCnE9Zt0Drzm8UZY*Zz*qu>*vu918p2i&~=3sg;~+B?qx4N-kD?H!qkJVx(K2yui`QYtSqRbV`DLXE;s2xEqV+wVs=3i&GjX)h+gotpSR@h zL9DhWF)jRz^3NIPIs1V4ZdP!`5^}`Fa(2f+6HQRc$Ju}+j~xP5$QU`Kby8R7A2AY@+k^0wU~{B-uIT~?C=Vntjs9vzYvYex5k*rx^kWXi=6`L7UUD}d zjzJ1+PJE3le!D`k7)0gmHF#f9C!3&vHJGl~DL&Th%aO7(cMz*S{N4TsuuPuqJ(k(3 z*+s$!f>KdVZ})Nv6rQ=a*$jCC5D8WO7Cs7WLNnsk*3=gMJJ8dB3yJ?d*C>nCT^q&Q zEiDqMvrLftL1UO}QOC}S1q=zl=3YQ|yrH?2s|efYhgzFPHSA7geid$Zjm$TUZ|D&s zF$FEs&S-lLeSkUkumO5=(mPrHvVIEBtK2&bN@BG9hr}OCtIk{?Hx?wz_qbGXj=!%T z+?{n`et(L6`ViEk6mu1V>Eq9rZ9Yv(Lm+3c)IS-9b{+4J&TaS32Q z9dOjC`4s(3pJl`AhPn&P z7g*N+9MYG$+0v zOFL67+4k<~V*>W`@P}F*SdjQ*9^>-WKkr-H@5^x=y){x3;f7PD4XkX422BnrLPrjYt7XHrZLE`CE@e_6h4ce7ToR^Lp74$-UGof3tUxDJm+vY z0zUqQ(%=OO()PgdBmuRx@)(R8zp)mIvdLm?nf(rz;hQ=@M$TY<*qX%#G#Xy zVf;9hNvl-crHG+uP9*bEPr*r(Z=XIarj3^Zs1xuG99gvo34$`57LVu=c+YJ%Mn87r zak^(4h6&l(A)L%kd=401?jG#A`GW)R`fv%lQzLp(lxZu$BOPKH=V}vc^eK*>kE6L1 zJkDx2*s^K-JlsD95P!JV&1TFQSoRsW{9wftjB8WEh0h23AZogl+u#!=Al zcYQ(HLwR4xFYa<&I-54fhS$6#&Ir0ey;djv`$Iws7_WQ&`>VOoT5kR)9M&&ptMG(? zW^W?(5-fe@r0U)o9{Z#@w&$#bUD$FH%$Jmiw1{UiKotbLc1^+}D73^^hF)|Fa3PnP8V_N7#r`5`z1w>Kme)*#;_ z8=6>dbdBSmUz`y{@Ctkvee|dDr#qa*C-Ts2$5KTehkUu`J9~8>NbkHH`G6>970v_R z%9-Cy7$)L01?*m2|Ewt-;v-Hs0a0>>AtVEh93(Hq@5W;h$Tqp^XIZ#4TLI21ih|zj z=~nEDnS^iS)!Mx_01dcwxuTtf83LSexASb-9Cp-2dJnI50K&m0(`XILKd_om-)9`lW<>P)&~@vd5+*u!TfQ6Q3Gp~APtcOE2f z`Anvd;ML~P$zUvDnp8<8hL;^mzy64*g||#*DA$Te#{eCf+Do(-E~pV%Ubvn>_Buf^ z!1(C;Oe$e}X@MK;lAx}HTZ|tWi0ut4dc}HPZ!l`a<`=!s z*nq=yb4PG;YX|G$(34-#2o{IY>XCXge%hN@Q}C%F^dF!@cK(4Az|8rU1TLs&>Rzsk zU?R3p*Ef!x-uTA%l-q50QVv$o4-NvdZ7bG)<^vQ~A3d4mR>J@8W31gU>C zk#;jPFWWIjAI9P#1`9!z9n`X2z+yQv@Rw3IijiWTSUWu~vc;J`o2w^I5f}n}~Y4+0o5x%4jx$h`o4ClTV>;F)>+=^FBU{5FdgJ%`jh* zo@-WoK>sF$BvBQWYuoItB^@Vre2c<{9SL``U;e!o=@4yuO7{*-+Kq18k}w}peW%h8 zRQDpR%zYxBOPM&ZCGYcTxYY4#x978nzgBk_+g|W|&Ux+^NR>SPu3E6Pag1X8&Yn~K zH)*-Rrl;22^&Pi8F1AQb^I}%@6v_|us#bcF=i5b1St$*DFSm-V_+`{c2u8El3_I(q z=?;Ay%CL0@MZl6o8<-eyz08 zh?iSTJ@LEmZgI74jxNW|%@^LJ3QrxG=vQvfZ~RxA8S?wH$!QCGw;x-C8t^9gc!AzZ zG2`Bc`-wG;H&H#Wt})Yrz`Pg38$A0LTck^GKgg;%Z{_;lkBf>ZJNQVP^~bs%<76{d z0TvN@@QznvGH;xPd;o9BR%zVxUPD3TRhwz=T=FNNWxdlf0fs z*xqG7KW28DBEDACy~yP)oLpwwev!3*PN1dTP_=ld@s`4s5`1>mav{)Y3v(*=_=H2r ziRCc0?#aEqU%z>C>E$nUhGg}fOJoym=rhpRqdx0Ug>T8PeTKT^XD$-F`5(N;t(`7LB0E~y#KbL2QkDu*E`@bQZf`d4t z&+DT)d~UII%Rs%>4_8ZpXcdB+3@#BQ^-DNtrA@}TWPJ7HLl7^gA(E^c7Qa$2@`_`}XwU?SO6(T|;%k8U|CFV2FM|xanpQDF*o^$ z3V|kxW52w{!G(-~!#sT46_ud2S=N8_d zTe!UBF=*BVNPeu`;%VXrk3K!{?=`WP*nmt@f)m_`!jdbGK98q6r~H1l0SHX8q_XFM z?UpwGg`GzqY4HY!a3UbeC8Up#t@YJb(&U`@Y)A@49rOiEs7IugeJH8#f7DwF+Jwq; zfZP$HC`hKM{t73+p~vkK(`H_^**Ai&i~9L0S}nF3AzoPPZ-d6KW(#oGsKcfuYhw<_ z;A11@V~al-PS2W0bb%9{!h=wQPC;_6-R)b7u^_#*IqHaOk_C=^VLK8m45zJA!F(1_ zEDn+u>KTDsN5HlCLNL0)5Jq?VVLvYER}dwA$<+0NnlE$hu12Vt8HZ)v+)CH~%*_Mut@eZwyJYIi}yX8?LQ zzi~bEujR#WxMZ0NfQkeTFD$V2N{wFFK&v@AIa}Y|K{Y1BM+1##&HWzv(wVpqLJL3Z zt5ZsWLvdj|$taC{5d3;#*%xZsZq!#b|KLzMM3cCS(jg2AG8& z5k4Z+Z^6vy*#`Sda?%!F{}m}z1uMSZ6Ru0ZJbxE~88`ld_WBruobk!y!4P&2+_9%3 zy50)UQKP1%T0wBjByymNw=6ghh%JAMLQs29{Qdf65CYK?Ll3~pF(wCBHL|V+XW_ly zjIzDv+mEh6!i5A)RVSnY)s4`YowC9{8Xz9sYaRV{}~)7;YE}o&3u>?1;c)_PXx?uwM7t11hoM0fK2?NfR#!Nq@$`L^A&H|ZnSJT`JEY_ zS%T5&JFa1Xwj&r)ZY5J{1wH+;L<+lOa28O8Q4tr)0SJTAQ;WTr|8X1vMtuAU#C=+p z*nY1_;^w?1%_aDl6~-{)w;P1kE34c$gMnBZbgt1`4dVuw>X#>XQEGE2L1He>QuS{? zNX$`mxXE2@a(jW+a3>UIwL=u&1w6axko9cW!h4H*bg&wyNrx*Q>6w37iRz4k&hlXA z(H+9%w!b(nw64r@9k+g=Y@igd-CUMttVunWrS}EzDkCnTsBsl8X+mHmKhW}oef6sc z>-CVjV)*FefOTl+na}e{_a;!i#x`UK0$TSWc7|K5(!8QqYjM{@4=`50s`+FctA6vp z^wfc)z9Z=3Gt|W=mC0LudKNhAl!y3jG8*5ao&L2xrxvxgO`o3kqCnzlX$9KwzNDiX(l8r4T)FdrKAXJBN8S+#->F zfObp{EeX1L39yqUH+?z3^nO3m5bzQGX?z5R|8RuI6S0NvSvxy(m)})fU<`&gjAlhFE|ol3&<5{N3rF3>xj&HvH<$L!`5{`$2>71RKj}}7K zQb3K7GZwOob#m+?Mf|a`BgN-ioPhk5fwVkjgurwE?G>V3^WUEi49b%fJhrNu?W?qY z-__b)lSXNN{Z=puImp_fM}%d(-o`)&-gQ*j)d`A!iWvmSG^|8roMq`y!$&D}+)rZy zhHJ$%cmz0($5_2Nz_i)R7t|?<+FW@_%maU+0B`=`?zib@B9k+q>$F$E#qS1idGieY z?+V>_`p>9FYoZIzS^Q#?E4^~&y_u9qiJJtRgOC6CPG7axnb)lejgf6eb7CV4l}-b< zZAGw2cj_ZB(yUaXtc{xO1gzDS&2bXmw4j^4+`Z@OZMD!4}eenSZZpVStom=D9 zty8y3XQ-aVU3k5MgVY*AuNLe91W9$HjchgPlIStj!p)Dp!>Of{LG4b77B=HhY7x6hPbd#O%}+wLWFoW<~D(;*>#GUadnw+g2s|?|FRqc z|9|K|uV{c}46;7;QfX#`ieiD%hRi1?=Vqr779oY6N&!_*qhek zj^pPt#rZL`k8H9AAtg=ywys%<7yq_z*Sp;4&FlTndAJXsT7bHN+XTo;7+e@JzUEw< zV?vtHT!1!#DzT!sa1L{wqiu0~%wqjr3wJt+7})5Vj+sToU28 zicOioNYPQEt#S#N4cP;zGtBm<*)e7Y(E}$+mg^yLUX?Y9zK*21W%-TrL_qbkM=VqHsy-b4g~wL)$6bF&&o&!VD$ZA8S@ ztaR}r7;K^qXoe8Q*(RtXL@9AdGWd`DokhtK`$?b?yWT+sYi)h!DypI4uZ+X1o%};u z17@kzFnd&X3pEJxhgY5gAc#lb0-Q+nF~kmR)aEeCBtI0#gVP;9|HsjF$5ZwH|BO&Vq9Wr~DwU8;#;p&fftyjtxQe3e zO~%QHWF?BMOO$LXdt6&~_I7dO+WT@{_n!Cfe1Cu6f6n9H_dV~|>pA)QD+hXjE+Gt3 znMPYZZH4kXoCcs7rR6AN5KW0cKC!tj6_5GfZ7wmVn)p3G8^FPk3K6wbq2kws$I$V4 zz+LcCOHtU+FxDN~rAe~=ZzQPyk>?7-juD?W90Re2-LCf|Szuf$P$J@6iGq**efBmY z){0KPeqjCN!4H-$&P=1~kN|Zq1td*hv;pc;Ccc=)yA}w63?STBhkti> zoVa%YJbYlhB^9ROb@2~}FT;)m(8k!3s3$_Cctr#HJ~sN^lg5Lq!VhS#3)`8%s`;g$ z{%v$5NNnO5%#CcqXZ5qfh93+pRn=`x!&K{`&^=v{J1N~rb{r|sEvc=c57$2F(jQVH z;+C%Dpf*5BivIt8zq;^%<2*brRC=Kp{6$|1>Afit?qYZ>^i9_L)0{LB{qo)h%2CvW z!E6EnL)>lfHtm(mXd;e`*FCWx?hAS@0Q3y*wD^Ezb8+(3G~X@65jeTl-}tHpYB48! zA}N0XFI510AGrVO*ag7p2S=BJO#j-F?oU<{m+>2dgRh=v9CaszfKR8W<_|V-qD{rz z^)xx-V<%kfH{?38*+;|&BcWdbP-7~{n)zhQktE)+*LJo_D+IR%ojnsyxZPN5f7cu>&Uicpk0Szxl7*_dKVg^!;EMi0-3zZdWG< z{byUSfcBlnZbM5vx|&X*+JFFH+%9^PE6TkM(3eR)Kz*~3KFtieZ$1k-RlTL~5Ib4E z08tMke=pb0+aRghZwWv12C{zrm?rA^>EI_q!kENgTPG#w7kU2yF`VaV{Y3_iNT;9_ ze;i2qM4i)8LXr(e7(#U@qRnEoVK**X;pbI|J`Ao5-o1Xw!sS`8)Muiif3n7rWv(k< zec2*Ud4|=z-ych0M^}*J5@T<_vt{^h_xC?$?;C9|I4DbnVcl24K5rcv1^11Kll#LN|uaKe2PfZu|X2&VA#Kv;MJ4ZOg`7We$ljFP8dt1@Xx$;kGx!%Cv zsZRQYVqV3-yBVn-sUKI@rx@d99;6Eqrz@nEq?0x+SIS~thIsV3xu$h_L$sFlO!)Uo zPq%HTcp!M(=a`XW_uqw?8s!vWeWM=sOX#}m3)#%_^}IdOfd8cNL2+2|lEW6R1>KAp zi>lrqevqkxV7CDSI$lGkfw3 z`b+1nC-Sec;YONaNccynAtTQ>_RJ%PhplOQ-bL_fSgiI5FtOs%EWDJui7j3UD4s|` z{yA=pZdS@)1Z1@%14H!#Umo}8uav6R8o;Br)C-wt2a<+VWjbqj!=XVC8+IJob=E70 z&X;>q#ufsy)y;1h_ zoX+tf19?H7RE$@K^M*ynlU89OgL3aV=&Xy=AhHk9Mb#=1;~(3w+x=taKhJ4>dq5ZO zU;~`7Mp8MGV-J4bPEqtcLI1dl*K5HcDu4DCboAk-L5dbw_8hd3wx7Vs=(s$+#V0n- zdZm&*Q6D20_fwjbY@z9qEVnn{wQosuUBX`=9E!<)c9&JnHAwvR1{0l-=tw_ZgQG%2 zlq_4!BabB88zo!!fP&vw`LmR)r{^67VRh;{<3~1z#NqP4>2;qg*t2^m*7T-2NJ-{; z=CZLV8J!ygE5Nz%-#jid?)tVR9kpYSQj#=3r8WHEkGppRbntT%KXYkgol|)kQks1S zA}@dG50T7W-6e8hEl}$Rm3&X*R~Zn~^OI7t{}Ql|bUZz74Ep_iH#C|_w@4UjkC}|* z^0lxx!W)F{!!utFLjJYB#Q1tQhQP`S*4G%UGBU&X9-D699i2P9&Zc=_ubIdd*hjX7 zKQ~v{BkR}Y9jPc&lIquw@nH-GMgl_Dos}y6%(O-mwo)T9;Bf)u-4fx_WywE(BIU-X zV1(x!^f=JHoE4h0?dOtrxLP*|{jX9Z!v4v#gM*a$1AXAQj~3oRac!Y}@zr-JP#<(0 zu85S(aaY?m959bu_XGeU_M5 zQ7IJ*GXpOBqc4KLYQpQ8z@r|p^xkur(qdFu#&g5{cV>F)(3e5$7tyIDsHByrJg899 zz4i1)>prMR{7kpr29p}cR^U%GRKmcMtf+lFv!3D24&%cCjidy?F^~xKOEuOu zW0<62x&~V01z`^GZ+jpr@)z?!sazQ*U9nD5>jrNz=yqTm$x35^HGNRCz`0n(`b4x* z!x13D|F8b`%r{^L`NRBh&2F94N9jnOL>(*Sc(B)$m+QY|9&@-g^zVQQEYz!*r98akqsCzZwgqj{$LSvguC-EWS73fI)-v8w zNs2WwvVyL#5p6^aP^EDZLEYj&XWbfV8aMMUIq?yd8&DSM=u6M!HyMEJqiD+d%vE@C zWW#Ye+~_^vyh@XY7a0tDENp&j`uAFwDprjAEtQ2I;B0zssn>KD@$N==(G`u#x+$Q9 z1-*%`3G98LJ>hc1YrV;lBDtrg1{5|r-!(t%KTmluS_GXJQI7z!qGf03HtKno>(NM34w>tK9s zXP$GV)X@JKOLEIBy;J7Ztc}>mt$v$2-@R`mzRCLY7w4|nb)esD&!&SZFPRjb@Sg;n zKlc&*?2QwnL&dI~F2yNS;zq$sTYC=1fq@>(fxT;TCO8xm`uhZKd9{qbrwDdTGR;GsU zjtcw!ZK}X3bSF)ba29!2as;&FlVUu zS)QXjvRt2d?kKw{S;&06Z>w_nnsdV5d!VQegB;K;Jhdyam)X4%Gk31GZ3AFoN9-D;f=zQ5%~Qd z{u(c}OZbO1Fkcb*P^0+ne8NC&PEovxv((1=c&9x4DYDgwM?IMJN`umc7pS_;eMAdT z%ClAcd+rf+aUX3*?MdH`r2}=QO2rCtx z;MfmR#b`0`uSlehsb?!r0oc(ouK1F$Vz{TRjt&#XN)BCuMOzs-yFmaNSyBnWn$D$v z3G-L6oJ;4n5zZw}9bJ~7-2GB!qEla9vPf&611L+`nf47nKZC0nFIv=a)hJPl#%xGdGp*34 zzYdns(1ipxl@}txn&Zj3)Fbet57$+0o>O1lJ`1sfg?~BoucpAS7=T!vB@7;;HgKj- zn1f2g>|oYLrfPvP zq;X!NRK$a({F2?9*9(RTAyAHIGyV*`-inr0Xq!P5AkcOB6cH!KU(&1P(_-=#a)rlshfmmr~0n`8{8Bo#Hj3sJ@dhMUXlP>!;omk ztbNsK!tjVc*oRsm`+~Tl&E#8UiBrDF7UaMxPs{qn-0>6UvSmZ;y?3}McvYkiq3`YG zD&x!UgKcy?RU1)QFpDX}mUOh*gHGw)6&S8f|xl_A9*1eT)fK@OKwXCB6Q0Mf&GxNQ0q0 z64MAg+zx&&giM*5A)1#T+ui%%Bp46$m?khAD#N*8Fl7FG0HnNt#)P4#30_BoUfx*o zpd;I`ur3jtUR0d~WsNG)RApEn>}|EmM16OaWsw7WOz_K_?`0QfBS3>_(F|5DVzu}@ zR``G)xQQH+(Fm1nV)H|dMN`=XZ8!9AvWbM6#xPgg#gGRQTpMNIENR*k@4S7+`+MKhuNi zTUF1mh2N{6|JPdnv+$VKvVagT>e{i@Lmm$+$M}5}S0BnAd!-{_cersqP&ww6!&Ait z7kekiB;$deQNlT!08hPpNASbBjf%!xDrHI_iEHmgP3I1OpPm$+-$i0qlq?m8tzI!iDqi8O*s`#p4ufe2)BGUKi|NE6hi2Tenm1d> z0g}Q!`AL8Gbcg<{vcMrxoE6Mp{#niOPntX|c=Ai-gs1dMB<#tbw$}CF`eWut)q!0F zrRHzH!}=0v-=f1RGXP0?+OSnz#G75eZ!6z=8;Fd^tgRP!*t4pgv3&lQSF(M4?3)ll zEN*+7UnXDQ%|S%w9qOv_-o$TWn@z1bt6wI+ZKu=z&l1|#gt+t#)}I~eRP65-iuG_= zt`wPAwJ;bDlp2(#`ohlQGRq21nN(cl2G#AMGB0qyKCbc=S`*qp+TS{ z?#UTKIJP*gw~oV0XGCpU2q! zN&D5>p~TN=D0&;Solm|tlLDPo`&Z@yEtA{8ULIZzggDdF0cQpGaH3p@>_#+wq+{T? zujD}k7_RD4ZbN8>96Yp z_U*G7f0#t+>$evEypYIPSDI!6a}l@tpJ8fJsLp?5b?s4o4uVp!TTij$tmryjFQjq- zuP~LeXZ4yb2f?<55=0(8WM~UGe0h~wlkq3hHA^O>a|w>`I1~suDqns&K07(Jh&U<> zgw?CQf$pI@hB+YZ!xdVU9kYW&!Q+tPKd7?uX{bh&rktM1XvboO8Yr8^62F=(xK4Hbf{AgcL3zD-N2&md`=`DG-> z)AO)XQe0WKFOMSG{OcUYDp+-DY z5{#a~GwR<^ih8^0A%LAhmokKAx5;-ohP;qR{m)zF-yW<&HtPhNOjG!9>rkmJ50lzz3a|-yeW9_y|&D+&iVDuC~Q%R2&A|P(w zSs^9$?LE&8F3g|(wkHkfi(;K+=z6FtGZw~eNIKxBAr5}70|4Y{(LE?6goq#ckfiBJ z6BF7jCZby?!yAs=2t8QU!PI7V%3lE7q4sngYX8Mx(O9ktGr;OifScy&dkkgAvo8$d z4mDfN8Ez-9xCZyV3AEf% zLZOr60|r<#+*tfhRNtV_Mh zeH;w!EEerOzJIvp{{*V5nqNHX9*Kv%oz%>k7Om7I=A)W)M-HgFBrMGs| z(zK_q7skV}Yw@hSxE;cCDYT+e12b{~Z{m7{1h=4hq!F}k84O-GQ(MH}+LAjO5YJ(o znIc&%gb)#$si^H7Y~tcmi&ijzxIaqxqT=72AK@EKv|M=JH#9Uo`14AP`YK`$N@B(J!{$Pe(i7SJb=zQhLK~H7?J*`mD2&0o5z7yPJZsw2SUic@fcF zc9Tewb3rXb6Wf5BO9DM6NBnokMX)Csba?nZ?r<5{-Q9fy=~cf^R2O}FxDQf61N6pS zCRIu{DP#k)mVRe7YZ;>91EER)^?j)?LpPwuTen@C(5MKYgbe`F)r80Qz0U00j7u9{ zp$RydfSv^l+Jk|OzxE4weYV!$eMeG<^i#@vR+rYn9W{9-S<-SjE5H@wui+QdC^$&2a=||)K0kJ!7 z;wKNk@+0c9Y+Xz5E|l%`3oiC}-Cb7q8isq=8Sf{^YHV@OC+6*->4}DZE8up-^2ZGq zjd3|H9-y~_w4)MhO_^5jIqcp3m{EEloG}?a4189vik-6?pQ2cl-jiY6PdHony4tPo z^Jj*jcmx&@q~d+6u=n+K{I2Poy> zG`$423^|?9)M6gHYbf;cU5FN|6W2c2Q0L^8SAzEV`*KCUl9`T`tF9}~C`~GQY{VxA zB+oUQzhzbr%s&vOo6t|MeM9{xrg4m(6|-kOPKsk}{orHOY02Nc<9xbFF2aQ|-Xukc zjGpu#fH+0DeFRF+Ds2sFf~Q?qfA0WqI^J^YGf=1H=+_*HoCk_61!uy?=}^?KI&@U> z18pJBUo!9&$xfCFk68+7qjVs*X95=%<5Xs>cKDI1SbT)}2KqmRvv2Wlp*|5I51knf zKr|;#p=N+54wSI!pr^505Wkgj@!M4l;C14Rh$NH!HAQg#dW$z z{=YBPeu~J;&O2}i2*DQ}{F%VXB8Ue}AfUl$0C%@w&q(bIwjDu><%v@#7tso}`Jk5y zV#yHF9QMnXDQWCzdq0^K<%4yiPmUtbb#k>BZ3D8=H1XrK-jbZNkOj z9Sy5>`KOboYU@Gqu?uut)7>v}$$ZB{tk6%WWm;VEkBaCO*fIi3=`3_>6ZYH%x9&^S- zJH&kL_vdU?M}pqgYw~t2EflBGnm-N;L~9 zEvqIZv$2&*56kwqomI(7uYYN0(8?dL(D;2ZdkXyrJZQXlln*={V_P@`=4rV6*1yo# zEQIn+b`;)%V!b+fX4dLc$`{cq$M1h-(w!VQGB-Tj2H{}f02j_{)J1r$@gXI7A_F&` z1n4yLu?}ABw%1qNdws6>nm*RDSsYkj5jfR%y@wjj4!1Q;yS2;$H4gyJg7uncSMy(f|8YKcMA&tI}xfnp9n6Y=P5* z_Xa`ro#{tXTGQUkm2bxI9Tj|hxKJ*l?0%=x?EC`r4PA{!i>=OAzPp&4?;uY8`#XWB zLSL~@Cp??UcyS^0pp?99dsu`4?N^Z3$@QgJQM&c{Yl8#bt>Z^RpKck|d^vkw=*`(G z?Vpit)w7ZZE%ngZJ3E!?`unbY&n*3g3jBn>><;kr2I-v5*1ZC|+r3xXQ~z3#lGU?) zsb%Z&4B8e$dqA9=X;TSwtVg9K;8`=mWqP7-+oC>rP)?*LG?Y|yO#ljcKLL3 zR|38ezS=)Yp_|37=soYz`^I!p;mOf|Y9(^L=aS-&o)VJ(SgmI+5*FGU zS=GKn4+M=Wmo0Kd)<=aXxYR_-ux)4$H|KKA>ixb|s{1VsntL4-^F_$%OY(UYIczhn z?@9}r`%=!u-KdVO{Q{tRp7ozE5oChOA}cROnN5Ze|I4TE34WeUm$FpNJkK}I|EpLZ z_rCQ)@&|#;j=~e+&zWbS*YFwZ+4K4$=Ie9Dfl_Kiuin2DJn+f_W-MI0+V}_9GKwJ` zISZ!46-HoTss6?`=3Pgvlp%3niOV00pLEU z{t|!AV0$kHF4O*`Z%@ULl0-ek<0I$ln%5W6gtNDr-Ii1w6CK^M-_7s-YTct^ZMoy` z2<72KH9#0o28S}#grmIh0eXth4r-{d@?*XRRH?TiCMSw&vA<< z*f_=dyX)!?1S85M1vy3qMEn|wsEg*Y-jyp1fYZkRAO@C^Z`5i=heX{RyYuou6nUKN ziSKhy7k2I;ebk zQ!l*x2#d}-RZ?A)PAZ3de!!&cKEP3UXc_M_NL$66>| zszB`s+*+bO$^pi9TdBBn*v&_>*mTcc=#2Z49`n`U}fT_0*s%{3ZHd)EKqQZgXy;IeFH zp@}$^Sv=dzR_Ll+{G7{*uRiBw>+}cO*X_cve5bBhn4R;bWyb=`=_~y5lQWy<8$JKq zZW2n-d1oosvC@EbraYc&E<>H|D$II1`yUrgrsTtBr1tT!V>B*@qv!*p*pFx~Dtcvd zqh*TZ9UY*=0;?7v1BNFRC~RWgzZELO?B@#`s$k*=ATz8(dvN0;vr8{1h$3`?a}@j{ zSSNwOG0}be0=ERU$3wSAFNYND+b7a+Wj*aiAoyBVi4M0!xKT-Zr}rYf|ui{&6g$*UR<5)3izSN29=GR5XO^mi7i~UcS zBne-Ia}7t=Zx9KhXL=GWg4EiSwme z6;s}VRy~gBVw(2rASW_nA9FcAy3R6ay_m#ASEp%St8K)SxpbRUPBdImYyK?muU3a2 zsU$h#rg2iD%Mn*UdLg3B?|ae*x|K{Y5#^v@zt0R*?ieF;Pjb*cHy{X=cciuof#R6O z{;6@_!?Hf!+WUBZ?b6T(UPs;@OKLp;@1f$+JN$xC23)!Dq$e$i6jo37|>r?8}3jO|M8)pU#V}cFJu9#X| zv5x+FJIh1J=Q?6$^?S9LyCXuN=TDH(j^%Tc{mggO*f(PFk#BCb+*v)Dvf4S~7cDQ? z643tqbJBAe&L1RsrIr%%ls@CxV{q8*e6V)gA{msu*F9RY|Kk8BbitrtB zw<_|2sz^Vrfscm;kUUApV956)IBinX3cdpynkHgS(IkO^XEQjGH{T8-LT(UT5u+*J zc;0TzmckZEW`{*D&X>T$i<3wi5np$+PV6=>N=^BNaBNV&CYXTszCnCOp@F1k&ihX$hnXJ`k@2r@Y{rD`fg-@3t=F(`Sz45KqsTQ+^2MXQzus-{j>py2R z`H<#il~Z%^Ya|hxV-mv$qvW4AX+<-jNn3&)^Zu6n$SdAJFcZR}5w(O=w9J6239n0a z!W&q17tr8OW{Urh$9=9nM51LhIF*F57X^ zNI_5U)Mnu_&hpD`jYm;5BYTaFoeOjk%IV~5GQOs`p36z{Gpw|#&eKU-2b5?JXjJn6 zd;+-2gjD?l2}*Pyw|*HJ8qnl7+u2m6LCrj0p~pL1o0#=I)vFEYIW$RHiqlv$=39tg6(-QI zIB?uNlo{l9C=MIFMQ!w0c~_ze=muXD3zvWKz|i&qIuN8ATLQ>$WISz4aTn>6g}QpK zrBHzg&2nq$FydEmOctl39`074k3F2gZeSKW#{OYs2I9S06c<1ps52YM-2-g!4qQ;g3?c>gS*OS$+Nh zSHe~t@cd}=!=ZTJ9as2cY8e#xwF6~QC-)VuE$GQJE?R8ij?*)1w~2nXH?}Y?`@b9W z88noIs(S>Du)JoV)bJ$e`Vg?pvzzd+KMdS|`_i>P zd@9qZcA2jLeghp@sg!(iy#Y<)eDrw(rP^ZYPUx~SNor=ZI|Aohdh~;qUKaUXL9*_A znqhp185q_|SqGxJ8t6OcJ*wgdWWA}@gH;j(}F#)0)b)hD5OsOW)ib~ zg=;T~sebs~`5__0|AR(YV~wE2*0V2(|2ZfzkRKQeY$drWeQ0z)g&#oF0-qf% zk9?BR3S!^Sy;AvE>;Ya<@ZRJ{-d7n|f1BRJ(eb5gjP4fSNw3Y9p${BW6uj2KDe#Qp zq2isgxZ&`GNTb+;6Eu>yAx*RHN&Gmzsq|S7KO7mI-Xay*2$h&_Rbanq5DtI0|8R~Q zu0NNg+o5ujUf5#Jmr!d+yD)dc`6*l{K7+pT0yai%7b;57{$Q=`1v~kzRV?1PN8gjT zcKlw<==0v)w4vsNZ#{U~L;9PB-Zopl7ZEh(-}2lkXY>5_APYEqs>1QY6# zbGy`rkN@s2zdRD~3-!jD!UG#BfA2mn6n#~jJDN)9+URerf-T{I&?1$Ob=IqE#2dfssjOpg5nE6G@ykO@gf}2B6+3hm6K~ z!+iBxj1U=T2OEKd|CaI7Bz~@!nP!czjtN)>BL$wg-}`SMbYwHr6OZ3Rwv{{uK)EpV$ag;AN$(MypUw@x zBvf2qUt!neZ%W1~?#R#yOmSrNOHDG$r>NpBUHYINc#pP4KB9vAB zMd^pu<|->-CIvq2ou+oWr6R^ssR8MQ2d}5y{C>Z_`o>ArwpFafgKjOH+Fack_UUhU%V%^vcO%}UJoPURSnA3+}`{(?cWE!~vM zdpat$W{@4OF!Tw6P*iATj~n2nqW;q#D!$ z$KB)R{@;NWH44PSxgPhF<)@gG<0>Z(gZt@u2uGd`j4{_6<|L^2nVhACbJ%M(d%XDR zH&EQ9H63ce56~Y1ZQnW6Kd`=8s7lv?p}L_u5LL5ladNeSoZ8chw0=fgrI?(CjA`H2 zDt!~p>0U!nqGPKMjY&c9h0bmoFd#zrVaeeOYOHtb-rhHu^$Dij-se#JgZNah)mp1i zYejwP5ySXt+VZ9vVk!e-6lj&zHw5AsUI2;%8?T9A9JepRRjm|sZ}+Wu%g=Y%sM6NR z7IeID|%;*caCe%%j^=?r2-b3}85&vx=wgB)@M-7Fn*9Ty| zfG!2Acc{lYP`sldyNX98s^YC#6x0mjcwYrv#Yyhb6A^$H7BQ-YMwFm`Gg`ZUUqFGt z{yv>+qmbu31@Fom)xBLS>A8TpxahX(osvn3_Gj*qjW97mHvoOr)&ih=9E12Mk$Lh_ z#`NKltAK;{K-JFcbvWce3!;j+bCr z>mcLB%*Ph7?Lrmw{7ju^gMvH8h5YNuyFFIDNBP|jl5?7nap)5-a|K?7nV8$hMAwoJ zl-jOj%&w3htu14b;)4!2{}Lw|KY2BnO|jd&#J4}PgO@UZWFyym|!~0 z=^VgYaq@paj7KbEq&E}CSW;!&Rg zM{hj~Mr{cRiAA0z6`pZV-WUwBr(;rQ`0~#+C;4eVq}pKUcG{aGFLZiQeey?kM<4e@ zn~H^8`r?MW=VJ14bH`6kSW2JfDm)k&zJAa8e&G{uJtxvOIt(bKkq)5Q+~7}5hl0|` zxvxLW-8F1axTZWvFyDs@gWz>RL>CF(?eU3B5rN}8074sRA3=KuN}2I)FjVU?&GB>3 z=aL{F5^L=!2hXG|%&o5?=yN1U*Wb2Sh)9>WlBA;NS1sw-5{C>C8nO;CL8UOxGNM|p zAiO3J)Fpk2w`s`9#)i@et-hgrHME;hlk%6(^e4q%{hkXa?i(PO2TS{%_WW-(yKkv( z<57qFKZEE)*6m-H7k_&LgcUL97ur5#x^3IO?IL*L1{c{J6bM#br@hkHxMmyXYNAPl zoRYmW>@nj-zy6F{2C=~$%TNox)tA^v2L8$2*pVrWj=LO|DkUWt} zxAz+}1-PY{8WI_qi@_}Ezs>^^WaGa;Ln6yp|6QoADqTiK->z|jC{znDxK{s9|3EfM zk2Ma&;#?e~;)Qp1B77V;6S~EMmlMTa!IkU|g%g1TASNr#jC(DEj4l$kS7j;QO5OFU zV?WIL877@^S_H$}+eIe14Km6bz50qP)~QF;Xt5-)N5faF`P=P-bd9~RdJYkQHqZg) zWL*2#6US~Gs0J6}vw#-YDI-SZFCrxJC>xl#`&9aU${OHGr5%B5&Xfi12LnP4(4?$; zJsAulhV4AhSx4Xk^tcFK@2>FX`eFbRyc!2GD68Bc>9H5N+2I%btJ~W^kCnsB9>X^iT*E&&E3m%ro8g|N zBtj#kf*O=HB4%lpZ}VS`0@;QiR79pw&!Stk*SzO7CazcU#2d5B@M58tK&zxG4}7mLwjL4~pK7?^I>6(JY&MK?D(n z=9iwQ$P-m1ba_1cL8px2gt^@YWDTREBIur^+aO>Zfi82-`^{bfg?BjdpqYZ61K*<0 z?l2D1@WUYYclLa9h37Ij*7zz}ZZUKpc$(nV+Q9IW+LF0*peJf-9xzEhG@MR2?i&Y! zeozrRpKz<M|W1Z7VG-Ia-yH_)6d=$HXQAPN66YMNYNz zA&OFB^!J8^FF00i@ZaJny5>~FGC$pWcWRzZ{g}*0ZFA3S`>Wfz+36gOd!Lg{_wSsv zi!tJyPxw_#37<;*^-j@n`Q*EETf)b{tgO;RKmfU$4^Y zo31ulC5O3+4%4lwZ>RHfU5-5#eSbdjxvFVu^R>#?PutjhvVuN~gzEfgzV3C~jrqqd z`5O(~=KY-%$trc;JfryetA~3}0^4I9dRcFr-?KF_=@g8%i3!?Gqw?j0vJL{WnETJi zx0Nyh`$zUeuV)EFdG+W1tTagmV{JF)3>KS6$m+jqco*F-xOCH!dE#)P?1)}M>LzZT z{sy`Xi-)&8U3vJR;AbM^X^42n?~iwA^t~E`&8X_A?95-Ij`f%twlwmB)}fDoPL<^P zz5BJZvDO5g(xF|sWA^>O@yB%1)n1Fr`Z#%OftRG-q&r=g;NigFj@&3s?%wN7Du{b} zapDi*4NWel1qly&d9&rV)+6PPgz};NZppgxr*uvDV)f45M>3qjFY?3T3{ahvWp+pX z@;jeuk;wMbSq1Md)f_|OQQV*P2W+6IhzaB$YmV=0zydyrMj$WN(^qTmo}r>#jZ+0Q z7txn3URCaGWdq%^`}1;I^!Q8F;>E$-I-0fydzMwJVIUn`dh)DXP(@U5Qrs)5#l!XM zEZP`-*@pA7E0arKqi&mOauKprbvHazdd=e6Qn&;y%P7M?0Mo==l)M_I7$u1iUSR8L zuAtvvaMe<(kk>O3%+F{wkB!ygGyeSCLGQ0d!m*J9M`r-}+!kp78rW8B$Bz3zL4c)S zF~NNMR+u#%A8fXW=F1gY-oCu=Nsyfg=dUDOnN-^Kq#|h>@;mrx-J~x%biHdcBq~xn zn|1TsQ6%_r-5^lR<#)Jy-^$f5RKnnuVq_##T!6%dD_OTZSNiV6uH8dv@FDs|k9A~F zo|nW?2~V-9%3k6>!BA9$Y|jsw@7ED^^M#Z%zwDP5j?#EEy*V^DdMHwsXj?yY4Phg? zkqT-4L1zHAFZrJbBbFq;D0&%@@#SZS-jI7EszSriN4}S58Z@uJ zw-7X9tGf-5FmJmLkvZLQPAyQjI_}02Ua?v&X;bO0;DZTm`ueq)1*wm+p`2M-!rX+g z?y!txl`0Z=$Ez`}Xkk8up2inIZy*tRYaLzzXGhsY+^|EvxL6jXUJY7QJ!WaP=WFT;xvkz=P~t zDq*wOn@$VCA6h*ku1H#F)2gEB(3{DT4Y@=Yt@!_5tIZG+MWZO5{|gCaRg^dl+orN1 zEA~3{4nnA>sbp>*jDKhNw2idgmK;?cYkG8N)$CuM<)O93cBoItlFf~Mqk>7I_m$s0YM zM&UurLfgzYBr>++?cc91w1#5ei7fdXYQ|fIlg=o567?EnPMLZMo>Mns=#%)@ds%aH zG%>$>%N(8hLFd}3Pnk@udyJKgxHy^VVD5V8XoNA(^RnxKUei)~r(D0Cba@ib5i6#+ zTpOTs+oLKd>ks8*e5r_jd8up;?X}t~+JNJ&tBT&GI63T7tI&a^IEOT1{cFNY$poe< zfxN*#gC~*4aITm;TFx%`fn-=QWF-7}89x|pD8jpS4rpSqJ=vYg<@mp*E;(vokNj<9 zX_pO@raTajF5cY^ycHbs3$}cJIiu8>6+y-7{Y?*WZS_{AP8xREl9A7 zyhwKpyhq1H{TF=gNZ(Q-84X=L8~634TR2#z65hI-%B9{868Au`CI<5JqsF*l(wfEwOW+?N5ABK(urx)FaI>WhsBp>?g^$B>2Sm18yFj#-))wq zkx*!P*6u})G;po(HasyC5CCcR2y5DFOU$5&BP?(m--}OGaO_=$WyR<=pGb?VvM~U? zgx`xpDmj$ds>Cjj-01`J{JoH#U^7H{XErL%=`5Y2PDPI<(>|J#^MKm;yO7s(MnnK` znSi_kPfraecf8Fu$a$9W<&2_xP%YP~2X8aTlF%HLkc(|V5B~0VdUr27Vq}QnKMF?0 zC`hHT^N#1xuz6&}IWB$$53^RQAGbZQlyw@mVq9VwlmLRug8SgrFq`a)n0YS-?`vxL zxyDiLbFoNaz}uU4`_I&dbQ(|7SYKa)nfjAp8RT%IMRV*THd8kMkp}QrknaN5SZK`4 z8M>oDMrk!aJMBS3yc;)KhO+_#RA*3J2T;!e_%Zm-Ue=1l^;~xbq`*vqt8XpU3=mxy zI#Fo}AFzSTIOCyB@0n;ntG_Qom%NlGqotNF5wgnWR%Uh~nTLpEC0jW5NmlmEvG+I}<2cT_-@p6& z``d#*-1p;tkJs~gT^bze-l{3!q6$VHGq&FXtWtn|&|~V`5VdKOBJ8X8A+NvU4xRU9n;~(#sHc>_PM> z63RNwI$+T+x(40#(S4(-V8^BQI*HbivsvzdeLiQ)C0hHExo^dEW6$znQ8X2z%)n5z zVA#DQV0VT72JlRxaJ4EjaC_X{kf-U!rfY5DfsLc_-rT}L#<3+I9aoK--)kS+QtE8J z1~&eDyz{tWh_iq~ld1B)FuuHR)9l=C0TFP~;IekFZXuAUZf^R-bCii7cx~GAW)j@1 z%BQpzxYVTN{5eHpi(~G!>dNXU)Abz?6Ja%0{&WNcSyvYiIo{u#?5w3blzlAGizH+& z$*u<|@|+y2wM-udpO(H)hJsUah#}gr_S*Ra3(Iv-w6B<$?I$ki#Q$Zxs@hb7}Ql40NBz+upquH1>r;KoFL&d1!(tYm%-1Zp#y}542Bcc=V;a zDyWkUE7DG%htplow%=ez5=Gc)bn3T-^BX`C&LU&fHmbL$2E6|Qxd!o_@0JT9dQ_yl zAx}XsL+`;YFz~b;@I>@Q4SR`|C=~)F;U`p4iFjr9>mHOmE#BAdpIOun)s;Rl25i?@ zC<9P2M_{8kbYYvIE;U~-9G1!PVRG;y8=UO;Ho8D#ECtn!J_$P+Fbd3-A@Yj@1gHG| z6+LH*P6<;a??wOS>kR-Gx#ZY=oLP4GOGLOB_w5t7)Gbhc=MqJu&-Qz(54$a;C8Uq< zhzK+&#OJH0XHY$*bFz3zmJ_hiaWOdCvhn^tST&l#`|94SW6@id-%4SHCwiY#B6XGh zZ<9(It!`d|pNWpwWBd^=i!_4G@iGZ~#=wD41%}f?(|QlfYNl(~;V~v8)%m(ExIevJ zi-apO^Wom%w z<8A9}%)+i`H34F-)GvHNI9@4)<|CD4)=Xm%Gv?m6T@)uZmZWn{hovLDYy2+X4&dtH z00sk@Bzi>c&4viez{ztC*;D?YDlE1DMm!_Nh(qu~GlF1twcH)rx;BmsZ#fDKsm{?q z$21jZ-qZpw`cS+)6_c*XXq!E@@?MGoEG)(AZ+i(j5tev9vcg&hr@#r-`-6+pz>pEi+MaH zej&$`yj2K9DJ4G*O1~U}?~x5%j~yNg=6?IG$BI#TK(SiJ_RcC`J{LCetE{3m0mH3~ zw@G)xVBY6n0EdGbDB_8$Y`Jgbj$Q}Xw0wnUoC&DEE7jH0C_2!6@E(|t35-Z(4ytZg zIOm!?c{N>vxkNO}JSlv^kn@wi6Pv>OsdMUxN_j~-bNN3--KH5Hlas%|!7h zS9eV^kykOupFpBjTcS5Y@UxS+S*FA#2J()JX zn1wyAx8AvKEt?UO&v@zovA_%Xgh8P<&Nzd4akzJ~-?a$}l42ufu=2}TdfYN_tm2%Hsrc^2L6yV$6Aq~c{gL4 zdl}N~+51ZwZ|#{ipBIx+kz87^NfB^g&jsK!f5kx<)X}`eD_N zgppx$+aGV#S_@p>=-m^YIT67jkd#J1%1K>kn%+JO`L^~2Y=rLDTMoNFQWD+3zG5@t zNarIs%Tr4F2);oa|1pn_?Ll?A6uoqTvxlzQhKZ5MJ_P_l+x1?T+OQY^DYZ1_|9emM zGau2-YKf-8o|+??ey_uuDz4!^#cPp7eRvVYS!Kyd>^I#4SEX&o+g0wQwt?;sW~tYk z@Ao0;WCTpUdnyO4S~-=9=~tyB5=)J-J22&X3!(M0xxyQz})%}Y`=v|JO(uXyTtkZB$>9w1)KlO_2)fv zpPv_K+R$(GX#Z`Wx4AmuYMAx}F>s2amwDdJO4t>?@E?Fu>MX?7L1NN<;I8h~4D39X zk=YUx)j2%HPBjz`d*1=M8|A`m=l(9C{{nSe+it5DrzXF}8`^&p%Df}mv{Zy>&?O}L z$@rVo5e6}&l5cL(XW?rWKcBOGzWVRQF-^N%c;G35+=RobD?@Q)wBO?S@JWt{HpYd&Ikuvc3{ciuLySwYWX_t0xLVjt`R0wIkmR=>pI$CPLK zFAi<@lKrg)Ah#W3D*X(0-_uPxc7jKmCMlq>IXoZnkaC$1Mi|-Fd(5dm1!_()B>6Yu z@v(0;iQfTxSE2?naFXFeA#iAB+sp{eAWM*{Uf(=uy85KY=uLOZenEhw=syL{Q5W=X z_cG5H0uM$PTLvzW%}LImHdKH47xUUa#>~u<{|lYPnzUCuxHdUE&`Wl1;W!t2Uq({x zO5bsnKFFciF`9=gk%gcza#miIsXch++=7T)u=RN^sx#O<%v^0vp9e*h%x;whGPX~x z%KuX%X{abS)H!7V@?2a5q=n-rY-MbUDTcDb-scdmA1Tk9VRpf$JqEeTZUy%c^!Mat z3*oo0u=P%whK1xw%W&GDn8!jysC9!?qMa~`lI6@uADaa3 zjkd5k%pbOQ;g@a_1=CR=%!M2zKZB9-^+}&5L_M*!Rs>WDn70#~`V>*$GdhJ-#chP? z3H}bQZlr-Qu^{F3IKbKRMEt5kuRNnme|fp!4VlM1_8g(~OkdL4LrF1#rzs_@r5Q-B z@&e^3OHtwYmK?$P_1A_*Z8jup>Pf}Um=m~T_NIDOr%^be8oGyMvz7~}>+nJf&%~sO zBEuY-lt#eraL@X7DvYO`jMO@w;u$O?ivUz?FCP8dj;(Gx)8z)mKxc!_9}|W9SSU09 zAGDIyumZ8B|V*FG;=`YN+*G7COJq0Op0yE=y^2mfmsS)cy?7B8WaDv^d8A zrcAE69?-(}0FU#s)b87E#6G{ihx*PT|Gys=R4Kt>Z;`vCrlJtB@_=TMSc0<5-gM_M7F*kteof5uw?^`fi2@GM+k zHjzW0@%S#!Re^POO7=ENXNs_ufE&0=h*KD$Fwlw z?>PB2nFaa7iQ}T?RuUxn&O_+RKJ+!2%yjM8(tG+h|IUa5|7erIv1E>MsW$bdwvM#f-L%dvFib^Te>X945Wam$p)2iT zi!5C=(fLXe{PmWhwt~Y>+SL!}Bn4XkB~Fii1+h^k%Eb!0`Rn#dxbh_>_D9_D3GOfQ zS?T4>LcUaMofS19g7p%oOH)xMOPN4~KZpnxM+6imQyV;~h#(y6$YSiZJdT7cc$aW3 zo}2T|x^7jISEY;qQYl`<1-jfAHQVD|4a;Fv1H2~`rt!>&Xs&!6(gWO^_l&d$K``$P zL|>8sIAL$Q=Ty=8;in&ZFMSd`1OD8~?{JGj$mwBBlrlK}#Jp-faF(26{P5aeQcpdr z4=bCN+i_)yQJk0EqZ#c%F+S?ogd%^|onU+qEfcZl=)Z!m8tK5ZFd?>#t^@HnjA%N{ z3%j`VfQ>+?$HiEbnY^V0Uw&rbZskFs`$UlQFn^p0!CLJP51l1pkPh< z=Zu~m&=0%UCJj~hFRui3*|y$&$Xx=v&9^gtdV0DgydB$GXJa4rsKK8 z;eMV({}@EK%WO-~i8!auqEFYH3;by~gON0B@NS2C8K`eUJvL(rc(1q1NY6e3s%t^R zY9w4QGC1lxl7`*y2fTweuM>LLRJR0g-+znnLX0p-p&s(NWr<2XO5fJ?Hoq~*4IbVi zn8*CMw)CyfxBfKTa!jX*_j52{Z2F<}&ub7=d$b|nx`!S&TxoGnd$(p&+adR}u5|rl zGf7Bi&cNpZXGOPbVBd?w+}X>PwS9uOM*M%oe62?y6^sdBbQVIuU$;IuOq{OE2mB7t zgm4;Rl28d-&xU^-@TKB8dw4zuR09nw$m<{~8*)c+J)Q0E0UyntL>6b#3GlMhQjvjG z{HC__2$-TRSY22-kPLncjN#Z6aqV3O~t^P`_FO4l3UNSpdEeRmmTH$Zw$3sIs&zI{HCJI;iJDGUNL)P zXwm1{Bz@fogc-k0*7ZLtA2MiJ_H7qENlomKspU=Kn;ZswJsCQ0bsQev<~_$B!Ng5* zE8fKpJTe*|6r0K1mSC>f&#tclN&c<>1z$KG(^Lj0G0}nHb07Q~Nn4+@Dd=kkUk)=E z%33cj0E@`VrzOJvf35Ch?5JipoHQNG4vjjc%M zo#!pFo?-V-HIKPR4+V8rJ16(2EYiy{hcXGiw=eqj(+c0b%wb{GwMYxjlO&-1%u5>i zd-69*7(`Ko5*w#hw}yKf!AYlpZ0Pp^lBbjj!Tfdo0%FL(Vt@@LEK!5vyawptqLz#9 z-ZJYCIScnwswikDdkURYz*)FYE}o;lr$>rJ0~%)z&0Fk13li6mLboAnToq~-@`bB7 z*VD4qiw)r(RwxQOq5_s59O?{!FT)!#kRv|dyAi!fDhVuR&)L=;Nz45^ zP8$Jby0wH9vcYd({SrG56VsyOBF^7-1C9XwE8#>h6Ho()npG1_(8|Ko-_nehxZb#0 z6oE3t9D^sIzS=C?(o?cW{xb-kXt=L+9Mp+-DDHZ>c+TRNth-wl>Z#L*P+1T>65H?E zNl(FAuD$~zG!1t3x&}5Q4kF8+_iekwy?GW}L1#9VYR(Q*10m@qx;H&Wllz{|!;<49 z^AnE{`pf*MW)Rj3l*%%50l}$RAYZ&$g-+9fT~? zyO9x#XrJSyWULK?K?@Q3jrxkf%1a`Z|LLkc-M>vjs{pHDNGCxQF6e$aMbBGBbLVsW zht9P7n}sr`xDG&gx4X59B{Q=Yo(re&Klj()79%1bouBiz`Hup=DOZ@vatdZJO55VH zz4-w?*fNso;e9(tp@Z)kOFfj7z3xtNJGO0W=34^NCJ=bO%YO_1ndts z09>S{Qv#&0YR6^hZ_dF5^BV@1~L73YCcfC&8L#|RlOafpsM_S3wHu08^`(t(fmAl9+pK-%jV=ex$W z1JFb^e+*F*{-VJi_Y5Ue zqb?D`tU=uAHXs<;5MHp=-pZqo=D$nQSVJH6FWjh-Wx;IuQ(*J7&Rlk)_^2NT)6~!* zpUsaID6wEtiTcPj?hu{CRCGZ-uj!w)w)uUng#?)&N&48j9ncPh0q!2~pT?V(pwS?n z94kIRpZKOGI`C)@p|wmobHk3V$>EQ%V{>-9kaK7s~#|8ZP+>N{^cWM--r^f+^Zr@*|RMCr$6|0fa`-MaSg+mR)N2!+=C zy(@hDNktc&3omq>!pJpDrCMZvyAX2nc*xz-yeFDZ1U{+xo%-6y6ml`__VCv;c+&=v zRu$CM@D2thvMLZ;vI>4!J=R`bKnxF3d77(~QXzf)oYLA}66>A_3$N(6m!ql7{vUNI zb`@4?YrMaRVSi#*z1sfNE6UOHRde}iaEY-F{T8MuK1h2&(MUfjktuV75IesWv-##aoK0*;EUa-qWfDzGZX4&tk-rOa1T&x)IO8NvfJ$BMgD)i9?vs|u-@8J) zpJj)mSB0*>lUw`7f7#=LxO(zN%lSooGlV`{K>(e$^^VRhU?eGgM8x)J=JBg(OttD= z6!FQZv|y{}k7&8c6QWHQ6JOd;n6GX(BAoB>^)`dtJ@eHMmvO!0Z&I128NlEPri#D6 zDuS=`7hNu7bxN5AH?lH}-VN>*M`i&I%WlykMUAZQX4lroe^BHsnN+=Hn(^`@AQSVQsE*1-eC{#AsVfdaJo#e z>+33RrRW#e5m**iZQ2&}XJ;Ty-M71;Lj=}@!`+57d->#SR4u$E2gl=Yuk0H@fLj4Cg1ek%j*1*)cpEegB$ly3{dZ-3 z2B3RKc}hD!|XwB4)t_R8u?Uio&e!!lDqc9VyD*N%`8z;$sUbj z;&9^14rUE)-y)acNye_VDI1}ew$-T68;=zUp`}Td&v}bD`5CG;_+a3_3SZx_4ZIfKs6BOt{e`seq}OsaaeL-xjcsOj70l-{-beVjAilgFYR0}SP6S&_P{ ze2=yLEfyWq;3(45Higu))M>mMKzr1gS%!P=?uFtU8%EVblv9di@y z-8_W!mq&t>_vL(`;*uQ6wvh7V%I4M2bNKCEa<7Sy?`=O7eiOo)$2%niX25m4>~Q;r zKaI;U7{xU#@!p#CxL@}uR)-7%e#%kttXM;Z|4}m!@~#$a44)nXF7uzdq>A;Jj#v19 z2A=Et6?ROux4xTkk<<1mj9@6fQjXtAkBWI*=yb>MJ@8HO83BF8?wxsFdu1?6*7=zs z2040GNgyRvc`8mZ55Eg4+Uu6lb9njkv^`YWZ(#`LrUq z2%?m#CiQ1AI-KQ#-p;A4-)p>Q_7GcT|T8aST*iIvg|GjJWNml0LccDyqdzGmj*h~QwoqDBIsKc0&`UnHS_ z0EZye64to^$@d7+ZqE6kV_&xjFH+QlJ*{6=M;J42+~NqyUIm(l=Id4OQqj=ul`guYcV)_64_6%PoG73eQK#H z-mZOj7z62Hqri2Vq&h_PRd6ZjnSkWzAY$ECv^T{>?|{qqXTq4ky|O}K;&q{2m)TP< z**>S0O(jOZ6^$wluZmOWz<8bh)ANHNjio>G=pUTkzUR+7J3)l_TuLaw(2v`AM%O|H z$3LJc`RDF!Q_T~(Lmt&Q`Hrh4rJ`A(IxU{Qcbn{&N~dyd%Cy~{Vptm{$BVgqN86&( zzI?wMVL$G^N6azoFee2rc?|?CDC7_Eo<+k zD#0OlI=5E-DZw?dW9COUG)Sw2#3Tzo8HplLZ%Er<_=kjZRt3I;5SM*^3=2t(8ny@? z3Um!xl#Mll&8ux#wNJ(p+Os);o^mt>qt?(~ELWc$FOiU`AAts3=@+8cs#^MV^eB0z zZDSla%sjqB7%QLi#tF&kbjVe#(qPg4clAl*f`VP zJYXP9f+GUjYQ=LKuNwVH1mOq*=O*-gO-e>tQBN;HSLHIynxRdZkoJ6SjGh3vkg_J2 zf=qC4iIeg?DC6<|^99BHrQ^rhy+Zg*_iuqt!>~PoT83tY+%}eroLY* z-w0fNkScMyg}>d3DsgC^_+B+SG-OKh1Uh``Stx>yBDU`3hP_WX9irrcq0}Ei+S_w5 zO@z_kxn+y;_`{(kGTL4+DrhWfRO4q>1F4KY!*O(f^iSK#R|fk)B(W=d1ROZ6GJ)`p zMGt~*36k6o8M}Ja%bt0VD56#wdpcD<=6f$oF9;=^HHdyN@-&5h2K+eskL3J;pz_pY zJJt%~J*5tCFnS*+(pxicJ^>s8k*MRVm(fRS$bh?$5w(h5gjdIIRqn~qXG+5J<*)k& z$Y{N@Px*f?4jRW3$X@+W{B`$n{cI%;M{_ zK0$G`0=m+K&;0!me?D2T4}^*HyIzsLBXW=-+%hHWacZpPk*8Cqh30iyQ`UH;uU;^1HL{bYD9 z6OdAmK-C^_UI)^flyVs5zOXZAOZSUdXevQqi7ZZFcr zTYBk6@4wMrchaAo_XpTyzLxeI9?UbcNx_db%vYa|8&y*^wy}KG+jg-e1Vkb>wsFJm zCT@DO`U%BQ2|>)RvQXrm(znsRp7vGtd>Yn_X+>9B9V95`4M2YXz>H{!&{@ujV|wLq zKQ6nG4zY8dm*~JmMOiMtS8S(W48(9plolP@)vl{_=l7DGlNN7Iw-_9|(J%zAUCoWY zqZ52DX5|$3FyJ}$7`f(hZ9)eiN07h4@&wEqUg^gypPAS6GCTN&ZGT{g5HHi(rMiPV zEVs(KG97}US4&*lsW9HE#!0fp8*GK(kBC^=EnfH+1Io|kr{a2?(2Ei1!vwk?C^{+b zi%#;Va+lU|j1tTh6a#er`B-|lKfbZ)2?6?Qe}Iybbwcc5xZPZ1LxlSdCf1->Ns0~} zdql?W;)`KN-iOCucY&bP3?gX%fglDRfp?I})R7{{i^)K!TAQ7VB_#;j?G_o>!^oNf zdfxbEF{ZIVAa6CU?F-;x7R&2)aO`j7QCm-l(fg%AMfHNef03*4e{zPrFL-rRIKO&O zs)~MiV!5+a2xDrxWSmjq;xYO6m~1Up^vl63Ca!=Rr_Ksfgw5|FkQn?nMTM zC~Zj7CNV9<%d^CB9idyk3tFtzR|@WU{qj)gx&onL2G7E>b1bYkBq;BH6ybGWfe7AC z0c~Q9sxBsbPRFN6zL6t{of1Eos`nHe_~g?!PD|%~;hA`@sDRiuuosHRy)%kG=uQg{ zqW&r8u$)`!yW}9JQL-z^8GiQXtMsq;zii#D?BkrT2@3OapWMUHQ^jVNYk~t4|%gM%!75AwwqrXwn z!@y(n88|Vp$}+-#0ykewk4CPlse}votbbR}Fj7%L;63bo{Hy|-&pmPC;zoE|>9=d8 zbPf`@Yq$U=akyp`eap}O5yOfGuIjzHJXN%o>4s8!%gkTB?^~X)&MD6F^^(!GzeoS= zKezmTD%PJCx(DhTs-=)yF@zywP9KuGH8G7@hDI(kYCAF$&cXB&)fhj%Kqh--$WdJVfoPo~wnDXeBTMi^=xc>wO+?@w*a zmB^dB+>UEHLzut$p6Y;(fOsa*UqEV11#CPEVfcpL<)nB+OA`7~DgSm5ik2IO3;bUI*V`>5}kmah)n0 zSiz9d_*lM4p|yeU9PDhXEV!8Tz22w3%oJk&+%_G>N_%5?T@C#qhQaiBp8vl^4{005 zjaH@jEp38x?vZ)pAmB*do+idS*9y2DQJ2FGRqM9dsIi+p)#=TGhFZuHqqrXx<&%!m z`>jq12Q#RD!54oq=zsI1r{)R9$-Q9q^vFZz69lxna81;S3WE6*MGxrG=HwdFP@*9G zK^>k?k;Cm+Tv}aN;7pe;VQY`&hUfD$Kb#vo9X@Pbo);veW=Qq9hdXMoJYRP?@#Q6d zQD|c!Y`q2M;4D0X!*>9Q@z=Dyt=OuTSO=4flprVNY5YT{UW(=}##?N4Z_u0|QS>Ag z{M&(qpLc`EImb=%U>m*%84oTkq%DHmxgPcac^a;bIXM~drx&)&Y`#4D8ic`i`XzdJ zDQNLU;U#z^=rZXzkX!mpz1Gm%cuKP=6d!X4g=~ao4>g2jO#jH;b^^}EV!LrMBxh9q z$tv>>r8#l^Hm$LXHU$z<$#K1hC3E<95EKveM+YA-!+;g|Zy>_rmMGgzQDkSj1yG&6 z^Xa|*qrK2^@cDoU!e+2b{?nHTs5M0I`~G2N^0u?Prc5}XftR*LNiT>pUt~ju#=Qyv zhwR2HoxIiY0{@9RpH}QBI`tZnUTw8`6EJG0+GYokbok#mB! z4mJ6njbVNs3d~M|bd>4#)NFww92;zID3Rr^G_YscRN%0%)oc#iIv@BSF`M=)#hWlR zO?qAUHO>F!4DiM_df?|T2EFgK3w;#v?w~*?kH4Uyz7JfwxPc7~_k~M*U+JgOmHwxaDrI{xwfwYP`#8T9VqQtenWqi()IC-5_KCm_0a)ZJP*?DOk_p%Goyg z_I2WGW&0u1il0Y}ch!+QrFVO$rn@RzR(S;}UV#k=ADy+X@IPpI5*$mx;_}XqHDdKs znM^ttNSO$nU4D_1W@{JiE_cMJ5HbN`WCCvkT5Hj)@YKg>5m z3zQ|%ZP??h5K=K9!fce@+9>F^g%uxkJqW@ z3pnNyzD*aS`}r~WONJb_-^j^U7NCZ~!QlebYxP`dXZF_~H0sv_aGGg8m;G}!Lh3{> zWH$b?e4=#QaA(&}mxDjbI^@yU^Q^~l=6H}KD6kK_{m>miG}Z%kDrW2e z1Q>!A350BJg^?BzzAkGgof|X%?Iq3ysRovxYQ0$1a#yhjjB#EN7dKR{aIl$`1$hS@ zKS+Hr`tUyucY73lvf|3C1J;lg`&gc1@N*D*S6IcFjP=KO;A3fkdp7~eKD{_qn8yBxOxFwwvY zW=Shu^NXE#LsqZ_5cY@jnc~cm3XFf2jDq7yc^AYe&cyKrokg`{&CIBbQy;Sxco17K#uOd37k)Hp}PK8ap$4YD9x5O!Bls^$uX*VMw^hGMlLzdg@!97Dig z)w}o(v!B~9YGrwypquul=c0mRcI2w~brLgZeLdk9)g{69NmSi@ySJsQ*I18F>g1c! zS!k)p_i28%TjbunX1dv95CQR#M`J_MB~<(9+T@r}F5_?F6h7(J=w*}Vo#z07BC+%^ z{Za0)#r!jO9baZ9V+5}h`?GZ0a|)o=MmfX_xGhdHY^x}bqr0++a8zfu^hF(RI+@#| zw-u*B7#;{mwF%fH-WMpkMIP7!;g#LJ724^WZNf3mmJK86gN9rsL{0DY2GzFHJsho0 zNYDxr(kXa}n_kj*en%C{^Li13O$N>R#mLu$Iar$~p_r`{$3l#hzhC-v8RE{*-^e0O4))^RJc73=N9K``djmB7 zCJyj(r50z>Ht>|YI@K5DbcM9Ee)E%Ek?7jtD@zPAAN_LOm_eZSl&m@S${tlsrafg7}hSgBQ4(p2ETOy}QwJ7p^%1@6&(X(w9cH~!HS$PJNAGLR*K!$D$ z>CB%|&ASQNGpgI@VvW2|LFE<`p6Jo(H)mlnU-#^tC&Hc9o{IVjP^I#1w z(^)8@#Xf%gia%L-2LG&WnrBsr0Nj=>@}SwB3#N<3nw47NL>rEjub88?Ee-wl$Uv z`rb^OJ>Z@$$l$o2zCnniEtOZ<3y1Xe3nv`)O}DY1f7msi5n3FlP7B^F4Ng;Y3!8?H zDo?!j3qI3?ZJDrcMn7#pk3eo8o@BgJtGrWvreB;wKf{~cy(>g^UZF2=7~13+Ya5OH^~T`oXO1;WjQhTI&fR6R6xpvYXR@o@}0oI|^I~ zoTLRRPmQciUB=mN9jeS=PU}*u(1TD+GHMm_@39>l6$%s>eQA{#dym-auIiM1OpW15 zXl>Z3fG>cHAjAIm1n9TC3U1aK}AQyN4T~h)JB8SW7X=IXx6}jch;k?*T zn11o&EqC=o@SG~)TuNL_>c3tdA;z7JKNllYU7NywXaI&3EblNKwnK`&ze)lZ?g7)y z%UdK)SLyF!xeX&w99;1J%QPaTX%P7I9cCe#Dy*u&{1-0K!|yE%1gt%*+oLWGU$+$; zzf^m71*$^`*s!5G$~W|PYwVqsC}=G%cC_&Ln`OuoBW?MW*^@#S|NOgnfG$|84bDgH zVq%)1KWVQYNs3eB;knnNEuxbIbAe7>Zmb>EIh&4+lbV!u)<2=p`IkY1)1llKOQhEt ztfby$$S$LUdD8dPk%MMQ7`4mcn_h-=m#?4y=NqQhGahrb^F<-{HYxhLF^QEeurgi zHRBAp>l-@Vx7(b}*d%=ifvinkdwJ9FMS9ky{Y`oxM`F?0`0RY`c}$<}4QLjB1^>dV zw0oCvT6tDshsA=q8T*DBtM5rQgkMl&Gd^@cB2IppfTmDejEduP{>0FP4viI7;Xf<^ z_CkLH!xLuFOP7_dKjh$V6{W-q82=Upp#t&SX^7&9x8kfmEJ;Gs)W1Jl)VgB9vZO-9 zILv+nfH*706<(m#ky(eZ@_Rk z@=UAFhnBm8#?&zN#Tpnljk;k4Zc{O%6z~o7<5j~8R{C#1z^%J{^ zi5bPv&hW^{ZS|#t`m8Uvk%NOdQliwjR8PbRS$9HQttKk>6a?!VW ze2u_?Z5!7Pi+?#8b#>YdJr84f^Tw?fh4R6|_x}2{aWlj6>#mh+)JgP7NU4lwK4B3n zZSBuBgLm0pJmtKm(#p3e;p%!Y?*@hbLNQ}2&*cSEU1JINf!X>SH z5E+Sxnb=D&Uc%scO*PC9o7v&XdDYtI#B zx865-UcH42!#)m7a&}Yvps#!_(({8N@29PbHVIe{;5Zb9K%ZBP@Pspu^e!s0z7)I& zqoTR*=saY^l9oQZE2QLGQ=Oj&x}WY(8-y0{I2gtAr@u07CWzHKEo6n0GBkzS0NyW5 zSApt5^Eb6!3^n!X*8$(~fafD1pg6Lp@<4D#Wnst_<=@{qLWSb*;=CrDuI5V1d1dTD z$>wW)s^~STba`hwM=TP6EAeh@Bgkcn=??)3sxJI>M71FUi~Q}M9Xpse0te%>oX}q= zA&a@`u8tO6guSM*!#gZ`2y&9{)v~u9H_2|i2NZ3S#(1v%a$4PQMeCM1wojxTp1Oz; zxq15P^Wj3fEG{RoLNRWi&fdQK?UV1MV~JyC;!im5gLaDCcw*&z9O1_h=z4ZqBSa^8 z!L0-7Fu`hi>`8l5uD=FfPyRv6LHRR?a`Mb)MJm@oE`Kfg5AuC!TWW-aci7*JY@ok` zG=-6=Yp||X4<&USbdu3#ARKI-o^C}m9{^-F>pEmklu!|1gr?19)kwXuj|V4NxF519 zygb^2u{&G+FLu6Bc*%q-M1 zH0&;VZRr+J@p;Zk?YF~!X+wXDS%yNd{~h)#&|T@%+RR3gNp-Rxtm0o-7`5v{ZN|KZ zs9J_J!8u7*rhC`a0=_b#qxmiRku(w7#l*9P24BpCs`B6j9{-UCRo89Dy_D+HFUO{HAGiVR=P`M%VPY{*(y@6_3GPu@O!n}qgOKAj)GFA~ zijxSm7$2Nv4+t0EEt_%%GY#;FfZM7r5}jiiA)6mA>Eg^lY*TywhK>gE~ zoRO-yy8%OYK90{8R=lhhH2E}qeaEfz`9;^<`b6o+sv5D|zc>bbYzLsSSJHbZ7BWTy zxvI2NO*_k!Ji6A&vC6+(6UX0q*+`_Fe-~WPl~QVHn^0q@`l*(^>LNE9a9Eu_!o8=G z%b}kkiaw&vH{B=WQ^|JEcgCNoT^Ib3et&0wlM4A4ul$vw@-E%{USkI>;c;X^{cfj(`uo(v)xk`I zBemO8#MlmWiR?xkWljy&pkgbG>6Nb@r9nq=kZkW10e!<~9)e&j4tt!Xq%9hnB{gC_ zr>dxErbiN+j9!BfBlX3X9o9nyVyx5C?;D-W10s%-;9|)u%3K$uSWd(bgFv6afo=IU zV9a$Ir1eykv%xj{rJr$B7#|bJnpUP0Y@t-{e+V~CpVO<UpxH>I;@)44Cn2l2GvPf$F9(hq8IK zJkM7qePpOCM;&M+CVv<&i2a&WsQ>W+;yJ)H#EL&q1-$15H^KY#%UNv-A%mctL9y@* z$cCMtX+E+m8FRf|(ch(n>^3w;RyxqX20kjCbd0w0=byxRZpvn zVOu~?;xbSmpmjR2cVrLn zg!&!28v|q)zMfy)SG^spt~IBaCmqz{LZx7%0%FvRnw)a|hq*t~@G?oo2yKk4r|eR9Wf8IM$lp!bXg zmC?tnK9eylCrvEGf*RJ)s{LRfXy|@QG|u7`7?5H_#S4V|7`-Jtw>Cidf+p z$@Et4vu07H$|w@#Zf?xp|NWI9*tP(l}*m}+kC#Jp|Gl-sl7 z*b8HKJB4E;ijRmV^ zlpv-Fy|r1qUG*xw7mS-66hq zQFiK~2?eJ%`mK7&CvQjRr-8_4_xdU1mFCtzc5fnPUol-x;UoV0sc&0v0v4Sm{+a#T zHY^}vLN=S5DoXmHq`~L!@63B}QYBb-4GM3jvEpp{tXm#lI}ptikiRQPbXP2;(S;Ag zP8cBhXtB3^KcXJ<^?Z9HL&cPe=8pVbm?=|!MrR-yo_UE{RR+fz>?T_o;D76#g6ntD z*c`Y2@jmWvB$|b-CI3##{r45 z;S0<$sUJeg%^rpWwQ!Qae`8WMYGj8Am)ZU@xWsOS>?}gjaFW`Egf`2wcd^thyRLM48_oA}vxk!l2Qun zNmK%~%f{3LRSaeo`g#+3vv0%nm!x*;;zso{I`5BGjyq@-*hT+rirqtf1>9d~H8Bco zRQbt0b4udvA(=Fagjio4vkX<F@yR771zvkr z|C%-W`R+@L$X?^`D-x}-H4_;vsEJn6eAK|dz6HsfyYt$c{bzHZ1E?52AeE&2659F}Mb zhOQ;9o3_ym+8W9~5s;JB-UXeO&jhbe3UF{%;>Peu!9DNQ;1iC|wGIQz?}a z0g;?^i&E0Jh=im_=TxLqQgRZ~osy$tfTIT6*zWIh|DU%Uyx8E_?khgmdE&t*sH-v% zIs=!%D`$5@;*N#L;>mHKW}HQE(nK>DUU?E(3kTDj z$nbO>)_3UeBh`#g2dh* znODm1<^b%_3131;S^LU!kYOq4|C4^vANqOsl>>7mTX^AXYSkFabh3s95y;X(ZBXo` ze-*Ii(Mj^V;Ez=jxGa0YOi8*}bFX5+TQXlE1i$yQ*uo4^*mSsrKbd(f&|v7)(M+K$ zCP?S|9rVO?V)+%G=?&ca>BFi1FYjTGU=scxbx0!@G&9*&jXrz_3vE8WPoNrZIn_PJ z1Kb9ZP67zu6j#(#38FN~ZNXG;Zz1n>s>s`+FVw`o{}Zf}_2L^?PP=J2Pw zI&U|Zra=?D)I)aoHbHL7iAtYyXtbrdE0V@Ab`PltigU#ylBlXvj?{xy>U+o)-uwy> zM7MalsVGVBIS=d8Z+16A8pk^yN{=B+RB030(A;zUv?vXirFhM?@sT6?F>A$Z-BYs) ziLoG6VF|VKPW@Tmo1V;G$ZJL6kVmBA5WF`5#~=ObH5fLKKKMje@tKpJj3WRAOU0Tv zhFF@F<+DmxDm_xV)i*8%+n{{@Sdm~__|e^36S3DF__yUt1Lcl? za#stG2nMbFy5WsK4}t!n?(1Pn^%>6N1r6hO=_1NKk_J_3daG=m_JoWbJHC$?mS>tM zxV)Oi#(H{;g7tgJp`h~5pm!tXi^^n{=aM5HC0+IFI8v~Q8L@J z=+*Dxcc|k|f&(&z*0gu46Sbta2SqwegLmy{Xs%Y@0x(IzkSb}|e{)>JAiVY4X3ik5 z8%fpafpq1Sf0yNy+4c%2@B|Pg$xC5mV;)*4AO8rJmakgJ=Wy%;OJ&J4!Qw~%5JQ86 z0{eBRz^FLr0XpC_$p|=62!DxO^8ekTC5+|i4S;_A1PYWiga=o4WbM1s!w^GNUi?Z8 z{y0L65S3d;UETX%12x(6vhBvT9Tmk=;`pt;*nNY7Bp-$7vH$*)>bpX6@e7I=t1 zaN7{T+HaHX6o< zdk>-eq=VND#)xNue9(wx245x(&hUYvj6v6b;{{uol|UCqlG0%cHN$5_4lmor4-a)K ztqxJJ-1o?B_mEK>fgYxHqqg*sZnhLTh2aE%LJ-v(hNua9*bz{kvxi&j3MOL9 z4F=3v=x%hXe@C!s>iv7n?-8!11XExStI{L|HTEDg_+sBxij!2Y;8U{*woFt$Sr08y z#Nz)Va)g5Wj((A+_-zclKtU!TtTqwbPmVe+KW*`bK2exj_H63nd!~8Qolv9`b^4S) z1NtufF*rr+KZFc>T@vWJU$W=<|531fU^|n30Dd=y)HN!l4~(YOHA#&;C1go!XtU&) zm4!I4s~QI*O%vfAqHDjV-f7f(z|+OncS*z2Zw1?$+pv@VfnK@(2urb8{KSmjsA{8y zT}l|bnO-7j0ng+Tbe3-p!ei6+a5Zo(9!lPpby~%4iJ+iLkgXp6R&EWt_qIp(pU2P}VNzVMu19~6m69x0X5R=c$lg7bO#BvXW{smT&l6O!YWgK95WuR6HHpH3xNM^`h)kI#4ZrPNd=jD>qn#B!a25|8r}Y!nHsHbXtfY zeU{5tb=abOJzYW{Bw+k|QSB&qc%h~jdq#AkafpKU`$tU}_yb9>8O*E0xEa96@eiQd z?pwXRu%9)sh+VnKj%}C#vOa*ZkHSo19x%Wf>}0}A>$V0y&cwIc0PDY=~H^oQnp>3%P(iU07EgCg4W-`>oSf^ zo95Cxv_ot;pN#@TLWx3IBX&)*8dQZ(5pnCwU#XfzZiQEA*3L;)Q@2rJ(2eZ3KtOZ)v+pRLRW@a=@ETZThg!5WMi{6okPk2sem=%X74BeiTz1dkS>e-smu=6(>2jsMH{a&L~e2 z%SCHn5Iky~$LXy;Zd-;w{=PjsYHi+v$=i<%W2w^xlc|%sX;8V;=RO9H3LFu)SoWl7 z*?13U5U`Zu@pjafCqZuQ889SvuJ~N=_KRYO5y#zH_(=SFMoisAXo#CL)D}9~;9Cic zz=sqJ(PQs;oc^}U#?rFn3r}P&d9>>roXw)L?x+~A#|ZCwwV&yu;3Q-ZD7g8O9tyO~ zG+PQ+m3M5}(lqV+5YjiVS&L`)jUR!KJq2wmt;UxlZ>#I#jxZep+{FwwX>Vy!UzlDW zxr_)s?|j%qBX5;b+}1}8KI<^~^#C+&bYokL)}Y?Fdv5oXO$XIO7W6@8QWhw3FW#Qs zLp59DvB@4I$SfeC51EqQ7#;oW!l4U-%Uaf+1Jwslqlb21)~FG=kTk36h|dRn3%M^3 zeT`~e2r#*^w>VQT@HQWj{B<&DoiEj&9PmP8CZSI?RVd?+mDu=kX-=mvDa@kIPqWkF zBOmqc){xAKFT84(d~Tz2e~yrJ&C*C;UZ2(Mb!jCdm)LD*|I5c?v^-8)5_=YB9W}Jq z*hW6}Eh+I897NKsxtspk}(yH)upHHYWb{85)uJ>lyt`IZ4@OT0suxv3RjwA%GGn%qE=%2OZKa`r%aS%@Z5^MSAk*`r8OFotz}NjSg}{Q6;RD>n0W{rptvd;N#eZzJZp;ubic z6FznnTxSP6%Z}2|q)!2+bhDD6k4aOB>>m=hZ&BOYwao6z`kfW&bxBTt@BfornqC&r zf!!|V>hF>3O6fBIFX(n#u_d;&yuHdT>_$O<;jAhBjfN)3`$x`_gi4h4Hlx{#6QKH8 z?}t}`;RP-unZ1eor}j^S+qugVt*ccPFY+DuF9--c8WKo`CmT*$U(DpSlgb`)?*}F& ztmZk?<8!z&cX6e((si2)E`tD7jFsM3{KLNcsTl)Sln;`xW@J?=R-KcT1722JP7#of z;4^RMS27pQU3vNalT{CnHMsQJga3kl4Nj8sS>~BtrV%R0DDYDMz)g6+S``H3gR2!Z^G3 zLu2l@J{|Z6UX8xv|K?9^9FAl-ohu*}V=yC`9bsL^_vD>f^zk$1HgrVD^N$xJGp#St z1h8`Ie41qAWpNCKf#>F=)ER!TQ@drZcJ_PexXQ4;34`n&SpN;#Y7Rj`P09FqE?Vo- zea$NY>X!bgx~GY5J*wweB9LyF<35Stm|HZP1r|{ky@!QOoJ>D0tOs@HmCXx=z?u?o z`XOXTE2mog=thB>f7eXhXf2%bBkDE9M=hO^s$ecVBkN=;PjTv*3c!u`YgUfu=jq@eWoG51XYc+o)V|(17=(IItjZA= zj=03!EIz!t4tlY_EtzR5nyvzck;Xvl@L|)yLokxB;qyKQPMCRF;aHLa({DX+?Dj=! zhCqmD1nE$pG1jbFIXNU z{_TgF0}bf)oBZ}Wb&vc4C+hJ3xjnLXig@tDI3);ePZeHz&qja*1D zC@z3fSY&8?-=gwig<0}7n0%3u&~bfVR7`l}NXPw8N^Ab9vC+r?p0#H{X$?>xYpr7E zwuE#Ddr(^KE@4f;+$C~ z<}5-6SCLCdZe+?qWmLN+yvVZA1P$wd2OUaya4LNw&wR$2mA?$XgQyOC9X1-aod&;3 z!7lr|?UaicgmUH`C5JW9-i%$*LZXC@V@HB1xMYP_lMxA<*Q@hJ1H@k?|7aKz(S1!p zBkoNXY|E6tkdpo>=p17slzHPBFn>;>sh=sl#g6vyNxFIT9|iptL)N1)UKDgm!lQ0| zCp^%IT1!s2ow=o!6lKITm^a*t4vS#K2zhO|96}d-2Wj|hr z5E#{W;YE>ypZqGH4CD(br=It;rBsC`=B^3TMjn*7#w|QGyh=twb5%DOBe=4c4qd`H zM2HaW?C`24iQpPIKu;5CFcUt17#;xXx~pC^8q7We!Mhp$Qz8te%n5~Ds^|(Bw}*<&QV>cOIek5T}MAd&@7JITwCJ< z#8!UJw+UiDV)x+7M3aZ9vGSB;X>xbIOOF^4b!N&BhaelaoG@Di-qk>eLAq@g&3h)( zjvbT&bXRLnT!Xd~)88(DSeE53vvxF68RrL+h;wO>Rh8~Tg1HgR*VGy0GQSt0ZoR1Ms9{sDIBH09f=EWQM~JGMqtY-CdG-&dcQDNkum z2cSOEV^C*ziHR(EeW!knQd&LjJ5>I3*kqk0S~Ej=W1&vg#jRB`Q*-nY`S)qd zOY-HLFzTh1jFac^i3{mZYW_X{#>!Xei13SP2T!#!1$$+XIR8sfEI@Yvs)ar~S1DV5 zK7PB-? zD-fmVm<_+zcUy%~t%qP8h1~>08#ci)$!4O%IW)M<&b?V@*ti73Y&8V{xCZ=8WMVFG3NYB9^}C*S7%y{sS84gv>i%7y>u zyAs&hxwo+>4y5!0q!}ecz zSzify~4rk{Fr9c4LtappSH?T<*+t{&C`6`eh@G zzRfutK?@$Y>=jU1tBA^_JTN|mJq5mG7&VF0KY$myc|mGIGCEhjf6ICaof}1kz5)jt zwgALQ*j|01L~uqP?VpLr8bB*%d_$S;5?Lia3|Uw1=uDmM)i{ZN0lE&M@EH%2N?py* zM66d4+_SwBY^#dfn_9%Z$pK|!c^PcLm5%Mm7zJhHNL_Cc*UJ2KVJYc@Aq~@ZB|LKI z5c)iOuA%#fssCgpQL7GM{zWnneXwoF0zuWd@-W<;C#GgMs%hg8`VMTHOEbv9|DJZ$ zVL$u3dN{6NhZM`s^0Zf8$uKx$+aIyNc08kKbUp7!y>?ciW$lQCdDq25!bsHEj}+&R z@z(4hwW|>-t95H<5u~Bze_cM}+u=8lvj#8gGRCL>*F5bR@i5G4`UJr#{|)#9b--X! z$!m8yBuFOc$QOv6y6_tc(@5Yt$8i9buXF{#VQFg;SJAM|PgWDnW`l+t_y`{A?fUJE z24ikxL=+KK_I7;AYbEw$?tTXaW7>FIUqksPI^z=D6AC#IT$(42*e&{GhNH>$G(Bq6 zXRU`Hv6Fy4&o7#k_oSGDwr>0W)PuGi)qq?xKhqcm%V(;~Ycq5Yp&5!_8PKb?90T!& z3WK8yL>Ti9mUr{@I9Jw}>SPevdHg~>E1j6UyN!J<=%XmM9|AYq*P*MVc9b6l#*tx2 zCj{Z7-5Mc{dq@kgI)@Be?bmlCELwMTF?B_nfWtSBmzZ->6NL5eunDPb{t{C2={-yy z19khpgFw2hB%aQH(D6yU(ZR>L7b6d)3J;;Tkw=I8^Z(RmRqtwY4Lx{V`e-dXqF=(i z-q4hkthd8B2NeN!U^~Z_T?E!{UqVI)sQXK(KI7na?AyxGL*TtOJ7PwWNi|DcH-sIi z%oEQ6)Q+0?+)G_>2T@N1KeOFd@$x16_L*McHl}7cZM5|b>LDR3WWjJ6e79sOT|YyR z;PLmKgILb0$=1rKzyUqCL2%4rbR+6YnCr|ZkeDIf+;J3Xi~s>BSptw7%x z58Bn~v{Qx}u_MT_h0vtiynrZu0vs0Hl}asn&-sC4FYT@PvaJyLquk${s%>mGJz+e{ zxpxMva~o@p-DIv(d2PrT97O`49E*_IhzU=|Oc!9Z@U6W}dZxQgH7cTVV@Qx8KTvN4cLLbP#w9IXb<0Cq zqrT(Znfx?#kk{0MY`sO13=t{5S+?Oj1hs6j5+yoxWTaIZ(X_9!PCoGL{u}8WFwd)zXpB0=1zMj^O&Zh{c?y6jD5(W-KaN`?TTR+L%5i6`g>K&6&(BXJoJnBCQF-L_p@^J z$-e(^Kzq3oS9t47_YJG?dC3L@Cep|A`p1i#{B2G$1SzM2@S}LtMTgO!BH;lAEDsV2Yu&uJ@z)!OqrvT~CK^chdTj#oboX9+j&wA{FE zn)RlysUWDz?D?~?Z{{9~5+}}nRqFZLEv-C$e70=yo&3o9JAGGAiS{nZ;{VKl;(n;d z7@W%gk=hx~hNp$u=DzNh33{Q^WI^|3#{Jw16M^IO!mk!a+5B|J3!^zn()>qws=l1J z7JKb=^p=%a?2LWK+EU;CtI*f^#}DY?s$gx`1uYqI`X7-RFlU)m{=}q1K7;*%;s=xq z$*ae{MlC$xvagw&{;V*Sw`p$j_Lr`G-Cj?L-p?|tZolw83##||ytgq)mEm!8d^d`d;o+OE9fD&nENw90$qzi_252Ufn+`FG=N- zZoyAy6RWLXqSr=*-kh;L3D~-cJL_j}y)kzqehWj#2)N=Mgn8NxGnGptd!b~*Y*l#y zh4!)A$FpGbznPwDQyp&G#=uskp`34QT1B5HdhN!Q2*CDG`u4Gya|Qc**2a3sVu3B_ z>QO2ETVIkM=MC=6Vz{UUPn>i9dj}&1n$JgvUY4<$EoOxqGq@&RfBS%Q=INF1h*v(n zojh@M_kMlMTf&YU&2$^Py5Ls7cgg={cYaC{MI>wF1FJDG-NYrI&hjn3`Gu^APW*n$ z%yuk0%GqmC>BOtN|FVk?xSwZI7=?NAWNjsa2BBR2`jE?^?zCcJ@QBOPhvD_~irXT@ zFAEQW$^#~F#vw$T=R>#T6SwHt-x7TOH~uE;>_|QF4gL0HJo~ImFoVRSz#)MUkzFjg z^%R;P(9`G@f#L6lK~DM!(!qy%%Yn9Hd1-O&XB&Y{QEHu6j(%!ie0bEP-f6C3vHw%J0|>E{ihkN% z+ix}jfI#^9CdEyk6L;%>Fswdl7LetpgQ@rfapN-}Y5qz6H7%*Ltj*m_ zFOrgj+#1+GBt5N9N0WE&Ph&*al}Gy*B=qXN@yNR^0`Gqmb+>e)%o9fgl@J0|apAq0 zHB_$C6?>;CZG@yWZTCu{<>(*iPxDTk(Th17nW}d*46_5Z%XLXkg75@|Fe<9Kg?HZ? zyUt;rsH(Ehp=)2jlM2VDDbFU?JqM42tJKLl2X^5iYOObIvwYd?`9Dt@J{xbaghsL- zOz`uw)EsaRtaBAH?Nql&sAaW32lXVv?{}IXZ#Y=b1bq%m{9V3=edzjPqVsM^1I#?O zRK0#MBI;KN;;HwTuc6uLySSsH?>yMyxb#1yb)VrY3t^|*p6i<_Zt|TQh@$o&e$pk` zqaS#6WY)X49vnObM+LGcKG5s@F*0^WHb4i|L~D&2rPmK(CiN34S0_nag|rGdqjK!& z&=&|%wRkAx8d--_X&*s|@o$_@stiqKo_p+h+x+b)G_Dv@r<(Fk)8eMyh0zA%UXWDRMK(@RHcoYBxWMoZ*dLONzh}h=(BPYB}`~MBN z^zP4MK6X>M_^95uSkbz$z1P{#i%d+`GCA9XC7DVV&XjJ;>kYosF*of8mAcyW!Mhn+ z5;#wc@3%T?GB+NT-Dvsh`XyBTO!_;xs{o4}8!fLi7{1=5>iKG03w@~X@eH+G!Nozv z$7P%+^aH04k&rH0L*qCbaP0XC7ro1B2c~AD9Rd$!B5~VM z;cy3bnp~Wmx$8tAy(27@AlpT&fS*412WxL|<40r!euzSQ1VvM>L%LG2)Ra_(*p7>REnBBeLT z;FLKPX)4WLf2DdL_{QMKf-Mc#!X02d3jSbqHPosHktn6V=wm$e-tz`wMXm_=4}yQ1 z40I~nT;}p4;C@)Yt4bHW-xQEI397G7SSK#CFq_$|ckG#m7gvY;b6r{ddV`-*=;M^L zntv)6JNoS}d2Fn{TnrP&6jvn)lxBUq?sPg)&FOEh_*T2%u|7}i$7_#>+vcvJgef># zP6~AE3gQmyyleDbRr4kwPhIzAZ@K5lTaaw=wL?jm+Lok_G%ET)Lg(zXMJsj{ihOMm zJqVIKY~Ga)dBvIDLvU@E7(rc7(v;rr(}aTTWdkDo~Iup0U$_HSi1Ke@y zL>XF_5y(-8#s#h4zip#(fh(S!#`t1*1ce5ZY-VpU`$hg$YGH%m)^9gC?Lh*y7Vn?V z>FBaZcXgCyFQpFok`C~Y14bk$l&yF(x=f=}UND~_ z<6MxBuHPkERU`K4Gdb&YyWj#1iJ@=y>}QuMVS4Pf@JnlIGppp)QgATOH6Q4f=Ja;7 z*S5eF)=ryRv8=S+C!1F2yM+vlRI*1pc2J-d8JsHea#n$D%R{LwL~lI_qcsydUlp7; z7~HuK`px3t5UTO*eNjUermm~3^3b?^^IvYMYAx0&u}@6t5syEyh3y_t zj+muu{xpYVv3{=4V408j_j8*yVoNUn`IxLjf%kvyt`TZ{V1t7TnM*K>Z; zGopDfTupTKnL+%}7tfyR&3OA+kF*5lP)z~|ykQws%8#zJxm$ZI1Fj0dNqE0`EM4?) zsj42vNp>tT_Z>C+dn^roOh+n4FNduL1}kGk`lcjk_3!Vho)m+aLr7T4@Ne9-_$k-v zW*4u;^8Gt!zAK8IVP-Ns1FPBzj4GmNGU3s%TxX&VeS~S;A`GA!D>& zZLB{BRazJ_W5$BVz~;!A{ngrCr+%5mH!<2Q$o7i$#y&s?2;D4J*#;fZB};gOQ?G_>ddi-9={~90KS!ws89dcp;&1 z_;wa|4qJ1x&5i$Z}f{&?{eIO4? zJF2a^$qoe7U!tc-B83EJJ%+kn#vKt3I`C_Uu~_82{(7Las7_sqk%92-7c9qjrs!4_ zZ^+wlZ34aWWVvGQMYa{unnq}>N?+A{f$NYe^qeJLRQKuEo=7H9Yq)xmje6)0hG6I_ zfxhz$d$#z%OSW_4V3Lf!#5{z+J7YLIXqibKi|A2+d`{>86Hiboiai@IwvY$xbCOR~ z1|M+v&0(jpGY#OlxTM}mL2_Gv)M8*y3P;!zJ(Xc2>$}UIqpc;dAyvir`?fNyuKjx! z_Ysm5VbQg1`{ppj(!SD(eW#~*>@T_4PsN)awr$96R^e&_v*UY=W*+ahcmXnBDsR5q zzp3NlQY(RVF2CI3GtC*3A_2~gg0nt8Ie?GKUl(}gbdz9=poqrZ1w|Savu#r5rhHa` zl%QLXnUHK-{;ZQk&9>3>Z+1Iqu0^?1|XWzYKyrmr`&Ugr^Jb$A=_ncuRfG0Heu#E{OqDCx$=HGjZV0Ph&iEAcU!;pcvg~!DgS?S}AD$ z?P5IWmq!hQ)KIkut`T6rlk-u&`y-?!lW+MYvGwj&9?Gs=vMk}YK}rJ84A;z+%)}Kh z@|q4f=ta&FVH&3X30d!AS2PF}D_{K7IhY0&pcK<2E=PwRnWR`qA_S&QBGPuB>a@Mg z2D%i4EfrKfO{vS=0n0*r`?1KJBa?4qbB}^En0iV>C*2Z$s&+_a{YTa2Iz3bI?6IDq zOc=$f2}=G>Av8g20HfECO0l9fr~RA07viKJ?9limG9l;SRL?DD2{G3mwh|N3{HBj= zi>ET9I_sW}vy|U6|7$5i&-uFEbeituv+Qi+)N88e+9Ddn!`4p9ss+C3;W}Q%7rm1F zAac}4BV@Vkiom$i>u8%{(b%a^w~qkAJ49&1_^?_s(mWehHgN5sH6C6Ut^e9p>D z#iu9aehkbMMZa-Q5Ks$z2^U=N_KGS!5)tN>dFQH{Nngr|r~jpnd7sknd|MO#iSP8o z1SRWV3q+EO(?cfvo|jhVMY}oYxfrY@v+Yp^b@6H(TvQ$_0iL(NAN_JY%X$j`&9?f@ z;(vcfRaQ{G3ENJBbu1}J7DkTk!|CHWKR#c&`q0W;p}_DaHGz5OrY7OTsu#}}D5f=E z$jQ-VcJPZ88)AzREC`b{|2Mb2<9Q{l$Kuk@PcBWD&l;=0B7b}6K$h325XasKwTwh< zVfeh+f3;|9vm<=ZauU5{yDaF6>~S55xR^7xcG0^Ldm33Yq4n1+HCAvebplT^efg-^ zppnv7Yt|$=3irJZtnU8s5hKoPNl(=5YK-6ko|b}-t;11515tdfUDNd`u(_c7VC9y? zu8x|*7{sxMOJbEfTQVWI%BY!;OIRRNf=}x&N1iM>bvGX_RIIaO7yyH0w#{KA-0CTK z;SQN|5trQOyCp4S`rpWnbve{3iruCm|Ca{M=>(Jm$cmaTCYuV?LE#>nPwd3^8oN%N zbGBPiji?hqK>jN{d5;zqyu-yk=c;i4Z4>50Uma~;k7qCu+?@-~z0>=BA`ohIsSv(W zSTb+$x+{aN>YQ!xkXJu+vL!adhX1LU=7*th(wa?Xik)IT!gYtH&#%j#)2EkIQ0NQS zl+rQAMw?Jjhe-0BkvIrOiEj+>C}!5UB!91kA~oMp=m&f+=CasL^@}vzpqBJa3TE=O z_({1nRH@%X$%xKpd0?Ik9^C`4kbD$wfQX4itzq|Qo1IwFz3aL2dVA1YHmx{~ zHzns!3MMTYNek!#<7}-xlu6KfgO5poG4SucWDIVn?W|>8*so#bG*32i;khQ0eLjm@ zhKXwp8yqYty`c-A24-C3gTIn4k1ylVF;jckvtP(66Q74?ByI4hl|0MKlk&N_ztWl` zywiOKK+-}oOlZ3T?(@5)Tj$=`Y*}6R2h&$=LL;`8e|H5N1Nl2^PoMkXv00&t{Ex&Y zm|#!eEyg)6dYGudW_7VA0Q~M7EC|Ovef((A$pCqkbjI`NRfJB=KDe# zEHQFSS9{?H@)Rj^j_}2U#6mT;t#80@2<$z=BahxQuXZrgG_rkM3Y=Zboy|70is~mK z3Cb8~BG4GnhG%^GrC3EBq%YMCuesiJ4ywpZWRaLq*p-G;=ps((W~k6aJ|QuJJuIal zTdK7YTm7s;fZr=%p;-M+GiSl+XK~5l-`BDDtSWOvk%SxV(L~*$9mpt8LwVH7b;upJ zklFJMu?78&Z}a;KsL!;=z}Aa=;9K{^+R+zt^l#S2h}!kgEYOLq-RkoTf+aTOPsoul z6wR!`49{GZ*i<5po4Q+f9GHIS3Jhz`0d$qTuuSibYpIN*K!)2{o_FNuTZbjMg#Gr< zo8X_}%$C@zE1D*`cMDVQcZ4oL@RbQI|dY1qjyC3 zi!J^VN1cdJGK$Q2!XWjR^orzWCuB&GgbU9Ua^HdT%MzuONSWK+#R|zU3`%W1S@yhE~xGC zDXTxIuNSo^qHRUTT_+AC;AV?quLx*hmKVm}U*eLA^7`kc?h%8tI9sz#_}$J&Ah(H- z+Gdeyy!#x6sAojqU=WUw?ED(BCi+NmZ%khKvgZ#rT(&f`kzEcWQXgWxnbt@)4*%Q8 z5Zpfl=aZa;3g#%2r_3EcNGr38gTsLIWLeZWpa^6UKu-x*RC8AZ;K)5?GH>@Kj1OEs zXoS)h;)K(9Z-9a*>6SIo2Z=4#MRPhcZ9 zF3pfe_}g$^MYHrObfMZN`Qu=m{G3#vUmBjJ-gIjJ{vo}?Mo)$7K+_$U;I>~mK%n0F zb(jdtLBo%wHy(__kqOmNu~sOUvfyoGZ5_eTqp-vjF@TTS@9er7|M!0Sh)=qnXR2Al z(%Hsi_3}y6&Eem(B~Ms(YD6gZAWniLd^lnH;b4{%f3IrV$Cj5(KJ_{~)+(BNTsL9H zsHbNaQo+ZFE%V8bd%VsH@2=Vu>rPd1Y3q`cIm0)IP{rDFmTNEdWweMRmT4PCu+`Te zu1q6W>CFDKQlwYkOP)Pr-{+_JZj+Z*<=g(|SNz2!Of4+&m63vWzYN5#zeSb|$Bpu1 zZnG^cd+!*2F;tQdo}Ixb4(eQABRg+Fc_6=Vt8*T8@Qd02`2XBcN<3P1VKt)I;ADyZ z&`#jkxC4EjCHJTQJ#>=pm2qC0)SxO5(UCmZ#XgCTzH2z~$~`XHoK(Cqh&UKIwmSas z^f!)X1Nxs_T3TZ@?}dqW9h}&HBxxg(%@5R(I1IuWi{QRyZbaXsVHd3{!gIc6B4rgS zC+SfzfuowpZ5H3qQNyBJcLbx`iAR_-fzPxoXlIF zR_*u+nRX%qN?b*pVqE0BZCrrXzx-VjQ`-w>aln+V-ee(0=~-&}t`zAGu|%$bRHaE$ zLDG4usiaxlJJ>dEhk&m+4Ostyb*h5PE<5bI<@5)d==9V|Y?wnhH&Xq);E}SCB#Az+ zcWZ)C?T$akWl&9T5K~!OD0qfzo(gl_a(SeE(q}dR9HmwDBjz}gm08d)WPGxA?6w>` zc&oHO+Y`-ZK7!VNz7F-%2gSg}rRfZhqWdjA--ja5WgjH&CmsA~Jq_1eiCHfZi**Hc zUD9ofdt)yr6Cv(_`}DSwmy>2DKF^U%Y3Tb7$@aUu5QE{(AgP{SUuTsfP@lJk>hq#; zQC$Gz#3&}_2J@4t0%FSh&(7Zc5P{`=44sI9=@NaoX#CrU3xhv9!jHuzq#!-Hsz&hb z!v#jK-dAkYvi$KY=cx3P^{qGI+Y#P{KuC>bN9o@%Kk28w+eGsQxtzF0(;7K3cq`q;_cbveHGMc`wN(T*O) z2|ElWo~25KT>LQ4)d5jR5wI#;Y>`l)PGe4c5ae=dTpe)paqn?qjX+fo1IN{13Tj?p z9V*$FatXozt$C)3=Bp^=8+1pq44seTbuW~D)6GPe0!ADjn!Ln$&HQ)`T+F+ZMT!^T z{9bj$=goBA$ge2g?d!S8K|My7sfLXP4!dFAwuAR*eZ9u6BFFWe?euL@;tXzCgs!p# z!DYFP*vq$E+I2&(-7q5IP{3NhWuWrKGqD5rNr|Z2V4bE>JY{{sa*pnBcOMO?Xsa7K z7kknh_<@1-4^Xeh#uGCZ8{~}?c00|4>kyZ><>)_r?M9sq%5bh#2C*y((@xR+3KK>R3~51mw7`*O7!lo zQxoa~=#<|_R9vz^fT7~t71*t7(iaG>ggjpOLxKEB+<^%tl z@7?IvgKyYt8Jm^LXRo)SQX7`hd`$LlJbs`UseRbj9FF#nA08XG|2m`Lb`U?EU(=c0 ziIn=KCZVg^Fsp&d#CxW3>@3cNIth!Di@!Bc^mvlOw~m7JH+TkSSRi>I<OqUaZK9E@#3^3+7N-BV(atrzY zqK4DkM`wQwA=J<@l$LihQuE<3w;3Tf_;z*M{2}TVQMvh6(DT!ZweMixRcv?0Wgaaw zsR*n_bzs-GVHo1Jy1Nd^<%VBf`L{l^&}|z1->-8g z6MooU5I-lXbw#m(Ub}lCKkU@wb>_>DzEDUO)y|&`eYA4MBIw4|H2j=u<5`}VCEbkX zCY<-=3t!%z_;JOiq3mzIm{;kEq|+yK6fdM$rT+O;+|`hHet^p-gSM4?KRn{-=4;xF z!E%tRQ_Z@i56MNSH|=0GDgQ*l@i|HM3Sp<1?gpUlR?T+xtxqMgQP7Zi`g6Vjsn(CgwO_O7B!d)K; zJ4$o5=w78OfseGAf2XSn_-uV<2&SA?yLuItFcvc=CD4_&Udl`h+Ms5~`suHrec~eF za6qbWGB;{oHk8wAtWvHesqlF@(O!ZQ=dit#*LAL!^bDtH&5n=8W-xuw{T#}1{Q0>8 z76;kKR`Mx1%s=vxD6C<3M-V6JofkhR6UuiMO7+z=*KmNlEsjW4XejVJK z#^lzlqlzef4L>%wPHA<-D1wd~mp+aV-F(K7E<#E^53u%-b=D1}l9CC`@Z2A47)m_| zV`+0Lr{jY_p_ut}`EFDiRCx3zrQh5$J*E2~2^lnHz#@+RSt1Yc(H=>b^I6DEFnuz7 zx@7g%T=n$jggdkqSDm0c+0WyB8x_{DOAm3#ERbmM3Xe6~U*RZHtG{A(4_U}NZC_SD zf^f4gfz*IT$UFS6{5E>wMgWeHLeRFBVW~B2>VH+!Esao#+7K!H3;&TH zB2q-W&KWZHSr*tIu@_zl#$#Qz9O*UDozT;GMtGe5vB=&9$&W$ng^~2|n3^=L?KZad z-*4fJ0=7_U*dofK>m?IP=kTcA4&w-9GXLe4*-6!@Xh)Q*0FkWV{go9xNR;f*C=4+>%{gNvu7JcadQVE;SA7 zwSqOdzZF$E>bnM#hplM|7P-}O(mwW0==(ASU_^obvJW2O%KStx@#c@10?JOq=gpuW zPy?JzAGeArPHBJxx#6_qiEL|3vX9wL5BkoO>+e0&IkWeqW(Kzk-f6MH#uZ*~q7A)g z?hS^%YVo8x-ThlCY)@f)w;oj7JBQGK(=VMX@aCIq@I8{X%VoSTpf4Ddxe##XB6QTf zRZxK8UG>cBtDcULL{9J@CF510^h+yAHK3d zh_GJtD4og`tG)*@+{*#06t2-S%dz1Y2D#0Z2OL7t*4~EqOJ;MnMcQ~@c$v&}q(A-!)Y0o5hQ*@2l>+-Ri8=0+Wb#kV7Z_ z^qI=L9d=?iam)xaXR--P2MFs>%Zv^y`GAO(I*QuGoXFNC;6b;wI|6bs00gfkLt3Ay zMfL@3WDIN=Q0N`Vrs(7ui|>S#Ieq6ptj=O%K2!B*Xj8mhSZ{n-eWt!==&fOiWKukCaOMTT zknfy~5VfIU_!Ljy7C8+>dX|SQCZ*x%Ll951KAK4cvs^KdYQSX1E;I<#KJEWT_4(U2 z=-5Y62#t*A)**(WTQ>RTT>ra|Crh%GFp{b|P!lj#?+!#l85dXB)gxuw?P$AS7dT5l)Zyl<=<@ADW zb%|jXk=q19>CNcQqD$Z+HnWTNEg83mi-jIM_plEr%!9Gw*%5xFRxfCpL#j@Oq|RZP zw9PZE<@}SB5K!8ec;2Y>rXS)wl(m+L??thJ7XrB?r|(zHodxK+OV+S$?YyRX-veUQs>KFD$TsreQ_U zQ*zUp^U_4(PVAMw==Cq(EJU8!I~_1HpV>X>sL*-MD_v@RMvCZ@sZe7@N6tGO6S%N4 zI4)a!PPeEx=$7W&u8Hhgo!xBM{{9?Y42W=vwCA|<#JS`1@@gD)YA$;zpWrn@78#P1 zFD40zwMQ@dy7Pl_PE)b zjL1AmC0QX^<%S|z+1t$~J1fMsue~q#UiY5Q@BIGvaPNbA&*%MlySdsL*Ftr?z(~cssLpu@_>ZT5T3u1^(5$ zvD+S1hpk~tAP#!ER5;e$(g^jEemmt_eP!pugCx9HcNWYPC4NHfN|G=#qruqA6S=@L z{n))*W63$;SBbb+qw^@UeDS_4bUK--ev*hG#Y$L77S7^MNJe-W#ap;Wc!pA9S7|u< zPmWB(*h(mvCpQ2ITo?@0b}KtS8iZDf5CQXsVLX*^8IaD>k~Gy<9J(+PG>d>@bd?16}o`?a9-yux&WhsTjsC2G`12v4p&Z*c^PnsGRko&Wp!0LUCU{ev4c ztU~`8E#r)5W;M&^m?$Cy9=YX_pas+ba2>I5>(MqC*0uic&N8IJeic|1tf1e(Dq85A zZ)@6%T^XxT%2X0)sIN~w5o|q1#vI=f{KBoiM??gcbMT}L0O>VwA9z;>%C^oQ2uoJOb}Z{+ipLQ zT@?aW4JTRJG|zR(&9V0e>MO^K>BBPhYL#NA{U_)K$xNfWjVz+?R_u zrWAL^fx}$3R0|pY0)+UezDNf95PEh^Jc&qBcDMO*cRv~~YB5R?yYEJc%>a9Og#y)A zf;h+bz*$lvygNo%1+#Po>z|$%0ETl25DX|Nm{jC&3g|9c>N0#L6p-9%E+>CgDrK6R z4}I-Ao_ur~H3VE^=K_c}D@+c5!(T>UwfNi`V*FgpOI0o_Ud`giDkM`GApDn*rx;@p ze4d$C0N?wsW8O~bqxx7ngM#%-VNMnI$l&NckT&kxLzmRv4>2aVzgZl$Giv}zHtYvL z0)A$klGF~P#iB9^Wthxs_uj;vdzj;hWxHz8YKr5Ng^XN8*;#qONE=`b=y4Z zyW!d|+*0G8AD!UL7wU}~ewdYi)wuBgZ;`h7FlqS7HATIJd*)L%$jc!YcZky&Hz0d3 z;(6QRHf3QKy?r}3Ne(&lpdc8U15_FsLD;iTtw2JeyWMZa{{zpb@m<@?-JQ^%jqckq@uD;M zXU6I7PaPUAAR^y4#xZO>`l1Q*~9n3jac2y?lxJfAj?tHcN9=Akar$xK6 z!r2r}r-WuhSU?2!G*@7dm?f>2zjZ0~1SldBT7cm2#(K>w>u?mLvN*cq@Sg#_Wc$wp z{VP|Gxf5{DC&+}p=#00mh=)CfS~`r>6hCNnk?%`l19OMylB@e~TR(7PGr22_3?uX6 zXV?Olb=I!EKM_5)H`j)aWq_MUE@)&A76MB()g=EOUm!xJdvj9K^Xdd0t@0trduK0T zS$^dCH*eQJZ1idHs;V7G`mg=BBx2!DqOIWGhZ};( z=w1|Gd=}hZMqdward$_)8*B(%CQ22)41=jXR4RsP6|>l{lf;M^F&yvh{HMBz8*`~;Z7A=bRgix~X-4dDe+J!y`soTX8c|exTXAwhEqUfi;pTk_yDn^BBQAZ+HY?e7N8oIWsec*I5QhX^ z%AFr%=UHQat5EYg&IAiEM5`)a4(L*)eu=sN{Q8Nl=2!8~%F36NQ%1dvWkSAJy}pv` z{^6>tcjy_D1yn1VNAG2va60nsVwr43@4hcm;JZl?2zx6e!PaknE!I|pR21|hB;u;m z=#@)v;!^j2sSLi|(e?PLkb0_vFA{h(xVYA*G@_Xv={KY7FPG|qrMYae-Dm3=(eLT=@&=vzEf`jLJ`Bkccb+)n7%OHXygX^LYUgK>9v1>D~;Du{Ox zI>fRcR2s7sBDikrbu!~DPOp{Y(wRHOE>*p{@hHi%JF=gHLYKtOq4qX(r(*J2N) zaK(WuUgwTw-=1A9j0*{>Y}1|!Fm_--j(kOu9s|eb%b}lrlugHs_D_}D7@=X+xYuGS zz9GJ}P4VJY$njB|UKKGD{H{E_=g*tglc5fG`B*lQc6yVUrT8NSI@bP-XPo!u~XLYt!ZyxdP71pJz##Q&H0bMz%+!X|cKT zE4W|gMtdSQzM(vSTqh-V5~`!G zW>*T5y&rsRzD0RCm%&uN#7Qk;p(=qJ?t;6WSVWQK_Au&Yr#h_3()CFn%`a~``YNFH zum3vY2t6dTo{l)^2h>Ls=fE^F-B237C*I8nJpTjuRPNwPdQCtg zg!Sa3h(OBE<#`BBLDu;Tg9l+yud2l$Ne|`yw)-;CoCr0lQ=$|ePF#)Q<3NL*I49K70a+U+Lz-lBGJx={9Q zYh1-;YP)2LE(gNC>Z4%lec(Fs&;SzhX9E{u)$eit?tOAa-u;*KxqCNjhl3jLb)7c3 zQO1Mh_J;RrMp_d2(%l#yF&5vpq1pY&1ZA3b{SMDK^$q-I$w z1*zbS0|TZph!2F241QmhF(9^n+6ymujJ?)<}bsQK~kxlfUuoe04cN+UwC zEJ(6ge<8VdE&|x(HQ~x)t*zw!%KhsU_dpx^@TW{9LiUkjbx!5kZ#f(J;h}=9(ispL z`3G7@F(W}jXv;1O_N$vgOnw0c$|Svnj+EWChd}#V_kJxLSULR&;K_b^ymBBH=;$iM zOVMHoIv21plJvnZeq1Q{vhu`zpn7-A!ylD6+Sw#D_ts1{c^AnIf*NHXHyP@Oyj)%^^q%`K?hoK8k3zR6!Zad&DPN0 zmjPAV82vp_Aoh+MD7QFA#9%`oAxGtAbH`(E0_OfCx$kJ^qsDpcLSrbBM=7fx{gzCf zNCAH@i}4w@HdGmVn15|`+o13}Y~irXRF@?tM4K=Q$$$1i-Pkn_axz^$^bXmH3-lFT z3h^*ieYkT~d07sz0IG!b$pTp(KZ{X2%$VW7_k7oqiChcyTNvl)j0<#@V z7P(a(yF>yhn~DW0MabfdVujQTJGAtLyye>=2nLH#EVOOz;GPed=^BQ&hJZ6qteu`+ zmZiDBVe_ks#$v*ynDyrX`&G$weYJt9(6@v}e0@R2=*0!oke!Y=>*KA=saT7<9rv97 zm7QHA3R^e>0iklzc?P*Hly|nW5L~!VXc&993cvp`T~sjCuAZHfB&|k?UnM# z;9L&T<%WpApr0D5-ah&52wBScgvOMA{YHFUX?kQQ;wsG$BNa8&^1gysZ#ne(jdp6F zbWnsfgQod^w+Vk(bwR1H)Bwb5K=^JhE1ET;)Zd$yDnLJeQrC*`ygD9Y@>9#p;cF2Ee~4^P$;JdTzq%#$)-@y@|H_euZ+j^7)kmh6j10p$ z?oW35Qg#dA@C~p)Ono#0$$`|=)I0h5HSpm6K8%*|@p^s3D&<1)9;UC8&;(8~JD5jr z{T#u1M$KHicdf7?>Fo86x#q})8v{_?0GNjsvEM<~#4XjJD|0_(2vRmwWgtW--t4*l zh~v6{u%z4@IM7+sa>V>H@z>+H1InffsFztJiaUgg%qJ-voz)z9!|J*1e9|MPF#_6- z<>wCG5y>?ro1R4IU3yPND;y$K}xVU^G*G1xP$?|66+i5bBnh_s|Ns(X_yx{FgxaRDR9&I-79D1^I9CWhJi;_Wzt-elef< zJY*J^(YxFD)P5;#wx5i$32uk9zxucJL&jZg^O#Tbxo(>z_3CE?JbE7QEFVj4zk!~` zo_tAOP^XH&m9fBXqtYdv=@j4&93S95UbTc%c4MQeu&+}CqpfvIR*4Iu%>8x3W8_U` zWED9!6;8p}n5G=8;=Y2JB>AajAB+uO$ z0UZ|Cn`Tk@H9WYD|1|pi@ zNXear`r9ZSX3(zAyD^Jy=Wjca{TY;;r1P`8?)mt7xx4D0ig2t0Q?Gbke&u0PEkVI*;cyZ(?n{e|#K%W|?f-IBk_zONb{W9Oo>>>Wxb-dM5E;gcOtcb1l8UoLv z9aLp9`Mi_+oLItMXIFAqezQWJ=+Q)IQ=H9}eD0RpXvvRlOeT>EL-XEm_*-N?ScrRZ zZC@o@oBdx$K=$1RgnNahS+)X?e60B=c5s?p0`Rl8Cc3G%K{9ig1FbJrU|(1kiJwI!x@NvMgJ&lvdLkW8S?vKyG?C9zH!hzhM zA#e>8bPf3IY*!+W{qP-+Mx3LJguIRB#YN?_Yza@ocVa(y5w@eDLj~|W3oIQ1BbxLK zcCJG?XYlC^>Kich#$KBsG0C~FLX7OoV*5vhKqTmgs&r1AEnRBAD_6p;A;8NiJZC(c zE7yb>p}E9Ax!z`0XDy*m&Ea}m`!z4!dr;|f>C+si!sdD0!if((*8OdOdA~3?lD^QC_ftTpSWs zCbzCYjgXJ65_#ZvRWu0GmPU@HA{sg>;jY}ZbwRW@?PV=Y=lY2~Yzq+75p`(r%O=us zNygmrgUMGSwy-waZ7scE%ZSXH=x_J&kcEkQe3Z@4jxNdl6=VVqOcb^@zl*buYqOZv z5q94h%pAKs$Vz`vo0(>GajgmA3y4hq*r)#%SSNOPT2C%u%y$;518A?9y@{fCE^^?- zS`Pcfp47F@U(>h)R?fjA=47z7i<31Of)3BZ*A5v&`oWDl!cYf~q1g6aU14rl%bS9WUK61Vss2fYt=%K1lwY0)FAXrs}OA zGXFf@0NCV5`7NNCKCK}4^#l+!(60zw23+RQLY-q{q_9K7dm$t;u+!M)n;W3u%6fxO z#(lL?(nkvK@hn3R_ldaR2SEGN{BGY0q}j^i_MvBo8n}aR5+(Ts58H5!pNNE5<%>E~ z?9gG5(XRS=-zwlx|K9r(t>SCk=;E@85j;tN20mRqZ)F=%=>1Y7;>0Vc>(!I~*)vhK z)4-*#i{s)+&=%IT^$=vK&9V2izL)r5Y8z?CaQ+a2@t|+u(}k)w5i<8`)DAmNRsl-7 zHZa9&(#z9aWEI;&>G}1vIMemFR>HH7t*J^@E?ZwO*1d_x%s!_axh#@pBlT}_Y})zf zs~J0+2!j{xq&=#3w&e1jS?YXPg_CMU*d=ZC1{pbmBYLshzmU`RXhctn*|eTn1wW6V zUwDip_dv{OxrDLPn3ko&e&n8g@~M|q2aD**h+Rx@L6xloo43H`wVQ$%mzfr+qbWI3 zLi`$T$IK>dx?RoLTAl{89trWx)D+w8dRE`35K`FP@#K1Ovrq4jMFhHIo<}JA>z&lH zB+Bs9*XC`d>8-+_HPy2Jl9zExU7crdA)8j6d9;7mulvDD7niqPTdJk8+QLQT7zP== zIMd)#b5?4lZ~0&&RGz@qlUC}YN0g#F2h&vG0->O^Yd&3EhD}@&qoYilZW#wy_40tn za`ll)b0;bZd8=ilUyvWCY|dXjnQEO!coUbVj};oexv1oE_JDiXS>!G>ba)Pds^b`X?dmk_im`u!R7ro#@h8;+{-u~r_$@t zn6F4MiSr?y$znq|7A?bkuV_x^(e$9*?*ZDe^~2E9?GAGuohNfB76l7ZJ7P`s??~+_ z;N7Aa?K8h9Jik<78y)=Ihx$brY0$Q%_=Rib$ZOFEcWllD(qu?zg}%eRA7pF#-urpW9Wd(UO;;Te_27$HyE@glJyxf;1p_hO;(AJ08NX|}= zkW0kgZx9B1#5gfqj()eVG4ieYSe<(}U3*$qeGgq$6QtYLO98T%TuR1seren+y7pM~ z5!kRPT2qGayWx5DB+ z=Y1o0LMI8)&_?mh*u1+vDz8*1>Rih;PA$olT_FmV>pKVbJZuRPpsUUK3%R2IT?*4W z9^=4C&il;IYQL7twFk}N2SIQjKL$Jot>s-Atz4Y<;nQt&6#VNGlWp>M&qjh;*ydnk z_4&3)=vV)ZOz>jNWzuJ3>+N@2fhuCvD1_b)&VPyu{Q-{iS>!~WcyT*f_|F160|L>9 z9oX$hK7Ecnw}V(U2+ypfks6fCH>GJg3bFK=o8v__ec>QC95f3xUsfQ4S74-le3RNvMtj~q`SkXZ0{A?O z-NqlzKhIR$pn%h(hb^Bu3X4K%efdjpHC(ESUPT}OWg8U0@!R->GOcD;q@0)BHyVQ2 z5{+8$TiEr{sdcfQ8cHP1Y4e8G>8R>v&C^ zyYGA}@?5k-a4R3zyyZu$e_xuVW2CRGr|+m*e5J!%&QaN0-1CXh?9B|DO{Ge@d~z5Z z*-k~VjDE@`lUe)%6n*&Sys2m#P^JGdj7u)tTMxmv~W^sZw)b=r3dK`^;xXsIf;nr`1ifzD+giU{@il zqc7hLg_o%H3VW?o^(_wv6#%n3`(4q-5;#_Ba9+Wea!xDkXmo9e8thxBTAyG18}|nB z!X&3&o|~t?lml8QIE~?!)=SLAv^p3&kQaOlT%p=LeUfEy^5pK;8YX^b8e_ltKwDYx zpGmFVtC5?K5VCY>rz7IZeM8wnigDSwFEI2A6zzf8RE^VzXWw%qDokwk$m9I9n@6g- zG91Uu>)W&5eu?iW2_*dg$F8xlL@Mr$E+#wFRvhr{;}%e1E`FY$Jl0WU2galC%B=-0 z5f5mMp;COSgA^b6bJ1gl5)yC)dNJ&Uhaj_hC6+~Lo9R;pLqC_)Zc^$9MGz(yq<%9$ zq~ORefktg`RB~Yg1@w(!a0}>meVGt>9w6{l%nWJ;N_O7+xE`F?xV3WBAs@JWJej&n z#BO0WfrrZ}_ED!0(WttszV6g69Lt%I1w@U*>hfPVQ1Z$IQP$gNs!P`7MF7MpxJpk; z04`F{B&bIl2Z|&wx6fDSNF&yy=lO!|iZzLbRKn^7?MG*g?tE7+Y(^sR@kRids5nhI zTxgiiGgT)7_Eq7w)SF|&^#xvj3nI4gJ0dbZnvILKeOVRe*h7VTj(R_R;vZ>JK0(G$ z9J9~w-Kbu=1fQo8w%rZN&EO{c36?GhqT#^DWi#)A3b?2}m`f_{Sm2MfP$-3V&p18r zrES_s&qK4qBCGZyi<%q2bv0;`@6+G#_Ge58w+|uXF74hq7;frca-$zV+0#fKc$P?@ zxzVsEasB|$M4Rvps@z2q2B<<{=O|lOB6s*)!Gnk!ch0hS%oQV8vI&yH(0G7<_i(KO z%T)l+NL1bk=^bu^QX=A*N-a1`8`KCnh4qXEhZ*38S#IT+#09lDhrituOJvsr9hO@( zc}h-Y31KRAY5*NhChQd@z|H01xFArpaJ`eSY(O|S;C5`B84@g+FOrPWrWFZ#kR8&h z{fdsVgJdpkw=}n-2ruL&jRIr76x_Yx#c)Sx9=(7&kfcm;{cYhjI3D5{VMucPO#=czI~}Bh1r5o?O>&Z{IolaC zJ>=)e_@Y1xEn)OUCobKFuL0Z!tLb%vL=TemB=nD*Q}ha;CV|7@sjk#UT<19if3CU? zg(D6-AOvL&j9_G!MzA9MaGyC0+sE?3=kgmsvNO%9uvjnJ z(ye^RHC&44lXa#IcCHO^L?QI+A#aV-4<%ECU7xLW3kDCVqlrqJs~(o7YXRM*tcue( zMU^RXrRQXj?t#>fyoGob zmNf{dApk=($f2~@oGg%;zdM7T@EZU*hhXV93PHuMKzWQvdaMyzmBNRQci&MfPz>^+ zeh2joi@eRsKp_nr_JKmD%d}1IU)*4_E9`YL(`44Pl2McF3OeQg_b($3UD%9$jb1eGkBE(Hb+5q?5|IE zNTYwFo_R~sA}Ki4ZB1*S5XnSE{f5d8t5meABN#K<23 zqmZvkQU5}bK6q`mTogb~25GPn4d3lUhGXySq^22x=o)mb z-f)+EbZjlvU^ILu3#~8k=lRgKteu;qGgkY7OuUzu@V@m3Xv8z6KYnOxt-)H~TN&MmVOK zufp@LxveC7eE1=^`UYe11Ua>xQ#R&h`WZ6eok#e(6yEOI8c-y6p%JS!UZ^UsYOgrigm7ee0=6Nk4ZXx+R zxQxZ8(<^lgHr72{m2I+`qox=K%#5qtduQg$drVkmnpu&JFeq56*Rk&f5gk%Cbw)mG zKM+V@&4_XDM5~YLitJim?CXrO=O?N@mr1^4;5NZSQ;td*JUjmTSPFOvZWvd%!7m#LQOJ z-xpMAJYDjTwCR73zCh0N=;vE1F-IPKsXn}QY6mIjM$7MFl}QJ)m^0oor~~x~eI38U zEoPOxH*ZzMIx;+s?L;25H)C~yU1k9mPegkQhK&uW=!3!3evTTB^6FoFIk0;Eh$r89 zulw~%{hk+eL>O)%bqi0VymV+u->-vs^uu?&2&9MYR7M;ZORS;Fv-{CG$4nOD){pDW zU%RPv7Ky>g$VY^>(78@%b#g1GmW#TFis-r_y`xSUU1OHa_3$f07rG`KW)J^JV8r$< z*Nd?N-e=p`N5^QD*NLsT2>6iYE(11nisJ#f@7=bT&_(3{$ItjT3aF^<;U7!5^8T9p zXC!X0^-@rOjEQHJUaDf!_i!dpEKYTT9T%-u>vQL1L=yr&ip6%WuGTL7U$5DgrZIciVM;m&{+#}?{P7A>6{hF7o%m77`A;EW zp)f^nBgs0xAl8h>w9$_J>>U4hyXQrIpJNQwV#@bc%%_c+RBL;gW-%4a&wc#X74Zw}l2C0>Izw{E`7Ax@Ik&*6Yk%~}Ro8q*g zJKj~lJ%3A%(*iJ5>taqTntrW~6kGMpA^~mMrb%o}K1sI{fIG=AedNxh zG1UwY@7G+yr_KwN}! zK<2JfZC*~pz>3(^s6ReF_USxU@%O|0rLXXTZbg}r!qKnr?n)zMUh3mPfJOl0!1UgY z4XR2&M4V5MJtH#d&KxrUhxvf^x4ReeB6pyBsSc5kJf7Zv@bri7LPuTOYbYY>yR^<$ zTQS_1V1&U$tklE_< zF4NSg<$fRN2D5^-;Q+sNGh$u5>t+o-i_4TM6j7W-+m4H~%>btW8gh)ijr&zfp> zy3xW2APo2XgXB9*wzZ2&3Z9J7vmdZ2fY=Eh8(b6-qpsBJObA+i&+893_4!Ja#Akw8@KNq-Z{142Fp@r{qFxSun$0veHy*w-Aw`7$Hq_BI@v5r zSEkXYe`-}%sir+QnpF=o$w_$^&rOaw1bf7MU^FYS%o8|716LSb@2+)S(j9o8ac_>- zcTu6&?G&#`^AXz9>6)QNe|=p_xoQUBVE_d)hGJo{S7X8D@Izd3Ba`QJmGZ+0y!P*@E(pu8Az z$7;VWy=fn8jK(=gFsO;suAedX`O?IyOLrKH<#6e9Dsm0&f~)!6=fM0lB3UmJt|E@Org*2M%g-91tm}O zpl|SftM4VS1Fc6+c+#&66X|iLKYkqm`jWy+aIhr10jA1mZr}(z`Fc)5c$rR=IV)d- zR|v0W^)WXZ0zASV<#m}PNmFax2lL>rta(%=1){i;ZSnwFCxO*r`WJ4KdeL;O(t-6! zEA&v7bg`XF04IZUtRT_y7Vl0~NPWZG}g!9JB=Y zj@N3+=>nlYuRaWHi`{zZia2#A_E@*LX?pt=?={>XT3Z%;gcF2#8PSEHt0*Ri2x`i9 zG2WwOj8IzR-$$7oYi`tupWRJYJK*Avr8T}*hFPVVu!zL0dav=e$4j{~xG(g$cON%>qdIAK!M9f zWAa<~Q~9Q|siKMcI!xC`YNH#r>?MbVw`DKv+PJwEW$VtS^NseBP|z z+ytB?X1WqM+$GkqT~KjJh{`ScRZU;78ZM%bvo+v*PA}HLO93lJEjP{@yqgLIY$jiC z$4Z%B&~16a3L+GA{*%jzg|)mC|(SJ@X%E zh%<7I2Fb0Won@zrfcJHa@*{yXkD!KOka9RUG~Mu}_z;E|qsC~4VAJaJ4*jP+yo=zM zu-5@yqq;@q|3IWv{>W{a55a(`8YFGm59S3zusEL+#1uJDawx0!|;Gseg#h ziXk}jaBYCBD{Y6+Yqc1r?~Z7JmXP zr6}Rozv~K%)d@i1s4>llH9Y!4R&*ddWxa&}hg-zI7aa5%F9%okM&y3nc0LHU6=mCP zgT&+=_={Lgnd?IkdyHuJ>8BtH@DDIjBYC#bvc|t(+cVDfR{=sJ+7{?tn4E`bMynt( z&_bJc5W50v{nFzV6{?A0-zp;En?3i`CWpd!8T_8>6Z<*pyrAz zxu~7ZCNxs1t$-Nckr3d$)UdFmVmX)&u5X|c-;3OjMHrH20YziNgNmZeiwgc?193z7 zLciU7Z{D=oLgT+!p9TMDkkG><O(7yQX`j?#}gC~3jG^FHehKDbthA)hchq+SshDX&^o~~xP!QOSxi%j2KC zNwX9@F-Tti_uzTwjhZ(;ZX3DLm@S0GXTkJBJdwk!-n{7xr@=WM z!7GlK-rz+P(y~z_!;6%Nu>1-LHJaPHjXXR0<`N*(`qLmw0zW9g2pAr=WOJ^>RJ6oB z)#kiA=+-MEa!T`k9|(vpEl^k)%@@xEK4B^A-alNXdeNnkTj=X2kfHt4g~G*RRzH8W z(+n61pNf;9knyQw)bTJ#GgTd)tKvj535U=zp3^-UU_DQ+U&E1lT-Us$uy9CETBeNv z%$JQr9^4pTMWzL9%ZG#KkW*MB>+1i*;!ItvbCNt9dm(=HNV{&u+RBf|6WML!s|9&vfdRs48CBklKni|Au5RTwS!R2{&q<@u?s?BPhxVsmW z?%#2|2@U=B`_QvX+e1=T%YrT@eLhj~m7gx0aemkGgpNPn`D9Aepb_&X4ygR;F9iK% zKLAw)54ca}nGvAdJS zg#LVKnz&{ppHlPc^b@}u4~U~aS?y`Tcp+0amAvugK0m8?QaR^92oL9c%)6w=*_M}5 zP2E#eTlEZ2Ye@we-8AX;ufNuk|6aR5!{yeTKtg+h>&CMbyILKxKyBYck*Ilk&UdehGS3Vtk0a3NHuF^E&m$+0d5$0_6mXw^b&?^#c3VachyKhDvG@;4>B zUqfDxgSBTa)7nxJaXUdtzcN{5<`74qY|Eiw#9PxFmizT2&^wG3_lW*^^S6S%e^}JF z(i=Y>*!_78gi)8=mR}+tIc#fnQfJC)vQp3v)-;)RKxd%=doE%bM~@#iCqYIlYJ(qH zKh%dA8w*O8>8fA}<#*|YBUO?b_6{5+za4#&sL1@$F%WZ&eyr3S@1_Me-u6w(Z4*q? znP39mXU0$0+{$$^%nW{(!+s=UEe6el@MC)%B2}}0R6I7)ckcGrKTI|efBR#^IGG|8 zSU@#+olx0P`Zvn=!W5}J3w9xVXE#Uq(b?cnR#~F;8O>CerXPRy+dgXZicaP4d>_bg#o=63W=`j<{#x65EkX3D+3 zA?SF3wem95d9MAi8s3d>1c>c64Ldh1X1iExGy8r1pMpTw%?S%7r=L@Ljzt;Eo~S#q z3$NU%a`=1MH9VI;Df%@f$JkC7N=fIrxRRaCxhQy}8u{7^vM-J9^UZ5^fA>)8$g;0B zR6$HgXz|x|tAxwFpGDieC3Ek3Pvd?tKkgbEdJQfa41kYKYYc#Pewi;vi&a#vI~99T z$s>U}5eoU%DtrfT%kVv}gy=VY6cL=mBPR;Nc|24G&D=IltS7H^&Hp_SLylWG^%!{9 zEJ$L#o~VFtBGW1~X^CgW3bdb!LPi0mW)uv~dGm=$-7@;=5X3n8^=6&#?S-Jt<;(gzID z^hjN^5pC4z-E{1n1FiB8B)5di8UZi=yXeTkaO3iyCQV?m7SYzN)qIz{PXtJ#R2w4& z#U%_gAl6{j2TSGO9U7uF>L!{+ipGfGGGEG0*ZG0B^uP0vkaGtGg}6{D*qQm+uLzHI zTNSK!PlJhtAQXX<2vt0$Y{uv4QHun0TAcDFb&HlLeH%#GX@enSKQR$Wu-0f^%mj%| z?$k&)T+D85_jipY3ESkh(%@6STAqDD^=ZAdX9s@<0w<~KZC#LRM?ybA1}7XUC)KY# zG7lgoP8ED{Hxc>>(iUb zi!v8+l{V4PVoWs9QTm}d^F`~(9{U?&cGs1P(O(y7>Z3fIu1g^EC$VPW-r*MtQ&{x! z8?h2o^!uPfz@Wn9W_gc>iaX19Sq|^~DL;wzecXN!W@0`!0|=NqUkJ?qvS0KXYM6SI zEBKy?%C5c0*LI&HNCKHJB$1qNC}^(ZAXj?RP%5n>9tEHO>Y10V;tXuNOwB_U>FbMt z_9i1mZ`)d0%05@NfK_o9A2l?Co58)5C)SkFqqZ=#)O;(RH;*;VXhr2Qi!#p7qicWe zoPY5n?)%!XhVlxIL(E_Eq#uGcUffJ6xqE>be7INqvp14E3>tiqN5OcT*-DN_7_M=V z2&Kr$BaQAGo<%x2PnVbGvYribBwB)^m!#Tlj~+c-9@stBe3OVnk?A%N*LjU49AXB< zuQF1#ublA*~Z;ecZ=}~_ivGVJiYT+FCI5VvB@ZWBay9UEy zI$#y;BCS%;eB*@$f74g+FE_h!ez3CKZ#&!!+6Mu-qIW%z-9|cjb367pxUM?CFQ2xf z9V4fma(OBmJS~~Q{Qr8MgiupT83U%#X)@dR`={VZ(VUA5$?}sRD0iAbWmo@4_6S+Y zhMJ(&q+N&gsz|u@_~cL5fv;(U)8d00n?Nk}qT2NUB;^0F^$xU9T4KY^njtKC{ zPVT?T)4=oVFqlX0?_E!~w6EI1DSQe}0C6E5P^*YhS<1TDc4EOaTLX2vexiqd+Xd@$ zL;bt6eNRPZpvQ8-u$hB2ZUtC*6h-yPWOTAq-h4ofn8dBml3FN8xbZqRUH`}zr1q)< zwHfXlDzxsM;`LiO{KFh|v$gLa9mN!@BDd%mdz8&+rl7_MB$0n%QI_;;8HUJ(}4RjQ;EcT8>h7o5`*1ekg{cDa?FBVL6aDHqqFN zBYiaA-Z_8FCF;L@&rKnWndK8LByze=8=hK+8!fBKJ=Ekp3k zf9w=I!>??>^#4YrN8jg=yB1&Uq3>9co&5aHMmi0e8N2Q+`R! zemZD{v9)`(Y!Z9FN)#EH_ZC@uD%x;c&H7DOM0R&;!l($Fi(iLj>mY-mhc>g9|K3_;mo|2XXcHw3;lm%|cT+Tr<#OO+A4eQvHi^VsI9c*eOY%oCY^cbO=k6iDgD2=PUgk z3!iy$T0LQWdL;bxN_N$LsBXqR;J?M;AVS0FB6Ze9y!`>%P@%Wjc_g-|x9a}?XmAJ9 z!}7({CM1AEDA~gqI=%P@5MXY@C|SX+MeDy3f9#3P|UOg&-IaXeNa#zKI(pQ zN1uHNr2e*7f?AwKEvH7n1$7Hkf!o~wr4+FT*CR^LrphgvU#Ie&HQ?e~{^x-xBGkS% z5PsWE!G@{HNqzKjEjTz`!(*Zco0*(`=V@NLi^AP}GWJsYs?voO=DvanJ`hiXR3?8qp)*AHdw4e=7|SyPg8?&OnDRpfu(> ze}L{YfP;5XLGs%opS9`^8mLLsvpVbmR)G)N>*31!jwgqP^z{qqqSNX)5=j4fy#FzK z4`%>+7k`V5s(+u~u#d{le;AwIQUs9+5zU zVck1~|4FL0iIXH}f1|uH9s@x|*Oz$Zpk@cu)Ozg6Jr{{qm7L+%7b1Mk<UhLuFWv+05StA+g^{uh?TUcF*$eAtAua%d4X~P6y zBdllL7BcBMjk9mEtLv4Vn@2Sw3-KVktv-rmP%xuVUBj2UwRI%Wk#3Vkk0ECz}VIFf*-<^;H8mi;+W++q?^0u*=$Bl^Ib(#xj z-b!YIJ!kNC0EK{FU8P=#rwebE{w3pAz_V&exKUG7=pTn<+eW=Ck4s##KYM_cQ`^=p z?Crnx8-S=*Y!t6}!e|H-=2bXdD*+oGg&daTU4uj&#<(xQ~LP`<$6Z8L3 zbSC~#y=@rJmdX#=casohOGOc;k|hd}teHwe_AO*NA;~VgETa%AWXTrBzGRo|+4r%` z5N5_W&wJiKU_R%}oHNh!+}C~G-)nF`c{^(zs9b&OJKLdnGWrk2TzpZ|}3&~2vOL$6fFvz)RmU3mbusj<>yf6r3E(E)gnUzzFR zGYf6&lJYUf7GnfRdCNnex{x!)i2m0Z6%(Yk+UPO7?{wv)t+d?-j^~bxW@15s6e?6y zf1iPfIJ;Ym zpoQ{`Ku+PF{v?Rxqfe$gHWd$I)wF9c`9#ip@Q`JRVbTW&f-)|5QA>WYKC- z@%>vl`-X9+Ql{`|YlaVlUtYDszYE+|ovi86ZBL3z@ce79RnROFypGmg+jaV3`wThp+=gTes@pMTl6O&k&iLe+j z8-Bo_8q>Cj{hPfa))9phzeK#XG4pRO%qj1drgd(5uDzoQVs3A`Nnb3c)n60$?4kcT zprHAdY2Z}!S@fi~)HVOqW6xh#%30B}aD_B%EqIUKkcCZH`KsnRn80S~?sihk5VQG3 z9of!1?&Gl`mU4j);CvY?XmB-jpbG2AN%h!@x-Z2iJo4TJX%TObT?V%KxHBvh*j3BC z>7J}Zl?fhwT7Zg3(_?HHeWB2u4izB zczb(CWkgtDb?{qW@gI68-6pY`ez{NZ(Q#LG4boM&^GFPqRxbQcwb116_1%&|HdiN# z3-8ON8&bHv(>J{|M&$fos zt}bErP%Za{FhUB0UfmOqWjrsgBWBgAO6%goH^V&(&$!9nPR|tU@d!z5a(3nmU3ktj z_h<+5K{2A9u~9F3ZBhCus1I*r<20le?S4a4191750K$NI0FD?bI3jC-Kf+D&VE6N2 z%ZbB}zeeIt-jjV07BH64W9!=>DxuAzw_?wKLEnYM24Cj9^do!vF{uddKGwpjbnnQ9 z`Rs*N*FnTu;CjzRYL3`U=>C9xn7|BsdFoTJHLa7RpBh#?QN9cEkHF~t=kM&p?%cX~ z($w>+o8>&)nn^1=*8}z$L7qKa@QVdVoU!DOdW-SO--sOd&RL9GK6)nuIVrxd$E`x~ zmyHe*V7f=ZOD|aZ1uas)?`$LS0+(~ZXE3sB$Z&S=%*4lN*%Jof(NmE<)E7Xy3&t}e z^>?+oQg_TLG!>0v75v~+EHeQCXn(##l>GaUyMvnR%Lqf+fOlK@n4jtuUUhng*zu1} z54O_ZCHM}CK9`m3_yQDUv;SfF=Y8Mqp#P!rIFyGUL>CC!&Uu-?|UJ%z+SRkQ^_b>d>S%zj(7p;4kdM&&w-2kBJRIe;}>P2w6b$; z-AX(#4q>Nxh1_32iTzT*{eHvs^mD?4p0)3u)Mi|5uIdP8EV@G3!3kgFU{z+BqHq+p zDz;`y_qAf~+6`q=Ng;uGeJ}9tC>ZJy-p^w)V@MRLt7ZR?nI`|cu5x4Olujb|%f(RmuDFIR%E{+z1S$JnJS?-e3sSLJ|Dedn zPrh|n_mM^v`4cuj3;_uQFB-e-gB)Exxs;WZ{=>EV{{|0_`Sj|Q3LMXmvP76IiO~u$ z-Bc7M8c9lVpfY*zSxX>PGg0J)*Qdx)f9~kdoI=zF9e^C(&GL>5XP@V#mbcw%yuAM= z!VD~w!rQ0i8NZR^#=laqNmrT@Tia%h&8K~^0c?}i$=>-h zGUe_&{dK~3`up&Zz!M)*5a4|70k*vN)+YEUJlIJP_cnh*hBOvv!2~Zo-?(PT$ zI>sN)W61|)IQ~N(QvO0HqM{?Is&9ajNdokax8f`TJBy?OFSO$5QetAL`EH7&Z7;PF z-(}>5W`tAnSSipfq+o3`tGq@2^3$jE;!@iEcha%vwx3iofzK3|>)?`*0H8JVF|3ae z;@NvQ3dw8p(0Ag@p7TU=mONGa6jLL|k+Vb}(1&wNe4ObxAZ9|xK3#uNav}3vXKEGR z&z*io`^3(CnwNNQiX0)1lm z#!4gfaHmjeua^F3?FcL$3phdvj0k|S`8OL$aJuJd4(Y+qXul(b{TLNF;{fDT_&~RB zwBYTov#rJ;MZUo53hInjH4(M@M~1PyNca@?pN}bBso{gZD{onE0R=bPSq32WXE&Oq z2np`W1U+hVg`Z1rU`Ia#r~lR@dV6iI4xb;9I7pzNa^U__O%G$Se7`S&#I6Qk;e&C(hPLsZH7y!QPoir*djvBgDZEnY&`pF%T{%AmcGDGg}r0`g#OW%+ceP2>R|ktbM{B)PtF2ll=c0J zm9>VM+_Vn*ipdVc`|G3X{3a?G%dXd)S0CPOHFb|aOW4`GJBQ-MLznA|I}~0FL_^^k z%oz$X^D}w97XwRxhQT9_Yg#YoaQ4Uksd-Fq5h#|Lf-J2SCg)BIvp5L zlHh|Vt{<^@hU-8upD-Bs{A3YkgMFA(w~!mL;yC8ull}%zxychRXsz^vh#|FjvUaR5 z`o9-Y^za|y7{?yBIO-3|F$~K6D!&C=RL-nJG{_LQR_rKchISVjybbIsm~;vnn-lORaH-`DoJIbNx*54}NtnIWh4jnyc7lIW%q&_VEhlcv%q`=ef8bM44ZNu5a?-fhX(eUO&~O+0-@zHN6iidEWMFAAJ34N!n&; z&CsdOYes+g0<1&EfL`d{hhr=h%wrl>N`kh`yZV`YyGxy=62fl+eN+LV<$p_ zJX3C)Ib8n_Jo76AHO@gNd-*jBULZi^M`D}>dyoZSdIzv7AjGhgV96$I59Gwo#yR?S z$=}9uMshUtOc>YJryM#JuuNm&(Z2>EuKT z`mOf5ck%Mw?Ml2v+RBSCAr>D|B~QoUaFit)^Jy5t@)E7o4DlpfdU4zy4l53_Z#d2^zI6h z?`y3fQ;WD-0`6Ybxu9UqjaLd(+jo-h@4YQ0H`5GfJjO@Q9)`#yu0R}McFkQnSELm7 z*30vKzOkEly^leup6k$?%2PJNDcMayF~P(p3MQhL+U6V%*xfETjZDDk^}&5`d;Q;X zZFv!3cq3-Nht67Vi7r zRcwGq<5F0DSHfByxSe=5g?rp~_orC}ZCGwgc^atmaDht%xgjj@qFQXh2sWB;O0<}p z`g<20)cfva-(NQ?dgK;qLH7~*SM@2x z&Uifi2bPc7#$}r7ED`C8fBOM<_*TO^-bci3g5;aYL9!sQ3$o_>7XxLF+&Fga+S#5^ z4#S=UF0du~ryEA?l*_(5X5)+CwwF(7jIcDsESVQA?#8zoJwe%8GS1-y1?lgcXq5>E zySP?hKmN?ABN({fzkQ>6jl?)NvrhYW>hM2ccIm6rF-`_nHc2NRG!g*xY}oeuJ?i0y zM<;;}sVc)s^R*_Hq;GF{r8O9G%~u&Ur2Qd5wQhoxIRB`=fmE6xx2<64WVsZ~dMMep zJa{XwV6D`Jiazx^2vXl|gi63tGl*aK@Olwke5<`x;r_FMq#Mr!O95|^H_}@Yi<#J4 zd*@z1hr#&62btU8yiSDK>?_hK#o{V|gg)0@>ic;*aCOZ8)aooG`9T&|Te)Y9-Iqx){unv{Vym6_lP01Hsr zgK8HNk0E?F`tZVVoFSs}jIO^YDW4609Ty75)v8PouECm@eWzDs*BrlQG6kI=Jj~3a zLWWtFrwxJ8)Z-D5T+`)ePDH(Tc|B|eEGl1_gWXn|uFouu{2l9e^h}K+=+F|+FilXW zrqVMq61e0aMZpf-$0KtbCk3pC;Jbzty!m02`;M{QAvAxG#|@kO2fMKFoCW|3C@w!} z@?PLC&n&3c;}c}|EWby+H=oHJ82-5L>qUw;SQS1QG<@vPgLwTP&-s8H*8$07h93|y z&;9tL$uaHeu_mb?P4#4(7D8R}{*heA51I>t!htd;2NJ@KFKcUZ#K$L&Sc#fssKnJwko@0^Lz(*EtFeU}IKF)Qx%DW;<2gYZdm+ zCV@*_pAYe{?wj5?^c^xg8&ax>-XAv*Q7t!1Z~V|+^A~~-(~0!l6(;M z(Zq~PeX58}@-Rr@Oy(HwT~Bkby-G9s@bd0G?K2x1etA=E)t~;mGiE_3>1BggRwz7k z7?DI_)M#(-KPy39C6p@bip93Na@KFING9ju>U5)9jx2oepQ4hO?{B2G+(tsadlBSH zeI=vOiN}-J>7w|GSnn5+Vvp@}5a{9(mB$!oLW zCi0jhq1IV3K)_ngZF5}QNH=&t%jw&Xx)Ed0$s$L>?2c;F-XD2JfL=xmg_}iuVi^@R z72Qu7LDd*^jm9o>_}M?1gO+@rbNrZ{VNc`qw!0AEN)-Xv)Ll6`-qf2NIL0(i@Rtnu zc!nceL7J$!hfhkpoLN;#wXa#jY~193pTlXU7oi4o8x%E+)u!}8`s-gnrLmt}(rNoB znfrzE!szPbZ@$6z8r+Kus3_tM|A9K>mWw5Qe)iO4E}hPzVs?yUMpTSQ#kuaW*`Z+5 z-{|$!-)Dp-N*3`1kP+560hsm+RMi&2K&F(9O%*j6{6H3x>#$$CHwl;di}L4l7a7-9 zbky6$Z~^?R!(uceC@2fr?wgBT0NsLnkVK29oFY`5x1CUV26#nnu9~K3*r$Hcm9HQ` z?b}I+@PMd-aS|}oDE&dMA#?S^2Q09bf445{7c;Gz$W-qW);~PjMDuS>k$|F2Gb{>^ zMv2CDV7+Is1nB9Lrs+^{J@g73#*s}q#x|21f}26!f+PVrvgOh;dKQvyKQ*sa-0oHO zYL%-tAoCSDKEILJP%!HyP2dE6)l@E6|J)VoVar&gbPH!A73=0ilWbjcMl{UnNUnr5 z)B0TCG%S*>amT}{1)49k7I}3o|NHM2bMIs3NMxb`-t7(+amq##uG9{%a({BAn!teV z=;$QKAIZsLwkf8{wH=Rv{4C~GNNCUOJ+xgzJ_{4P?L?rz>MiY4AMdBrPeO~HU&?b1 zvTkCeqCBY8oPFZrLy5;3$5NSr|FhUYPPl}CaM&_thIE#oz3w|+YNvhbe^F6nz<`7Y zhLQ`X>7}SMUYW(xd+pqZA;5lpoNjvu>O4vW%q@I}<{Zv#xKZrmDd{mfD&54QxaAtFLL%a%V6v@y$emHlFM3x2ohU06oe} zq@RSF1zZ62#i0!9(}yj}9*>?U>Tl^q^;MWySv)CLCIjB|Q=fKm3urg(DLoS7Ip9s@ z050XmLhrs^l`RGF06T}<#XYEbl%J1)U6AzC2*b!NGhjl!yf55L>vu!;^odBjvB;bM zjE^t`;CzH77S%reyj&^;W(Yufr{mhSSJVdByCI6?c=jCNp_yj&2?w-{C}dC3y@gMx z8U|WTJfzV}6_40IUMnVQeU%QFpNW8aHKdjYX zp)S25vxUhQN-xDgt-?w-yx2~i$6C*$@lfR2x%Agc(v#~*Hy*C9)XW7-HapW3;(nf}QNkBsBMMAhNd3gru-L9GMY z5^wFT^d`)d@c7|tf@9UV{)1enTjVBXcR2BfQy~_GQcZ{fB`rU5mI$YE5 zFSLC;l(0AKve?~**ktmuN-P1tg=Cfg)FCiPZ?raOe zSgq*jd2AwA$R(L}hJ8fn+UkiGfWaxfKl447X0L)6bd4$B~l1srOF zs|HoGDBNEVGKY$ExekAwisybg?%QQaIUr-yrhx!eUm0@%KBy4*Yrlc*!}>ynKVV$; zh0`QR{V^NQW**gg3jN{s;oUE4dY$`tgRcO`P31B9LBSonwz7sQ1T={X{cDH!k1&QW zZuDtdk#KJ<-+U`cYUs}z>G5{=gH3L&_29C3B`>S6R)&sd&RI6ET~-=Kt9w}qSO<$P z*SAcnVL-YpstA;?H#ImbBU3h6P&9<$^UNcD*D3=)VIvP1z?kA)xzT>9^^* zc2Fc-SIqdMq(stt_9XaCPQioa3fK3^^5Gu&SsAS7_0#c0A%`qLR=$d%K zwihY9chh%(^XE6NA4@$cVcpg34@$te)AVvM)IQpDbF+NpP6{=Hx9@PN{d-Tz_8eNm zaUS)6ZmDLJG@9yS4kG`6M~vO3`b11Y`J2Id*ab-}px~xTmgHYJ6ppWn!wLq!l1wf< zbYEnm=G3krt-|Roa4=c~$6CJSmSqNJexfTl|H|zTcw1)@BLSHA&9s1W`dLyqg@k2Vru`w$o9Smn{Kf)D2Qc;4_Q8Wt*C-YiBv1P=BIz^n3(>`hGeow(g+g07xWD zHC*r_G+1d}Vo`fKo{mT$R<_m+AD^V3W{ExOG14c1 zX&BcgA}35)j_y9TX)>((KKVeWCnTcYD#TQP-(v*)9nYd;g6)NWH3TKEM0}E2P@?=4 zI@#-Lc{7_vX(v49D83cy4rKrodc?s0JfH>bLVjjc0*D`~*1u2ezb!gy$+F#pmKA^O z3!nF`dG{9&7GlE>^V-Ao_5W#Yk$(y7K{6-HVJ%F2eVoyR$^xju0|~8R5C!>+F~uJ2 z?&tJ_QGD}45COV^We{4ak3gO>$eI4#+u_Oum+s+2RX%j`hL~Fyfg|4^1O|cf9rXFn zS?b+lsXCivV1S9F;Q~z0Q@$6IpRe{+xp76=tj9r9`PtKliRA6-M7d zkK@UV#zkwhpM;8C+QgJMkvv?k09XE^8>Ow3p0-b8S>b^^Tgz%+~#Vxf-KjACgF>0vz509zicYX zJ=2_?3R(O<_n}7Yx`lzF>U&X1l=9nWhXK3je7T(7vlBb1hl^2t=l=5%xc0$+IOqtq@yNu+H>Y9I>e#dX zwBokx(cgV@{pP;M;C=swzIAjqIlRrMd98L9*LC7nS-!1X)U&(y@3osnClSUkpBD4f zv3ek$?ETG~>bID@zyQ->rj&Soc7Nk_9*A!V1|w_=?LlU7ZHIT$s{}6KT5vpPGg47+fdjO7-R-Ce=T*{9n^dRvrA zI2#@3GKWtbNYw{60nzSS!HyJ(wQ1WX^vu+~XF1QG-i3DIG=6xHgj0*kua8?f^Xulc zT3vEL8$e6o(yrz}U2C(RmZQf}J5byG+R*kp()91t)lz}d^fO0pv(c!PB%oxO`0~1MYjPf*n3Y@9iUV5g!BrNV{g!J+A zeXR|)mk4ePBNv&lIN-d*$fL1`3S!r&#r*12p{4`)&gQgkU(Ws3WerXloidrc#wDyEqi|*W91}@VJVj9oy zT30t*sM(>mLiK?HEADmS;E|WyVFJ))*Fj@?>j+@AnToo=-6dvQ9_#q43bz3L{P^G( z$4|Aad%y1YP87I_@F43XIs;K6EqX~S3nyXKWRoxlc{+QTWJ7+|!MakWf4Ld{MXL1VTiSP?-qQl^P2wASy?cC)!W^R#9Mo#*KOX@5tHM>-SP-zLJuKW3*>&-1U6 zT&Q4C(k~aY^Zcm)ybhjWTWDV%(T-SaMX8Ma-|7;YAEDLqjk^?MMQ#6BQt1J{bk6;; zO^ok^(#t=xEP~zJ>(HsMkNPkB>Xd{ie4pTH`mzS?qcUEU!fW_xgsymv%mBm(;*IekJu2m6IG4}MswV3CfBWzt&| zY=zBT_JAo!_`(3j*B^rGDlVIZ?megty}7{#uwI zQG&$tt4VEGii#CcYr!E?#lmK#SSlwly&qV*dnMm3s(k+lHU(1zAUv`1kq4GD|6F{u zejIaKks=No`FNFfZob;}Z^1b{>vu3OOj4qk6z_}xiq5l;v+J`lFRHDx3X2d);=UV8 zVh#VYGj+NT^IchKKB_!VYe)&>NIH1w1if*!T=41gdawQh{rL0aPPM?G>F2stbu6r4 zK;1GXEDu?`>Sh*V;?l6n3HwhjufO(X?ZZo9cgV`q6aS=T;K{LUH29M|#>m%aGqZjI`v51-Uv zOmX`PJW8FdH5v{CG(C>`U$T&N_lW397}t|*Mnu?Ebqg7-Q9S3ZO}KjS%Q=0=8N(d8b#y^gnc!@Bb2!+LAYO#fTI@%z22UL`6MH~3pJ=}c1efaf<# zU>_K7mO$2zub`9^*?x(E{>bAK1BflnOu*1 z16*`@8)TWILRsHj#1#Kdd*NTIK){rDR4}IQL0qaMjSMTswrbctoOD_G`rjDJryUS= zz60Y6gUeKhbjg}oDDq_T2(iENjo#<8aLNLD&}@Q>YMnl|d~*KZ(;7*(Hc)F>*+TJ3|lO)O$|&(cFLg5(OB%=TN2 z;#vwQheD;3=RSS|;y2e7$MCICu27lm=KGgzULvor@;${EL=F(-{(xIgtbyIVVLSyD zR|9ZGKwWZO{%^+gMe5~avh`I8%K@OopNE})391AuJFm($P!F#Vww2o)`vUt%f$ju( z6L~lb0fw^iDvsp4u3uzVRC_x1@;ek?iON)%-`2X0@LAhlkD5iFzVXVzM#Libx6i)0 z8MgJt9?kR|c=5SI?=vGJ>WM1d@v@iT2v3MLB~z}FajmwR&lh+cuJ-u!fg4@@#-m;7 z3Mq7dpQu7F(?3u{z&>@Rjj`^ibOijz^miX=e#p&GZem zHXagte$=&S@(A677$FZK3pKwLpEB56rp@c9p~m4<=pPZk-aZel8d@pEzt?Iom=1K! zKYc9VYUT-6rUg-Wv8x343j}O!W^qP;U93f9Tug%{?WT-a`VY0maNf@?pZi~1ul}Wg zw@_ytI6&Hn9OmYOMH>C!kic3DfCv@oU*377wT)zAlV<*m6T$5+1$kBbSft(cpCKx+ z4LU~fTrzMUcixO%QfTo_+x;1o!1@7ci6tkLd6K{()-#pu$hPOB8f4c=3i=Q~~{x8bXWd z@>u>hq|dG--gXIYDS89Z7)NI-;}KWmzX>91R_bCxBUFPN`wpH_Ic$qa+lLSkgKe{! zW86d;VbS)in&46 z;H7t|n(ptWu?RUR=d|7C3+&X--Vjf2zo4SK^8XjA%z~Mz3r6rZspG$rU~r4y@n*lf zA@jR>HN})nEzwE@n@mlJPkSo}j>y=EuHo(N4dAE8Rs-|W%a1D0jZ(18E_!FAV|wpL zX>Po|8nX!c@sN)&;bjtrPz$4c_^BxBLmiG;A=q}pQyiKO^g#Vm#be^b(92*#mJGH> zz)3rI`fw;5JdM2a#LKm%nXQG2sd=#jEDnI~D6$qQa8ld0LHSK##hLGtWwYp=-@6pF zPTk$G6O7tpMlB)|2?JMk$!x>#9pXXv3S@k#F)y9>a^(W{Z8Z_scCG5NZz!T-r~1%e z0Oe^tJkg;00Mh0YtQWrFV)C9u3vRt&KA{hTH6l`DK%nlvq13VaS_@~T<2C4Q;;@DG z#4`hwdrO7PDiw)wtEJLstJzYQNbcbVkr}31E?tMU0V2G9;UnS)a(}CZ?@B*3Ww!AO z?8+)BYUS!}wf~hv&n*xWS7OAqJ|Y`7)iFgBtX_$~)CRYy8SHOR=-& z431nR?^Zr@uati~T&6v@*jq{nHf0|(lI;z7+WT^oSKY#Y&j4M0V)8+1;6BjL^2@EQ?B#Sx zJx713>v>YFT)U9xwOR}rWw^}P=QXC&?7dtv#>Zypvu5)?(}Q_qtl( zx7`OC&m4E_QJL0WONhwbkJYs-pZ+f3k_z;X$2rh6o<0U9;)u`=eS*j}BU~Fuj&-^~ z;Zb$%i+OPRmcR_>lp}RU<}V3Sc3pXYk<14~wMN8?B`ryjOUJ+eSo~UT{~Gy_XS5N1 z^O}eE3Us&e$qJNmaLou0J#!*OfL)Ws07-iis?U^wz|)?PH{Fkd>wlcL#P+NqHAhh0 z%DZ1+B6*uHj_+zF5=8x8bKv8h7D&uK;qFHn@%FXg(LlETN!hZ8QDkOmX;*tSG3s@% zx>-m&>E_FZHZX^A=g<#aT8n3rs|c0?DF!Qc_u!eGKQ?iR&uj@2)RN6})1AJcX zFMGJ80$Q*>w+8OnA_Q1juMJ&Tu0gDE0MiEk1B`GDxe+&SLPZas(IVYzsUplUoS%b! zB6&4_G-m%yhJJ)zy-;Ox;ot7ce|AMu?|RNeD#exj0`r1tzaMxNydfY0;e)||4Bxs& zs5!HsAm;2GN38eBs!tkU3{5$N=e|C-BtfI(8ALB@D&LZ~ z-szSg0crsWY-HDG`(zU>z;~FHI;z+OQYbU7*DskgLFZ^04;LXzJm_)JJ?alp3%yf* zgj|{ww(!Q7nDK6JdSzoWN^2I?6Xdcmv+HqlUmA77BAnq79*RF;+=DtmJ7_(YtPAvx z^hua?AT`n%wFwUm&sYKE2zCD8)r)$`-$a1@JTpUWT7dbK%#MplnjUSRK^zpWr%QRK z@PO^ce~LwS-*^*eGThx#PB+%#k#^idW)?PQtW9SE(&! zZZb!v`}Z>Zh%B&DGwI4oZc%UE%zaFEN>un-zdb2DN@KgDaL4~7bvh1y3TCbieb7|} ztDk+_i6zXy>q0}vE>wKg+>ZtCEUNRJKsuk@yt|B^@h=ps>0*g_&0*$NFiBxM*;!eb!cOxlSX zTKRd7f@DfzafU_!u2(sXNAkGNT}44YNe?0Y+j(^WIa-A71J60A3r+J9*M8&4?2vXS zP@<5swe@ByH7Ac;R2HD7V@b2S6rAa)6?DR=t8(lLDKuoM!5`ICRO3BYi*JLKSnQA<9k{;v}A%as{ z?3KEKyI3Zi0Ula`S{pWowzulg%KUFdkd)j%NM-+d&}7^figz@TX# z7^^4z7+dAI5a46uTe$K({qT|8TNF(f5JWGiGQ6D8f7euT;g1(K@>EsnJVdX`Ai~OV zlMKU9lb5`G037zVkTJ~&jiK$KfM&3&_F`ME$*1K0OdF*5jg+4%K=PikZW+Wh;}l^q zNpfki{W=urR)Zy<22OFar`jQo`WTbx4?W%R%!Qluzs!pvpg})sCrjcC*yMQV|1CJIQ?jz6fmkL)@n{eN|n1L}d0_1CLs}NB3y2`L_Iz|Kve!P}1Yd#g-)u^bRo!V5o(H>bSgn#2|r4LxN=JfGk0XucXGZMevAkQ9eXc3u+8R-^48#~=&S~ai8ArzeF?IIxa#vPi{J;yf~ zumU>HPtUlJQgDqR_l-+dr3J0KO^fYec{Rf8c9db_9#ikE;G!r}e@|#~0AmJ(fRyf9 zs?ll@dxfWNkdZNtb@1sul+G`tPq1J_D`p53U`_J0EwBlGuXoEb{((k?}$$^r7JDK>wT91G)iW|M9V=DSSei z7UPod`aOPVV!-`gQ7Oz)#Hxem(=pTslgg;_BH4A9Y2!kN`M`!MYz2KqdKfiDH zHvY>V!zgzfZ;Mx@1l2;n0|bj+6fqQ<<{CcPO!Mf~oW@tXA)%;Cx>z+c?!Kp?CCjD? zG|FDpY*%>Z*%C_&-&JwmpqG%_QU#I!{^an^n46xK3+tU8AfvzAUeLOGQs>sE+TxDb zTz_*$dP_dgUX@jLel5bnIw0;+tU-8?P=^lHhzNQ~-i%)j#r!fXL?Hhgk*Tv#`s-N; z5_)o0sM?hFnw%}Sk)uX7t4r4Ajxhh79>;lr53|&xb^d2O-FuhrGzgoU(m6ZM^pN_s z?|p@*cXH(Z%9HIA67x{B#~`+urb{@x6R-L>@g$8BeW?-&! zlFQ2Y-T0^H9=Csp&uViiJ)fT$Gkhg47H-_O2uV}rx_~S7x@-oh7rq!6E+RzJ(05}2 zx7b#ml2@zY{oM!XvwCXsnE$Q=CSb&kFLI|+5uu%GyRwK zei)uLp6}N`9q4eQ+wXe#GtFlP7R@hzJk_CXOahNSzyI0hY}MOX86h@RwTrgB9?+;# zUMKpCpueRJmpGTX-=C%G&)r&UlF6jbFh|GOZGG;()q){o3Bx-h>gPKmPRs#(cMCDg z_`7XpYJ&DxF2GOfXv8T)dqEZHId7ohJs?3vS;p4MwgS%6+WW1ukf>Ps_0M_pGoR{n z?=MntNdNEA!_oO&-LuvvFyp&$Nxz-DT-3-p=wx;~$fCP-Y8-McBckKM+!)*b34M|g ztkr}*0oa4sER$=Flz>GtHS4b5wT;7{$H?u#j@qwxoB2u1kzU!Kqg1imVMV>ubC4gO z#yiU7BGfTJ2iWaV`eaOQ9;dt4w}=9011h4HAP-TbBg=!ItQ1nW19d=r)1LpSeJ^cN zKTEl^A%E^xrwkVm3}3DL+Lk9wz_fz(t{fIL8BM@aV_WatOB9S>mMcoA)i_PWNmH@m zi9UvgPqf3)7YqJs*qAnhOz^kUmMRwoPPb6|Nm?uCy~4zw3sQMtTkded)u3Ngxp=w= zh6?@VRN7v&LePqWzFWe@J`KtIa`!vCg)}Pw)yo2hnib%)BMqM)k~t#vWqO}tr8#YF zzEijrE<2q3gmqxN&L`t=)SuNO#$_G0^QQDm1Y-KO=fQS_CA77C^yzLCUP#rR{Aowp zrnC1L!hg1fF{l;BIvi z*!=QiNNMz~(K6CSX)!)d%f}|e58otdwf6=}Zgnt#qWevz9XP`yxi4Ud z2;1-nI*qCjnWZx&B-}7y(N`%1D3|)9^gWyerOiy0hX9Cx-9t8%wSd5WmmG9H;bl@5=|D)i43E`#GLj zvHvB1`8_%ZN-9J=9{(%XJ9&RiCF6V?EuY|+zmGM8#N_t}lh-~BtC7$i)KjmYoXcAxwDS+mI{pR;7D%N)=ucX?6a#OiaoXlSYFY6pp1Hd&P*>i`XT%ISDH_#>VFxXqd!~? zrv3CT&NJJEu{zG+7qLXdVH)Jqzy4HpVe-8D0)&6>8@K+%zWlMf)>zOnajiGBmloP) z*uf|TB?VS&r46=}@;=Pr2XvUET^At#P7u68l^Y`ismM!PJXDvJhj70KKYJqolHmKz zXuxGHJai#A;{u{j0nGTvJ5t{)FwgUu&OWaY`}MjGKS)GGec=w?_HL)sLo$DLpHn{b z`lwz#0OqF@sS=(>kC?RSDsN3vW;Wlq;tt)v0yJ2(ji? zGoEd{(Pg4XEcM1k(FddBOf+AZ;3NWy!(k7qcA0|?SRwLd7=b_`(A}EbR2KqjWK5|Y z-E05vT*%pn&zit@3x3wm!od+>_@Egv(D>2;?VczKu!}=h&24H)0ky=e@O~X%5$L9Z zkiy%;ECJ1(-1p~eBI0at)$S? zRPMmqhyDmi3dsfFWFY5xa56I3d!62NdGnP&FRJ;*KMJq~WkS!S@OG0+C3@Ng&-|Qv{3E7g}vCFHix$5kyP$TMOlki-KCWD6b3o#I(xrtU3gpLFUIQ_kl{o#@{=GibBCgqqZ!k6f6gsvmZBW%3q84 zCVT^}kq1(n+%2ZW62@4L7RQERt+h^0@hr8Ws;)9l_0+MDU=qFW;$29P~tOr zz0Yo90g3_z42Ugkt${Mczq+CIS=aD%=$Hbm35B5A-YRtG9ymmBgU&SIc8?mF73Lx9 zwYGMks@v`%V2{0Z%TcgKknfSVw zT>C5~)Yr~)1B_DJT(UIbw=Ov(^fhxv&;T4x8D8{;QPPiJrr55xuk><`%Z)A71EZ_7 zF3VBNcP^4nyYZJ8!zmjsWHiRKaHzX)riTG+)JgwT4_0V;Al>?>NSz*hfLSiyRkg5MiQvNZUkf%&St4zM-%NVG7 zDZVo6g1oqbJNC{#<1PUOiL=`l%)kb1-Tk-;n3&;QfLfWX7g`7Hia`*+h@Jxx+a-KE z&-2+wD-Nm7=O>HjU&t=6A3p?Aq7%g+ek9|CsK9w;M31boBQzXgdi!S{GN6dO2T0+Y(9TW z+=YHkqRXAR&Ef42t*I$DfMqt{E?)BL=3g%7q1J6^Z80ap76ho^?ZHME0XPT3ix~aM z9sT2sXy^?nxLsaxXOn(tY;v1VG1VgW1lK!R;g%ZUew<;wi%$uyM@(z)!$-Sl?#^B9 z+^REiP|BFtF8EqsVb4y-C{{E4Cr?`b%3x=IRv5;I;|#?>IMnU6=HHLi?13`(&VqFq zO>5%UAjvQT)sh@=%GGl>fdt|p^rZY@mW)wt@*x2|vNell|0B&1gzzq>s&e4D<8c`dtqexpPvGJ;BGpx7K6#57w>Rb|+Allrk<4>OGUsM7c7tZO zK}@`Wsm6Q%nzwt7mS0Bn`*W+D(#WRuAH19Vg1^;)nZ5gQk$L--W-iXV&N=pXg1)IXFceLM$4{B$y z-WgB6vW6O9OaD0ExrT|KF7TlH&q@)B7L;__~^ z0UuA=Q}ijXJ^iN5=Vp2Iurk2=R{4XVc%1|P`C0SEUOV{0MX{j-EEKGja8b}_qM23= zsedxLJ0lmP^J)%ry}mp@^CmIh_fW<{0T#X$ZA5Y1ilK|~P8YU_N`}0joLOI{Yc+Z6 zXJq3OqcnNHbcc$#Ge^$v=_tb+aTtm82Ff4GR6y3IkpJub63gct^7O#FNZ~3+aB8on zQlCU)M+hZ*7ifC2|B1?Ii~~KI427E>FxrkPkz~dKt}PJ4in#NrKdDdRGu%3>_AXR- zb>;*vZ`_~c@G-f#+MO6dlJxssenoMtZt-U0Wqk>Y#CH|#VTks7A-K$~D=*>Zwfxs9 z!yqppM_u2o*GjXaGmu4d4x&>le3UNw2EFk!PJ$wO?`Qa9Y#YD+?I@b_yX(fd9;^7ImKG*MS|HwM3IMqtFZXJ_(z*YS7;4^5R zXg0**ZvDMSp}(*aaCfP9b^yLeG`^7OQk+fygq0LAM`}?4BJL`t@CEFa=O9xn0_0{iYj0<@s&c7BwHo}Fh7EKvP6Hi)I zo2S1jE4$Tr_1sK!A6O%Yb^(b$Qb?1QG+EE!FHvS!|K)-Ca{+Es+#r2L7YPH%CV&TqW{-A%aH~`O(@~lkFNbcakPDLk% zGz}NYo7c*Nl9jgs25%%HR+!dgh+?T$(iB84U^#I9{c{)Iqt&4$U_}*8sU(mC@|P=e zuElFr^6V&j#Bz@?nUV24S81mN+qba;DK&ld=>~#3`P}e+utud4?RU~h_mlF1*nD00 zV^FqW`tKlQjreiN+}rA$f|6e5MRJCxfqymSNx<3I?|=VdRo^cX6H=0-c~DaKO<2VL zA1i{N46Yz_%mtgmg{QPx?HN74@eN}UC71(iI~AS+P~C79FzUVS{dlMtpyAfnOoTp# ziSuZw(jvPtV7`6o-dgh)>f|5euL1_c$b^h?WI6%LSXvM~p@yDw3e!N_-=5NpBsPJ8 znOO=i6aXOfpL=TOEtMvy`_ZJ|U^-SO4dFv%Gv2177Suqk_xhK`m|^#rh#`niwg(Q9^1L zx`jHr^LL?gsq-~|!ZAv17Ni3%gxOFT#x2|XA5()y?P3+^R|m9mb)n<=LON)l)MBjo z6QkHQ(F4WV@RDf|QY+$K;QGdCj;R-!~+5L$p6PiGT;?NQLE(=>Q>IW|$}=mwN#QEXcm?W$SO9@_e52uk#$vO2&ML z18~Ea&Q*4(HP&xPZ1>c3?X&7TEXX`P;uec-$J=8CEBX4ig!priEn)M%Ay2IY47zzIhJ2 z#HQLoD6BrueAV7g%q!!Wzm{^Lz@Wk#Z_Z~-h|fMSJ*q)WvD0Vj&S;h&FRz^PsNJ?=?~ zULE3_f(-*{>byfjAjv}`PwF6-$E>2b4awk7+qts}Z0ws3@s)x@t{FVi=zHJ%QeSvF zAR5#HUi%nI%{O3M{0O?|IQjbs^#>>vbHYzi9-uC+Dmp!I_Khaos2($C=k$E z!#opS3nT@8?$rpQRuL_I$`iQOroE1f1~oNw8-3s`$o+Ezk+~2TbOFgpxqx7o!M#^X zn5l(oWfexflWwU$P$ViV{zrG5#jxpV-4lW(tNia$EdVR8&2-;sAcPj!f*TQ@O?OTU z@GxJ%iHxvgc7ddOR>O1Y#fTCKnWsSm z{g<0yBgepE32(Xz?TugpK^2z`py>m8)^!fv@POUU`^zcNZyjU$?4Jw z(k~p~hUuirs==x5!COVhyzrw&{%b{e>5CO|xi5y{Zb z5g5A|91RwITH_(9{jvO3Te^;7@^InYKW1QUyW1A1*|Hr8HlGDZjV7~@seyvK@o+lG z%8YZ9lbfr1J@=Yh&{O62hyLhFa!|o332LUCWU&n>J&hgNT)+~3PJzjelsYRN|HqkrpPC5qlqL}tXaHa0k$ z7eho(xWuwyug^i{WG5<&mgGMbXqhh=!{PhK4@dmpt-0K!J*S3~`N{K+3h3TCTv-J# zB&s5M4qK<}k02n9oFAX5CCYRJf((cJzuvZV#Lx=_&u&PK{fFlHILMJ`s`NW&1l%_4 z0?XS_=nP}cWnN=epy&%H|jQmlVeAr z;<+=X;}?(b1}tR~`G92i-+r$C8bSb^W6y+K%X4_uYQ7Nt1BD!4ioZ;%o(2x`jQd)b ze6PlHF$$mggJ9PVFnlk`kxRyGNaH+CrRayo)LapR0P2eJi(2vbUWB|j&ycaU6)x`@ zs$rieHbXI=HImX-L<2`GV89rrZrz`@0|l09KYy=E0pH z9wTt?B^tUuaD2NrmVSzzQvKZOkCxTCd9b5#1RZT-l_p#B^G-}1;!mc{rJs-R{g|p> zHJxZ5H8jI|{tR-a{R1m^t&uJO1RW5=bled$CWIdqUgVkpHUPU14V$HarifW|enmB9$0BL)zlcFC%le3|;FU ze$Zn}@ntwpr;__f&wbCGUEk0I5t2G-^m<%ox#@=;lSr@=`}EWP{YPf9Klnoruiu)A zwbAH%<+QM+OM3O8{LzZ8riy-1+|!GzAChwqnEcCkkJf@$Je;^o;+De~N-*j-c~|jQ=J?_Rx^>nQU%tDHP?<=l z`Fln$B*k`s1Ki=P^fmp+%L*};{vHD+@L~)!Z&X0;Pk_E~xr?8_eqH7)o5bs@9Xh9v zw)8Zi0Vap>S2V9VdHIs81{-!#qhf?p{q0RZ{y0MmmeZ)JKA8QZ`|xXO{`Z(nE**ov zhVaTF<2(w>Y)=GT@m(Nv#{_qGjWGqhP7yz#@fv3kTah78ujOR=ezVj*6&ifcv-o|q z7R)-#&G>>JZ!%A~kvdp5*M)VI(zO=TAEwJt_>alq^$|S>_=jPVw)r3r7yr7r`Y?L} z_v0XsXSgTWoQpP*UW#Lru=MMbtr0?1gxQ^ssX<2GBU>gW7Ay0R0 zwBfwB=#042*Nuw7mCa`#8)IMz6keBWpe;Vi&Rjj231QI4nLgjwAGL%=7^w@Wj z3GwR$!@$@6j}Z~eL~Oq7`vlGy0-79o(zhR%-64;RO2zhxCS-ej)vhDqr!TLRcY+X2 zl8g)Mxr=kcq)mIhW&tJZq6IqfP*&*PfZ z=b^HQ{$w?MeLQvT4fmH=YR@#z%oPC>uj0$)y3WByYfma?|Cqpp_TY<4;@2{|Z-g_u z1& z5xGZ}d52moN(0wopy1D9xfwtP6$_on_$je3wwmdEI=&U&DfJhx5OYC`p&PTwEv-3F zUwMU`FQnIuqb#|xbh!36EwlI>0v2-um z^8%;Hr6G3{&-2c!_+0BzHXaE|i#7-Sa&jltE*Zm>dY_i)e};t*0=>5P$I4`aL{3Cp zahp1?e$j7)a**jZliQ1{`Tqyc_bB5!fgs%UhyA~>6-~wvj(-HPZgQo*3^{TCJRG)i z!+1UwGCTGO7Uj4lZESpdO7QGgB3Sm~PP^o9>r1iwXvet7H&QB?cRsxXumVUK-rU8C z{&JcC#WQcAUi|1UuO!pqT`R`sKSUZy>vhQC0K3A_yVe0c+@=(2inP?!hmSbROKrUZDbt z^706;d`1A{bH9p*E0#rd0j+&rai4p@4Pbq7%qc7Li(r9-p!4%T>THr%%ud(pg(*Izw;<3IGJZ{}L6$k}& z;!V>;KNw*%+pY~Pnk$A`6HRG3Ve4ASWZ|3drvCAk?aV3A$V-w&T->~~3q+p3%%&Wr z-B~|(SC;V-&124%?UwuVz*1o5`r3xL(8a*ItlZa)r$OL(Oe-E!0q2z~U( zemLWMx#UT`6t|cUOf7{|2UX;KItuZrI2Y4xOnEhDCt{+=d4CE;i7FGxgii<55jEFT26P3n!|xCAwH)dH=qLFPu07>46^GG-_h**^ zjcV5u#Wz5fM;Q&*457?$s|GNM)P#9 zpHMrjs*BW@?Y+3!pG0*^QbWY#P29Y*d3bzIosK?R8$oyN)dB9r%P| zXUDY);h$vBXigrH)YGnL^d#qv4fhU4dY~)9@V5s`X059Q#y+#)6aBz#`mwuO1>X7hwi>o^V!1ob4ruxyk%S7Tqm@D z0aLiMdL~Mg{8D8Ves+SfHxf~yq*i{CSs_wTd%-1k$D2$bqe_ zs5*iOgg+-SPZoQZ4=Ym^1K-TQd_pJ3k!Z0r9@DjMna?)JrytCDtlIrc$K}ZtTc^JN zkG}+w@IaVOKeSa`%1@e{5p1w>@@Ca=wiy>3a7ljZ5wS!Ly<9an>6yzIe)dPiL*yOJ zPDmk)13XiqxzdmR41$m#o8L5GmWW<~r@MGgW$_Y)Aa+D!*ehJ|J8E*!}G#_^Q>p z_}!P))MhpyHigs647rH^BJp4F>nF(?^dLw5&? zA9Hos7k%yZHS1{|M6D51sfIs|^1xl|_T1gJGweg+qf6QMk|5Kk{0{91>${-=n|%-* z|MTK=5=@)Uj-GU=yU0-DNtDfpO9}+quD(9()p`U zW5Y-%`+yMjr_U(bw7L`t@Uy42&#C(5MO6#;J{TOP$>1$vxZDMC@@LgK(B0*1bs=+C zlWXhDw{9-rx&!Qlube2L0jjkvwIee+qt9PqfzBbBzMhA29y5%0^+`aG6W}G86>*0v zIU?ghGmyCt2zm$`unI~KH8jMmFj!annss88;CEMD2g4nk_Rd+|y-dUE%onT{|^E6PcAqSM^43@2D7)P&p}AeVY@(5eUZqurGUEwwIcCZ zIPc$E+oC1lQQpWwy;gi6d+1YHb0SzcfUKp;UW=c#QXdo!wZW*zAM>To3fY-Xq=R;#?O{ zt;lW9UQ`m$N5lwAPI?1-J!A5bl*FGjK4R|VTq@wUdg4a4<0lm>&Y$$(TF>S zj-}_8@R=Z{h8AWx{Oh>TA&3&qj?D zs+8Mls?W+#HzIT-EV_%Un+8RS%vNLTP`T9*&k)+ow)G0BoXDH4KeYhjGB_N7X1(3YU(>N4kwZ)t{wFx zjG58xEF$eOO#5LAvnu>$gX%uh!9@zHby~&ite{)PRJ3#2uB>10c6-0_>#U)_Gy9&Z`Q!8I8c^8IQ3Yy>Wuz_zh7}{6@^E_f{MXp;OLQ*6V_gz@*)EP$ zsu30;UzkQt6x6~7@Mc!x5D@YqLY_M3<}I1oAdD)(z-BBTHr>^UyT|eX?fn#w<`6-h zk6+1{&!C?2?4Sz~@}*xS{FCdfw@9dhG42-=nPFiHPI&XZXX(X8lMo)5brIAufq+A9 zAWXi6tiqC$-nPY08%4Gu`ic8F?s^=Z%H3n^+uJVOi0c{NzhF`V@f2DF&Q#) znq=-L<7prZMju_T$obd*%Hq@09)~|`-HHJP?f(UYYQa9y9S^3+2A$Th`=*>s%TdA- zTFfi*eizbs!8$dr?N%V4g_?N#@e7|02&>}ke#_8p5r+dDDFz6892Ho@wONH4>S*xF zgX9FLH5$4Kk|7>Me!vSyIWNctHc%K=ei1EwC?R8srtoIKsaEX+mFsH9D>*AU(R0A) z!Of7jB1z53WAfVionhJ3w{`pAquj_CUB6&)qKMep zv29KqP3kol8M;%09Ox3t@5RH~L=E&iKATDP4Py}2rVCd^k8O``!!zy?C#rzrz580Pj|}`pOU5qvUI;g@5k%)nuIJugU>b;2X+66^zav zfIrYTRx=yU=ktW4!gmoP+Ln)hAD#fei9Yqloz+Z88kP@X7S4^nKZo652;Fq{JZIGC)QOMN{EOhau`dxZwGNT|^UUJw zU%`b*|03vec#TJh7kapAxq6UAg@?P3w0Mrj8mR}OLXVEGOj(w+bXOO)OZQ;r3Xlbn6THpfpAu@jgVn9I|nY zf8Ug|x(u5o_Iug7t00Xe{4(nRdYB^Pl7I&EBCP=v)q`gT@2+~km?p`fL?;^LH!crL zUfyE|dgiQ;TYaSU%xmsu@9ns#%(Ht+V(*|nJubEw8W1-_VrP)f4G~^u>rlz$KQ*+zWy@K{CDJKZlmirH-kpNsSl^# zs&HsCpqrcTR0B#a9}aZ&DChPkL`2-#ZW9@wC0^FkB%4R$Da;>j3>R6eVX%>28bXid z0|GusY3BTXz4f90VFP0RPVkeov2QcR-((i)C?-(2@sqnffvM${gub1kRaxW| zxC>`|GaUc=b^KimdoCB%&#I>B9|aLCSTx(P0ZVpQSiAwcOU!k14K#<%MGh0Qstgsc zH3ze80%?Z5KPDH017O;x}O8+uLzxkwkX}G5f76zrc2ODvS2DuJA$z z3b6w6#$v4Jv5dt5dJBBHcfRELBHv%2jcpdvmXn=f{P^DhF6w2n3ENlAf9LylLXS7!otL!`xx<=EnWseQ z&i~BPE%v*(e(puWwSyCqQ@01W8Dh{V)UPr%ps{LEXZILu40Bv~S6ydwVi6bq+rJYa zu;~_l^pNnA?#2cD%QlBkJb5;1^mmUpb(0h=(0U=5$L(X8!*>rpzP6czq~cPoOJ zncY(l_yd=AK^xM4hTKnwz8F$7N%_Q#X>z_hS+5(f0LT8n8(`;z`5JuitavWCA0I_D zJ*`j+-gRiq-YtwmUB~7q_{+SXA1iUC7!4)Pf>DBEf>?3^I}a&lL`DmXi$+;cN5unD z9I(w)yDG%Qg5zTZJuAK>K5ep3ybCM^#EL8K}99C1XwB$BdO8fCP50EH`E+{okq zVD)FIx@EVyY*iY}Mx2M{^&)v;Rw>~-wcvOg>`_GNrb~=Jyr025xd+;qU#+ew|JUOf zTYB10L81lgVqkZSiB!7{|5x{ug^B5Ra&m7Y1E=N)?Bhc7rg4>>@z&KSvU=K!6lO5? z9~aY&MQGLM*~VcJ7@2D&3YNHuc&T}DUFJsixdcS~D!A@dtu0V!kKXIVMiNK%!DFCi z%=qomAHiLRoX#gO>#`t6tnnOJWik^X<2JZAL!3tU4)BXCNm*@3CR)3Dd#VxVH_0-k_|V4K>- ze)eAdn61TaXG z-6<=Wl0VUdtuR>LjB|4yr{`{miXr`KaE1*y5-hTe-h+KAP(z!s`2x7gJWp7(2~ZV&){A)511+>NA9I5F5RzBv{Jol8yI$`?$_Oe@ zK>cV*JS%UEJhn=wS#lb|7bRTA|{uYN4ut>!Nkf&&+SsUd~DcH?}L7g0Q%Dc+2T z+QzK1j@PF<-=y4dYiGNQ|FPDA75@{zJf%@!wWfpq=+XE&nH+GfBaj>byI=IUMLRSC zUJutt#{)tqC@M)tx2YKiG7}REN>7rbh)@Uu{eRaUPehNbG6X<{RwY_d#etY%+>@mn@|$8PcX*!wzK_|GYae^}J*SpAi%YymrC!1pU0ysd!Mo zh*5?OKU{xgRYwZBnENRXTsPpo-9-SE=xIs5*5!%AJ1gx&-l9PlA!d+g%PbyE=7@C~ zQ-Y^gq2VgClv~?pS zT+gi=S_OJ9rO0|E69Y_%K=DeRKUa8LpQiZ}nG#e!{;j+`0{TaV3HhpK!%C^R&(p5e zfaeqeL?1eG45IeHlA#II){XCRp2MTBFm$Ql`a8wKWD!)L9g{~$t(O%!UWoAgQm@nUTv>_%0l?g&=(ArmcNczeaNCu3BJh)?8`Xj3ae#qd zwa$g?2VdwTBImXb%HWMnK-8j*l_8n3`0r^2oS8h0+@wa!Tl4kR5RMaWdBSsOUlcp; zb||ya?RJy|cLGfFIAM45hb=K4C#s)jJb*79l+42rvVo8AH~4sqH%MBre$=Jm!sCh2 z(*oK)WtX4HUD}uv5MGVGKB(Ya7(736GBW8~;{G-4^)OG%LJ_R5k^6Zu?LM1skF z+Kb*++xiaLG!bdT4broDhN=o9+?6LytWGj3*`F3}H_0Y>3?7vj&@+84V7(&4C_J+; z-EZ_U_ga=Uzc4O)k<+f0#9pcQxGmrXzEN|LbcVO1LwQhP>*0poxoxu8pooj(Lo8c7 zy4LHJbtxxk=JV z0@`)W2K;{B=O8n;CP98jhW9Y!pdY8vdk3@-yHgt<*7iUfmZ}>)LkXr6_v_o*FWj0T zoRmKhf8|?0NTyi!$S*pOm^wQ&E+63Xu=9RpiKXxJ^aY*pd$?^pHND{(DkXlM)~fh^ zsuJqxI$YCZCCYHkNfk}ef4kdvzG*LUGKhVH8@_3EXm9 zKE@3j8a@>;M#kg_|Dfo$bui3Y5_~l^thP*(Hrn#U(9_1Xrf&I?cVQ%fDiK4(=N*of z)e*6yT{g_9&9q=7h41Bf|8$D)7j_a2utu1itr4uhWV6JKg2syWw*2$BC9?}JBlN@L zsxJyRKR<(>oPU3);R!R!*q$LI<`su&drKnYjEqIczK^NWK+5K?B`Ei?srLj-F8baC zN2+me5sLtB5o@d(ntz6GD;LOLq}tx#>vO&A4z1FzjV1-({unvS2EMbsGc~4YUgVIQ z$MtnI#wLC)Si7aBNPY}*logX!o^v{8ezQYuuZ? zqf}W$aG71kE<;6h&s7~4nqVx8sVl0FP*lzwJ^|5J&W`0!(>kYJR3iz-fvlOVE8$;k z-#n64rqfsiJnnrDZy0(WZZ_Nde(S&M(OyA{i)Kegu9{!JB(M3>bqjl;_{fvHr((CK zB)@z@Qv%UIth;*`MQ`;34n!vOt>aRh!1*(v%t1!4;NSgg0S{IxVj*SW`qO)5ThIbP zJwd-mQAW(VVG3w1Lw(SW-+ZRN_}NV+M0waC9er7dB8mdid07IPuWrDxK6ea;9Z$+A z);U;Erqlboyj>h#awGy4!1_3y|F`q-u`({EEI~D0*0=DPHJR1O@E(ue*m-1{t@4UD z8^(liKyVKFrI3GWlMWKDQ(}DC@SpE8B#=nVQ@qxX&%XQ_D5Kyuq`(x79|5wL#|P5@ z6Q%{@HSvRx_PceP&+GutM`)2EZF-nTpK3V^zSyumi29(s9|PhaR-M;Ud1eKBhIGK+ zBcoiW^>_a(uAUG3M|!ra&+3K}qUc!hW#Oyl;Fs?Whqy(w|pw#1v1Wm_3SG`>poijqPvR*mj~0aE}CX$#J)?+|-t~ zVrw_J*PO__Y|=<$xj;C;t2FoQZXsQu|NT?2-R39Z+Y7#?s&1$vre(>t#coE_29Kl6~T`28!Ah#Gp8bM8Syd!bt7nEx? zy7A1aL{Mgqk2y-bjLKW@T4>H$t)L# zg%Z4vaSj3M+=JIuxvdIp?J`PTp3;6Tox^wEoMkI`zGU0z{v?z|N#3xXLix_P)AhI1 zvCI0MJf*=Wy(zk|6YV$MJ-S2uO-a00LRRJ_TdKiy*;;!lhkxyl-3~CFvkQI7iH0UC zN5K15t6!(#@0T7>K9>7VKfr%l)WCb*zrk2cZnu8*x$f#YTID;AO)USq|8a=U2zPXG5%Qj@LicLt2{W&c;`q;IF9NfXZ1h z@iVfr+RkhSI{(yd*U>2w4N}jzCpQJY5i?3y4Z@A#rndk1!Y}tNxSHkVkf#l;LOGLG6AEa;2W`{@0?KIr+Y- zbMu)GtnZt^{SMepR2yWyY~KIvo>J~Z<2LpT_45YI%f@hRLIzrf*3Y`v>U8H)_W?8P z@)|t)lLyMl+%am*lO)ue8MwJ{GJEdUoeiD=YHci|FZuG73{o}KjE$M5z2 z??7FKFwUPHWOo^u8QFYxXo$F<`Q7;Y;SRHSYV9e?PZjPm#YEPmuy0~WU|z-oCD8Z0{3 zDK9M`CQNIq>V5T(9E`KefbSf1K2(fM(Crx zZoeJ<&$k$OPdlaSFU}m4j2_=RLetX<1JRx7PXH7_S$EX2ji*Tdkf20MgR%D1n8h$A z*6{MnsG$c(2p9qsjKW6`KZ9$A5+QP-(i@=uUdUT89o@!fxOn}7WkB;Eve?h{L%_Wc z-rv^sJ_}UOtl2*!$^9T)8NO{3Hm_8>4}P#HUm|0w{wx)zGEjy_Hi?$}1Tu{VMzhVQ zw09b?z;Zvpiv3Ob+Q5?As+4r7bgm6dJ_d#?>oD#OlQE4Wr8FuHyHM<{f=;tFvU1W` z{@?irCz7j6Krh!N`UJY^&J1L?&-SVPgu}6j%%lBA^g!j)pUq)VJQyvO@na8+k};d= z;5#wH-somO*y*_^qAIq~x`-Dwz2ARWU?+O2A3zH_FfLsZ;6qx| zpx{>ZNb#irIH2aJ7A;LUf&|`*t2?WI6E!(}|6gBR=|agtfhYAvvMJ-X;9luuFCym? zAd8|uYN zZoc0wwhtKF^AMURQi)#V)z?1ZNaAt+-8GtS8a0m`B{*^0N#IcT*oQ>RRQ1UW1?bekah+GfX2P9Jqe; z)L_~gE@XE7GP-e4gII6%oj9C>N=0d)+VF*QFQx!*tI&uhz>}cV@s2Oey*UjN=?osp z(cUeSANDW1paod-DXW0^@enV@k8*Bra70rU+e=I=TQ>kYqPRxi-Zfv|-^HpOUOVf@%D z?Q_6TMaw~HwVq$rrAf(Sy5;P4YQLCiqJD9@k2GWX z{*E3|x0qoBvB6$0t?{DrZ>G1l-)@|Y5RH|y5|zVp$Nx&HmzpnutUNuwrd-YONN?)p z7(ChUF+v+| zt5l)a!`2SYFX8l>x41va&hOF1UvXW)$`^4sWJo%xd4@#|FlKKV>+W)^*genNo1M*1 zV^wfl^t!>lpif&+^Kp+kUxuZ)(?9iuOkmUw53L>Ln{%*2^3fI;6F=dU$6L^UsG)>q2 zS`7ZXx`4Yo9Y;|FbI8*!W}d3_H&D>_s89c_i6w*V;#wXKVLIC7OIHo-bT*sLa-tCd z_ER1bKYV*3DMnAqoM9uJ=vPbZYeP3SzjI!1d@e*=+45bxH6KRv&~0-IpJ^pT>3LIl zkUxmuKy$X1PP8tB(79gp#hs=T^bb0#ROa{ne#07`{>si=*}M+i9K+A;^a1&4&1LZK zL_Kc);4zR%B&6rIYd0;w`W*Onjw*B!N}dloC=sslWg%fFWloH^p3J{RL8EVHLaw~Z z*V#8Xg0(u5@328v13oZLtf9~Sdy)if+LDuzK`tQ={;IUT-Hm;K1R1dr)F#e`sld); zIl{q(+J4CJ;`~55@0n^MloiXT_!Ey6YZs>Xlvc1kb3F#gDwTd<83ah3{fdyny?#xj z`tt#fGK}q-Re&b!#S5nFaYpQ?1n$h%p45^s_@nb?*Z&>bb7j}h4$#RsN1>5J(v6mC z$5W(!cyrB>MDV}u2+#qZpqXK`Gbd=OsT6C z@Z!Bqa=2#G|6!&m9l!Ye&gr6S3mC*lu@OasphB{iM&wkV&f)h@10lO6mlV*9FR%{^ z@5L~^KWg9lZ}x5nYTe%~oD1l^kGy(M?A@Q1AWc{>7#U9HQTI$1qQd6lL13}nCd}?I z53-b*iTQI_uNxI6)nC?Up%cDF8jwS^>NLK*0#g$ai%4`Tf$dE@>iy$C$9e~-k00jL zvnRT6EY4 z;{TyKP!ZCGX-v0aB}c>7m6wP+Ch)LCb>4^ST()dRVhO_yJ(!oS5sxL-!JQ7+*97Ej zyG=aGtTrPwLn~13-@3gb0(}w#P$!>q7b56|uGy_;)HMpUW2|=C&9#BV+riv_IDAx7 zaOM&R{Obav-vfhp5|b;^UwJ@_E5Zn^xvhADU= zA!XcrpHKV)11nI{yvN*n=vP#C*RhB>Ur$V&p995_183SaJrt% zwW{Q5`L723jJrnkaIeZX`2&6&1%W&y`E*^qVEy)?=$NbEQHuA?`~ZF0_!Yttp)}TD zuU2!}bi{C`n?pB)1zq^oQ_W)cp&erbqX?lj6goF{=3my$sW0vQ6Ir7xU}GQ>yr6mf zJn}=IsN%Bc%P*)QwT<{}#V55rd+fO^ba^xUod*w2qSet|ME1hscy~qFVrx>=rpi@? z;LV3p5ru3^qQM`l4wx!~J!@d;K7}7*5}6|14LOJ>e#0x_GIkN7>HmgV!B%c4oZQn+ zXc%@(C1S^iHZAK$9r6T%lkR~p&+>8~f9FRk!aNjg$CyBj|8rHHn}<_ZVu3LEkDn>m z+*GwgAG&FSqgTrYq~cj6t32wX>Gw~?aZd<4VvJr_r?3rhR4L97pfs!(p33;CSEi}k z+%~Pt^Zy|pp-GIjCLe#elB(#w{>`)`-+N?6{&oN;1=~o1TG#S}17KI_nPDKAr*<3e zGpbK^bBOG&nV0q*F@X_eV-Tp7_*M>98_FRfqAO(e;^~o9%yVY9_Or!!u!Ci+B}M`o zcmmbuZExhFG>dZ7lovq{w|PG%4wYy0B{S15iN28;?KtGWmg}H(#_{~uQO^Vk{rb=0 zNd@CutF*M>K6RQzN!q)IDf#s?Spm#Psut43YmRl-89C*wO7k#1CX8;FEcVo+ z9ZQ~ukep#_em6S++R&|7n%X(2A1#xWGD^5qPTnbosh{Ju#iJH_>WGr?5o6j2bQ;Y zpa~$+c|_fi9Z1s0Yw73XgMVi^oqT#(P8%|E<-(igHt7of21l<*(T`S}qD4T1RaE*b zGop0niEZT!qC!(5q3~d$xo}yC^T#EDevSfo~SS z_U6W<=|<1;yR~D}qO~wUM)^8bqFV9fIZ*vh!r@V**7t`Qciz8_y)44)D(2i#%MeVP zn$4d*dyyii?mH9{RYf%3!7j(G_6k4Nx%lvN=OTfzGA_~J``Y!yQYMh>8td|?=t+3I ze4;iI{i!owmU~x&N4d|r&GmnYx-m-7ZSCN@_$6GeyJ|VW4s2KbpXMAK#o0DCs}Y=* z+V$jc;iXM0DgcZJNLOdSyG?Z+CLQR0{OxwO=HSIU5>l8$4b)p9y3jJ%)~!u2*Ku8O zmr&ZYa)O-&tO5eRGK0`z6D&aB+&fYe~)5wLhgS|CEG zZoz>_Uetu^ga*i0Oa24MvZ_)HuZPF53lj#ckjbfdwi$0*WJo*k=_O+IKGtcx&SYD5U3)0p5k`_G&Fpfx!iaUiI zBk%)7${!zp@Xh&lX&C>$?fI!mNF-=0&ut9wa{IaTSjg)H?V|4u+v>r6-)Eb(hFLN5 zIEj%aY|aMa-MBmH&#H8r2?%8`@Fqpflkn@v6HZMpi68DfxDeF_0V3!m;dXTlrV3X}9;nnIfkLCk}K0fWhP!V#0BYn4?o4X95Sb=I8iAXqNh0A6nnz zIq1WNLMOxl83baWNA1cBNZhT3vSQP`FQQGDfT99LSTzB|H1Tt_rI?69t`~)$dbL$X zS#Q;GYNxho*nNr_0F^cE*{~Q?ta7ro9+6%tsD_k!z7>-n`o>R7 zPhFXuTPw+Uk$k}93-cf`$}9bLH-8SdLL7q;)h2xn!_<-tUV$ne(P?yF1*^a z_fI^@H1!@n3BR6a8OTYdhUL~nnw7HgJB~^k8U`B=9d6zGon}@UY5GBGhdRC6d(%CiOz zM$PEg=NN1A+f+UJ#qKmxOiV<4TsFC%o7N=-cYqcid*zlhC2#E(A|iT4`oVSeC%m6_ z;=Z@32FS`Q=&o`aUdPYcxJmvlCPV4$ zKV(#iT=~T|%(yLGlX`pw-mW6k=W~6mBsu?UIpE;y!ISOvk~=rFdmTP%2}Vdo=69~P z04Ws0K=4XFwpT!-3A|3ZoN2f@=wLFd!+m#ZIB>xbw*=8T5#wa3_~Ck&$wisOdMk>5 zsb_z8JS$AR*89rm{m%`uH?D6Zx4B;sTN7ty!4V$4w5uo}3lb+ars#hx{;+t74R0ad zkBnagskRk$9A+wBbC5gMcyec8e44R|cNc|$n!$8q&*^87BNEcSfMp{bRh{X)cmdA0 z8NDlAw_*Fwn#8gc_K%V69c2=re>QudGLq~h$7LH2Bd>fS`)t_w7&TQ$(8_uK^CNXG z9%VjYvX}m6o|WlN9MkU*GNmw&tKsEz>&)WWM86Tnb;RmI&nC)(6K4s z77tb%a!PN*xg9%6+0))DP(((dn?j{LQoB-|&!Hd`Lj}`*{r^<&Tq)+@JoA%WS2NXmPOMBW8qBJTy4l<#FzeHMyB-=v69s$B5S z7x0&feXTw~@Bh)uw6=bE*$7$XPYXaeGxB?Wo7ZOeAnjLsVU^c3wagy_5(^5SJJx!> z;*yH+`?e-(VQ~J|n2`(d>pkneiZ?~GqmrM9WIKSbVGk?#*$>h0OgEarjRWD8F2_dX z+jXB>7F5f)$S)3$99gdk@4mkio?v#C6Q-{5Y8bTLNX*_xo{~gMzZbS6mKymtuxZb? z=ieKL%A9-h8WJ+I-nj_kQeB8S|FuCe5qT=JwA(yd_U)2}et0OCp=%@r$btId`N7GK z<72y%exQzEV+ytIWzjRINUf&wV>otdLsrYqUT<2ZP7@I;nmE%720i7A;s;>vYkD>({1vd!AVt5&NU0>*l<K=d^aB(v^5O@#`lT z9?yJ`e9Pj?uNBE{#!aJPGIkN}NT+dxf%g@kZ$n}BqxpWRZT+Uqk2xj)&dWR7T0v1+@>W8 z6U#f;yng=wSW7zvP!Od1u^CDpm6Jbl!?fIn-CivGxeeRxG45a~-Zeuh#WYnqmNt(S zBz`ZAc?7<=7UlG^?{>SNA7s$@?3~Ics|2Qm5o%`9C8KE;$HoJYsC{)1Q8qD_?#q8dB~o7nWD9P!`~Co8+VciMcywE<3&7 zvMTJ1p7ow-CwKWdAhG&*TjHp)G>q03fvqNPGo?8zw0u=*ceD}6en&ZDYL61PCF}e1 z2K^!+?v!Qjah)#tM4d*x0loWmbtdrdnL;5&HeA!i&!LFR(OUkNT+Rqys~iQ=j4EyX z(hxb+&RA8iIZGl}q!TaPgY}H#~WHfp+9*Au@3Br|YCimR#y;*_=I2(VQd@*K6j&t{C zMvEk|Ft6r}n{S2z1wD6|!W;L$y4<;!39@7rD6abvi2{h5Rhi(D9zEL7)3vH6JYXq) zgZW2Scv!HIJ+_M7ni3lUWUkI20`5?4HyMyQV;FmEpXJ2JCe36xtM|;0c8P&38E zGMej7%*5N1M!PqjpICc`9YDxHV763RHIKDb^$G<}7mehRpfF;%t0!BNiF@2}i_d*$ zU>KOCT-MNDcdWYk;?{zzA&Pf9C2x{jga#mU3*#t9yX`nhNvTgqvD@3-fUFr z806!szP2Apy`spmXQcX@9kM3Tw;F;+6f6N6(UDmIE!3# zq^6+}kL@!CUBV;nb&ao|W`O9RAH+%=du;hOoM&>HHPOg!AR)$-5{P=;hNA=mL9r7`$29~6fEqS3EVS+i?>#MA8vP;Gl#u$ax(yiZ4-yk5@Z*caDw_9Iu1M% z@NQ4?)6Y(Suduc=$i2Y;W4q(?TsPG zp}2f&Hw&ivix|=Yg7_Z+7Oi6NwwHqK>z!h0l42XyLH8DZg+Lz}mp=Dw4Y~_MY#^)? zJ`a{ZDdmGDHUtQV>V!IiKAACH| z=Y`tNp)%*Q3rF_fxZJf8CFG17JG`{oI|l@!Uf_6y>4G}j^URv9+3ROT<-UsVA{9s^ zDQ7o?MFu@}Bl=ugCPB~6C#__SS};rzDL46K3pTyawmXw)_mpOCh^8Z|sPaQsI)-}# z=RY&|jhjJBe*c+9bC!lr2048oe+L(@Csyy+?tWTBn>M ztp3{SEGjw!QJWAxdi2dB&UbPz5iMUhE=kl&gpkun8{BR`=^YfgHK5 zXF8!SPhTix`jivg9|c_xjS=1vd|LHX&%AMiuInw^Yu6g4d@HWVf<;6%zSbUbH?BtJ zd*d=R>URh*^C+f-Ii8w%EFot$N+{_F#5=H##l2>0_ywfA@64GWpzio({VU0svk))ByFurHYxgn3ARd&%QLg1F*?nIb+3|8Pia}Is4H`RfBWcOk5y~ydqZ9di zEyk~YJkqS4E+UL&O5~nYApVM+b9ir(Xc_xl>SWmyYX@^KCp7uj5xROpaXA zS&)9r%IJphD>r{>*l0MeKBqxwqy0dwD}0rQ zv`RhEbuFdJHOrF0lx)*EwSXey`o*5Q(oH@oZ2G;7{fFjR3m0h)&BD=ae`kj|9A>Er zMv>?j_dqII!!ONn<=*r&X1l+w|L*3ZJf>hDyrLHlV;SjU;fMIh=I%3gvz>KEC=%6Z9QscRw@=z z&OM`R-JYvO_eu18Am8miP5Ur@%<-KtI$JFQYHX8DqiLs(N1$}6HVCpjIoFz7o?|)P z;RzmkJPLL>;y;1XmIOf{03qJPHiNu1+P&xygSh&zrssl;?81IbEw~@MmWcK&2vN|RC zQ9(`&7cX%DYy9H9rxlPUKr3c>z8p4JW?cIKv&;a2_ox1tkYr2o&&Lm=S=bn*Wg z6|RN}=g_>idUZCySx+D|>#?Q_jOC_6zT-VfkK-xqS^m{zV&4y@8o#5}G9uU9p#k-p z^0-dH9rf&AH#4RKKW#N#d1fX`#E`^AOf;FYiVX26uD#{Cy6VQ}mAvB8gHB?xLj>WQ z!W;;BYe7W!2gZw_tErnJz_qOpGhhBwT!1FCKI>Z~qLv{e*N@b{&^ypSJUt%!I_b}| zcvPc3Q5r6`E+*3N{&A*5N}!fqc7a5%5Y=AwbkP)h6bdP25kVfBmxNQ1oe4)!x`(gL z05xX-NsEB(G|RqGDXMMDEw#6T{1>$9o+7mQp09iQ+OV8szhCWrwmN+ung;5ps6bBM z!)03n%7WbMQfqlev08b;`sIL&$^9TpWgh*N?eN+Lp776f%lOqI`?iO*s!kQ{2d@jj z|DU5FDCd0QaYF`+02QK_j4sknKfiDm8=VG_mX4sg^?0x_xm+S95eSByI-W@rW3Tmz z&Yt@uft_EtieS8;Z`}2X)QDAr&2vyjZ;J&a1|(T&lw?zcb%r2M{Q#Y?W0gb(@T%j3 z@%T>E>eMpXEG>eoc{wnJ$Ssj!BGwL1C}&XR41VQv zIpR7qv#r)U?+0?X?YSq8B1Ac-c0`-i;O#WP_Mu4EwZoE)wyU#7t5TGR+ZouJx!3K2 z{=byM$U{UwjhefIk5c!%Br2nrMwDxO-iOSmlGl-QcNBqKY7qbjY%c6w3}ie##_70k zjUL>5A{5JevpSHW4HWzpJw`3r$YQUp43l~k2R_#A&P#PL5w|^1zE_Dwu(?pBIt@&A zZbA-VYk{6?*DHOJtwztmAxB$&S=wXmoQTEy~gB)+~ZlenI^sG{sj z4t8WrNDA=JzHIN>F5ww|EIE&Zvj`ChCM^WwzKLAn?9YY{3Y68kF&9(|8>Nf zZ;Vob4#4~XaIHgIHl@1)=mT|m(Q@`f>}!BA_IXN_5W&o&eG|4#XX*>2rjHn7kAQ2S_fpVbg2`!S(E2#}3c#h&|-;a52W5I52}gNjPLgU4C|89@4e)bktL4X)U_R zqlwiCCwu5CZ1^03B<{-U7OFj3qkrrt$ZatI+yZ9ZKOUE|_#1DT*q|%-3k+W`ZZ6CI z$FW5?I>8m;5@RHB$!wGE`7La7(XKOAOdBURUhWorY(}ja(_U4yKK*b=+B^dPGWH2iWYd65gEs1oP3OXtq z-Y$KoVn|Iapc>Ge>(DhgMDWPSvGBX9%| zLpuqhWu^CTIM2L`+`oTZIhF z7V5STUeyWqPsDh{&*g?TsL}ewylnS0%NMkO$3)RN_HFHhvxwk&B>wxDC-aB`+4B}U z7x>%4e?p+XT3+FCQPE@G8Uddi0-B_^d0>BA$Bmayuws?b-QmAM1$>Z5E&+XEQ#iE| zT3!rWIUDF4n#K{AHGJMV_Nv+DYYH|7iAa?(*`+-gx?4AffFTjO-^6{lf(vDh0&DNI z9J3Y-2`j{kS?GX^%DCALDPXl2`c;{R0-fUp*fKHwC@EY0 ze0lfeI${qBvSu+iCjrNXsoJhl#eQ;tLja=YN$*81n=eVGNAW}(CGitb9nqHE%TXpX zZGd+SaVAe^yUc+Xwo4A{&4-PhpzZAi*1N7tb#PP&=a`OeZo3u?Bdp2zLFa*}xo{Dt zaUU4D-kGU&Yr91f2!*nnQnjE-K zfSj4_Sse9;R#0BjIES()P=L%OB>IBXmpt}n0&Rj&0Qip!J&Q(p!h*69Z^n0udr05~ zQ3jr3_`i!8*9KVF@_Ri|_U%<*Y?7Bs9_~we6wqx&9IGX*#t>HKnvUz{&>by)PCgerYKGoy5Wsl#3{WSMv-Q#eS6nDqI4!f; z>eL}7294j@JbWDVYJMOcL7!PW2P=P@CQ&Gp1vE+e}M13#p^$cvaX~5~iud(P7KY zgOV5}`OO@GCtWG?0v!slm9mE~f^l);&^a?g0sQ9fa$tV7ErP0}82j@scEX7%=|VIE z60kI!Gp%1(S9jJhZ7p7DcVHnZDt2!t2Lsk|Achr>fXsq`_GXp$!Ot;p9L}v`%dw?L zL@l_t>REX-BiK#bvdcRNLtMbyN=TGAfMAlK7`gh9BS;_kr!KB+6SlV;?I#GB-49y0 zD>Kh^pY@oRrRFcHkp}RI2@4yq_y#48j)vqrlWuD=qFD0wR!xxvO0uk zn_TB+@L!Cpkcb#@l~w69I=v@swl|{C^oy4@S+ZztT-MT=@m4&yTEuR(^mY!fgixm$ z4a`$LIsWR#*_I@J7A1a@BM*Hm|Epgh*Rcm;@JO?u6n%12-&ZxWHEGWIw-2MzD%!i! z2E{MHUkhG1_UZ&e?phl%c&ab=R%;m;ncHigKiu+)7kjwIPHPte(P&(ta*8+$`md!B z#x_jLHL&|{n9^#aQ32$tw*N8J1^ARGOXv$2qN5mbzBk2W+_ku8X8aYG&+SseD}2&! zzl@Xlru*M1TnIACCpg}EwX-rDuM{0~UC}~SrN79EU;D1bGV13Z%00T?-3K+D^UK&V zt@1h{@#(^!fFRY|A&pb&j+$rJP!!GeG$VEsri4riAK_Qv9 zO_sHzuLS^~ALi;&J9|A>>z29IL>W4Gz~zjM-_ME^Q&sJF!_rI082gu==p*@m;km_Mv6u8wjFew$u-~FlI)Z ze!HXDtUe&!#i4h?6`3Lu<=yTg)$r{0hfT?br_JAQ5Q`BdwKP5GB}^qzx&u}_7 zBOWxN<~1rLLbC5i5~2>z9#uxu5ua$M49NxiMEDa8*H|(3?fu{k*|<`$yM>wZGO#F~ zi2dcSKE&|Rnt7hQ`a3>0;#cK%8y15k8rL767a{VB-U1FZzk=V#^;REsfRx%R{7)id zdYm*MCeyoGwi<{ zF^PpKhupa)bBs<#@<=NzieuIOTh-1sm?kLBvE- z=lH(7AA)X0*{93ovI$gN_&_*XdUd~f@&y8G#@L50vWGxpjahv`9ltdvJv-u?*xF?B zwvWp>4?<{18qYq%UA1zS!!ZG!JCAx<-g4kR-7qUFAZ%ZK`}^b=PxTo6_RaXKrqT#5 znCECG<^MdD3b1{)usFl5>Q9KP>={;K=cP53pYtFDDltFa{t456K4S&HS-SH4)GWzR z*t!4ViG)slyb<_XFTZ6nFLjNvyws-b;B3AibLr54_qSPW-=4P+;b>3MGr&{rihI?3 z+QMjXl=o{O*f%ufBWN+**oKW*wQk>IQ<}J=7LX;NIja}@paDLL89TwYaUb_Da2Wvg z^vL6)@@pLL(aJ}+k+QVz{(@XrKTvW!ZTe~r(kDZ9t<|$Euy)6&AL2M9X;aw>Pc zrde5R%_yEXF6d%vBw$V==#?3!kAi>e6J22j^lnu>Mlpn(i?_0&r||*qzA^J0`5DHA zKn~X4q3;9>1S$LEy_M@260-(E3Q^EUjLb$s6hJ_WAC5V?_2I(g3A+5oXb_~L{AOV0 zWRViKtIU~4jdB<#-uZ!<#g(pES1w>ot!HKSrRtUAeZf;JCXmoyOo(F6tpK(|FAg(# zd@%EvFXkO?s2dkhZU4uhC?HZA9K}!g%moW8T)PJ~BT?}MHbk4p#xU12om>PFK$@B= z-9-NB)q}n{$=Cr2VtrsJLHV+!!z(dZ?PITXhe9cIPr6h0E3=>e9E8wO3m=)7!UN?| zI>?s&xeHOpI5aiASiOq^erV6*bK~ux{}p1r&{@r9Y(_YflIL0pvubl#Iho#JMw3XU z9v??dOU98w0UfI~0&Qc|MuNAvA=^1m+|rZbuv7KFs0oEN==RTi<0t;Hb}z^egba4* z-5*RV74hq{touw_+0z%cVITLHk$0Gj$72y!_P)0wxKChPvkmDzMjI6GHRo1Dg?U`| zR~>fWB*vn z3G!8u_9DZO#f}{dl>{r0*vrsF80dd%R5y`kOkO4yQ z4!Y_NocJ}8u(D;mYScCw&C( zqKf(Wg8fiz(u_24Dt9kL`CJu}^ShfOrhffQgUV?6)#CpOqR8RjUU{R`-&dfi-rtCR zG16XtDAkarq>V#o#eB(y-2SKNnXP2VH)yzLhL2auwy=rHQ{uipS}m4QVY zPXgB+w?JdpfV;8$XjewMZCXC*K6=aL_w^}M;bcfT^b8|P7 zQqGhd-`dA;2?dGl3X-&zjlZd+ok0jjm?OXrR7+%;e6kDc;nOZ)UYHAbs6AlREwJ1B z1DF^W1E&^pKzIhU)xFEu?osH|^5vp1KrQ0-txxt`IwrPk!{cOX=zxyjhg93DC56l4 z4+g)b4y8Y%u8m{7MDKIf<4`nJU4Ba~j^&5(+^g>qmC5A2)Dx)A`d&H<=ku4|4?U|) z4o({T*&PCl(r0>v_OCk&P|!W_e+2|loO4Ki>C6Kl5Lxd#4E01Rzws!ETvqR#K%3@KHu;cm?l;(o4scq+7glZY;7&ncg%STu8YlmeOgp5wJWeR$ddFWU$1Fd zh_j0MUjTHuz#yoX3|JO>DBK>b)%oE>LtN}#ciYs;(tF&LMOscYz~b_K zU(H8u2rC%I7`Uv+Q*dyHLYs-+z;yTHu3HYI@5w;WO7uTB0-UQ-zpZ*n!O_RF)f*wa14Fq<_Y?V;ET zeyEcYvc)RS-h3}}h3C~kT1QQiJp|`Gm7l}7wUG5vPzKgY!XJjOk1)+>&d(VL*rzdD zTx7bM#DfJ_mpTxzRT54n^bxt2shC3>bjq~pH=nm~0@3ET@y$yf6tVxu>5FZ~GQmGr zc0YqaLJM1{C8`OcSbUn9cKD%Yy{*3BC-@Byuj$C%fg{qG~lXFYCwi6rmwA7+}B_cA^z z{K_y#&unfxl6AX6?38H+e)dCM)ZoDbmg-iwv~NAE*(HYe}baVrxYK^iT@)2Tq+8G z0?@Z*#~m;E+T zx#2SJD6!{+SJI~gY{I;+?4^l%>#PQ>1)Hc>#0ENqs%KD{Y}iV9pu7Gj1f_%{QEtf(k=MLAA36!3M3wIrPp1te!-kHkYpXp|F1j1 zA7+ahaWv#e^0p#!y>ae@Dr)AZDFAwoJm1^?TWIOOClx)U+iw&6jsLz2cY8z^_%m0< z=Q^v*7=cTjM&^cI*=Ctway*OKeTrs|DTOP8erF>$(cf5=&zdngXI$>)@N-Pz5vH#8 zZ{p%k|C4_1@69I>*}7uCGRTPChe>Bb#oI)7l&)Lz45((QeQS;p;@`6>jdeGu8y5O< z%}C5DTes3&-~s~&KfyOilWenwR>stZ`njcPO^4@GZCju7SMPZ2G>Fa~ed}Xm)h$?L z4np5@*1ud3V?lj|pQ_Uhz0hxCeg?>D?bMh(Nk}y6abAivFG+Lk?~wU+H%jWUzT2W6 zQPAwYPP~`D0keRNE*MePXUudCb5+7)ZO>ZY-+Xw{pe$%x(UUxped(}4va&CVDHJTa zF|s6{-_WOV5qQsU&j#sljoo#n^;>Ac>W$D!S6+HEQ(}*%HlM>e6QN`=by~J}h6zRq zy3sFN3MU$s1-mWZw+9a#{n)YIa50{)g}qlU*K3p73IW(bL382|mk89m(h`mgfeJlr_NXP-j8=@hB&t8`l#XKtVDJ_(5SbZK?yAsd@-q$a+6>>V)*{CfAphjMKBCOG?Fh$dSx{v zq;hXfwWjD4i_Zjj-Onu-9v`BI-4vWm|dIN{y>XDsdKaQ|E4giQd0!X?3; zyw)34Ngf)B9G%tjH905SI^gDu9N2UXT9Eu4hDYsVv2vw&ULWK#fp=zXWvijgdpIq zu&>7x4f}iQnBKY78F7*FimxFdaau_+k)tDFxSIAi`x#$X83pw$n0LdW^pi@zc*Q=> z=7jzaQtFPkm2dSDYoRRtA@h5t31#y4Gy_m^wgy3ihNHmd^UA2mCJ|ZS1&7H=la4ls z_$Dy#?4VhfwvT%W(w3`tw!`($eqV#y%-dY0KhF#BSr+dWgG6{C0{%+)%@N#gC!6>> z3edQOR(rDRT{!dso1erpv@1?_eW3{LXX7?~<*@$&u8UVH?{2oANaUMdE4tlau{)XL z(;KqfS|^yQ8YcP=riH*7%D$$VG8aStQX6^4y?8_3+TyOSH`~VB;D!vlA#kBk-^lm? zXEzF!z=rFde^80cX$Jx7ACY$wEUwoHwakX=K&kiXHAX`yZ>^|#d?o=*yK;e z{kW({LUYrH(UYk+%=Gm}OAnDI?HQm=D?iv$Hge^ub z8_ZVRqd~{-4NpaQ32-~>8MjTSQ_K9xA zIXa=Azo*(N$8;9EnCp!guF%rA#+0Uy$-gR5GQfI^m9Osda-J44ebxl-dE_8hSaBa? zS3svo-l+yk*HPPS9FXX231Ur-@mp5g0io8%!w@(vGqpBAThkWx3DM9 zQF8(7+kZko>jQq*Bb2FTEy5#dz7q_6OWeSCP6Ka?F&AM#_F=1%VF-k8wo3H{PW|FE z9}?>SA?CC5B2CDDfpvk=~ZCq=%4tdS2(A98~lK!u;3P-IG)q&ei%L}TDBn&|-RAG+y zCo18Lct7auvediV@tV+SJBt%NiSh-+uqp3m?1BHM^)?Tp4s7cOIN4UQw#V4L@zdIi z{9)4Y&l9h&Akna4>ak!H5l4575Ytghfb!V32gDvb=bcYP6K&s17Z6y!d>>X$x5Q8NgS3?z_RN>cCDF?qOb(vLI$DGr z-@o`M-&l6lQSopRTqt zmDeH_8tmLeDQ5ZWSu&`^t!KshN)xIx)<(8nK&G!_uskTwdrDlm^k=5ZX``cQ;(80# zj`sy0jqCS3*S>pO6PRAlznzH;Upg*5uQ=0);U%BMV>T(5x!l{e6#64N8*prQxg+#e z%>$D-Chkn${Pmn@csx1eVaRGsNOYc14Lh`)$<4@SZXH)MGwgCIi{vhYc^j%uO3BAI z^PRnU^tVvY!eTc6?BCI)d^5JQ`H1q~Gv%qJTVr57+n^vF?kXsQOaf%>H!l=p} zWEe!V#IV=?S9P`gznB+k67P z2}M779&k|qyY3#I3G%f<<@OkP?Vq2a-l?}kTr}bT{Z+uDNqA4Bl#ZTg{4MF}4#Dr$ zNw+o)@6;HumVT!Mlm5WGU1_T8kk3?}Wy^i;V2v{u$}d&6UHa64x-$xd$sEpna1d7i zScEhXaoYRlzlyn;lcai9ATppw%BmHmQu~AQp}>#IhaeN4zVWUV_09-fh9mG%G%!hm zIEGDod>_vnDMXYzK*pX*o4X9*prQIB4G<(1H}M>S36?W+kln-68>gk#0K1RsTfQ_` zyJPd+kFRC>KM;hd`g5qi=QGJ>bx4>=>MwzR{_0=-1!Me`{51frVTF#$4JPXX;9qav zMscRxXvLyvxueoMT5-=_oTuZ;x>UG@Kv?Y__%1-& zSr$lGcIxtrngnS}nHsAi;C9FaG`*&pu+LC)IHU~l5qw{A6I4?*XSw_Z>SRjWK*sdy ziMCf9I~#hxRxD?$aJMf)yFKO8_;*FVMGC@FJ|RT#F_nTT6hv6`&+1$=hS8XTVa`k zn`FOSB7^jmKD&NG#M#0o=WbxyK+zho=WELfPn>C0_0%M$kKUUoVl!OjFBY`?dV)}1IfQPgMXgqLK{d*FFv^!@!aEo5FKdw`=VMB{nyNv^$5yY!o#I%6K{ z0pv$4jm#Zq%V}UU*0pL$XT@|vA`uEaj)aD4ueozSCXXt`+X@oD@7UU>rvrsK><>SP zIr5;bDc7F?{(6TQaFH9~kz+YA>^y+UiR53v*B#!bA|G4gsUU$W%>`D>T(6;oNdX`X z?vz<}y?b0r?m{Xaq%r7-({^6?4=JEFKl`Z#qWDD%KECvP40{ej7&<$dp`R2rJjow7 z38=u{HYi*Resg{SlSey~b$}WwrYGvW_V^71iE^vZD;qK6mfGLGe{QUtp!vkhUhE%1 zZDo-X%bib)&jU%}03dV84i17YdHaR{6o73B+8s<|<4@l|`UN_VH@a79?CToXs6D4K zAj%;P_3~8gyC%4DlM!(M~NaAbf+}-iQBVLgt7e zW&o(rwPV@hKKylV#;&F~lB}3b_wbtv3V>=Ketq(-0#7vn+BXd8gzqX=yZ>I;X+n*g zqL34Ko{gAjRqKCx1WfJ~0=1?{N^292-yxP`=jg&ez3xb!Qz4pqf?(Mss$UKZwMbQJ zbO)#$SzxjHH>{X9kL{UTy)q`CH|F;J6pC9gbfURpieqx&_~9gcl$J+dvHf<8$V)}^ z-^bCNXc43{tp-8yj}VeQ4k06}Bw1ZE zWy>t%+A>1fBiG*Rn%8yj`TWlBA2|1M?|q!l=RIDp=PP&z;@pAa)WcqoboffXk2hWi zcH}uX3a(~S4MrArD^McG5jb=~LQlDhz}SQokXc_j&2nx9z5W#}zdv8~ec}CLwMyMb zwcdZxHOv3HKd^nAk4xw9KBYJ9wf|}u>c2S_3vI*b6&x=)2HYtu1Ow=mGg}dc-w3D% zfY}9-3ZjB_~px6^y&{W3;U62JA&~sbj5_^9x_vq)xhf ztct0&=9YMbl^NFX6@9g5x%K_Ii?U#$01qp?atNIPr*sd4p@OBdDo%%)Yg_W!Bk6o3 z7tjZ`pa6B~hVkWUCmEMJ!tTqv4_p(ax{|aMN~mIUT7EVhyvt~s*^X9roMzT2FgbV^ zc|Z9Ti+kvin-*>S-^Tk>P11%XKIeRMUDSf^vj5j^Bh35F6aM(oT2p^;1SOc{VIOau zs{P3R+UB)xnukrh_U0Vs!Pyg-_tKZcUJx67hdP|4JjuMi;{+UJk7yp{`29v>$;?@_-Z*u=MQa@q{DBdE| zo>CrZTI44EV)#rYT_#!6FTI)XBip|_{3p;q2s#DFjSsqO{pKoFg*Y=U@p?%Y!Q(Hn z=7Z$#_k~mLzm4=DH`36&#`JhnN**=!1Li9Vc&YVe%Yj$O#lctUQSOxNTl2+xwy%|q zb2{qf)TakY^rN>MP5}?M#%sJnmZnA;H)>bG)!5Ed>F%3kXzb}$bd2*s_0Hd!d*FwL ztHB)lIma5tR!>_ljf>sIZv3N%<=@|?X4`y9zoWWO=-_8yJA{%NUUdJT-#*wQ7eJ=@Lc9XSBkcTPR{Z`5K z&y$Y2Kjy$PRbjBn9#%-+=gv0NZ*9DX_uJ)_TgnHi-wp~v??R^gI$2HXn`tulecVOw zkmVFj{2H)u{KVNH+v8qQlY@PiZT8pT0 zk}9sPrSF+h`85K*k5Ajt6;|ixh{nFIitjsQ-`1>vdj?gGa-pRu;e)FGERherT>DtP z@sDr1GZz8tuFPzhdz=}|SL?@VP=036W9JK~-56{SwEn6Qen^}emrqn&nJ9#Fz>oH3 z)9E{X<)lF{-#9d@eL7MApNB#CHCi6)_d&t4b&?Jtb(~}9J;P1vqp!eCu2SYB-+%r= zb`+N-pZ1$y;A%c=Otu`nUdg@Q8}v*KO~*Vb{UVjdSO3)Pd_lVW6xIo)r4CyNQQL=hM7XWNLUM{jk;Bg z)$S{zg{hT>X!M)*K$buhV()h&eFb0tPxQ-odR4rS^*t+9SxW9&wYfZ}B*1Hi-W?d(!xxsw5T)E~44aS=?(h_Ex(mJ` zH>Y1mf<3uWT{Vln9`XAp2Jurc_YwyG?L+2?0ta%SgB}DP3cnx$8`S<()gRRz)d^d4 zrPqmx2{LZ?xPuIJK#QIS)MOS~->RjM`xUKkSW00D*sdcQyvQcR9q62A&_2R#2B0RV zKY#%-306=<#(5XDq^+pYF!a)bw*Nn23H<%YZ9wMOzOeR;^+(@hXNS+BieT&J8Ym_M zJ+fWkBNlZV_Ly1+7I6MQY7i@da?y@KO-^x;S$qZ29i%My78tpd&xF|oV=W|XMW3|} z?l!{GoI_+6U)u4lxUIR($xqsdc-av~5e>-o+k1%aplUmEa1C_`P@a7arpJ&c-hF5X zaKfm_ifQz{knv*{m`6-XeKk;G(&HyM3C9H*F1c^A!jvkd**89gwQw9+Kx)q5U;8mN z+(E&(MT`YExw=cdw+kqCe41LohkBhSMRSWzq|RL2+X0W>?z2H{D33V&cvChh^zPlk z1s7t{p=vkE<05#fz}FHhag^hFE?o)eWwH>HI47kwONd}UvsH&RDX4Cxr|odx@6G3 z3r&3LpJOMynl|8nCm_x_UcZrf>Y9#CaQ0vP+2s1P>PaQpJx}MQkOnnlPX6hqo|hwb z#M{b8)ZYK;5d7W!CGzMjxzi_gCE1FocQwgQEMBuV8R-3&8ZD$XKV3ETv8{i(q>6Tc zk{P;OW4p7dG@kd2x0Ijr`Ae=}{-0<9y3xKYsZ5Tl<4o(n7WJ=kyqiZj8kyL zT-tGA!4WRP?sk*VDGp%mv`Aw!&VDXtZCHj%N=%T*?^WS3KO6$jBZEcKSB@3~kz?pxb&PjU;0dQE zlYv6yKC4;m4oHPv*w6EM5$V0iCKSB?2ahsK^U+?OeM~=a$UJa%mlXma%h)qTNtTR= zd|8Zp~TFJQ%s4IQg$8jA1r9mLZJbVlZFO=|Qq4D2pZUolSz7kwQ zoSR$Uy*{Z}C|;YGff{jo4W5-bz1M~vMjjuNFcz}NaMWppO#vO!mtWF|5euojO)~?& z-Va*z6+Xj9u6p-AAvWsi5L;U||4SS6*`M%TAT(K){EgH{>12QL^VKM?UK(4#{!!7| z=ri;vJrjFG_&#m`Mux((A_U+Dtq-{chXNWwa#tTzW6yv#=>mjR9#p#E*)t=zXfl0qG zbpW#uRWX%^KieWI{8x<(u7vcuccY)*Amo_ReUFu?Yj4s8l_DSB@~s?S9cF#Fu>oT; zs0KH*eVhWFoR`REy8(Y8*~$lpAPiE6fq%_9u)(N4S8|}0yHVZpq7R(yxfBk)1n6Wz z5nb6CtTQL$a?LcDL|aq9S&(rIwpX(e{f~UO#lGSJC?r`%*K-h-jxdO3gLeJ=0YA~} zNt`+vzk>|a>|wJuWDN_rPug6oJeGrL&+?q*8&UTYu|d3>&J)-fV3KS$NBrzFLj@EI zwg_=JA{jf4iBenv##R?Dyda`U7y{1>vKKd6owUxG8Mooo~P~Wp)Z)*M!_R_(<-tTk3=N2*o{T^U>J_m?1Ct69u-xQI!ZTz1kixCJD*SPZU z3%HBRj#+$^YnBq|13!Pg5e@A-yigo#+x#_~{HfEo;OffMy;BKuv`66SBAa|9NLnP; zE&*P@qHiiXxZAJIr5piAwL#$m^t2>%Qe604E+L#H3Y4< z`#qDSd%fe%*>9AK9652cepJ@1Gw5wd0cN+H=`LmvI{n8&9t60^7oNs8yH zGgp*L31yu>v8D)?m3f4HCr*eam_$FUQfE6MY-$Rwv~|Qr28NwHtL@=-GM{>I!}Ha9 znbm@z3-8WV81l2siIg*L-}y!-^DjdCn(Su=mUr_reB5*X^32yS>@F&>LeAgUxp&uI zkJj`&&zeo&-m0PFt}JR>R`?*%?A$b=%uko-JsQe_{m-SYvcN?!0iPyTe*MZ&lzE&E zGpsvl%%8G?QkD0XW~Gl zr)=dgKkV>o$ROBz1bmQ=6*DyWe7;3oTW(HPwrZxR7;oCw5ewjWl_%aL8%O7-;;*NY7G2!biVTG>~CzT-DMT;}>Q$W{JN{_kdGD zAk7U90{dIBP*MHjM0KTd+s}h*dWJ+7ZiENFhcO!qF3hUuRp}{=V?Zy{U^ouo`BXRVXuTx)QZwY}9KfeA~7q2%w>VIva#qPllR9`!DcRp|y&)`~h8RUQ_lNrfI z?#(jah=Ep2xau6Wd#4_gW8w9fk4(m!UjcK+kW7Ex=RF{n<%*esyeY1dur8{=z0OO8 za~s1{vj)+wxU6FK-!DX^4*mMmD{nc*7NT<=z7KFXQKINsCbFX znh_+_X7jIq7r_2AI;syzKIS&KXH*Jn;8MO|S%ccf$?rUHOOqsi zfpz9N_tB~F!@8@7PnT(k=klIo{=Rq9A`C^+?oCv6z^LquCeuA^M&r0D?-(&JU@1Q1 zkc9R=(g3&*qFk>{hM;13Lfjdck~DJeoQ@=XP}s59x_9$hhh!6v70F;7NhDM~-m8iJ(UKILPr`@A z5%a9yPkJj3|cNKJmLdRqd&mvOo%_r*}A9lJfZ4zZ*l%4zysK8i>?q%aLpbBkud ze6UYW*FY4+A|tY5y>gxQCK)GavaO@S!Nm&il5~Yqoh(VQ#~^PG_ZkvMf+j*IoNH*w zYsUV*( zjrry>=UOxM`gL>_dRtU(A`-Q?8w(nyMplb^7hoWGtqvlZ}_f=(2ISoE@?q*LTxERH%lb4?Rb8%!XKM>J68Mnp& z1%A`n{qluNv1eC}GT62#TbAtNXD{SE3$}r^&;?* zBSc}*AAeuMFdB`8s{WYm2>!wTb{hACv~6P(=i!b49Y1Hat$6v%v^K~^nEQ;M7_(wl zC2qfHK4D$@vq0p9a&oW<@Y6z#ssJf98%msXG<(M}f@ge%*zO8}9M+!F@k?!7H0%0& ziPsvq>gKTO1~4sg3sS~)-aGNd7T@V|7sDXDn&d_<*$fM?%9{k^?Jdj0MU?q8w%zat z!NI9<@wkes>-WpRs_G=iS{k^3j5NBPciFmjai5Mbjl@Pe={D#D%nXLE^b$MfEw{=T zHFB-aXfs3V6q!3u+XZ5*dQQaTYwL0iL+pb;rMK}5`tecbS^s(9=CHHGk(@DBer!;y z7_#*nU*f#kPsQHGH(s4MXZ`6_dzG4aNFa7ip6V4FG42q&LR`P2+Y_fYoZS1v-|QhJ z`~(lMJE>$Loiect>6tzv4QO{v?n87ZBVbs@K42QC?|E(!x z`k5Tw+Ex5`6f(_5(kTiJjb4IE*Kpf}4U`b zWyJ}r*_!8nt`3&XVRitv7<4*wz}32c{?t(!^2bSkt7$|2pjjqRj%l}h<~s(qCS4s% zmMw6etA295VEqVhmF}7_jn#B39&iZ#pm7{A$N}0OW>jkwq55$;!w zDEyaUybb}Vz$IzpRzw^-m_7!#kO>Wr3st5=^ujEaH%fKXJvpK#XWweof6@Ai{T$3d z#PV?x%-rq}&9Ll1mgKZwWP(I27$3I?RWD_?C6mNuCbxAo;6nmhZ5YUXqEWx%%sAa! zDdKj>PAk58whuHQibNZ;mTyNUBc&yd{BVK!vzaGeg)BP~+g9X|*+2!ohaFr%-JJWi z+ZLkF%kmnh6ZRx_Rj3ofFq2@5zOv{oKY|Z@qlM*z+2;U%5=f&3tx(tC&i2Ub%Q=fOq84=Jy>(w3_y zI@q*cl{Ekt>yDN+r#MM&t0B&K913X1xN+;8UG69aw-PjKCnYdwivs90IjE*Te+xdVi!YI};oGq1y}J#}vf zvH|BG-mb~VJYkpDUJ)wvg_W4dfP9QA)d>W&wQ$1aB{DV~uOGG+CGkQvmD_Xy8cM(e zvFFoY0AI*6VO#A*N_j%&QYZ+4B|ac!+zz7(Lgzy)M7?t_&)($lA8(hTRWFIZ@jxQM zTyXm1(hqdr4dsc8Sgy}DH6128Q};EgN4#I2NIPFo>Z#iOuZFua!HP35 zC0yU|ZXQu9Ue5BQ>@&4U!+Y54@_J7w`3ELx?>%hh3sQ!Tcd|5lu8kMQf?dLhR?i4k z0{v*aPl~dTfVX9)D$PdgS1Ovr5(aTJ9n?lh;Or9ty#}uw7u5#>%SL_fBJ=^ z)OB&wkV)*TD<+m*)NfO-b@ApryyyePod#@k0SMVo7O^Xym(jQR18H>(|?%VV8Yhx&5{7)}RU5 zIHF85l%nF{xg)8x(Bd+TSd6d>>>vgECGH!Oo>NAtWRI5v_0@Z!rtY_Ev|FbdF>_`3 z8*m$klJ?MryXU#LG=N`4d#skgTNvdNeNG_v0T(039hHwG18(Nz?8~*1k`CzRW=)Vu z!Y#ViGs#R)Gu>Axy#b|wfOCgmyf=eBLlSf^sK+PQf0&nsZvqh z^Fi5aH`l4#$INGde9akiH>uzLu_QE_W0Gv}^dmfhxE@Ys+$k}*g53FzIfdW}-^BA# zzZ)J2BZ3RJcH4Wa?rVlZW@(Nlx98nsg;StBFzC1frthBP9w9pf6x^_UA0?zsM4b#m zk$JYahF*t%Uc4r__hTRb3}g>USvX%57RyLbBdVL*4|xc>u#xZyXI|Vq&Ld~OeKjT0 zrb99d>?uvo^vm*XQ32}rE~Scfxok)uPt+9?U8+0mwi?p6&8)PzjEF$Q;A!+AhqY)t zLT7~%<(DCm6G8H%q=Lhk-d-ynNnTc&b^4$fiK_iOkDFMyi<&%8c^Au^&r`y|BS29B z{Lw1R@fB}uM+cR^nO(fGXWXtmUf1vU7g|17d-<=<$Hp+I-D>X-fn(iyccw1|{}+mf z!-a*+m~dsVi|VOcb#aU7Wd>pLx5{?74gcEOIy!*1uJ{+wG86ULlyt zrsttl+kU5ca`*H8SA+RT-Nn#*(>cI=OILI=w95pUp(14t-y{L0u!gCtx3$q*7crcc z+SVB=IPwkrvWJvrT91Em-Zm7dvWd570fO-!_0)cCjwGgAwH)w-il;^@_dY&=7rSwF z^y>4C^PRd$FINR{m&b`%B-TX<=n6#jrO2Fc~;#mCxP@kWg@c9*vhnPxVWBz z=-vk^&JU?NuW<`02e+Q|(cS~6Ji^s3rM^Uji&xic_=(vWLi*)@kXW#)5kYPR=@Ree zAY_FKo&9-8VucHSTbc}u88%4$ei8VovY&((#&#SD88kiv_1mJS%!LATby|R>&5LrmiN9i)`7|_VB)|WBe2VA#RdR=t7M-iEON`=(gC0npdJI%fv{8XS z)<~jxB|qI)f9$gpT&Zw^fU@cm6CAVhtyQ-EIXOHgYSdHE3CL&oPg5QcVXf_M{~9Yeu$0hd4&dFu#s7aWq&UyOX(^GA7_)SSB5 zL!nrgu^&9#Q90qV*>$-Ug(4)UX;&!c`XB21;!^l3*g#; zh9Suwt`?zFp<1B+;REtq5cKs%QdQPj5p@#Lc&hqxKmwBeZXlzHj^4-OBu86h7l0-- z?Eeiu%zx{>kp{Xeo(S{JXCjQt1PkF~HlVeq7_UUXTuw8l{oLsB8&hX%&BF^*({=~8 zpU*i@ZpUezx84*X9@>#P?lDw8;fZ!WCBjnw(MNJt0(PXhPy=n^(#l~OtdoSKR$6oj zoB>0gG0Q>FFBl*l-}wI*cGOw!MFup{6i~JC1{%3iWhDbq0YqOiFZjh8D*{u&LwXf} z_G>l`yb%Nr2DT8SFH0yG7>Yy|^mxK2-N1I-!I2<0%uVE{d|^+^a~75c0&sz^{QVWA znhP#hc=?8jm7)VH&EPhkU(7vJ5goioD%!c#22C9PT$P>13~OJ`wYg*5bEi2m8cHRG z-+#|NxuAW7xmO)p!QXMIdYy##(cPgx{bzr4AB(pQwmn~+9K!P-3e6zxa|FqT>G)) zppJIp`kU^qXT{7KF063s+^odWK!Uef%oF2hK*jr|4W?hWeC1hZS56mGJ)H{eAB#s7 zSkf(;cP+{jrpzk07sJM1bl6TY3`6`~UyC2OJX}B5rOXr|*5t{tp?CGUb*PNGRPG~D zxCXZS6-|*{zsCCdDa)TgZ({^Y@m_ft5#+T$JO&R%Z_&s4XT|+tsA|y+b-ZAaY_bJ- zC@F4{X-gvvgv`Uyg74L1XJa|Vzg?J)fx|bLWACiAP3?{ONVs2hCZ-?dngX-2!YtAl!5xn#IXW zf~T7U4I(5_cd0$Ra!SMNYe{jxl>*ZBet8R@k`L+p3y0wrXC$RUdAREVTGC1HdzP_h2GcGoOZo?tV%&@&2G*HNA$m1KePeywIKv4-Uqe6$Xu2E*Rml)su(Rk;$bgLO z((*5`zGq#nB-%}zsh?KN4{yeZCww78>p-;S+itW;cH~w+fxF(zG}NDU^Coid8P$`y zD6D4~$a5+P9~o^=8F3x^)NLbKtd#JM1@3mj=bdpfG-T2GGjX%OZ~|$#l^oBP4PVUO zqK|?@$~(nB9W)m*uSiLcXU{aX?&A8{E3|W2#I)`zZhR$4h zq{+A(l(KGg{<128atYD$4})nrhiZMhw4(14qC`{yt$u&dfxFz!2o4{$V%TZmcQ>E^ z;KhKLQ{wBQj&7HCW=G4nx36E#C#olSkLiobQ1H!H7Ry_LxIstQi4(~2m}$C?TZj6= z3j^ce6u%dmcm5ax$DY3tP9>-G7HZbH1(965zYyo1nRk7CV~Mhr`2aNVUR(w_gSN(d#6)<)DKIZHi*nX6FjjVS(Mc#WJR*`F3e*nHc=P(Z2!Jy6v;4fT}2U}t$ z6!p(a7g&9ZNl)yKf|!$JM9!ru|E2NyoiXHaUBx%;Y``uV#aNO3=os3e;9_->o~`gk zXo#!g?yR{2P+)*^_gAc_#N0Q&l)flX=eybe4}jd>=MfMf$-fY3 zytU-xLOd#bxpU|w-@Y0vLv)dUoLa|}a)e9vZLiF=<&oc;ed01~$W$$XkPmqM;t@3i zBJG%JY=qocbl>k%FdU@5FDe8~Ue*M?P!@J*sS)$Q`6q^v>{U%Z`KtYA%)2cF62Tw5 zBSS1=Js z6*Y{ZwzsynQRb_dIbhAE_8)>tB_N5K!6~p4hB=-0` zJ$P`s1ap4Un`};TsepCJeyN>n;7yFa;QM__5bzzaFpq@i=f3+hQYS5eD4V5SoVPa; zZ+p}N3lxXFugV$axXsG45se+*|ab2+Rv`|J94xR4>}s5 z4+S(n6sI$0V!Gb6>U+*|0mH7B_vi?3B1Z?t z|GSH|8+megbc}I4#S-s;Z^WehXzz91F9^6Rm1KI8=Sdj$|3YgPp$pw|gb7b>CYJ%g zHvR^pRlhakIF0|S-rSPD^=m3|<386MGCptjS2H!6(~;rjeT<}MN^ke2i@|o$VTT-k zlHK7;ki?+uNK)^^l(T6c{^0w*w#xy0EM3U)E+z`{g*&>6`=PZZ=p&kR1pNUgtMYcP z?E?MT3}87x4X3tNyKxiHdNE(v1ubZo>V055J20=aO`N=zZ>i>;|2!quc6u~IF6n^) z*%8LBxfEHk9o2BA-)>M?#ifF|c+lah_#_^ff~4ns__SXsm?c-apf6=Q{;3 zVOeV_R|9UwFxLFtfNQZHDaoWU*fZ)1=CIeO9q(8>B;AI0BVXdfDG6Pd)=b`r1g zE+CWU!y*IoRh`?$r_=Z@GiA`{?CGBms&Dv@d@;W^YX0YAyFa_?D6?UfN8aXH`ZwPw z$Z3zgBt-207OdEqOImm*7N<S3Sm_FIaLDYVjz1S8e+ z-!;c)WA?syJZr{1_xLH_8aDU51G74FEuQ7Uug;bD!?q&hNF~eG3WFU}>y}AH>zvh_ zLPZk-ElE`Z?)ML;m9k>B>T0puCC@@#p9A8h zvxUDHtmOKK@#)@#Dq$8d9`)(e1^_j_uHdWH5P5n_KsoMeYEx`F4}}YZ=mB!dJR$^G6xB{Y7sL( zc%|SpTFl|*V?Jy8Kj4gT%dh&6vC|nKBhP~8!uMHJ~1z3kKD8qL(pTG0`$w2xVGXw=cMw)p{JF!3(lI0Oz&fgjt!x-tAL8J84IQc2&nY#2u0FFf zSTUZAs_zWXNM|)FlDTqg-@xuSNylLZkjFMUpuJG zWw%;}UWqzZ8-73bqoAf-I%U8Evb&W%1(o}?)0teJt_g70wI{~TXW#pp14j2Te_jni zb$`I;n$wa7Ctc~%j6kOIqWRyC%)eh>{L7+qZ~JI2($GLmHntf%i(gTJxqzaXIa;Hf zo1wHg+!SE<@Ybd$qLek2c0V_Kiq?>E_$s&0O5s!_NBBaV@LU_T~3L0=2#PtO=&nLd9IPFpJw&$m+7t*}o7Xjm@I4X$mfs zXkP%eFs-Nk-F{qf}msdJ-Hb2EB?GD1IsC;rx`*+ybS*a5JJ_XUN=DlZ0(cW%j z&Hrfs#*aJXgX`)S3NPNy)Tx6pv-q>bKG7Xc|5Rehef3nGVnWvR=CLmDD~og}N&ZF& z1A`E|?hNLwHW^iCMnFZD_gLV#_tE!XEeL&p5x;_*gz%<8Hj(aImEH3nwBCu zs^OEed~>?&tY-wnf<)~*F~oH$72x3gPD*o(7hJYy-D6 zmJfKrRyj3rTrUDNGmAZD!S3+ZWgZ&@oudw8QC(50H>4lR#_&8Pp#F49z_~HL68roA zmx^zNLipQq3*cjd0O}4kXU#dX%c<=kX!YT)_YiQ+)~jav(F$IVj|co0=Wgg9;yL z*hP*Yf}Z1Lm7KX!W^FAsYCE#3vL*A$vxsEXZ^rCa4ylB_jd@dEg#Sb|yb;WDsX>O! zalqq_!WggFS=6aqb5>&rj;xzpbnQ5Gx!Shl?C|sPW|7@94-a+U5OjoV0^dPyj#*O! z>cz1s2_A1UmQ?PfBm1OX}ghUpHY`Y+9n7|Y;690Kts2`h4v z*iEudcM0)uiub=y24pY8ez|1gA`{#qp^{W`XeJkI`$U%hx8V0jj!~@;bEpC^2)Zxs zx+U7Rh>=tM_-Y)>aA!fV9YY8kLAlaBmFZpbebY%*#Q1MB7J39j5et0NQT)}0i@LCm z@No~AVY~5Q-z3lkyNl94Q@wMXJNECY8%Kmo9beWq;-&d94{kEAgscxf9?-~8QDF15 zutINhec{&m=`xt<7%%BE19`ARt=*MapZNcn8meI)^Kzyaj$uk?uI!L?SzmrHL3i7S+jozo5zFP_brXO zx3clGi*mJ3BqFxfd7?8FBHA?rP}|w{i$5|iCl+Qfx!ewqmR72Sc`|4ALy8Jg-YGtv zU5>zaKa}MYmQHAcF~<8CLt*?!zuQ12i}zh~%9FoPtMTJrQxfVokdQ>|tlNG3qv!M{ zG#*?D4ScGYEzSUx2ytIxJXh@2fWHk~`Tf_))b^*Av-qDERkhX$Fgo`tcV=4FnIYio z)sBhwdfdz(ebG0%lLodjEp$38E>-I%iW*kGbpJl{7kEOpGew{!R~ykBD>YnRaR$B# zPR{+ePXDH@S}qg`nWdF2%4^MV|J;y8HoI{pyJi<;!`1hAcrU^CfWfq3K~pS9aom0J zRyUaERx7;<2ssQ#*bq63}10X=bj`zLdNA3zfArR;Xr21mhICk6FdVV-(U8+ z*mH`RgNX9tkntG@-5ELb5sX)Cd!BvZ)Ux~6L+k#4nKaK>!CXDc*EsGKzdMyQ{Dk=t>Rkis-N6nJ(c8p){-I3%wX znnjGNRvpm8^`!Z(+pA}K($3TrBje^snSrYFj}i%E%@{$-(v|-jIt<@d!Xc_3I}kMv zqMg(kjqC%Zu)NX;aQOwB&A&o|=RAwhdpP@VH!XV>rk?8lYJmCA$j)LP3`hkjFW$QL zS=rjtyxdlV!&+0&{~@u&^a{zv^))2Hbh@Tv)usj903G;Va2cpwMcjt<6R4=}ntkq! zy>8#+wfa}s)~FssUxXm176Bit03%0Fiq7dcHNDS|RFago$2srEJ##rB2qP%po$^ys zgtp5d5HaD7$774^>8U~U2Z7r!I*}B=?uxS!b0q8mDBpJ}F?Ufpy@Jzokgbot;#?l~ z*j;e8p8|#Pe-OLTCwnRDYOM6gWptHBz`$oOvL+{u>|J2x-OE?xYXoocQ@l#kv1`x} z2MN_>8!!Uxz4CY<^-p>aOJNx>KMy)juML#LEMp(xI0_W)Ego=POQ>Z<{e&HdQlUnd zk6ih8(kx;gC;^Hcj9qOQ1peUpILHFs_+oMoIx3arUuD-aB%8czfiVj}l0egiWLhL> zPNEOMBjvkA^gVRBy-F_>&ygM3pBzJ(=t7@`>t02)&oeTfsF<-T3rE7}#mu0o{rV&K zo%hirZJbWZ&IbCGGRM$a0jml}uG$SbVl%Ebdd1)^UtKckGWHHg#oXAb+j;kjL9+eH zNaAs;<$?KtU_S{k)VmylXKLN*Qh2j42s4Mn4+L5Sf*|U6|4jF*k-WBx zqxFjxd+hd$h?@QO(`ixt5b64LEO|aT_Kzb{_eSvC-bCzsx!XT0PeV;@GCzgA27x-s zMjP)jup8jiS-cQ@Q^KlXrHVgEM}ZW`<3IgMV+o<@-N9rz|( zuK1&=5iTee0!ajLuMgOVA-)&lF(vS$x5}V4#2F z@H{(Mz?Z>&P`zb^YjWg+urVqiy8%MzTG;18qxAb|;nS{MXJ11|Qtei8`ROif>>6l> zeoH0~6u0-7POU)R1}941+0wU|`X2eiNJ3f$8MmQ9`|g!>ny^%1Rl5q2HLHqg3vqf( zWcGoyTeV!FQb>$lzdT%a0q@oT@C~_JpgBtP(CrTi$4a+$2=xatc3KE7EuI1QTcUw6 z_Y|Q|w)*jKJ78BSVdn9*s%pSAVoKhQrhb30cM$VX>h|VS^iNC1rOsO4ySK6a;HC4LjRU^o{^ zgTA{?+8S&A-jTd%goHgTi1xHRW??f*0rHEx;5D%43&~f?gWo<&1FE}#`@|SCl@s~L zvE&5wC_wuA3PKu5a?B$`Gr;Z$yaCqh^-O46;hpb982aVQv3Qfk55_;~sC(KV{osrg z=rf`!L>Brs)A+mY|A9FOO@`xSq?<^nC$E)BW|o@`|3KfbXz#$+Y~xx^gJX2@0=+Qt~tNO$#w5_Im$ z-S*@s`JA^mik5SfZ2ptW(XZzDp=4y0xwvFN`EMU*Ns*7tTyh|m78d_F@tgNz-%HiY z0cnzM;uC5!Ow-J?l<4Y*!&H#oW&xSC**M+66Z ztr1JX&^8UqZE$1sq|+yy+H`Ua0~~UEQhY%m^E&R8poh=<@ah|%STv^fI)}VA$M&%7 zW3Fl{=hI9&`y$i$&;+_##Xsqdm_)0jY4Z`+iNKiVxIL=@VEfN$qhuM9&6q$iD-#hY zl4$d{{j;P#&;9VI!*=L#mlpVEVRbq!_3Ri;YSrPwzk4Tt(I1+LQnUlj0zJIj$ls%t zl2RWC1v&%@I?W*`VMxzNuKqEK zwnz77$Cc2jH5xUm6259D)*#1I+x{+9PR4s@lD2v?%iSPwJ|6ozx|@d+pGoHnQUQen`UPa8RFODimm`quqZgCEmq|Zx{jpG!4#v zsH(v8_b|g!mj)V!CUy3)1bk-b>{vMrZnJ1kk6ow~_TxbwjttBhI~{g}DTn`_N-X}s z3_=%P-Ws9S=wO9KNgxPFNW?s&@~bsA`w=i_CTlZPd{6%`b45=yp$KWSvN>BkY}nko zw9EQz8WeHS7A)=zz^uxO`F?Wk5?=r}sdfF!?}u@{;p94L*H>jdwH zuXtQCf>Dg*KB*gLiHCp7d~r=w7Y?GwIyF1|Zf6BwAo&^LauMiUk93k;?G|PP$-e_& zjJm@jpB9$?(;G;ZL1LZ=Ti165{*Tl71bon6|7wqu{Cfa}`v1(LmbdOdIYZXIf+rs4 zvSQ{&blRMp1kssC8sBD(aIfxExQ07iN+6rroX#U-dK^Cc{Q@4YPmFgX6~7#c6OWIe zN3xas)IEQG1O$-0wnarE#7}-VBUo${r&Io%?OV+Oj=vc7ta|Q+I>4gG1zb*^;!Jh4 zd_;cXw*Ja?%+hh_{_4Refb22K762m-(+r*ctb43ZbU|+s@r11ZWX(&vgLZh?1(X_b zzMIj|bjl$)m1u|M_jLdO(jntS02M6LRx^jMI#EA|KHb)IdGZhw0iIvq!@T})8xw7K z*xbEb<#fW0G4|LR>&d%OjG2Qp76|78Z`9rMl-w5Gr%4W7(gYimGt6MvjeH47o|HQm zW&5kKpit)R%itZoxNqM7t-t2v$g@jrBUmw(R5dup%|(G1Tdnk;)^4g7s~mO;PIxuY z(#*USuEQ2ph5o~zXffz`e;_hR z+VsaNZS-i^!zLJtzAy~ zLOEMHw_8}(rGE!b5>vD}10Qo^3Ydq4X#aWGGhN(Fo9v+46HIe-OAlwa4GHR_@Pflg zP*}Md0oR^7u%Vb~5xKVPz2(~L8rQzAd(Y>0e*bwq{CUqk_w#wbpReZ&wpvg)guaz<-|IGv z7v&CYxn*807*xKV8Fgb5v2^a;$PdL9PxMQ#Jv6^a#TWFsZXAG#btYh5V6dBDxZ3!u z$Peiutu!0!AEPmSkTO<(U2E*;uJZ1$=lxZIh04MrMpTD#$^P;N^pcr6d15I^=S{Nt zC2YysOP_Bl3qVzW@~{btZbr)NUf!l``@!fLwDt0BkhIDTEPTz7s0!}srS!*#R#XM9 zUvU;jkG-#m45pq3&t`k`CrwWNZHky@^9M@b6ids-)62NeyOVRzn$RkWIG&T2#<3$IkGCLsxdsEp~*;+&!h90|U1bz#w^Fb^;H@15At`)|= zcrKCPEs^cB`5?t=o)uA zx0ml;n?a|CCvpBU&zFc6Ku@E*Pnzb+sPAvG1|N+Ao)K3nUMo^wqUixk>USS8Etd#e zFIBUawZ}qR`fAhlw9TLvr@FeiluXo5rX_wYuRWSLd7d+{pz5Pwq;$SZ_Akqe+<0nW zsHSj7mFh+A;tD5!g`aT_CqkEzsOV!?d*r3)w$ZuGW>o&zc$J5&y7<@hUTyyRueF+B ztAy``bd~fUKsyz^4 zE8SLoaW2zyy9V@7UyX^Po4s=S+&|MHFXfU)&+~m=-^;-Qu`T`1$J{U4Lf%iK5dHx* z4Y|3rfO;R)40iG{owLr--kH!xT>7LQy(kijg?bz?%$beoDNfjB2xQs~SDi&}TZd9P z&%By?j-XI52J=v=x7E*+XJ9mOi;Rl_93w#1#=ZAExHvxkSkLUD=n)SXOFyGvv{VXv zT!jgN*c1@KGz@q4T)tm_4RwaEbju-)u~q@hKUc$h=_dM>1v~vMI1~{>=M;?E+ALP_ z@yE?GGEjr(X_WXnerDorh_?NL_jKqp0N3v=8+HP4QZEwrfi zOxkzGWOnxE2`_4a^w_K~qVA?U7VKwSWxd^}_ieVxK4oV&+n#~Kwn}QGV17m|o@P75 z&7uQH5pd6S9?~2I=L-U~V(s+t=Q71QHV&a+i6iC1q1JyQx*6;x8Ga)a3?W}M@0t4! zSD8N(Y}bm@*e7q%f0R--8P18lC`tR#`s=Y*!9qWEK_J|bD!Ev~mH5<}>ai}c6z2nuIQ3yoY=zOFq?RX}E)o9yl9xY0qR77N zCP&xVW`)*kEH-jApVseP?bb0lXgYfm^wGx$d{BJ$pZr;=3$WB*JSn&?o6YfUe7??v z#O7JHJn0Lf5kCvASp;6vw2NwZyPZa_G-{*K2e(%dn;_GRe875W)rxa#5Fs7Z;Y8*|jl*ya>VXf6PR1+p5u;{>8~J0+77|5Sc%ANO zUPSKGcW%bfS2@@@8vHQ&9qnp2S5WtPgfGIg8Mmt`TTikQ2z{`vJcFewZ?TPhSBhZR z%XqvJN-TWvCd8=$o!ZavHCz{X-Hd={!d@1aiQJzn{8uwnc*SM04g+^zEj37~i~N4F zini0z^W%n?NJHDqg}`2y#QHmQ9hDwNR8*D5iws_cU5xjCh#;!nJ(l?{K)BTAw+@xd zkcrxj>5+K!kycZj_1D+Q-z$g?w^WhILGN;jYK{8eYt@*AYzcu-vD%v}pGwr-B7QU% z=DKPGiyN1?ryHt-sEiIy+SDlpn!Npxx^93!4V(6Opk8|pX%~fQG4*> zNl`XgpSL@EboUGyU2@U9Z881zkE}LPqubOdnkODc>x;TE(y0Td&;%$XwIcZMe|