From 41e2b26116800e3caf87b9c63a932e223f1cf43b Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Wed, 21 Dec 2022 21:23:47 +0300 Subject: [PATCH] files: ref, proxyStore, index --- client/api/apiproto/api.pb.go | 1160 ++++++++++++++++- client/api/apiproto/api_drpc.pb.go | 122 +- client/api/apiproto/protos/api.proto | 29 +- client/api/rpchandler.go | 53 + client/api/service.go | 5 +- client/cmd/client.go | 4 +- .../badgerfilestore/badgerfileindex.go | 255 ++++ .../badgerfilestore/badgerfileindex_test.go | 104 ++ .../badgerfilestore.go} | 56 +- .../badgerfilestore/badgerfilestore_test.go | 101 ++ .../{filestorage.go => fileservice.go} | 27 +- client/filestorage/proxystore.go | 130 ++ .../filestorage/proxystore_test.go | 164 ++- .../filestorage}/rpcstore/client.go | 7 +- .../filestorage}/rpcstore/clientmgr.go | 2 +- .../filestorage}/rpcstore/service.go | 0 .../filestorage}/rpcstore/stat.go | 0 .../filestorage}/rpcstore/store.go | 0 .../filestorage}/rpcstore/store_test.go | 0 .../filestorage}/rpcstore/task.go | 0 client/filestorage/syncer.go | 133 ++ client/filestorage/syncer_test.go | 106 ++ .../fileblockstore/cachestore/cachestore.go | 122 -- .../fileblockstore/fileblockstore.go | 2 +- common/commonfile/fileserver/rpchandler.go | 16 +- common/commonfile/fileservice/fileservice.go | 12 +- debug.json | 64 + etc/configs/client1.yml | 35 +- etc/configs/client2.yml | 35 +- etc/configs/cons1.yml | 8 +- etc/configs/cons2.yml | 8 +- etc/configs/cons3.yml | 8 +- etc/configs/node1.yml | 35 +- etc/configs/node2.yml | 35 +- etc/configs/node3.yml | 35 +- filenode/go.mod | 1 + filenode/go.sum | 2 + node/filepogreb/filepogreb.go | 5 + playground/init.sh | 1 - util/cmd/debug/commands/client/service.go | 27 + util/cmd/debug/commands/clientcmds.go | 54 + util/cmd/nodesgen/gen.go | 1 + util/debug.json | 1 + 43 files changed, 2625 insertions(+), 340 deletions(-) create mode 100644 client/filestorage/badgerfilestore/badgerfileindex.go create mode 100644 client/filestorage/badgerfilestore/badgerfileindex_test.go rename client/filestorage/{filebadgerstore/filebadgerstore.go => badgerfilestore/badgerfilestore.go} (62%) create mode 100644 client/filestorage/badgerfilestore/badgerfilestore_test.go rename client/filestorage/{filestorage.go => fileservice.go} (62%) create mode 100644 client/filestorage/proxystore.go rename common/commonfile/fileblockstore/cachestore/cachestore_test.go => client/filestorage/proxystore_test.go (53%) rename {common/commonfile => client/filestorage}/rpcstore/client.go (97%) rename {common/commonfile => client/filestorage}/rpcstore/clientmgr.go (99%) rename {common/commonfile => client/filestorage}/rpcstore/service.go (100%) rename {common/commonfile => client/filestorage}/rpcstore/stat.go (100%) rename {common/commonfile => client/filestorage}/rpcstore/store.go (100%) rename {common/commonfile => client/filestorage}/rpcstore/store_test.go (100%) rename {common/commonfile => client/filestorage}/rpcstore/task.go (100%) create mode 100644 client/filestorage/syncer.go create mode 100644 client/filestorage/syncer_test.go delete mode 100644 common/commonfile/fileblockstore/cachestore/cachestore.go create mode 100644 debug.json create mode 100644 util/debug.json diff --git a/client/api/apiproto/api.pb.go b/client/api/apiproto/api.pb.go index e0fd415f..7c11b5fa 100644 --- a/client/api/apiproto/api.pb.go +++ b/client/api/apiproto/api.pb.go @@ -986,6 +986,278 @@ func (m *TreeParamsResponse) GetHeadIds() []string { return nil } +type PutFileRequest struct { + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + SpaceId string `protobuf:"bytes,2,opt,name=spaceId,proto3" json:"spaceId,omitempty"` +} + +func (m *PutFileRequest) Reset() { *m = PutFileRequest{} } +func (m *PutFileRequest) String() string { return proto.CompactTextString(m) } +func (*PutFileRequest) ProtoMessage() {} +func (*PutFileRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{21} +} +func (m *PutFileRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PutFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PutFileRequest.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 *PutFileRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_PutFileRequest.Merge(m, src) +} +func (m *PutFileRequest) XXX_Size() int { + return m.Size() +} +func (m *PutFileRequest) XXX_DiscardUnknown() { + xxx_messageInfo_PutFileRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_PutFileRequest proto.InternalMessageInfo + +func (m *PutFileRequest) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *PutFileRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +type PutFileResponse struct { + Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` +} + +func (m *PutFileResponse) Reset() { *m = PutFileResponse{} } +func (m *PutFileResponse) String() string { return proto.CompactTextString(m) } +func (*PutFileResponse) ProtoMessage() {} +func (*PutFileResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{22} +} +func (m *PutFileResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PutFileResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PutFileResponse.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 *PutFileResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_PutFileResponse.Merge(m, src) +} +func (m *PutFileResponse) XXX_Size() int { + return m.Size() +} +func (m *PutFileResponse) XXX_DiscardUnknown() { + xxx_messageInfo_PutFileResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_PutFileResponse proto.InternalMessageInfo + +func (m *PutFileResponse) GetHash() string { + if m != nil { + return m.Hash + } + return "" +} + +type GetFileRequest struct { + Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` +} + +func (m *GetFileRequest) Reset() { *m = GetFileRequest{} } +func (m *GetFileRequest) String() string { return proto.CompactTextString(m) } +func (*GetFileRequest) ProtoMessage() {} +func (*GetFileRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{23} +} +func (m *GetFileRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetFileRequest.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 *GetFileRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetFileRequest.Merge(m, src) +} +func (m *GetFileRequest) XXX_Size() int { + return m.Size() +} +func (m *GetFileRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetFileRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetFileRequest proto.InternalMessageInfo + +func (m *GetFileRequest) GetHash() string { + if m != nil { + return m.Hash + } + return "" +} + +func (m *GetFileRequest) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +type GetFileResponse struct { + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` +} + +func (m *GetFileResponse) Reset() { *m = GetFileResponse{} } +func (m *GetFileResponse) String() string { return proto.CompactTextString(m) } +func (*GetFileResponse) ProtoMessage() {} +func (*GetFileResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{24} +} +func (m *GetFileResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetFileResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetFileResponse.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 *GetFileResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetFileResponse.Merge(m, src) +} +func (m *GetFileResponse) XXX_Size() int { + return m.Size() +} +func (m *GetFileResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetFileResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetFileResponse proto.InternalMessageInfo + +func (m *GetFileResponse) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +type DeleteFileRequest struct { + Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` +} + +func (m *DeleteFileRequest) Reset() { *m = DeleteFileRequest{} } +func (m *DeleteFileRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteFileRequest) ProtoMessage() {} +func (*DeleteFileRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{25} +} +func (m *DeleteFileRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeleteFileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DeleteFileRequest.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 *DeleteFileRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteFileRequest.Merge(m, src) +} +func (m *DeleteFileRequest) XXX_Size() int { + return m.Size() +} +func (m *DeleteFileRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteFileRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteFileRequest proto.InternalMessageInfo + +func (m *DeleteFileRequest) GetHash() string { + if m != nil { + return m.Hash + } + return "" +} + +type DeleteFileResponse struct { +} + +func (m *DeleteFileResponse) Reset() { *m = DeleteFileResponse{} } +func (m *DeleteFileResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteFileResponse) ProtoMessage() {} +func (*DeleteFileResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{26} +} +func (m *DeleteFileResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeleteFileResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DeleteFileResponse.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 *DeleteFileResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteFileResponse.Merge(m, src) +} +func (m *DeleteFileResponse) XXX_Size() int { + return m.Size() +} +func (m *DeleteFileResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteFileResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteFileResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*CreateSpaceRequest)(nil), "clientapi.CreateSpaceRequest") proto.RegisterType((*CreateSpaceResponse)(nil), "clientapi.CreateSpaceResponse") @@ -1008,52 +1280,65 @@ func init() { proto.RegisterType((*LoadSpaceResponse)(nil), "clientapi.LoadSpaceResponse") proto.RegisterType((*TreeParamsRequest)(nil), "clientapi.TreeParamsRequest") proto.RegisterType((*TreeParamsResponse)(nil), "clientapi.TreeParamsResponse") + proto.RegisterType((*PutFileRequest)(nil), "clientapi.PutFileRequest") + proto.RegisterType((*PutFileResponse)(nil), "clientapi.PutFileResponse") + proto.RegisterType((*GetFileRequest)(nil), "clientapi.GetFileRequest") + proto.RegisterType((*GetFileResponse)(nil), "clientapi.GetFileResponse") + proto.RegisterType((*DeleteFileRequest)(nil), "clientapi.DeleteFileRequest") + proto.RegisterType((*DeleteFileResponse)(nil), "clientapi.DeleteFileResponse") } func init() { proto.RegisterFile("api/apiproto/protos/api.proto", fileDescriptor_fc31080c27db9707) } var fileDescriptor_fc31080c27db9707 = []byte{ - // 630 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x6e, 0xda, 0x40, - 0x10, 0x8e, 0x09, 0x49, 0xf0, 0x50, 0xf1, 0xb3, 0x49, 0x90, 0xeb, 0x06, 0x8b, 0xae, 0x94, 0x08, - 0xa9, 0x11, 0xa8, 0xe9, 0xa9, 0xb7, 0x52, 0x50, 0x24, 0x54, 0x2a, 0xb5, 0x24, 0xbd, 0xf4, 0xb6, - 0xc5, 0x2b, 0xc5, 0x12, 0x60, 0xd7, 0x36, 0x55, 0x4e, 0x7d, 0x86, 0x3e, 0x56, 0x8f, 0x39, 0xf6, - 0x58, 0xc1, 0x6b, 0xf4, 0x50, 0xed, 0x7a, 0x6d, 0xef, 0xda, 0x26, 0x55, 0xc5, 0x05, 0x76, 0xfe, - 0xbe, 0xf9, 0x76, 0x99, 0x6f, 0x80, 0x36, 0xf1, 0x9c, 0x3e, 0xf1, 0x1c, 0xcf, 0x77, 0x43, 0xb7, - 0xcf, 0x3f, 0x03, 0x66, 0xf7, 0xf8, 0x11, 0xe9, 0xb3, 0xb9, 0x43, 0x97, 0x21, 0xf1, 0x1c, 0x7c, - 0x02, 0x68, 0xe8, 0x53, 0x12, 0xd2, 0x1b, 0x8f, 0xcc, 0xe8, 0x94, 0x7e, 0x5d, 0xd1, 0x20, 0xc4, - 0xe7, 0x70, 0xac, 0x78, 0x03, 0xcf, 0x5d, 0x06, 0x14, 0xd5, 0xa0, 0xe4, 0xd8, 0x86, 0xd6, 0xd1, - 0xba, 0xfa, 0xb4, 0xe4, 0xd8, 0xac, 0x78, 0x44, 0x7d, 0xe7, 0x5b, 0xae, 0x58, 0xf1, 0x6e, 0x29, - 0x7e, 0x09, 0xa7, 0x51, 0x8f, 0x91, 0x3b, 0x5b, 0x2d, 0xe8, 0x32, 0x14, 0xf5, 0xc8, 0x80, 0xa3, - 0x80, 0x55, 0x8e, 0xe3, 0xec, 0xd8, 0xc4, 0x5d, 0x68, 0x65, 0x4b, 0xb6, 0x80, 0x7f, 0x84, 0xd3, - 0x11, 0x9d, 0xd3, 0xff, 0x00, 0x47, 0x16, 0x80, 0x2d, 0x92, 0xc7, 0xb6, 0x51, 0xe2, 0x41, 0xc9, - 0x83, 0x0d, 0x68, 0x65, 0x21, 0xa3, 0xe6, 0xf8, 0x3b, 0xd4, 0x06, 0xb6, 0x7d, 0x4b, 0xef, 0x77, - 0xef, 0x82, 0x10, 0x94, 0x43, 0x7a, 0x1f, 0x1a, 0xfb, 0x3c, 0xc2, 0xcf, 0xac, 0xc6, 0x09, 0x6e, - 0x96, 0xc4, 0x0b, 0xee, 0xdc, 0xd0, 0x28, 0x77, 0xb4, 0x6e, 0x65, 0x2a, 0x79, 0x30, 0x81, 0x7a, - 0xd2, 0x5f, 0xbc, 0x87, 0xda, 0x46, 0xcb, 0xb5, 0x69, 0xc1, 0xe1, 0x1d, 0x25, 0x76, 0x42, 0x41, - 0x58, 0xcc, 0xef, 0xbb, 0x2e, 0xab, 0x89, 0x08, 0x08, 0x0b, 0xbf, 0x83, 0xfa, 0x68, 0xb5, 0xf0, - 0x6e, 0x7d, 0x4a, 0x77, 0x7f, 0xc9, 0x0b, 0x68, 0xa4, 0x60, 0x82, 0x30, 0x82, 0xb2, 0xbd, 0x5a, - 0x78, 0x02, 0x8a, 0x9f, 0xf1, 0x0b, 0xa8, 0x0f, 0xe6, 0x73, 0x96, 0x16, 0xfc, 0x7b, 0x36, 0x2e, - 0xa1, 0xcc, 0x32, 0xb3, 0x93, 0x80, 0x4e, 0xe0, 0x80, 0xdd, 0x2d, 0x30, 0x4a, 0x9d, 0xfd, 0xae, - 0x3e, 0x8d, 0x0c, 0xfc, 0x1a, 0x1a, 0x29, 0xb4, 0xa0, 0x70, 0x0e, 0x07, 0x21, 0x73, 0x18, 0x5a, - 0x67, 0xbf, 0x5b, 0xbd, 0xaa, 0xf7, 0x12, 0x95, 0xf4, 0x38, 0xd5, 0x28, 0x8a, 0x11, 0x2f, 0xe5, - 0xb3, 0x1d, 0xd3, 0xc2, 0x7d, 0x68, 0x4a, 0x3e, 0x81, 0x67, 0x42, 0x45, 0x90, 0x8b, 0x20, 0xf5, - 0x69, 0x62, 0xe3, 0x4b, 0x68, 0x4c, 0x5c, 0x62, 0xcb, 0xba, 0x79, 0xe4, 0x6e, 0xc7, 0xd0, 0x94, - 0xb2, 0xc5, 0xd4, 0xbd, 0x87, 0x26, 0xa3, 0xf5, 0x81, 0xf8, 0x64, 0x11, 0xec, 0xfe, 0xa3, 0x5c, - 0x03, 0x92, 0xe1, 0xc4, 0x1d, 0xd2, 0x79, 0xd0, 0xe4, 0x79, 0x60, 0x7d, 0xa2, 0x89, 0x89, 0xdf, - 0x35, 0x36, 0xaf, 0xfe, 0x1c, 0x80, 0x3e, 0xe4, 0x0f, 0x37, 0xf0, 0x1c, 0x34, 0x81, 0xaa, 0xb4, - 0x48, 0x50, 0x5b, 0x7a, 0xd3, 0xfc, 0xda, 0x31, 0xad, 0x6d, 0x61, 0xc1, 0x66, 0x02, 0x55, 0x69, - 0xb3, 0x28, 0x68, 0xf9, 0x3d, 0xa4, 0xa0, 0x15, 0x2d, 0xa4, 0x4f, 0x50, 0x53, 0xb7, 0x09, 0xea, - 0xe4, 0xfa, 0x67, 0xd6, 0x87, 0xf9, 0xfc, 0x91, 0x8c, 0x14, 0x56, 0xdd, 0x13, 0x0a, 0x6c, 0xe1, - 0x56, 0x52, 0x60, 0x8b, 0x97, 0x0c, 0x7a, 0x03, 0x47, 0x42, 0xe4, 0xe8, 0xa9, 0x94, 0xad, 0x2e, - 0x1e, 0xd3, 0x2c, 0x0a, 0x09, 0x84, 0x21, 0x54, 0x62, 0xd9, 0x21, 0x39, 0x2f, 0x23, 0x6c, 0xf3, - 0x59, 0x61, 0x4c, 0x80, 0x8c, 0x01, 0xd2, 0x31, 0x41, 0x67, 0x19, 0x8d, 0x28, 0xc3, 0x68, 0xb6, - 0xb7, 0x44, 0x53, 0x3e, 0xb1, 0x06, 0x15, 0x3e, 0x19, 0xcd, 0x2b, 0x7c, 0x72, 0xa2, 0xbd, 0x06, - 0x3d, 0x51, 0x1e, 0xca, 0x64, 0x2a, 0x1a, 0x35, 0xcf, 0x8a, 0x83, 0x29, 0x4e, 0x22, 0x31, 0x05, - 0x27, 0x2b, 0x53, 0x05, 0x27, 0xa7, 0xca, 0xb7, 0x17, 0x3f, 0xd7, 0x96, 0xf6, 0xb0, 0xb6, 0xb4, - 0xdf, 0x6b, 0x4b, 0xfb, 0xb1, 0xb1, 0xf6, 0x1e, 0x36, 0xd6, 0xde, 0xaf, 0x8d, 0xb5, 0xf7, 0xf9, - 0x89, 0xfc, 0x9f, 0xfc, 0xe5, 0x90, 0x7f, 0xbd, 0xfa, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x82, 0x87, - 0xed, 0x38, 0xaa, 0x07, 0x00, 0x00, + // 746 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4f, 0x4f, 0xdb, 0x4e, + 0x10, 0xc5, 0x21, 0x10, 0x32, 0xfc, 0x94, 0x90, 0xe5, 0x8f, 0xfc, 0x73, 0x89, 0x95, 0xae, 0x04, + 0x8d, 0x54, 0x04, 0x2a, 0xbd, 0xb4, 0x97, 0x0a, 0x4a, 0x44, 0x15, 0x95, 0x4a, 0x34, 0xd0, 0x4b, + 0x6f, 0x5b, 0xbc, 0x52, 0x2c, 0x25, 0xb1, 0x1b, 0x3b, 0x15, 0xa7, 0x7e, 0x86, 0x7e, 0xac, 0x4a, + 0xbd, 0x70, 0xec, 0xb1, 0x82, 0x2f, 0x52, 0xad, 0xbd, 0xf6, 0xee, 0xac, 0x1d, 0x50, 0xc5, 0x05, + 0x76, 0x77, 0x66, 0xde, 0x7b, 0xeb, 0x9d, 0x79, 0x0a, 0xb4, 0x59, 0xe8, 0x1f, 0xb0, 0xd0, 0x0f, + 0xa7, 0x41, 0x1c, 0x1c, 0x24, 0x7f, 0x23, 0xb1, 0xdf, 0x4f, 0x96, 0xa4, 0x7e, 0x35, 0xf2, 0xf9, + 0x24, 0x66, 0xa1, 0x4f, 0x37, 0x80, 0x9c, 0x4c, 0x39, 0x8b, 0xf9, 0x45, 0xc8, 0xae, 0xf8, 0x80, + 0x7f, 0x9d, 0xf1, 0x28, 0xa6, 0x3b, 0xb0, 0x8e, 0x4e, 0xa3, 0x30, 0x98, 0x44, 0x9c, 0x34, 0xa0, + 0xe2, 0x7b, 0xb6, 0xd5, 0xb1, 0xba, 0xf5, 0x41, 0xc5, 0xf7, 0x44, 0x71, 0x8f, 0x4f, 0xfd, 0x6f, + 0x85, 0x62, 0x74, 0x3a, 0xa7, 0xf8, 0x05, 0x6c, 0xa6, 0x1c, 0xbd, 0xe0, 0x6a, 0x36, 0xe6, 0x93, + 0x58, 0xd6, 0x13, 0x1b, 0x6a, 0x91, 0xa8, 0xec, 0x67, 0xd9, 0xd9, 0x96, 0x76, 0x61, 0xcb, 0x2c, + 0x99, 0x03, 0xfe, 0x11, 0x36, 0x7b, 0x7c, 0xc4, 0xff, 0x01, 0x9c, 0xb8, 0x00, 0x9e, 0x4c, 0xee, + 0x7b, 0x76, 0x25, 0x09, 0x6a, 0x27, 0xd4, 0x86, 0x2d, 0x13, 0x32, 0x25, 0xa7, 0xdf, 0xa1, 0x71, + 0xec, 0x79, 0x97, 0xfc, 0xfa, 0xf1, 0x2c, 0x84, 0x40, 0x35, 0xe6, 0xd7, 0xb1, 0xbd, 0x98, 0x44, + 0x92, 0xb5, 0xa8, 0xf1, 0xa3, 0x8b, 0x09, 0x0b, 0xa3, 0x61, 0x10, 0xdb, 0xd5, 0x8e, 0xd5, 0x5d, + 0x19, 0x68, 0x27, 0x94, 0x41, 0x33, 0xe7, 0x97, 0xdf, 0x03, 0xd3, 0x58, 0x05, 0x9a, 0x2d, 0x58, + 0x1e, 0x72, 0xe6, 0xe5, 0x12, 0xe4, 0x4e, 0x9c, 0x4f, 0x83, 0x40, 0xd4, 0xa4, 0x02, 0xe4, 0x8e, + 0xbe, 0x87, 0x66, 0x6f, 0x36, 0x0e, 0x2f, 0xa7, 0x9c, 0x3f, 0xfe, 0x4b, 0xee, 0xc2, 0x9a, 0x02, + 0x93, 0x82, 0x09, 0x54, 0xbd, 0xd9, 0x38, 0x94, 0x50, 0xc9, 0x9a, 0x3e, 0x87, 0xe6, 0xf1, 0x68, + 0x24, 0xd2, 0xa2, 0x87, 0x7b, 0x63, 0x0f, 0xaa, 0x22, 0xd3, 0xec, 0x04, 0xb2, 0x01, 0x4b, 0xe2, + 0x6e, 0x91, 0x5d, 0xe9, 0x2c, 0x76, 0xeb, 0x83, 0x74, 0x43, 0x5f, 0xc3, 0x9a, 0x82, 0x96, 0x12, + 0x76, 0x60, 0x29, 0x16, 0x07, 0xb6, 0xd5, 0x59, 0xec, 0xae, 0x1e, 0x36, 0xf7, 0xf3, 0x29, 0xd9, + 0x4f, 0xa4, 0xa6, 0x51, 0x4a, 0x92, 0xd2, 0xa4, 0xb7, 0x33, 0x59, 0xf4, 0x00, 0x5a, 0xda, 0x99, + 0xc4, 0x73, 0x60, 0x45, 0x8a, 0x4b, 0x21, 0xeb, 0x83, 0x7c, 0x4f, 0xf7, 0x60, 0xed, 0x2c, 0x60, + 0x9e, 0x3e, 0x37, 0xf7, 0xdc, 0x6d, 0x1d, 0x5a, 0x5a, 0xb6, 0xec, 0xba, 0x0f, 0xd0, 0x12, 0xb2, + 0xce, 0xd9, 0x94, 0x8d, 0xa3, 0xc7, 0x3f, 0xca, 0x29, 0x10, 0x1d, 0x4e, 0xde, 0x41, 0xf5, 0x83, + 0xa5, 0xf7, 0x83, 0xe0, 0x49, 0x3b, 0x26, 0xfb, 0xae, 0xd9, 0x96, 0xbe, 0x81, 0xc6, 0xf9, 0x2c, + 0x3e, 0xf5, 0x47, 0xf9, 0xbd, 0x08, 0x54, 0x43, 0x16, 0x0f, 0xb3, 0xa7, 0x15, 0x6b, 0x5d, 0x67, + 0x05, 0xdf, 0x75, 0x07, 0x9a, 0x79, 0xbd, 0xea, 0x8d, 0x21, 0x8b, 0x72, 0x00, 0xb1, 0xa6, 0xaf, + 0xa0, 0xf1, 0x8e, 0x9b, 0x34, 0x66, 0x56, 0x4e, 0x5d, 0x51, 0xd4, 0x82, 0x20, 0xaf, 0x54, 0x04, + 0xa6, 0x42, 0xfa, 0x0c, 0x5a, 0xe9, 0xb8, 0x3f, 0xc0, 0x91, 0x9a, 0xa0, 0x4a, 0x4c, 0x21, 0x0f, + 0x7f, 0xd5, 0xa0, 0x7e, 0x92, 0xf4, 0xcf, 0x71, 0xe8, 0x93, 0x33, 0x58, 0xd5, 0xfc, 0x94, 0xb4, + 0xb5, 0xd6, 0x2a, 0xba, 0xaf, 0xe3, 0xce, 0x0b, 0x4b, 0xb9, 0x67, 0xb0, 0xaa, 0x19, 0x2c, 0x42, + 0x2b, 0xda, 0x31, 0x42, 0x2b, 0xf3, 0xe5, 0x4f, 0xd0, 0xc0, 0xa6, 0x4a, 0x3a, 0x05, 0x7e, 0xc3, + 0x45, 0x9d, 0xa7, 0xf7, 0x64, 0x28, 0x58, 0x6c, 0x97, 0x08, 0xb6, 0xd4, 0x9c, 0x11, 0x6c, 0xb9, + 0xd7, 0x92, 0x23, 0xa8, 0x49, 0xaf, 0x23, 0xff, 0x6b, 0xd9, 0xd8, 0x7f, 0x1d, 0xa7, 0x2c, 0x24, + 0x11, 0x4e, 0x60, 0x25, 0x73, 0x1f, 0xa2, 0xe7, 0x19, 0xfe, 0xe6, 0x3c, 0x29, 0x8d, 0x49, 0x90, + 0x3e, 0x80, 0x9a, 0x16, 0xb2, 0x6d, 0x58, 0x05, 0x9a, 0x49, 0xa7, 0x3d, 0x27, 0xaa, 0xf4, 0x64, + 0x56, 0x84, 0xf4, 0x18, 0xd6, 0x87, 0xf4, 0x14, 0xbc, 0xeb, 0x14, 0xea, 0xb9, 0x01, 0x11, 0x23, + 0x13, 0x59, 0x95, 0xb3, 0x5d, 0x1e, 0x54, 0x38, 0xb9, 0xd3, 0x20, 0x1c, 0xd3, 0xad, 0x10, 0x4e, + 0xc1, 0x9c, 0xc4, 0x33, 0xc9, 0x29, 0x46, 0xcf, 0x84, 0x9d, 0x01, 0x3d, 0x93, 0x39, 0xf4, 0x47, + 0x50, 0x93, 0x63, 0x8a, 0x10, 0xf0, 0xd0, 0x23, 0x04, 0x73, 0xaa, 0xfb, 0x00, 0x6a, 0x30, 0xd1, + 0x1b, 0x15, 0x06, 0xdb, 0x69, 0xcf, 0x89, 0xa6, 0x50, 0x6f, 0x77, 0x7f, 0xde, 0xba, 0xd6, 0xcd, + 0xad, 0x6b, 0xfd, 0xb9, 0x75, 0xad, 0x1f, 0x77, 0xee, 0xc2, 0xcd, 0x9d, 0xbb, 0xf0, 0xfb, 0xce, + 0x5d, 0xf8, 0xfc, 0x9f, 0xfe, 0x4b, 0xeb, 0xcb, 0x72, 0xf2, 0xef, 0xe5, 0xdf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x0e, 0x8d, 0x9b, 0x46, 0x80, 0x09, 0x00, 0x00, } func (m *CreateSpaceRequest) Marshal() (dAtA []byte, err error) { @@ -1737,6 +2022,193 @@ func (m *TreeParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *PutFileRequest) 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 *PutFileRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PutFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SpaceId) > 0 { + i -= len(m.SpaceId) + copy(dAtA[i:], m.SpaceId) + i = encodeVarintApi(dAtA, i, uint64(len(m.SpaceId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Path) > 0 { + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintApi(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *PutFileResponse) 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 *PutFileResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PutFileResponse) 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 = encodeVarintApi(dAtA, i, uint64(len(m.Hash))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetFileRequest) 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 *GetFileRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetFileRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Path) > 0 { + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintApi(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + } + if len(m.Hash) > 0 { + i -= len(m.Hash) + copy(dAtA[i:], m.Hash) + i = encodeVarintApi(dAtA, i, uint64(len(m.Hash))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetFileResponse) 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 *GetFileResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Path) > 0 { + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintApi(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteFileRequest) 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 *DeleteFileRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeleteFileRequest) 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 = encodeVarintApi(dAtA, i, uint64(len(m.Hash))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteFileResponse) 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 *DeleteFileResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeleteFileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func encodeVarintApi(dAtA []byte, offset int, v uint64) int { offset -= sovApi(v) base := offset @@ -2048,6 +2520,88 @@ func (m *TreeParamsResponse) Size() (n int) { return n } +func (m *PutFileRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Path) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *PutFileResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Hash) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *GetFileRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Hash) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.Path) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *GetFileResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Path) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *DeleteFileRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Hash) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *DeleteFileResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovApi(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -3926,6 +4480,530 @@ func (m *TreeParamsResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *PutFileRequest) 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 ErrIntOverflowApi + } + 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: PutFileRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PutFileRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpaceId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SpaceId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PutFileResponse) 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 ErrIntOverflowApi + } + 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: PutFileResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PutFileResponse: 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 stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetFileRequest) 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 ErrIntOverflowApi + } + 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: GetFileRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetFileRequest: 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 stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetFileResponse) 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 ErrIntOverflowApi + } + 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: GetFileResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteFileRequest) 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 ErrIntOverflowApi + } + 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: DeleteFileRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteFileRequest: 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 stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteFileResponse) 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 ErrIntOverflowApi + } + 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: DeleteFileResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteFileResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipApi(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/client/api/apiproto/api_drpc.pb.go b/client/api/apiproto/api_drpc.pb.go index adfe74ac..e3cc1c63 100644 --- a/client/api/apiproto/api_drpc.pb.go +++ b/client/api/apiproto/api_drpc.pb.go @@ -50,6 +50,9 @@ type DRPCClientApiClient interface { AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) LoadSpace(ctx context.Context, in *LoadSpaceRequest) (*LoadSpaceResponse, error) + PutFile(ctx context.Context, in *PutFileRequest) (*PutFileResponse, error) + GetFile(ctx context.Context, in *GetFileRequest) (*GetFileResponse, error) + DeleteFile(ctx context.Context, in *DeleteFileRequest) (*DeleteFileResponse, error) } type drpcClientApiClient struct { @@ -152,6 +155,33 @@ func (c *drpcClientApiClient) LoadSpace(ctx context.Context, in *LoadSpaceReques return out, nil } +func (c *drpcClientApiClient) PutFile(ctx context.Context, in *PutFileRequest) (*PutFileResponse, error) { + out := new(PutFileResponse) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/PutFile", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcClientApiClient) GetFile(ctx context.Context, in *GetFileRequest) (*GetFileResponse, error) { + out := new(GetFileResponse) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/GetFile", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcClientApiClient) DeleteFile(ctx context.Context, in *DeleteFileRequest) (*DeleteFileResponse, error) { + out := new(DeleteFileResponse) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/DeleteFile", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + type DRPCClientApiServer interface { CreateSpace(context.Context, *CreateSpaceRequest) (*CreateSpaceResponse, error) DeriveSpace(context.Context, *DeriveSpaceRequest) (*DeriveSpaceResponse, error) @@ -163,6 +193,9 @@ type DRPCClientApiServer interface { AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) AllSpaces(context.Context, *AllSpacesRequest) (*AllSpacesResponse, error) LoadSpace(context.Context, *LoadSpaceRequest) (*LoadSpaceResponse, error) + PutFile(context.Context, *PutFileRequest) (*PutFileResponse, error) + GetFile(context.Context, *GetFileRequest) (*GetFileResponse, error) + DeleteFile(context.Context, *DeleteFileRequest) (*DeleteFileResponse, error) } type DRPCClientApiUnimplementedServer struct{} @@ -207,9 +240,21 @@ func (s *DRPCClientApiUnimplementedServer) LoadSpace(context.Context, *LoadSpace return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) } +func (s *DRPCClientApiUnimplementedServer) PutFile(context.Context, *PutFileRequest) (*PutFileResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCClientApiUnimplementedServer) GetFile(context.Context, *GetFileRequest) (*GetFileResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCClientApiUnimplementedServer) DeleteFile(context.Context, *DeleteFileRequest) (*DeleteFileResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + type DRPCClientApiDescription struct{} -func (DRPCClientApiDescription) NumMethods() int { return 10 } +func (DRPCClientApiDescription) NumMethods() int { return 13 } func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { switch n { @@ -303,6 +348,33 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei in1.(*LoadSpaceRequest), ) }, DRPCClientApiServer.LoadSpace, true + case 10: + return "/clientapi.ClientApi/PutFile", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + PutFile( + ctx, + in1.(*PutFileRequest), + ) + }, DRPCClientApiServer.PutFile, true + case 11: + return "/clientapi.ClientApi/GetFile", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + GetFile( + ctx, + in1.(*GetFileRequest), + ) + }, DRPCClientApiServer.GetFile, true + case 12: + return "/clientapi.ClientApi/DeleteFile", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + DeleteFile( + ctx, + in1.(*DeleteFileRequest), + ) + }, DRPCClientApiServer.DeleteFile, true default: return "", nil, nil, nil, false } @@ -471,3 +543,51 @@ func (x *drpcClientApi_LoadSpaceStream) SendAndClose(m *LoadSpaceResponse) error } return x.CloseSend() } + +type DRPCClientApi_PutFileStream interface { + drpc.Stream + SendAndClose(*PutFileResponse) error +} + +type drpcClientApi_PutFileStream struct { + drpc.Stream +} + +func (x *drpcClientApi_PutFileStream) SendAndClose(m *PutFileResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCClientApi_GetFileStream interface { + drpc.Stream + SendAndClose(*GetFileResponse) error +} + +type drpcClientApi_GetFileStream struct { + drpc.Stream +} + +func (x *drpcClientApi_GetFileStream) SendAndClose(m *GetFileResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCClientApi_DeleteFileStream interface { + drpc.Stream + SendAndClose(*DeleteFileResponse) error +} + +type drpcClientApi_DeleteFileStream struct { + drpc.Stream +} + +func (x *drpcClientApi_DeleteFileStream) SendAndClose(m *DeleteFileResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} diff --git a/client/api/apiproto/protos/api.proto b/client/api/apiproto/protos/api.proto index 0c5b7256..6b7e98dd 100644 --- a/client/api/apiproto/protos/api.proto +++ b/client/api/apiproto/protos/api.proto @@ -14,6 +14,9 @@ service ClientApi { rpc AllTrees(AllTreesRequest) returns(AllTreesResponse); rpc AllSpaces(AllSpacesRequest) returns(AllSpacesResponse); rpc LoadSpace(LoadSpaceRequest) returns(LoadSpaceResponse); + rpc PutFile(PutFileRequest) returns(PutFileResponse); + rpc GetFile(GetFileRequest) returns(GetFileResponse); + rpc DeleteFile(DeleteFileRequest) returns(DeleteFileResponse); } message CreateSpaceRequest { @@ -103,4 +106,28 @@ message TreeParamsRequest { message TreeParamsResponse { string rootId = 1; repeated string headIds = 2; -} \ No newline at end of file +} + +message PutFileRequest { + string path = 1; + string spaceId = 2; +} + +message PutFileResponse { + string hash = 1; +} + +message GetFileRequest { + string hash = 1; + string path = 2; +} + +message GetFileResponse { + string path = 1; +} + +message DeleteFileRequest { + string hash = 1; +} + +message DeleteFileResponse {} \ No newline at end of file diff --git a/client/api/rpchandler.go b/client/api/rpchandler.go index e1c85c2a..8fabfdfb 100644 --- a/client/api/rpchandler.go +++ b/client/api/rpchandler.go @@ -7,9 +7,14 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" + "github.com/ipfs/go-cid" + "go.uber.org/zap" + "io" "math/rand" + "os" ) type rpcHandler struct { @@ -17,6 +22,7 @@ type rpcHandler struct { storageService storage.ClientStorage docService document.Service account account.Service + file fileservice.FileService } func (r *rpcHandler) LoadSpace(ctx context.Context, request *apiproto.LoadSpaceRequest) (resp *apiproto.LoadSpaceResponse, err error) { @@ -144,3 +150,50 @@ func (r *rpcHandler) TreeParams(ctx context.Context, request *apiproto.TreeParam } return } + +func (r *rpcHandler) PutFile(ctx context.Context, request *apiproto.PutFileRequest) (*apiproto.PutFileResponse, error) { + f, err := os.Open(request.Path) + if err != nil { + return nil, err + } + defer f.Close() + n, err := r.file.AddFile(ctx, f) + if err != nil { + return nil, err + } + return &apiproto.PutFileResponse{ + Hash: n.Cid().String(), + }, nil +} + +func (r *rpcHandler) GetFile(ctx context.Context, request *apiproto.GetFileRequest) (*apiproto.GetFileResponse, error) { + c, err := cid.Parse(request.Hash) + if err != nil { + return nil, err + } + + f, err := os.Create(request.Path) + if err != nil { + return nil, err + } + defer f.Close() + + rd, err := r.file.GetFile(ctx, c) + if err != nil { + return nil, err + } + defer rd.Close() + wr, err := io.Copy(f, rd) + if err != nil && err != io.EOF { + return nil, err + } + log.Info("copied bytes", zap.Int64("size", wr)) + return &apiproto.GetFileResponse{ + Path: request.Path, + }, nil +} + +func (r *rpcHandler) DeleteFile(ctx context.Context, request *apiproto.DeleteFileRequest) (*apiproto.DeleteFileResponse, error) { + //TODO implement me + panic("implement me") +} diff --git a/client/api/service.go b/client/api/service.go index 0c09a39f..bf12dde2 100644 --- a/client/api/service.go +++ b/client/api/service.go @@ -9,6 +9,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" @@ -36,6 +37,7 @@ type service struct { storageService clientstorage.ClientStorage docService document.Service account account.Service + file fileservice.FileService *server.BaseDrpcServer } @@ -46,6 +48,7 @@ func (s *service) Init(a *app.App) (err error) { s.account = a.MustComponent(account.CName).(account.Service) s.cfg = a.MustComponent(config.CName).(*config.Config) s.transport = a.MustComponent(secure.CName).(secure.Service) + s.file = a.MustComponent(fileservice.CName).(fileservice.FileService) return nil } @@ -64,7 +67,7 @@ func (s *service) Run(ctx context.Context) (err error) { if err != nil { return } - return apiproto.DRPCRegisterClientApi(s, &rpcHandler{s.spaceService, s.storageService, s.docService, s.account}) + return apiproto.DRPCRegisterClientApi(s, &rpcHandler{s.spaceService, s.storageService, s.docService, s.account, s.file}) } func (s *service) Close(ctx context.Context) (err error) { diff --git a/client/cmd/client.go b/client/cmd/client.go index 437fc998..42193a19 100644 --- a/client/cmd/client.go +++ b/client/cmd/client.go @@ -11,10 +11,11 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace/clientcache" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage/rpcstore" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/rpcstore" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/metric" @@ -111,6 +112,7 @@ func Bootstrap(a *app.App) { Register(server.New()). Register(document.New()). Register(rpcstore.New()). + Register(fileservice.New()). Register(filestorage.New()). Register(api.New()) } diff --git a/client/filestorage/badgerfilestore/badgerfileindex.go b/client/filestorage/badgerfilestore/badgerfileindex.go new file mode 100644 index 00000000..63d7e1de --- /dev/null +++ b/client/filestorage/badgerfilestore/badgerfileindex.go @@ -0,0 +1,255 @@ +package badgerfilestore + +import ( + "bytes" + "errors" + "github.com/dgraph-io/badger/v3" + "github.com/ipfs/go-cid" + "sync" + "time" +) + +const keyIndexPrefix = "files/indexes/" + +type Op string + +const ( + OpAdd Op = "add" + OpDelete Op = "del" + OpLoad Op = "load" +) + +func NewFileBadgerIndex(db *badger.DB) *FileBadgerIndex { + return &FileBadgerIndex{ + db: db, + workCh: make(chan struct{}, 1), + } +} + +var cidsPool = &sync.Pool{ + New: func() any { + return &Cids{} + }, +} + +type FileBadgerIndex struct { + db *badger.DB + workCh chan struct{} +} + +func (i *FileBadgerIndex) Add(cids *Cids) error { + addTimeBin, _ := time.Now().MarshalBinary() + defer i.pingWorkCh() + return i.db.Update(func(txn *badger.Txn) error { + keys := cids.Keys() + for _, k := range keys { + if err := txn.Set(k, addTimeBin); err != nil { + return err + } + } + return nil + }) +} + +func (i *FileBadgerIndex) Done(cids *Cids) (err error) { + if len(cids.SpaceOps) == 0 { + return nil + } + return i.db.Update(func(txn *badger.Txn) error { + keys := cids.Keys() + for _, k := range keys { + if err := txn.Delete(k); err != nil { + return err + } + } + return nil + }) +} +func (i *FileBadgerIndex) List(limit int) (cids *Cids, err error) { + cids = NewCids() + err = i.db.View(func(txn *badger.Txn) error { + it := txn.NewIterator(badger.IteratorOptions{ + PrefetchSize: limit, + PrefetchValues: false, + Prefix: []byte(keyIndexPrefix), + }) + defer it.Close() + var l int + for it.Rewind(); it.Valid(); it.Next() { + e := cids.AddKey(it.Item().Key()) + if e == nil { + l++ + if l == limit { + return nil + } + } + } + return nil + }) + return +} + +func (i *FileBadgerIndex) Len() (l int, err error) { + err = i.db.View(func(txn *badger.Txn) error { + it := txn.NewIterator(badger.IteratorOptions{ + PrefetchSize: 100, + PrefetchValues: false, + Prefix: []byte(keyIndexPrefix), + }) + defer it.Close() + var l int + for it.Rewind(); it.Valid(); it.Next() { + l++ + } + return nil + }) + return +} + +func (i *FileBadgerIndex) pingWorkCh() { + select { + case i.workCh <- struct{}{}: + default: + } +} + +func (i *FileBadgerIndex) HasWorkCh() chan struct{} { + l, err := i.Len() + if err != nil { + return i.workCh + } + if l > 0 { + i.pingWorkCh() + } + return i.workCh +} + +var errInvalidKey = errors.New("invalid key") + +var sep = []byte("/") + +func parseCIDOp(key []byte) (spaceId string, op Op, k cid.Cid, err error) { + if len(key) <= len(keyIndexPrefix) { + err = errInvalidKey + return + } + key = key[len(keyIndexPrefix):] + fi := bytes.Index(key, sep) + if fi < 0 { + err = errInvalidKey + return + } + spaceId = string(key[:fi]) + key = key[fi+1:] + fi = bytes.Index(key, sep) + if fi < 0 { + err = errInvalidKey + return + } + op = Op(key[:fi]) + k, err = cid.Cast(key[fi+1:]) + return +} + +func NewCids() *Cids { + return cidsPool.Get().(*Cids) +} + +type SpaceCidOps struct { + SpaceId string + Add []cid.Cid + Delete []cid.Cid + Load []cid.Cid +} + +type Cids struct { + SpaceOps []SpaceCidOps + keysBuf [][]byte +} + +func (c *Cids) Add(spaceId string, op Op, k cid.Cid) { + var spaceIndex = -1 + for i, so := range c.SpaceOps { + if so.SpaceId == spaceId { + spaceIndex = i + break + } + } + if spaceIndex == -1 { + spaceIndex = len(c.SpaceOps) + if len(c.SpaceOps) < cap(c.SpaceOps) { + c.SpaceOps = c.SpaceOps[0 : len(c.SpaceOps)+1] + c.SpaceOps[spaceIndex].SpaceId = spaceId + } else { + c.SpaceOps = append(c.SpaceOps, SpaceCidOps{SpaceId: spaceId}) + } + } + switch op { + case OpAdd: + c.SpaceOps[spaceIndex].Add = append(c.SpaceOps[spaceIndex].Add, k) + case OpDelete: + c.SpaceOps[spaceIndex].Delete = append(c.SpaceOps[spaceIndex].Delete, k) + case OpLoad: + c.SpaceOps[spaceIndex].Load = append(c.SpaceOps[spaceIndex].Load, k) + } +} + +func (c *Cids) Keys() [][]byte { + addKey := func(spaceId string, k cid.Cid, op Op) { + if len(c.keysBuf) < cap(c.keysBuf) { + c.keysBuf = c.keysBuf[:len(c.keysBuf)+1] + } else { + c.keysBuf = append(c.keysBuf, nil) + } + ki := len(c.keysBuf) - 1 + buf := bytes.NewBuffer(c.keysBuf[ki][:0]) + buf.WriteString(keyIndexPrefix) + buf.WriteString(spaceId) + buf.WriteString("/") + buf.WriteString(string(op)) + buf.WriteString("/") + buf.WriteString(k.KeyString()) + c.keysBuf[ki] = buf.Bytes() + } + for _, sop := range c.SpaceOps { + for _, k := range sop.Add { + addKey(sop.SpaceId, k, OpAdd) + } + for _, k := range sop.Delete { + addKey(sop.SpaceId, k, OpDelete) + } + for _, k := range sop.Load { + addKey(sop.SpaceId, k, OpLoad) + } + } + return c.keysBuf +} + +func (c *Cids) AddKey(key []byte) error { + spaceId, op, k, err := parseCIDOp(key) + if err != nil { + return err + } + c.Add(spaceId, op, k) + return nil +} + +func (c *Cids) Len() (l int) { + for _, so := range c.SpaceOps { + l += len(so.Load) + l += len(so.Delete) + l += len(so.Add) + } + return +} + +func (c *Cids) Release() { + c.keysBuf = c.keysBuf[:0] + for i, sop := range c.SpaceOps { + c.SpaceOps[i].Add = sop.Add[:0] + c.SpaceOps[i].Delete = sop.Delete[:0] + c.SpaceOps[i].Load = sop.Load[:0] + } + c.SpaceOps = c.SpaceOps[:0] + cidsPool.Put(c) +} diff --git a/client/filestorage/badgerfilestore/badgerfileindex_test.go b/client/filestorage/badgerfilestore/badgerfileindex_test.go new file mode 100644 index 00000000..810a4291 --- /dev/null +++ b/client/filestorage/badgerfilestore/badgerfileindex_test.go @@ -0,0 +1,104 @@ +package badgerfilestore + +import ( + "bytes" + "fmt" + "github.com/dgraph-io/badger/v3" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "os" + "testing" +) + +func TestFileBadgerIndex_Add(t *testing.T) { + tmpDir, err := os.MkdirTemp("", "badgerfileindextest_*") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + db, err := badger.Open(badger.DefaultOptions(tmpDir)) + require.NoError(t, err) + defer db.Close() + index := NewFileBadgerIndex(db) + var cids = NewCids() + defer cids.Release() + for _, spaceId := range []string{"space1", "space2"} { + for i := 0; i < 5; i++ { + cids.Add(spaceId, OpAdd, blocks.NewBlock([]byte(fmt.Sprint("add", i))).Cid()) + } + for i := 0; i < 3; i++ { + cids.Add(spaceId, OpDelete, blocks.NewBlock([]byte(fmt.Sprint("del", i))).Cid()) + } + for i := 0; i < 2; i++ { + cids.Add(spaceId, OpLoad, blocks.NewBlock([]byte(fmt.Sprint("load", i))).Cid()) + } + } + require.NoError(t, index.Add(cids)) + + cids, err = index.List(100) + require.NoError(t, err) + assert.Len(t, cids.SpaceOps, 2) + for _, s := range cids.SpaceOps { + assert.Len(t, s.Add, 5) + assert.Len(t, s.Delete, 3) + assert.Len(t, s.Load, 2) + } +} + +func TestCids_Add(t *testing.T) { + for i := 0; i < 3; i++ { + var bs = []blocks.Block{ + blocks.NewBlock([]byte("1")), + blocks.NewBlock([]byte("2")), + blocks.NewBlock([]byte("3")), + blocks.NewBlock([]byte("4")), + blocks.NewBlock([]byte("5")), + } + cids := NewCids() + for _, b := range bs { + cids.Add("1", OpAdd, b.Cid()) + } + keys := cids.Keys() + contains := func(c cid.Cid) bool { + for _, k := range keys { + if bytes.HasSuffix(k, c.Bytes()) { + return true + } + } + return false + } + for _, b := range bs { + assert.True(t, contains(b.Cid())) + } + kcids := NewCids() + for _, k := range keys { + require.NoError(t, kcids.AddKey(k)) + } + + require.Len(t, kcids.SpaceOps, 1) + assert.Equal(t, kcids.SpaceOps[0].Add, cids.SpaceOps[0].Add) + + cids.Release() + kcids.Release() + } +} + +func BenchmarkCids_Add(b *testing.B) { + var bs = []blocks.Block{ + blocks.NewBlock([]byte("1")), + blocks.NewBlock([]byte("2")), + blocks.NewBlock([]byte("3")), + blocks.NewBlock([]byte("4")), + blocks.NewBlock([]byte("5")), + } + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + cids := NewCids() + for _, b := range bs { + cids.Add("1", OpAdd, b.Cid()) + } + cids.Keys() + cids.Release() + } +} diff --git a/client/filestorage/filebadgerstore/filebadgerstore.go b/client/filestorage/badgerfilestore/badgerfilestore.go similarity index 62% rename from client/filestorage/filebadgerstore/filebadgerstore.go rename to client/filestorage/badgerfilestore/badgerfilestore.go index d0044eee..7860841a 100644 --- a/client/filestorage/filebadgerstore/filebadgerstore.go +++ b/client/filestorage/badgerfilestore/badgerfilestore.go @@ -1,4 +1,4 @@ -package filebadgerstore +package badgerfilestore import ( "context" @@ -6,11 +6,12 @@ import ( "github.com/dgraph-io/badger/v3" blocks "github.com/ipfs/go-block-format" "github.com/ipfs/go-cid" + format "github.com/ipfs/go-ipld-format" ) const keyPrefix = "files/blocks/" -func NewBadgerStorage(db *badger.DB) fileblockstore.BlockStoreExistsCIDs { +func NewBadgerStorage(db *badger.DB) fileblockstore.BlockStoreLocal { return &badgerStorage{db: db} } @@ -19,16 +20,19 @@ type badgerStorage struct { } func (f *badgerStorage) Get(ctx context.Context, k cid.Cid) (b blocks.Block, err error) { - err = f.db.View(func(txn *badger.Txn) error { - it, gerr := txn.Get(key(k)) - if gerr != nil { - return gerr + err = f.db.View(func(txn *badger.Txn) (e error) { + it, e := txn.Get(key(k)) + if e != nil { + return e } - return it.Value(func(val []byte) error { - b = blocks.NewBlock(val) - return nil - }) + if b, e = blockFromItem(it); e != nil { + return e + } + return }) + if err == badger.ErrKeyNotFound { + err = &format.ErrNotFound{Cid: k} + } return } @@ -43,10 +47,11 @@ func (f *badgerStorage) GetMany(ctx context.Context, ks []cid.Cid) <-chan blocks if gerr != nil { return gerr } - _ = it.Value(func(val []byte) error { - res <- blocks.NewBlock(val) - return nil - }) + b, berr := blockFromItem(it) + if berr != nil { + return berr + } + res <- b } return nil }) @@ -86,3 +91,26 @@ func (f *badgerStorage) ExistsCids(ctx context.Context, ks []cid.Cid) (exists [] func key(c cid.Cid) []byte { return []byte(keyPrefix + c.String()) } + +func parseCID(key []byte) (cid.Cid, error) { + if len(key) <= len(keyPrefix) { + return cid.Cid{}, errInvalidKey + } + return cid.Decode(string(key[len(keyPrefix):])) +} + +func blockFromItem(it *badger.Item) (b blocks.Block, err error) { + c, err := parseCID(it.Key()) + if err != nil { + return nil, err + } + if err = it.Value(func(val []byte) error { + if b, err = blocks.NewBlockWithCid(val, c); err != nil { + return err + } + return nil + }); err != nil { + return + } + return +} diff --git a/client/filestorage/badgerfilestore/badgerfilestore_test.go b/client/filestorage/badgerfilestore/badgerfilestore_test.go new file mode 100644 index 00000000..4039a748 --- /dev/null +++ b/client/filestorage/badgerfilestore/badgerfilestore_test.go @@ -0,0 +1,101 @@ +package badgerfilestore + +import ( + "context" + "github.com/dgraph-io/badger/v3" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "os" + "testing" + "time" +) + +var ctx = context.Background() + +func TestBadgerStorage_Add(t *testing.T) { + tmpDir, err := os.MkdirTemp("", "badgerfilestore_*") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + db, err := badger.Open(badger.DefaultOptions(tmpDir)) + require.NoError(t, err) + defer db.Close() + + s := NewBadgerStorage(db) + bs := []blocks.Block{ + blocks.NewBlock([]byte("1")), + blocks.NewBlock([]byte("2")), + blocks.NewBlock([]byte("3")), + } + assert.NoError(t, s.Add(ctx, bs)) + +} + +func TestBadgerStorage_Get(t *testing.T) { + tmpDir, err := os.MkdirTemp("", "badgerfilestore_*") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + db, err := badger.Open(badger.DefaultOptions(tmpDir)) + require.NoError(t, err) + defer db.Close() + + s := NewBadgerStorage(db) + bs := []blocks.Block{ + blocks.NewBlock([]byte("1")), + blocks.NewBlock([]byte("2")), + blocks.NewBlock([]byte("3")), + } + require.NoError(t, s.Add(ctx, bs)) + + cids := make([]cid.Cid, 0, len(bs)) + for _, b := range bs { + cids = append(cids, b.Cid()) + } + cids = append(cids, blocks.NewBlock([]byte("4")).Cid()) + + b, err := s.Get(ctx, bs[0].Cid()) + require.NoError(t, err) + assert.Equal(t, bs[0].RawData(), b.RawData()) + + ecids, err := s.ExistsCids(ctx, cids) + require.NoError(t, err) + assert.Len(t, ecids, 3) +} + +func TestBadgerStorage_GetMany(t *testing.T) { + tmpDir, err := os.MkdirTemp("", "badgerfilestore_*") + require.NoError(t, err) + defer os.RemoveAll(tmpDir) + db, err := badger.Open(badger.DefaultOptions(tmpDir)) + require.NoError(t, err) + defer db.Close() + + s := NewBadgerStorage(db) + bs := []blocks.Block{ + blocks.NewBlock([]byte("1")), + blocks.NewBlock([]byte("2")), + blocks.NewBlock([]byte("3")), + } + require.NoError(t, s.Add(ctx, bs)) + + cids := make([]cid.Cid, 0, len(bs)) + for _, b := range bs { + cids = append(cids, b.Cid()) + } + + res := s.GetMany(ctx, cids) + var resB []blocks.Block + for i := 0; i < len(bs); i++ { + select { + case b := <-res: + resB = append(resB, b) + case <-time.After(time.Second): + t.Error("timeout") + return + } + } + assert.Len(t, resB, 3) + _, ok := <-res + assert.False(t, ok) +} diff --git a/client/filestorage/filestorage.go b/client/filestorage/fileservice.go similarity index 62% rename from client/filestorage/filestorage.go rename to client/filestorage/fileservice.go index 1714e8d1..ae9f594d 100644 --- a/client/filestorage/filestorage.go +++ b/client/filestorage/fileservice.go @@ -3,16 +3,18 @@ package filestorage import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/badgerprovider" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage/filebadgerstore" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage/badgerfilestore" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage/rpcstore" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileblockstore" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileblockstore/cachestore" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/rpcstore" "io" ) const CName = fileblockstore.CName +var log = logger.NewNamed(CName) + func New() FileStorage { return &fileStorage{} } @@ -24,15 +26,20 @@ type FileStorage interface { type fileStorage struct { fileblockstore.BlockStore + syncer *syncer + syncerCancel context.CancelFunc } func (f *fileStorage) Init(a *app.App) (err error) { db := a.MustComponent(badgerprovider.CName).(badgerprovider.BadgerProvider).Badger() - bs := filebadgerstore.NewBadgerStorage(db) - f.BlockStore = &cachestore.CacheStore{ - Cache: bs, - Origin: a.MustComponent(rpcstore.CName).(rpcstore.Service).NewStore(), + bs := badgerfilestore.NewBadgerStorage(db) + ps := &proxyStore{ + cache: bs, + origin: a.MustComponent(rpcstore.CName).(rpcstore.Service).NewStore(), + index: badgerfilestore.NewFileBadgerIndex(db), } + f.BlockStore = ps + f.syncer = &syncer{ps: ps, done: make(chan struct{})} return } @@ -41,9 +48,15 @@ func (f *fileStorage) Name() (name string) { } func (f *fileStorage) Run(ctx context.Context) (err error) { + ctx, f.syncerCancel = context.WithCancel(ctx) + go f.syncer.run(ctx) return } func (f *fileStorage) Close(ctx context.Context) (err error) { + if f.syncerCancel != nil { + f.syncerCancel() + <-f.syncer.done + } return f.BlockStore.(io.Closer).Close() } diff --git a/client/filestorage/proxystore.go b/client/filestorage/proxystore.go new file mode 100644 index 00000000..ad726288 --- /dev/null +++ b/client/filestorage/proxystore.go @@ -0,0 +1,130 @@ +package filestorage + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage/badgerfilestore" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileblockstore" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + format "github.com/ipfs/go-ipld-format" + "go.uber.org/zap" + "io" +) + +type proxyStore struct { + cache fileblockstore.BlockStoreLocal + origin fileblockstore.BlockStore + index *badgerfilestore.FileBadgerIndex +} + +func (c *proxyStore) Get(ctx context.Context, k cid.Cid) (b blocks.Block, err error) { + log.Debug("get cid", zap.String("cid", k.String())) + if b, err = c.cache.Get(ctx, k); err != nil { + if format.IsNotFound(err) { + err = nil + log.Debug("proxyStore local cid not found", zap.String("cid", k.String())) + } else { + return + } + } else { + return + } + if b, err = c.origin.Get(ctx, k); err != nil { + log.Debug("proxyStore remote cid error", zap.String("cid", k.String()), zap.Error(err)) + return + } + if addErr := c.cache.Add(ctx, []blocks.Block{b}); addErr != nil { + log.Error("block fetched from origin but got error for add to cache", zap.Error(addErr)) + } + return +} + +func (c *proxyStore) GetMany(ctx context.Context, ks []cid.Cid) <-chan blocks.Block { + cachedCids, localErr := c.cache.ExistsCids(ctx, ks) + var originCids []cid.Cid + if localErr != nil { + log.Error("proxy store hasCIDs error", zap.Error(localErr)) + originCids = ks + } else { + if len(cachedCids) != len(ks) { + set := cid.NewSet() + for _, cCid := range cachedCids { + set.Add(cCid) + } + originCids = ks[:0] + for _, k := range ks { + if !set.Has(k) { + originCids = append(originCids, k) + } + } + } + } + log.Debug("get many cids", zap.Int("cached", len(cachedCids)), zap.Int("origin", len(originCids))) + if len(originCids) == 0 { + return c.cache.GetMany(ctx, cachedCids) + } + var results = make(chan blocks.Block) + + go func() { + defer close(results) + localResults := c.cache.GetMany(ctx, cachedCids) + originResults := c.origin.GetMany(ctx, originCids) + oOk, cOk := true, true + for { + var cb, ob blocks.Block + select { + case cb, cOk = <-localResults: + if cOk { + results <- cb + } + case ob, oOk = <-originResults: + if oOk { + if addErr := c.cache.Add(ctx, []blocks.Block{ob}); addErr != nil { + log.Error("add block to cache error", zap.Error(addErr)) + } + results <- ob + } + case <-ctx.Done(): + return + } + if !oOk && !cOk { + return + } + } + }() + return results +} + +func (c *proxyStore) Add(ctx context.Context, bs []blocks.Block) error { + indexCids := badgerfilestore.NewCids() + defer indexCids.Release() + for _, b := range bs { + indexCids.Add(fileblockstore.CtxGetSpaceId(ctx), badgerfilestore.OpAdd, b.Cid()) + } + if err := c.index.Add(indexCids); err != nil { + return err + } + return c.cache.Add(ctx, bs) +} + +func (c *proxyStore) Delete(ctx context.Context, k cid.Cid) error { + indexCids := badgerfilestore.NewCids() + defer indexCids.Release() + indexCids.Add(fileblockstore.CtxGetSpaceId(ctx), badgerfilestore.OpDelete, k) + if err := c.index.Add(indexCids); err != nil { + return err + } + return c.cache.Delete(ctx, k) +} + +func (c *proxyStore) Close() (err error) { + if closer, ok := c.cache.(io.Closer); ok { + if localErr := closer.Close(); localErr != nil { + log.Error("error while closing cache store", zap.Error(localErr)) + } + } + if closer, ok := c.origin.(io.Closer); ok { + return closer.Close() + } + return nil +} diff --git a/common/commonfile/fileblockstore/cachestore/cachestore_test.go b/client/filestorage/proxystore_test.go similarity index 53% rename from common/commonfile/fileblockstore/cachestore/cachestore_test.go rename to client/filestorage/proxystore_test.go index a554052f..c33c86bd 100644 --- a/common/commonfile/fileblockstore/cachestore/cachestore_test.go +++ b/client/filestorage/proxystore_test.go @@ -1,13 +1,17 @@ -package cachestore +package filestorage import ( "context" "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage/badgerfilestore" + "github.com/dgraph-io/badger/v3" blocks "github.com/ipfs/go-block-format" "github.com/ipfs/go-cid" format "github.com/ipfs/go-ipld-format" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "os" + "sync" "testing" "time" ) @@ -16,29 +20,29 @@ var ctx = context.Background() func TestCacheStore_Add(t *testing.T) { t.Run("success", func(t *testing.T) { - cs := &CacheStore{ - Cache: newTestStore(nil), - Origin: newTestStore(nil), - } - defer cs.Close() + cs := newPSFixture(t) + defer cs.Finish(t) testBlocks := newTestBocks("1", "2", "3") require.NoError(t, cs.Add(ctx, testBlocks)) for _, b := range testBlocks { - gb, err := cs.Cache.Get(ctx, b.Cid()) + gb, err := cs.cache.Get(ctx, b.Cid()) assert.NoError(t, err) assert.NotNil(t, gb) } + cids, err := cs.index.List(100) + require.NoError(t, err) + require.Len(t, cids.SpaceOps, 1) + assert.Len(t, cids.SpaceOps[0].Add, len(testBlocks)) }) } func TestCacheStore_Get(t *testing.T) { t.Run("exists local", func(t *testing.T) { testBlocks := newTestBocks("1", "2", "3") - cs := &CacheStore{ - Cache: newTestStore(testBlocks), - Origin: newTestStore(testBlocks), - } - defer cs.Close() + cs := newPSFixture(t) + defer cs.Finish(t) + require.NoError(t, cs.cache.Add(ctx, testBlocks)) + require.NoError(t, cs.origin.Add(ctx, testBlocks)) for _, b := range testBlocks { gb, err := cs.Get(ctx, b.Cid()) assert.NoError(t, err) @@ -47,18 +51,17 @@ func TestCacheStore_Get(t *testing.T) { }) t.Run("exists remote", func(t *testing.T) { testBlocks := newTestBocks("1", "2", "3") - cs := &CacheStore{ - Cache: newTestStore(testBlocks[:1]), - Origin: newTestStore(testBlocks), - } - defer cs.Close() + cs := newPSFixture(t) + defer cs.Finish(t) + require.NoError(t, cs.cache.Add(ctx, testBlocks[:1])) + require.NoError(t, cs.origin.Add(ctx, testBlocks)) for _, b := range testBlocks { gb, err := cs.Get(ctx, b.Cid()) assert.NoError(t, err) assert.NotNil(t, gb) } for _, b := range testBlocks { - lb, err := cs.Cache.Get(ctx, b.Cid()) + lb, err := cs.cache.Get(ctx, b.Cid()) assert.NoError(t, err) assert.NotNil(t, lb) } @@ -68,61 +71,63 @@ func TestCacheStore_Get(t *testing.T) { func TestCacheStore_GetMany(t *testing.T) { t.Run("all local", func(t *testing.T) { testBlocks := newTestBocks("1", "2", "3") - cs := &CacheStore{ - Cache: newTestStore(testBlocks), - Origin: newTestStore(testBlocks), - } - defer cs.Close() + cs := newPSFixture(t) + defer cs.Finish(t) + require.NoError(t, cs.cache.Add(ctx, testBlocks)) + require.NoError(t, cs.origin.Add(ctx, testBlocks)) var cids, resCids []cid.Cid for _, b := range testBlocks { cids = append(cids, b.Cid()) } ch := cs.GetMany(ctx, cids) - for { - select { - case b, ok := <-ch: - if !ok { + func() { + for { + select { + case b, ok := <-ch: + if !ok { + return + } else { + resCids = append(resCids, b.Cid()) + } + case <-time.After(time.Second): + assert.NoError(t, fmt.Errorf("timeout")) return - } else { - resCids = append(resCids, b.Cid()) } - case <-time.After(time.Second): - assert.NoError(t, fmt.Errorf("timeout")) - return } - } + }() assert.ElementsMatch(t, cids, resCids) }) t.Run("partial local", func(t *testing.T) { testBlocks := newTestBocks("1", "2", "3") - cs := &CacheStore{ - Cache: newTestStore(testBlocks[:1]), - Origin: newTestStore(testBlocks), - } - defer cs.Close() + cs := newPSFixture(t) + defer cs.Finish(t) + require.NoError(t, cs.cache.Add(ctx, testBlocks[:1])) + require.NoError(t, cs.origin.Add(ctx, testBlocks)) var cids, resCids []cid.Cid for _, b := range testBlocks { cids = append(cids, b.Cid()) } ch := cs.GetMany(ctx, cids) - for { - select { - case b, ok := <-ch: - if !ok { + func() { + for { + select { + case b, ok := <-ch: + if !ok { + return + } else { + resCids = append(resCids, b.Cid()) + } + case <-time.After(time.Second): + assert.NoError(t, fmt.Errorf("timeout")) return - } else { - resCids = append(resCids, b.Cid()) } - case <-time.After(time.Second): - assert.NoError(t, fmt.Errorf("timeout")) - return } - } - assert.ElementsMatch(t, cids, resCids) + }() + require.Equal(t, len(cids), len(resCids)) for _, b := range testBlocks { - gb, err := cs.Cache.Get(ctx, b.Cid()) + gb, err := cs.cache.Get(ctx, b.Cid()) assert.NoError(t, err) assert.NotNil(t, gb) } @@ -131,14 +136,12 @@ func TestCacheStore_GetMany(t *testing.T) { func TestCacheStore_Delete(t *testing.T) { testBlocks := newTestBocks("1", "2", "3") - cs := &CacheStore{ - Cache: newTestStore(testBlocks[:1]), - Origin: newTestStore(testBlocks), - } - defer cs.Close() + cs := newPSFixture(t) + defer cs.Finish(t) + require.NoError(t, cs.cache.Add(ctx, testBlocks)) for _, b := range testBlocks { require.NoError(t, cs.Delete(ctx, b.Cid())) - gb, err := cs.Get(ctx, b.Cid()) + gb, err := cs.cache.Get(ctx, b.Cid()) assert.Nil(t, gb) assert.True(t, format.IsNotFound(err)) } @@ -146,18 +149,21 @@ func TestCacheStore_Delete(t *testing.T) { func newTestStore(bs []blocks.Block) *testStore { ts := &testStore{ - store: make(map[cid.Cid]blocks.Block), + store: make(map[string]blocks.Block), } ts.Add(context.Background(), bs) return ts } type testStore struct { - store map[cid.Cid]blocks.Block + store map[string]blocks.Block + mu sync.Mutex } func (t *testStore) Get(ctx context.Context, k cid.Cid) (blocks.Block, error) { - if b, ok := t.store[k]; ok { + t.mu.Lock() + defer t.mu.Unlock() + if b, ok := t.store[k.String()]; ok { return b, nil } return nil, &format.ErrNotFound{Cid: k} @@ -182,8 +188,10 @@ func (t *testStore) GetMany(ctx context.Context, ks []cid.Cid) <-chan blocks.Blo } func (t *testStore) ExistsCids(ctx context.Context, ks []cid.Cid) (exists []cid.Cid, err error) { + t.mu.Lock() + defer t.mu.Unlock() for _, k := range ks { - if _, ok := t.store[k]; ok { + if _, ok := t.store[k.String()]; ok { exists = append(exists, k) } } @@ -191,15 +199,19 @@ func (t *testStore) ExistsCids(ctx context.Context, ks []cid.Cid) (exists []cid. } func (t *testStore) Add(ctx context.Context, bs []blocks.Block) error { + t.mu.Lock() + defer t.mu.Unlock() for _, b := range bs { - t.store[b.Cid()] = b + t.store[b.Cid().String()] = b } return nil } func (t *testStore) Delete(ctx context.Context, c cid.Cid) error { - if _, ok := t.store[c]; ok { - delete(t.store, c) + t.mu.Lock() + defer t.mu.Unlock() + if _, ok := t.store[c.String()]; ok { + delete(t.store, c.String()) return nil } return &format.ErrNotFound{Cid: c} @@ -209,6 +221,32 @@ func (t *testStore) Close() (err error) { return nil } +type psFixture struct { + *proxyStore + tmpDir string + db *badger.DB +} + +func newPSFixture(t *testing.T) *psFixture { + var err error + fx := &psFixture{} + fx.tmpDir, err = os.MkdirTemp("", "proxyStore_*") + require.NoError(t, err) + fx.db, err = badger.Open(badger.DefaultOptions(fx.tmpDir).WithLoggingLevel(badger.ERROR)) + require.NoError(t, err) + fx.proxyStore = &proxyStore{ + cache: newTestStore(nil), + origin: newTestStore(nil), + index: badgerfilestore.NewFileBadgerIndex(fx.db), + } + return fx +} + +func (fx *psFixture) Finish(t *testing.T) { + assert.NoError(t, fx.db.Close()) + _ = os.RemoveAll(fx.tmpDir) +} + func newTestBocks(ids ...string) (bs []blocks.Block) { for _, id := range ids { bs = append(bs, blocks.NewBlock([]byte(id))) diff --git a/common/commonfile/rpcstore/client.go b/client/filestorage/rpcstore/client.go similarity index 97% rename from common/commonfile/rpcstore/client.go rename to client/filestorage/rpcstore/client.go index 8a1841c3..0b0327e6 100644 --- a/common/commonfile/rpcstore/client.go +++ b/client/filestorage/rpcstore/client.go @@ -125,6 +125,7 @@ func (c *client) put(ctx context.Context, t *task) (err error) { }); err != nil { return rpcerr.Unwrap(err) } + log.Debug("put cid", zap.String("cid", t.cid.String())) t.ready <- t c.stat.Add(st, len(t.data)) return @@ -164,7 +165,7 @@ func (c *client) get(ctx context.Context, t *task) (err error) { return } -func (c *client) readStream() { +func (c *client) readStream(stream fileproto.DRPCFile_GetBlocksClient) { var err error defer func() { log.Info("readStream closed", zap.String("peerId", c.peerId), zap.Error(err)) @@ -174,7 +175,7 @@ func (c *client) readStream() { }() for { var resp *fileproto.GetBlockResponse - resp, err = c.blocksStream.Recv() + resp, err = stream.Recv() if err != nil { return } @@ -230,7 +231,7 @@ func (c *client) getStream(ctx context.Context) (fileproto.DRPCFile_GetBlocksCli if c.blocksStream, err = fileproto.NewDRPCFileClient(peer).GetBlocks(context.Background()); err != nil { return nil, err } - go c.readStream() + go c.readStream(c.blocksStream) return c.blocksStream, nil } diff --git a/common/commonfile/rpcstore/clientmgr.go b/client/filestorage/rpcstore/clientmgr.go similarity index 99% rename from common/commonfile/rpcstore/clientmgr.go rename to client/filestorage/rpcstore/clientmgr.go index 528db372..45d4c579 100644 --- a/common/commonfile/rpcstore/clientmgr.go +++ b/client/filestorage/rpcstore/clientmgr.go @@ -13,7 +13,7 @@ import ( const ( maxConnections = 10 - maxTasks = 1000 + maxTasks = 100 ) var ( diff --git a/common/commonfile/rpcstore/service.go b/client/filestorage/rpcstore/service.go similarity index 100% rename from common/commonfile/rpcstore/service.go rename to client/filestorage/rpcstore/service.go diff --git a/common/commonfile/rpcstore/stat.go b/client/filestorage/rpcstore/stat.go similarity index 100% rename from common/commonfile/rpcstore/stat.go rename to client/filestorage/rpcstore/stat.go diff --git a/common/commonfile/rpcstore/store.go b/client/filestorage/rpcstore/store.go similarity index 100% rename from common/commonfile/rpcstore/store.go rename to client/filestorage/rpcstore/store.go diff --git a/common/commonfile/rpcstore/store_test.go b/client/filestorage/rpcstore/store_test.go similarity index 100% rename from common/commonfile/rpcstore/store_test.go rename to client/filestorage/rpcstore/store_test.go diff --git a/common/commonfile/rpcstore/task.go b/client/filestorage/rpcstore/task.go similarity index 100% rename from common/commonfile/rpcstore/task.go rename to client/filestorage/rpcstore/task.go diff --git a/client/filestorage/syncer.go b/client/filestorage/syncer.go new file mode 100644 index 00000000..ee4d2d23 --- /dev/null +++ b/client/filestorage/syncer.go @@ -0,0 +1,133 @@ +package filestorage + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/filestorage/badgerfilestore" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileblockstore" + blocks "github.com/ipfs/go-block-format" + "go.uber.org/zap" + "sync" + "time" +) + +const syncerOpBatch = 10 + +type syncer struct { + ps *proxyStore + done chan struct{} +} + +func (s *syncer) run(ctx context.Context) { + defer close(s.done) + for { + select { + case <-ctx.Done(): + return + case <-time.After(time.Minute): + case <-s.ps.index.HasWorkCh(): + } + for s.sync(ctx) > 0 { + } + } +} + +func (s *syncer) sync(ctx context.Context) (l int) { + cids, err := s.ps.index.List(syncerOpBatch) + if err != nil { + log.Error("index list error", zap.Error(err)) + return + } + defer cids.Release() + l = cids.Len() + log.Debug("remote file sync, got tasks to sync", zap.Int("count", l)) + if l == 0 { + return + } + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, time.Minute) + defer cancel() + var wg sync.WaitGroup + for _, sOps := range cids.SpaceOps { + if len(sOps.Load) > 0 { + wg.Add(1) + go func(opt badgerfilestore.SpaceCidOps) { + defer wg.Done() + s.load(ctx, opt) + }(sOps) + } + if len(sOps.Delete) > 0 { + wg.Add(1) + go func(opt badgerfilestore.SpaceCidOps) { + defer wg.Done() + s.delete(ctx, opt) + }(sOps) + } + if len(sOps.Add) > 0 { + wg.Add(1) + go func(opt badgerfilestore.SpaceCidOps) { + defer wg.Done() + s.add(ctx, opt) + }(sOps) + } + } + wg.Wait() + return +} + +func (s *syncer) load(ctx context.Context, spaceOps badgerfilestore.SpaceCidOps) { + ctx = fileblockstore.CtxWithSpaceId(ctx, spaceOps.SpaceId) + res := s.ps.origin.GetMany(ctx, spaceOps.Load) + doneCids := badgerfilestore.NewCids() + defer doneCids.Release() + for b := range res { + if err := s.ps.cache.Add(ctx, []blocks.Block{b}); err != nil { + log.Error("syncer: can't add to local store", zap.Error(err)) + continue + } + doneCids.Add(spaceOps.SpaceId, badgerfilestore.OpLoad, b.Cid()) + } + if err := s.ps.index.Done(doneCids); err != nil { + log.Error("syncer: index.Done error", zap.Error(err)) + return + } + log.Info("successfully loaded cids", zap.Int("count", doneCids.Len())) +} + +func (s *syncer) add(ctx context.Context, spaceOps badgerfilestore.SpaceCidOps) { + doneCids := badgerfilestore.NewCids() + defer doneCids.Release() + res := s.ps.cache.GetMany(ctx, spaceOps.Add) + var bs []blocks.Block + for b := range res { + bs = append(bs, b) + doneCids.Add(spaceOps.SpaceId, badgerfilestore.OpAdd, b.Cid()) + } + ctx = fileblockstore.CtxWithSpaceId(ctx, spaceOps.SpaceId) + if err := s.ps.origin.Add(ctx, bs); err != nil { + log.Debug("syncer: can't add to remote store", zap.Error(err)) + return + } + + if err := s.ps.index.Done(doneCids); err != nil { + log.Error("syncer: index.Done error", zap.Error(err)) + return + } + log.Info("successfully added cids", zap.Int("count", doneCids.Len()), zap.Stringers("cids", doneCids.SpaceOps[0].Add)) +} + +func (s *syncer) delete(ctx context.Context, spaceOps badgerfilestore.SpaceCidOps) { + doneCids := badgerfilestore.NewCids() + defer doneCids.Release() + ctx = fileblockstore.CtxWithSpaceId(ctx, spaceOps.SpaceId) + for _, c := range spaceOps.Delete { + if err := s.ps.origin.Delete(ctx, c); err != nil { + log.Debug("syncer: can't remove from remote", zap.Error(err)) + continue + } + doneCids.Add(spaceOps.SpaceId, badgerfilestore.OpDelete, c) + } + if err := s.ps.index.Done(doneCids); err != nil { + log.Error("syncer: index.Done error", zap.Error(err)) + } + log.Info("successfully removed cids", zap.Int("count", doneCids.Len())) +} diff --git a/client/filestorage/syncer_test.go b/client/filestorage/syncer_test.go new file mode 100644 index 00000000..d7df8f8d --- /dev/null +++ b/client/filestorage/syncer_test.go @@ -0,0 +1,106 @@ +package filestorage + +import ( + "context" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "testing" + "time" +) + +func TestSyncer_add(t *testing.T) { + t.Log("start test") + fx := newPSFixture(t) + defer fx.Finish(t) + s := &syncer{ps: fx.proxyStore, done: make(chan struct{})} + ctx, cancel := context.WithCancel(ctx) + defer func() { + cancel() + <-s.done + }() + bs := newTestBocks("1", "2") + require.NoError(t, fx.Add(ctx, bs)) + go func() { + s.run(ctx) + }() + time.Sleep(time.Millisecond * 10) + bs2 := newTestBocks("3", "4") + require.NoError(t, fx.Add(ctx, bs2)) + var done = make(chan struct{}) + go func() { + defer close(done) + for _, b := range append(bs, bs2...) { + t.Log("check", b.Cid().String()) + for { + select { + case <-ctx.Done(): + return + default: + } + ab, err := fx.origin.Get(ctx, b.Cid()) + if err == nil { + assert.Equal(t, b.RawData(), ab.RawData()) + break + } + time.Sleep(time.Millisecond) + } + } + }() + select { + case <-done: + case <-time.After(time.Second): + t.Errorf("timeout") + } +} + +func TestSyncer_delete(t *testing.T) { + fx := newPSFixture(t) + defer fx.Finish(t) + s := &syncer{ps: fx.proxyStore, done: make(chan struct{})} + ctx, cancel := context.WithCancel(ctx) + defer func() { + cancel() + <-s.done + }() + go func() { + s.run(ctx) + }() + bs := newTestBocks("1", "2") + require.NoError(t, fx.cache.Add(ctx, bs)) + require.NoError(t, fx.origin.Add(ctx, bs)) + + for cid := range fx.cache.(*testStore).store { + t.Log("cache", cid) + } + for cid := range fx.origin.(*testStore).store { + t.Log("origin", cid) + } + + for _, b := range bs { + require.NoError(t, fx.Delete(ctx, b.Cid())) + } + + var done = make(chan struct{}) + go func() { + defer close(done) + for _, b := range bs { + for { + select { + case <-ctx.Done(): + return + default: + } + _, err := fx.origin.Get(ctx, b.Cid()) + if err != nil { + break + } + time.Sleep(time.Millisecond) + } + } + }() + select { + case <-done: + case <-time.After(time.Second): + t.Errorf("timeout") + } +} diff --git a/common/commonfile/fileblockstore/cachestore/cachestore.go b/common/commonfile/fileblockstore/cachestore/cachestore.go deleted file mode 100644 index a7592291..00000000 --- a/common/commonfile/fileblockstore/cachestore/cachestore.go +++ /dev/null @@ -1,122 +0,0 @@ -package cachestore - -import ( - "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileblockstore" - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - format "github.com/ipfs/go-ipld-format" - "go.uber.org/zap" - "io" -) - -type CacheStore struct { - Cache fileblockstore.BlockStoreExistsCIDs - Origin fileblockstore.BlockStore - Log *zap.Logger -} - -func (c *CacheStore) Get(ctx context.Context, k cid.Cid) (b blocks.Block, err error) { - if b, err = c.Cache.Get(ctx, k); err != nil { - if format.IsNotFound(err) { - err = nil - } else { - return - } - } else { - return - } - if b, err = c.Origin.Get(ctx, k); err != nil { - return - } - if addErr := c.Cache.Add(ctx, []blocks.Block{b}); addErr != nil { - c.Log.Error("block fetched from origin but got error for add to cache", zap.Error(addErr)) - } - return -} - -func (c *CacheStore) GetMany(ctx context.Context, ks []cid.Cid) <-chan blocks.Block { - cachedCids, localErr := c.Cache.ExistsCids(ctx, ks) - var originCids []cid.Cid - if localErr != nil { - c.Log.Error("hasCIDs error", zap.Error(localErr)) - originCids = ks - } else { - if len(cachedCids) != len(ks) { - set := cid.NewSet() - for _, cCid := range cachedCids { - set.Add(cCid) - } - originCids = ks[:0] - for _, k := range ks { - if !set.Has(k) { - originCids = append(originCids, k) - } - } - } - } - - if len(originCids) == 0 { - return c.Cache.GetMany(ctx, cachedCids) - } - - var results = make(chan blocks.Block) - - go func() { - defer close(results) - localResults := c.Cache.GetMany(ctx, cachedCids) - originResults := c.Origin.GetMany(ctx, originCids) - for { - var cb, ob blocks.Block - var cOk, oOk bool - select { - case cb, cOk = <-localResults: - if cOk { - results <- cb - } - case ob, oOk = <-originResults: - if oOk { - if addErr := c.Cache.Add(ctx, []blocks.Block{ob}); addErr != nil { - c.Log.Error("add block to cache error", zap.Error(addErr)) - } - results <- ob - } - case <-ctx.Done(): - return - } - if !oOk && !cOk { - return - } - } - }() - - return results -} - -func (c *CacheStore) Add(ctx context.Context, b []blocks.Block) error { - if localErr := c.Cache.Add(ctx, b); localErr != nil { - c.Log.Error("cache add error", zap.Error(localErr)) - } - return c.Origin.Add(ctx, b) -} - -func (c *CacheStore) Delete(ctx context.Context, k cid.Cid) error { - if localErr := c.Cache.Delete(ctx, k); localErr != nil { - if !format.IsNotFound(localErr) { - c.Log.Error("error while delete block", zap.Error(localErr)) - } - } - return c.Origin.Delete(ctx, k) -} - -func (c *CacheStore) Close() (err error) { - if closer, ok := c.Cache.(io.Closer); ok { - if localErr := closer.Close(); localErr != nil { - c.Log.Error("error while closing cache store", zap.Error(localErr)) - } - } - if closer, ok := c.Origin.(io.Closer); ok { - return closer.Close() - } - return nil -} diff --git a/common/commonfile/fileblockstore/fileblockstore.go b/common/commonfile/fileblockstore/fileblockstore.go index 4d29e582..0eb08a68 100644 --- a/common/commonfile/fileblockstore/fileblockstore.go +++ b/common/commonfile/fileblockstore/fileblockstore.go @@ -30,7 +30,7 @@ type BlockStore interface { Delete(ctx context.Context, c cid.Cid) error } -type BlockStoreExistsCIDs interface { +type BlockStoreLocal interface { BlockStore ExistsCids(ctx context.Context, ks []cid.Cid) (exists []cid.Cid, err error) } diff --git a/common/commonfile/fileserver/rpchandler.go b/common/commonfile/fileserver/rpchandler.go index fac8b9bc..6a6e563d 100644 --- a/common/commonfile/fileserver/rpchandler.go +++ b/common/commonfile/fileserver/rpchandler.go @@ -22,7 +22,7 @@ func (r *rpcHandler) GetBlocks(stream fileproto.DRPCFile_GetBlocksStream) error resp := &fileproto.GetBlockResponse{ Cid: req.Cid, } - _, c, err := cid.CidFromBytes(req.Cid) + c, err := cid.Cast(req.Cid) if err != nil { resp.Code = fileproto.CIDError_CIDErrorUnexpected } else { @@ -44,9 +44,15 @@ func (r *rpcHandler) GetBlocks(stream fileproto.DRPCFile_GetBlocksStream) error } func (r *rpcHandler) PushBlock(ctx context.Context, req *fileproto.PushBlockRequest) (*fileproto.PushBlockResponse, error) { - if err := r.store.Add(fileblockstore.CtxWithSpaceId(ctx, req.SpaceId), []blocks.Block{ - blocks.NewBlock(req.Data), - }); err != nil { + c, err := cid.Cast(req.Cid) + if err != nil { + return nil, err + } + b, err := blocks.NewBlockWithCid(req.Data, c) + if err != nil { + return nil, err + } + if err = r.store.Add(fileblockstore.CtxWithSpaceId(ctx, req.SpaceId), []blocks.Block{b}); err != nil { return nil, fileprotoerr.ErrUnexpected } return &fileproto.PushBlockResponse{}, nil @@ -54,7 +60,7 @@ func (r *rpcHandler) PushBlock(ctx context.Context, req *fileproto.PushBlockRequ func (r *rpcHandler) DeleteBlocks(ctx context.Context, req *fileproto.DeleteBlocksRequest) (*fileproto.DeleteBlocksResponse, error) { for _, cd := range req.Cid { - _, c, err := cid.CidFromBytes(cd) + c, err := cid.Cast(cd) if err == nil { if err = r.store.Delete(fileblockstore.CtxWithSpaceId(ctx, req.SpaceId), c); err != nil { // TODO: log diff --git a/common/commonfile/fileservice/fileservice.go b/common/commonfile/fileservice/fileservice.go index 029d83bd..30236d5e 100644 --- a/common/commonfile/fileservice/fileservice.go +++ b/common/commonfile/fileservice/fileservice.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileblockstore" "github.com/ipfs/go-cid" chunker "github.com/ipfs/go-ipfs-chunker" @@ -13,11 +14,14 @@ import ( "github.com/ipfs/go-unixfs/importer/helpers" ufsio "github.com/ipfs/go-unixfs/io" "github.com/multiformats/go-multihash" + "go.uber.org/zap" "io" ) const CName = "common.commonfile.fileservice" +var log = logger.NewNamed(CName) + func New() FileService { return &fileService{} } @@ -66,10 +70,16 @@ func (fs *fileService) AddFile(ctx context.Context, r io.Reader) (ipld.Node, err if err != nil { return nil, err } - return balanced.Layout(dbh) + n, err := balanced.Layout(dbh) + if err != nil { + return nil, err + } + log.Debug("add file", zap.String("cid", n.Cid().String())) + return n, nil } func (fs *fileService) GetFile(ctx context.Context, c cid.Cid) (ufsio.ReadSeekCloser, error) { + log.Debug("get file", zap.String("cid", c.String())) n, err := fs.merkledag.Get(ctx, c) if err != nil { return nil, err diff --git a/debug.json b/debug.json new file mode 100644 index 00000000..ee1cc111 --- /dev/null +++ b/debug.json @@ -0,0 +1,64 @@ +{"level":"debug","ts":"2022-12-15T15:13:18.511+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:13:31.837+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:13:39.610+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:15:04.659+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:15:07.447+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:15:10.704+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:15:13.893+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:15:18.286+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:15:24.064+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:15:34.095+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:15:46.708+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:15:55.627+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:16:12.023+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:18:29.361+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:26:53.897+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"fatal","ts":"2022-12-15T15:27:40.336+0300","logger":"main","caller":"debug/debug.go:46","msg":"can't start app","error":"can't run service 'debug.commands': unknown flag: --path","stacktrace":"main.main\n\t/home/che/projects/go-anytype-infrastructure-experiments/util/cmd/debug/debug.go:46\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:250"} +{"level":"fatal","ts":"2022-12-15T15:29:16.006+0300","logger":"main","caller":"debug/debug.go:46","msg":"can't start app","error":"can't run service 'debug.commands': unknown flag: --path","stacktrace":"main.main\n\t/home/che/projects/go-anytype-infrastructure-experiments/util/cmd/debug/debug.go:46\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:250"} +{"level":"fatal","ts":"2022-12-15T15:29:23.018+0300","logger":"main","caller":"debug/debug.go:46","msg":"can't start app","error":"can't run service 'debug.commands': unknown flag: --path","stacktrace":"main.main\n\t/home/che/projects/go-anytype-infrastructure-experiments/util/cmd/debug/debug.go:46\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:250"} +{"level":"debug","ts":"2022-12-15T15:29:30.862+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:32:12.137+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:32:48.922+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"info","ts":"2022-12-15T15:34:00.976+0300","logger":"debug.drpcclient","caller":"ocache/ocache.go:386","msg":"GC: removed 0; cache size: 1"} +{"level":"info","ts":"2022-12-15T15:35:00.921+0300","logger":"debug.drpcclient","caller":"ocache/ocache.go:386","msg":"GC: removed 0; cache size: 1"} +{"level":"debug","ts":"2022-12-15T15:35:20.899+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:39:29.678+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:39:51.228+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:40:45.462+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"fatal","ts":"2022-12-15T15:43:26.123+0300","logger":"main","caller":"debug/debug.go:46","msg":"can't start app","error":"can't run service 'debug.commands': unknown flag: --hash","stacktrace":"main.main\n\t/home/che/projects/go-anytype-infrastructure-experiments/util/cmd/debug/debug.go:46\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:250"} +{"level":"debug","ts":"2022-12-15T15:44:13.688+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:46:59.113+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:49:53.064+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:51:27.476+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:55:07.937+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-15T15:57:54.861+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:01:50.865+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:01:57.057+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"fatal","ts":"2022-12-21T20:02:20.880+0300","logger":"main","caller":"debug/debug.go:46","msg":"can't start app","error":"can't run service 'debug.commands': unknown flag: --path","stacktrace":"main.main\n\t/home/che/projects/go-anytype-infrastructure-experiments/util/cmd/debug/debug.go:46\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:250"} +{"level":"fatal","ts":"2022-12-21T20:03:06.554+0300","logger":"main","caller":"debug/debug.go:46","msg":"can't start app","error":"can't run service 'debug.commands': unknown flag: --path","stacktrace":"main.main\n\t/home/che/projects/go-anytype-infrastructure-experiments/util/cmd/debug/debug.go:46\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:250"} +{"level":"debug","ts":"2022-12-21T20:03:25.197+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:05:33.936+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:05:39.936+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:06:29.434+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:06:46.064+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:10:43.822+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:12:47.419+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:13:54.671+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:18:50.319+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:19:00.083+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:23:20.406+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:27:26.865+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:38:02.101+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:38:45.284+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:39:02.077+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:52:39.255+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T20:53:53.551+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T21:01:28.892+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T21:08:07.054+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T21:10:22.401+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T21:17:50.135+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T21:18:33.961+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T21:19:26.619+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T21:20:03.619+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T21:22:33.831+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} +{"level":"debug","ts":"2022-12-21T21:23:11.575+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"} diff --git a/etc/configs/client1.yml b/etc/configs/client1.yml index 08f4542e..a677c23d 100755 --- a/etc/configs/client1.yml +++ b/etc/configs/client1.yml @@ -5,27 +5,36 @@ grpcServer: - 127.0.0.1:4630 tls: false account: - peerId: 12D3KooWDPdgoAcpvHcED4FsU3iz1mX4D2XBi4KN8NXaSt82sn7j - peerKey: ZOaSbsUfam6r9KYA9jlkbDjQ+hZ6wpPXvDNRyjVyn7k1GMYeRlDTNSniNutKr32daIDQuowdjwaCeQ+hoij/Wg== - signingKey: OYgzXHbYZDouketIP3AJJ3MwmdQ/7ZepdkE1kUCnc6CLc02ua64saYnkFcoROcSgrVjrL9k8aaetWCLEXgM+kw== - encryptionKey: MIIEpAIBAAKCAQEA0/0eVsifbPXKWxGj/Upfnc7Sgv2i0f4Nd6h2ahHurxZt4+H+3MZ5fcmdBo2mrk8XArvIAl6CHxM0KnE8ZQPU7xKi8o45jibIipCaB1CfTgOtmJ8a9wZ2fwheEtbiy39Twb7Hyg71IeACmTmS3YPYX3nGAkR5/vln25r1G9K9dX5JIybhEsylvyS+w3L6noY0t7zyDQOuzX2S6VDwE4UrNJvTxM5f1ezs4z9LlbkTqPEN61K2Ji2UHyg1b2BONfIA+20hZsWwzmUdXdguMIaN0D1eTE+PSxHXU/myMBdfXeGFhNVsSaYhAm/KcPVt6oOd0gDRfuIOyT/QAeQA0VoWfwIDAQABAoIBAAZ97urrc+5rTIojbSk5mNoFVm8Kg2z44cKzVwUCjZOxFSZwalSqg1f1z6g+uEcIRwUfaQ2hhUycUvGlzBqv1lqH8JOLBXoz99o+eWkV7/r8o9lTrgi4mvJi+DaNfB6NRKxfQlEOyjUCXjIBEF1WR08NNKInJLFJRAP2p+D1QDYT3LUpVknIfrxCciBbisysx9QlS7sP9rAncUWUgn1bvYlyRmMg88EASanViQzdvrjIp6LTu2MqO5Q8mfRRcz3oK2qAuArE25KuyF/BRnMlFGDT0n4stgxCMDYw2vdJcvCsMXkfngbOsYeDBB4755vVi6NDGekDRBmI0S0//WCCqkkCgYEA8BgwhIgn//QE47Rx15F9H36msV3WPcxpSga9BBFQzKPXVij3oBxlyxTKnf/iFTIIeCvefne21R1MwOWuXavDr2tCQs322HI87DjrMKQStaf2wyn7E2So+7mW9psD5QGcQfXP0s/LoehinoChKTitWfqD1P0RX6YNQjaKYq80QG0CgYEA4ghHLE+dDkqG/08UH1L9B1Q9bWjvOiQjyrtRtnPz99xuSSH7XywxdXdPs8jCgquKRPHrEfBUd4Ry9uhqcCzjBVPx6T/J07L5wVa3ZE2g7n22DAT3eBPJ3bkeFsPV1zQzpJYnQSed/j8Zl2899242w0rUd1OeST9lvVz+uDfTlxsCgYEAokKGz5rBBa7hew4g/eHaYOWUPDxBpQQ3iArjxRL6u0JjLlyDdZabiNLlWEBth4uHw8dKF8hKLN8fVyIiZDXICw5++mz9zSvvVmnlMLtB1bjNAPqnL2UQ+wZjKwh6alNbSgyZRkyevy4xMBOYVyZxqWSvocrh6fVr8nqvrZ/gvUUCgYEAiA9nmHrMFcAzBxh5CmoQOgsxdtzFtH/ws6aSh3vBDiC4mnlEMYQOuaD6b0SYIcRU1S+yyveaQN+PvKUm/SNn/NsNMdTeDvsbcJBckJpSF33AyfdrZ/KxfzBhtl5oKMUZmSdxtby9VEBzjT6/VGQZvvEaeEHzdDAfdB+4jPe9/KUCgYBf7IhDH3+9Rrl6xQtIyErtaAWm+wQlucbMMoJgjXL6F9V6HqUer3+7OvNJQdrZiYcxHRlXynT7cN8iw59rOHQxEaNOXPwz9TS+wlvUerUHibgS1GOnLVke/NFoEi8M+B2pdo1M2x+YBdX3hi0kMYB0VtZM75uPKS9I1ZSFfLmZgQ== + peerId: 12D3KooWPSPh4BL6TMzttZciuxCNxovDMd9MmVHYjmLfeDzW85JY + peerKey: jyf2O72bAAPZ0gtfv0GM04vzftA+61XYr2+4tDnKxhXKYo+Ppdp9INRSlTZ6tlm6wotuArL4sahipmHE/ZWukQ== + signingKey: s64C2pRvQVGrHWJhnB+otY2UsBQRe9tQjWpW2YWJX5bCgn65KvGUalciIW3bawsVXXcjVEKRUcSnsPh70xux4g== + encryptionKey: MIIEoAIBAAKCAQEAn4Yfcri3RetiOo6rc3wzUUciBMWS/v2cKJc563ralqhtUTdgTiNv82pFP8A4zPmOyLcn2qNkidPlRMGXHtuABbqBNGjViwIYykKkZaPsP9ogrPvd5zKDaXXJaLZODZC3LVmco37FxWBctaQvUcWwvhBRFyu6writC3k27hdZXfgheGjd461wPFUibAvpyrlQVA0i57O2yobkTsStITID88MTCHdKJuNXmSJg/hI1ABAzLIOb+lm2kuseCBJtu9d6DoJwDXS9+H51sQQhHYSph9YGYMpyX2MmbbR0HMQjOEy/1wlX8l/R9m59A7wFQsjdb1Ug9OI3BYrA5k8nO8zlLQIDAQABAoH/eEOlcdfQU+YhKARnPallBuGZw/8v0w1frTpVcDIumWZhA9m7wSz2OYzkqCtCp0V9X9S1Nx/3q/ET58ILLDhPTAJPZjOiyinKhrG3PulWMs0/1SoNIT/z0o36Sfcm4RM5BfeJH7lzYFpFiqs9AWkI1kF24QEWy7ZuvzejMdxog25dDMqFW3bDJYYS8IzDI+gNmgrNLxh32ST5Ugrjeq4SgUjfKWMGARWPzQk+x9fxzhDJkIXtRqL3SDQmlN9Jy+/p3NuCC5gKTIYcoNEsrTnKqDQQL+Hr8KY8MaywmK1CRWcp1lguheAQqmcqyWdl11dAdIe+sSG0jtYeN4RD+dV9AoGBAMaRFki8e0FprmKk/sT6xGtLimptBh2YPO3Rfooow7aCcCP0ZRDxGUs56aCla4Cg7BBoWldHaPPdgG0rxe/Tocu5AUjohH+s8OOAP0trZzE6gavJV1Uv9XPKUs+EDpATbjFJTFeBN4Im/3uBnOx1CLE0tEOkAvW+NI8zKRUYj+8nAoGBAM2qGh2T+6QQnSvuBEEUCy/3JAJ1gkmvfJpZcE4M5kaQr0iu64L4oYE/68HqcK+IPzSAGgafn4cgodOh59syMMJ+7W2S5YS84JdLZER15SOQ+9q8qVpvqnsi1oW6tcRKdTFinnf/AmRQzWdkLsTp88ew+CSl7VGbgmVcFtcfIH2LAoGARrOMUrPB00W00OzcxfhgDbAlBcXyAoGdWDRasQjYvths43B2t/SQxAdH12pu/6rMwv7VA/SqOwKoYrbOUJlzJ52lBne8DdXfI7IbV1hTsuSZHTigfvWHmQX2PGtR4Bz7BFOL+jBJOm92UlyRKmR1hts0QE1avHNQNZjKzPck8MsCgYBwc8PXzGRZbuQhcwFMfCMp1N4RoiLdG2DsHF81rgPzLYVKHqqTcFMOkt7bps56i+rTT//rAzh88DDLwMk/pw/WKQS1Vw68J3I+B3EJpdTmP44WKfYHhusWbRQTBuYAMB4oJJ41SnAKXcwR7ktMTAeJdpAXqco7RuZjeZjbgx+GxQKBgDycT84wvDxoSz90iY+6pzzBQkbh6sDgy2IPV+nSXKIfvuhefZP4tawwHjwg7oscHv81J0/tkucf1k2VN3NyiqnYlT5Q5EgUxmyOiKw+jkrXBAjQtUgSzPAth0j/mMeQSCw+VrFLNJVGrc6g9s5gNrUFJLa2YnQT1c3PzeyVwlOQ apiServer: listenAddrs: - 127.0.0.1:8090 tls: false nodes: - - peerId: 12D3KooWCi7waUGMExFaEMgtKmTaanYaPGNhWmEx2nf7jFEXgQab + - peerId: 12D3KooWS7Z835JwmJ5pGHJxpEsJ3vab5M4RjJsWHXmDD5895DT9 address: 127.0.0.1:4430 - signingKey: QQwIKP+YwFY9WzeluVGFwlLj3EJ36RNtGH7QY4rJsAgq+X1I47HaHoFUg2UNZIMtq8mggHYZA4a1B/xntR1RcA== - encryptionKey: MIIEpQIBAAKCAQEAxn9H+w/uFvOd8rW5KCpCvisG6JmDQa1pp1gPdWhdTpqj3yI/3pYK5kgnZhpUF83bQ6zKsNSVcxRqRvW8ZBGA179fHwTwe/KkMuAhgoOCMNG0+EKmRYQJdul2MFvgOniVJxBNaywoCWA0HI24sk4Dp7pj2Dn9yhcj49J+j12STlY2/+oAmhA8a7nxZ2XOMZyZIR9jQ+9MgQdTEa65LSTMTwQ7/A0g3yY+t8+BxhYT5hEdFKIgAV3iapbpP8kT/EvVHZYFz0RUBa2NC1xJAjfFCliGBqD9k7kUNOmP1al4EXheueZDtg1WvwY3PRRcDuSvxLCh1TAuHMMOd7XbR9CrvQIDAQABAoIBAQCiui/pe8rFWBzRn/bWHacvvZhhUZCQZDjsbr3lk5SC3zWetLZFpR30YYyjIMx141Zw6ZQVWYHXoRHrcINsSgklVgcGKAd6pZXE+4edNnCh0xmYOROUg8U6jfRNetSdOsOUDcJaLQ35ebve+LREwL4wYBaAajJL3aKXn7YPlDdgLc02OeQ7t3hIGX/nxYQy2X6+GGsNZvZvmiEoO5cCKPo3lvHIA8nnjB/0J9Cd8ffqiTNrw0NO/ErHxPxTu4II+3VtJ3xWZKlVAOI7Q2uccexdqkJjFcJHmqRWLf8zQzxZxo1TxgDZmZcQHG4sQt/XBL6A2xoisi0kwo5yz4f5WflBAoGBAPKtjMdC92cZLtHlBYvqrQqxJdCpQyidVEa60o+IH2q7VDepLW9QAx0gIwZIAKk/kcTHCtNu1pxVaX7YhVmdtRj8cr1j7g+CWtYaAeMrlpDhUghBEindtVV0gOEkIMbn+Fpzp6/km8LCjqzD2SlVex4aJV8qCRi5WpK3W0Z9RHTtAoGBANFk13fgLry6es7roQvig4Bkg8Qtpy5HYvAyTPk/2q6FfNOZSSYw5y65FzJUZyTEWTn8EjBA+bngmAc6xEA4gr1diYduEm6bab3unXCGzBVWqih+cTAh9lPgmAAHJD3i89SFDE9s+Gox/1n7vVz/k5P5ac+1XyqWXCHI7j1S44gRAoGBANMIZtbU/k4SkSuHzIX64tXcbPUCbFuCTUpgpkCY8DEhjEAHB3K4Eq0eSDbrIGAN3tZO/LQWu9whTmc3JOdkhJqg1aqqntev1QxAe4mwWvPMbUiuRXxQx6LzeCvQ/gvap5cI4jbMR0NbazUD7vHJ2xG3TO5voI92iDPz7RTkVEaVAoGACHkoLvWnboOtTIpEbhKwd5WZr2qZhUnmOwoOC1gGJWHJd1aQmzcHY+Chi6vWsKoxYiNNKR63/EmWXVSHdIHU6IzMb+qIXGl1kfYB8PfDcmmbYSAcvHHjYemIvReM4+Q3MbZglSY3tzRmvOFu/EBrXGWPXpRcUYDcIZHb8idUhcECgYEArvEvxIFHIIX3bhMgXhMvM9TJ5/t/e2YHm2Qz4COeU6Y19CklAjvZ6CpZ9lGUWVbGVflI+ivayAT540HCT1kwmK8WDYrggb64Ksir0TZsv7aKjp5pfZDc9IakisBEsNkjSkOF7xbUGQe5CSiK5khFQx5X8jZHqsczlBntJuquQgw= - - peerId: 12D3KooWG2nD7XFggVFw48xk8JyHwn8iCZ9W73gmzJTkgfVjAxpb + signingKey: w+63sD3k2rBwrtKTcV02B8SdKYrI7rzLpXHtNYwZU7ryIj/g7tmvJFXN6TZjTWX4al5UAkRefJQfDXfXFCCPHA== + encryptionKey: MIIEpAIBAAKCAQEAtw1tn95/mQ2cpYgOKxaRwgZITgsrmZQIyH+bYFaUYUWoUp/AxAdPrh5cLehMUNXH8ZoyHkhV3bIMWpHoUyG+QJzz7etktAVz6MtEl3Wo/jAgAEDvXXgFMku2hnh6coWyhzyXR190ZHgGazJ0K1OtugsIFXwFro93j0+8iPuifsWkH6RaAhvZJUWaQGGmNQKSZnbdFokGmo5FM0z0eOI/sZGhCtxuWbpZz0hhvW3sXEWEyzq8WwTFLGoppIETnhjzcSJDO+pq0b934WuMTGazUH0sPc/AnoZJp00237Ar8g+h10CVxQ5SsTba7VYDCr7/zeHS+vvUYNgB4NO0lylaTQIDAQABAoIBADhUKoLCjhNEDAsoFewOcuX41vElINKOqjFAi0iW++v+6nAadtAby9oxv33k+O77Ch7/qyKEcd/ZtVF9irdiL9BkO+/fuspmzyc4va+55jnqBz7svHvPvhGfGNjCZDOvjqNs8sRkzEVKZfdAvFzE0DXqxR8PXhQ8U7dG+yZQAM3vcE/ib/14OxXgANrPwOKO04Lhff2xoXuuqrx9XAG+PbLlxi0gYGK55E1whgBldPC3nKA38hh1QDt+uh8AVdZ/Y0ehW7t2CG8zPNNTO7TjrZHwMeFgvVODN+0X1W9e7nIuDGVJ74FzvC5PZwBURJ/tjHSUCR0Pf9t87yaQqEQT/sECgYEA44Ve23Fnn97kNqpYzJJAq3+1Cg72cEg8gG9RA+AtOcMUO9EspWxiu/MPXGbaP/R/5L9UTikv7oN7an4gsO4FN9cFH/j4SY/fI6twi55DwpOFbgjLf6lT0tzEnHymPXjGCCHdc3BRIsjd3ehmQcwBZ/pPl8CggDxj24/xlqt7kbECgYEAzfceXEEpGmOZ1Hno3Xck/ZBcl12KjLVOK8ACe890BjWIPDMXaYfGJJpX0terR7BcqrLrq0komPUinoeelpIAitTXQ+zr6ULYXpZgxSTOz7aV7OAsudowp+m5z594ZagIgs3lKVILeclAqaYB4eq9/pHzHazS0YIwWwce753CfV0CgYEAzJ89YYTLmoe+nb90n3+Fc/gmHQa58t+0shnrNd4fLozZHLcSPTCOV9TQ4tyJuu0tPNAqhSUbu5o6m9sVkapvvPm/3TJwMtCW8aCVVqwe6tb8MKruQkFKZyEwHkEoza5aBCRY4yKHhg47JAGIPfK47Qe9H5EZiFtHv8bkkwpk1vECgYBuFJy6a+0e+IrYIAwQicRQbV6/W7RYPfK4uVfaemclhmj428mwkmuZVpCH1NLrbtwoM5Z3ppM3JRVKq2tcSE5X5SfkWvU/Z4WjEDZKR8DtDUYWIz5kWrRUmjvANxgvJN7folHPgtU1UxXnVh19dGv1amYIvzyx0yYrEKQ9JxEy1QKBgQC8zAG011S0HopmpBFizKanlmKPM9BHKk9GCl8dEQltxr+KA6734YwMy63fxaRBje0WUJJPMwOoxNUWfvJ6cRTi4BpEbOhy3ZfPCpVoVX71QPMuOqAvUbF/AQrv7tLCSs1WSA98k8DVeIITHAI/ITzCxuRxPyzU7agi0D9EBLoaPQ== + types: + - tree + - file + - peerId: 12D3KooWKkWv85fkYiCnvKVsVoCu9VwFupNejVBA2bFGBjic6gHP address: 127.0.0.1:4431 - signingKey: Hdpa1ee8nBVeIxYVcWjTSaVAfqvkBcqfhWRjlKi9fQ9cVEY6sy+MxMOa4CRQgM3eJCJhaLw2Hvux4rqMUJVtDA== - encryptionKey: MIIEowIBAAKCAQEAqJI1jTWuzef1hEdbE6Xth1GFXkJbLvn1LWmtyErrrQYtJd6zOsdncf522tcpxRs6LWANNe5HHzuP4VYiYnGe0CuBlMbnWLvH/vEh9Em0Bt7P3MrQTOFt/ESPN5AWaE3jeYc4M9WvZvLVpxCqJYE0xu8AkXi/5SqO3dfXKMyQ/kJoAn0FkAe44l3A7B/otqiYKp5oB+4/Fh1R0sFo3djSCS08KW9mbCQffQa0BA56f9cKF+/tVFqoW9YximwsVvecM8lr92NN3/kvO3a4xLnTZJNYBnaULsDbNS+Mdf0V+mkmcigaFumDHI6Z+Ca/y/tGGlTfExC4mRLOXgAnNIcXAwIDAQABAoIBAGf9UjXbcQuq1aWVk1TKnn5Exv5/9tpC7oHmWINf3IVvcviSqoRPMLx82vtjkmv6wOfvAhdL9+oHh1neFfYe23bV7+lEzsDJjrXyMR0PPpSibR5qqxdSVdQywxrmszwDGJoG1Z/8aWkb0rtuJ1hdnZ4/IF2dXNvVZi7qkNulXqjKc5pU16S2QPIjZ5YDatsl6Z7TZ48yyTxlmJKh50qmLO7S4+0jbVyDFyX8aAy8R/yDuZpZ1+aUHJkUqfvUpzngS2R61M/iAeGkNDP9mg59CwhJsOLsWSw5rA2MTwfmRIZjczG4WCfkhBhzQWztN8ded09xLySY/gmMYsKwpX9zwikCgYEAwlzJ0kC3ATNOQPhIwaVDY4eI8SRYTZIgp+aek/z/Jek+kf6/VY6eVWimEEjyMVGLTzjyrUOQyhxkJ2QqUNVJYongj/3yF8WE2+d+G50QA3J0K0b8FQFLGlLndgJ++AZmNxxMyD/XZ5aSqWc58SzA3UgbjTdDJwv6KYIc+r6om10CgYEA3geQ4XOPkm3/AagGvTRbM88nr4tyeyEzfLdXqSBdUBM+cB0t3l+mh0aMqPd1o8TcrvJ+33Kp3vmM2wq6Rj/jChx0pqQZeBX+/i3fSQUYiCnDeo2CsJ1pix3ju6xKIlssi7Lqf50AUH3TgPfeOEgl0c0skc7Iiw6uBbbN2jMbtd8CgYB8UNkN0DK9Y9GDoMr4gPoPaRtgEb0hMHwOqGV5hnK0DvHkc6px0NzZCCxfcijm/p86NtSRmgu8Gli9EUY3mZRsoH+v2d/E8KM//Fse0mDxs302SRrnXIJq/efqBUKs5XrvePxrgNoH+bko/UuERPm/D2X/9v7OtMx3TC+4+cXiSQKBgQDAbuxKCp93+S/YXqogmF0nhTbPNdwuDbOTN1CZu/xEJ7mo8BFON7acbjABTiC+pSPj2TbPMZE7OSy0uBKESmDb5ZfQyk9svhu4b0ekAO+nLBNJh5aqvnO4aFp10TibmEv+dD48BnY8TSHgGHSYcSeeM+aaJQ+5PirjtvGpWTx+HwKBgD+mqVa627FOJHKJ022L6eH61S466rvxiQqQdOKaLkRLNTsf0frcsZIEoPGXQmAsx79n5ezK0ndPsY2oWDu87teHaElqTp0oMzayuP1ognyFp5CjlUmUgLZ4ijw5ZoAinGVpBxYvHZ/KxRMxMhMYnXPYrx95nNT3GDMGV/4xG2cH - - peerId: 12D3KooWLNu2jz93Bmw5AFjoWUWVqewjMDX9X6LDnD3B5vcDPMtK + signingKey: 460RGvA77dWz7qFYmPqpMzc6Nw5eAXOXZP0fQvcyXj2TmG/z0E5jnTMfpFD7GHIwuFA9+XvqnjuKFteeHaDxSg== + encryptionKey: MIIEowIBAAKCAQEAyL/fnKl6ztxVtXkxdl48HEawDKmJmBxs6rGl+kNx+cb6Jio/GyKz4d1bCW5Ni5glyVg11RqA09wPaJxKMlp/svz+46a9MtZmC4/pFOiSaMkmMOs61apTruJNNDK/9O0j+irCnJFRGactt/AlCKU+9WjwsTtJtmqEkt0uuD0Tn709Itx86nzXhCqNtEKPvo83FaZ60RFpe72KNLcyP7DgR8m7Csa4JWfK1Ig0539rFxM5Co/GGNna3mqShDbIN0Aw8k7yCuDaCx/akd0Yd2BEjBApHtlonu3BYfCAF3bAus9sejogeA+mu52akN7H0YnC1BeftFAzlZ5yJV1gKwsYmwIDAQABAoIBAQCzzPaw0DMIV9wEP9oHVHuuL7m6fZaZQMxkoFwyfHn25zphOHFxEnHemG3TUpHtt4YQggslJSnBl1XNsj3aP6gkXejFaTAH+nNHY8u1SGDprU+hfO4jNPzipBnV6KZ47nTMucO4i4cB3PRbzKC+z5JGJ4l8k8d/tIOtLqGLrliHNlRZ7LRfovCP+ekPrPpxtJBp48GUQFRexXqsytiEYlAjXPUVHh+8b1lmDJXzxzTf2Nhx1lXykrrRYlOOYSz0fufFzsLcJSzPbfnomgjaNGKPCSWfREFp3Ch1P6+G9hClMORL5Vc58I5j3SlacsoWEw3ywyE0Visfn7ojIuqboLHBAoGBAMnbL0TeKaKIkRGdKXFhUzpUrH1mPg7QOLH65GbbtO5DHTwDRjX0I8pc+XT7u/qVhG+h72wBZ3J/egAlvLUOtwuuNhjir5BqS90QhtofsHy7IbzAkMhPpQ/3p2+ZrfTGylzUHLwR/hr9aiP5PizMJQ2JSQU3k8YozVGENnmpnydLAoGBAP6YskbZU6+TPXlconbg2G+D6KSYScu8h1d6mYHjcbCOc5ILVa1DJGr/ufYl2dqPTA63Mj9PJ8Dla4WI9iXwh0cbTI/N+XD27y54sWonuWymX/9i2tlhmnLeLqGq7zQ+eCQMMnhH2rbN/+hEYMwbsTAdu4txbPDMGVoL9K09PXHxAoGAGBuASrZJvKqYwMTHVU4tVXMVYqiaUsSVcNQpAQvOUQJc9HTjpr/wolN2S31hFu1Scs6hPIHya99Dn87h+bG3NMLqnRA9rX60bsNxh41vU4Y54kQRRosUiJKoQZDWELzJIEsI34E6mtiXG5LB1THQXwx9Vw0rLehjlQ+4PdF/O38CgYBjHbs6Dd2gmufx2Xh+Y2afc3EcsxT3tjvSeK5OfOeD3tFrZ/JA88S3yzrwcyfvCJ6JlBSBxSUq2aYUZI+/kXZ43k3eJkgYDGptYxtewnxTqinxWODuhCsG0SzCT7O0WSWYkw8K+J5TULtyBzzP+W/v1YNv9AZ/cFXmUoU89Hx5YQKBgBPx7Dm8s8M/8EQoV0NQwgk0I2W7WCnaNxNaNnIg1MtEsBkI+UkxnAGPUwEDtv5cRmciBO6SdsvUrZh+t41Ui/MLTMJOsQO53HAbng4tjxcAmDM/R/iYyI6gCCYhxUudPTaKDZchV41TrhGaqXliV6CgCRVm2WsKFgJdFNW7QVq3 + types: + - tree + - file + - peerId: 12D3KooWCYAzw5jFx3VNkJ8jn6VFq4WcayT6sZzdBx5fJFeCjXbV address: 127.0.0.1:4432 - signingKey: eFgkHOqqWUE2i3HChsYuER37d8Z5Izd1ENfLmpMsgSSc6lnYW+35sm7b5J7sK1G+xK0OPhtz8uxYkT0f5gJuwA== - encryptionKey: MIIEpAIBAAKCAQEAzc5cRGNf5G25G5Lh1hKEhV3lgxxB5RL3R0bjLhtS6W4/xhMvSaZR2girvzLBK1ydXk95Oc0EUNfCE/QKddUy16ycC4DHaObMjf96cVHhiIfKhLTO5gg2mqisQ39+oTtn85/T1imYMlkHGIt1MvHqXoPQa8guDXB/DCDz+UeCzPBGUiS4ZORJHrdd9QP/edyowUsfvwIayJhd4BUKOhgWvIAHohOTls1Xa16fkpojDy3b1L5pFvQdMw0DFY3m2LtIYVmlw1YyE/vqbhR/DMAkGGGD2nHfSQ/zApGAeYgqNSyAAMwjAaXtXnW/SYPr0IHRAnm4Ojk0qKcUfaTFKSSakQIDAQABAoIBAAksPm6J41dCELMK6+fnsWJkWftrAgDcxIq3vR5r91kSIeOJLV1h/Vnzcvw1neh520W90xBhc+TKiQrsoJ653uc/+UCF/91MFCfsECAG3z9/leYuTN5x1UU1aWAkyZcUF8EDCaUM+4ya7TcJ2DJqF+EYjOyQ4oSU1ATNXzJoHotVwcZ79uPNRTMMTUQ/sZjE3OJGkoPzOoacjmAsg3Xg2M8uCC3HAqf5kO146CX4/x9z8EnKr8XHWm8oRT0mWLR3N2WFIJ6sDuyL7MPy4Sm2xSbqS5pJ3kC/rwuLcR4KlL+HyVvpTPHQlysiwWfKz1YycKNaWfeAVQFQDKfe9fpTK4UCgYEA5rXvM0eGTljFUYg5Eb47LNl/YKcQoPGL9zIrTuyYl0skr364iIXFQHG3cv3G461jP6/eBBs0sMZe47SpNv9zP+hYthaReVLzPqqxrCQF4rJo2oCWb774BnkxWQjbiPLSJi2cc+5ZqMQI8u5XxdqO9oJ4pCCxs5nCasAcLGedrrcCgYEA5F2Rgq5mN75dSzco5MDC594HGQ4mXpj9xCDocvbhrvEm0NY2/BTH23ak11EnSYJNCvI43NX2nmxEkVzl7TbNLBP+u6IxK1XzFXg4ki2IIu1ACzHwbBE95APxZ7n4BRKhFkew96HX4cSWSvMfmrK/Vb3hPJpV8UUjaru6CiN/OPcCgYB4B09bLmsBd82wjV6jjITc4IsUjdZo5UIcaU1+0jjQ/ZcodpUq8e2diYwXl1BSQ3LPP4ASQtU24v2bGfKvWldreEYu9a7Zn/5NLCEjndoyBv/mLeAWYxRGyeaSm7kblrkeg7xR1D9xPgwp1zZzCTI3rcl2GkxZVDWBtFD0CTRQIQKBgQDe2lzMrYp87Z23b+3NRjst8OL2VXOmLyC9y+trfXeBtD3P4Kwp1dGvXpnAsaZoOusaOoS5JWgU88z6GjEbC7avRBf7XW0kQC0HD5oNNLe8ddBg3Gwl2bGPGTX0pmvd728aAf41uk+lN6X/IEEAQ10qvDDYZjhmSbUlTGthx4A4wwKBgQCQYGnHr5fvqlmLga+xkPXMFnJE1D+Ya/fkA/HTGZfLoMiqFv2q8uqque0xb5Kaim7eyQ2SpE/yolaeS8L7o6zMKT6du5QONhKdQN9ccdW/3yUQXzWcjYjAyB+zdYn9vKlMa6VnuXjR5gA8RrnHGJMZAeNLOWzH1B0eJSi/Q8w9Rg== + signingKey: 94Y4rDt00bq4xkrPJ7E9OPULzOBd5mzn0uMTKP5b4JUobSOKGyrnwWxO9UpY7OSzA2Y/5dgIMSFSCvv4p1iwaA== + encryptionKey: MIIEpAIBAAKCAQEAs/jLbBcMpkjqZ8R7ySsE9FkUdVZsJJk4BWI4OHbRg5+RMt74AeoKK+NW81zxw5tzLXvW9AZVccO742xB5mRfyrvZ22YrPedTvQymmyY5RCh9qduk0OOfItlNVyG7zRBgK90TAmkwbg4B1jCFIt3cuttK7A6gUKqy9deNhYZd67a7byJIgGmKcqK4ETbeLw8vJv08Htagn3/7CRjwAQcuLNzWw7G4SiTyIOcLpX14oQl3/v1/gYleFVyqebvo4xftQ/pCzDZoD6/t/HK70zzD+TsCmWK/o6iO42hsARIkuuuufASW9mIGcjKj8v+mftLEqqkSSEwtZTuLATJRG2bwiQIDAQABAoIBAQCC+GKpVZjKBjQ3scBXpGvlmlIOFgd7Ftmy6Uh6ptVP0Tasa6DWW8htKfNkBVaXgC/wgLfsPBPAR64bEfRfQtqHQe+H/7EmSosg/+za6ZUxKbpRe1tU/OEZTkQ/TXhLAkjKgwbLcVtiK+VgR00ME6MHhIDgisBWE/NKf0QpUKBW4Rp/0l3bUYO+b7aAIBT0Q/Noc+kaXbHygYuzTMYCvItGDe0WtvrNE/IQEnjC51i02rpa5GI29T4OVvumKbLjFMlT0EttkTjZNVEicP8RHqSKlE7+lMPT1eH3CEVepV7QKCzgPN9pBudLmzmb7HhSZvwMzzkTTt1WczWshBrKZKHRAoGBAMynv1toSLzznwQzffhwLQzvzxnjhdxNKKbJ7cVG4CNVKRVh9iPVBv+XWgBYInnpC/ByX5HDKleRvo54wXzYoMlxtqz8ZCOFxcWrocehbLAIxtGDlSAOGAgSVMrJDJr28Hc7n0zesIyQzymoWfN7yDxcKLB34hC0qUQVuaY7PjTNAoGBAOEfuQkzdrIcT7hEuX+Jv9SmkBnxSocpUZyF7vCm03Dg8FhGK16WWXwa5ii0R6LL4A31J1A/ydpFTd+kxqaQ0dyrc9QWkwzuyy3JYO2R/J7ejFO5KfuKMojXPMwum69y95vL4ZGfYXmF/vYv7TYaBhoI0oeJA5+w9dX20z1jgkqtAoGBAJRqJky8sNtOdYhPa1BK0XDrTC6DIKVl01A5alRBlPQqoxOdqinMKDoc4akUQVRVnFHwL7x+Y2uEB0Q88FyAoQHVlFuY4WodbhJu6HDkcPSsOLriCLhpYCYiXRl+ecS7xiFBvMG7UR9vOL0GGM2Je+nCD8QB/JCO4527f5m8pt0VAoGAd2Vht5WJ0DDfvvUEBLZD/T5RktC8HC83z3HhJdT0sxs5nTep7MKEtyN1CgWDML48GGr67L7ICXFUOdakXNbV1tk/1y4Z03QaYjA5rgYNGx0hA45iy7uhzZ2J6yiU/VpWJFTfT2JeShtc+6izgEwRDGG9dpCeUWWDHHWJ1zcddQkCgYB//JrVbMtkB+L5OV0UfAFlhGaVoThfCL5QHAwmXq+gsX7dxCu5NGJDWJ6fQ+e+0zQms6nB/BvLXcKWo0rEZJsyiUpWN8X06nsyHN1Nxk7PiPlL12dV9/RGD98kNmFQorYhO/lOWImqy7ZpuNNSc69l1B9Q/G/FLU8itzSp2irSEA== + types: + - tree + - file space: gcTTL: 60 syncPeriod: 11 diff --git a/etc/configs/client2.yml b/etc/configs/client2.yml index 886fa9ae..5b5caf2d 100755 --- a/etc/configs/client2.yml +++ b/etc/configs/client2.yml @@ -5,27 +5,36 @@ grpcServer: - 127.0.0.1:4631 tls: false account: - peerId: 12D3KooWJ8avwNEYgR14WMWoPaeNvfEAqyNnCCP8Doimfb6JhorD - peerKey: fcg/sg0QzcK+1JUSslS7pbLu1CHCBK4lciqdAnjUG5R7iGFFpfjlYvk9Kvt6FXCP1QFDD+ALbsEw/e6SJXBpjg== - signingKey: OYgzXHbYZDouketIP3AJJ3MwmdQ/7ZepdkE1kUCnc6CLc02ua64saYnkFcoROcSgrVjrL9k8aaetWCLEXgM+kw== - encryptionKey: MIIEpAIBAAKCAQEA0/0eVsifbPXKWxGj/Upfnc7Sgv2i0f4Nd6h2ahHurxZt4+H+3MZ5fcmdBo2mrk8XArvIAl6CHxM0KnE8ZQPU7xKi8o45jibIipCaB1CfTgOtmJ8a9wZ2fwheEtbiy39Twb7Hyg71IeACmTmS3YPYX3nGAkR5/vln25r1G9K9dX5JIybhEsylvyS+w3L6noY0t7zyDQOuzX2S6VDwE4UrNJvTxM5f1ezs4z9LlbkTqPEN61K2Ji2UHyg1b2BONfIA+20hZsWwzmUdXdguMIaN0D1eTE+PSxHXU/myMBdfXeGFhNVsSaYhAm/KcPVt6oOd0gDRfuIOyT/QAeQA0VoWfwIDAQABAoIBAAZ97urrc+5rTIojbSk5mNoFVm8Kg2z44cKzVwUCjZOxFSZwalSqg1f1z6g+uEcIRwUfaQ2hhUycUvGlzBqv1lqH8JOLBXoz99o+eWkV7/r8o9lTrgi4mvJi+DaNfB6NRKxfQlEOyjUCXjIBEF1WR08NNKInJLFJRAP2p+D1QDYT3LUpVknIfrxCciBbisysx9QlS7sP9rAncUWUgn1bvYlyRmMg88EASanViQzdvrjIp6LTu2MqO5Q8mfRRcz3oK2qAuArE25KuyF/BRnMlFGDT0n4stgxCMDYw2vdJcvCsMXkfngbOsYeDBB4755vVi6NDGekDRBmI0S0//WCCqkkCgYEA8BgwhIgn//QE47Rx15F9H36msV3WPcxpSga9BBFQzKPXVij3oBxlyxTKnf/iFTIIeCvefne21R1MwOWuXavDr2tCQs322HI87DjrMKQStaf2wyn7E2So+7mW9psD5QGcQfXP0s/LoehinoChKTitWfqD1P0RX6YNQjaKYq80QG0CgYEA4ghHLE+dDkqG/08UH1L9B1Q9bWjvOiQjyrtRtnPz99xuSSH7XywxdXdPs8jCgquKRPHrEfBUd4Ry9uhqcCzjBVPx6T/J07L5wVa3ZE2g7n22DAT3eBPJ3bkeFsPV1zQzpJYnQSed/j8Zl2899242w0rUd1OeST9lvVz+uDfTlxsCgYEAokKGz5rBBa7hew4g/eHaYOWUPDxBpQQ3iArjxRL6u0JjLlyDdZabiNLlWEBth4uHw8dKF8hKLN8fVyIiZDXICw5++mz9zSvvVmnlMLtB1bjNAPqnL2UQ+wZjKwh6alNbSgyZRkyevy4xMBOYVyZxqWSvocrh6fVr8nqvrZ/gvUUCgYEAiA9nmHrMFcAzBxh5CmoQOgsxdtzFtH/ws6aSh3vBDiC4mnlEMYQOuaD6b0SYIcRU1S+yyveaQN+PvKUm/SNn/NsNMdTeDvsbcJBckJpSF33AyfdrZ/KxfzBhtl5oKMUZmSdxtby9VEBzjT6/VGQZvvEaeEHzdDAfdB+4jPe9/KUCgYBf7IhDH3+9Rrl6xQtIyErtaAWm+wQlucbMMoJgjXL6F9V6HqUer3+7OvNJQdrZiYcxHRlXynT7cN8iw59rOHQxEaNOXPwz9TS+wlvUerUHibgS1GOnLVke/NFoEi8M+B2pdo1M2x+YBdX3hi0kMYB0VtZM75uPKS9I1ZSFfLmZgQ== + peerId: 12D3KooWQpz99Dc9Z2sCsXBjUzRbWtiXJ6oV3rZDccqUwTjop89Q + peerKey: jac8YPezUIiHZ5leof47XxiwwBWpPLnAg9fIVkvkPqTfB/pd44QRIgBwilG9/PLspWjEe2PifvwU7Gjsz/nI2w== + signingKey: s64C2pRvQVGrHWJhnB+otY2UsBQRe9tQjWpW2YWJX5bCgn65KvGUalciIW3bawsVXXcjVEKRUcSnsPh70xux4g== + encryptionKey: MIIEoAIBAAKCAQEAn4Yfcri3RetiOo6rc3wzUUciBMWS/v2cKJc563ralqhtUTdgTiNv82pFP8A4zPmOyLcn2qNkidPlRMGXHtuABbqBNGjViwIYykKkZaPsP9ogrPvd5zKDaXXJaLZODZC3LVmco37FxWBctaQvUcWwvhBRFyu6writC3k27hdZXfgheGjd461wPFUibAvpyrlQVA0i57O2yobkTsStITID88MTCHdKJuNXmSJg/hI1ABAzLIOb+lm2kuseCBJtu9d6DoJwDXS9+H51sQQhHYSph9YGYMpyX2MmbbR0HMQjOEy/1wlX8l/R9m59A7wFQsjdb1Ug9OI3BYrA5k8nO8zlLQIDAQABAoH/eEOlcdfQU+YhKARnPallBuGZw/8v0w1frTpVcDIumWZhA9m7wSz2OYzkqCtCp0V9X9S1Nx/3q/ET58ILLDhPTAJPZjOiyinKhrG3PulWMs0/1SoNIT/z0o36Sfcm4RM5BfeJH7lzYFpFiqs9AWkI1kF24QEWy7ZuvzejMdxog25dDMqFW3bDJYYS8IzDI+gNmgrNLxh32ST5Ugrjeq4SgUjfKWMGARWPzQk+x9fxzhDJkIXtRqL3SDQmlN9Jy+/p3NuCC5gKTIYcoNEsrTnKqDQQL+Hr8KY8MaywmK1CRWcp1lguheAQqmcqyWdl11dAdIe+sSG0jtYeN4RD+dV9AoGBAMaRFki8e0FprmKk/sT6xGtLimptBh2YPO3Rfooow7aCcCP0ZRDxGUs56aCla4Cg7BBoWldHaPPdgG0rxe/Tocu5AUjohH+s8OOAP0trZzE6gavJV1Uv9XPKUs+EDpATbjFJTFeBN4Im/3uBnOx1CLE0tEOkAvW+NI8zKRUYj+8nAoGBAM2qGh2T+6QQnSvuBEEUCy/3JAJ1gkmvfJpZcE4M5kaQr0iu64L4oYE/68HqcK+IPzSAGgafn4cgodOh59syMMJ+7W2S5YS84JdLZER15SOQ+9q8qVpvqnsi1oW6tcRKdTFinnf/AmRQzWdkLsTp88ew+CSl7VGbgmVcFtcfIH2LAoGARrOMUrPB00W00OzcxfhgDbAlBcXyAoGdWDRasQjYvths43B2t/SQxAdH12pu/6rMwv7VA/SqOwKoYrbOUJlzJ52lBne8DdXfI7IbV1hTsuSZHTigfvWHmQX2PGtR4Bz7BFOL+jBJOm92UlyRKmR1hts0QE1avHNQNZjKzPck8MsCgYBwc8PXzGRZbuQhcwFMfCMp1N4RoiLdG2DsHF81rgPzLYVKHqqTcFMOkt7bps56i+rTT//rAzh88DDLwMk/pw/WKQS1Vw68J3I+B3EJpdTmP44WKfYHhusWbRQTBuYAMB4oJJ41SnAKXcwR7ktMTAeJdpAXqco7RuZjeZjbgx+GxQKBgDycT84wvDxoSz90iY+6pzzBQkbh6sDgy2IPV+nSXKIfvuhefZP4tawwHjwg7oscHv81J0/tkucf1k2VN3NyiqnYlT5Q5EgUxmyOiKw+jkrXBAjQtUgSzPAth0j/mMeQSCw+VrFLNJVGrc6g9s5gNrUFJLa2YnQT1c3PzeyVwlOQ apiServer: listenAddrs: - 127.0.0.1:8091 tls: false nodes: - - peerId: 12D3KooWCi7waUGMExFaEMgtKmTaanYaPGNhWmEx2nf7jFEXgQab + - peerId: 12D3KooWS7Z835JwmJ5pGHJxpEsJ3vab5M4RjJsWHXmDD5895DT9 address: 127.0.0.1:4430 - signingKey: QQwIKP+YwFY9WzeluVGFwlLj3EJ36RNtGH7QY4rJsAgq+X1I47HaHoFUg2UNZIMtq8mggHYZA4a1B/xntR1RcA== - encryptionKey: MIIEpQIBAAKCAQEAxn9H+w/uFvOd8rW5KCpCvisG6JmDQa1pp1gPdWhdTpqj3yI/3pYK5kgnZhpUF83bQ6zKsNSVcxRqRvW8ZBGA179fHwTwe/KkMuAhgoOCMNG0+EKmRYQJdul2MFvgOniVJxBNaywoCWA0HI24sk4Dp7pj2Dn9yhcj49J+j12STlY2/+oAmhA8a7nxZ2XOMZyZIR9jQ+9MgQdTEa65LSTMTwQ7/A0g3yY+t8+BxhYT5hEdFKIgAV3iapbpP8kT/EvVHZYFz0RUBa2NC1xJAjfFCliGBqD9k7kUNOmP1al4EXheueZDtg1WvwY3PRRcDuSvxLCh1TAuHMMOd7XbR9CrvQIDAQABAoIBAQCiui/pe8rFWBzRn/bWHacvvZhhUZCQZDjsbr3lk5SC3zWetLZFpR30YYyjIMx141Zw6ZQVWYHXoRHrcINsSgklVgcGKAd6pZXE+4edNnCh0xmYOROUg8U6jfRNetSdOsOUDcJaLQ35ebve+LREwL4wYBaAajJL3aKXn7YPlDdgLc02OeQ7t3hIGX/nxYQy2X6+GGsNZvZvmiEoO5cCKPo3lvHIA8nnjB/0J9Cd8ffqiTNrw0NO/ErHxPxTu4II+3VtJ3xWZKlVAOI7Q2uccexdqkJjFcJHmqRWLf8zQzxZxo1TxgDZmZcQHG4sQt/XBL6A2xoisi0kwo5yz4f5WflBAoGBAPKtjMdC92cZLtHlBYvqrQqxJdCpQyidVEa60o+IH2q7VDepLW9QAx0gIwZIAKk/kcTHCtNu1pxVaX7YhVmdtRj8cr1j7g+CWtYaAeMrlpDhUghBEindtVV0gOEkIMbn+Fpzp6/km8LCjqzD2SlVex4aJV8qCRi5WpK3W0Z9RHTtAoGBANFk13fgLry6es7roQvig4Bkg8Qtpy5HYvAyTPk/2q6FfNOZSSYw5y65FzJUZyTEWTn8EjBA+bngmAc6xEA4gr1diYduEm6bab3unXCGzBVWqih+cTAh9lPgmAAHJD3i89SFDE9s+Gox/1n7vVz/k5P5ac+1XyqWXCHI7j1S44gRAoGBANMIZtbU/k4SkSuHzIX64tXcbPUCbFuCTUpgpkCY8DEhjEAHB3K4Eq0eSDbrIGAN3tZO/LQWu9whTmc3JOdkhJqg1aqqntev1QxAe4mwWvPMbUiuRXxQx6LzeCvQ/gvap5cI4jbMR0NbazUD7vHJ2xG3TO5voI92iDPz7RTkVEaVAoGACHkoLvWnboOtTIpEbhKwd5WZr2qZhUnmOwoOC1gGJWHJd1aQmzcHY+Chi6vWsKoxYiNNKR63/EmWXVSHdIHU6IzMb+qIXGl1kfYB8PfDcmmbYSAcvHHjYemIvReM4+Q3MbZglSY3tzRmvOFu/EBrXGWPXpRcUYDcIZHb8idUhcECgYEArvEvxIFHIIX3bhMgXhMvM9TJ5/t/e2YHm2Qz4COeU6Y19CklAjvZ6CpZ9lGUWVbGVflI+ivayAT540HCT1kwmK8WDYrggb64Ksir0TZsv7aKjp5pfZDc9IakisBEsNkjSkOF7xbUGQe5CSiK5khFQx5X8jZHqsczlBntJuquQgw= - - peerId: 12D3KooWG2nD7XFggVFw48xk8JyHwn8iCZ9W73gmzJTkgfVjAxpb + signingKey: w+63sD3k2rBwrtKTcV02B8SdKYrI7rzLpXHtNYwZU7ryIj/g7tmvJFXN6TZjTWX4al5UAkRefJQfDXfXFCCPHA== + encryptionKey: MIIEpAIBAAKCAQEAtw1tn95/mQ2cpYgOKxaRwgZITgsrmZQIyH+bYFaUYUWoUp/AxAdPrh5cLehMUNXH8ZoyHkhV3bIMWpHoUyG+QJzz7etktAVz6MtEl3Wo/jAgAEDvXXgFMku2hnh6coWyhzyXR190ZHgGazJ0K1OtugsIFXwFro93j0+8iPuifsWkH6RaAhvZJUWaQGGmNQKSZnbdFokGmo5FM0z0eOI/sZGhCtxuWbpZz0hhvW3sXEWEyzq8WwTFLGoppIETnhjzcSJDO+pq0b934WuMTGazUH0sPc/AnoZJp00237Ar8g+h10CVxQ5SsTba7VYDCr7/zeHS+vvUYNgB4NO0lylaTQIDAQABAoIBADhUKoLCjhNEDAsoFewOcuX41vElINKOqjFAi0iW++v+6nAadtAby9oxv33k+O77Ch7/qyKEcd/ZtVF9irdiL9BkO+/fuspmzyc4va+55jnqBz7svHvPvhGfGNjCZDOvjqNs8sRkzEVKZfdAvFzE0DXqxR8PXhQ8U7dG+yZQAM3vcE/ib/14OxXgANrPwOKO04Lhff2xoXuuqrx9XAG+PbLlxi0gYGK55E1whgBldPC3nKA38hh1QDt+uh8AVdZ/Y0ehW7t2CG8zPNNTO7TjrZHwMeFgvVODN+0X1W9e7nIuDGVJ74FzvC5PZwBURJ/tjHSUCR0Pf9t87yaQqEQT/sECgYEA44Ve23Fnn97kNqpYzJJAq3+1Cg72cEg8gG9RA+AtOcMUO9EspWxiu/MPXGbaP/R/5L9UTikv7oN7an4gsO4FN9cFH/j4SY/fI6twi55DwpOFbgjLf6lT0tzEnHymPXjGCCHdc3BRIsjd3ehmQcwBZ/pPl8CggDxj24/xlqt7kbECgYEAzfceXEEpGmOZ1Hno3Xck/ZBcl12KjLVOK8ACe890BjWIPDMXaYfGJJpX0terR7BcqrLrq0komPUinoeelpIAitTXQ+zr6ULYXpZgxSTOz7aV7OAsudowp+m5z594ZagIgs3lKVILeclAqaYB4eq9/pHzHazS0YIwWwce753CfV0CgYEAzJ89YYTLmoe+nb90n3+Fc/gmHQa58t+0shnrNd4fLozZHLcSPTCOV9TQ4tyJuu0tPNAqhSUbu5o6m9sVkapvvPm/3TJwMtCW8aCVVqwe6tb8MKruQkFKZyEwHkEoza5aBCRY4yKHhg47JAGIPfK47Qe9H5EZiFtHv8bkkwpk1vECgYBuFJy6a+0e+IrYIAwQicRQbV6/W7RYPfK4uVfaemclhmj428mwkmuZVpCH1NLrbtwoM5Z3ppM3JRVKq2tcSE5X5SfkWvU/Z4WjEDZKR8DtDUYWIz5kWrRUmjvANxgvJN7folHPgtU1UxXnVh19dGv1amYIvzyx0yYrEKQ9JxEy1QKBgQC8zAG011S0HopmpBFizKanlmKPM9BHKk9GCl8dEQltxr+KA6734YwMy63fxaRBje0WUJJPMwOoxNUWfvJ6cRTi4BpEbOhy3ZfPCpVoVX71QPMuOqAvUbF/AQrv7tLCSs1WSA98k8DVeIITHAI/ITzCxuRxPyzU7agi0D9EBLoaPQ== + types: + - tree + - file + - peerId: 12D3KooWKkWv85fkYiCnvKVsVoCu9VwFupNejVBA2bFGBjic6gHP address: 127.0.0.1:4431 - signingKey: Hdpa1ee8nBVeIxYVcWjTSaVAfqvkBcqfhWRjlKi9fQ9cVEY6sy+MxMOa4CRQgM3eJCJhaLw2Hvux4rqMUJVtDA== - encryptionKey: MIIEowIBAAKCAQEAqJI1jTWuzef1hEdbE6Xth1GFXkJbLvn1LWmtyErrrQYtJd6zOsdncf522tcpxRs6LWANNe5HHzuP4VYiYnGe0CuBlMbnWLvH/vEh9Em0Bt7P3MrQTOFt/ESPN5AWaE3jeYc4M9WvZvLVpxCqJYE0xu8AkXi/5SqO3dfXKMyQ/kJoAn0FkAe44l3A7B/otqiYKp5oB+4/Fh1R0sFo3djSCS08KW9mbCQffQa0BA56f9cKF+/tVFqoW9YximwsVvecM8lr92NN3/kvO3a4xLnTZJNYBnaULsDbNS+Mdf0V+mkmcigaFumDHI6Z+Ca/y/tGGlTfExC4mRLOXgAnNIcXAwIDAQABAoIBAGf9UjXbcQuq1aWVk1TKnn5Exv5/9tpC7oHmWINf3IVvcviSqoRPMLx82vtjkmv6wOfvAhdL9+oHh1neFfYe23bV7+lEzsDJjrXyMR0PPpSibR5qqxdSVdQywxrmszwDGJoG1Z/8aWkb0rtuJ1hdnZ4/IF2dXNvVZi7qkNulXqjKc5pU16S2QPIjZ5YDatsl6Z7TZ48yyTxlmJKh50qmLO7S4+0jbVyDFyX8aAy8R/yDuZpZ1+aUHJkUqfvUpzngS2R61M/iAeGkNDP9mg59CwhJsOLsWSw5rA2MTwfmRIZjczG4WCfkhBhzQWztN8ded09xLySY/gmMYsKwpX9zwikCgYEAwlzJ0kC3ATNOQPhIwaVDY4eI8SRYTZIgp+aek/z/Jek+kf6/VY6eVWimEEjyMVGLTzjyrUOQyhxkJ2QqUNVJYongj/3yF8WE2+d+G50QA3J0K0b8FQFLGlLndgJ++AZmNxxMyD/XZ5aSqWc58SzA3UgbjTdDJwv6KYIc+r6om10CgYEA3geQ4XOPkm3/AagGvTRbM88nr4tyeyEzfLdXqSBdUBM+cB0t3l+mh0aMqPd1o8TcrvJ+33Kp3vmM2wq6Rj/jChx0pqQZeBX+/i3fSQUYiCnDeo2CsJ1pix3ju6xKIlssi7Lqf50AUH3TgPfeOEgl0c0skc7Iiw6uBbbN2jMbtd8CgYB8UNkN0DK9Y9GDoMr4gPoPaRtgEb0hMHwOqGV5hnK0DvHkc6px0NzZCCxfcijm/p86NtSRmgu8Gli9EUY3mZRsoH+v2d/E8KM//Fse0mDxs302SRrnXIJq/efqBUKs5XrvePxrgNoH+bko/UuERPm/D2X/9v7OtMx3TC+4+cXiSQKBgQDAbuxKCp93+S/YXqogmF0nhTbPNdwuDbOTN1CZu/xEJ7mo8BFON7acbjABTiC+pSPj2TbPMZE7OSy0uBKESmDb5ZfQyk9svhu4b0ekAO+nLBNJh5aqvnO4aFp10TibmEv+dD48BnY8TSHgGHSYcSeeM+aaJQ+5PirjtvGpWTx+HwKBgD+mqVa627FOJHKJ022L6eH61S466rvxiQqQdOKaLkRLNTsf0frcsZIEoPGXQmAsx79n5ezK0ndPsY2oWDu87teHaElqTp0oMzayuP1ognyFp5CjlUmUgLZ4ijw5ZoAinGVpBxYvHZ/KxRMxMhMYnXPYrx95nNT3GDMGV/4xG2cH - - peerId: 12D3KooWLNu2jz93Bmw5AFjoWUWVqewjMDX9X6LDnD3B5vcDPMtK + signingKey: 460RGvA77dWz7qFYmPqpMzc6Nw5eAXOXZP0fQvcyXj2TmG/z0E5jnTMfpFD7GHIwuFA9+XvqnjuKFteeHaDxSg== + encryptionKey: MIIEowIBAAKCAQEAyL/fnKl6ztxVtXkxdl48HEawDKmJmBxs6rGl+kNx+cb6Jio/GyKz4d1bCW5Ni5glyVg11RqA09wPaJxKMlp/svz+46a9MtZmC4/pFOiSaMkmMOs61apTruJNNDK/9O0j+irCnJFRGactt/AlCKU+9WjwsTtJtmqEkt0uuD0Tn709Itx86nzXhCqNtEKPvo83FaZ60RFpe72KNLcyP7DgR8m7Csa4JWfK1Ig0539rFxM5Co/GGNna3mqShDbIN0Aw8k7yCuDaCx/akd0Yd2BEjBApHtlonu3BYfCAF3bAus9sejogeA+mu52akN7H0YnC1BeftFAzlZ5yJV1gKwsYmwIDAQABAoIBAQCzzPaw0DMIV9wEP9oHVHuuL7m6fZaZQMxkoFwyfHn25zphOHFxEnHemG3TUpHtt4YQggslJSnBl1XNsj3aP6gkXejFaTAH+nNHY8u1SGDprU+hfO4jNPzipBnV6KZ47nTMucO4i4cB3PRbzKC+z5JGJ4l8k8d/tIOtLqGLrliHNlRZ7LRfovCP+ekPrPpxtJBp48GUQFRexXqsytiEYlAjXPUVHh+8b1lmDJXzxzTf2Nhx1lXykrrRYlOOYSz0fufFzsLcJSzPbfnomgjaNGKPCSWfREFp3Ch1P6+G9hClMORL5Vc58I5j3SlacsoWEw3ywyE0Visfn7ojIuqboLHBAoGBAMnbL0TeKaKIkRGdKXFhUzpUrH1mPg7QOLH65GbbtO5DHTwDRjX0I8pc+XT7u/qVhG+h72wBZ3J/egAlvLUOtwuuNhjir5BqS90QhtofsHy7IbzAkMhPpQ/3p2+ZrfTGylzUHLwR/hr9aiP5PizMJQ2JSQU3k8YozVGENnmpnydLAoGBAP6YskbZU6+TPXlconbg2G+D6KSYScu8h1d6mYHjcbCOc5ILVa1DJGr/ufYl2dqPTA63Mj9PJ8Dla4WI9iXwh0cbTI/N+XD27y54sWonuWymX/9i2tlhmnLeLqGq7zQ+eCQMMnhH2rbN/+hEYMwbsTAdu4txbPDMGVoL9K09PXHxAoGAGBuASrZJvKqYwMTHVU4tVXMVYqiaUsSVcNQpAQvOUQJc9HTjpr/wolN2S31hFu1Scs6hPIHya99Dn87h+bG3NMLqnRA9rX60bsNxh41vU4Y54kQRRosUiJKoQZDWELzJIEsI34E6mtiXG5LB1THQXwx9Vw0rLehjlQ+4PdF/O38CgYBjHbs6Dd2gmufx2Xh+Y2afc3EcsxT3tjvSeK5OfOeD3tFrZ/JA88S3yzrwcyfvCJ6JlBSBxSUq2aYUZI+/kXZ43k3eJkgYDGptYxtewnxTqinxWODuhCsG0SzCT7O0WSWYkw8K+J5TULtyBzzP+W/v1YNv9AZ/cFXmUoU89Hx5YQKBgBPx7Dm8s8M/8EQoV0NQwgk0I2W7WCnaNxNaNnIg1MtEsBkI+UkxnAGPUwEDtv5cRmciBO6SdsvUrZh+t41Ui/MLTMJOsQO53HAbng4tjxcAmDM/R/iYyI6gCCYhxUudPTaKDZchV41TrhGaqXliV6CgCRVm2WsKFgJdFNW7QVq3 + types: + - tree + - file + - peerId: 12D3KooWCYAzw5jFx3VNkJ8jn6VFq4WcayT6sZzdBx5fJFeCjXbV address: 127.0.0.1:4432 - signingKey: eFgkHOqqWUE2i3HChsYuER37d8Z5Izd1ENfLmpMsgSSc6lnYW+35sm7b5J7sK1G+xK0OPhtz8uxYkT0f5gJuwA== - encryptionKey: MIIEpAIBAAKCAQEAzc5cRGNf5G25G5Lh1hKEhV3lgxxB5RL3R0bjLhtS6W4/xhMvSaZR2girvzLBK1ydXk95Oc0EUNfCE/QKddUy16ycC4DHaObMjf96cVHhiIfKhLTO5gg2mqisQ39+oTtn85/T1imYMlkHGIt1MvHqXoPQa8guDXB/DCDz+UeCzPBGUiS4ZORJHrdd9QP/edyowUsfvwIayJhd4BUKOhgWvIAHohOTls1Xa16fkpojDy3b1L5pFvQdMw0DFY3m2LtIYVmlw1YyE/vqbhR/DMAkGGGD2nHfSQ/zApGAeYgqNSyAAMwjAaXtXnW/SYPr0IHRAnm4Ojk0qKcUfaTFKSSakQIDAQABAoIBAAksPm6J41dCELMK6+fnsWJkWftrAgDcxIq3vR5r91kSIeOJLV1h/Vnzcvw1neh520W90xBhc+TKiQrsoJ653uc/+UCF/91MFCfsECAG3z9/leYuTN5x1UU1aWAkyZcUF8EDCaUM+4ya7TcJ2DJqF+EYjOyQ4oSU1ATNXzJoHotVwcZ79uPNRTMMTUQ/sZjE3OJGkoPzOoacjmAsg3Xg2M8uCC3HAqf5kO146CX4/x9z8EnKr8XHWm8oRT0mWLR3N2WFIJ6sDuyL7MPy4Sm2xSbqS5pJ3kC/rwuLcR4KlL+HyVvpTPHQlysiwWfKz1YycKNaWfeAVQFQDKfe9fpTK4UCgYEA5rXvM0eGTljFUYg5Eb47LNl/YKcQoPGL9zIrTuyYl0skr364iIXFQHG3cv3G461jP6/eBBs0sMZe47SpNv9zP+hYthaReVLzPqqxrCQF4rJo2oCWb774BnkxWQjbiPLSJi2cc+5ZqMQI8u5XxdqO9oJ4pCCxs5nCasAcLGedrrcCgYEA5F2Rgq5mN75dSzco5MDC594HGQ4mXpj9xCDocvbhrvEm0NY2/BTH23ak11EnSYJNCvI43NX2nmxEkVzl7TbNLBP+u6IxK1XzFXg4ki2IIu1ACzHwbBE95APxZ7n4BRKhFkew96HX4cSWSvMfmrK/Vb3hPJpV8UUjaru6CiN/OPcCgYB4B09bLmsBd82wjV6jjITc4IsUjdZo5UIcaU1+0jjQ/ZcodpUq8e2diYwXl1BSQ3LPP4ASQtU24v2bGfKvWldreEYu9a7Zn/5NLCEjndoyBv/mLeAWYxRGyeaSm7kblrkeg7xR1D9xPgwp1zZzCTI3rcl2GkxZVDWBtFD0CTRQIQKBgQDe2lzMrYp87Z23b+3NRjst8OL2VXOmLyC9y+trfXeBtD3P4Kwp1dGvXpnAsaZoOusaOoS5JWgU88z6GjEbC7avRBf7XW0kQC0HD5oNNLe8ddBg3Gwl2bGPGTX0pmvd728aAf41uk+lN6X/IEEAQ10qvDDYZjhmSbUlTGthx4A4wwKBgQCQYGnHr5fvqlmLga+xkPXMFnJE1D+Ya/fkA/HTGZfLoMiqFv2q8uqque0xb5Kaim7eyQ2SpE/yolaeS8L7o6zMKT6du5QONhKdQN9ccdW/3yUQXzWcjYjAyB+zdYn9vKlMa6VnuXjR5gA8RrnHGJMZAeNLOWzH1B0eJSi/Q8w9Rg== + signingKey: 94Y4rDt00bq4xkrPJ7E9OPULzOBd5mzn0uMTKP5b4JUobSOKGyrnwWxO9UpY7OSzA2Y/5dgIMSFSCvv4p1iwaA== + encryptionKey: MIIEpAIBAAKCAQEAs/jLbBcMpkjqZ8R7ySsE9FkUdVZsJJk4BWI4OHbRg5+RMt74AeoKK+NW81zxw5tzLXvW9AZVccO742xB5mRfyrvZ22YrPedTvQymmyY5RCh9qduk0OOfItlNVyG7zRBgK90TAmkwbg4B1jCFIt3cuttK7A6gUKqy9deNhYZd67a7byJIgGmKcqK4ETbeLw8vJv08Htagn3/7CRjwAQcuLNzWw7G4SiTyIOcLpX14oQl3/v1/gYleFVyqebvo4xftQ/pCzDZoD6/t/HK70zzD+TsCmWK/o6iO42hsARIkuuuufASW9mIGcjKj8v+mftLEqqkSSEwtZTuLATJRG2bwiQIDAQABAoIBAQCC+GKpVZjKBjQ3scBXpGvlmlIOFgd7Ftmy6Uh6ptVP0Tasa6DWW8htKfNkBVaXgC/wgLfsPBPAR64bEfRfQtqHQe+H/7EmSosg/+za6ZUxKbpRe1tU/OEZTkQ/TXhLAkjKgwbLcVtiK+VgR00ME6MHhIDgisBWE/NKf0QpUKBW4Rp/0l3bUYO+b7aAIBT0Q/Noc+kaXbHygYuzTMYCvItGDe0WtvrNE/IQEnjC51i02rpa5GI29T4OVvumKbLjFMlT0EttkTjZNVEicP8RHqSKlE7+lMPT1eH3CEVepV7QKCzgPN9pBudLmzmb7HhSZvwMzzkTTt1WczWshBrKZKHRAoGBAMynv1toSLzznwQzffhwLQzvzxnjhdxNKKbJ7cVG4CNVKRVh9iPVBv+XWgBYInnpC/ByX5HDKleRvo54wXzYoMlxtqz8ZCOFxcWrocehbLAIxtGDlSAOGAgSVMrJDJr28Hc7n0zesIyQzymoWfN7yDxcKLB34hC0qUQVuaY7PjTNAoGBAOEfuQkzdrIcT7hEuX+Jv9SmkBnxSocpUZyF7vCm03Dg8FhGK16WWXwa5ii0R6LL4A31J1A/ydpFTd+kxqaQ0dyrc9QWkwzuyy3JYO2R/J7ejFO5KfuKMojXPMwum69y95vL4ZGfYXmF/vYv7TYaBhoI0oeJA5+w9dX20z1jgkqtAoGBAJRqJky8sNtOdYhPa1BK0XDrTC6DIKVl01A5alRBlPQqoxOdqinMKDoc4akUQVRVnFHwL7x+Y2uEB0Q88FyAoQHVlFuY4WodbhJu6HDkcPSsOLriCLhpYCYiXRl+ecS7xiFBvMG7UR9vOL0GGM2Je+nCD8QB/JCO4527f5m8pt0VAoGAd2Vht5WJ0DDfvvUEBLZD/T5RktC8HC83z3HhJdT0sxs5nTep7MKEtyN1CgWDML48GGr67L7ICXFUOdakXNbV1tk/1y4Z03QaYjA5rgYNGx0hA45iy7uhzZ2J6yiU/VpWJFTfT2JeShtc+6izgEwRDGG9dpCeUWWDHHWJ1zcddQkCgYB//JrVbMtkB+L5OV0UfAFlhGaVoThfCL5QHAwmXq+gsX7dxCu5NGJDWJ6fQ+e+0zQms6nB/BvLXcKWo0rEZJsyiUpWN8X06nsyHN1Nxk7PiPlL12dV9/RGD98kNmFQorYhO/lOWImqy7ZpuNNSc69l1B9Q/G/FLU8itzSp2irSEA== + types: + - tree + - file space: gcTTL: 60 syncPeriod: 11 diff --git a/etc/configs/cons1.yml b/etc/configs/cons1.yml index f1103489..8787bde5 100755 --- a/etc/configs/cons1.yml +++ b/etc/configs/cons1.yml @@ -3,10 +3,10 @@ grpcServer: - 127.0.0.1:4530 tls: false account: - peerId: 12D3KooWNMsLYe7L5vArsgeXouWZoR3yyyPB7mvWbVhPp6psTjyq - peerKey: 3tPwUjvQHSkMuJ22kP4BdmTDYznn/32ijYEQ/+ALvoW6XjrM4KV2Y+tDC0Rb77Htrsn3alVNo/E/dhyZd2tlGA== - signingKey: 3tPwUjvQHSkMuJ22kP4BdmTDYznn/32ijYEQ/+ALvoW6XjrM4KV2Y+tDC0Rb77Htrsn3alVNo/E/dhyZd2tlGA== - encryptionKey: MIIEowIBAAKCAQEA3KtHqztTQ5yvWF3onxT2+NVhLUErwi+TT1jXiZF4jIPXRnLZBIf3g/6RvN5uS6EzDfoSnm+oAcXFlVSsEu9aWtcR5iinVvIjdulkruzMqMM72zbXVB5QtPFxpC4/ySMjcZRyYml2b4aZ+RMl7fK03ciiyvC4Cm1PoY3Guy/95mq0Z7Kc/y5+Lvcpx+g3sgfHnspBYaPGbQdiUymZGyr0MqfmrKiwcZSLqRKOcWiIzPz72PZyTXgM2pds1FBwHpkJZTIUrHjy+CCoMKA4NzhjML2+ao5VQOhmJsWIa5PtdatqycxxYpzyTMOIV1FcigmdIQpSqhoAVKIO80l0rdhstQIDAQABAoIBAQDKXnGdgQx9JwZPXd/ldE6CKP2ziN7eeM75p5oS2UvaYVZdjxmi5CaD8EQrFznDNhQiL0I/9ln3Ni5bIomj28nbIP2TO5krTWhktunU2eleo50TDpou1JZjOkFjtd5dUVJB6Ud1JQ6ufJxcJclVDI3+Du/seRHuzgyHNgQYyoxob6IlMn8TPC9E9wJhdHGswo3k9wNstBE3KXW3XAruahqstELl5CPAjjDxwskpKMn3EMluk1cA8gKq7PnjyO8HJU4LV+JBuJ7Kgb2lVQyZzVcyM7SDPcHuCQICyRST90444iYDFK2Lzfx2qJ7wCOQoIp2sYaMS7bAydbthlIkD/JnBAoGBAN7WRiyBmxL0oJEJG+0mbvo9lJnCaWufth6T3BLY5rXf2IiPcbYsQBaDC14FhHLkt4qbFUnHeCvW8pli0Vyqiyad9EcwCAcsQg486GAD+jNfRH+wnRgOrfZ/quG9H5NkpoXhHEcRQx1JLt1K39cuJp+dGje+b+yks4OzTFQd0GN9AoGBAP2CaR/aK59+ofloH6s81tEUNlw0r1GhaI0q8rQoDuTNz0rrpc0GNJlnrO2Q1DOfJpfttJBbxpmQCTnEv2PNhI6REgJLz891Nqj7tLOMZsZdhziutG9dVpLe3SXP9arMgBtmF1n6i7nRrmNm+4aHuK2PzJEb06K1qCLlnwRUNIOZAoGAT2aaapFj6EUyUXulb8MaGCCJKqCTX73w7sRQzoZq7rNsPHygUAFEdMEM89uTbj0BCWppE3j34OceWnlTkGlUW9Y8jIEY2zVx9BDP3CaOqG9xwO31i/TvF7417WmuLp7Wly23HbuQ5oaFJGThjZLsQEOCbAp3ZyLotCzXLcHR1yECgYAIpzPpZ2wHxK3IspoqISh/+H2mhhHZ6nWEJAwmxBtGChRiTUrahbSz68sGTORBYtRRaUa5irhrs3PtKd8SjAhTSXZg56+POEQGXpkba9ZyPO0JrUTxbDExUDQiP0f2bYaN6N0xMBEm5ZZbRD+fpvBR1E+6QEXoDuVPU6Eq56jnOQKBgHfK9Y4DjjBJgSGyw0N3BfjhfevqHM4Qs0hoodI3z/90SPWG66+wfIqAC5jshSMvaH5UGB4E2DAnHcyGyK0dQ4i5OmxlLAfqAfVD9CAvVWgEhY4fQ+Io3WTzEq92fgmyIG+nVZiNFEICkHHVJIYuIwxgeY7qswIeP0oAbnUNrjTW + peerId: 12D3KooWJdzYSrwqKT6zWeS7UDGBwASSkagX6tfWjHP4PoKA6p7R + peerKey: jjgPiYRm+jHkWMucfm3z0xdBhD4KFlcEVOeePBE2iA6DEOv+XZGd8+E10wzIgkzddR/H3Aj097VTp2XQvfmuKA== + signingKey: jjgPiYRm+jHkWMucfm3z0xdBhD4KFlcEVOeePBE2iA6DEOv+XZGd8+E10wzIgkzddR/H3Aj097VTp2XQvfmuKA== + encryptionKey: MIIEpAIBAAKCAQEAy0oPQJI47puSNmKiTZFitSLTGf3NPZw7l7ee+1P2BU0ZGsRIdJ4U/vebpNpnnpgQa2qV8Z/gALON3YUSUSYg15qfjFGfGvm31TOTd29RptonfCOczkNN7qteZwmNt0BYx9rKakJhYl8nNF4no9vIqk7FVZAOIHSHNnHIlSUpdXSCakrJxx60/JQrPtLnUSKwwlBNLAPo4sKl8Y7sDjDiQ8dyWsj4KDbDj0PLjv4Zr9xk4rm+OAv7lI139T2e3pJ42QUWNw1iC42kgGzfKpGg5xbYdjfb6iO0y82hu6qo08sfP86n9h55s2FwPf1QBJimbVtklKccpu5bmFEkHGkZowIDAQABAoIBAQCR8cdlahSpaNLdbI5s9bVRqYC4pjdUxfcagt8GPE7hm2osh0IlRuB387ev8IR3nWAcXdbsMwUUO9Pbdw+hZqgpYX6ttGNvcFwEGhUCp86M5Q131/FZO4SVlj4d5wPwzadvQ6oSAzn676krtXTr9HvpmMefF96sejwgYCvKt3U+Nm9c2OSsJ/q4nr1dq957kt9+9r6xiGCw/CtVCiO3MhXdAJGjDiGs9qDao7Q92eJ9nEEOxDXBZ42kcieVsT8q5tjU/JW7FeEsoIVvVEkoe8cmQ3HgyfpFQ56Vo/ANTmG+yOiopQchpxLRR2gHp1pNL0ReQnITTg4KfYFflMR5dpWxAoGBAP71t1b87L30AY2pzUIBeGEhk0vq+agQVx9ewjowoZ+rVqbP2CNYo2wBoQ/ZhUSnquW7DvQDMpOV3seupCcs1i649g0TH4fbHMr2VZLFOKpg3aS9dR9S0iR6FyKJjN/OOrQAwLk22B3Wr4wqoScqZNVtDPHUPcp2KCVYBSh/2C81AoGBAMweYMBn3IwMg9OyPpczQXqBBtdmdSKpEEct0S9Zkopuyu10BkEJo/W6SuN8Mvp9oNaNz1nGefnWAaRngJNd0vKJXg6jN+zIq9zb+BB23M0H5sfbj+79bOZ3J7ccnzitDpPT7u5O5Re0uVO9yXhMmMWDKJZ6jEnicqN6qtSWW4h3AoGAZmGrbs4AD0NFwGpYV1IZ0f9Wk9zWxgtRwPIfUpimvmRiVngOFhuI/F0nHSM/JdOih7/3ADuseqFrJYpWtriFhZuWiqeMONTfGg2TTW3PFHPzbSz7NEngwu8YDTFpFZJN9mx696UzYcANHF8d+YlHloDE+vM8oOmTs3NGFv5HhKUCgYA7SE9dUkzxt+jJoSkgjNhllffAs5ctm+CIa7wnfmJbJlZ1pI70cLJX+eUqMLY1nisKZWFld4mRkCAl+ZGUO1m66z6QDcN+V8HigViIn5z9R2A1h4VEKgJo5Q551ixAL7LeKF1qhStwOSLiOWq8L7LnGnK9UZZRFx2ocUYQPCMVfQKBgQCBM0YutMekCc0VUUlJvN6jq5S093xeXrjJFQ8qRwnRJL8mF8+XLPS0jxGlV4f/2NkrxrFIhXL0J6MsADwqXf84iuwyMHPBP3vFDoOhtTgw8CBq/JG5PwXOhiRIRrtd30HrEIktEMVMWbOJ1uQHfTO93sjySZR8J1oTJvImmuT69Q== mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons2.yml b/etc/configs/cons2.yml index b9afa807..fd86db6e 100755 --- a/etc/configs/cons2.yml +++ b/etc/configs/cons2.yml @@ -3,10 +3,10 @@ grpcServer: - 127.0.0.1:4531 tls: false account: - peerId: 12D3KooWSNzU7m619iEC6PVnRPUqzM5XtiFX3VZekyowTAzRW4yF - peerKey: hEvfnX4IwcbH2Mqw1hI4q4xBHrlbZufPXBFq4ztz6hz2Fp7n1RsiG7MFgk6mqxLmXuB1drhlqfLZPCDYWRkoEg== - signingKey: hEvfnX4IwcbH2Mqw1hI4q4xBHrlbZufPXBFq4ztz6hz2Fp7n1RsiG7MFgk6mqxLmXuB1drhlqfLZPCDYWRkoEg== - encryptionKey: MIIEpQIBAAKCAQEA0nsJzf+y8waYqOu2jvH78q2typXTIKluz+RJ6CdRNH9CGwq2Ag7hwkYxxtr0Cq5EeI24+OAdHuJIeFQ+LLm1YE+RG+Hv/tP06kv3lk6b1jCaUVzu7y0Z+V/O4MclILMAF3gn+8K3+TFHdTfM8u3J3Hdbs2gA9y81Y/B+HXBpqnJ64E5fFFCTip+WUW+3HMyH+XC0c2JrCGdsuPQqdjIAO7HRb8us54kKP299BfKRe5FlAN4d8NliFGQVKnJiJP7RXH15Tlv3pUxMNefZFJCLFkU3oocHjs5/ykXC8PVTY7kkSpqa384ZN16ip+JWKcg+AqhWYDkiPy0mh5lFSZkO0wIDAQABAoIBAEzOXy6Pz1JFpvGFSlHxVbohzJhvgeKaUXiFWr7fkg9xHMNXbkFkAtfs238wKPu4yf2f4c7XoWjCtCVMwH97qQcjIdWl5fj8iZPx8sAjoVRQ2g80tXAL6j2Iy6pUoWTETRVDYHvLe2zwoZ3RpfVD9nSADbNzEV8iF/6HJM5DVhu/D1PQW7x/3jmI+GwnLDpDQ1UCv/xSiXqbqjZeL/+pU1L9NrSs2nPBsn1V4D6YCwRp84VgYLxaxl90wwDMhg1VBuakHLff7ZWl/BYiowCNZQQEvYRqWoeFopI7T8LjWoifIJxLWOL6ma3wgTkXPd4OQt319m5rWekUMZfUWH7bbyECgYEA6PGPuddpSC8faaP3jnKAEaBYZ6Jej6UB+PDsETB0YUruxbA/0/eSLo63mLJjgQ1BEZpuQmtj2x9qGQ6pkjwTcF9pEp1o7Hizemd1EClX6MLAATnKFlkqmCjlnVIAP5dgz0lfHMFaw1OEB7Re7UKwCYzTwuHx97lZ+Mq7ti1pOLECgYEA51BMhJ9hD9iqz7JCNuMPT7ZXdQWnky8wQ109DOOLTH2Nr9RGaojVtBVAdyU3NIWYuLcpR/Cub4WrOe6jOCGT87sCyctZxURjG1h55uO+xF+DGRZukxihC7IN982eC2qzlgqT9A76KdBDOCm6Hw8xSV0rObs19ddGYoWTtGRY4MMCgYEArdO85fhaJzSK42EpFdJZwU1/Su5+VADVRPg7oOQgpI2vOjQ4nSuMmVOEq9zKpf3HBaTRDJ1oqZZ6rPIlFevgsaVxGiP+rR+xBvF3CLVhVV8muoNuS1kEkQFLvyb26n1DD8v3vtSGr2V+C+XMRI7UIHxHdZD36F0XR7G5e8vNTjECgYEA5riAajRy4xRxY9NhGlAm4JJ274FhYXzK/hZNI8L/GZ+OKNhqGC8+QW6FK5JSWy/6YhxHr7sQsqo4XQN7iCxt38kkAdW0SABrfkYk6Tk2+bZvFCH8zvndAMZsCkTspGSclkccxm399qEFu0pbnElSFuQ4jk/+haVhTjoAVwlUYXMCgYEAyFjuNKLBDvOI3YNjKXmja8kDAi8xJSue4W2RmQoHuPXfH9VWec1cxsWMzOb20Y/9FhdhIXBumrFFaywIMh2CNEgEYpuE/cw89Nf6wMAt9p/hv1RtgwfWT2MV/VADm1teNvHjGweOS2ylvKfd01uGH63eWcmXrFP90RbGMl7zmv8= + peerId: 12D3KooWHrxbA48bJ23sK2T5cYWDFsoFtG4NPmcQQykXfjQhEKam + peerKey: D7vuDE5ZNrY9k4m7BP2nbslmD/LnzqBgByjGWJw54sB3h5Otv6oy7IB323eBi08Mm/2/zNPdBg9vAF3RBEA9lg== + signingKey: D7vuDE5ZNrY9k4m7BP2nbslmD/LnzqBgByjGWJw54sB3h5Otv6oy7IB323eBi08Mm/2/zNPdBg9vAF3RBEA9lg== + encryptionKey: MIIEowIBAAKCAQEAusKaR2QZwH/v2cdbuLiSmgiJ0f3b4/NqKpyq3Bc2r0rrxrvRHHagywRwwNAy+TsyHRzVys3pgZTL2iWBzxGn1gvAhPv/EFSm24KJObx/GIG+fzefvK7SRJz4AWt8x2ijSLZFA5kqXLE2Gkl7GqsG1vK9SzPIvsKPr/Nt7sj1DO0DFu0taRxS7lmK1kGt3dw4rkkb0iVWQ3QDoYnABdKnKVqiaJc0mFrjndqvozC/qWte/VggSpJQ79I/Dklm+TQcT6bLByQe/iB0zVWnrCq6JRFxrqVsBBO47bDW94BuH1lfnLrrn5m46rT+TOwHRwPfZ1WxnPl1OJGAIAYPRTUU8wIDAQABAoIBAHDjPFo22ZIQQyzCYmDPwF23F4eFCStKcTv8oxKSPY3LnaTs1kN8OUk+D+Gcd5NLAsmyKlCCEsku5eGglkxSAb9SLzazE8QNRyacStJJbBGmKz2+o6FrktHCh+5jyHLIfxpuglzgckjBHVDaZb0C8AlxhJY2YPtdo3jZjfOuKOF8Qb8Y1SpJRBQJ4v/7NduPQ1SZ9Pm+yZmJ/UQ9M4m+Sav/pwtxnEEFS8rNUODCMTFlgYd6g53SyAo1/X1zlD0b7tr3Veq7OKqa5hB37sWgY65qiTQo/PC3wGbH0Ao+IMM0yhg6Lfp9lZ6qApMV/azDHqP3RUsD0ytkpxK4TyhzaFECgYEA0mkXXel0E6w55d8uhRp36kQzye8A8v6rP86b/lmt0CVA7mQ4X5/Z29h8UcaVlJ6IygI4afk8IY4OwdMB9E21otS5RdcKfz21vOGZoAqj3HFaXFozqNfSTRNlmh9YyIWY2TQHPvacrJIvg3p04uT0TKI7EQG+1CNPYpiqQHcsr9cCgYEA4zmwnIrLqJLMykrnOqi1PDRO4FvB10q0171Nen1ow1sMpHl21cfo8+r/jY2xmxOhb3RBDQcK837HiVvKcSc79tF/EqK43ErKsW/MoUu86KTgTX8HtTqflWb6ZrG6hFYvOtThSNNBUN7+HHOewGEtQ+jAP+OJHrDIWTgbs7Wt0EUCgYEAncyO57FzimV5rnnoq44kLJ8lr+X88kAoMlxDBUhAYH/v6FllJeH+QzBiW/nwqFsU/1sW7/MpM4kUbCxRpOS6ufmLUWNqze5748HVsv8H0QV53RUQ9SmW4JMRebrUnN4EubCZVpEhAxNHavVlv9wxk19/qMuEUBiDKtCPrnUyIFUCgYBGmec5TJro/uvoswtTm5XsZehYJ8p75Xd5TRVkyNCjWof8Fs2IsTu9hjfvOKaFo7zWT43iyVxqueqv0Dh/ngwwrXlJRgwgTpDaPv2a5FiHBKu5CI5RjiyFlGCbRf/JHKpCImD5asJxqUfVeUtLRSZ2YjxR3ZX+Vjl6F0fsN7gQ7QKBgHVCnFcLx8HLx9pTsIWxDJuYVwsCHEp9EYExp/68PU8eN4Q0fDhJ6MDzekG3HnrcrVRry7fSiZcepDs12/iWZsFfNnLAtAUzfDpsHOVq+QgSZfsoLdxGYGdl2gW9NvKmS6YYaWsgHrswbeb4Jh4AIrs/Acs4t6/Wf33DWmQEQe5x mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons3.yml b/etc/configs/cons3.yml index d0b3836f..3f9f5235 100755 --- a/etc/configs/cons3.yml +++ b/etc/configs/cons3.yml @@ -3,10 +3,10 @@ grpcServer: - 127.0.0.1:4532 tls: false account: - peerId: 12D3KooWMrYk1QLiE46aJBnLCfAawXJ6fVgppWp1DUNfXSiH5MxE - peerKey: 7nBRbL4urB+itm7SJ40gjPYe/N5Irunyr6qkpKqlg1Cy21w4WpuKN/TSgaDoVqxvTbReLbu27hhxEzdTrLNO0w== - signingKey: 7nBRbL4urB+itm7SJ40gjPYe/N5Irunyr6qkpKqlg1Cy21w4WpuKN/TSgaDoVqxvTbReLbu27hhxEzdTrLNO0w== - encryptionKey: MIIEpQIBAAKCAQEAvBXWnAyZ/CGX4ROQjg4xrKd2CQw8uOHJjJaB66UDawAz5TLcL2WDfHHp7Mxua6+Fy/a62xp3OBwywyYGelGzNIWPd8oR5X1SUYzKqCR/p0ThybRKeUkYnj/UvjF1UzC8NUYNWBCjaZkO4HalYpjlbf0vVDryMWow4YE/0cb+rsxdxJx2t/ThKS808rz0WsKNcZObOM8Vt7RNkIfOKsdwP8GUKx7JMPa6bkobW7FvLkmCgHMPOo2uoAkQIMZLXSB9F9RKDCSBToW0a2r9Wilo99x1t9PZLzQbAKkuM4ZYkp63rfBzRRRPOJaAj9Cb0tan2nyQkRrVJ3yqGwyFjbe/qwIDAQABAoIBAQC7fElhZG5almH/SrFd6Wg64vMWMcyVvvxZ1+3KJ8MwdhNE9V3nIRngguzbzyyCy4RjvJ6mqcsNc45mWRE7/RTV1g0dK6CLUlEsWVvqH/fflRo9JirWm7aeiKJYtJRvSLVTpXDHyE4chSX/OkXB8wdAjJERNXEXMPNo1p33TpWxRu6x8mwAIBK+YFI+SjQNuAteOT+qKAKZsyLbv+kr0tBRyHfEVdYq6RHzbtMCJ2h2P6t1vywLGTPw9rUAYSFOnsYfl+RPAmmZDF4hH4teIJIWNlfESpppAFAIrIg5+RjKVM5Bm3Ez7vx3sXDPd+aabxKoqC3nakHcRwRYJD2Pc1cBAoGBAMYkxYj1C7FkJ16R9msptdiV+aILzGkpP7WLYSX6dtQbrwe8FK7UrCwfkm9Zbyr9HOik1SEem8ePgmZktCdzGyi7mci2BEvQTzDnN3T6aTG8808jP7X3Apgxw7ENhuNbxtygJdNZC3Szrvz7NS7bcD/SYsSJ7dNEn7StUZjGrf4zAoGBAPMBNOwvFQCALNPQFIY2tTStL6TlIJgcIfhUhF9pcwv6V9syOxepWe3v6d5aL0ooXU+59/V3pytNzc2SGeiKB0EuRye2Z7b79riBw+EqOMj6jG1DX8n8FfNhX++8mH7LMsxbcAN9jucIZHCUQm6WYedHwq6vvc5CYbCmsJ6z6VCpAoGABzhHylnDd09C7/s5k2YNrjqowfLUG/DY1XCitZOOyOPJWOrNhiFRtLnhyBTmLBbU+tUmvvIyku7zvW9l8RoMn0tWqy2WsnyApjOGnciSFLHh27xZEfRSL+GAU+8+PwKVGGztc+oGtNXnRmiQ44gzat/roWW1OMGDYD4AfySeKmkCgYEA4c62Qd7CUlPI1A6gc9M0cT2Zb03nCtHhkyPeWdbgLDo2F57GoIci5OIyXQdKuEtn4iT6UCQeuDO1URg5cQeKFDyPrExodfYO3obe4UXdvIxtnz6jLUtNjnpmrpx+zBvAGXvCS8wJ1Y/L3X03ehHN6h+Zvb/azWaL5p4Os3qVDPkCgYEAkwlmHO1BjozslDlY+GqhxOTWZ3lKR/B3C/QttmK9iBdRDc0A8Yj/TJteOgBkGxGKRz+1Z9JS+CTIY6/TVvib4NDLIZiomO+zIMrn4m5O77YnupIWwxoOf9MHPmQJaMQuPyxoon7eUL29rEmz0sYZMI8/QrACqPqTDyEcl4YJreQ= + peerId: 12D3KooWN2qtMAhoDpXL49iYQE5BTxbDwfAeZbwEAo6UBUXXdG3x + peerKey: N4dfL4wZUsxUqut/2I0h69+/5F3c4YRi7PIx4Whx+r21fo2KKMH7nnncZULK1959KeJu1jzuQcP9HdWvKhmCxw== + signingKey: N4dfL4wZUsxUqut/2I0h69+/5F3c4YRi7PIx4Whx+r21fo2KKMH7nnncZULK1959KeJu1jzuQcP9HdWvKhmCxw== + encryptionKey: MIIEpAIBAAKCAQEAvVOwhYbGUYrdOeje7ODF/RAkr9pXsO20tkimaW+q5LFdNiUgdSugG7e1lZWPghcBARrBsIPNVe4m412q3gbV8cB0ObNbONOJ3cnKV5o5x8MG2GB5TYRvdCLznqRP7ySzAconHRhZ9s6Ff7IT/Vex3bKr7Q8vRscIUMqNUWPnnvCZHwUcbhAgjwPpmcK5xfja2EPw8JupcBntg/cP/h6Zy/60G6YOgRiwnfWMV+Fhip3ALSMh8vA9bLXImJ3LUHE1hAYlQEPw2dPa+J+3lK4Ou/5qKMdygp2/YiwmJrseXbf/6qcySumuezK3NtDoR/AqA2bGEdfOdtl2G5xbUaN1sQIDAQABAoIBAQCais30sOcBeNDMjIIr6e6ze5H22cvq6J4yjWsJddWRiBYGNJgiDNJMzdCzobna/twbArRIWc4q7pNf1P287ueExwwYbYdxA3vuRuGcUJAJt/DGfzmFRS2VJ1KllIqLMvHL7C+xWEdXZ40hh0M58XOG/GnKwDJfG+h1ymFApsRSv7ri+LToTEm905JPESou8RzvsMxiaPtkzxNY0W4RbMchPU/RiR21I/iRYozaV+ylaRh9RAbvfSAg92NrN+rW7i9uJQSm65Y9dBlvxRHMiaOR/gpCeUr9QYOvoSzvM23K3X/Tj60HcsDUBeKi1fEd700JQjtU3YC2xXQV31IEgCYBAoGBAOdNvPB+LvedoWZKPhCOw5uavOYC+f34cWkV7eM8FJVnW6Y+MmoIKmK8nMyzWch9bESzwEHx2uv/TbmcFYJdf0v2voyTG/LxfoS3yRi9zbA0M9mMJcuejR6l4H9bWQev5TpIF7kdm1NpBm7WBRnOhWIueIgdrJgtlIuey58bubvpAoGBANGKmAfyK7nVuAl7EWJaVhNTXBuQ7BCLtPVnd2+WOr/CwRAq5O0aoZh3+e3xJlz/dd3BTH9cSvRogi9ckaxz4MTusHDXzXcvEc+EG/GjaEY0BRRhWhzZNZESfHDaAXAUGbKuAm9hcuo3xfVDAk2OWyWVsLLp1A1+fd4k+jJLzPaJAoGAErEFg6muwfPLBykYut3OkNSAT1YOPafGAmfzQVmpkCk6DsUX7dmbEz+KrEASEVGRXjvoXWvd9RQ8g7NJSa+kic72twVsTMWXI8J2TbmI1aRiTEI3C61UWhWtfp0zJJviOkN5J0xtMOBb1LkW0G8P+E8pDlbXi7SjPGUor0LeT4ECgYEAvE093jYkUTXb0rlDoAzqOSe6KBON8Dh7/+RhEmgAl37enDbPzrsV6Lw4XzlMblorg4JHylQYD5czFnireDwSCycsa9uiiq5D5SYlLnrYI+5veicaIb6YQqxII+nlTODjTwzMp2b9K7m/LW5wTV3WTuo8BivXIeFAHzc/l59Cq3ECgYBlW+VPH1CX0lXmO7A8Q7Ih2oIbASTMdoJUHg8tdo0PlDUKxjRP7ECUBaKLiCSaz01RKgonnUZTFh26iAqPs6aSLhcIxabq5jLDy2G9VbK0trEOYhn70cZ7j7Oev/8gAy1z4fGQLZEboA0S49LvQAT2iY01pHO84H7f4BVpIVzO5A== mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/node1.yml b/etc/configs/node1.yml index d15215d7..eaf2385c 100755 --- a/etc/configs/node1.yml +++ b/etc/configs/node1.yml @@ -5,27 +5,36 @@ grpcServer: - 127.0.0.1:4430 tls: false account: - peerId: 12D3KooWCi7waUGMExFaEMgtKmTaanYaPGNhWmEx2nf7jFEXgQab - peerKey: QQwIKP+YwFY9WzeluVGFwlLj3EJ36RNtGH7QY4rJsAgq+X1I47HaHoFUg2UNZIMtq8mggHYZA4a1B/xntR1RcA== - signingKey: QQwIKP+YwFY9WzeluVGFwlLj3EJ36RNtGH7QY4rJsAgq+X1I47HaHoFUg2UNZIMtq8mggHYZA4a1B/xntR1RcA== - encryptionKey: MIIEpQIBAAKCAQEAxn9H+w/uFvOd8rW5KCpCvisG6JmDQa1pp1gPdWhdTpqj3yI/3pYK5kgnZhpUF83bQ6zKsNSVcxRqRvW8ZBGA179fHwTwe/KkMuAhgoOCMNG0+EKmRYQJdul2MFvgOniVJxBNaywoCWA0HI24sk4Dp7pj2Dn9yhcj49J+j12STlY2/+oAmhA8a7nxZ2XOMZyZIR9jQ+9MgQdTEa65LSTMTwQ7/A0g3yY+t8+BxhYT5hEdFKIgAV3iapbpP8kT/EvVHZYFz0RUBa2NC1xJAjfFCliGBqD9k7kUNOmP1al4EXheueZDtg1WvwY3PRRcDuSvxLCh1TAuHMMOd7XbR9CrvQIDAQABAoIBAQCiui/pe8rFWBzRn/bWHacvvZhhUZCQZDjsbr3lk5SC3zWetLZFpR30YYyjIMx141Zw6ZQVWYHXoRHrcINsSgklVgcGKAd6pZXE+4edNnCh0xmYOROUg8U6jfRNetSdOsOUDcJaLQ35ebve+LREwL4wYBaAajJL3aKXn7YPlDdgLc02OeQ7t3hIGX/nxYQy2X6+GGsNZvZvmiEoO5cCKPo3lvHIA8nnjB/0J9Cd8ffqiTNrw0NO/ErHxPxTu4II+3VtJ3xWZKlVAOI7Q2uccexdqkJjFcJHmqRWLf8zQzxZxo1TxgDZmZcQHG4sQt/XBL6A2xoisi0kwo5yz4f5WflBAoGBAPKtjMdC92cZLtHlBYvqrQqxJdCpQyidVEa60o+IH2q7VDepLW9QAx0gIwZIAKk/kcTHCtNu1pxVaX7YhVmdtRj8cr1j7g+CWtYaAeMrlpDhUghBEindtVV0gOEkIMbn+Fpzp6/km8LCjqzD2SlVex4aJV8qCRi5WpK3W0Z9RHTtAoGBANFk13fgLry6es7roQvig4Bkg8Qtpy5HYvAyTPk/2q6FfNOZSSYw5y65FzJUZyTEWTn8EjBA+bngmAc6xEA4gr1diYduEm6bab3unXCGzBVWqih+cTAh9lPgmAAHJD3i89SFDE9s+Gox/1n7vVz/k5P5ac+1XyqWXCHI7j1S44gRAoGBANMIZtbU/k4SkSuHzIX64tXcbPUCbFuCTUpgpkCY8DEhjEAHB3K4Eq0eSDbrIGAN3tZO/LQWu9whTmc3JOdkhJqg1aqqntev1QxAe4mwWvPMbUiuRXxQx6LzeCvQ/gvap5cI4jbMR0NbazUD7vHJ2xG3TO5voI92iDPz7RTkVEaVAoGACHkoLvWnboOtTIpEbhKwd5WZr2qZhUnmOwoOC1gGJWHJd1aQmzcHY+Chi6vWsKoxYiNNKR63/EmWXVSHdIHU6IzMb+qIXGl1kfYB8PfDcmmbYSAcvHHjYemIvReM4+Q3MbZglSY3tzRmvOFu/EBrXGWPXpRcUYDcIZHb8idUhcECgYEArvEvxIFHIIX3bhMgXhMvM9TJ5/t/e2YHm2Qz4COeU6Y19CklAjvZ6CpZ9lGUWVbGVflI+ivayAT540HCT1kwmK8WDYrggb64Ksir0TZsv7aKjp5pfZDc9IakisBEsNkjSkOF7xbUGQe5CSiK5khFQx5X8jZHqsczlBntJuquQgw= + peerId: 12D3KooWS7Z835JwmJ5pGHJxpEsJ3vab5M4RjJsWHXmDD5895DT9 + peerKey: w+63sD3k2rBwrtKTcV02B8SdKYrI7rzLpXHtNYwZU7ryIj/g7tmvJFXN6TZjTWX4al5UAkRefJQfDXfXFCCPHA== + signingKey: w+63sD3k2rBwrtKTcV02B8SdKYrI7rzLpXHtNYwZU7ryIj/g7tmvJFXN6TZjTWX4al5UAkRefJQfDXfXFCCPHA== + encryptionKey: MIIEpAIBAAKCAQEAtw1tn95/mQ2cpYgOKxaRwgZITgsrmZQIyH+bYFaUYUWoUp/AxAdPrh5cLehMUNXH8ZoyHkhV3bIMWpHoUyG+QJzz7etktAVz6MtEl3Wo/jAgAEDvXXgFMku2hnh6coWyhzyXR190ZHgGazJ0K1OtugsIFXwFro93j0+8iPuifsWkH6RaAhvZJUWaQGGmNQKSZnbdFokGmo5FM0z0eOI/sZGhCtxuWbpZz0hhvW3sXEWEyzq8WwTFLGoppIETnhjzcSJDO+pq0b934WuMTGazUH0sPc/AnoZJp00237Ar8g+h10CVxQ5SsTba7VYDCr7/zeHS+vvUYNgB4NO0lylaTQIDAQABAoIBADhUKoLCjhNEDAsoFewOcuX41vElINKOqjFAi0iW++v+6nAadtAby9oxv33k+O77Ch7/qyKEcd/ZtVF9irdiL9BkO+/fuspmzyc4va+55jnqBz7svHvPvhGfGNjCZDOvjqNs8sRkzEVKZfdAvFzE0DXqxR8PXhQ8U7dG+yZQAM3vcE/ib/14OxXgANrPwOKO04Lhff2xoXuuqrx9XAG+PbLlxi0gYGK55E1whgBldPC3nKA38hh1QDt+uh8AVdZ/Y0ehW7t2CG8zPNNTO7TjrZHwMeFgvVODN+0X1W9e7nIuDGVJ74FzvC5PZwBURJ/tjHSUCR0Pf9t87yaQqEQT/sECgYEA44Ve23Fnn97kNqpYzJJAq3+1Cg72cEg8gG9RA+AtOcMUO9EspWxiu/MPXGbaP/R/5L9UTikv7oN7an4gsO4FN9cFH/j4SY/fI6twi55DwpOFbgjLf6lT0tzEnHymPXjGCCHdc3BRIsjd3ehmQcwBZ/pPl8CggDxj24/xlqt7kbECgYEAzfceXEEpGmOZ1Hno3Xck/ZBcl12KjLVOK8ACe890BjWIPDMXaYfGJJpX0terR7BcqrLrq0komPUinoeelpIAitTXQ+zr6ULYXpZgxSTOz7aV7OAsudowp+m5z594ZagIgs3lKVILeclAqaYB4eq9/pHzHazS0YIwWwce753CfV0CgYEAzJ89YYTLmoe+nb90n3+Fc/gmHQa58t+0shnrNd4fLozZHLcSPTCOV9TQ4tyJuu0tPNAqhSUbu5o6m9sVkapvvPm/3TJwMtCW8aCVVqwe6tb8MKruQkFKZyEwHkEoza5aBCRY4yKHhg47JAGIPfK47Qe9H5EZiFtHv8bkkwpk1vECgYBuFJy6a+0e+IrYIAwQicRQbV6/W7RYPfK4uVfaemclhmj428mwkmuZVpCH1NLrbtwoM5Z3ppM3JRVKq2tcSE5X5SfkWvU/Z4WjEDZKR8DtDUYWIz5kWrRUmjvANxgvJN7folHPgtU1UxXnVh19dGv1amYIvzyx0yYrEKQ9JxEy1QKBgQC8zAG011S0HopmpBFizKanlmKPM9BHKk9GCl8dEQltxr+KA6734YwMy63fxaRBje0WUJJPMwOoxNUWfvJ6cRTi4BpEbOhy3ZfPCpVoVX71QPMuOqAvUbF/AQrv7tLCSs1WSA98k8DVeIITHAI/ITzCxuRxPyzU7agi0D9EBLoaPQ== apiServer: listenAddrs: - 127.0.0.1:8080 tls: false nodes: - - peerId: 12D3KooWCi7waUGMExFaEMgtKmTaanYaPGNhWmEx2nf7jFEXgQab + - peerId: 12D3KooWS7Z835JwmJ5pGHJxpEsJ3vab5M4RjJsWHXmDD5895DT9 address: 127.0.0.1:4430 - signingKey: QQwIKP+YwFY9WzeluVGFwlLj3EJ36RNtGH7QY4rJsAgq+X1I47HaHoFUg2UNZIMtq8mggHYZA4a1B/xntR1RcA== - encryptionKey: MIIEpQIBAAKCAQEAxn9H+w/uFvOd8rW5KCpCvisG6JmDQa1pp1gPdWhdTpqj3yI/3pYK5kgnZhpUF83bQ6zKsNSVcxRqRvW8ZBGA179fHwTwe/KkMuAhgoOCMNG0+EKmRYQJdul2MFvgOniVJxBNaywoCWA0HI24sk4Dp7pj2Dn9yhcj49J+j12STlY2/+oAmhA8a7nxZ2XOMZyZIR9jQ+9MgQdTEa65LSTMTwQ7/A0g3yY+t8+BxhYT5hEdFKIgAV3iapbpP8kT/EvVHZYFz0RUBa2NC1xJAjfFCliGBqD9k7kUNOmP1al4EXheueZDtg1WvwY3PRRcDuSvxLCh1TAuHMMOd7XbR9CrvQIDAQABAoIBAQCiui/pe8rFWBzRn/bWHacvvZhhUZCQZDjsbr3lk5SC3zWetLZFpR30YYyjIMx141Zw6ZQVWYHXoRHrcINsSgklVgcGKAd6pZXE+4edNnCh0xmYOROUg8U6jfRNetSdOsOUDcJaLQ35ebve+LREwL4wYBaAajJL3aKXn7YPlDdgLc02OeQ7t3hIGX/nxYQy2X6+GGsNZvZvmiEoO5cCKPo3lvHIA8nnjB/0J9Cd8ffqiTNrw0NO/ErHxPxTu4II+3VtJ3xWZKlVAOI7Q2uccexdqkJjFcJHmqRWLf8zQzxZxo1TxgDZmZcQHG4sQt/XBL6A2xoisi0kwo5yz4f5WflBAoGBAPKtjMdC92cZLtHlBYvqrQqxJdCpQyidVEa60o+IH2q7VDepLW9QAx0gIwZIAKk/kcTHCtNu1pxVaX7YhVmdtRj8cr1j7g+CWtYaAeMrlpDhUghBEindtVV0gOEkIMbn+Fpzp6/km8LCjqzD2SlVex4aJV8qCRi5WpK3W0Z9RHTtAoGBANFk13fgLry6es7roQvig4Bkg8Qtpy5HYvAyTPk/2q6FfNOZSSYw5y65FzJUZyTEWTn8EjBA+bngmAc6xEA4gr1diYduEm6bab3unXCGzBVWqih+cTAh9lPgmAAHJD3i89SFDE9s+Gox/1n7vVz/k5P5ac+1XyqWXCHI7j1S44gRAoGBANMIZtbU/k4SkSuHzIX64tXcbPUCbFuCTUpgpkCY8DEhjEAHB3K4Eq0eSDbrIGAN3tZO/LQWu9whTmc3JOdkhJqg1aqqntev1QxAe4mwWvPMbUiuRXxQx6LzeCvQ/gvap5cI4jbMR0NbazUD7vHJ2xG3TO5voI92iDPz7RTkVEaVAoGACHkoLvWnboOtTIpEbhKwd5WZr2qZhUnmOwoOC1gGJWHJd1aQmzcHY+Chi6vWsKoxYiNNKR63/EmWXVSHdIHU6IzMb+qIXGl1kfYB8PfDcmmbYSAcvHHjYemIvReM4+Q3MbZglSY3tzRmvOFu/EBrXGWPXpRcUYDcIZHb8idUhcECgYEArvEvxIFHIIX3bhMgXhMvM9TJ5/t/e2YHm2Qz4COeU6Y19CklAjvZ6CpZ9lGUWVbGVflI+ivayAT540HCT1kwmK8WDYrggb64Ksir0TZsv7aKjp5pfZDc9IakisBEsNkjSkOF7xbUGQe5CSiK5khFQx5X8jZHqsczlBntJuquQgw= - - peerId: 12D3KooWG2nD7XFggVFw48xk8JyHwn8iCZ9W73gmzJTkgfVjAxpb + signingKey: w+63sD3k2rBwrtKTcV02B8SdKYrI7rzLpXHtNYwZU7ryIj/g7tmvJFXN6TZjTWX4al5UAkRefJQfDXfXFCCPHA== + encryptionKey: MIIEpAIBAAKCAQEAtw1tn95/mQ2cpYgOKxaRwgZITgsrmZQIyH+bYFaUYUWoUp/AxAdPrh5cLehMUNXH8ZoyHkhV3bIMWpHoUyG+QJzz7etktAVz6MtEl3Wo/jAgAEDvXXgFMku2hnh6coWyhzyXR190ZHgGazJ0K1OtugsIFXwFro93j0+8iPuifsWkH6RaAhvZJUWaQGGmNQKSZnbdFokGmo5FM0z0eOI/sZGhCtxuWbpZz0hhvW3sXEWEyzq8WwTFLGoppIETnhjzcSJDO+pq0b934WuMTGazUH0sPc/AnoZJp00237Ar8g+h10CVxQ5SsTba7VYDCr7/zeHS+vvUYNgB4NO0lylaTQIDAQABAoIBADhUKoLCjhNEDAsoFewOcuX41vElINKOqjFAi0iW++v+6nAadtAby9oxv33k+O77Ch7/qyKEcd/ZtVF9irdiL9BkO+/fuspmzyc4va+55jnqBz7svHvPvhGfGNjCZDOvjqNs8sRkzEVKZfdAvFzE0DXqxR8PXhQ8U7dG+yZQAM3vcE/ib/14OxXgANrPwOKO04Lhff2xoXuuqrx9XAG+PbLlxi0gYGK55E1whgBldPC3nKA38hh1QDt+uh8AVdZ/Y0ehW7t2CG8zPNNTO7TjrZHwMeFgvVODN+0X1W9e7nIuDGVJ74FzvC5PZwBURJ/tjHSUCR0Pf9t87yaQqEQT/sECgYEA44Ve23Fnn97kNqpYzJJAq3+1Cg72cEg8gG9RA+AtOcMUO9EspWxiu/MPXGbaP/R/5L9UTikv7oN7an4gsO4FN9cFH/j4SY/fI6twi55DwpOFbgjLf6lT0tzEnHymPXjGCCHdc3BRIsjd3ehmQcwBZ/pPl8CggDxj24/xlqt7kbECgYEAzfceXEEpGmOZ1Hno3Xck/ZBcl12KjLVOK8ACe890BjWIPDMXaYfGJJpX0terR7BcqrLrq0komPUinoeelpIAitTXQ+zr6ULYXpZgxSTOz7aV7OAsudowp+m5z594ZagIgs3lKVILeclAqaYB4eq9/pHzHazS0YIwWwce753CfV0CgYEAzJ89YYTLmoe+nb90n3+Fc/gmHQa58t+0shnrNd4fLozZHLcSPTCOV9TQ4tyJuu0tPNAqhSUbu5o6m9sVkapvvPm/3TJwMtCW8aCVVqwe6tb8MKruQkFKZyEwHkEoza5aBCRY4yKHhg47JAGIPfK47Qe9H5EZiFtHv8bkkwpk1vECgYBuFJy6a+0e+IrYIAwQicRQbV6/W7RYPfK4uVfaemclhmj428mwkmuZVpCH1NLrbtwoM5Z3ppM3JRVKq2tcSE5X5SfkWvU/Z4WjEDZKR8DtDUYWIz5kWrRUmjvANxgvJN7folHPgtU1UxXnVh19dGv1amYIvzyx0yYrEKQ9JxEy1QKBgQC8zAG011S0HopmpBFizKanlmKPM9BHKk9GCl8dEQltxr+KA6734YwMy63fxaRBje0WUJJPMwOoxNUWfvJ6cRTi4BpEbOhy3ZfPCpVoVX71QPMuOqAvUbF/AQrv7tLCSs1WSA98k8DVeIITHAI/ITzCxuRxPyzU7agi0D9EBLoaPQ== + types: + - tree + - file + - peerId: 12D3KooWKkWv85fkYiCnvKVsVoCu9VwFupNejVBA2bFGBjic6gHP address: 127.0.0.1:4431 - signingKey: Hdpa1ee8nBVeIxYVcWjTSaVAfqvkBcqfhWRjlKi9fQ9cVEY6sy+MxMOa4CRQgM3eJCJhaLw2Hvux4rqMUJVtDA== - encryptionKey: MIIEowIBAAKCAQEAqJI1jTWuzef1hEdbE6Xth1GFXkJbLvn1LWmtyErrrQYtJd6zOsdncf522tcpxRs6LWANNe5HHzuP4VYiYnGe0CuBlMbnWLvH/vEh9Em0Bt7P3MrQTOFt/ESPN5AWaE3jeYc4M9WvZvLVpxCqJYE0xu8AkXi/5SqO3dfXKMyQ/kJoAn0FkAe44l3A7B/otqiYKp5oB+4/Fh1R0sFo3djSCS08KW9mbCQffQa0BA56f9cKF+/tVFqoW9YximwsVvecM8lr92NN3/kvO3a4xLnTZJNYBnaULsDbNS+Mdf0V+mkmcigaFumDHI6Z+Ca/y/tGGlTfExC4mRLOXgAnNIcXAwIDAQABAoIBAGf9UjXbcQuq1aWVk1TKnn5Exv5/9tpC7oHmWINf3IVvcviSqoRPMLx82vtjkmv6wOfvAhdL9+oHh1neFfYe23bV7+lEzsDJjrXyMR0PPpSibR5qqxdSVdQywxrmszwDGJoG1Z/8aWkb0rtuJ1hdnZ4/IF2dXNvVZi7qkNulXqjKc5pU16S2QPIjZ5YDatsl6Z7TZ48yyTxlmJKh50qmLO7S4+0jbVyDFyX8aAy8R/yDuZpZ1+aUHJkUqfvUpzngS2R61M/iAeGkNDP9mg59CwhJsOLsWSw5rA2MTwfmRIZjczG4WCfkhBhzQWztN8ded09xLySY/gmMYsKwpX9zwikCgYEAwlzJ0kC3ATNOQPhIwaVDY4eI8SRYTZIgp+aek/z/Jek+kf6/VY6eVWimEEjyMVGLTzjyrUOQyhxkJ2QqUNVJYongj/3yF8WE2+d+G50QA3J0K0b8FQFLGlLndgJ++AZmNxxMyD/XZ5aSqWc58SzA3UgbjTdDJwv6KYIc+r6om10CgYEA3geQ4XOPkm3/AagGvTRbM88nr4tyeyEzfLdXqSBdUBM+cB0t3l+mh0aMqPd1o8TcrvJ+33Kp3vmM2wq6Rj/jChx0pqQZeBX+/i3fSQUYiCnDeo2CsJ1pix3ju6xKIlssi7Lqf50AUH3TgPfeOEgl0c0skc7Iiw6uBbbN2jMbtd8CgYB8UNkN0DK9Y9GDoMr4gPoPaRtgEb0hMHwOqGV5hnK0DvHkc6px0NzZCCxfcijm/p86NtSRmgu8Gli9EUY3mZRsoH+v2d/E8KM//Fse0mDxs302SRrnXIJq/efqBUKs5XrvePxrgNoH+bko/UuERPm/D2X/9v7OtMx3TC+4+cXiSQKBgQDAbuxKCp93+S/YXqogmF0nhTbPNdwuDbOTN1CZu/xEJ7mo8BFON7acbjABTiC+pSPj2TbPMZE7OSy0uBKESmDb5ZfQyk9svhu4b0ekAO+nLBNJh5aqvnO4aFp10TibmEv+dD48BnY8TSHgGHSYcSeeM+aaJQ+5PirjtvGpWTx+HwKBgD+mqVa627FOJHKJ022L6eH61S466rvxiQqQdOKaLkRLNTsf0frcsZIEoPGXQmAsx79n5ezK0ndPsY2oWDu87teHaElqTp0oMzayuP1ognyFp5CjlUmUgLZ4ijw5ZoAinGVpBxYvHZ/KxRMxMhMYnXPYrx95nNT3GDMGV/4xG2cH - - peerId: 12D3KooWLNu2jz93Bmw5AFjoWUWVqewjMDX9X6LDnD3B5vcDPMtK + signingKey: 460RGvA77dWz7qFYmPqpMzc6Nw5eAXOXZP0fQvcyXj2TmG/z0E5jnTMfpFD7GHIwuFA9+XvqnjuKFteeHaDxSg== + encryptionKey: MIIEowIBAAKCAQEAyL/fnKl6ztxVtXkxdl48HEawDKmJmBxs6rGl+kNx+cb6Jio/GyKz4d1bCW5Ni5glyVg11RqA09wPaJxKMlp/svz+46a9MtZmC4/pFOiSaMkmMOs61apTruJNNDK/9O0j+irCnJFRGactt/AlCKU+9WjwsTtJtmqEkt0uuD0Tn709Itx86nzXhCqNtEKPvo83FaZ60RFpe72KNLcyP7DgR8m7Csa4JWfK1Ig0539rFxM5Co/GGNna3mqShDbIN0Aw8k7yCuDaCx/akd0Yd2BEjBApHtlonu3BYfCAF3bAus9sejogeA+mu52akN7H0YnC1BeftFAzlZ5yJV1gKwsYmwIDAQABAoIBAQCzzPaw0DMIV9wEP9oHVHuuL7m6fZaZQMxkoFwyfHn25zphOHFxEnHemG3TUpHtt4YQggslJSnBl1XNsj3aP6gkXejFaTAH+nNHY8u1SGDprU+hfO4jNPzipBnV6KZ47nTMucO4i4cB3PRbzKC+z5JGJ4l8k8d/tIOtLqGLrliHNlRZ7LRfovCP+ekPrPpxtJBp48GUQFRexXqsytiEYlAjXPUVHh+8b1lmDJXzxzTf2Nhx1lXykrrRYlOOYSz0fufFzsLcJSzPbfnomgjaNGKPCSWfREFp3Ch1P6+G9hClMORL5Vc58I5j3SlacsoWEw3ywyE0Visfn7ojIuqboLHBAoGBAMnbL0TeKaKIkRGdKXFhUzpUrH1mPg7QOLH65GbbtO5DHTwDRjX0I8pc+XT7u/qVhG+h72wBZ3J/egAlvLUOtwuuNhjir5BqS90QhtofsHy7IbzAkMhPpQ/3p2+ZrfTGylzUHLwR/hr9aiP5PizMJQ2JSQU3k8YozVGENnmpnydLAoGBAP6YskbZU6+TPXlconbg2G+D6KSYScu8h1d6mYHjcbCOc5ILVa1DJGr/ufYl2dqPTA63Mj9PJ8Dla4WI9iXwh0cbTI/N+XD27y54sWonuWymX/9i2tlhmnLeLqGq7zQ+eCQMMnhH2rbN/+hEYMwbsTAdu4txbPDMGVoL9K09PXHxAoGAGBuASrZJvKqYwMTHVU4tVXMVYqiaUsSVcNQpAQvOUQJc9HTjpr/wolN2S31hFu1Scs6hPIHya99Dn87h+bG3NMLqnRA9rX60bsNxh41vU4Y54kQRRosUiJKoQZDWELzJIEsI34E6mtiXG5LB1THQXwx9Vw0rLehjlQ+4PdF/O38CgYBjHbs6Dd2gmufx2Xh+Y2afc3EcsxT3tjvSeK5OfOeD3tFrZ/JA88S3yzrwcyfvCJ6JlBSBxSUq2aYUZI+/kXZ43k3eJkgYDGptYxtewnxTqinxWODuhCsG0SzCT7O0WSWYkw8K+J5TULtyBzzP+W/v1YNv9AZ/cFXmUoU89Hx5YQKBgBPx7Dm8s8M/8EQoV0NQwgk0I2W7WCnaNxNaNnIg1MtEsBkI+UkxnAGPUwEDtv5cRmciBO6SdsvUrZh+t41Ui/MLTMJOsQO53HAbng4tjxcAmDM/R/iYyI6gCCYhxUudPTaKDZchV41TrhGaqXliV6CgCRVm2WsKFgJdFNW7QVq3 + types: + - tree + - file + - peerId: 12D3KooWCYAzw5jFx3VNkJ8jn6VFq4WcayT6sZzdBx5fJFeCjXbV address: 127.0.0.1:4432 - signingKey: eFgkHOqqWUE2i3HChsYuER37d8Z5Izd1ENfLmpMsgSSc6lnYW+35sm7b5J7sK1G+xK0OPhtz8uxYkT0f5gJuwA== - encryptionKey: MIIEpAIBAAKCAQEAzc5cRGNf5G25G5Lh1hKEhV3lgxxB5RL3R0bjLhtS6W4/xhMvSaZR2girvzLBK1ydXk95Oc0EUNfCE/QKddUy16ycC4DHaObMjf96cVHhiIfKhLTO5gg2mqisQ39+oTtn85/T1imYMlkHGIt1MvHqXoPQa8guDXB/DCDz+UeCzPBGUiS4ZORJHrdd9QP/edyowUsfvwIayJhd4BUKOhgWvIAHohOTls1Xa16fkpojDy3b1L5pFvQdMw0DFY3m2LtIYVmlw1YyE/vqbhR/DMAkGGGD2nHfSQ/zApGAeYgqNSyAAMwjAaXtXnW/SYPr0IHRAnm4Ojk0qKcUfaTFKSSakQIDAQABAoIBAAksPm6J41dCELMK6+fnsWJkWftrAgDcxIq3vR5r91kSIeOJLV1h/Vnzcvw1neh520W90xBhc+TKiQrsoJ653uc/+UCF/91MFCfsECAG3z9/leYuTN5x1UU1aWAkyZcUF8EDCaUM+4ya7TcJ2DJqF+EYjOyQ4oSU1ATNXzJoHotVwcZ79uPNRTMMTUQ/sZjE3OJGkoPzOoacjmAsg3Xg2M8uCC3HAqf5kO146CX4/x9z8EnKr8XHWm8oRT0mWLR3N2WFIJ6sDuyL7MPy4Sm2xSbqS5pJ3kC/rwuLcR4KlL+HyVvpTPHQlysiwWfKz1YycKNaWfeAVQFQDKfe9fpTK4UCgYEA5rXvM0eGTljFUYg5Eb47LNl/YKcQoPGL9zIrTuyYl0skr364iIXFQHG3cv3G461jP6/eBBs0sMZe47SpNv9zP+hYthaReVLzPqqxrCQF4rJo2oCWb774BnkxWQjbiPLSJi2cc+5ZqMQI8u5XxdqO9oJ4pCCxs5nCasAcLGedrrcCgYEA5F2Rgq5mN75dSzco5MDC594HGQ4mXpj9xCDocvbhrvEm0NY2/BTH23ak11EnSYJNCvI43NX2nmxEkVzl7TbNLBP+u6IxK1XzFXg4ki2IIu1ACzHwbBE95APxZ7n4BRKhFkew96HX4cSWSvMfmrK/Vb3hPJpV8UUjaru6CiN/OPcCgYB4B09bLmsBd82wjV6jjITc4IsUjdZo5UIcaU1+0jjQ/ZcodpUq8e2diYwXl1BSQ3LPP4ASQtU24v2bGfKvWldreEYu9a7Zn/5NLCEjndoyBv/mLeAWYxRGyeaSm7kblrkeg7xR1D9xPgwp1zZzCTI3rcl2GkxZVDWBtFD0CTRQIQKBgQDe2lzMrYp87Z23b+3NRjst8OL2VXOmLyC9y+trfXeBtD3P4Kwp1dGvXpnAsaZoOusaOoS5JWgU88z6GjEbC7avRBf7XW0kQC0HD5oNNLe8ddBg3Gwl2bGPGTX0pmvd728aAf41uk+lN6X/IEEAQ10qvDDYZjhmSbUlTGthx4A4wwKBgQCQYGnHr5fvqlmLga+xkPXMFnJE1D+Ya/fkA/HTGZfLoMiqFv2q8uqque0xb5Kaim7eyQ2SpE/yolaeS8L7o6zMKT6du5QONhKdQN9ccdW/3yUQXzWcjYjAyB+zdYn9vKlMa6VnuXjR5gA8RrnHGJMZAeNLOWzH1B0eJSi/Q8w9Rg== + signingKey: 94Y4rDt00bq4xkrPJ7E9OPULzOBd5mzn0uMTKP5b4JUobSOKGyrnwWxO9UpY7OSzA2Y/5dgIMSFSCvv4p1iwaA== + encryptionKey: MIIEpAIBAAKCAQEAs/jLbBcMpkjqZ8R7ySsE9FkUdVZsJJk4BWI4OHbRg5+RMt74AeoKK+NW81zxw5tzLXvW9AZVccO742xB5mRfyrvZ22YrPedTvQymmyY5RCh9qduk0OOfItlNVyG7zRBgK90TAmkwbg4B1jCFIt3cuttK7A6gUKqy9deNhYZd67a7byJIgGmKcqK4ETbeLw8vJv08Htagn3/7CRjwAQcuLNzWw7G4SiTyIOcLpX14oQl3/v1/gYleFVyqebvo4xftQ/pCzDZoD6/t/HK70zzD+TsCmWK/o6iO42hsARIkuuuufASW9mIGcjKj8v+mftLEqqkSSEwtZTuLATJRG2bwiQIDAQABAoIBAQCC+GKpVZjKBjQ3scBXpGvlmlIOFgd7Ftmy6Uh6ptVP0Tasa6DWW8htKfNkBVaXgC/wgLfsPBPAR64bEfRfQtqHQe+H/7EmSosg/+za6ZUxKbpRe1tU/OEZTkQ/TXhLAkjKgwbLcVtiK+VgR00ME6MHhIDgisBWE/NKf0QpUKBW4Rp/0l3bUYO+b7aAIBT0Q/Noc+kaXbHygYuzTMYCvItGDe0WtvrNE/IQEnjC51i02rpa5GI29T4OVvumKbLjFMlT0EttkTjZNVEicP8RHqSKlE7+lMPT1eH3CEVepV7QKCzgPN9pBudLmzmb7HhSZvwMzzkTTt1WczWshBrKZKHRAoGBAMynv1toSLzznwQzffhwLQzvzxnjhdxNKKbJ7cVG4CNVKRVh9iPVBv+XWgBYInnpC/ByX5HDKleRvo54wXzYoMlxtqz8ZCOFxcWrocehbLAIxtGDlSAOGAgSVMrJDJr28Hc7n0zesIyQzymoWfN7yDxcKLB34hC0qUQVuaY7PjTNAoGBAOEfuQkzdrIcT7hEuX+Jv9SmkBnxSocpUZyF7vCm03Dg8FhGK16WWXwa5ii0R6LL4A31J1A/ydpFTd+kxqaQ0dyrc9QWkwzuyy3JYO2R/J7ejFO5KfuKMojXPMwum69y95vL4ZGfYXmF/vYv7TYaBhoI0oeJA5+w9dX20z1jgkqtAoGBAJRqJky8sNtOdYhPa1BK0XDrTC6DIKVl01A5alRBlPQqoxOdqinMKDoc4akUQVRVnFHwL7x+Y2uEB0Q88FyAoQHVlFuY4WodbhJu6HDkcPSsOLriCLhpYCYiXRl+ecS7xiFBvMG7UR9vOL0GGM2Je+nCD8QB/JCO4527f5m8pt0VAoGAd2Vht5WJ0DDfvvUEBLZD/T5RktC8HC83z3HhJdT0sxs5nTep7MKEtyN1CgWDML48GGr67L7ICXFUOdakXNbV1tk/1y4Z03QaYjA5rgYNGx0hA45iy7uhzZ2J6yiU/VpWJFTfT2JeShtc+6izgEwRDGG9dpCeUWWDHHWJ1zcddQkCgYB//JrVbMtkB+L5OV0UfAFlhGaVoThfCL5QHAwmXq+gsX7dxCu5NGJDWJ6fQ+e+0zQms6nB/BvLXcKWo0rEZJsyiUpWN8X06nsyHN1Nxk7PiPlL12dV9/RGD98kNmFQorYhO/lOWImqy7ZpuNNSc69l1B9Q/G/FLU8itzSp2irSEA== + types: + - tree + - file space: gcTTL: 60 syncPeriod: 11 diff --git a/etc/configs/node2.yml b/etc/configs/node2.yml index 6e8fed30..ddecb9f6 100755 --- a/etc/configs/node2.yml +++ b/etc/configs/node2.yml @@ -5,27 +5,36 @@ grpcServer: - 127.0.0.1:4431 tls: false account: - peerId: 12D3KooWG2nD7XFggVFw48xk8JyHwn8iCZ9W73gmzJTkgfVjAxpb - peerKey: Hdpa1ee8nBVeIxYVcWjTSaVAfqvkBcqfhWRjlKi9fQ9cVEY6sy+MxMOa4CRQgM3eJCJhaLw2Hvux4rqMUJVtDA== - signingKey: Hdpa1ee8nBVeIxYVcWjTSaVAfqvkBcqfhWRjlKi9fQ9cVEY6sy+MxMOa4CRQgM3eJCJhaLw2Hvux4rqMUJVtDA== - encryptionKey: MIIEowIBAAKCAQEAqJI1jTWuzef1hEdbE6Xth1GFXkJbLvn1LWmtyErrrQYtJd6zOsdncf522tcpxRs6LWANNe5HHzuP4VYiYnGe0CuBlMbnWLvH/vEh9Em0Bt7P3MrQTOFt/ESPN5AWaE3jeYc4M9WvZvLVpxCqJYE0xu8AkXi/5SqO3dfXKMyQ/kJoAn0FkAe44l3A7B/otqiYKp5oB+4/Fh1R0sFo3djSCS08KW9mbCQffQa0BA56f9cKF+/tVFqoW9YximwsVvecM8lr92NN3/kvO3a4xLnTZJNYBnaULsDbNS+Mdf0V+mkmcigaFumDHI6Z+Ca/y/tGGlTfExC4mRLOXgAnNIcXAwIDAQABAoIBAGf9UjXbcQuq1aWVk1TKnn5Exv5/9tpC7oHmWINf3IVvcviSqoRPMLx82vtjkmv6wOfvAhdL9+oHh1neFfYe23bV7+lEzsDJjrXyMR0PPpSibR5qqxdSVdQywxrmszwDGJoG1Z/8aWkb0rtuJ1hdnZ4/IF2dXNvVZi7qkNulXqjKc5pU16S2QPIjZ5YDatsl6Z7TZ48yyTxlmJKh50qmLO7S4+0jbVyDFyX8aAy8R/yDuZpZ1+aUHJkUqfvUpzngS2R61M/iAeGkNDP9mg59CwhJsOLsWSw5rA2MTwfmRIZjczG4WCfkhBhzQWztN8ded09xLySY/gmMYsKwpX9zwikCgYEAwlzJ0kC3ATNOQPhIwaVDY4eI8SRYTZIgp+aek/z/Jek+kf6/VY6eVWimEEjyMVGLTzjyrUOQyhxkJ2QqUNVJYongj/3yF8WE2+d+G50QA3J0K0b8FQFLGlLndgJ++AZmNxxMyD/XZ5aSqWc58SzA3UgbjTdDJwv6KYIc+r6om10CgYEA3geQ4XOPkm3/AagGvTRbM88nr4tyeyEzfLdXqSBdUBM+cB0t3l+mh0aMqPd1o8TcrvJ+33Kp3vmM2wq6Rj/jChx0pqQZeBX+/i3fSQUYiCnDeo2CsJ1pix3ju6xKIlssi7Lqf50AUH3TgPfeOEgl0c0skc7Iiw6uBbbN2jMbtd8CgYB8UNkN0DK9Y9GDoMr4gPoPaRtgEb0hMHwOqGV5hnK0DvHkc6px0NzZCCxfcijm/p86NtSRmgu8Gli9EUY3mZRsoH+v2d/E8KM//Fse0mDxs302SRrnXIJq/efqBUKs5XrvePxrgNoH+bko/UuERPm/D2X/9v7OtMx3TC+4+cXiSQKBgQDAbuxKCp93+S/YXqogmF0nhTbPNdwuDbOTN1CZu/xEJ7mo8BFON7acbjABTiC+pSPj2TbPMZE7OSy0uBKESmDb5ZfQyk9svhu4b0ekAO+nLBNJh5aqvnO4aFp10TibmEv+dD48BnY8TSHgGHSYcSeeM+aaJQ+5PirjtvGpWTx+HwKBgD+mqVa627FOJHKJ022L6eH61S466rvxiQqQdOKaLkRLNTsf0frcsZIEoPGXQmAsx79n5ezK0ndPsY2oWDu87teHaElqTp0oMzayuP1ognyFp5CjlUmUgLZ4ijw5ZoAinGVpBxYvHZ/KxRMxMhMYnXPYrx95nNT3GDMGV/4xG2cH + peerId: 12D3KooWKkWv85fkYiCnvKVsVoCu9VwFupNejVBA2bFGBjic6gHP + peerKey: 460RGvA77dWz7qFYmPqpMzc6Nw5eAXOXZP0fQvcyXj2TmG/z0E5jnTMfpFD7GHIwuFA9+XvqnjuKFteeHaDxSg== + signingKey: 460RGvA77dWz7qFYmPqpMzc6Nw5eAXOXZP0fQvcyXj2TmG/z0E5jnTMfpFD7GHIwuFA9+XvqnjuKFteeHaDxSg== + encryptionKey: MIIEowIBAAKCAQEAyL/fnKl6ztxVtXkxdl48HEawDKmJmBxs6rGl+kNx+cb6Jio/GyKz4d1bCW5Ni5glyVg11RqA09wPaJxKMlp/svz+46a9MtZmC4/pFOiSaMkmMOs61apTruJNNDK/9O0j+irCnJFRGactt/AlCKU+9WjwsTtJtmqEkt0uuD0Tn709Itx86nzXhCqNtEKPvo83FaZ60RFpe72KNLcyP7DgR8m7Csa4JWfK1Ig0539rFxM5Co/GGNna3mqShDbIN0Aw8k7yCuDaCx/akd0Yd2BEjBApHtlonu3BYfCAF3bAus9sejogeA+mu52akN7H0YnC1BeftFAzlZ5yJV1gKwsYmwIDAQABAoIBAQCzzPaw0DMIV9wEP9oHVHuuL7m6fZaZQMxkoFwyfHn25zphOHFxEnHemG3TUpHtt4YQggslJSnBl1XNsj3aP6gkXejFaTAH+nNHY8u1SGDprU+hfO4jNPzipBnV6KZ47nTMucO4i4cB3PRbzKC+z5JGJ4l8k8d/tIOtLqGLrliHNlRZ7LRfovCP+ekPrPpxtJBp48GUQFRexXqsytiEYlAjXPUVHh+8b1lmDJXzxzTf2Nhx1lXykrrRYlOOYSz0fufFzsLcJSzPbfnomgjaNGKPCSWfREFp3Ch1P6+G9hClMORL5Vc58I5j3SlacsoWEw3ywyE0Visfn7ojIuqboLHBAoGBAMnbL0TeKaKIkRGdKXFhUzpUrH1mPg7QOLH65GbbtO5DHTwDRjX0I8pc+XT7u/qVhG+h72wBZ3J/egAlvLUOtwuuNhjir5BqS90QhtofsHy7IbzAkMhPpQ/3p2+ZrfTGylzUHLwR/hr9aiP5PizMJQ2JSQU3k8YozVGENnmpnydLAoGBAP6YskbZU6+TPXlconbg2G+D6KSYScu8h1d6mYHjcbCOc5ILVa1DJGr/ufYl2dqPTA63Mj9PJ8Dla4WI9iXwh0cbTI/N+XD27y54sWonuWymX/9i2tlhmnLeLqGq7zQ+eCQMMnhH2rbN/+hEYMwbsTAdu4txbPDMGVoL9K09PXHxAoGAGBuASrZJvKqYwMTHVU4tVXMVYqiaUsSVcNQpAQvOUQJc9HTjpr/wolN2S31hFu1Scs6hPIHya99Dn87h+bG3NMLqnRA9rX60bsNxh41vU4Y54kQRRosUiJKoQZDWELzJIEsI34E6mtiXG5LB1THQXwx9Vw0rLehjlQ+4PdF/O38CgYBjHbs6Dd2gmufx2Xh+Y2afc3EcsxT3tjvSeK5OfOeD3tFrZ/JA88S3yzrwcyfvCJ6JlBSBxSUq2aYUZI+/kXZ43k3eJkgYDGptYxtewnxTqinxWODuhCsG0SzCT7O0WSWYkw8K+J5TULtyBzzP+W/v1YNv9AZ/cFXmUoU89Hx5YQKBgBPx7Dm8s8M/8EQoV0NQwgk0I2W7WCnaNxNaNnIg1MtEsBkI+UkxnAGPUwEDtv5cRmciBO6SdsvUrZh+t41Ui/MLTMJOsQO53HAbng4tjxcAmDM/R/iYyI6gCCYhxUudPTaKDZchV41TrhGaqXliV6CgCRVm2WsKFgJdFNW7QVq3 apiServer: listenAddrs: - 127.0.0.1:8081 tls: false nodes: - - peerId: 12D3KooWCi7waUGMExFaEMgtKmTaanYaPGNhWmEx2nf7jFEXgQab + - peerId: 12D3KooWS7Z835JwmJ5pGHJxpEsJ3vab5M4RjJsWHXmDD5895DT9 address: 127.0.0.1:4430 - signingKey: QQwIKP+YwFY9WzeluVGFwlLj3EJ36RNtGH7QY4rJsAgq+X1I47HaHoFUg2UNZIMtq8mggHYZA4a1B/xntR1RcA== - encryptionKey: MIIEpQIBAAKCAQEAxn9H+w/uFvOd8rW5KCpCvisG6JmDQa1pp1gPdWhdTpqj3yI/3pYK5kgnZhpUF83bQ6zKsNSVcxRqRvW8ZBGA179fHwTwe/KkMuAhgoOCMNG0+EKmRYQJdul2MFvgOniVJxBNaywoCWA0HI24sk4Dp7pj2Dn9yhcj49J+j12STlY2/+oAmhA8a7nxZ2XOMZyZIR9jQ+9MgQdTEa65LSTMTwQ7/A0g3yY+t8+BxhYT5hEdFKIgAV3iapbpP8kT/EvVHZYFz0RUBa2NC1xJAjfFCliGBqD9k7kUNOmP1al4EXheueZDtg1WvwY3PRRcDuSvxLCh1TAuHMMOd7XbR9CrvQIDAQABAoIBAQCiui/pe8rFWBzRn/bWHacvvZhhUZCQZDjsbr3lk5SC3zWetLZFpR30YYyjIMx141Zw6ZQVWYHXoRHrcINsSgklVgcGKAd6pZXE+4edNnCh0xmYOROUg8U6jfRNetSdOsOUDcJaLQ35ebve+LREwL4wYBaAajJL3aKXn7YPlDdgLc02OeQ7t3hIGX/nxYQy2X6+GGsNZvZvmiEoO5cCKPo3lvHIA8nnjB/0J9Cd8ffqiTNrw0NO/ErHxPxTu4II+3VtJ3xWZKlVAOI7Q2uccexdqkJjFcJHmqRWLf8zQzxZxo1TxgDZmZcQHG4sQt/XBL6A2xoisi0kwo5yz4f5WflBAoGBAPKtjMdC92cZLtHlBYvqrQqxJdCpQyidVEa60o+IH2q7VDepLW9QAx0gIwZIAKk/kcTHCtNu1pxVaX7YhVmdtRj8cr1j7g+CWtYaAeMrlpDhUghBEindtVV0gOEkIMbn+Fpzp6/km8LCjqzD2SlVex4aJV8qCRi5WpK3W0Z9RHTtAoGBANFk13fgLry6es7roQvig4Bkg8Qtpy5HYvAyTPk/2q6FfNOZSSYw5y65FzJUZyTEWTn8EjBA+bngmAc6xEA4gr1diYduEm6bab3unXCGzBVWqih+cTAh9lPgmAAHJD3i89SFDE9s+Gox/1n7vVz/k5P5ac+1XyqWXCHI7j1S44gRAoGBANMIZtbU/k4SkSuHzIX64tXcbPUCbFuCTUpgpkCY8DEhjEAHB3K4Eq0eSDbrIGAN3tZO/LQWu9whTmc3JOdkhJqg1aqqntev1QxAe4mwWvPMbUiuRXxQx6LzeCvQ/gvap5cI4jbMR0NbazUD7vHJ2xG3TO5voI92iDPz7RTkVEaVAoGACHkoLvWnboOtTIpEbhKwd5WZr2qZhUnmOwoOC1gGJWHJd1aQmzcHY+Chi6vWsKoxYiNNKR63/EmWXVSHdIHU6IzMb+qIXGl1kfYB8PfDcmmbYSAcvHHjYemIvReM4+Q3MbZglSY3tzRmvOFu/EBrXGWPXpRcUYDcIZHb8idUhcECgYEArvEvxIFHIIX3bhMgXhMvM9TJ5/t/e2YHm2Qz4COeU6Y19CklAjvZ6CpZ9lGUWVbGVflI+ivayAT540HCT1kwmK8WDYrggb64Ksir0TZsv7aKjp5pfZDc9IakisBEsNkjSkOF7xbUGQe5CSiK5khFQx5X8jZHqsczlBntJuquQgw= - - peerId: 12D3KooWG2nD7XFggVFw48xk8JyHwn8iCZ9W73gmzJTkgfVjAxpb + signingKey: w+63sD3k2rBwrtKTcV02B8SdKYrI7rzLpXHtNYwZU7ryIj/g7tmvJFXN6TZjTWX4al5UAkRefJQfDXfXFCCPHA== + encryptionKey: MIIEpAIBAAKCAQEAtw1tn95/mQ2cpYgOKxaRwgZITgsrmZQIyH+bYFaUYUWoUp/AxAdPrh5cLehMUNXH8ZoyHkhV3bIMWpHoUyG+QJzz7etktAVz6MtEl3Wo/jAgAEDvXXgFMku2hnh6coWyhzyXR190ZHgGazJ0K1OtugsIFXwFro93j0+8iPuifsWkH6RaAhvZJUWaQGGmNQKSZnbdFokGmo5FM0z0eOI/sZGhCtxuWbpZz0hhvW3sXEWEyzq8WwTFLGoppIETnhjzcSJDO+pq0b934WuMTGazUH0sPc/AnoZJp00237Ar8g+h10CVxQ5SsTba7VYDCr7/zeHS+vvUYNgB4NO0lylaTQIDAQABAoIBADhUKoLCjhNEDAsoFewOcuX41vElINKOqjFAi0iW++v+6nAadtAby9oxv33k+O77Ch7/qyKEcd/ZtVF9irdiL9BkO+/fuspmzyc4va+55jnqBz7svHvPvhGfGNjCZDOvjqNs8sRkzEVKZfdAvFzE0DXqxR8PXhQ8U7dG+yZQAM3vcE/ib/14OxXgANrPwOKO04Lhff2xoXuuqrx9XAG+PbLlxi0gYGK55E1whgBldPC3nKA38hh1QDt+uh8AVdZ/Y0ehW7t2CG8zPNNTO7TjrZHwMeFgvVODN+0X1W9e7nIuDGVJ74FzvC5PZwBURJ/tjHSUCR0Pf9t87yaQqEQT/sECgYEA44Ve23Fnn97kNqpYzJJAq3+1Cg72cEg8gG9RA+AtOcMUO9EspWxiu/MPXGbaP/R/5L9UTikv7oN7an4gsO4FN9cFH/j4SY/fI6twi55DwpOFbgjLf6lT0tzEnHymPXjGCCHdc3BRIsjd3ehmQcwBZ/pPl8CggDxj24/xlqt7kbECgYEAzfceXEEpGmOZ1Hno3Xck/ZBcl12KjLVOK8ACe890BjWIPDMXaYfGJJpX0terR7BcqrLrq0komPUinoeelpIAitTXQ+zr6ULYXpZgxSTOz7aV7OAsudowp+m5z594ZagIgs3lKVILeclAqaYB4eq9/pHzHazS0YIwWwce753CfV0CgYEAzJ89YYTLmoe+nb90n3+Fc/gmHQa58t+0shnrNd4fLozZHLcSPTCOV9TQ4tyJuu0tPNAqhSUbu5o6m9sVkapvvPm/3TJwMtCW8aCVVqwe6tb8MKruQkFKZyEwHkEoza5aBCRY4yKHhg47JAGIPfK47Qe9H5EZiFtHv8bkkwpk1vECgYBuFJy6a+0e+IrYIAwQicRQbV6/W7RYPfK4uVfaemclhmj428mwkmuZVpCH1NLrbtwoM5Z3ppM3JRVKq2tcSE5X5SfkWvU/Z4WjEDZKR8DtDUYWIz5kWrRUmjvANxgvJN7folHPgtU1UxXnVh19dGv1amYIvzyx0yYrEKQ9JxEy1QKBgQC8zAG011S0HopmpBFizKanlmKPM9BHKk9GCl8dEQltxr+KA6734YwMy63fxaRBje0WUJJPMwOoxNUWfvJ6cRTi4BpEbOhy3ZfPCpVoVX71QPMuOqAvUbF/AQrv7tLCSs1WSA98k8DVeIITHAI/ITzCxuRxPyzU7agi0D9EBLoaPQ== + types: + - tree + - file + - peerId: 12D3KooWKkWv85fkYiCnvKVsVoCu9VwFupNejVBA2bFGBjic6gHP address: 127.0.0.1:4431 - signingKey: Hdpa1ee8nBVeIxYVcWjTSaVAfqvkBcqfhWRjlKi9fQ9cVEY6sy+MxMOa4CRQgM3eJCJhaLw2Hvux4rqMUJVtDA== - encryptionKey: MIIEowIBAAKCAQEAqJI1jTWuzef1hEdbE6Xth1GFXkJbLvn1LWmtyErrrQYtJd6zOsdncf522tcpxRs6LWANNe5HHzuP4VYiYnGe0CuBlMbnWLvH/vEh9Em0Bt7P3MrQTOFt/ESPN5AWaE3jeYc4M9WvZvLVpxCqJYE0xu8AkXi/5SqO3dfXKMyQ/kJoAn0FkAe44l3A7B/otqiYKp5oB+4/Fh1R0sFo3djSCS08KW9mbCQffQa0BA56f9cKF+/tVFqoW9YximwsVvecM8lr92NN3/kvO3a4xLnTZJNYBnaULsDbNS+Mdf0V+mkmcigaFumDHI6Z+Ca/y/tGGlTfExC4mRLOXgAnNIcXAwIDAQABAoIBAGf9UjXbcQuq1aWVk1TKnn5Exv5/9tpC7oHmWINf3IVvcviSqoRPMLx82vtjkmv6wOfvAhdL9+oHh1neFfYe23bV7+lEzsDJjrXyMR0PPpSibR5qqxdSVdQywxrmszwDGJoG1Z/8aWkb0rtuJ1hdnZ4/IF2dXNvVZi7qkNulXqjKc5pU16S2QPIjZ5YDatsl6Z7TZ48yyTxlmJKh50qmLO7S4+0jbVyDFyX8aAy8R/yDuZpZ1+aUHJkUqfvUpzngS2R61M/iAeGkNDP9mg59CwhJsOLsWSw5rA2MTwfmRIZjczG4WCfkhBhzQWztN8ded09xLySY/gmMYsKwpX9zwikCgYEAwlzJ0kC3ATNOQPhIwaVDY4eI8SRYTZIgp+aek/z/Jek+kf6/VY6eVWimEEjyMVGLTzjyrUOQyhxkJ2QqUNVJYongj/3yF8WE2+d+G50QA3J0K0b8FQFLGlLndgJ++AZmNxxMyD/XZ5aSqWc58SzA3UgbjTdDJwv6KYIc+r6om10CgYEA3geQ4XOPkm3/AagGvTRbM88nr4tyeyEzfLdXqSBdUBM+cB0t3l+mh0aMqPd1o8TcrvJ+33Kp3vmM2wq6Rj/jChx0pqQZeBX+/i3fSQUYiCnDeo2CsJ1pix3ju6xKIlssi7Lqf50AUH3TgPfeOEgl0c0skc7Iiw6uBbbN2jMbtd8CgYB8UNkN0DK9Y9GDoMr4gPoPaRtgEb0hMHwOqGV5hnK0DvHkc6px0NzZCCxfcijm/p86NtSRmgu8Gli9EUY3mZRsoH+v2d/E8KM//Fse0mDxs302SRrnXIJq/efqBUKs5XrvePxrgNoH+bko/UuERPm/D2X/9v7OtMx3TC+4+cXiSQKBgQDAbuxKCp93+S/YXqogmF0nhTbPNdwuDbOTN1CZu/xEJ7mo8BFON7acbjABTiC+pSPj2TbPMZE7OSy0uBKESmDb5ZfQyk9svhu4b0ekAO+nLBNJh5aqvnO4aFp10TibmEv+dD48BnY8TSHgGHSYcSeeM+aaJQ+5PirjtvGpWTx+HwKBgD+mqVa627FOJHKJ022L6eH61S466rvxiQqQdOKaLkRLNTsf0frcsZIEoPGXQmAsx79n5ezK0ndPsY2oWDu87teHaElqTp0oMzayuP1ognyFp5CjlUmUgLZ4ijw5ZoAinGVpBxYvHZ/KxRMxMhMYnXPYrx95nNT3GDMGV/4xG2cH - - peerId: 12D3KooWLNu2jz93Bmw5AFjoWUWVqewjMDX9X6LDnD3B5vcDPMtK + signingKey: 460RGvA77dWz7qFYmPqpMzc6Nw5eAXOXZP0fQvcyXj2TmG/z0E5jnTMfpFD7GHIwuFA9+XvqnjuKFteeHaDxSg== + encryptionKey: MIIEowIBAAKCAQEAyL/fnKl6ztxVtXkxdl48HEawDKmJmBxs6rGl+kNx+cb6Jio/GyKz4d1bCW5Ni5glyVg11RqA09wPaJxKMlp/svz+46a9MtZmC4/pFOiSaMkmMOs61apTruJNNDK/9O0j+irCnJFRGactt/AlCKU+9WjwsTtJtmqEkt0uuD0Tn709Itx86nzXhCqNtEKPvo83FaZ60RFpe72KNLcyP7DgR8m7Csa4JWfK1Ig0539rFxM5Co/GGNna3mqShDbIN0Aw8k7yCuDaCx/akd0Yd2BEjBApHtlonu3BYfCAF3bAus9sejogeA+mu52akN7H0YnC1BeftFAzlZ5yJV1gKwsYmwIDAQABAoIBAQCzzPaw0DMIV9wEP9oHVHuuL7m6fZaZQMxkoFwyfHn25zphOHFxEnHemG3TUpHtt4YQggslJSnBl1XNsj3aP6gkXejFaTAH+nNHY8u1SGDprU+hfO4jNPzipBnV6KZ47nTMucO4i4cB3PRbzKC+z5JGJ4l8k8d/tIOtLqGLrliHNlRZ7LRfovCP+ekPrPpxtJBp48GUQFRexXqsytiEYlAjXPUVHh+8b1lmDJXzxzTf2Nhx1lXykrrRYlOOYSz0fufFzsLcJSzPbfnomgjaNGKPCSWfREFp3Ch1P6+G9hClMORL5Vc58I5j3SlacsoWEw3ywyE0Visfn7ojIuqboLHBAoGBAMnbL0TeKaKIkRGdKXFhUzpUrH1mPg7QOLH65GbbtO5DHTwDRjX0I8pc+XT7u/qVhG+h72wBZ3J/egAlvLUOtwuuNhjir5BqS90QhtofsHy7IbzAkMhPpQ/3p2+ZrfTGylzUHLwR/hr9aiP5PizMJQ2JSQU3k8YozVGENnmpnydLAoGBAP6YskbZU6+TPXlconbg2G+D6KSYScu8h1d6mYHjcbCOc5ILVa1DJGr/ufYl2dqPTA63Mj9PJ8Dla4WI9iXwh0cbTI/N+XD27y54sWonuWymX/9i2tlhmnLeLqGq7zQ+eCQMMnhH2rbN/+hEYMwbsTAdu4txbPDMGVoL9K09PXHxAoGAGBuASrZJvKqYwMTHVU4tVXMVYqiaUsSVcNQpAQvOUQJc9HTjpr/wolN2S31hFu1Scs6hPIHya99Dn87h+bG3NMLqnRA9rX60bsNxh41vU4Y54kQRRosUiJKoQZDWELzJIEsI34E6mtiXG5LB1THQXwx9Vw0rLehjlQ+4PdF/O38CgYBjHbs6Dd2gmufx2Xh+Y2afc3EcsxT3tjvSeK5OfOeD3tFrZ/JA88S3yzrwcyfvCJ6JlBSBxSUq2aYUZI+/kXZ43k3eJkgYDGptYxtewnxTqinxWODuhCsG0SzCT7O0WSWYkw8K+J5TULtyBzzP+W/v1YNv9AZ/cFXmUoU89Hx5YQKBgBPx7Dm8s8M/8EQoV0NQwgk0I2W7WCnaNxNaNnIg1MtEsBkI+UkxnAGPUwEDtv5cRmciBO6SdsvUrZh+t41Ui/MLTMJOsQO53HAbng4tjxcAmDM/R/iYyI6gCCYhxUudPTaKDZchV41TrhGaqXliV6CgCRVm2WsKFgJdFNW7QVq3 + types: + - tree + - file + - peerId: 12D3KooWCYAzw5jFx3VNkJ8jn6VFq4WcayT6sZzdBx5fJFeCjXbV address: 127.0.0.1:4432 - signingKey: eFgkHOqqWUE2i3HChsYuER37d8Z5Izd1ENfLmpMsgSSc6lnYW+35sm7b5J7sK1G+xK0OPhtz8uxYkT0f5gJuwA== - encryptionKey: MIIEpAIBAAKCAQEAzc5cRGNf5G25G5Lh1hKEhV3lgxxB5RL3R0bjLhtS6W4/xhMvSaZR2girvzLBK1ydXk95Oc0EUNfCE/QKddUy16ycC4DHaObMjf96cVHhiIfKhLTO5gg2mqisQ39+oTtn85/T1imYMlkHGIt1MvHqXoPQa8guDXB/DCDz+UeCzPBGUiS4ZORJHrdd9QP/edyowUsfvwIayJhd4BUKOhgWvIAHohOTls1Xa16fkpojDy3b1L5pFvQdMw0DFY3m2LtIYVmlw1YyE/vqbhR/DMAkGGGD2nHfSQ/zApGAeYgqNSyAAMwjAaXtXnW/SYPr0IHRAnm4Ojk0qKcUfaTFKSSakQIDAQABAoIBAAksPm6J41dCELMK6+fnsWJkWftrAgDcxIq3vR5r91kSIeOJLV1h/Vnzcvw1neh520W90xBhc+TKiQrsoJ653uc/+UCF/91MFCfsECAG3z9/leYuTN5x1UU1aWAkyZcUF8EDCaUM+4ya7TcJ2DJqF+EYjOyQ4oSU1ATNXzJoHotVwcZ79uPNRTMMTUQ/sZjE3OJGkoPzOoacjmAsg3Xg2M8uCC3HAqf5kO146CX4/x9z8EnKr8XHWm8oRT0mWLR3N2WFIJ6sDuyL7MPy4Sm2xSbqS5pJ3kC/rwuLcR4KlL+HyVvpTPHQlysiwWfKz1YycKNaWfeAVQFQDKfe9fpTK4UCgYEA5rXvM0eGTljFUYg5Eb47LNl/YKcQoPGL9zIrTuyYl0skr364iIXFQHG3cv3G461jP6/eBBs0sMZe47SpNv9zP+hYthaReVLzPqqxrCQF4rJo2oCWb774BnkxWQjbiPLSJi2cc+5ZqMQI8u5XxdqO9oJ4pCCxs5nCasAcLGedrrcCgYEA5F2Rgq5mN75dSzco5MDC594HGQ4mXpj9xCDocvbhrvEm0NY2/BTH23ak11EnSYJNCvI43NX2nmxEkVzl7TbNLBP+u6IxK1XzFXg4ki2IIu1ACzHwbBE95APxZ7n4BRKhFkew96HX4cSWSvMfmrK/Vb3hPJpV8UUjaru6CiN/OPcCgYB4B09bLmsBd82wjV6jjITc4IsUjdZo5UIcaU1+0jjQ/ZcodpUq8e2diYwXl1BSQ3LPP4ASQtU24v2bGfKvWldreEYu9a7Zn/5NLCEjndoyBv/mLeAWYxRGyeaSm7kblrkeg7xR1D9xPgwp1zZzCTI3rcl2GkxZVDWBtFD0CTRQIQKBgQDe2lzMrYp87Z23b+3NRjst8OL2VXOmLyC9y+trfXeBtD3P4Kwp1dGvXpnAsaZoOusaOoS5JWgU88z6GjEbC7avRBf7XW0kQC0HD5oNNLe8ddBg3Gwl2bGPGTX0pmvd728aAf41uk+lN6X/IEEAQ10qvDDYZjhmSbUlTGthx4A4wwKBgQCQYGnHr5fvqlmLga+xkPXMFnJE1D+Ya/fkA/HTGZfLoMiqFv2q8uqque0xb5Kaim7eyQ2SpE/yolaeS8L7o6zMKT6du5QONhKdQN9ccdW/3yUQXzWcjYjAyB+zdYn9vKlMa6VnuXjR5gA8RrnHGJMZAeNLOWzH1B0eJSi/Q8w9Rg== + signingKey: 94Y4rDt00bq4xkrPJ7E9OPULzOBd5mzn0uMTKP5b4JUobSOKGyrnwWxO9UpY7OSzA2Y/5dgIMSFSCvv4p1iwaA== + encryptionKey: MIIEpAIBAAKCAQEAs/jLbBcMpkjqZ8R7ySsE9FkUdVZsJJk4BWI4OHbRg5+RMt74AeoKK+NW81zxw5tzLXvW9AZVccO742xB5mRfyrvZ22YrPedTvQymmyY5RCh9qduk0OOfItlNVyG7zRBgK90TAmkwbg4B1jCFIt3cuttK7A6gUKqy9deNhYZd67a7byJIgGmKcqK4ETbeLw8vJv08Htagn3/7CRjwAQcuLNzWw7G4SiTyIOcLpX14oQl3/v1/gYleFVyqebvo4xftQ/pCzDZoD6/t/HK70zzD+TsCmWK/o6iO42hsARIkuuuufASW9mIGcjKj8v+mftLEqqkSSEwtZTuLATJRG2bwiQIDAQABAoIBAQCC+GKpVZjKBjQ3scBXpGvlmlIOFgd7Ftmy6Uh6ptVP0Tasa6DWW8htKfNkBVaXgC/wgLfsPBPAR64bEfRfQtqHQe+H/7EmSosg/+za6ZUxKbpRe1tU/OEZTkQ/TXhLAkjKgwbLcVtiK+VgR00ME6MHhIDgisBWE/NKf0QpUKBW4Rp/0l3bUYO+b7aAIBT0Q/Noc+kaXbHygYuzTMYCvItGDe0WtvrNE/IQEnjC51i02rpa5GI29T4OVvumKbLjFMlT0EttkTjZNVEicP8RHqSKlE7+lMPT1eH3CEVepV7QKCzgPN9pBudLmzmb7HhSZvwMzzkTTt1WczWshBrKZKHRAoGBAMynv1toSLzznwQzffhwLQzvzxnjhdxNKKbJ7cVG4CNVKRVh9iPVBv+XWgBYInnpC/ByX5HDKleRvo54wXzYoMlxtqz8ZCOFxcWrocehbLAIxtGDlSAOGAgSVMrJDJr28Hc7n0zesIyQzymoWfN7yDxcKLB34hC0qUQVuaY7PjTNAoGBAOEfuQkzdrIcT7hEuX+Jv9SmkBnxSocpUZyF7vCm03Dg8FhGK16WWXwa5ii0R6LL4A31J1A/ydpFTd+kxqaQ0dyrc9QWkwzuyy3JYO2R/J7ejFO5KfuKMojXPMwum69y95vL4ZGfYXmF/vYv7TYaBhoI0oeJA5+w9dX20z1jgkqtAoGBAJRqJky8sNtOdYhPa1BK0XDrTC6DIKVl01A5alRBlPQqoxOdqinMKDoc4akUQVRVnFHwL7x+Y2uEB0Q88FyAoQHVlFuY4WodbhJu6HDkcPSsOLriCLhpYCYiXRl+ecS7xiFBvMG7UR9vOL0GGM2Je+nCD8QB/JCO4527f5m8pt0VAoGAd2Vht5WJ0DDfvvUEBLZD/T5RktC8HC83z3HhJdT0sxs5nTep7MKEtyN1CgWDML48GGr67L7ICXFUOdakXNbV1tk/1y4Z03QaYjA5rgYNGx0hA45iy7uhzZ2J6yiU/VpWJFTfT2JeShtc+6izgEwRDGG9dpCeUWWDHHWJ1zcddQkCgYB//JrVbMtkB+L5OV0UfAFlhGaVoThfCL5QHAwmXq+gsX7dxCu5NGJDWJ6fQ+e+0zQms6nB/BvLXcKWo0rEZJsyiUpWN8X06nsyHN1Nxk7PiPlL12dV9/RGD98kNmFQorYhO/lOWImqy7ZpuNNSc69l1B9Q/G/FLU8itzSp2irSEA== + types: + - tree + - file space: gcTTL: 60 syncPeriod: 11 diff --git a/etc/configs/node3.yml b/etc/configs/node3.yml index 63d8dc79..7ef48e56 100755 --- a/etc/configs/node3.yml +++ b/etc/configs/node3.yml @@ -5,27 +5,36 @@ grpcServer: - 127.0.0.1:4432 tls: false account: - peerId: 12D3KooWLNu2jz93Bmw5AFjoWUWVqewjMDX9X6LDnD3B5vcDPMtK - peerKey: eFgkHOqqWUE2i3HChsYuER37d8Z5Izd1ENfLmpMsgSSc6lnYW+35sm7b5J7sK1G+xK0OPhtz8uxYkT0f5gJuwA== - signingKey: eFgkHOqqWUE2i3HChsYuER37d8Z5Izd1ENfLmpMsgSSc6lnYW+35sm7b5J7sK1G+xK0OPhtz8uxYkT0f5gJuwA== - encryptionKey: MIIEpAIBAAKCAQEAzc5cRGNf5G25G5Lh1hKEhV3lgxxB5RL3R0bjLhtS6W4/xhMvSaZR2girvzLBK1ydXk95Oc0EUNfCE/QKddUy16ycC4DHaObMjf96cVHhiIfKhLTO5gg2mqisQ39+oTtn85/T1imYMlkHGIt1MvHqXoPQa8guDXB/DCDz+UeCzPBGUiS4ZORJHrdd9QP/edyowUsfvwIayJhd4BUKOhgWvIAHohOTls1Xa16fkpojDy3b1L5pFvQdMw0DFY3m2LtIYVmlw1YyE/vqbhR/DMAkGGGD2nHfSQ/zApGAeYgqNSyAAMwjAaXtXnW/SYPr0IHRAnm4Ojk0qKcUfaTFKSSakQIDAQABAoIBAAksPm6J41dCELMK6+fnsWJkWftrAgDcxIq3vR5r91kSIeOJLV1h/Vnzcvw1neh520W90xBhc+TKiQrsoJ653uc/+UCF/91MFCfsECAG3z9/leYuTN5x1UU1aWAkyZcUF8EDCaUM+4ya7TcJ2DJqF+EYjOyQ4oSU1ATNXzJoHotVwcZ79uPNRTMMTUQ/sZjE3OJGkoPzOoacjmAsg3Xg2M8uCC3HAqf5kO146CX4/x9z8EnKr8XHWm8oRT0mWLR3N2WFIJ6sDuyL7MPy4Sm2xSbqS5pJ3kC/rwuLcR4KlL+HyVvpTPHQlysiwWfKz1YycKNaWfeAVQFQDKfe9fpTK4UCgYEA5rXvM0eGTljFUYg5Eb47LNl/YKcQoPGL9zIrTuyYl0skr364iIXFQHG3cv3G461jP6/eBBs0sMZe47SpNv9zP+hYthaReVLzPqqxrCQF4rJo2oCWb774BnkxWQjbiPLSJi2cc+5ZqMQI8u5XxdqO9oJ4pCCxs5nCasAcLGedrrcCgYEA5F2Rgq5mN75dSzco5MDC594HGQ4mXpj9xCDocvbhrvEm0NY2/BTH23ak11EnSYJNCvI43NX2nmxEkVzl7TbNLBP+u6IxK1XzFXg4ki2IIu1ACzHwbBE95APxZ7n4BRKhFkew96HX4cSWSvMfmrK/Vb3hPJpV8UUjaru6CiN/OPcCgYB4B09bLmsBd82wjV6jjITc4IsUjdZo5UIcaU1+0jjQ/ZcodpUq8e2diYwXl1BSQ3LPP4ASQtU24v2bGfKvWldreEYu9a7Zn/5NLCEjndoyBv/mLeAWYxRGyeaSm7kblrkeg7xR1D9xPgwp1zZzCTI3rcl2GkxZVDWBtFD0CTRQIQKBgQDe2lzMrYp87Z23b+3NRjst8OL2VXOmLyC9y+trfXeBtD3P4Kwp1dGvXpnAsaZoOusaOoS5JWgU88z6GjEbC7avRBf7XW0kQC0HD5oNNLe8ddBg3Gwl2bGPGTX0pmvd728aAf41uk+lN6X/IEEAQ10qvDDYZjhmSbUlTGthx4A4wwKBgQCQYGnHr5fvqlmLga+xkPXMFnJE1D+Ya/fkA/HTGZfLoMiqFv2q8uqque0xb5Kaim7eyQ2SpE/yolaeS8L7o6zMKT6du5QONhKdQN9ccdW/3yUQXzWcjYjAyB+zdYn9vKlMa6VnuXjR5gA8RrnHGJMZAeNLOWzH1B0eJSi/Q8w9Rg== + peerId: 12D3KooWCYAzw5jFx3VNkJ8jn6VFq4WcayT6sZzdBx5fJFeCjXbV + peerKey: 94Y4rDt00bq4xkrPJ7E9OPULzOBd5mzn0uMTKP5b4JUobSOKGyrnwWxO9UpY7OSzA2Y/5dgIMSFSCvv4p1iwaA== + signingKey: 94Y4rDt00bq4xkrPJ7E9OPULzOBd5mzn0uMTKP5b4JUobSOKGyrnwWxO9UpY7OSzA2Y/5dgIMSFSCvv4p1iwaA== + encryptionKey: MIIEpAIBAAKCAQEAs/jLbBcMpkjqZ8R7ySsE9FkUdVZsJJk4BWI4OHbRg5+RMt74AeoKK+NW81zxw5tzLXvW9AZVccO742xB5mRfyrvZ22YrPedTvQymmyY5RCh9qduk0OOfItlNVyG7zRBgK90TAmkwbg4B1jCFIt3cuttK7A6gUKqy9deNhYZd67a7byJIgGmKcqK4ETbeLw8vJv08Htagn3/7CRjwAQcuLNzWw7G4SiTyIOcLpX14oQl3/v1/gYleFVyqebvo4xftQ/pCzDZoD6/t/HK70zzD+TsCmWK/o6iO42hsARIkuuuufASW9mIGcjKj8v+mftLEqqkSSEwtZTuLATJRG2bwiQIDAQABAoIBAQCC+GKpVZjKBjQ3scBXpGvlmlIOFgd7Ftmy6Uh6ptVP0Tasa6DWW8htKfNkBVaXgC/wgLfsPBPAR64bEfRfQtqHQe+H/7EmSosg/+za6ZUxKbpRe1tU/OEZTkQ/TXhLAkjKgwbLcVtiK+VgR00ME6MHhIDgisBWE/NKf0QpUKBW4Rp/0l3bUYO+b7aAIBT0Q/Noc+kaXbHygYuzTMYCvItGDe0WtvrNE/IQEnjC51i02rpa5GI29T4OVvumKbLjFMlT0EttkTjZNVEicP8RHqSKlE7+lMPT1eH3CEVepV7QKCzgPN9pBudLmzmb7HhSZvwMzzkTTt1WczWshBrKZKHRAoGBAMynv1toSLzznwQzffhwLQzvzxnjhdxNKKbJ7cVG4CNVKRVh9iPVBv+XWgBYInnpC/ByX5HDKleRvo54wXzYoMlxtqz8ZCOFxcWrocehbLAIxtGDlSAOGAgSVMrJDJr28Hc7n0zesIyQzymoWfN7yDxcKLB34hC0qUQVuaY7PjTNAoGBAOEfuQkzdrIcT7hEuX+Jv9SmkBnxSocpUZyF7vCm03Dg8FhGK16WWXwa5ii0R6LL4A31J1A/ydpFTd+kxqaQ0dyrc9QWkwzuyy3JYO2R/J7ejFO5KfuKMojXPMwum69y95vL4ZGfYXmF/vYv7TYaBhoI0oeJA5+w9dX20z1jgkqtAoGBAJRqJky8sNtOdYhPa1BK0XDrTC6DIKVl01A5alRBlPQqoxOdqinMKDoc4akUQVRVnFHwL7x+Y2uEB0Q88FyAoQHVlFuY4WodbhJu6HDkcPSsOLriCLhpYCYiXRl+ecS7xiFBvMG7UR9vOL0GGM2Je+nCD8QB/JCO4527f5m8pt0VAoGAd2Vht5WJ0DDfvvUEBLZD/T5RktC8HC83z3HhJdT0sxs5nTep7MKEtyN1CgWDML48GGr67L7ICXFUOdakXNbV1tk/1y4Z03QaYjA5rgYNGx0hA45iy7uhzZ2J6yiU/VpWJFTfT2JeShtc+6izgEwRDGG9dpCeUWWDHHWJ1zcddQkCgYB//JrVbMtkB+L5OV0UfAFlhGaVoThfCL5QHAwmXq+gsX7dxCu5NGJDWJ6fQ+e+0zQms6nB/BvLXcKWo0rEZJsyiUpWN8X06nsyHN1Nxk7PiPlL12dV9/RGD98kNmFQorYhO/lOWImqy7ZpuNNSc69l1B9Q/G/FLU8itzSp2irSEA== apiServer: listenAddrs: - 127.0.0.1:8082 tls: false nodes: - - peerId: 12D3KooWCi7waUGMExFaEMgtKmTaanYaPGNhWmEx2nf7jFEXgQab + - peerId: 12D3KooWS7Z835JwmJ5pGHJxpEsJ3vab5M4RjJsWHXmDD5895DT9 address: 127.0.0.1:4430 - signingKey: QQwIKP+YwFY9WzeluVGFwlLj3EJ36RNtGH7QY4rJsAgq+X1I47HaHoFUg2UNZIMtq8mggHYZA4a1B/xntR1RcA== - encryptionKey: MIIEpQIBAAKCAQEAxn9H+w/uFvOd8rW5KCpCvisG6JmDQa1pp1gPdWhdTpqj3yI/3pYK5kgnZhpUF83bQ6zKsNSVcxRqRvW8ZBGA179fHwTwe/KkMuAhgoOCMNG0+EKmRYQJdul2MFvgOniVJxBNaywoCWA0HI24sk4Dp7pj2Dn9yhcj49J+j12STlY2/+oAmhA8a7nxZ2XOMZyZIR9jQ+9MgQdTEa65LSTMTwQ7/A0g3yY+t8+BxhYT5hEdFKIgAV3iapbpP8kT/EvVHZYFz0RUBa2NC1xJAjfFCliGBqD9k7kUNOmP1al4EXheueZDtg1WvwY3PRRcDuSvxLCh1TAuHMMOd7XbR9CrvQIDAQABAoIBAQCiui/pe8rFWBzRn/bWHacvvZhhUZCQZDjsbr3lk5SC3zWetLZFpR30YYyjIMx141Zw6ZQVWYHXoRHrcINsSgklVgcGKAd6pZXE+4edNnCh0xmYOROUg8U6jfRNetSdOsOUDcJaLQ35ebve+LREwL4wYBaAajJL3aKXn7YPlDdgLc02OeQ7t3hIGX/nxYQy2X6+GGsNZvZvmiEoO5cCKPo3lvHIA8nnjB/0J9Cd8ffqiTNrw0NO/ErHxPxTu4II+3VtJ3xWZKlVAOI7Q2uccexdqkJjFcJHmqRWLf8zQzxZxo1TxgDZmZcQHG4sQt/XBL6A2xoisi0kwo5yz4f5WflBAoGBAPKtjMdC92cZLtHlBYvqrQqxJdCpQyidVEa60o+IH2q7VDepLW9QAx0gIwZIAKk/kcTHCtNu1pxVaX7YhVmdtRj8cr1j7g+CWtYaAeMrlpDhUghBEindtVV0gOEkIMbn+Fpzp6/km8LCjqzD2SlVex4aJV8qCRi5WpK3W0Z9RHTtAoGBANFk13fgLry6es7roQvig4Bkg8Qtpy5HYvAyTPk/2q6FfNOZSSYw5y65FzJUZyTEWTn8EjBA+bngmAc6xEA4gr1diYduEm6bab3unXCGzBVWqih+cTAh9lPgmAAHJD3i89SFDE9s+Gox/1n7vVz/k5P5ac+1XyqWXCHI7j1S44gRAoGBANMIZtbU/k4SkSuHzIX64tXcbPUCbFuCTUpgpkCY8DEhjEAHB3K4Eq0eSDbrIGAN3tZO/LQWu9whTmc3JOdkhJqg1aqqntev1QxAe4mwWvPMbUiuRXxQx6LzeCvQ/gvap5cI4jbMR0NbazUD7vHJ2xG3TO5voI92iDPz7RTkVEaVAoGACHkoLvWnboOtTIpEbhKwd5WZr2qZhUnmOwoOC1gGJWHJd1aQmzcHY+Chi6vWsKoxYiNNKR63/EmWXVSHdIHU6IzMb+qIXGl1kfYB8PfDcmmbYSAcvHHjYemIvReM4+Q3MbZglSY3tzRmvOFu/EBrXGWPXpRcUYDcIZHb8idUhcECgYEArvEvxIFHIIX3bhMgXhMvM9TJ5/t/e2YHm2Qz4COeU6Y19CklAjvZ6CpZ9lGUWVbGVflI+ivayAT540HCT1kwmK8WDYrggb64Ksir0TZsv7aKjp5pfZDc9IakisBEsNkjSkOF7xbUGQe5CSiK5khFQx5X8jZHqsczlBntJuquQgw= - - peerId: 12D3KooWG2nD7XFggVFw48xk8JyHwn8iCZ9W73gmzJTkgfVjAxpb + signingKey: w+63sD3k2rBwrtKTcV02B8SdKYrI7rzLpXHtNYwZU7ryIj/g7tmvJFXN6TZjTWX4al5UAkRefJQfDXfXFCCPHA== + encryptionKey: MIIEpAIBAAKCAQEAtw1tn95/mQ2cpYgOKxaRwgZITgsrmZQIyH+bYFaUYUWoUp/AxAdPrh5cLehMUNXH8ZoyHkhV3bIMWpHoUyG+QJzz7etktAVz6MtEl3Wo/jAgAEDvXXgFMku2hnh6coWyhzyXR190ZHgGazJ0K1OtugsIFXwFro93j0+8iPuifsWkH6RaAhvZJUWaQGGmNQKSZnbdFokGmo5FM0z0eOI/sZGhCtxuWbpZz0hhvW3sXEWEyzq8WwTFLGoppIETnhjzcSJDO+pq0b934WuMTGazUH0sPc/AnoZJp00237Ar8g+h10CVxQ5SsTba7VYDCr7/zeHS+vvUYNgB4NO0lylaTQIDAQABAoIBADhUKoLCjhNEDAsoFewOcuX41vElINKOqjFAi0iW++v+6nAadtAby9oxv33k+O77Ch7/qyKEcd/ZtVF9irdiL9BkO+/fuspmzyc4va+55jnqBz7svHvPvhGfGNjCZDOvjqNs8sRkzEVKZfdAvFzE0DXqxR8PXhQ8U7dG+yZQAM3vcE/ib/14OxXgANrPwOKO04Lhff2xoXuuqrx9XAG+PbLlxi0gYGK55E1whgBldPC3nKA38hh1QDt+uh8AVdZ/Y0ehW7t2CG8zPNNTO7TjrZHwMeFgvVODN+0X1W9e7nIuDGVJ74FzvC5PZwBURJ/tjHSUCR0Pf9t87yaQqEQT/sECgYEA44Ve23Fnn97kNqpYzJJAq3+1Cg72cEg8gG9RA+AtOcMUO9EspWxiu/MPXGbaP/R/5L9UTikv7oN7an4gsO4FN9cFH/j4SY/fI6twi55DwpOFbgjLf6lT0tzEnHymPXjGCCHdc3BRIsjd3ehmQcwBZ/pPl8CggDxj24/xlqt7kbECgYEAzfceXEEpGmOZ1Hno3Xck/ZBcl12KjLVOK8ACe890BjWIPDMXaYfGJJpX0terR7BcqrLrq0komPUinoeelpIAitTXQ+zr6ULYXpZgxSTOz7aV7OAsudowp+m5z594ZagIgs3lKVILeclAqaYB4eq9/pHzHazS0YIwWwce753CfV0CgYEAzJ89YYTLmoe+nb90n3+Fc/gmHQa58t+0shnrNd4fLozZHLcSPTCOV9TQ4tyJuu0tPNAqhSUbu5o6m9sVkapvvPm/3TJwMtCW8aCVVqwe6tb8MKruQkFKZyEwHkEoza5aBCRY4yKHhg47JAGIPfK47Qe9H5EZiFtHv8bkkwpk1vECgYBuFJy6a+0e+IrYIAwQicRQbV6/W7RYPfK4uVfaemclhmj428mwkmuZVpCH1NLrbtwoM5Z3ppM3JRVKq2tcSE5X5SfkWvU/Z4WjEDZKR8DtDUYWIz5kWrRUmjvANxgvJN7folHPgtU1UxXnVh19dGv1amYIvzyx0yYrEKQ9JxEy1QKBgQC8zAG011S0HopmpBFizKanlmKPM9BHKk9GCl8dEQltxr+KA6734YwMy63fxaRBje0WUJJPMwOoxNUWfvJ6cRTi4BpEbOhy3ZfPCpVoVX71QPMuOqAvUbF/AQrv7tLCSs1WSA98k8DVeIITHAI/ITzCxuRxPyzU7agi0D9EBLoaPQ== + types: + - tree + - file + - peerId: 12D3KooWKkWv85fkYiCnvKVsVoCu9VwFupNejVBA2bFGBjic6gHP address: 127.0.0.1:4431 - signingKey: Hdpa1ee8nBVeIxYVcWjTSaVAfqvkBcqfhWRjlKi9fQ9cVEY6sy+MxMOa4CRQgM3eJCJhaLw2Hvux4rqMUJVtDA== - encryptionKey: MIIEowIBAAKCAQEAqJI1jTWuzef1hEdbE6Xth1GFXkJbLvn1LWmtyErrrQYtJd6zOsdncf522tcpxRs6LWANNe5HHzuP4VYiYnGe0CuBlMbnWLvH/vEh9Em0Bt7P3MrQTOFt/ESPN5AWaE3jeYc4M9WvZvLVpxCqJYE0xu8AkXi/5SqO3dfXKMyQ/kJoAn0FkAe44l3A7B/otqiYKp5oB+4/Fh1R0sFo3djSCS08KW9mbCQffQa0BA56f9cKF+/tVFqoW9YximwsVvecM8lr92NN3/kvO3a4xLnTZJNYBnaULsDbNS+Mdf0V+mkmcigaFumDHI6Z+Ca/y/tGGlTfExC4mRLOXgAnNIcXAwIDAQABAoIBAGf9UjXbcQuq1aWVk1TKnn5Exv5/9tpC7oHmWINf3IVvcviSqoRPMLx82vtjkmv6wOfvAhdL9+oHh1neFfYe23bV7+lEzsDJjrXyMR0PPpSibR5qqxdSVdQywxrmszwDGJoG1Z/8aWkb0rtuJ1hdnZ4/IF2dXNvVZi7qkNulXqjKc5pU16S2QPIjZ5YDatsl6Z7TZ48yyTxlmJKh50qmLO7S4+0jbVyDFyX8aAy8R/yDuZpZ1+aUHJkUqfvUpzngS2R61M/iAeGkNDP9mg59CwhJsOLsWSw5rA2MTwfmRIZjczG4WCfkhBhzQWztN8ded09xLySY/gmMYsKwpX9zwikCgYEAwlzJ0kC3ATNOQPhIwaVDY4eI8SRYTZIgp+aek/z/Jek+kf6/VY6eVWimEEjyMVGLTzjyrUOQyhxkJ2QqUNVJYongj/3yF8WE2+d+G50QA3J0K0b8FQFLGlLndgJ++AZmNxxMyD/XZ5aSqWc58SzA3UgbjTdDJwv6KYIc+r6om10CgYEA3geQ4XOPkm3/AagGvTRbM88nr4tyeyEzfLdXqSBdUBM+cB0t3l+mh0aMqPd1o8TcrvJ+33Kp3vmM2wq6Rj/jChx0pqQZeBX+/i3fSQUYiCnDeo2CsJ1pix3ju6xKIlssi7Lqf50AUH3TgPfeOEgl0c0skc7Iiw6uBbbN2jMbtd8CgYB8UNkN0DK9Y9GDoMr4gPoPaRtgEb0hMHwOqGV5hnK0DvHkc6px0NzZCCxfcijm/p86NtSRmgu8Gli9EUY3mZRsoH+v2d/E8KM//Fse0mDxs302SRrnXIJq/efqBUKs5XrvePxrgNoH+bko/UuERPm/D2X/9v7OtMx3TC+4+cXiSQKBgQDAbuxKCp93+S/YXqogmF0nhTbPNdwuDbOTN1CZu/xEJ7mo8BFON7acbjABTiC+pSPj2TbPMZE7OSy0uBKESmDb5ZfQyk9svhu4b0ekAO+nLBNJh5aqvnO4aFp10TibmEv+dD48BnY8TSHgGHSYcSeeM+aaJQ+5PirjtvGpWTx+HwKBgD+mqVa627FOJHKJ022L6eH61S466rvxiQqQdOKaLkRLNTsf0frcsZIEoPGXQmAsx79n5ezK0ndPsY2oWDu87teHaElqTp0oMzayuP1ognyFp5CjlUmUgLZ4ijw5ZoAinGVpBxYvHZ/KxRMxMhMYnXPYrx95nNT3GDMGV/4xG2cH - - peerId: 12D3KooWLNu2jz93Bmw5AFjoWUWVqewjMDX9X6LDnD3B5vcDPMtK + signingKey: 460RGvA77dWz7qFYmPqpMzc6Nw5eAXOXZP0fQvcyXj2TmG/z0E5jnTMfpFD7GHIwuFA9+XvqnjuKFteeHaDxSg== + encryptionKey: MIIEowIBAAKCAQEAyL/fnKl6ztxVtXkxdl48HEawDKmJmBxs6rGl+kNx+cb6Jio/GyKz4d1bCW5Ni5glyVg11RqA09wPaJxKMlp/svz+46a9MtZmC4/pFOiSaMkmMOs61apTruJNNDK/9O0j+irCnJFRGactt/AlCKU+9WjwsTtJtmqEkt0uuD0Tn709Itx86nzXhCqNtEKPvo83FaZ60RFpe72KNLcyP7DgR8m7Csa4JWfK1Ig0539rFxM5Co/GGNna3mqShDbIN0Aw8k7yCuDaCx/akd0Yd2BEjBApHtlonu3BYfCAF3bAus9sejogeA+mu52akN7H0YnC1BeftFAzlZ5yJV1gKwsYmwIDAQABAoIBAQCzzPaw0DMIV9wEP9oHVHuuL7m6fZaZQMxkoFwyfHn25zphOHFxEnHemG3TUpHtt4YQggslJSnBl1XNsj3aP6gkXejFaTAH+nNHY8u1SGDprU+hfO4jNPzipBnV6KZ47nTMucO4i4cB3PRbzKC+z5JGJ4l8k8d/tIOtLqGLrliHNlRZ7LRfovCP+ekPrPpxtJBp48GUQFRexXqsytiEYlAjXPUVHh+8b1lmDJXzxzTf2Nhx1lXykrrRYlOOYSz0fufFzsLcJSzPbfnomgjaNGKPCSWfREFp3Ch1P6+G9hClMORL5Vc58I5j3SlacsoWEw3ywyE0Visfn7ojIuqboLHBAoGBAMnbL0TeKaKIkRGdKXFhUzpUrH1mPg7QOLH65GbbtO5DHTwDRjX0I8pc+XT7u/qVhG+h72wBZ3J/egAlvLUOtwuuNhjir5BqS90QhtofsHy7IbzAkMhPpQ/3p2+ZrfTGylzUHLwR/hr9aiP5PizMJQ2JSQU3k8YozVGENnmpnydLAoGBAP6YskbZU6+TPXlconbg2G+D6KSYScu8h1d6mYHjcbCOc5ILVa1DJGr/ufYl2dqPTA63Mj9PJ8Dla4WI9iXwh0cbTI/N+XD27y54sWonuWymX/9i2tlhmnLeLqGq7zQ+eCQMMnhH2rbN/+hEYMwbsTAdu4txbPDMGVoL9K09PXHxAoGAGBuASrZJvKqYwMTHVU4tVXMVYqiaUsSVcNQpAQvOUQJc9HTjpr/wolN2S31hFu1Scs6hPIHya99Dn87h+bG3NMLqnRA9rX60bsNxh41vU4Y54kQRRosUiJKoQZDWELzJIEsI34E6mtiXG5LB1THQXwx9Vw0rLehjlQ+4PdF/O38CgYBjHbs6Dd2gmufx2Xh+Y2afc3EcsxT3tjvSeK5OfOeD3tFrZ/JA88S3yzrwcyfvCJ6JlBSBxSUq2aYUZI+/kXZ43k3eJkgYDGptYxtewnxTqinxWODuhCsG0SzCT7O0WSWYkw8K+J5TULtyBzzP+W/v1YNv9AZ/cFXmUoU89Hx5YQKBgBPx7Dm8s8M/8EQoV0NQwgk0I2W7WCnaNxNaNnIg1MtEsBkI+UkxnAGPUwEDtv5cRmciBO6SdsvUrZh+t41Ui/MLTMJOsQO53HAbng4tjxcAmDM/R/iYyI6gCCYhxUudPTaKDZchV41TrhGaqXliV6CgCRVm2WsKFgJdFNW7QVq3 + types: + - tree + - file + - peerId: 12D3KooWCYAzw5jFx3VNkJ8jn6VFq4WcayT6sZzdBx5fJFeCjXbV address: 127.0.0.1:4432 - signingKey: eFgkHOqqWUE2i3HChsYuER37d8Z5Izd1ENfLmpMsgSSc6lnYW+35sm7b5J7sK1G+xK0OPhtz8uxYkT0f5gJuwA== - encryptionKey: MIIEpAIBAAKCAQEAzc5cRGNf5G25G5Lh1hKEhV3lgxxB5RL3R0bjLhtS6W4/xhMvSaZR2girvzLBK1ydXk95Oc0EUNfCE/QKddUy16ycC4DHaObMjf96cVHhiIfKhLTO5gg2mqisQ39+oTtn85/T1imYMlkHGIt1MvHqXoPQa8guDXB/DCDz+UeCzPBGUiS4ZORJHrdd9QP/edyowUsfvwIayJhd4BUKOhgWvIAHohOTls1Xa16fkpojDy3b1L5pFvQdMw0DFY3m2LtIYVmlw1YyE/vqbhR/DMAkGGGD2nHfSQ/zApGAeYgqNSyAAMwjAaXtXnW/SYPr0IHRAnm4Ojk0qKcUfaTFKSSakQIDAQABAoIBAAksPm6J41dCELMK6+fnsWJkWftrAgDcxIq3vR5r91kSIeOJLV1h/Vnzcvw1neh520W90xBhc+TKiQrsoJ653uc/+UCF/91MFCfsECAG3z9/leYuTN5x1UU1aWAkyZcUF8EDCaUM+4ya7TcJ2DJqF+EYjOyQ4oSU1ATNXzJoHotVwcZ79uPNRTMMTUQ/sZjE3OJGkoPzOoacjmAsg3Xg2M8uCC3HAqf5kO146CX4/x9z8EnKr8XHWm8oRT0mWLR3N2WFIJ6sDuyL7MPy4Sm2xSbqS5pJ3kC/rwuLcR4KlL+HyVvpTPHQlysiwWfKz1YycKNaWfeAVQFQDKfe9fpTK4UCgYEA5rXvM0eGTljFUYg5Eb47LNl/YKcQoPGL9zIrTuyYl0skr364iIXFQHG3cv3G461jP6/eBBs0sMZe47SpNv9zP+hYthaReVLzPqqxrCQF4rJo2oCWb774BnkxWQjbiPLSJi2cc+5ZqMQI8u5XxdqO9oJ4pCCxs5nCasAcLGedrrcCgYEA5F2Rgq5mN75dSzco5MDC594HGQ4mXpj9xCDocvbhrvEm0NY2/BTH23ak11EnSYJNCvI43NX2nmxEkVzl7TbNLBP+u6IxK1XzFXg4ki2IIu1ACzHwbBE95APxZ7n4BRKhFkew96HX4cSWSvMfmrK/Vb3hPJpV8UUjaru6CiN/OPcCgYB4B09bLmsBd82wjV6jjITc4IsUjdZo5UIcaU1+0jjQ/ZcodpUq8e2diYwXl1BSQ3LPP4ASQtU24v2bGfKvWldreEYu9a7Zn/5NLCEjndoyBv/mLeAWYxRGyeaSm7kblrkeg7xR1D9xPgwp1zZzCTI3rcl2GkxZVDWBtFD0CTRQIQKBgQDe2lzMrYp87Z23b+3NRjst8OL2VXOmLyC9y+trfXeBtD3P4Kwp1dGvXpnAsaZoOusaOoS5JWgU88z6GjEbC7avRBf7XW0kQC0HD5oNNLe8ddBg3Gwl2bGPGTX0pmvd728aAf41uk+lN6X/IEEAQ10qvDDYZjhmSbUlTGthx4A4wwKBgQCQYGnHr5fvqlmLga+xkPXMFnJE1D+Ya/fkA/HTGZfLoMiqFv2q8uqque0xb5Kaim7eyQ2SpE/yolaeS8L7o6zMKT6du5QONhKdQN9ccdW/3yUQXzWcjYjAyB+zdYn9vKlMa6VnuXjR5gA8RrnHGJMZAeNLOWzH1B0eJSi/Q8w9Rg== + signingKey: 94Y4rDt00bq4xkrPJ7E9OPULzOBd5mzn0uMTKP5b4JUobSOKGyrnwWxO9UpY7OSzA2Y/5dgIMSFSCvv4p1iwaA== + encryptionKey: MIIEpAIBAAKCAQEAs/jLbBcMpkjqZ8R7ySsE9FkUdVZsJJk4BWI4OHbRg5+RMt74AeoKK+NW81zxw5tzLXvW9AZVccO742xB5mRfyrvZ22YrPedTvQymmyY5RCh9qduk0OOfItlNVyG7zRBgK90TAmkwbg4B1jCFIt3cuttK7A6gUKqy9deNhYZd67a7byJIgGmKcqK4ETbeLw8vJv08Htagn3/7CRjwAQcuLNzWw7G4SiTyIOcLpX14oQl3/v1/gYleFVyqebvo4xftQ/pCzDZoD6/t/HK70zzD+TsCmWK/o6iO42hsARIkuuuufASW9mIGcjKj8v+mftLEqqkSSEwtZTuLATJRG2bwiQIDAQABAoIBAQCC+GKpVZjKBjQ3scBXpGvlmlIOFgd7Ftmy6Uh6ptVP0Tasa6DWW8htKfNkBVaXgC/wgLfsPBPAR64bEfRfQtqHQe+H/7EmSosg/+za6ZUxKbpRe1tU/OEZTkQ/TXhLAkjKgwbLcVtiK+VgR00ME6MHhIDgisBWE/NKf0QpUKBW4Rp/0l3bUYO+b7aAIBT0Q/Noc+kaXbHygYuzTMYCvItGDe0WtvrNE/IQEnjC51i02rpa5GI29T4OVvumKbLjFMlT0EttkTjZNVEicP8RHqSKlE7+lMPT1eH3CEVepV7QKCzgPN9pBudLmzmb7HhSZvwMzzkTTt1WczWshBrKZKHRAoGBAMynv1toSLzznwQzffhwLQzvzxnjhdxNKKbJ7cVG4CNVKRVh9iPVBv+XWgBYInnpC/ByX5HDKleRvo54wXzYoMlxtqz8ZCOFxcWrocehbLAIxtGDlSAOGAgSVMrJDJr28Hc7n0zesIyQzymoWfN7yDxcKLB34hC0qUQVuaY7PjTNAoGBAOEfuQkzdrIcT7hEuX+Jv9SmkBnxSocpUZyF7vCm03Dg8FhGK16WWXwa5ii0R6LL4A31J1A/ydpFTd+kxqaQ0dyrc9QWkwzuyy3JYO2R/J7ejFO5KfuKMojXPMwum69y95vL4ZGfYXmF/vYv7TYaBhoI0oeJA5+w9dX20z1jgkqtAoGBAJRqJky8sNtOdYhPa1BK0XDrTC6DIKVl01A5alRBlPQqoxOdqinMKDoc4akUQVRVnFHwL7x+Y2uEB0Q88FyAoQHVlFuY4WodbhJu6HDkcPSsOLriCLhpYCYiXRl+ecS7xiFBvMG7UR9vOL0GGM2Je+nCD8QB/JCO4527f5m8pt0VAoGAd2Vht5WJ0DDfvvUEBLZD/T5RktC8HC83z3HhJdT0sxs5nTep7MKEtyN1CgWDML48GGr67L7ICXFUOdakXNbV1tk/1y4Z03QaYjA5rgYNGx0hA45iy7uhzZ2J6yiU/VpWJFTfT2JeShtc+6izgEwRDGG9dpCeUWWDHHWJ1zcddQkCgYB//JrVbMtkB+L5OV0UfAFlhGaVoThfCL5QHAwmXq+gsX7dxCu5NGJDWJ6fQ+e+0zQms6nB/BvLXcKWo0rEZJsyiUpWN8X06nsyHN1Nxk7PiPlL12dV9/RGD98kNmFQorYhO/lOWImqy7ZpuNNSc69l1B9Q/G/FLU8itzSp2irSEA== + types: + - tree + - file space: gcTTL: 60 syncPeriod: 11 diff --git a/filenode/go.mod b/filenode/go.mod index 3fe16ed8..c12ce714 100644 --- a/filenode/go.mod +++ b/filenode/go.mod @@ -16,6 +16,7 @@ require ( require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cheggaaa/mb/v3 v3.0.0-20221122160120-e9034545510c // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.2 // indirect diff --git a/filenode/go.sum b/filenode/go.sum index a7f0ad57..878c8d00 100644 --- a/filenode/go.sum +++ b/filenode/go.sum @@ -50,6 +50,8 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/mb/v3 v3.0.0-20221122160120-e9034545510c h1:+bD75daSbsxyTzkKpNplC4xls+7/tGwty+zruzOnOmk= +github.com/cheggaaa/mb/v3 v3.0.0-20221122160120-e9034545510c/go.mod h1:zCt2QeYukhd/g0bIdNqF+b/kKz1hnLFNDkP49qN5kqI= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= diff --git a/node/filepogreb/filepogreb.go b/node/filepogreb/filepogreb.go index 56996985..f5f6b09e 100644 --- a/node/filepogreb/filepogreb.go +++ b/node/filepogreb/filepogreb.go @@ -4,14 +4,18 @@ import ( "context" "github.com/akrylysov/pogreb" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonfile/fileblockstore" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" blocks "github.com/ipfs/go-block-format" "github.com/ipfs/go-cid" + "go.uber.org/zap" ) const CName = fileblockstore.CName +var log = logger.NewNamed(CName) + func New() Store { return &store{} } @@ -75,6 +79,7 @@ func (s *store) GetMany(ctx context.Context, ks []cid.Cid) <-chan blocks.Block { func (s *store) Add(ctx context.Context, bs []blocks.Block) error { for _, b := range bs { + log.Debug("put cid", zap.String("cid", b.Cid().String())) if err := s.db.Put(b.Cid().Bytes(), b.RawData()); err != nil { return err } diff --git a/playground/init.sh b/playground/init.sh index 8937deec..677dbe38 100755 --- a/playground/init.sh +++ b/playground/init.sh @@ -1,5 +1,4 @@ #!/bin/bash -PATH=/bin:/sbin:/usr/bin:/usr/sbin:/Users/mikhailrakhmanov/go/go1.19.2/bin export GOPRIVATE=github.com/anytypeio diff --git a/util/cmd/debug/commands/client/service.go b/util/cmd/debug/commands/client/service.go index e5817b0e..4eb321e7 100644 --- a/util/cmd/debug/commands/client/service.go +++ b/util/cmd/debug/commands/client/service.go @@ -24,6 +24,9 @@ type Service interface { AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) AllSpaces(ctx context.Context, ip string, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) LoadSpace(ctx context.Context, ip string, request *apiproto.LoadSpaceRequest) (res *apiproto.LoadSpaceResponse, err error) + PutFile(ctx context.Context, ip string, request *apiproto.PutFileRequest) (resp *apiproto.PutFileResponse, err error) + GetFile(ctx context.Context, ip string, request *apiproto.GetFileRequest) (resp *apiproto.GetFileResponse, err error) + DeleteFile(ctx context.Context, ip string, request *apiproto.DeleteFileRequest) (resp *apiproto.DeleteFileResponse, err error) } type service struct { @@ -122,3 +125,27 @@ func (s *service) LoadSpace(ctx context.Context, ip string, request *apiproto.Lo } return cl.LoadSpace(ctx, request) } + +func (s *service) PutFile(ctx context.Context, ip string, request *apiproto.PutFileRequest) (resp *apiproto.PutFileResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.PutFile(ctx, request) +} + +func (s *service) GetFile(ctx context.Context, ip string, request *apiproto.GetFileRequest) (resp *apiproto.GetFileResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.GetFile(ctx, request) +} + +func (s *service) DeleteFile(ctx context.Context, ip string, request *apiproto.DeleteFileRequest) (resp *apiproto.DeleteFileResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.DeleteFile(ctx, request) +} diff --git a/util/cmd/debug/commands/clientcmds.go b/util/cmd/debug/commands/clientcmds.go index 88791ea4..e1315a9a 100644 --- a/util/cmd/debug/commands/clientcmds.go +++ b/util/cmd/debug/commands/clientcmds.go @@ -290,4 +290,58 @@ func (s *service) registerClientCommands() { }, } s.clientCommands = append(s.clientCommands, cmdAllSpaces) + + cmdPutFile := &cobra.Command{ + Use: "put-file", + Short: "put new file by path", + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + addr, ok := s.peers[cli] + if !ok { + fmt.Println("no such client") + return + } + path, _ := cmd.Flags().GetString("path") + spaceId, _ := cmd.Flags().GetString("spaceId") + resp, err := s.client.PutFile(context.Background(), addr, &clientproto.PutFileRequest{ + Path: path, + SpaceId: spaceId, + }) + if err != nil { + fmt.Println("error:", err) + return + } + fmt.Println("hash:", resp.Hash) + }, + } + cmdPutFile.Flags().String("path", "", "path to file") + cmdPutFile.Flags().String("spaceId", "", "spaceId") + s.clientCommands = append(s.clientCommands, cmdPutFile) + + cmdGetFile := &cobra.Command{ + Use: "get-file", + Short: "get file by hash and save", + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + addr, ok := s.peers[cli] + if !ok { + fmt.Println("no such client") + return + } + hash, _ := cmd.Flags().GetString("hash") + path, _ := cmd.Flags().GetString("path") + resp, err := s.client.GetFile(context.Background(), addr, &clientproto.GetFileRequest{ + Hash: hash, + Path: path, + }) + if err != nil { + fmt.Println("error:", err) + return + } + fmt.Println("path:", resp.Path) + }, + } + cmdGetFile.Flags().String("path", "", "path to file") + cmdGetFile.Flags().String("hash", "", "CID") + s.clientCommands = append(s.clientCommands, cmdGetFile) } diff --git a/util/cmd/nodesgen/gen.go b/util/cmd/nodesgen/gen.go index 9c962b21..ec6184a7 100644 --- a/util/cmd/nodesgen/gen.go +++ b/util/cmd/nodesgen/gen.go @@ -60,6 +60,7 @@ func main() { Address: cfg.GrpcServer.ListenAddrs[0], SigningKey: cfg.Account.SigningKey, EncryptionKey: cfg.Account.EncryptionKey, + Types: []config.NodeType{config.NodeTypeTree, config.NodeTypeFile}, } nodes = append(nodes, node) } diff --git a/util/debug.json b/util/debug.json new file mode 100644 index 00000000..98832ab9 --- /dev/null +++ b/util/debug.json @@ -0,0 +1 @@ +{"level":"debug","ts":"2022-12-15T15:11:29.023+0300","logger":"app","caller":"app/app.go:178","msg":"all components started"}