From b3b50aa8ab85d5b8d6da812e7aacb180d8721845 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Wed, 30 Nov 2022 22:09:18 +0100 Subject: [PATCH 01/32] Abstract drpc server and add client drpc api --- Makefile | 1 + client/Makefile | 6 + client/api/apiproto/api.pb.go | 3178 ++++++++++++++++++++++++++ client/api/apiproto/api_drpc.pb.go | 393 ++++ client/api/apiproto/protos/api.proto | 85 + common/Makefile | 2 +- common/net/rpc/server/baseserver.go | 105 + common/net/rpc/server/drpcserver.go | 96 +- 8 files changed, 3780 insertions(+), 86 deletions(-) create mode 100644 client/Makefile create mode 100644 client/api/apiproto/api.pb.go create mode 100644 client/api/apiproto/api_drpc.pb.go create mode 100644 client/api/apiproto/protos/api.proto create mode 100644 common/net/rpc/server/baseserver.go diff --git a/Makefile b/Makefile index 75f43ddc..f7e93f9d 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,7 @@ export PATH=$(GOPATH)/bin:$(shell echo $$PATH) proto: $(MAKE) -C common proto $(MAKE) -C consensus proto + $(MAKE) -C client proto build: $(MAKE) -C node build diff --git a/client/Makefile b/client/Makefile new file mode 100644 index 00000000..0340fa3b --- /dev/null +++ b/client/Makefile @@ -0,0 +1,6 @@ +.PHONY: proto +export GOPRIVATE=github.com/anytypeio + +proto: + @$(eval GOGO_START := GOGO_NO_UNDERSCORE=1 GOGO_EXPORT_ONEOF_INTERFACE=1) + $(GOGO_START) protoc --gogofaster_out=:. --go-drpc_out=protolib=github.com/gogo/protobuf:. api/apiproto/protos/*.proto \ No newline at end of file diff --git a/client/api/apiproto/api.pb.go b/client/api/apiproto/api.pb.go new file mode 100644 index 00000000..59eaeb5d --- /dev/null +++ b/client/api/apiproto/api.pb.go @@ -0,0 +1,3178 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: api/apiproto/protos/api.proto + +package apiproto + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type CreateSpaceRequest struct { +} + +func (m *CreateSpaceRequest) Reset() { *m = CreateSpaceRequest{} } +func (m *CreateSpaceRequest) String() string { return proto.CompactTextString(m) } +func (*CreateSpaceRequest) ProtoMessage() {} +func (*CreateSpaceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{0} +} +func (m *CreateSpaceRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CreateSpaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CreateSpaceRequest.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 *CreateSpaceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateSpaceRequest.Merge(m, src) +} +func (m *CreateSpaceRequest) XXX_Size() int { + return m.Size() +} +func (m *CreateSpaceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateSpaceRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateSpaceRequest proto.InternalMessageInfo + +type CreateSpaceResponse struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (m *CreateSpaceResponse) Reset() { *m = CreateSpaceResponse{} } +func (m *CreateSpaceResponse) String() string { return proto.CompactTextString(m) } +func (*CreateSpaceResponse) ProtoMessage() {} +func (*CreateSpaceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{1} +} +func (m *CreateSpaceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CreateSpaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CreateSpaceResponse.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 *CreateSpaceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateSpaceResponse.Merge(m, src) +} +func (m *CreateSpaceResponse) XXX_Size() int { + return m.Size() +} +func (m *CreateSpaceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CreateSpaceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateSpaceResponse proto.InternalMessageInfo + +func (m *CreateSpaceResponse) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +type DeriveSpaceRequest struct { +} + +func (m *DeriveSpaceRequest) Reset() { *m = DeriveSpaceRequest{} } +func (m *DeriveSpaceRequest) String() string { return proto.CompactTextString(m) } +func (*DeriveSpaceRequest) ProtoMessage() {} +func (*DeriveSpaceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{2} +} +func (m *DeriveSpaceRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeriveSpaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DeriveSpaceRequest.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 *DeriveSpaceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeriveSpaceRequest.Merge(m, src) +} +func (m *DeriveSpaceRequest) XXX_Size() int { + return m.Size() +} +func (m *DeriveSpaceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeriveSpaceRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeriveSpaceRequest proto.InternalMessageInfo + +type DeriveSpaceResponse struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (m *DeriveSpaceResponse) Reset() { *m = DeriveSpaceResponse{} } +func (m *DeriveSpaceResponse) String() string { return proto.CompactTextString(m) } +func (*DeriveSpaceResponse) ProtoMessage() {} +func (*DeriveSpaceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{3} +} +func (m *DeriveSpaceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeriveSpaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DeriveSpaceResponse.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 *DeriveSpaceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeriveSpaceResponse.Merge(m, src) +} +func (m *DeriveSpaceResponse) XXX_Size() int { + return m.Size() +} +func (m *DeriveSpaceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeriveSpaceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeriveSpaceResponse proto.InternalMessageInfo + +func (m *DeriveSpaceResponse) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +type CreateDocumentRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` +} + +func (m *CreateDocumentRequest) Reset() { *m = CreateDocumentRequest{} } +func (m *CreateDocumentRequest) String() string { return proto.CompactTextString(m) } +func (*CreateDocumentRequest) ProtoMessage() {} +func (*CreateDocumentRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{4} +} +func (m *CreateDocumentRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CreateDocumentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CreateDocumentRequest.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 *CreateDocumentRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateDocumentRequest.Merge(m, src) +} +func (m *CreateDocumentRequest) XXX_Size() int { + return m.Size() +} +func (m *CreateDocumentRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateDocumentRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateDocumentRequest proto.InternalMessageInfo + +func (m *CreateDocumentRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +type CreateDocumentResponse struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (m *CreateDocumentResponse) Reset() { *m = CreateDocumentResponse{} } +func (m *CreateDocumentResponse) String() string { return proto.CompactTextString(m) } +func (*CreateDocumentResponse) ProtoMessage() {} +func (*CreateDocumentResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{5} +} +func (m *CreateDocumentResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CreateDocumentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CreateDocumentResponse.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 *CreateDocumentResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateDocumentResponse.Merge(m, src) +} +func (m *CreateDocumentResponse) XXX_Size() int { + return m.Size() +} +func (m *CreateDocumentResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CreateDocumentResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateDocumentResponse proto.InternalMessageInfo + +func (m *CreateDocumentResponse) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +type DeleteDocumentRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + DocumentId string `protobuf:"bytes,2,opt,name=documentId,proto3" json:"documentId,omitempty"` +} + +func (m *DeleteDocumentRequest) Reset() { *m = DeleteDocumentRequest{} } +func (m *DeleteDocumentRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDocumentRequest) ProtoMessage() {} +func (*DeleteDocumentRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{6} +} +func (m *DeleteDocumentRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeleteDocumentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DeleteDocumentRequest.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 *DeleteDocumentRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteDocumentRequest.Merge(m, src) +} +func (m *DeleteDocumentRequest) XXX_Size() int { + return m.Size() +} +func (m *DeleteDocumentRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteDocumentRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteDocumentRequest proto.InternalMessageInfo + +func (m *DeleteDocumentRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +func (m *DeleteDocumentRequest) GetDocumentId() string { + if m != nil { + return m.DocumentId + } + return "" +} + +type DeleteDocumentResponse struct { +} + +func (m *DeleteDocumentResponse) Reset() { *m = DeleteDocumentResponse{} } +func (m *DeleteDocumentResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteDocumentResponse) ProtoMessage() {} +func (*DeleteDocumentResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{7} +} +func (m *DeleteDocumentResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeleteDocumentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DeleteDocumentResponse.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 *DeleteDocumentResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteDocumentResponse.Merge(m, src) +} +func (m *DeleteDocumentResponse) XXX_Size() int { + return m.Size() +} +func (m *DeleteDocumentResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteDocumentResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteDocumentResponse proto.InternalMessageInfo + +type AddTextRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + DocumentId string `protobuf:"bytes,2,opt,name=documentId,proto3" json:"documentId,omitempty"` + Text string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"` +} + +func (m *AddTextRequest) Reset() { *m = AddTextRequest{} } +func (m *AddTextRequest) String() string { return proto.CompactTextString(m) } +func (*AddTextRequest) ProtoMessage() {} +func (*AddTextRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{8} +} +func (m *AddTextRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AddTextRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AddTextRequest.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 *AddTextRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddTextRequest.Merge(m, src) +} +func (m *AddTextRequest) XXX_Size() int { + return m.Size() +} +func (m *AddTextRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AddTextRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AddTextRequest proto.InternalMessageInfo + +func (m *AddTextRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +func (m *AddTextRequest) GetDocumentId() string { + if m != nil { + return m.DocumentId + } + return "" +} + +func (m *AddTextRequest) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +type AddTextResponse struct { + DocumentId string `protobuf:"bytes,1,opt,name=documentId,proto3" json:"documentId,omitempty"` + HeadId string `protobuf:"bytes,2,opt,name=headId,proto3" json:"headId,omitempty"` +} + +func (m *AddTextResponse) Reset() { *m = AddTextResponse{} } +func (m *AddTextResponse) String() string { return proto.CompactTextString(m) } +func (*AddTextResponse) ProtoMessage() {} +func (*AddTextResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{9} +} +func (m *AddTextResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AddTextResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AddTextResponse.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 *AddTextResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddTextResponse.Merge(m, src) +} +func (m *AddTextResponse) XXX_Size() int { + return m.Size() +} +func (m *AddTextResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AddTextResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AddTextResponse proto.InternalMessageInfo + +func (m *AddTextResponse) GetDocumentId() string { + if m != nil { + return m.DocumentId + } + return "" +} + +func (m *AddTextResponse) GetHeadId() string { + if m != nil { + return m.HeadId + } + return "" +} + +type DumpTreeRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + DocumentId string `protobuf:"bytes,2,opt,name=documentId,proto3" json:"documentId,omitempty"` +} + +func (m *DumpTreeRequest) Reset() { *m = DumpTreeRequest{} } +func (m *DumpTreeRequest) String() string { return proto.CompactTextString(m) } +func (*DumpTreeRequest) ProtoMessage() {} +func (*DumpTreeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{10} +} +func (m *DumpTreeRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DumpTreeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DumpTreeRequest.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 *DumpTreeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DumpTreeRequest.Merge(m, src) +} +func (m *DumpTreeRequest) XXX_Size() int { + return m.Size() +} +func (m *DumpTreeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DumpTreeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DumpTreeRequest proto.InternalMessageInfo + +func (m *DumpTreeRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +func (m *DumpTreeRequest) GetDocumentId() string { + if m != nil { + return m.DocumentId + } + return "" +} + +type DumpTreeResponse struct { + Dump string `protobuf:"bytes,1,opt,name=dump,proto3" json:"dump,omitempty"` +} + +func (m *DumpTreeResponse) Reset() { *m = DumpTreeResponse{} } +func (m *DumpTreeResponse) String() string { return proto.CompactTextString(m) } +func (*DumpTreeResponse) ProtoMessage() {} +func (*DumpTreeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{11} +} +func (m *DumpTreeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DumpTreeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DumpTreeResponse.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 *DumpTreeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DumpTreeResponse.Merge(m, src) +} +func (m *DumpTreeResponse) XXX_Size() int { + return m.Size() +} +func (m *DumpTreeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DumpTreeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DumpTreeResponse proto.InternalMessageInfo + +func (m *DumpTreeResponse) GetDump() string { + if m != nil { + return m.Dump + } + return "" +} + +type AllTreesRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` +} + +func (m *AllTreesRequest) Reset() { *m = AllTreesRequest{} } +func (m *AllTreesRequest) String() string { return proto.CompactTextString(m) } +func (*AllTreesRequest) ProtoMessage() {} +func (*AllTreesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{12} +} +func (m *AllTreesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllTreesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllTreesRequest.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 *AllTreesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllTreesRequest.Merge(m, src) +} +func (m *AllTreesRequest) XXX_Size() int { + return m.Size() +} +func (m *AllTreesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AllTreesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AllTreesRequest proto.InternalMessageInfo + +func (m *AllTreesRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +type Tree struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Heads []string `protobuf:"bytes,2,rep,name=heads,proto3" json:"heads,omitempty"` +} + +func (m *Tree) Reset() { *m = Tree{} } +func (m *Tree) String() string { return proto.CompactTextString(m) } +func (*Tree) ProtoMessage() {} +func (*Tree) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{13} +} +func (m *Tree) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Tree) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Tree.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 *Tree) XXX_Merge(src proto.Message) { + xxx_messageInfo_Tree.Merge(m, src) +} +func (m *Tree) XXX_Size() int { + return m.Size() +} +func (m *Tree) XXX_DiscardUnknown() { + xxx_messageInfo_Tree.DiscardUnknown(m) +} + +var xxx_messageInfo_Tree proto.InternalMessageInfo + +func (m *Tree) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Tree) GetHeads() []string { + if m != nil { + return m.Heads + } + return nil +} + +type AllTreesResponse struct { + Trees []*Tree `protobuf:"bytes,1,rep,name=trees,proto3" json:"trees,omitempty"` +} + +func (m *AllTreesResponse) Reset() { *m = AllTreesResponse{} } +func (m *AllTreesResponse) String() string { return proto.CompactTextString(m) } +func (*AllTreesResponse) ProtoMessage() {} +func (*AllTreesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{14} +} +func (m *AllTreesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllTreesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllTreesResponse.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 *AllTreesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllTreesResponse.Merge(m, src) +} +func (m *AllTreesResponse) XXX_Size() int { + return m.Size() +} +func (m *AllTreesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AllTreesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AllTreesResponse proto.InternalMessageInfo + +func (m *AllTreesResponse) GetTrees() []*Tree { + if m != nil { + return m.Trees + } + return nil +} + +type AllSpacesRequest struct { +} + +func (m *AllSpacesRequest) Reset() { *m = AllSpacesRequest{} } +func (m *AllSpacesRequest) String() string { return proto.CompactTextString(m) } +func (*AllSpacesRequest) ProtoMessage() {} +func (*AllSpacesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{15} +} +func (m *AllSpacesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllSpacesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllSpacesRequest.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 *AllSpacesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllSpacesRequest.Merge(m, src) +} +func (m *AllSpacesRequest) XXX_Size() int { + return m.Size() +} +func (m *AllSpacesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AllSpacesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AllSpacesRequest proto.InternalMessageInfo + +type AllSpacesResponse struct { + SpaceIds []string `protobuf:"bytes,1,rep,name=spaceIds,proto3" json:"spaceIds,omitempty"` +} + +func (m *AllSpacesResponse) Reset() { *m = AllSpacesResponse{} } +func (m *AllSpacesResponse) String() string { return proto.CompactTextString(m) } +func (*AllSpacesResponse) ProtoMessage() {} +func (*AllSpacesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{16} +} +func (m *AllSpacesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllSpacesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllSpacesResponse.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 *AllSpacesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllSpacesResponse.Merge(m, src) +} +func (m *AllSpacesResponse) XXX_Size() int { + return m.Size() +} +func (m *AllSpacesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AllSpacesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AllSpacesResponse proto.InternalMessageInfo + +func (m *AllSpacesResponse) GetSpaceIds() []string { + if m != nil { + return m.SpaceIds + } + return nil +} + +func init() { + proto.RegisterType((*CreateSpaceRequest)(nil), "api.CreateSpaceRequest") + proto.RegisterType((*CreateSpaceResponse)(nil), "api.CreateSpaceResponse") + proto.RegisterType((*DeriveSpaceRequest)(nil), "api.DeriveSpaceRequest") + proto.RegisterType((*DeriveSpaceResponse)(nil), "api.DeriveSpaceResponse") + proto.RegisterType((*CreateDocumentRequest)(nil), "api.CreateDocumentRequest") + proto.RegisterType((*CreateDocumentResponse)(nil), "api.CreateDocumentResponse") + proto.RegisterType((*DeleteDocumentRequest)(nil), "api.DeleteDocumentRequest") + proto.RegisterType((*DeleteDocumentResponse)(nil), "api.DeleteDocumentResponse") + proto.RegisterType((*AddTextRequest)(nil), "api.AddTextRequest") + proto.RegisterType((*AddTextResponse)(nil), "api.AddTextResponse") + proto.RegisterType((*DumpTreeRequest)(nil), "api.DumpTreeRequest") + proto.RegisterType((*DumpTreeResponse)(nil), "api.DumpTreeResponse") + proto.RegisterType((*AllTreesRequest)(nil), "api.AllTreesRequest") + proto.RegisterType((*Tree)(nil), "api.Tree") + proto.RegisterType((*AllTreesResponse)(nil), "api.AllTreesResponse") + proto.RegisterType((*AllSpacesRequest)(nil), "api.AllSpacesRequest") + proto.RegisterType((*AllSpacesResponse)(nil), "api.AllSpacesResponse") +} + +func init() { proto.RegisterFile("api/apiproto/protos/api.proto", fileDescriptor_fc31080c27db9707) } + +var fileDescriptor_fc31080c27db9707 = []byte{ + // 517 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x8f, 0xd2, 0x50, + 0x14, 0xa5, 0xc0, 0x7c, 0xf4, 0x60, 0x60, 0xbc, 0x03, 0xd8, 0xd4, 0x58, 0xc9, 0x4b, 0x9c, 0x90, + 0x68, 0x86, 0x38, 0x63, 0x62, 0xe2, 0x6a, 0x70, 0xd8, 0x10, 0x57, 0xe2, 0xac, 0x5c, 0x98, 0xd4, + 0xe9, 0x4b, 0x6c, 0xc2, 0xc7, 0x93, 0x16, 0x33, 0x7f, 0xc1, 0x9d, 0x3f, 0xcb, 0xe5, 0x2c, 0x5d, + 0x1a, 0xf8, 0x23, 0xa6, 0xaf, 0xb7, 0xa5, 0x1f, 0x4c, 0xcc, 0x64, 0x36, 0xf0, 0xee, 0x79, 0xf7, + 0x9c, 0x7b, 0x4b, 0xcf, 0x01, 0xcf, 0x5c, 0xe5, 0x0f, 0x5c, 0xe5, 0xab, 0xe5, 0x22, 0x5c, 0x0c, + 0xf4, 0x67, 0x10, 0xd5, 0xa7, 0xfa, 0x48, 0x35, 0x57, 0xf9, 0xa2, 0x0d, 0xba, 0x5c, 0x4a, 0x37, + 0x94, 0x9f, 0x94, 0x7b, 0x2d, 0x27, 0xf2, 0xfb, 0x4a, 0x06, 0xa1, 0x78, 0x81, 0xe3, 0x1c, 0x1a, + 0xa8, 0xc5, 0x3c, 0x90, 0xd4, 0x44, 0xd5, 0xf7, 0x2c, 0xa3, 0x67, 0xf4, 0xcd, 0x49, 0xd5, 0xf7, + 0x22, 0xf2, 0x48, 0x2e, 0xfd, 0x1f, 0x25, 0x72, 0x0e, 0xbd, 0x83, 0xfc, 0x1a, 0x9d, 0x78, 0xc6, + 0x68, 0x71, 0xbd, 0x9a, 0xc9, 0x79, 0xc8, 0x7c, 0xb2, 0x70, 0x10, 0x44, 0xcc, 0x71, 0xd2, 0x9d, + 0x94, 0xa2, 0x8f, 0x6e, 0x91, 0x72, 0x87, 0xf8, 0x47, 0x74, 0x46, 0x72, 0x2a, 0xef, 0x21, 0x4e, + 0x0e, 0xe0, 0x71, 0xf3, 0xd8, 0xb3, 0xaa, 0xfa, 0x32, 0x83, 0x08, 0x0b, 0xdd, 0xa2, 0x64, 0x3c, + 0x5c, 0x7c, 0x41, 0x73, 0xe8, 0x79, 0x57, 0xf2, 0xe6, 0xe1, 0x53, 0x88, 0x50, 0x0f, 0xe5, 0x4d, + 0x68, 0xd5, 0xf4, 0x8d, 0x3e, 0x8b, 0x31, 0x5a, 0xa9, 0x3e, 0x3f, 0x6f, 0x5e, 0xc6, 0x28, 0xc9, + 0x74, 0xb1, 0xff, 0x4d, 0xba, 0x5e, 0x3a, 0x82, 0x2b, 0xf1, 0x01, 0xad, 0xd1, 0x6a, 0xa6, 0xae, + 0x96, 0x52, 0x3e, 0xfc, 0x17, 0x39, 0xc1, 0xd1, 0x56, 0x8c, 0x17, 0x23, 0xd4, 0xbd, 0xd5, 0x4c, + 0xb1, 0x94, 0x3e, 0x8b, 0x97, 0x68, 0x0d, 0xa7, 0xd3, 0xa8, 0x2d, 0xf8, 0xff, 0x3b, 0x7e, 0x85, + 0x7a, 0xd4, 0x59, 0x7c, 0xa3, 0xd4, 0xc6, 0x5e, 0xf4, 0x0c, 0x81, 0x55, 0xed, 0xd5, 0xfa, 0xe6, + 0x24, 0x2e, 0xc4, 0x39, 0x8e, 0xb6, 0xd2, 0xbc, 0xc2, 0x73, 0xec, 0x85, 0x11, 0x60, 0x19, 0xbd, + 0x5a, 0xbf, 0x71, 0x66, 0x9e, 0x46, 0x96, 0xd7, 0x4b, 0xc6, 0xb8, 0x20, 0x4d, 0xd2, 0xee, 0x4c, + 0x16, 0x12, 0x03, 0x3c, 0xce, 0x60, 0xac, 0x64, 0xe3, 0x90, 0xd7, 0x8a, 0xc5, 0xcc, 0x49, 0x5a, + 0x9f, 0xfd, 0xac, 0xc3, 0xbc, 0x9c, 0xfa, 0x72, 0x1e, 0x0e, 0x95, 0x4f, 0x17, 0x68, 0x64, 0x02, + 0x43, 0x4f, 0xf4, 0xcc, 0x72, 0xb0, 0x6c, 0xab, 0x7c, 0xc1, 0xb3, 0x2e, 0xd0, 0xc8, 0xa4, 0x86, + 0x15, 0xca, 0xe9, 0x62, 0x85, 0x5d, 0x01, 0x1b, 0xa3, 0x99, 0x4f, 0x07, 0xd9, 0x99, 0x69, 0x85, + 0x20, 0xd8, 0x4f, 0x77, 0xde, 0x6d, 0xa5, 0xf2, 0x5e, 0x67, 0xa9, 0x9d, 0x99, 0x62, 0xa9, 0xdd, + 0xe1, 0xa0, 0x37, 0x38, 0x60, 0xf3, 0xd2, 0xb1, 0xee, 0xcb, 0x47, 0xc5, 0x6e, 0xe7, 0x41, 0x66, + 0xbd, 0xc5, 0x61, 0x62, 0x2d, 0x8a, 0x3b, 0x0a, 0xb6, 0xb5, 0x3b, 0x05, 0x74, 0x4b, 0x4c, 0x0c, + 0xc1, 0xc4, 0x82, 0xf5, 0x98, 0x58, 0x72, 0xcd, 0x3b, 0x98, 0xa9, 0x01, 0x28, 0xed, 0xc9, 0x99, + 0xc4, 0xee, 0x16, 0xe1, 0x98, 0xfb, 0xfe, 0xe4, 0xf7, 0xda, 0x31, 0x6e, 0xd7, 0x8e, 0xf1, 0x77, + 0xed, 0x18, 0xbf, 0x36, 0x4e, 0xe5, 0x76, 0xe3, 0x54, 0xfe, 0x6c, 0x9c, 0xca, 0xe7, 0x47, 0xd9, + 0xbf, 0xe0, 0xaf, 0xfb, 0xfa, 0xeb, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0x60, 0xfe, + 0x5b, 0x99, 0x05, 0x00, 0x00, +} + +func (m *CreateSpaceRequest) 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 *CreateSpaceRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CreateSpaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *CreateSpaceResponse) 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 *CreateSpaceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CreateSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeriveSpaceRequest) 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 *DeriveSpaceRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeriveSpaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *DeriveSpaceResponse) 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 *DeriveSpaceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeriveSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateDocumentRequest) 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 *CreateDocumentRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CreateDocumentRequest) 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CreateDocumentResponse) 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 *CreateDocumentResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CreateDocumentResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteDocumentRequest) 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 *DeleteDocumentRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeleteDocumentRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DocumentId) > 0 { + i -= len(m.DocumentId) + copy(dAtA[i:], m.DocumentId) + i = encodeVarintApi(dAtA, i, uint64(len(m.DocumentId))) + i-- + dAtA[i] = 0x12 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DeleteDocumentResponse) 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 *DeleteDocumentResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeleteDocumentResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *AddTextRequest) 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 *AddTextRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AddTextRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Text) > 0 { + i -= len(m.Text) + copy(dAtA[i:], m.Text) + i = encodeVarintApi(dAtA, i, uint64(len(m.Text))) + i-- + dAtA[i] = 0x1a + } + if len(m.DocumentId) > 0 { + i -= len(m.DocumentId) + copy(dAtA[i:], m.DocumentId) + i = encodeVarintApi(dAtA, i, uint64(len(m.DocumentId))) + i-- + dAtA[i] = 0x12 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AddTextResponse) 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 *AddTextResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AddTextResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HeadId) > 0 { + i -= len(m.HeadId) + copy(dAtA[i:], m.HeadId) + i = encodeVarintApi(dAtA, i, uint64(len(m.HeadId))) + i-- + dAtA[i] = 0x12 + } + if len(m.DocumentId) > 0 { + i -= len(m.DocumentId) + copy(dAtA[i:], m.DocumentId) + i = encodeVarintApi(dAtA, i, uint64(len(m.DocumentId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DumpTreeRequest) 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 *DumpTreeRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DumpTreeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DocumentId) > 0 { + i -= len(m.DocumentId) + copy(dAtA[i:], m.DocumentId) + i = encodeVarintApi(dAtA, i, uint64(len(m.DocumentId))) + i-- + dAtA[i] = 0x12 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DumpTreeResponse) 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 *DumpTreeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DumpTreeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Dump) > 0 { + i -= len(m.Dump) + copy(dAtA[i:], m.Dump) + i = encodeVarintApi(dAtA, i, uint64(len(m.Dump))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AllTreesRequest) 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 *AllTreesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllTreesRequest) 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Tree) 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 *Tree) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Tree) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Heads) > 0 { + for iNdEx := len(m.Heads) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Heads[iNdEx]) + copy(dAtA[i:], m.Heads[iNdEx]) + i = encodeVarintApi(dAtA, i, uint64(len(m.Heads[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AllTreesResponse) 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 *AllTreesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllTreesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Trees) > 0 { + for iNdEx := len(m.Trees) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Trees[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *AllSpacesRequest) 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 *AllSpacesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllSpacesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *AllSpacesResponse) 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 *AllSpacesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllSpacesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SpaceIds) > 0 { + for iNdEx := len(m.SpaceIds) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.SpaceIds[iNdEx]) + copy(dAtA[i:], m.SpaceIds[iNdEx]) + i = encodeVarintApi(dAtA, i, uint64(len(m.SpaceIds[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintApi(dAtA []byte, offset int, v uint64) int { + offset -= sovApi(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *CreateSpaceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *CreateSpaceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *DeriveSpaceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *DeriveSpaceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *CreateDocumentRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *CreateDocumentResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *DeleteDocumentRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.DocumentId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *DeleteDocumentResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *AddTextRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.DocumentId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.Text) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *AddTextResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DocumentId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.HeadId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *DumpTreeRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.DocumentId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *DumpTreeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Dump) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *AllTreesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *Tree) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if len(m.Heads) > 0 { + for _, s := range m.Heads { + l = len(s) + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + +func (m *AllTreesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Trees) > 0 { + for _, e := range m.Trees { + l = e.Size() + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + +func (m *AllSpacesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *AllSpacesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.SpaceIds) > 0 { + for _, s := range m.SpaceIds { + l = len(s) + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + +func sovApi(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozApi(x uint64) (n int) { + return sovApi(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *CreateSpaceRequest) 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: CreateSpaceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateSpaceRequest: 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 (m *CreateSpaceResponse) 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: CreateSpaceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateSpaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 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.Id = 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 *DeriveSpaceRequest) 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: DeriveSpaceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeriveSpaceRequest: 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 (m *DeriveSpaceResponse) 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: DeriveSpaceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeriveSpaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 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.Id = 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 *CreateDocumentRequest) 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: CreateDocumentRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateDocumentRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 *CreateDocumentResponse) 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: CreateDocumentResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateDocumentResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 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.Id = 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 *DeleteDocumentRequest) 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: DeleteDocumentRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteDocumentRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DocumentId", 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.DocumentId = 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 *DeleteDocumentResponse) 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: DeleteDocumentResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteDocumentResponse: 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 (m *AddTextRequest) 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: AddTextRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AddTextRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DocumentId", 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.DocumentId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Text", 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.Text = 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 *AddTextResponse) 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: AddTextResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AddTextResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DocumentId", 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.DocumentId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HeadId", 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.HeadId = 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 *DumpTreeRequest) 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: DumpTreeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DumpTreeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DocumentId", 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.DocumentId = 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 *DumpTreeResponse) 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: DumpTreeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DumpTreeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Dump", 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.Dump = 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 *AllTreesRequest) 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: AllTreesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllTreesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 *Tree) 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: Tree: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Tree: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 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.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Heads", 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.Heads = append(m.Heads, 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 *AllTreesResponse) 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: AllTreesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllTreesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Trees", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Trees = append(m.Trees, &Tree{}) + if err := m.Trees[len(m.Trees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *AllSpacesRequest) 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: AllSpacesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllSpacesRequest: 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 (m *AllSpacesResponse) 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: AllSpacesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllSpacesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpaceIds", 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.SpaceIds = append(m.SpaceIds, 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 skipApi(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowApi + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowApi + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowApi + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthApi + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupApi + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthApi + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthApi = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowApi = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupApi = fmt.Errorf("proto: unexpected end of group") +) diff --git a/client/api/apiproto/api_drpc.pb.go b/client/api/apiproto/api_drpc.pb.go new file mode 100644 index 00000000..089dd379 --- /dev/null +++ b/client/api/apiproto/api_drpc.pb.go @@ -0,0 +1,393 @@ +// Code generated by protoc-gen-go-drpc. DO NOT EDIT. +// protoc-gen-go-drpc version: v0.0.32 +// source: api/apiproto/protos/api.proto + +package apiproto + +import ( + bytes "bytes" + context "context" + errors "errors" + jsonpb "github.com/gogo/protobuf/jsonpb" + proto "github.com/gogo/protobuf/proto" + drpc "storj.io/drpc" + drpcerr "storj.io/drpc/drpcerr" +) + +type drpcEncoding_File_api_apiproto_protos_api_proto struct{} + +func (drpcEncoding_File_api_apiproto_protos_api_proto) Marshal(msg drpc.Message) ([]byte, error) { + return proto.Marshal(msg.(proto.Message)) +} + +func (drpcEncoding_File_api_apiproto_protos_api_proto) Unmarshal(buf []byte, msg drpc.Message) error { + return proto.Unmarshal(buf, msg.(proto.Message)) +} + +func (drpcEncoding_File_api_apiproto_protos_api_proto) JSONMarshal(msg drpc.Message) ([]byte, error) { + var buf bytes.Buffer + err := new(jsonpb.Marshaler).Marshal(&buf, msg.(proto.Message)) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +func (drpcEncoding_File_api_apiproto_protos_api_proto) JSONUnmarshal(buf []byte, msg drpc.Message) error { + return jsonpb.Unmarshal(bytes.NewReader(buf), msg.(proto.Message)) +} + +type DRPCClientApiClient interface { + DRPCConn() drpc.Conn + + CreateSpace(ctx context.Context, in *CreateSpaceRequest) (*CreateSpaceResponse, error) + DeriveSpace(ctx context.Context, in *DeriveSpaceRequest) (*DeriveSpaceResponse, error) + CreateDocument(ctx context.Context, in *CreateDocumentRequest) (*CreateDocumentResponse, error) + DeleteDocument(ctx context.Context, in *DeleteDocumentRequest) (*DeleteDocumentResponse, error) + AddText(ctx context.Context, in *AddTextRequest) (*AddTextResponse, error) + DumpTree(ctx context.Context, in *DumpTreeRequest) (*DumpTreeResponse, error) + AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) + AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) +} + +type drpcClientApiClient struct { + cc drpc.Conn +} + +func NewDRPCClientApiClient(cc drpc.Conn) DRPCClientApiClient { + return &drpcClientApiClient{cc} +} + +func (c *drpcClientApiClient) DRPCConn() drpc.Conn { return c.cc } + +func (c *drpcClientApiClient) CreateSpace(ctx context.Context, in *CreateSpaceRequest) (*CreateSpaceResponse, error) { + out := new(CreateSpaceResponse) + err := c.cc.Invoke(ctx, "/api.ClientApi/CreateSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcClientApiClient) DeriveSpace(ctx context.Context, in *DeriveSpaceRequest) (*DeriveSpaceResponse, error) { + out := new(DeriveSpaceResponse) + err := c.cc.Invoke(ctx, "/api.ClientApi/DeriveSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcClientApiClient) CreateDocument(ctx context.Context, in *CreateDocumentRequest) (*CreateDocumentResponse, error) { + out := new(CreateDocumentResponse) + err := c.cc.Invoke(ctx, "/api.ClientApi/CreateDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcClientApiClient) DeleteDocument(ctx context.Context, in *DeleteDocumentRequest) (*DeleteDocumentResponse, error) { + out := new(DeleteDocumentResponse) + err := c.cc.Invoke(ctx, "/api.ClientApi/DeleteDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcClientApiClient) AddText(ctx context.Context, in *AddTextRequest) (*AddTextResponse, error) { + out := new(AddTextResponse) + err := c.cc.Invoke(ctx, "/api.ClientApi/AddText", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcClientApiClient) DumpTree(ctx context.Context, in *DumpTreeRequest) (*DumpTreeResponse, error) { + out := new(DumpTreeResponse) + err := c.cc.Invoke(ctx, "/api.ClientApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcClientApiClient) AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) { + out := new(AllTreesResponse) + err := c.cc.Invoke(ctx, "/api.ClientApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcClientApiClient) AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) { + out := new(AllSpacesResponse) + err := c.cc.Invoke(ctx, "/api.ClientApi/AllSpaces", 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) + CreateDocument(context.Context, *CreateDocumentRequest) (*CreateDocumentResponse, error) + DeleteDocument(context.Context, *DeleteDocumentRequest) (*DeleteDocumentResponse, error) + AddText(context.Context, *AddTextRequest) (*AddTextResponse, error) + DumpTree(context.Context, *DumpTreeRequest) (*DumpTreeResponse, error) + AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) + AllSpaces(context.Context, *AllSpacesRequest) (*AllSpacesResponse, error) +} + +type DRPCClientApiUnimplementedServer struct{} + +func (s *DRPCClientApiUnimplementedServer) CreateSpace(context.Context, *CreateSpaceRequest) (*CreateSpaceResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCClientApiUnimplementedServer) DeriveSpace(context.Context, *DeriveSpaceRequest) (*DeriveSpaceResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCClientApiUnimplementedServer) CreateDocument(context.Context, *CreateDocumentRequest) (*CreateDocumentResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCClientApiUnimplementedServer) DeleteDocument(context.Context, *DeleteDocumentRequest) (*DeleteDocumentResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCClientApiUnimplementedServer) AddText(context.Context, *AddTextRequest) (*AddTextResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCClientApiUnimplementedServer) DumpTree(context.Context, *DumpTreeRequest) (*DumpTreeResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCClientApiUnimplementedServer) AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCClientApiUnimplementedServer) AllSpaces(context.Context, *AllSpacesRequest) (*AllSpacesResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +type DRPCClientApiDescription struct{} + +func (DRPCClientApiDescription) NumMethods() int { return 8 } + +func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { + switch n { + case 0: + return "/api.ClientApi/CreateSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + CreateSpace( + ctx, + in1.(*CreateSpaceRequest), + ) + }, DRPCClientApiServer.CreateSpace, true + case 1: + return "/api.ClientApi/DeriveSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + DeriveSpace( + ctx, + in1.(*DeriveSpaceRequest), + ) + }, DRPCClientApiServer.DeriveSpace, true + case 2: + return "/api.ClientApi/CreateDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + CreateDocument( + ctx, + in1.(*CreateDocumentRequest), + ) + }, DRPCClientApiServer.CreateDocument, true + case 3: + return "/api.ClientApi/DeleteDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + DeleteDocument( + ctx, + in1.(*DeleteDocumentRequest), + ) + }, DRPCClientApiServer.DeleteDocument, true + case 4: + return "/api.ClientApi/AddText", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + AddText( + ctx, + in1.(*AddTextRequest), + ) + }, DRPCClientApiServer.AddText, true + case 5: + return "/api.ClientApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + DumpTree( + ctx, + in1.(*DumpTreeRequest), + ) + }, DRPCClientApiServer.DumpTree, true + case 6: + return "/api.ClientApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + AllTrees( + ctx, + in1.(*AllTreesRequest), + ) + }, DRPCClientApiServer.AllTrees, true + case 7: + return "/api.ClientApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + AllSpaces( + ctx, + in1.(*AllSpacesRequest), + ) + }, DRPCClientApiServer.AllSpaces, true + default: + return "", nil, nil, nil, false + } +} + +func DRPCRegisterClientApi(mux drpc.Mux, impl DRPCClientApiServer) error { + return mux.Register(impl, DRPCClientApiDescription{}) +} + +type DRPCClientApi_CreateSpaceStream interface { + drpc.Stream + SendAndClose(*CreateSpaceResponse) error +} + +type drpcClientApi_CreateSpaceStream struct { + drpc.Stream +} + +func (x *drpcClientApi_CreateSpaceStream) SendAndClose(m *CreateSpaceResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCClientApi_DeriveSpaceStream interface { + drpc.Stream + SendAndClose(*DeriveSpaceResponse) error +} + +type drpcClientApi_DeriveSpaceStream struct { + drpc.Stream +} + +func (x *drpcClientApi_DeriveSpaceStream) SendAndClose(m *DeriveSpaceResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCClientApi_CreateDocumentStream interface { + drpc.Stream + SendAndClose(*CreateDocumentResponse) error +} + +type drpcClientApi_CreateDocumentStream struct { + drpc.Stream +} + +func (x *drpcClientApi_CreateDocumentStream) SendAndClose(m *CreateDocumentResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCClientApi_DeleteDocumentStream interface { + drpc.Stream + SendAndClose(*DeleteDocumentResponse) error +} + +type drpcClientApi_DeleteDocumentStream struct { + drpc.Stream +} + +func (x *drpcClientApi_DeleteDocumentStream) SendAndClose(m *DeleteDocumentResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCClientApi_AddTextStream interface { + drpc.Stream + SendAndClose(*AddTextResponse) error +} + +type drpcClientApi_AddTextStream struct { + drpc.Stream +} + +func (x *drpcClientApi_AddTextStream) SendAndClose(m *AddTextResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCClientApi_DumpTreeStream interface { + drpc.Stream + SendAndClose(*DumpTreeResponse) error +} + +type drpcClientApi_DumpTreeStream struct { + drpc.Stream +} + +func (x *drpcClientApi_DumpTreeStream) SendAndClose(m *DumpTreeResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCClientApi_AllTreesStream interface { + drpc.Stream + SendAndClose(*AllTreesResponse) error +} + +type drpcClientApi_AllTreesStream struct { + drpc.Stream +} + +func (x *drpcClientApi_AllTreesStream) SendAndClose(m *AllTreesResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCClientApi_AllSpacesStream interface { + drpc.Stream + SendAndClose(*AllSpacesResponse) error +} + +type drpcClientApi_AllSpacesStream struct { + drpc.Stream +} + +func (x *drpcClientApi_AllSpacesStream) SendAndClose(m *AllSpacesResponse) 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 new file mode 100644 index 00000000..4ac23157 --- /dev/null +++ b/client/api/apiproto/protos/api.proto @@ -0,0 +1,85 @@ +syntax = "proto3"; +package api; + +option go_package = "api/apiproto"; + +service ClientApi { + rpc CreateSpace(CreateSpaceRequest) returns(CreateSpaceResponse); + rpc DeriveSpace(DeriveSpaceRequest) returns(DeriveSpaceResponse); + rpc CreateDocument(CreateDocumentRequest) returns(CreateDocumentResponse); + rpc DeleteDocument(DeleteDocumentRequest) returns(DeleteDocumentResponse); + rpc AddText(AddTextRequest) returns(AddTextResponse); + rpc DumpTree(DumpTreeRequest) returns(DumpTreeResponse); + rpc AllTrees(AllTreesRequest) returns(AllTreesResponse); + rpc AllSpaces(AllSpacesRequest) returns(AllSpacesResponse); +} + +message CreateSpaceRequest { +} + +message CreateSpaceResponse { + string id = 1; +} + +message DeriveSpaceRequest { +} + +message DeriveSpaceResponse { + string id = 1; +} + +message CreateDocumentRequest { + string spaceId = 1; +} + +message CreateDocumentResponse { + string id = 1; +} + +message DeleteDocumentRequest { + string spaceId = 1; + string documentId = 2; +} + +message DeleteDocumentResponse { +} + +message AddTextRequest { + string spaceId = 1; + string documentId = 2; + string text = 3; +} + +message AddTextResponse { + string documentId = 1; + string headId = 2; +} + +message DumpTreeRequest { + string spaceId = 1; + string documentId = 2; +} + +message DumpTreeResponse { + string dump = 1; +} + +message AllTreesRequest { + string spaceId = 1; +} + +message Tree { + string id = 1; + repeated string heads = 2; +} + +message AllTreesResponse { + repeated Tree trees = 1; +} + +message AllSpacesRequest { +} + +message AllSpacesResponse { + repeated string spaceIds = 1; +} \ No newline at end of file diff --git a/common/Makefile b/common/Makefile index 6773d454..d10bf673 100644 --- a/common/Makefile +++ b/common/Makefile @@ -3,7 +3,7 @@ export GOPRIVATE=github.com/anytypeio proto: @echo 'Generating protobuf packages (Go)...' -# Uncomment if needed + @$(eval GOGO_START := GOGO_NO_UNDERSCORE=1 GOGO_EXPORT_ONEOF_INTERFACE=1) @$(eval P_ACL_RECORDS_PATH_PB := pkg/acl/aclrecordproto) @$(eval P_TREE_CHANGES_PATH_PB := pkg/acl/treechangeproto) diff --git a/common/net/rpc/server/baseserver.go b/common/net/rpc/server/baseserver.go new file mode 100644 index 00000000..6230d63b --- /dev/null +++ b/common/net/rpc/server/baseserver.go @@ -0,0 +1,105 @@ +package server + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/zeebo/errs" + "go.uber.org/zap" + "io" + "net" + "storj.io/drpc" + "storj.io/drpc/drpcmux" + "storj.io/drpc/drpcserver" + "time" +) + +type BaseDrpcServer struct { + drpcServer *drpcserver.Server + transport secure.Service + listeners []secure.ContextListener + cancel func() + *drpcmux.Mux +} + +type DRPCHandlerWrapper func(handler drpc.Handler) drpc.Handler + +func NewBaseDrpcServer() *BaseDrpcServer { + return &BaseDrpcServer{Mux: drpcmux.New()} +} + +func (s *BaseDrpcServer) Init(transport secure.Service) { + s.transport = transport +} + +func (s *BaseDrpcServer) Run(ctx context.Context, listenAddrs []string, wrapper DRPCHandlerWrapper) (err error) { + s.drpcServer = drpcserver.New(wrapper(s.Mux)) + ctx, s.cancel = context.WithCancel(ctx) + for _, addr := range listenAddrs { + tcpList, err := net.Listen("tcp", addr) + if err != nil { + return err + } + tlsList := s.transport.TLSListener(tcpList) + go s.serve(ctx, tlsList) + } + return +} + +func (s *BaseDrpcServer) serve(ctx context.Context, lis secure.ContextListener) { + l := log.With(zap.String("localAddr", lis.Addr().String())) + l.Info("drpc listener started") + defer func() { + l.Debug("drpc listener stopped") + }() + for { + select { + case <-ctx.Done(): + return + default: + } + ctx, conn, err := lis.Accept(ctx) + if err != nil { + if isTemporary(err) { + l.Debug("listener temporary accept error", zap.Error(err)) + t := time.NewTimer(500 * time.Millisecond) + select { + case <-t.C: + case <-ctx.Done(): + return + } + continue + } + if _, ok := err.(secure.HandshakeError); ok { + l.Warn("listener handshake error", zap.Error(err)) + continue + } + l.Error("listener accept error", zap.Error(err)) + return + } + go s.serveConn(ctx, conn) + } +} + +func (s *BaseDrpcServer) serveConn(ctx context.Context, conn net.Conn) { + l := log.With(zap.String("remoteAddr", conn.RemoteAddr().String())).With(zap.String("localAddr", conn.LocalAddr().String())) + l.Debug("connection opened") + if err := s.drpcServer.ServeOne(ctx, conn); err != nil { + if errs.Is(err, context.Canceled) || errs.Is(err, io.EOF) { + l.Debug("connection closed") + } else { + l.Warn("serve connection error", zap.Error(err)) + } + } +} + +func (s *BaseDrpcServer) Close(ctx context.Context) (err error) { + if s.cancel != nil { + s.cancel() + } + for _, l := range s.listeners { + if e := l.Close(); e != nil { + log.Warn("close listener error", zap.Error(e)) + } + } + return +} diff --git a/common/net/rpc/server/drpcserver.go b/common/net/rpc/server/drpcserver.go index 3d1341b6..ce20bbd6 100644 --- a/common/net/rpc/server/drpcserver.go +++ b/common/net/rpc/server/drpcserver.go @@ -8,14 +8,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/metric" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" "github.com/prometheus/client_golang/prometheus" - "github.com/zeebo/errs" - "go.uber.org/zap" - "io" - "net" "storj.io/drpc" - "storj.io/drpc/drpcmux" - "storj.io/drpc/drpcserver" - "time" ) const CName = "common.net.drpcserver" @@ -23,7 +16,7 @@ const CName = "common.net.drpcserver" var log = logger.NewNamed(CName) func New() DRPCServer { - return &drpcServer{Mux: drpcmux.New()} + return &drpcServer{BaseDrpcServer: NewBaseDrpcServer()} } type DRPCServer interface { @@ -36,19 +29,15 @@ type configGetter interface { } type drpcServer struct { - config config.GrpcServer - drpcServer *drpcserver.Server - transport secure.Service - listeners []secure.ContextListener - metric metric.Metric - cancel func() - *drpcmux.Mux + config config.GrpcServer + metric metric.Metric + *BaseDrpcServer } func (s *drpcServer) Init(a *app.App) (err error) { s.config = a.MustComponent(config.CName).(configGetter).GetGRPCServer() - s.transport = a.MustComponent(secure.CName).(secure.Service) s.metric = a.MustComponent(metric.CName).(metric.Metric) + s.BaseDrpcServer.Init(a.MustComponent(secure.CName).(secure.Service)) return nil } @@ -68,80 +57,17 @@ func (s *drpcServer) Run(ctx context.Context) (err error) { 0.99: 0.0001, }, }, []string{"rpc"}) - s.drpcServer = drpcserver.New(&metric.PrometheusDRPC{ - Handler: s.Mux, - SummaryVec: histVec, - }) if err = s.metric.Registry().Register(histVec); err != nil { return } - ctx, s.cancel = context.WithCancel(ctx) - for _, addr := range s.config.ListenAddrs { - tcpList, err := net.Listen("tcp", addr) - if err != nil { - return err + return s.BaseDrpcServer.Run(ctx, s.config.ListenAddrs, func(handler drpc.Handler) drpc.Handler { + return &metric.PrometheusDRPC{ + Handler: handler, + SummaryVec: histVec, } - tlsList := s.transport.TLSListener(tcpList) - go s.serve(ctx, tlsList) - } - return -} - -func (s *drpcServer) serve(ctx context.Context, lis secure.ContextListener) { - l := log.With(zap.String("localAddr", lis.Addr().String())) - l.Info("drpc listener started") - defer func() { - l.Debug("drpc listener stopped") - }() - for { - select { - case <-ctx.Done(): - return - default: - } - ctx, conn, err := lis.Accept(ctx) - if err != nil { - if isTemporary(err) { - l.Debug("listener temporary accept error", zap.Error(err)) - t := time.NewTimer(500 * time.Millisecond) - select { - case <-t.C: - case <-ctx.Done(): - return - } - continue - } - if _, ok := err.(secure.HandshakeError); ok { - l.Warn("listener handshake error", zap.Error(err)) - continue - } - l.Error("listener accept error", zap.Error(err)) - return - } - go s.serveConn(ctx, conn) - } -} - -func (s *drpcServer) serveConn(ctx context.Context, conn net.Conn) { - l := log.With(zap.String("remoteAddr", conn.RemoteAddr().String())).With(zap.String("localAddr", conn.LocalAddr().String())) - l.Debug("connection opened") - if err := s.drpcServer.ServeOne(ctx, conn); err != nil { - if errs.Is(err, context.Canceled) || errs.Is(err, io.EOF) { - l.Debug("connection closed") - } else { - l.Warn("serve connection error", zap.Error(err)) - } - } + }) } func (s *drpcServer) Close(ctx context.Context) (err error) { - if s.cancel != nil { - s.cancel() - } - for _, l := range s.listeners { - if e := l.Close(); e != nil { - log.Warn("close listener error", zap.Error(e)) - } - } - return + return s.BaseDrpcServer.Close(ctx) } From 20b9a366042e2c3b7bd8af7594eea43d04fadf87 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Wed, 30 Nov 2022 22:50:43 +0100 Subject: [PATCH 02/32] Add api grpc server to client --- client/api/rpchandler.go | 94 ++++++++++++++++++++++++ client/api/service.go | 155 ++++----------------------------------- common/config/config.go | 2 +- etc/config.yml | 4 +- 4 files changed, 112 insertions(+), 143 deletions(-) create mode 100644 client/api/rpchandler.go diff --git a/client/api/rpchandler.go b/client/api/rpchandler.go new file mode 100644 index 00000000..707afd24 --- /dev/null +++ b/client/api/rpchandler.go @@ -0,0 +1,94 @@ +package api + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" +) + +type rpcHandler struct { + controller Controller +} + +func (r *rpcHandler) CreateSpace(ctx context.Context, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) { + id, err := r.controller.CreateSpace() + if err != nil { + return + } + resp = &apiproto.CreateSpaceResponse{Id: id} + return +} + +func (r *rpcHandler) DeriveSpace(ctx context.Context, request *apiproto.DeriveSpaceRequest) (resp *apiproto.DeriveSpaceResponse, err error) { + id, err := r.controller.DeriveSpace() + if err != nil { + return + } + resp = &apiproto.DeriveSpaceResponse{Id: id} + return +} + +func (r *rpcHandler) CreateDocument(ctx context.Context, request *apiproto.CreateDocumentRequest) (resp *apiproto.CreateDocumentResponse, err error) { + id, err := r.controller.CreateDocument(request.SpaceId) + if err != nil { + return + } + resp = &apiproto.CreateDocumentResponse{Id: id} + return +} + +func (r *rpcHandler) DeleteDocument(ctx context.Context, request *apiproto.DeleteDocumentRequest) (resp *apiproto.DeleteDocumentResponse, err error) { + err = r.controller.DeleteDocument(request.SpaceId, request.DocumentId) + if err != nil { + return + } + resp = &apiproto.DeleteDocumentResponse{} + return +} + +func (r *rpcHandler) AddText(ctx context.Context, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) { + err = r.controller.AddText(request.SpaceId, request.DocumentId, request.Text) + if err != nil { + return + } + // TODO: update controller to add head + resp = &apiproto.AddTextResponse{ + DocumentId: request.DocumentId, + } + return +} + +func (r *rpcHandler) DumpTree(ctx context.Context, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) { + dump, err := r.controller.DumpDocumentTree(request.SpaceId, request.DocumentId) + if err != nil { + return + } + resp = &apiproto.DumpTreeResponse{ + Dump: dump, + } + return +} + +func (r *rpcHandler) AllTrees(ctx context.Context, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { + ids, err := r.controller.AllDocumentIds(request.SpaceId) + if err != nil { + return + } + // TODO: add getting heads to controller + var trees []*apiproto.Tree + for _, id := range ids { + trees = append(trees, &apiproto.Tree{ + Id: id, + }) + } + resp = &apiproto.AllTreesResponse{Trees: trees} + return +} + +func (r *rpcHandler) AllSpaces(ctx context.Context, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) { + ids, err := r.controller.AllSpaceIds() + if err != nil { + return + } + resp = &apiproto.AllSpacesResponse{SpaceIds: ids} + return +} diff --git a/client/api/service.go b/client/api/service.go index 7155ea38..b7c14d33 100644 --- a/client/api/service.go +++ b/client/api/service.go @@ -2,7 +2,7 @@ package api import ( "context" - "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document" clientstorage "github.com/anytypeio/go-anytype-infrastructure-experiments/client/storage" @@ -11,10 +11,10 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" - "go.uber.org/zap" - "io" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" "net/http" - "strings" + "storj.io/drpc" ) const CName = "api.service" @@ -22,17 +22,19 @@ const CName = "api.service" var log = logger.NewNamed("api") func New() Service { - return &service{} + return &service{BaseDrpcServer: server.NewBaseDrpcServer()} } type Service interface { app.ComponentRunnable + drpc.Mux } type service struct { controller Controller srv *http.Server cfg *config.Config + *server.BaseDrpcServer } func (s *service) Init(a *app.App) (err error) { @@ -42,6 +44,7 @@ func (s *service) Init(a *app.App) (err error) { a.MustComponent(document.CName).(document.Service), a.MustComponent(account.CName).(account.Service)) s.cfg = a.MustComponent(config.CName).(*config.Config) + s.BaseDrpcServer.Init(a.MustComponent(secure.CName).(secure.Service)) return nil } @@ -50,145 +53,15 @@ func (s *service) Name() (name string) { } func (s *service) Run(ctx context.Context) (err error) { - defer func() { - if err == nil { - log.With(zap.String("port", s.cfg.APIServer.Port)).Info("api server started running") - } - }() - - s.srv = &http.Server{ - Addr: fmt.Sprintf(":%s", s.cfg.APIServer.Port), - } - mux := http.NewServeMux() - mux.HandleFunc("/deriveSpace", s.deriveSpace) - mux.HandleFunc("/createSpace", s.createSpace) - mux.HandleFunc("/loadSpace", s.loadSpace) - mux.HandleFunc("/allSpaceIds", s.allSpaceIds) - mux.HandleFunc("/createDocument", s.createDocument) - mux.HandleFunc("/deleteDocument", s.deleteDocument) - mux.HandleFunc("/allDocumentIds", s.allDocumentIds) - mux.HandleFunc("/addText", s.addText) - mux.HandleFunc("/dumpDocumentTree", s.dumpDocumentTree) - s.srv.Handler = mux - - go s.runServer() - return nil -} - -func (s *service) runServer() { - err := s.srv.ListenAndServe() + err = s.BaseDrpcServer.Run(ctx, s.cfg.APIServer.ListenAddrs, func(handler drpc.Handler) drpc.Handler { + return handler + }) if err != nil { - log.With(zap.Error(err)).Error("could not run api server") + return } + return apiproto.DRPCRegisterClientApi(s, &rpcHandler{s.controller}) } func (s *service) Close(ctx context.Context) (err error) { - return s.srv.Shutdown(ctx) -} - -func (s *service) deriveSpace(w http.ResponseWriter, req *http.Request) { - id, err := s.controller.DeriveSpace() - if err != nil { - sendText(w, http.StatusInternalServerError, err.Error()) - return - } - sendText(w, http.StatusOK, id) -} - -func (s *service) loadSpace(w http.ResponseWriter, req *http.Request) { - query := req.URL.Query() - spaceId := query.Get("spaceId") - err := s.controller.LoadSpace(query.Get("spaceId")) - if err != nil { - sendText(w, http.StatusInternalServerError, err.Error()) - return - } - sendText(w, http.StatusOK, spaceId) -} - -func (s *service) createSpace(w http.ResponseWriter, req *http.Request) { - id, err := s.controller.CreateSpace() - if err != nil { - sendText(w, http.StatusInternalServerError, err.Error()) - return - } - sendText(w, http.StatusOK, id) -} - -func (s *service) allSpaceIds(w http.ResponseWriter, req *http.Request) { - ids, err := s.controller.AllSpaceIds() - if err != nil { - sendText(w, http.StatusInternalServerError, err.Error()) - return - } - sendText(w, http.StatusOK, strings.Join(ids, "\n")) -} - -func (s *service) createDocument(w http.ResponseWriter, req *http.Request) { - query := req.URL.Query() - spaceId := query.Get("spaceId") - id, err := s.controller.CreateDocument(spaceId) - if err != nil { - sendText(w, http.StatusInternalServerError, err.Error()) - return - } - sendText(w, http.StatusOK, id) -} - -func (s *service) deleteDocument(w http.ResponseWriter, req *http.Request) { - query := req.URL.Query() - spaceId := query.Get("spaceId") - documentId := query.Get("documentId") - err := s.controller.DeleteDocument(spaceId, documentId) - if err != nil { - sendText(w, http.StatusInternalServerError, err.Error()) - return - } - sendText(w, http.StatusOK, documentId) -} - -func (s *service) allDocumentIds(w http.ResponseWriter, req *http.Request) { - query := req.URL.Query() - spaceId := query.Get("spaceId") - ids, err := s.controller.AllDocumentIds(spaceId) - if err != nil { - sendText(w, http.StatusInternalServerError, err.Error()) - return - } - sendText(w, http.StatusOK, strings.Join(ids, "\n")) -} - -func (s *service) addText(w http.ResponseWriter, req *http.Request) { - query := req.URL.Query() - spaceId := query.Get("spaceId") - documentId := query.Get("documentId") - text := query.Get("text") - err := s.controller.AddText(spaceId, documentId, text) - if err != nil { - sendText(w, http.StatusInternalServerError, err.Error()) - return - } - sendText(w, http.StatusOK, "Text added") -} - -func (s *service) dumpDocumentTree(w http.ResponseWriter, req *http.Request) { - query := req.URL.Query() - spaceId := query.Get("spaceId") - documentId := query.Get("documentId") - dump, err := s.controller.DumpDocumentTree(spaceId, documentId) - if err != nil { - sendText(w, http.StatusInternalServerError, err.Error()) - return - } - sendText(w, http.StatusOK, dump) -} - -func sendText(r http.ResponseWriter, code int, body string) { - r.Header().Set("Content-Type", "text/plain") - r.WriteHeader(code) - - _, err := io.WriteString(r, fmt.Sprintf("%s\n", body)) - if err != nil { - log.Error("writing response failed", zap.Error(err)) - } + return s.BaseDrpcServer.Close(ctx) } diff --git a/common/config/config.go b/common/config/config.go index 06168a4d..59afb523 100644 --- a/common/config/config.go +++ b/common/config/config.go @@ -26,7 +26,7 @@ type Config struct { Anytype Anytype `yaml:"anytype"` GrpcServer GrpcServer `yaml:"grpcServer"` Account Account `yaml:"account"` - APIServer APIServer `yaml:"apiServer"` + APIServer GrpcServer `yaml:"apiServer"` Nodes []Node `yaml:"nodes"` Space Space `yaml:"space"` Storage Storage `yaml:"storage"` diff --git a/etc/config.yml b/etc/config.yml index 86912342..f610e299 100644 --- a/etc/config.yml +++ b/etc/config.yml @@ -10,7 +10,9 @@ account: signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= apiServer: - port: "8080" + listenAddrs: + - 127.0.0.1:4430 + tls: false nodes: - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu address: 127.0.0.1:4430 From ea6dd0dc9907f337b021dff44f4b21ecad03c916 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Wed, 30 Nov 2022 23:42:26 +0100 Subject: [PATCH 03/32] Client api wip --- client/api/service.go | 14 +++++---- common/net/rpc/server/baseserver.go | 9 ++---- common/net/rpc/server/drpcserver.go | 22 ++++++++------ common/net/secure/basiclistener.go | 19 ++++++++++++ common/net/secure/service.go | 5 ++++ .../secure/{listener.go => tlslistener.go} | 0 etc/client.yml | 30 ++++++++++--------- etc/config.yml | 28 ++++++++--------- etc/configs/client1.yml | 30 ++++++++++--------- etc/configs/client2.yml | 30 ++++++++++--------- etc/configs/cons1.yml | 8 ++--- etc/configs/cons2.yml | 8 ++--- etc/configs/cons3.yml | 8 ++--- etc/configs/node1.yml | 30 ++++++++++--------- etc/configs/node2.yml | 30 ++++++++++--------- etc/configs/node3.yml | 30 ++++++++++--------- util/cmd/nodesgen/gen.go | 26 ++++++++-------- util/cmd/nodesgen/nodemap.yml | 15 ++++++---- 18 files changed, 195 insertions(+), 147 deletions(-) create mode 100644 common/net/secure/basiclistener.go rename common/net/secure/{listener.go => tlslistener.go} (100%) diff --git a/client/api/service.go b/client/api/service.go index b7c14d33..587c756d 100644 --- a/client/api/service.go +++ b/client/api/service.go @@ -19,7 +19,7 @@ import ( const CName = "api.service" -var log = logger.NewNamed("api") +var log = logger.NewNamed(CName) func New() Service { return &service{BaseDrpcServer: server.NewBaseDrpcServer()} @@ -32,6 +32,7 @@ type Service interface { type service struct { controller Controller + transport secure.Service srv *http.Server cfg *config.Config *server.BaseDrpcServer @@ -44,7 +45,7 @@ func (s *service) Init(a *app.App) (err error) { a.MustComponent(document.CName).(document.Service), a.MustComponent(account.CName).(account.Service)) s.cfg = a.MustComponent(config.CName).(*config.Config) - s.BaseDrpcServer.Init(a.MustComponent(secure.CName).(secure.Service)) + s.transport = a.MustComponent(secure.CName).(secure.Service) return nil } @@ -53,9 +54,12 @@ func (s *service) Name() (name string) { } func (s *service) Run(ctx context.Context) (err error) { - err = s.BaseDrpcServer.Run(ctx, s.cfg.APIServer.ListenAddrs, func(handler drpc.Handler) drpc.Handler { - return handler - }) + err = s.BaseDrpcServer.Run( + ctx, + s.cfg.APIServer.ListenAddrs, func(handler drpc.Handler) drpc.Handler { + return handler + }, + s.transport.BasicListener) if err != nil { return } diff --git a/common/net/rpc/server/baseserver.go b/common/net/rpc/server/baseserver.go index 6230d63b..49347a9a 100644 --- a/common/net/rpc/server/baseserver.go +++ b/common/net/rpc/server/baseserver.go @@ -22,16 +22,13 @@ type BaseDrpcServer struct { } type DRPCHandlerWrapper func(handler drpc.Handler) drpc.Handler +type ListenerConverter func(listener net.Listener) secure.ContextListener func NewBaseDrpcServer() *BaseDrpcServer { return &BaseDrpcServer{Mux: drpcmux.New()} } -func (s *BaseDrpcServer) Init(transport secure.Service) { - s.transport = transport -} - -func (s *BaseDrpcServer) Run(ctx context.Context, listenAddrs []string, wrapper DRPCHandlerWrapper) (err error) { +func (s *BaseDrpcServer) Run(ctx context.Context, listenAddrs []string, wrapper DRPCHandlerWrapper, converter ListenerConverter) (err error) { s.drpcServer = drpcserver.New(wrapper(s.Mux)) ctx, s.cancel = context.WithCancel(ctx) for _, addr := range listenAddrs { @@ -39,7 +36,7 @@ func (s *BaseDrpcServer) Run(ctx context.Context, listenAddrs []string, wrapper if err != nil { return err } - tlsList := s.transport.TLSListener(tcpList) + tlsList := converter(tcpList) go s.serve(ctx, tlsList) } return diff --git a/common/net/rpc/server/drpcserver.go b/common/net/rpc/server/drpcserver.go index ce20bbd6..5d894607 100644 --- a/common/net/rpc/server/drpcserver.go +++ b/common/net/rpc/server/drpcserver.go @@ -29,15 +29,16 @@ type configGetter interface { } type drpcServer struct { - config config.GrpcServer - metric metric.Metric + config config.GrpcServer + metric metric.Metric + transport secure.Service *BaseDrpcServer } func (s *drpcServer) Init(a *app.App) (err error) { s.config = a.MustComponent(config.CName).(configGetter).GetGRPCServer() s.metric = a.MustComponent(metric.CName).(metric.Metric) - s.BaseDrpcServer.Init(a.MustComponent(secure.CName).(secure.Service)) + s.transport = a.MustComponent(secure.CName).(secure.Service) return nil } @@ -60,12 +61,15 @@ func (s *drpcServer) Run(ctx context.Context) (err error) { if err = s.metric.Registry().Register(histVec); err != nil { return } - return s.BaseDrpcServer.Run(ctx, s.config.ListenAddrs, func(handler drpc.Handler) drpc.Handler { - return &metric.PrometheusDRPC{ - Handler: handler, - SummaryVec: histVec, - } - }) + return s.BaseDrpcServer.Run(ctx, + s.config.ListenAddrs, + func(handler drpc.Handler) drpc.Handler { + return &metric.PrometheusDRPC{ + Handler: handler, + SummaryVec: histVec, + } + }, + s.transport.TLSListener) } func (s *drpcServer) Close(ctx context.Context) (err error) { diff --git a/common/net/secure/basiclistener.go b/common/net/secure/basiclistener.go new file mode 100644 index 00000000..7244edf0 --- /dev/null +++ b/common/net/secure/basiclistener.go @@ -0,0 +1,19 @@ +package secure + +import ( + "context" + "net" +) + +type basicListener struct { + net.Listener +} + +func newBasicListener(listener net.Listener) ContextListener { + return &basicListener{listener} +} + +func (b *basicListener) Accept(ctx context.Context) (context.Context, net.Conn, error) { + conn, err := b.Listener.Accept() + return ctx, conn, err +} diff --git a/common/net/secure/service.go b/common/net/secure/service.go index c3ba0d40..ea92faf2 100644 --- a/common/net/secure/service.go +++ b/common/net/secure/service.go @@ -26,6 +26,7 @@ func New() Service { type Service interface { TLSListener(lis net.Listener) ContextListener + BasicListener(lis net.Listener) ContextListener TLSConn(ctx context.Context, conn net.Conn) (sec.SecureConn, error) app.Component } @@ -57,6 +58,10 @@ func (s *service) TLSListener(lis net.Listener) ContextListener { return newTLSListener(s.key, lis) } +func (s *service) BasicListener(lis net.Listener) ContextListener { + return newBasicListener(lis) +} + func (s *service) TLSConn(ctx context.Context, conn net.Conn) (sec.SecureConn, error) { tr, err := libp2ptls.New(s.key) if err != nil { diff --git a/common/net/secure/listener.go b/common/net/secure/tlslistener.go similarity index 100% rename from common/net/secure/listener.go rename to common/net/secure/tlslistener.go diff --git a/etc/client.yml b/etc/client.yml index 1621ebbe..95a044e0 100644 --- a/etc/client.yml +++ b/etc/client.yml @@ -5,25 +5,27 @@ grpcServer: - 127.0.0.1:4630 tls: false account: - peerId: 12D3KooWFqDLPcSZi74A1vVpDc8baTkGU6bd21AXcNxH8CFPMqp6 - peerKey: s6PUCRVry6ymxhyytNQcqSQVd2ECGyWNMIJB0FkyMUFZXbbOYSBb2yYPeQXrA9jdFdZDXyUSxtvzasvpSMpa6w== - signingKey: +UF/Do2KPeBLA0joKvnJj43jiH975JcHGjkLIkLR0p7FCFHnR1r/w4xLSa4RTjhEAQ3sDefjktShOJpalXnGvg== - encryptionKey: MIIEpQIBAAKCAQEA7NiHF065o9BfTTAWtAItg3KLqvFnRN2WVQMkjMZ/BukIj4UAd196ppexh2tnDvvqW53qVxFtXcW8oFqX9GmDJx61nnN/ce2FhXNB3aPMa7g3AchlVVB9RHyS8Z49HTkn3DVRi8I8EnbpWer35BjnpGOQ257O/kFpD1P5FzvxyTQ2gF50SyiwoDzibyT2VxgQqaDErr9BfFQKBZb8SEBeLACOlzjb2u0mCv7NeoZNfzl2KsqBC8tiCyfNahhauGfU9ZB7PtHMC1pJKTtPhXhNhQI8Rp39dd+Fr3kiTJl3Fe1f4bg4GDI7LbqCARVBbtCjsLEMi1BMzMS63bFPrPL9ewIDAQABAoIBAQCA261j+Oj3Pz8ad7diaGzqvz9N2dkdlpFb30HbdYNW9yI5M1t1lvTb/lwQGVcQx+5RujDs/gZKpnJhq+hQibdZaVPWyW/lRB0I5hRHyf5F/QuwZJ79M7VztXMdEcKeS6JsJHYhW6PjR97dlQEZkJM21RTS6CwmGOBX/o/fHDYICNxIqt4x7x1Hu+A9Qcs3LWvWq0qAkO48jSYBDeIFJ56BdXZacfIv9A7aCGWoVvih2vFIFEwdn+3z69FHmcW8JzVDK+WdkegtOlvuPcFGgDjS8cHq4zuKyEckur9EVm2Wer+GRdY2v7i9ypxiy/Ej4qJCqJLIa5rtWHmB9Dz7IyFBAoGBAPlIMpu9vAhAhJUeO48vsuEDdCn2ztyq2h4GwYcuNmfZUAnFdKRHHAfb48P7nR1uVCEEvnJYF9uUFkot8zljkDCoqc3J30sOd54PT2Jqn2vPhSWpjNJGW4Ku3CmZq/vfCH15z+bcr7whtlEswshE31bykbZlzCOSyW1tgfz2I+ydAoGBAPM6iEV6M74X+M4GoVCwUn9JMFRUX/JONOu4nfNT+1jDeABeXzVS3gzLSMJ/Vk/+1a/g6NFm73bt5PYHR8jG/jrT3xcTBPUiFj038w1MAM5Fsj2jSnIFRYFxwH8q0RfejWvKJRyWKUyTt7m43VRY9P01+YDfgt+VoLs94rV0PNr3AoGAahmWoL8S5xg+1hE2HG2a3zbPHIVV6oo1qA4MFPNQaMcPz/jg+oLhpV6sBOB1MO+ikyMnxBdGoEjZa90+5rA/0NYY3+QKTDHuK7IsgaEMFaEP9MXDkEQt8uNmBbbIgr2dKXrNSF+p1JMsvEQm64KU5Lb92fpd9s4lOZQgfYBuLekCgYEAwNvPg6+S6Y7edJZjQLSepVjmHmfMsDd81M/NRkx4Bvju5PPvcDul3+UsazRGvyVkUJH4aVnCVL3rB33cWIIYwZKP2R72llyR37bGXOu/088FtsQMWn59j1cf+HV91/xajHZ7mMAkPRj/3B6OOLxUfZZXoO0ZO6nMCcvXQGPLgR8CgYEA2W644EHrSwb4qsDsUmIEeKnjSejS8Vej4S5/g1YOyVzfWEr/5rtejw09Fv4U92SeYhp7Xp3C0UnRCduZKrpXIZJVPO8KgWLDtPi9KvHqDPzpQNRHMNrsXLpOLLv+bnnymWXjcyG8fRecU4sggaH4r1C/QyLPr+s/fLDyVUt7bC8= + peerId: 12D3KooWGqJFMrA5NUx2Yn2rGPBUkz3bbmynsqLEmxdcPYEaFSiZ + peerKey: XZcLB5xuffw2Bz3PJtb1feFacM2fR9+q8ik9YgzHzLtoPvTaz1X7wVgxhMpxcrUJIywRjffqsuEPJ9d/5pFIDg== + signingKey: PNcZdEvKsu9LShQmgOhKHbBpO1uyHvEM/QO5PUu8rVMuSHBoGvFbcFZNNZ2beFgSr/N9EitzY81QQRoIh5c+Gg== + encryptionKey: MIIEowIBAAKCAQEA3fh3Bd/a3N+7aDwln5rJU6BXL/0D/h2bMXH832d40Oac3OARVxMpxpxT02I6y8uLq0pS41mjtIK4+QtBDfeV+GAcAgvlywu7Be1tM0I5ohMXC0hNnLUCUwOMcQx/ylOjzUdQHna9woZMh2kdhFowViy3KhA/ItR8YpfgTG8VP6DMXW+CxGZR0sxzBVpSGHxGgcdZnrWc5/4vyb5IhY/rAxefQa+lieoFwnTo0jvLBrLhyhryK7SBGd8uwPZRoYJaCTs2BpCrQ7Osc2RDtYPafQnm8tVR2elmc43fN0Sq86PdMl3A0XofCVVW708uCPiq950cXZnJoh1wQeNIqhqpuQIDAQABAoIBAGxo1XjBBBusCdO2zIlPB9UYEn0VjcWmoA1eJqrV1mPwvdwCc3WbnmOqJiavaxftqaFXA3SWayXWUpEPtg4kRdKw3f0B4pFwgT873oGSbqOBv1d7UKygmyoAKa9s81zVzMKNecvnInbHMMlRxWDGy6TK4gphNPTF4pokox+xgSc5cJB7cBtmIZo+8CQA5/q5Xm2W9ih1cRPullmVXuuQYrv2/5oDoBCdaiCAr5WTg4C8pHEOo6z+j7kp9Yeh7Wc4LmEnnCEJKKTbUcNk/pXclpVkMuE983SguyD5Sy3UIXRejSzt+x6KW0k6MolBbRGAlDbVAHxvqp7AQiAIavVCXAECgYEA5ViMqjawjpbIK39DOSozRqaBeFVYrfLI6mkSSQrZqpJzgBvfVo/DDwWP9FgX/TEjDWHBilfylmN8/dcuzJHgQgw/JnckTJbsfnWv71PTxI/YgGEF0L7OmePSY02p3jfHq5zwVg9yW3jPacLTLn99pVjchjShDyzwVjZ5AK2Dm/ECgYEA98R8d3/GjOi0iUacFpks9xlbu4pn7SfCFOBaq5a+EkXSauWMRuGaPbZ5NIn7rWygfPW6r/jZrmCyDbWSoPLsdlqb+oEc0wOCN0dshhMGrzdkZMxpy9GNt15+SDhwQZCK/FI4DdEmlvBkLUIUSySIWVDfwJHnddDHO3EhH6GgUkkCgYAf8mK9vxp+8j/11yddCiTUXZNBWNoeeOhFxtcWN520ZewS108X9rScHhE8Xx0QVszkK07TX4baLgeWMGhDdLqBWMVfLU9wH8HXp7sXIl0oT0VANMOjnUCYLST8UjAsVSbKH/VWd5ZdaYmy2MGkA3xUEPm+9AvPWlosGDBoyMLBcQKBgEOKO0ez/CLjOHuHVPtQDBLbxcbMxuG+Ccj5E55cvDls8RwUsPWNgCc8e7PXvVScHO+TaK2Zj3VahI76JRtcvRrSPly+H2ZiOXfqL2oo+5R97A8SLfDSkegfiRsUz3z/8vMvUnppvjQ9GYHA1plZPxXh1uy+mTLjk7vfbeEahQKJAoGBAIDbI7SL7MmWumSnPPwwxfQ5DaWwdn7yReWKUFlO3WFG9oN15M43NXG3zZoUsPdaeTNcvgDRQ4PmtZ+zQonac+obHNsq8ZZP7KjyFJNrrIgfeUDmdnW8u+UPxPjt1J4YStsLX5Ea+x5uE8qGWmK0xYCUkntBFgENhbD7qDokB1+q apiServer: - port: "8090" + listenAddrs: + - 127.0.0.1:8090 + tls: false nodes: - - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu + - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj address: 127.0.0.1:4430 - signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= - - peerId: 12D3KooWLtuKtCPBYrFJV1NdejiCr2s614ppe9rmUXnkTHtAUD5U + signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== + - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 address: 127.0.0.1:4431 - signingKey: 07JMoW5cQUtGO9nNIGQo9e99b7Wf/4YvTtNEA0lt4gCkmhwB1EB9ay+kitxVJJgmdyGLxbUUlGqwXsAj0zlHWw== - encryptionKey: MIIEpAIBAAKCAQEA7cA6J/icl8wseeXkt8oJr5AeYadUAG5EdCOdHj4S/Z7ivff4MOIKAeQITpq+rqhmXxOePYXSpQXE20Y9PW9tuw4gzOuq1ylSG/MWMcLDH1eIxg66rnmUqUbdiW4GGJjVjc9jvN0Up+MfSrUF6fM0jWTFoXVJQIeQQGERCIYjFzjfBl1xYvPghdxNgei/K5ZGYRggT28143XdIH4KTXGtp51hAKoyY9eCqYMtm9wvjxazhPVxO2CsYaqMxBLshY3jfHNqJnx8u6+h4Bl4uUcdbLNUgMcEgk7ehbQp2K0CqNoKXxbCTI6V57UVcJHDIaO5B6FyR6BguzHHNPJ4yd3q9wIDAQABAoIBAQCm2Mf3VRlPzhFIWnVwJXE2q8Umcu8Yfkm712Jj3twk8GPfPS4H4Bl1yjmqMB6xI6zz/CiItGlnNe04lMpVWuV+6CNMq/ZwmKbuxmFE+pFEZYGuvJd16gzR3tGJqJTOnjMAGhK8b8oXJ+TF4NQNooe20ol/DXgiuQAargPuH3RwzjYmF3N8VI4KUc3LaG4TwVXn4LwPOxrQSnfwJlZwLml1HAKOV0qcG0mXX6ZXOpoVhEoRPdQyUHc8ZW+53Agbtind7bYh5TsMVDFUrcgNwnwTOsWjil049la1IJO2uMRluacKlrtyzEp6zqrW8ZJO7mYAO69x4WyGqf2ZgIdA6djBAoGBAPqRHWAIgPa80eXbwCYkRtUG/ONBsQGi7+wm6nyhkXvNXJeokgH2DCgLH2+fW2scfOJuZc9r5WftEjOBvNfr2LDcwdyTSTh21WYcPSZx9HDf2d5/SWTcjNcyU0b5qfWIUKi/Zm9UY7r3X7yMA5dUD/cvu1PBJ5NWFrK1Gm2ph44dAoGBAPLn+LkHweU0fbxQq/76T5yVVpMKUaE9xwrJlUxEDPAQGnLPbFg4JeUt/YPhsOV85W4c4oQE+uFZrF0uf+1fEnS6MOJ+sq668upzC2hBp1B5138wM7615v1rvXVVH6qXfFop67FdBzPHt1NAN43mEIBZHTQ5hSVXFlYSZp9mxuEjAoGBAKCzUVO2IIAeub/iIGpV+dfGk4ptJ0kVZyreCqXEObpdC3V496uqUkGcYJ0GZ2ta6f2PMFzHpmnw8it2mdchu+gyrWL6U4uTK2pB0jZF/7Ak4WaB3GCD0xBxhleO6CJBOvn/R4M/bHcNEKmsYuE7WMIAKvScfPVR0VzsKfcLM5VBAoGAVvWg32zdh1bBZLdku8WU1rPH6KAbFSRuq3f7UPBTyWWaclu7p+GB/4f1aE9V6vJJmKASn7zArAhUYo+REMOmcc9uTMea5F7dM/23qb1HTtIvycLR44ZviW4Wx3iP+5x70jOLw1VQjMME6HLm8I/afHhqshWdiv6ganPv9UTwEg0CgYBSDi2dqg8F7ij5CN+LMDLSn3b8GCw+7efGIt7imm/O2V/FlHD40IA6qGg6DXNQrnoZQt94nMb1cZEvm1dxi6rmQNrhCyoMogAaPqgFhZGq1OjmhVZiXFUWy4WAcjdzFc9wZd3/XtaofRKHLK+ngTFhhVApKypLk3Rg9bCAAjzyVg== - - peerId: 12D3KooWDCypXSyN6ppuMZGxVnBd1ZQCMV4y7Bn187S4duYmf8rA + signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== + encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= + - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF address: 127.0.0.1:4432 - signingKey: SGyNE0dFaQgtgNuzdcO7LB+TEz9VHAOtlQLk6WWkrkQyXiZV3casg8Q2/4PO1Oylc8Fu72RU001Hclj5JCbiLw== - encryptionKey: MIIEpAIBAAKCAQEA0k3mw4FyexRkLgLjHzYs4Ppeyv6r9ZrP00imNf15JTuM8ajMx5oJX7JQTm8KOLRJjUdZZAd5Gtp0ezfYAQK1ZjEWwCmfp8j8FBgJIDSLpjxl88SXMLgATXYfhklnQvKlQjs/X3Ka4zdTrav2tMH9IAo6TSNZhlPQNsUory1SGHs+KqHv4p0sG8oWuKYhfBj8rWHQdUVptkIBKgojFDeJJD04Tbf9kUakbK/8KuXB6zF5H4WN3p4rMMwkClyTGeYO4LDg5TzVn8NnUi3/b/vO/3us1G/TMoRe/6umUfpQxrwo+7S2T6A4YwetWRp6xALLhp+HfAWnn0lA/D8/w1WpKwIDAQABAoIBAQC5cdQxRa5rddm48PbSCPWeFWkNW3DLDI6CYyedqDvxZwer+QtKXzww1I4X+7ZptiC9odLjb+uMkGHyXZXtnjPTPyounQWZ8JLILUGu0mbqWYwVXp9raHVr2OOHiKaz1D+BnbkOM4L9JUZ2eJL9ZaoNXLd4WdmRp8qM4WI0xqQDzOANx2HhyL/+dJmQeIUND+pdeH+Z+fYowU3ho32txNvBnMXQhF1T5K9i1VO5W49RAjIRbENsT+paPGKbNubDHRt1j36ktK4eC4HSdgv8tccdsGyrEiIbAt1XsTZfM8ie4D3A8RhSxiTC6Fkgv6vIm+iFTLzBFZKesOBcd8sfKeyBAoGBAOts5PQQJhldPDzlbnqzxMOR98WHbkVZjCqWSkNA34vqyFuPcRuX0rHK/qpg23ilbUP0fGMDTGgFzTt51FZLL16SXyRfjNhzjdmryryeddQwbp92ta2GEgnU6t1FyCuSCtcLDKJd/D9A9dC5UI6z+ES4TOnbR3nakXK9t4cUOFthAoGBAOSu+wL+SEA5erR+m3LpOsELK68CCJQPxn3VpoVfJZawgF+fEoXVMLTERxJput1+ADomIEdNc9ex86TjKx9gJ4piNHscRPFeT/AgESOIGHLOc1gk2DPqNj6wBIarUJQ9t4KcHScboh1dTPJeqqv2NSwIiLQoqFUIhfKZLnrW3zwLAoGBAJh0hC+o5YM3ZXLqAIllMN6VACbidP5j5ukNOjojIKCzAdyJH24G+2I3WoNrBbUzK3b+NC7KTAhw+V6ynlbjiWFs2D/twH/LFOkI3tkWpKcsVfbeIPimAbhsMUvpjJ7qjCqF9UCQLHGp14W6+/ftg7C8yNIINlkquVXclaTb60MBAoGAPqmL8ogG+EJH00mWAujRxq/u6meePiQMedKfbJBj1mTK6GjIRI/kZsQZzXvXTnYGTejAk4kvov0KDDaLTG+mpg6+3rUiVxlGwj+nMptKR7s2dAK0k5UsBAVrWBN9YwF+VXW9r0etJmq4ePljvvcaHtS/0M4LQjGxsoYy7EoQpX0CgYAhnf0McB7F1MxSjB0soMNv/v5utVzVihS3re2yKNdkI/YUEMB+yU3Q4gh+OljjBM6Y5To3BsQBAx4l2CysMKFHjIE/5AtdbvIS+chZZqB3vcZXSayvX8P1Z1uFdw/saiO2cRDJmR+TxaOPa2C9SzDoNTACthwLErHfzvEvVroKmw== + signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== + encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/config.yml b/etc/config.yml index f610e299..5d65ce02 100644 --- a/etc/config.yml +++ b/etc/config.yml @@ -5,27 +5,27 @@ grpcServer: - 127.0.0.1:4430 tls: false account: - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu - peerKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= + peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj + peerKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== apiServer: listenAddrs: - - 127.0.0.1:4430 + - 127.0.0.1:8080 tls: false nodes: - - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu + - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj address: 127.0.0.1:4430 - signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= - - peerId: 12D3KooWLtuKtCPBYrFJV1NdejiCr2s614ppe9rmUXnkTHtAUD5U + signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== + - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 address: 127.0.0.1:4431 - signingKey: 07JMoW5cQUtGO9nNIGQo9e99b7Wf/4YvTtNEA0lt4gCkmhwB1EB9ay+kitxVJJgmdyGLxbUUlGqwXsAj0zlHWw== - encryptionKey: MIIEpAIBAAKCAQEA7cA6J/icl8wseeXkt8oJr5AeYadUAG5EdCOdHj4S/Z7ivff4MOIKAeQITpq+rqhmXxOePYXSpQXE20Y9PW9tuw4gzOuq1ylSG/MWMcLDH1eIxg66rnmUqUbdiW4GGJjVjc9jvN0Up+MfSrUF6fM0jWTFoXVJQIeQQGERCIYjFzjfBl1xYvPghdxNgei/K5ZGYRggT28143XdIH4KTXGtp51hAKoyY9eCqYMtm9wvjxazhPVxO2CsYaqMxBLshY3jfHNqJnx8u6+h4Bl4uUcdbLNUgMcEgk7ehbQp2K0CqNoKXxbCTI6V57UVcJHDIaO5B6FyR6BguzHHNPJ4yd3q9wIDAQABAoIBAQCm2Mf3VRlPzhFIWnVwJXE2q8Umcu8Yfkm712Jj3twk8GPfPS4H4Bl1yjmqMB6xI6zz/CiItGlnNe04lMpVWuV+6CNMq/ZwmKbuxmFE+pFEZYGuvJd16gzR3tGJqJTOnjMAGhK8b8oXJ+TF4NQNooe20ol/DXgiuQAargPuH3RwzjYmF3N8VI4KUc3LaG4TwVXn4LwPOxrQSnfwJlZwLml1HAKOV0qcG0mXX6ZXOpoVhEoRPdQyUHc8ZW+53Agbtind7bYh5TsMVDFUrcgNwnwTOsWjil049la1IJO2uMRluacKlrtyzEp6zqrW8ZJO7mYAO69x4WyGqf2ZgIdA6djBAoGBAPqRHWAIgPa80eXbwCYkRtUG/ONBsQGi7+wm6nyhkXvNXJeokgH2DCgLH2+fW2scfOJuZc9r5WftEjOBvNfr2LDcwdyTSTh21WYcPSZx9HDf2d5/SWTcjNcyU0b5qfWIUKi/Zm9UY7r3X7yMA5dUD/cvu1PBJ5NWFrK1Gm2ph44dAoGBAPLn+LkHweU0fbxQq/76T5yVVpMKUaE9xwrJlUxEDPAQGnLPbFg4JeUt/YPhsOV85W4c4oQE+uFZrF0uf+1fEnS6MOJ+sq668upzC2hBp1B5138wM7615v1rvXVVH6qXfFop67FdBzPHt1NAN43mEIBZHTQ5hSVXFlYSZp9mxuEjAoGBAKCzUVO2IIAeub/iIGpV+dfGk4ptJ0kVZyreCqXEObpdC3V496uqUkGcYJ0GZ2ta6f2PMFzHpmnw8it2mdchu+gyrWL6U4uTK2pB0jZF/7Ak4WaB3GCD0xBxhleO6CJBOvn/R4M/bHcNEKmsYuE7WMIAKvScfPVR0VzsKfcLM5VBAoGAVvWg32zdh1bBZLdku8WU1rPH6KAbFSRuq3f7UPBTyWWaclu7p+GB/4f1aE9V6vJJmKASn7zArAhUYo+REMOmcc9uTMea5F7dM/23qb1HTtIvycLR44ZviW4Wx3iP+5x70jOLw1VQjMME6HLm8I/afHhqshWdiv6ganPv9UTwEg0CgYBSDi2dqg8F7ij5CN+LMDLSn3b8GCw+7efGIt7imm/O2V/FlHD40IA6qGg6DXNQrnoZQt94nMb1cZEvm1dxi6rmQNrhCyoMogAaPqgFhZGq1OjmhVZiXFUWy4WAcjdzFc9wZd3/XtaofRKHLK+ngTFhhVApKypLk3Rg9bCAAjzyVg== - - peerId: 12D3KooWDCypXSyN6ppuMZGxVnBd1ZQCMV4y7Bn187S4duYmf8rA + signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== + encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= + - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF address: 127.0.0.1:4432 - signingKey: SGyNE0dFaQgtgNuzdcO7LB+TEz9VHAOtlQLk6WWkrkQyXiZV3casg8Q2/4PO1Oylc8Fu72RU001Hclj5JCbiLw== - encryptionKey: MIIEpAIBAAKCAQEA0k3mw4FyexRkLgLjHzYs4Ppeyv6r9ZrP00imNf15JTuM8ajMx5oJX7JQTm8KOLRJjUdZZAd5Gtp0ezfYAQK1ZjEWwCmfp8j8FBgJIDSLpjxl88SXMLgATXYfhklnQvKlQjs/X3Ka4zdTrav2tMH9IAo6TSNZhlPQNsUory1SGHs+KqHv4p0sG8oWuKYhfBj8rWHQdUVptkIBKgojFDeJJD04Tbf9kUakbK/8KuXB6zF5H4WN3p4rMMwkClyTGeYO4LDg5TzVn8NnUi3/b/vO/3us1G/TMoRe/6umUfpQxrwo+7S2T6A4YwetWRp6xALLhp+HfAWnn0lA/D8/w1WpKwIDAQABAoIBAQC5cdQxRa5rddm48PbSCPWeFWkNW3DLDI6CYyedqDvxZwer+QtKXzww1I4X+7ZptiC9odLjb+uMkGHyXZXtnjPTPyounQWZ8JLILUGu0mbqWYwVXp9raHVr2OOHiKaz1D+BnbkOM4L9JUZ2eJL9ZaoNXLd4WdmRp8qM4WI0xqQDzOANx2HhyL/+dJmQeIUND+pdeH+Z+fYowU3ho32txNvBnMXQhF1T5K9i1VO5W49RAjIRbENsT+paPGKbNubDHRt1j36ktK4eC4HSdgv8tccdsGyrEiIbAt1XsTZfM8ie4D3A8RhSxiTC6Fkgv6vIm+iFTLzBFZKesOBcd8sfKeyBAoGBAOts5PQQJhldPDzlbnqzxMOR98WHbkVZjCqWSkNA34vqyFuPcRuX0rHK/qpg23ilbUP0fGMDTGgFzTt51FZLL16SXyRfjNhzjdmryryeddQwbp92ta2GEgnU6t1FyCuSCtcLDKJd/D9A9dC5UI6z+ES4TOnbR3nakXK9t4cUOFthAoGBAOSu+wL+SEA5erR+m3LpOsELK68CCJQPxn3VpoVfJZawgF+fEoXVMLTERxJput1+ADomIEdNc9ex86TjKx9gJ4piNHscRPFeT/AgESOIGHLOc1gk2DPqNj6wBIarUJQ9t4KcHScboh1dTPJeqqv2NSwIiLQoqFUIhfKZLnrW3zwLAoGBAJh0hC+o5YM3ZXLqAIllMN6VACbidP5j5ukNOjojIKCzAdyJH24G+2I3WoNrBbUzK3b+NC7KTAhw+V6ynlbjiWFs2D/twH/LFOkI3tkWpKcsVfbeIPimAbhsMUvpjJ7qjCqF9UCQLHGp14W6+/ftg7C8yNIINlkquVXclaTb60MBAoGAPqmL8ogG+EJH00mWAujRxq/u6meePiQMedKfbJBj1mTK6GjIRI/kZsQZzXvXTnYGTejAk4kvov0KDDaLTG+mpg6+3rUiVxlGwj+nMptKR7s2dAK0k5UsBAVrWBN9YwF+VXW9r0etJmq4ePljvvcaHtS/0M4LQjGxsoYy7EoQpX0CgYAhnf0McB7F1MxSjB0soMNv/v5utVzVihS3re2yKNdkI/YUEMB+yU3Q4gh+OljjBM6Y5To3BsQBAx4l2CysMKFHjIE/5AtdbvIS+chZZqB3vcZXSayvX8P1Z1uFdw/saiO2cRDJmR+TxaOPa2C9SzDoNTACthwLErHfzvEvVroKmw== + signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== + encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/client1.yml b/etc/configs/client1.yml index 92f7461f..4d9f6e45 100755 --- a/etc/configs/client1.yml +++ b/etc/configs/client1.yml @@ -5,25 +5,27 @@ grpcServer: - 127.0.0.1:4630 tls: false account: - peerId: 12D3KooWFqDLPcSZi74A1vVpDc8baTkGU6bd21AXcNxH8CFPMqp6 - peerKey: s6PUCRVry6ymxhyytNQcqSQVd2ECGyWNMIJB0FkyMUFZXbbOYSBb2yYPeQXrA9jdFdZDXyUSxtvzasvpSMpa6w== - signingKey: +UF/Do2KPeBLA0joKvnJj43jiH975JcHGjkLIkLR0p7FCFHnR1r/w4xLSa4RTjhEAQ3sDefjktShOJpalXnGvg== - encryptionKey: MIIEpQIBAAKCAQEA7NiHF065o9BfTTAWtAItg3KLqvFnRN2WVQMkjMZ/BukIj4UAd196ppexh2tnDvvqW53qVxFtXcW8oFqX9GmDJx61nnN/ce2FhXNB3aPMa7g3AchlVVB9RHyS8Z49HTkn3DVRi8I8EnbpWer35BjnpGOQ257O/kFpD1P5FzvxyTQ2gF50SyiwoDzibyT2VxgQqaDErr9BfFQKBZb8SEBeLACOlzjb2u0mCv7NeoZNfzl2KsqBC8tiCyfNahhauGfU9ZB7PtHMC1pJKTtPhXhNhQI8Rp39dd+Fr3kiTJl3Fe1f4bg4GDI7LbqCARVBbtCjsLEMi1BMzMS63bFPrPL9ewIDAQABAoIBAQCA261j+Oj3Pz8ad7diaGzqvz9N2dkdlpFb30HbdYNW9yI5M1t1lvTb/lwQGVcQx+5RujDs/gZKpnJhq+hQibdZaVPWyW/lRB0I5hRHyf5F/QuwZJ79M7VztXMdEcKeS6JsJHYhW6PjR97dlQEZkJM21RTS6CwmGOBX/o/fHDYICNxIqt4x7x1Hu+A9Qcs3LWvWq0qAkO48jSYBDeIFJ56BdXZacfIv9A7aCGWoVvih2vFIFEwdn+3z69FHmcW8JzVDK+WdkegtOlvuPcFGgDjS8cHq4zuKyEckur9EVm2Wer+GRdY2v7i9ypxiy/Ej4qJCqJLIa5rtWHmB9Dz7IyFBAoGBAPlIMpu9vAhAhJUeO48vsuEDdCn2ztyq2h4GwYcuNmfZUAnFdKRHHAfb48P7nR1uVCEEvnJYF9uUFkot8zljkDCoqc3J30sOd54PT2Jqn2vPhSWpjNJGW4Ku3CmZq/vfCH15z+bcr7whtlEswshE31bykbZlzCOSyW1tgfz2I+ydAoGBAPM6iEV6M74X+M4GoVCwUn9JMFRUX/JONOu4nfNT+1jDeABeXzVS3gzLSMJ/Vk/+1a/g6NFm73bt5PYHR8jG/jrT3xcTBPUiFj038w1MAM5Fsj2jSnIFRYFxwH8q0RfejWvKJRyWKUyTt7m43VRY9P01+YDfgt+VoLs94rV0PNr3AoGAahmWoL8S5xg+1hE2HG2a3zbPHIVV6oo1qA4MFPNQaMcPz/jg+oLhpV6sBOB1MO+ikyMnxBdGoEjZa90+5rA/0NYY3+QKTDHuK7IsgaEMFaEP9MXDkEQt8uNmBbbIgr2dKXrNSF+p1JMsvEQm64KU5Lb92fpd9s4lOZQgfYBuLekCgYEAwNvPg6+S6Y7edJZjQLSepVjmHmfMsDd81M/NRkx4Bvju5PPvcDul3+UsazRGvyVkUJH4aVnCVL3rB33cWIIYwZKP2R72llyR37bGXOu/088FtsQMWn59j1cf+HV91/xajHZ7mMAkPRj/3B6OOLxUfZZXoO0ZO6nMCcvXQGPLgR8CgYEA2W644EHrSwb4qsDsUmIEeKnjSejS8Vej4S5/g1YOyVzfWEr/5rtejw09Fv4U92SeYhp7Xp3C0UnRCduZKrpXIZJVPO8KgWLDtPi9KvHqDPzpQNRHMNrsXLpOLLv+bnnymWXjcyG8fRecU4sggaH4r1C/QyLPr+s/fLDyVUt7bC8= + peerId: 12D3KooWGqJFMrA5NUx2Yn2rGPBUkz3bbmynsqLEmxdcPYEaFSiZ + peerKey: XZcLB5xuffw2Bz3PJtb1feFacM2fR9+q8ik9YgzHzLtoPvTaz1X7wVgxhMpxcrUJIywRjffqsuEPJ9d/5pFIDg== + signingKey: PNcZdEvKsu9LShQmgOhKHbBpO1uyHvEM/QO5PUu8rVMuSHBoGvFbcFZNNZ2beFgSr/N9EitzY81QQRoIh5c+Gg== + encryptionKey: MIIEowIBAAKCAQEA3fh3Bd/a3N+7aDwln5rJU6BXL/0D/h2bMXH832d40Oac3OARVxMpxpxT02I6y8uLq0pS41mjtIK4+QtBDfeV+GAcAgvlywu7Be1tM0I5ohMXC0hNnLUCUwOMcQx/ylOjzUdQHna9woZMh2kdhFowViy3KhA/ItR8YpfgTG8VP6DMXW+CxGZR0sxzBVpSGHxGgcdZnrWc5/4vyb5IhY/rAxefQa+lieoFwnTo0jvLBrLhyhryK7SBGd8uwPZRoYJaCTs2BpCrQ7Osc2RDtYPafQnm8tVR2elmc43fN0Sq86PdMl3A0XofCVVW708uCPiq950cXZnJoh1wQeNIqhqpuQIDAQABAoIBAGxo1XjBBBusCdO2zIlPB9UYEn0VjcWmoA1eJqrV1mPwvdwCc3WbnmOqJiavaxftqaFXA3SWayXWUpEPtg4kRdKw3f0B4pFwgT873oGSbqOBv1d7UKygmyoAKa9s81zVzMKNecvnInbHMMlRxWDGy6TK4gphNPTF4pokox+xgSc5cJB7cBtmIZo+8CQA5/q5Xm2W9ih1cRPullmVXuuQYrv2/5oDoBCdaiCAr5WTg4C8pHEOo6z+j7kp9Yeh7Wc4LmEnnCEJKKTbUcNk/pXclpVkMuE983SguyD5Sy3UIXRejSzt+x6KW0k6MolBbRGAlDbVAHxvqp7AQiAIavVCXAECgYEA5ViMqjawjpbIK39DOSozRqaBeFVYrfLI6mkSSQrZqpJzgBvfVo/DDwWP9FgX/TEjDWHBilfylmN8/dcuzJHgQgw/JnckTJbsfnWv71PTxI/YgGEF0L7OmePSY02p3jfHq5zwVg9yW3jPacLTLn99pVjchjShDyzwVjZ5AK2Dm/ECgYEA98R8d3/GjOi0iUacFpks9xlbu4pn7SfCFOBaq5a+EkXSauWMRuGaPbZ5NIn7rWygfPW6r/jZrmCyDbWSoPLsdlqb+oEc0wOCN0dshhMGrzdkZMxpy9GNt15+SDhwQZCK/FI4DdEmlvBkLUIUSySIWVDfwJHnddDHO3EhH6GgUkkCgYAf8mK9vxp+8j/11yddCiTUXZNBWNoeeOhFxtcWN520ZewS108X9rScHhE8Xx0QVszkK07TX4baLgeWMGhDdLqBWMVfLU9wH8HXp7sXIl0oT0VANMOjnUCYLST8UjAsVSbKH/VWd5ZdaYmy2MGkA3xUEPm+9AvPWlosGDBoyMLBcQKBgEOKO0ez/CLjOHuHVPtQDBLbxcbMxuG+Ccj5E55cvDls8RwUsPWNgCc8e7PXvVScHO+TaK2Zj3VahI76JRtcvRrSPly+H2ZiOXfqL2oo+5R97A8SLfDSkegfiRsUz3z/8vMvUnppvjQ9GYHA1plZPxXh1uy+mTLjk7vfbeEahQKJAoGBAIDbI7SL7MmWumSnPPwwxfQ5DaWwdn7yReWKUFlO3WFG9oN15M43NXG3zZoUsPdaeTNcvgDRQ4PmtZ+zQonac+obHNsq8ZZP7KjyFJNrrIgfeUDmdnW8u+UPxPjt1J4YStsLX5Ea+x5uE8qGWmK0xYCUkntBFgENhbD7qDokB1+q apiServer: - port: "8090" + listenAddrs: + - 127.0.0.1:8090 + tls: false nodes: - - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu + - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj address: 127.0.0.1:4430 - signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= - - peerId: 12D3KooWLtuKtCPBYrFJV1NdejiCr2s614ppe9rmUXnkTHtAUD5U + signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== + - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 address: 127.0.0.1:4431 - signingKey: 07JMoW5cQUtGO9nNIGQo9e99b7Wf/4YvTtNEA0lt4gCkmhwB1EB9ay+kitxVJJgmdyGLxbUUlGqwXsAj0zlHWw== - encryptionKey: MIIEpAIBAAKCAQEA7cA6J/icl8wseeXkt8oJr5AeYadUAG5EdCOdHj4S/Z7ivff4MOIKAeQITpq+rqhmXxOePYXSpQXE20Y9PW9tuw4gzOuq1ylSG/MWMcLDH1eIxg66rnmUqUbdiW4GGJjVjc9jvN0Up+MfSrUF6fM0jWTFoXVJQIeQQGERCIYjFzjfBl1xYvPghdxNgei/K5ZGYRggT28143XdIH4KTXGtp51hAKoyY9eCqYMtm9wvjxazhPVxO2CsYaqMxBLshY3jfHNqJnx8u6+h4Bl4uUcdbLNUgMcEgk7ehbQp2K0CqNoKXxbCTI6V57UVcJHDIaO5B6FyR6BguzHHNPJ4yd3q9wIDAQABAoIBAQCm2Mf3VRlPzhFIWnVwJXE2q8Umcu8Yfkm712Jj3twk8GPfPS4H4Bl1yjmqMB6xI6zz/CiItGlnNe04lMpVWuV+6CNMq/ZwmKbuxmFE+pFEZYGuvJd16gzR3tGJqJTOnjMAGhK8b8oXJ+TF4NQNooe20ol/DXgiuQAargPuH3RwzjYmF3N8VI4KUc3LaG4TwVXn4LwPOxrQSnfwJlZwLml1HAKOV0qcG0mXX6ZXOpoVhEoRPdQyUHc8ZW+53Agbtind7bYh5TsMVDFUrcgNwnwTOsWjil049la1IJO2uMRluacKlrtyzEp6zqrW8ZJO7mYAO69x4WyGqf2ZgIdA6djBAoGBAPqRHWAIgPa80eXbwCYkRtUG/ONBsQGi7+wm6nyhkXvNXJeokgH2DCgLH2+fW2scfOJuZc9r5WftEjOBvNfr2LDcwdyTSTh21WYcPSZx9HDf2d5/SWTcjNcyU0b5qfWIUKi/Zm9UY7r3X7yMA5dUD/cvu1PBJ5NWFrK1Gm2ph44dAoGBAPLn+LkHweU0fbxQq/76T5yVVpMKUaE9xwrJlUxEDPAQGnLPbFg4JeUt/YPhsOV85W4c4oQE+uFZrF0uf+1fEnS6MOJ+sq668upzC2hBp1B5138wM7615v1rvXVVH6qXfFop67FdBzPHt1NAN43mEIBZHTQ5hSVXFlYSZp9mxuEjAoGBAKCzUVO2IIAeub/iIGpV+dfGk4ptJ0kVZyreCqXEObpdC3V496uqUkGcYJ0GZ2ta6f2PMFzHpmnw8it2mdchu+gyrWL6U4uTK2pB0jZF/7Ak4WaB3GCD0xBxhleO6CJBOvn/R4M/bHcNEKmsYuE7WMIAKvScfPVR0VzsKfcLM5VBAoGAVvWg32zdh1bBZLdku8WU1rPH6KAbFSRuq3f7UPBTyWWaclu7p+GB/4f1aE9V6vJJmKASn7zArAhUYo+REMOmcc9uTMea5F7dM/23qb1HTtIvycLR44ZviW4Wx3iP+5x70jOLw1VQjMME6HLm8I/afHhqshWdiv6ganPv9UTwEg0CgYBSDi2dqg8F7ij5CN+LMDLSn3b8GCw+7efGIt7imm/O2V/FlHD40IA6qGg6DXNQrnoZQt94nMb1cZEvm1dxi6rmQNrhCyoMogAaPqgFhZGq1OjmhVZiXFUWy4WAcjdzFc9wZd3/XtaofRKHLK+ngTFhhVApKypLk3Rg9bCAAjzyVg== - - peerId: 12D3KooWDCypXSyN6ppuMZGxVnBd1ZQCMV4y7Bn187S4duYmf8rA + signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== + encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= + - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF address: 127.0.0.1:4432 - signingKey: SGyNE0dFaQgtgNuzdcO7LB+TEz9VHAOtlQLk6WWkrkQyXiZV3casg8Q2/4PO1Oylc8Fu72RU001Hclj5JCbiLw== - encryptionKey: MIIEpAIBAAKCAQEA0k3mw4FyexRkLgLjHzYs4Ppeyv6r9ZrP00imNf15JTuM8ajMx5oJX7JQTm8KOLRJjUdZZAd5Gtp0ezfYAQK1ZjEWwCmfp8j8FBgJIDSLpjxl88SXMLgATXYfhklnQvKlQjs/X3Ka4zdTrav2tMH9IAo6TSNZhlPQNsUory1SGHs+KqHv4p0sG8oWuKYhfBj8rWHQdUVptkIBKgojFDeJJD04Tbf9kUakbK/8KuXB6zF5H4WN3p4rMMwkClyTGeYO4LDg5TzVn8NnUi3/b/vO/3us1G/TMoRe/6umUfpQxrwo+7S2T6A4YwetWRp6xALLhp+HfAWnn0lA/D8/w1WpKwIDAQABAoIBAQC5cdQxRa5rddm48PbSCPWeFWkNW3DLDI6CYyedqDvxZwer+QtKXzww1I4X+7ZptiC9odLjb+uMkGHyXZXtnjPTPyounQWZ8JLILUGu0mbqWYwVXp9raHVr2OOHiKaz1D+BnbkOM4L9JUZ2eJL9ZaoNXLd4WdmRp8qM4WI0xqQDzOANx2HhyL/+dJmQeIUND+pdeH+Z+fYowU3ho32txNvBnMXQhF1T5K9i1VO5W49RAjIRbENsT+paPGKbNubDHRt1j36ktK4eC4HSdgv8tccdsGyrEiIbAt1XsTZfM8ie4D3A8RhSxiTC6Fkgv6vIm+iFTLzBFZKesOBcd8sfKeyBAoGBAOts5PQQJhldPDzlbnqzxMOR98WHbkVZjCqWSkNA34vqyFuPcRuX0rHK/qpg23ilbUP0fGMDTGgFzTt51FZLL16SXyRfjNhzjdmryryeddQwbp92ta2GEgnU6t1FyCuSCtcLDKJd/D9A9dC5UI6z+ES4TOnbR3nakXK9t4cUOFthAoGBAOSu+wL+SEA5erR+m3LpOsELK68CCJQPxn3VpoVfJZawgF+fEoXVMLTERxJput1+ADomIEdNc9ex86TjKx9gJ4piNHscRPFeT/AgESOIGHLOc1gk2DPqNj6wBIarUJQ9t4KcHScboh1dTPJeqqv2NSwIiLQoqFUIhfKZLnrW3zwLAoGBAJh0hC+o5YM3ZXLqAIllMN6VACbidP5j5ukNOjojIKCzAdyJH24G+2I3WoNrBbUzK3b+NC7KTAhw+V6ynlbjiWFs2D/twH/LFOkI3tkWpKcsVfbeIPimAbhsMUvpjJ7qjCqF9UCQLHGp14W6+/ftg7C8yNIINlkquVXclaTb60MBAoGAPqmL8ogG+EJH00mWAujRxq/u6meePiQMedKfbJBj1mTK6GjIRI/kZsQZzXvXTnYGTejAk4kvov0KDDaLTG+mpg6+3rUiVxlGwj+nMptKR7s2dAK0k5UsBAVrWBN9YwF+VXW9r0etJmq4ePljvvcaHtS/0M4LQjGxsoYy7EoQpX0CgYAhnf0McB7F1MxSjB0soMNv/v5utVzVihS3re2yKNdkI/YUEMB+yU3Q4gh+OljjBM6Y5To3BsQBAx4l2CysMKFHjIE/5AtdbvIS+chZZqB3vcZXSayvX8P1Z1uFdw/saiO2cRDJmR+TxaOPa2C9SzDoNTACthwLErHfzvEvVroKmw== + signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== + encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/client2.yml b/etc/configs/client2.yml index bb8d6fbd..5be56006 100755 --- a/etc/configs/client2.yml +++ b/etc/configs/client2.yml @@ -5,25 +5,27 @@ grpcServer: - 127.0.0.1:4631 tls: false account: - peerId: 12D3KooWA7AHfBCyNPQaMnffj8S7Z9kZzKG6X1apLgtyP1CgpXiJ - peerKey: +KIj+xVyg241tP2So4JmRNGFFIgtzK1PWUo8El0e5x0ETXCrCksPkLsA8s6Xww0DJy92dyISwoBoMQ7XhLbdOw== - signingKey: +UF/Do2KPeBLA0joKvnJj43jiH975JcHGjkLIkLR0p7FCFHnR1r/w4xLSa4RTjhEAQ3sDefjktShOJpalXnGvg== - encryptionKey: MIIEpQIBAAKCAQEA7NiHF065o9BfTTAWtAItg3KLqvFnRN2WVQMkjMZ/BukIj4UAd196ppexh2tnDvvqW53qVxFtXcW8oFqX9GmDJx61nnN/ce2FhXNB3aPMa7g3AchlVVB9RHyS8Z49HTkn3DVRi8I8EnbpWer35BjnpGOQ257O/kFpD1P5FzvxyTQ2gF50SyiwoDzibyT2VxgQqaDErr9BfFQKBZb8SEBeLACOlzjb2u0mCv7NeoZNfzl2KsqBC8tiCyfNahhauGfU9ZB7PtHMC1pJKTtPhXhNhQI8Rp39dd+Fr3kiTJl3Fe1f4bg4GDI7LbqCARVBbtCjsLEMi1BMzMS63bFPrPL9ewIDAQABAoIBAQCA261j+Oj3Pz8ad7diaGzqvz9N2dkdlpFb30HbdYNW9yI5M1t1lvTb/lwQGVcQx+5RujDs/gZKpnJhq+hQibdZaVPWyW/lRB0I5hRHyf5F/QuwZJ79M7VztXMdEcKeS6JsJHYhW6PjR97dlQEZkJM21RTS6CwmGOBX/o/fHDYICNxIqt4x7x1Hu+A9Qcs3LWvWq0qAkO48jSYBDeIFJ56BdXZacfIv9A7aCGWoVvih2vFIFEwdn+3z69FHmcW8JzVDK+WdkegtOlvuPcFGgDjS8cHq4zuKyEckur9EVm2Wer+GRdY2v7i9ypxiy/Ej4qJCqJLIa5rtWHmB9Dz7IyFBAoGBAPlIMpu9vAhAhJUeO48vsuEDdCn2ztyq2h4GwYcuNmfZUAnFdKRHHAfb48P7nR1uVCEEvnJYF9uUFkot8zljkDCoqc3J30sOd54PT2Jqn2vPhSWpjNJGW4Ku3CmZq/vfCH15z+bcr7whtlEswshE31bykbZlzCOSyW1tgfz2I+ydAoGBAPM6iEV6M74X+M4GoVCwUn9JMFRUX/JONOu4nfNT+1jDeABeXzVS3gzLSMJ/Vk/+1a/g6NFm73bt5PYHR8jG/jrT3xcTBPUiFj038w1MAM5Fsj2jSnIFRYFxwH8q0RfejWvKJRyWKUyTt7m43VRY9P01+YDfgt+VoLs94rV0PNr3AoGAahmWoL8S5xg+1hE2HG2a3zbPHIVV6oo1qA4MFPNQaMcPz/jg+oLhpV6sBOB1MO+ikyMnxBdGoEjZa90+5rA/0NYY3+QKTDHuK7IsgaEMFaEP9MXDkEQt8uNmBbbIgr2dKXrNSF+p1JMsvEQm64KU5Lb92fpd9s4lOZQgfYBuLekCgYEAwNvPg6+S6Y7edJZjQLSepVjmHmfMsDd81M/NRkx4Bvju5PPvcDul3+UsazRGvyVkUJH4aVnCVL3rB33cWIIYwZKP2R72llyR37bGXOu/088FtsQMWn59j1cf+HV91/xajHZ7mMAkPRj/3B6OOLxUfZZXoO0ZO6nMCcvXQGPLgR8CgYEA2W644EHrSwb4qsDsUmIEeKnjSejS8Vej4S5/g1YOyVzfWEr/5rtejw09Fv4U92SeYhp7Xp3C0UnRCduZKrpXIZJVPO8KgWLDtPi9KvHqDPzpQNRHMNrsXLpOLLv+bnnymWXjcyG8fRecU4sggaH4r1C/QyLPr+s/fLDyVUt7bC8= + peerId: 12D3KooWEmCHgpYfEWmG558s3TmhKX4ieegQykUJpcLKtciWfwJh + peerKey: +6iFHEa4A0gHQxXmzxNv4J7TAiPPlYuOUWk7pb4WvVFJeoVAydioJiY78tm22pceORFqdPFJLHcZN2kDZPYjOg== + signingKey: GghASlDw/5ei2CgbNekiRqKzuxbg0+WcdM2c9Hsy1CVjmB11Hy5AmVU+YGdwliKdgz9szGOOCCNo7Rr2IPpZsQ== + encryptionKey: MIIEowIBAAKCAQEA7sdDktnmkrDsXol+M2gdCZsNKmsNu3LwlSeh/PaQsqL8yYl11I/jUYjKTZcdZkeXiplEwyEgTO8Le+LUZIh2urVwiKcRhC3vMBJiUkGp2gSC2cAsua89593W9hntJI2NhExBvG68vEABz19Zs13w9y4pPOw3FJhEbPZQUjMJPQ+VKN/3tPvgChlJBtAYDGqT8NcUcLXMsCfNWHVPIvL4S3ljdSP6nImtnoMsN7abymi0SiMhQc5ck1Gs80LlReaSmslUHZMkn2K5POu0Lx1/NVJT4LmHIBgOvWZiSTza3Zbth7UavfOPvEMywQwSohsFkx1mVp2EY9CnrHVyu8ooxwIDAQABAoIBACy73CcI96+HweC8NY5/9OC10bOetsXldLkc4bY4o0c0TdOcEx0tj9LYo74Bj5p30yY+LKm57Qk8x5QAHPZwsn2sPFb9pcRzrpn897qdXqrfqXwOCtMGx7xGzVzx4oG0m0yr1KzuuiEyhKRLIsz9zoUges1VG8SZ+kfHpaigsxxjEFPyjAXqodWuUcexaPMeh2sI/S1qT9aKCqYq6ZzUo/yyh0E92jQOKcS1TViY0hpnFmpoFCjKRJQ0TSZGOjJMhBm3XlS74Bts+Gnnc53sX/u+ae7//yaXjXnkPmqz71Glf1sWAo42jwfIKzPpwgcpVCnMtau8pRyTpC5obQ/nvKECgYEA9MuJStZCHQ+KQNF4qia2ZVVSZGE0Cv4kJ1GbAxDuQmeHd6toPoxbc2QuLQAq54xwdLv6va7dHHJYpkDVFqSrFOufArGCUI4iAv2mLR9flcYjO0IJ1uFj/9HXD7lXfgJiNtiCL0wd4TQQmqzV0jSGfkN3260ZbDy+M7nbG4i1u0kCgYEA+bU5pvsG1FyCndRyOrg4JzxOrleo2Hzj471CovrT3K+O7MB+kkf35S6iLwIKVY5iprECWKFcpIi0m+PGE9eC/8kH31O//r3e7WYZAFcCIs/WconhDw9RGfDR6XTzNPUgbRzCde1+1c6QMP5MkA6ZgUhfXt4Crf/GQAeGIHs/M48CgYAL02FYii07diq5ouTvY1tgXdTTIJcBCPH6LEkOxtybvKCguVkZ3HH2ixpn9iAce35bRVGBpFbuLt/1eCBTLbVOF2vhF24yMguWlWZXu7JEbAP7st8C0HSiQSLgkZWWcssH10HCwyyWWouKzVqvAvaUVvINXLljrzOJECtzkxEkcQKBgQCVNeZKUivlj5X5K65KSjQ7tbyqTvU0z4P5XOlJrCoW78yuyeOYE2scxn3hKw3zy85FHvZw8ZMDOjD6CeQdjSTZJU4P8+KBHQHtx5le6576IElbTepu7k8e+hjksJ53YZZLvOiyQQUOS407yWkEl8TATPe4H19oi7LyJczO8fZ1HwKBgFJiABRKJkGWpiMsp9p8QvHG0chZiKAbZ8Qn9dJX+ymwfqerOxcig7dCIKHzMeOQJPImArjzW6jbiQKmXYTZwcc708/bXtiXAf6YMD07KaLd4Y0PsYto/lQkFjQrhTLHS4LxapjPg5nYBrhdF/8rj4vUQgLCxn1tL2CLlrutPrVX apiServer: - port: "8091" + listenAddrs: + - 127.0.0.1:8091 + tls: false nodes: - - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu + - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj address: 127.0.0.1:4430 - signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= - - peerId: 12D3KooWLtuKtCPBYrFJV1NdejiCr2s614ppe9rmUXnkTHtAUD5U + signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== + - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 address: 127.0.0.1:4431 - signingKey: 07JMoW5cQUtGO9nNIGQo9e99b7Wf/4YvTtNEA0lt4gCkmhwB1EB9ay+kitxVJJgmdyGLxbUUlGqwXsAj0zlHWw== - encryptionKey: MIIEpAIBAAKCAQEA7cA6J/icl8wseeXkt8oJr5AeYadUAG5EdCOdHj4S/Z7ivff4MOIKAeQITpq+rqhmXxOePYXSpQXE20Y9PW9tuw4gzOuq1ylSG/MWMcLDH1eIxg66rnmUqUbdiW4GGJjVjc9jvN0Up+MfSrUF6fM0jWTFoXVJQIeQQGERCIYjFzjfBl1xYvPghdxNgei/K5ZGYRggT28143XdIH4KTXGtp51hAKoyY9eCqYMtm9wvjxazhPVxO2CsYaqMxBLshY3jfHNqJnx8u6+h4Bl4uUcdbLNUgMcEgk7ehbQp2K0CqNoKXxbCTI6V57UVcJHDIaO5B6FyR6BguzHHNPJ4yd3q9wIDAQABAoIBAQCm2Mf3VRlPzhFIWnVwJXE2q8Umcu8Yfkm712Jj3twk8GPfPS4H4Bl1yjmqMB6xI6zz/CiItGlnNe04lMpVWuV+6CNMq/ZwmKbuxmFE+pFEZYGuvJd16gzR3tGJqJTOnjMAGhK8b8oXJ+TF4NQNooe20ol/DXgiuQAargPuH3RwzjYmF3N8VI4KUc3LaG4TwVXn4LwPOxrQSnfwJlZwLml1HAKOV0qcG0mXX6ZXOpoVhEoRPdQyUHc8ZW+53Agbtind7bYh5TsMVDFUrcgNwnwTOsWjil049la1IJO2uMRluacKlrtyzEp6zqrW8ZJO7mYAO69x4WyGqf2ZgIdA6djBAoGBAPqRHWAIgPa80eXbwCYkRtUG/ONBsQGi7+wm6nyhkXvNXJeokgH2DCgLH2+fW2scfOJuZc9r5WftEjOBvNfr2LDcwdyTSTh21WYcPSZx9HDf2d5/SWTcjNcyU0b5qfWIUKi/Zm9UY7r3X7yMA5dUD/cvu1PBJ5NWFrK1Gm2ph44dAoGBAPLn+LkHweU0fbxQq/76T5yVVpMKUaE9xwrJlUxEDPAQGnLPbFg4JeUt/YPhsOV85W4c4oQE+uFZrF0uf+1fEnS6MOJ+sq668upzC2hBp1B5138wM7615v1rvXVVH6qXfFop67FdBzPHt1NAN43mEIBZHTQ5hSVXFlYSZp9mxuEjAoGBAKCzUVO2IIAeub/iIGpV+dfGk4ptJ0kVZyreCqXEObpdC3V496uqUkGcYJ0GZ2ta6f2PMFzHpmnw8it2mdchu+gyrWL6U4uTK2pB0jZF/7Ak4WaB3GCD0xBxhleO6CJBOvn/R4M/bHcNEKmsYuE7WMIAKvScfPVR0VzsKfcLM5VBAoGAVvWg32zdh1bBZLdku8WU1rPH6KAbFSRuq3f7UPBTyWWaclu7p+GB/4f1aE9V6vJJmKASn7zArAhUYo+REMOmcc9uTMea5F7dM/23qb1HTtIvycLR44ZviW4Wx3iP+5x70jOLw1VQjMME6HLm8I/afHhqshWdiv6ganPv9UTwEg0CgYBSDi2dqg8F7ij5CN+LMDLSn3b8GCw+7efGIt7imm/O2V/FlHD40IA6qGg6DXNQrnoZQt94nMb1cZEvm1dxi6rmQNrhCyoMogAaPqgFhZGq1OjmhVZiXFUWy4WAcjdzFc9wZd3/XtaofRKHLK+ngTFhhVApKypLk3Rg9bCAAjzyVg== - - peerId: 12D3KooWDCypXSyN6ppuMZGxVnBd1ZQCMV4y7Bn187S4duYmf8rA + signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== + encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= + - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF address: 127.0.0.1:4432 - signingKey: SGyNE0dFaQgtgNuzdcO7LB+TEz9VHAOtlQLk6WWkrkQyXiZV3casg8Q2/4PO1Oylc8Fu72RU001Hclj5JCbiLw== - encryptionKey: MIIEpAIBAAKCAQEA0k3mw4FyexRkLgLjHzYs4Ppeyv6r9ZrP00imNf15JTuM8ajMx5oJX7JQTm8KOLRJjUdZZAd5Gtp0ezfYAQK1ZjEWwCmfp8j8FBgJIDSLpjxl88SXMLgATXYfhklnQvKlQjs/X3Ka4zdTrav2tMH9IAo6TSNZhlPQNsUory1SGHs+KqHv4p0sG8oWuKYhfBj8rWHQdUVptkIBKgojFDeJJD04Tbf9kUakbK/8KuXB6zF5H4WN3p4rMMwkClyTGeYO4LDg5TzVn8NnUi3/b/vO/3us1G/TMoRe/6umUfpQxrwo+7S2T6A4YwetWRp6xALLhp+HfAWnn0lA/D8/w1WpKwIDAQABAoIBAQC5cdQxRa5rddm48PbSCPWeFWkNW3DLDI6CYyedqDvxZwer+QtKXzww1I4X+7ZptiC9odLjb+uMkGHyXZXtnjPTPyounQWZ8JLILUGu0mbqWYwVXp9raHVr2OOHiKaz1D+BnbkOM4L9JUZ2eJL9ZaoNXLd4WdmRp8qM4WI0xqQDzOANx2HhyL/+dJmQeIUND+pdeH+Z+fYowU3ho32txNvBnMXQhF1T5K9i1VO5W49RAjIRbENsT+paPGKbNubDHRt1j36ktK4eC4HSdgv8tccdsGyrEiIbAt1XsTZfM8ie4D3A8RhSxiTC6Fkgv6vIm+iFTLzBFZKesOBcd8sfKeyBAoGBAOts5PQQJhldPDzlbnqzxMOR98WHbkVZjCqWSkNA34vqyFuPcRuX0rHK/qpg23ilbUP0fGMDTGgFzTt51FZLL16SXyRfjNhzjdmryryeddQwbp92ta2GEgnU6t1FyCuSCtcLDKJd/D9A9dC5UI6z+ES4TOnbR3nakXK9t4cUOFthAoGBAOSu+wL+SEA5erR+m3LpOsELK68CCJQPxn3VpoVfJZawgF+fEoXVMLTERxJput1+ADomIEdNc9ex86TjKx9gJ4piNHscRPFeT/AgESOIGHLOc1gk2DPqNj6wBIarUJQ9t4KcHScboh1dTPJeqqv2NSwIiLQoqFUIhfKZLnrW3zwLAoGBAJh0hC+o5YM3ZXLqAIllMN6VACbidP5j5ukNOjojIKCzAdyJH24G+2I3WoNrBbUzK3b+NC7KTAhw+V6ynlbjiWFs2D/twH/LFOkI3tkWpKcsVfbeIPimAbhsMUvpjJ7qjCqF9UCQLHGp14W6+/ftg7C8yNIINlkquVXclaTb60MBAoGAPqmL8ogG+EJH00mWAujRxq/u6meePiQMedKfbJBj1mTK6GjIRI/kZsQZzXvXTnYGTejAk4kvov0KDDaLTG+mpg6+3rUiVxlGwj+nMptKR7s2dAK0k5UsBAVrWBN9YwF+VXW9r0etJmq4ePljvvcaHtS/0M4LQjGxsoYy7EoQpX0CgYAhnf0McB7F1MxSjB0soMNv/v5utVzVihS3re2yKNdkI/YUEMB+yU3Q4gh+OljjBM6Y5To3BsQBAx4l2CysMKFHjIE/5AtdbvIS+chZZqB3vcZXSayvX8P1Z1uFdw/saiO2cRDJmR+TxaOPa2C9SzDoNTACthwLErHfzvEvVroKmw== + signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== + encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/cons1.yml b/etc/configs/cons1.yml index eea98cc4..c125ad77 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: 12D3KooWA1MZaN1U8NHDnkvbN5wsacRGvbn7dd341S4pAzXofSng - peerKey: rLHblNZKOvJxnAKrwIlxkWy70J3aXDiCYVr8iV+PyQAC0LQLKUjXGJzqOdS4tMU0UUPGNo0VQx8q4YHqqt3KLQ== - signingKey: rLHblNZKOvJxnAKrwIlxkWy70J3aXDiCYVr8iV+PyQAC0LQLKUjXGJzqOdS4tMU0UUPGNo0VQx8q4YHqqt3KLQ== - encryptionKey: MIIEowIBAAKCAQEAyzE3C3bWEdKCJ4HbBfP0psg34ZsdmiZcflOu55aLLnl2ctzWv17SO6dU6C8XEoVtJA4V+tvfsnQTro6sIy7DDcDpGMnA7HmLHzK9GFKQyC/9EzEFg6s9F4A6ZkW/hyQNNfE7NQBokJj+uvSXzw7wb1b535hvg+o+ZPdeQQfcKFIqZKQWMXOHHSseVV4JH2kJ7BNgvmRU1EEkZ/l9FmrdvDDSUv+SgLz0ogESQv3yR/bwwa07BVaMCAdwAMZAcD04KUjEGpEmHfsDERYRNGvOJ5bnJSHTI9QEow1P53CtOMVQ9Ak3YhqyycGtvaVmrY/CfnFJzUbb8IDmvgW6jw/rrQIDAQABAoIBAD38mJdFvI6ZUp1szv1k6/jJUcrggEpbc5ISQ2RhF7qo0Uq/NkARVD9gj9V5MCe1TpNWPLxXwUl2gd6Zpcfh5x1WAYZPXiyF87wjxW4bGhIIGcN2DAGcBroZozc6BfDbPbB8FBzaMAwUsHkmTv2ayByfQwFERpjOqBQzJqzeEfq2cxFovcQdyhHk3WmfH1+zrGENs4IVVmfmIG1LzXehaXJ7jHqlryyKyKpUmXOmymEtSB5It60pl+9RNNlaez9OzreWgE4bQaeQU09I8105YdIISmvZWGZ6PsBo3ma+Rj+si7zYGLF5CsbGxT+U9olpiO/DW+UbfrDHy0bAArlDOD0CgYEA5dI1b1GDwAifd4fR6Zv64AMFAFMo5hWW1EHsUtXVo1UD0IgheI0oxg4aqs93SkL7uMVrM5rKjfstFcpWfaSfzy38+8mneRsbsI4d17RR5g0F4D+2/uLRYRRU74m4ThQjfP6wf+eDAM1+rdmT86cyQab5y1VU9hqd159xCderu+8CgYEA4lZ77Ygdy2mHmfdzFyQ6eJJhsC5FoapJWnaw7LISEiJgnAun+qeIl1r3yFbuNK1Wx55qfdvz4v7X0KJV8HwFgpxzT7CoUybT3SncItWPwi80tq/lxklZvq6LUeOiNQrpGvECCUrPQ3Wdl0lcmOiUw1GXliAQEVdzBOT+0hGMZiMCgYEAtZ76O47f39LwszXS3hs2l/HK8gbGO460M+olKRF0VC/LY/ExAmQL5Pkgefya+UUWSV866P1bNflaF+5fi8udv81IMHOctkiGCXFGhEEst/Fyw1WW+LenYGEA/oyH6qxfn1hng60iCnBbvGhGVDe9r8SVg+tbyWIfe1e1rWGThmECgYBltGkBpn2E7wmw5OGBj5T6owRkj5ZYe9V0YgtEgQvfvDTfSdmUp32YTZc0HePyJcXt80B1B8ZCxTMjHB8z7fbn5vdl4sLwgm0HX4z81ixAHMg6IzZD8Kf0KCiQhpJX9Wwj4BKDLGuQK6TB24RRbYmTbvGH0yaFNF+J3oCm0p3dMwKBgA1TTXLpbL5lnBaAaWAHYSV9rtqvBkyVfcnB9/Ez9MNSBOQIbk82w9Pb892qjcNhTAfgRNrYTd6JZl8Sov98T0OJW0uMHFV04NSqo+RLQTaGjMfrWQ2ZWfSM4tFkoWA2mFh+R8VblzTJObdu1zDyuVYscfTv3sFnV/QX+zJWJipB + peerId: 12D3KooWPsSPX6ePtB3fzp2MAvc8hsApVN4qM8XsvvYxDaskFLuX + peerKey: TRRz2qmTsqaihHfeigB1JKAhdT2H4qHq3SODHzK5pXjQzSGaegmSBCuaqdeMjULymDhxczVfzqHUUfTfBIBj8g== + signingKey: TRRz2qmTsqaihHfeigB1JKAhdT2H4qHq3SODHzK5pXjQzSGaegmSBCuaqdeMjULymDhxczVfzqHUUfTfBIBj8g== + encryptionKey: MIIEpAIBAAKCAQEAxZDAWVCZfI7t0bs+vmjxZv91e03SGvCVSrhAZZmsVtz+gcqkMdYFUs7qA202G7DDpNWoz0NNraMLho5nYx84EDkPxN+BLiDz6QgFCLArViLYVqc0xwoULecCHPENMISs2bBZ+VoJeGEW6tTAZ6ORaDUn6XNbCwbdlgrwBMU865R0tIQuKJqqfY6QzRGI0vxXnkMOZ77euZxPv5KTCIj7cGwDW4zAAyeryc19LPeTO8oEP2bYBvOXf9UZzspQAw22c3Bf2Bkvs3Er5VKYmeqTZ129zFddisF6CGhYgYEG1WczQIsNXXEihjQV+o0eozKHNHWi77j4SOwam+bzDy6TywIDAQABAoIBADgEQOWSGtLcW8X5x2KJsti3WgIqIIaO7GWRNIEaP2kpo+f9Iu0Wd8/w5x0tnAfh6LcV9ZU+ygmPjzcJrXrHYUgIRdZWYPRJV58dLQA3ozH7E0gOhMJiszIIq+q01j6Jf9EBVaGDy+eb77mJtTwtfo8Dc1uX35qSycU/OKrBmfJZVy4ain13kFwLVDCU3nLhl4heE9+MI1ay6FVyCvAYqwYHNHQ3SrhXtryYDRULi6XKmj2EoTntXxQ+lYn6HScvbQMBwT6COaPMr5/Kwi1ZQFoNr+GQE4Hx2yGtlmUCQiL4WhweXt7SXfEIoWTvVgBtE+XzYM/9e3IAi46AvcpIgIECgYEAyc/dO8nKvtfQtinizK3oGW3zqAO8ZOpqnxmTKIzM9u2KJoSCARMpAF5jNSzWJfWejcIasyLba18zWtwtsh21MoN/8ds7J4sNkdWzQBcOh9WHk//mWo6vu7UVv1lmmFQAw0qqXEyjw9WWZLBOG6QivOQK64hiRn9ZIhBGX6MJKCsCgYEA+pz9PH1CE8VSgJDtckb4KQAm5JdQcK13FUvykhp50Y4e+EOGFxYYatRwPL5aAyWgJtSaRpTQi/3WGcGnZva5XQaT37KXG2PKPyfBC039/steKyGqR95D4EciUs3iShAQ0Ef7C/nVRGl+Dh+4kKcDYwBwWrjkoW19g0NZpiUN0uECgYEAgqtmccnszrjqWKiyQxjvSVfaBhW1LBpkQvPKRt0z8UZIxzvQ+WUwjR6QWePYHOf2a48cvpR5QgJ4PAKIS+XUZwqiEzWCDc6JUL3vvDWxoN3vVTLCMixlOMK9fBIkzcjGXazAtdahyrFHGZbWXCtgmrGFKJA8Ia1fRyEGj/H+gdUCgYBYbBmBRSSSOzW/vOK6RkX6mV4fmy+7gciZUAGXARZoFH/i0lg2PwqAbtHm7LZvk8/sw2hnbMwkCHyI++Wnk3eVVePIsodUF6JdJBadeXgbdP+VsjwVPVuvfwmiM5gaz45PHoZ6FDzl9V6Pdyu0hejQ/m+l4sRwHGSDcrjnwP0eoQKBgQDIiMOgEcihm4JiV07eHI4XiUotlW8/N3exVEsNLKNO0eHhmUv1fjsTd1+lWTo6qIP9eU79WOVeF5BKa0fVUMJhBc3f3VZRJ8DLBijFIsTqRIsT9mVMXSkePsgKv3o+rBnvQsExwqO80NgHX+HIPR6afYmt9Pe+Z1DoRitvrHe4NA== mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons2.yml b/etc/configs/cons2.yml index 48bc0bde..7bc0291a 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: 12D3KooWKyYmekF5ongQGMwBgx4ZsPDQiyFjHtd5ZfKGsoXTYY7h - peerKey: jRWkSxzPtg8SF3rJ7oqhby6UvS6fnWGOO2GlAePHqkWW7xWHE1XC2R8Wt0E/4sFVhpam5OKqyIm9aDsWiILHmA== - signingKey: jRWkSxzPtg8SF3rJ7oqhby6UvS6fnWGOO2GlAePHqkWW7xWHE1XC2R8Wt0E/4sFVhpam5OKqyIm9aDsWiILHmA== - encryptionKey: MIIEpAIBAAKCAQEAy3UBKE5OifVxeU60KbYUQ9OFob6uixxauUVn8cn24ZX9C2qPAMLQGTYBcWp0GKILqRMgcDmDV1DXF4dNzSYQE4qFDvQ0C5ltoV9vDBAxhyDEN6nftD4K2vvn+fBVYYAXJp//I/2YcdZpOzu7KFHPst74tnFZB1+7LX0oGToGzevFKgqmvoQ1LUj7OqWnINBz4jA61h2WMp11j6/BO71kEeMdeMJyhmO+w6oFlLhd3b6Vsqd/nIc4SKh0yS3jdn+OchgQEMHvNL0KrvExPwdnzQGtU9E2nrf193loeFoCZayX29x+aDgTah2V8JlcN2do40q9h3dJJ6FCgJkk5gBz8wIDAQABAoIBADy0Ym4GP0TGaN8K7pJrc0xxdjO2UxnKkf8piEQKQJE6UU/wsU5G0hRTmsaePpmC7/u4aztQzbFlu2eXxUzqiG1sLRszHbxAQQefE+EDi+OHkUQSeV6sDE0eUC6w2KjIsR+jKVsxtSRyFt/HiKYVEuWJxaeZ1jhvBcgiya4NNC6IG/wS4JYG5iPs8QZZPDT+geR2y1jVQdttchVGxKbthMxDBPfSlG05QFhb/8frCfS+jqBHla1e3UhBfdlA6elZW+IxOoxoKvLLZtMrI5+3D162ZBsfoIGXuME3YqovMBdISnRQBbQ9gsSZlYQsosWofSd2JPxVOm7YdOmOIo4sEcECgYEA3F2W2vQLdxtJ+RaLPrGICtNTXwkP3Fi5KGT/QFGCguJpGo1Z3sGgL6dvD0iKBBCTcmyDj3eBGYW80B/2J+tRiAt/0ME413Pfa6txl7LgKNDlFgAb4/ycth0TocQQE2oL1OawHBr+BiE2b5IbIOyi8wsaQNdtORYzRLS9clieWKMCgYEA7Ft1H2/HAQMBOLeyyn2LMaPkewe5TM/6K+CoDA9orcoRmZ+B3ht2iBkcJE3Efa0c2YDDbL3GENfUzzntF91auyC/aKI3A8MxBZg/6QEiTytgcvbCSeXkwZUCJeNr+BAFLiWOE26sg8P2cJPT5JfjgPkqA4dLWvqwvMFe9LcInHECgYEArVoGSToAJvNVrthYM7puva1egX1cd8dn6OoCjjNQyuuXKOcXUo/ZFoPNbyVuRSJRC4tntx2Ydl5pmQP7nY2VdsMtCihmMb8ae9XDp0V050blX/g3+JKJKQ4YmoHk75DVu+a5lXJ6cJICA6TZKH5e9Xi/b1DIwEbBkAPqoCAseKcCgYEAxSTj5HzPeMCQ3EYdE1j0KUuS4CvpG3C+MqsIgEa6AXtygrjREfnGPG71UjKrmkgysBj+6EzCUHo2P0MJx8YST9NY1GW5jaHZ2djMNgWEIJUFtd6s4Aapb+5iBEhVXmu+ZmdcwkimDKH/hJdJPnqSgJlTue23pQNFN6vzEBs7S4ECgYBhY2YJL22+btVAYR6g/pOkn+50h8S/TtEH+NUL0SKnv8N96WvoBjUJapgNNrWPzzUgmGzS+uSweSTGM5LFeidNU4tEHZ1yNt7nrlnaJP2anGgVp3JcvNQiy1Ffwvs1efo0c8Tc+fORj9V4fhdctpSAoISETDtoGcZbQjUtB/aqYQ== + peerId: 12D3KooWE7bvg6GgoJkfYBwAQYb4a4kcp4Lwsp1ihAh7G246sZDN + peerKey: tbcXH39s55jQorh5ShxFRcWjOr0Dmrr7zth8wuvc7DQ/2S1RbwPZZnJm/EniVXbjVrBeAgvu2sRJ8Adnh2nTDQ== + signingKey: tbcXH39s55jQorh5ShxFRcWjOr0Dmrr7zth8wuvc7DQ/2S1RbwPZZnJm/EniVXbjVrBeAgvu2sRJ8Adnh2nTDQ== + encryptionKey: MIIEpAIBAAKCAQEAvCsruS4iV1RE3cusy/0+ik2A4Anzl+WWNK4/bLKZZ+uIVr3dh7sp8OsRGkYF4hXscM6I7llmIJfwIurWcMbj6q8Vth0ba/KmUNdza2A0A5opbVBS5aDerbDGm+C9Q9qZr2w9xqo37P9FJ03Y1EMAer0MjZ8yUMMiVvyLcwh3hCd5AgA0xC9LJyXf2mjQY9zvf0OYei3/Y/2diNB/HGc5WpNUG/N/Z4ZyIWZemPvTF98NF+8wGGB1JLBlHwLGZ7GUg64na+ntlig58feGbH6N5K+qPyvqlz1FC7c3iZdOYClqxXAojeOGqZvEi0TvZRr20UgGeep9GUPGmMTfnW6GpwIDAQABAoIBAQCXbRZum5W/OW2CH9oa/t1JZz2DDf8eCgBqvJ8F1mRloMHDLGAOTqxd2I2W2yr42jPARDUluoPZTuxM7TdM4oGf5u5N8/aRVGBLRlb33h99lp4n/i/34xHQLSZnYuBsropnBXBhY7JF4te/3YHUr2a/X0uu3KIdJCuKXQnLtNCZY9gm/aQ6VE0FSZ/1HoqnktBRLK6HPa+L1+tCgCQ/YCuHiXd5Pwi8U16BEMqwtNAfZUBq96AhVcyDDIpO5uyWnNQWCcLVw/+6JV4w0dX9KlH3QVwWdrksnV30rQWeV+tuItemkrgHr57C4DZUvLYbCfOjuK88buaPQejCHrPADDXhAoGBAMokc+Kuu21iuKZz8TNbPss0EO6ZjEJv7tA3aTTW0b+3t2mIfOTa/KHfJwTZOHtAQllF63gx+Cty6PEVrCShAVdA+s15MRywzdWALFcAmjYTCNKneD/TMRnNiuEJZZTEMSeqCrXCLRZQxPrkjOpIxZnotJ9/jmswFmhuPHqq8oVdAoGBAO5Nm8yKaXtb+aJ8Wzpyxv5a3J0BSdkFfvj+A8AXKH+ZKmaNrz/+79msZe5t90HrqYSUhhnoSAdncxWKn6N6Lrixjpe2ddfML0SNhQWGzRFF4RLtwmLaJmgpDbUtIAdIX3MTvCDUQeRiZYw24yYFosfr3/vppsmiTnjX9YrBmFfTAoGAFAVWQP5ja+saNMpI+ngwGPo4LxmgLbheY9sJHYWlUqLElLxC+nvCB9pNSAqnsHVl3Oey8b2pQcxoy/AEk8AqnNS/wngdaCUOzfWa7qcNnwt1lT+nBlNJiq+z8KP4nqpr3+zUkLoBszMev2bBmjbI83x730xH88/YeFFqxg+GY7UCgYAAxzQZCOKrSnOYOju6ByHrNrS9toFdOg1eFsZAXFL/h6qBxzipRtXVqiBzFNzX1EMrcai2cPG7RHU1vswipoV8iOfkSu47lCkbWjLy/6uvwMCpZSlbVUcG1At9afZOz8ewAoJ8wPSuIDwgpxU6zI3phTWoBu1Kf0MuVdYxa8xpjQKBgQCLyjx0+j+TkqUai8RAwQWGOsToL+aZ7pJFIi0NS0+W5Tk0YLE/UJ07ukNlXwXig/s/H75gY8DerRaBRJhBY5NUE6q33gtQLXUZeqJPdl20lQJpYbUhsMKGhr5qZdu87AOeSLnzQ6Ukchcgsj335Vc5AFsODWf6ApbIUiVUa3DZgg== mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons3.yml b/etc/configs/cons3.yml index c6eb2d44..8499abfe 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: 12D3KooWLgWXJyeG869h3Awf9s7Jt7dw9ZnNg5ZFkMFKSHs6Bify - peerKey: 6DyqyTRgR35/TNWpEbqVm8NbbmOULNuQDYEk6C+ltyyhbVs1bhOkA2nigRoE6JFip83k2yVjsa2r4ST85kW0OA== - signingKey: 6DyqyTRgR35/TNWpEbqVm8NbbmOULNuQDYEk6C+ltyyhbVs1bhOkA2nigRoE6JFip83k2yVjsa2r4ST85kW0OA== - encryptionKey: MIIEogIBAAKCAQEAqCZtyjHrM7jUZNyZNchUAgYIZb27YRRsfC6ca2xgdbtIjq0ts9af1+JQcmHMjGyxUTvLjx4I4IPJzDF5KYRwiGSWM4avhfxKxVToW0j8UlqQH+nbN7/TmmQfW8+L4CsgaXcf34uE+CfnyoUnwPoWLe/6SI1m5n/99PcWa9X8monNoTSMoeSOCm/csyK+BBGW9BTOMgo+2Ceyu44KcERl/pdkBGmba1xz3SogEq1m7cpG2Y0Hmd9dyHVJU2jSFczVJQkWF6RuifRoGcjdtbRrY5E8LsF2CM8HeeAZ/0g/q7yoR6D/nCrWaejszXObi+GNEo51EdJW+7gD8g2U6vUqkQIDAQABAoIBAG010FbjhxRntiLwF94Th2RtEKUrznil8DPTfipTEG9GvUBVf/puqhBn38H6fQSzT5MoF/STGEbhsX4an8v0RbaARgGfN375NoLlu6gWRjMiuLrRg1y5DTEYWDmkGf/1Yq68/QmOr0URff1N8Fzo0ODzHQZkOHH6rTGeDYTqTY78ZfU17yGXoNSmXycAqbTGczBP1RvyDRd4mIuBg11E/+A4GBxe8QaSZzJsyfvtBi7jUqKgdDDDI5Gz4x90NZ90L6jRFNvlhuosGETQ80oyNN1soa6tVSq7UhGI7+wcJDyaXQF32/TnqIXArScH5gRLxHiP+FfTDCHzl5iZG5m/D3UCgYEAzHe6oorAELbpcRaUJQayOkMJIAI7KP5EVI2IbP1fhBaW+5BYtzGlxKZOXWZA057E0pjwO99rmVNs2rW6mU0mCfw9hP3oWv4EgszU2DEx1+iHhNF6cy/zGDh3lgDNXgRPoBRR05IS1Ffs8uEgVfhiVjtiv4FyrVE9fY2cTH+7YXcCgYEA0od8pJLXOhcj1ap/1Y0phaHv//ulSqLBtKEQTy36zDw9DfcIozB8LCIK/Q/3nr4RHmd1YQVRDoTB9pX8eUuoJvM3Do9CJiH5/0PXFgIOZZsDXtl/TmL/1diHw2isttDCQF6I+q5lRYlbA+oqc8Vko2c5LQchXE24oz9670gFFjcCgYApDSjVlZH2SSMZZ3Ua8fs6o1bjrE8Abfx+FWR8rWpN9NMfct28+iTUFKfLLMp7MndF6Rriinrp78v9JVtviAPJIXGgj/HkwvdY45MgTNA7Dx6WVhCFq+zcwgmQfly9MZRjCXFcTwmkxHp4USbS2+mycn3jATRrA9KasKHe4g5XBQKBgH/xPtp1Mr9m2Kw9FbseMqG3rDcRI36cMsQnLdYwxz3fTetyuZkTGiNn/O2WCpI6SAUGMttnc78zBv1oYSsFw4cIP+llPnoWI+vxuoDxdvZgoke+PhPRLlEzai5jKrNfYu3jhbNy0LDVrK5QXMRGrcZwMNsgfjGuOgtbxMYuKok5AoGAImYTQ6e0fliVoHO5CjClQRpj3oKsTmB4hwtMofSZ+tFVPOakVM6P4K8UzMa2jcgz3+KgLAD8awpHv0ISO+qdSwG9MgnfIxhz8jxatgRBXdhICHrnqCqwZqyV0hrVmuUeg0uXPN5AisvfGEiGpkAPsQCo3bhAqMD+4QooKCgpz+Y= + peerId: 12D3KooWFGB9ujKw8kCZB1hxx23uT1XmXftuJKCDKjS4mc8s4DWU + peerKey: C5mG044YYpB7dckuIXWLfASCnhP6HyZTj7EsDaE/Or1Q5xTnpKWjMfOcRczHEDgvY2o0o76uCjf1W+m4D7uFFQ== + signingKey: C5mG044YYpB7dckuIXWLfASCnhP6HyZTj7EsDaE/Or1Q5xTnpKWjMfOcRczHEDgvY2o0o76uCjf1W+m4D7uFFQ== + encryptionKey: MIIEogIBAAKCAQEAo2Bg77RBJuTd32ZNZZkAhnSMMvNea2FwCUgg3HgQC73dfcCiMClpJzlrO5wFOYqDM+Wnzk+8symPGMe3Kjb74JnwxnHupcYwMsqOy1Qc92iFdsyvko9+5t78Vx+JR3QARi0UwL+WKHRkMy0QXTH2eMdZgixF0+tCbyN5TKI1hZcr9jYzrNNcLgQYLJslOK1lGoPrIkLa5LtpbRXikSW2gAYmTqYz3QiOxmai1IE3GmXQmnFrAveIyEKa1NoVU6nsE07OLb/nOEHbA1wZqduxEviYgqiHNR4rvM0kfzCwN6Ri3S1yw/27v7WY+833jfe3V/G2irDVirbSuMgAMjGrpQIDAQABAoIBAAiwsbdOYUDOX7boXCmRT+PXAzYal+UiU7FKsuTHRiM5wDRWMMpbCYralQegru52na//AUQKHcFx7nik9us57X/u8E299bG/rwSknZ/XI4tNdfvxu00ScO+a4NVJiiXQ18rjzvzJtBUGy+Wk+f/bDn8yK2KvNC+njesXefZHko0+fYhs89ESNTU+ySCFjRJQxIDbU+rDP/1c8MzUxB9KKoUZKVX1BaGbjA8YZRjDSdoekwm4VAIBbhf7J6GW1sXezXdQO2rLm7UEBZQeZ6/CnRs48AH1uoNK2Gof/qcYj01WRgB4oyg0dLeWfAb0WuSrivxQhI4CK0mn3bdjiOVheqkCgYEAzAkU60/YPcvuYysPCqbIyhKLyycS1UcCwaWjxR1c4xh9KKo9AqdayDqClGximbEXZsXdfm6FStieAIb0a4s6nFynOMMexe8xK5as6p52+ecAyxidtfNqWRAoZQm7QvTNAtX6jrwJJtbpeQinCqZD0yF5ruj0B+mqyiMm0BTPDAMCgYEAzPxegtEn5P7yIusGoDv75fbMJyvdIVSCmBSWB2rN1V4onC7i1V4hGHRbmNK4o8U3tb4BgvQaHFhrNCw6h4JoT2lGTMkj9QfflgFSOjHaJoOATdzFBJZZOUR6+pGRvn1T+N5SM7isGwBbD4qM3dlG79ODRnRyiX4nQE3dF19zXTcCgYAG0jrnzwiMsFes6xCaq47E6q/Pv+OqS7B05uO9wEiNsxDkHiTiBNRNI1+gNKtrNfdxUSYhhvJf2TQXEmvzeHkiJxrUE/ngZim/qk7nnRqfKjDlmVIUdinVBmxDTHr9Nw/vi1XQFcs8iCzQBhEHkx1rXpAh39ngtdgm39v5UujFHwKBgF703XcuGpP7AgHo68XYY6UwwXu31xT0iBaZGrLO6BDaMGfBVHTQyPYCGNhfbQb4egknvp2CJIJS9z5Q6sARSe7XbqhtWMnOXuWnMQciRtMmgY4QIfgxCZ38uhdOzbv3ZKnZmyy4dImBja1SWlT+rNy2F47QrKpClT41k6CbJ97bAoGAIdOW6fJk+hvq1SrGcCW8+MUHqjRtKIndg2bgDbBNsD0eVlksv0L+p6wjIfNNQnfqlluGgyR/vEQkSmdJwvZ5d/7xdrLOkQZ6KmshK71bGWi8yDG4+qlZrO6rD2dmDcReBq1jG8/4oABTI0t9tGTkLWgw8LPJMcXcDnW9aaCg8uo= mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/node1.yml b/etc/configs/node1.yml index 431d2b09..415640cb 100755 --- a/etc/configs/node1.yml +++ b/etc/configs/node1.yml @@ -5,25 +5,27 @@ grpcServer: - 127.0.0.1:4430 tls: false account: - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu - peerKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= + peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj + peerKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== apiServer: - port: "8080" + listenAddrs: + - 127.0.0.1:8080 + tls: false nodes: - - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu + - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj address: 127.0.0.1:4430 - signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= - - peerId: 12D3KooWLtuKtCPBYrFJV1NdejiCr2s614ppe9rmUXnkTHtAUD5U + signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== + - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 address: 127.0.0.1:4431 - signingKey: 07JMoW5cQUtGO9nNIGQo9e99b7Wf/4YvTtNEA0lt4gCkmhwB1EB9ay+kitxVJJgmdyGLxbUUlGqwXsAj0zlHWw== - encryptionKey: MIIEpAIBAAKCAQEA7cA6J/icl8wseeXkt8oJr5AeYadUAG5EdCOdHj4S/Z7ivff4MOIKAeQITpq+rqhmXxOePYXSpQXE20Y9PW9tuw4gzOuq1ylSG/MWMcLDH1eIxg66rnmUqUbdiW4GGJjVjc9jvN0Up+MfSrUF6fM0jWTFoXVJQIeQQGERCIYjFzjfBl1xYvPghdxNgei/K5ZGYRggT28143XdIH4KTXGtp51hAKoyY9eCqYMtm9wvjxazhPVxO2CsYaqMxBLshY3jfHNqJnx8u6+h4Bl4uUcdbLNUgMcEgk7ehbQp2K0CqNoKXxbCTI6V57UVcJHDIaO5B6FyR6BguzHHNPJ4yd3q9wIDAQABAoIBAQCm2Mf3VRlPzhFIWnVwJXE2q8Umcu8Yfkm712Jj3twk8GPfPS4H4Bl1yjmqMB6xI6zz/CiItGlnNe04lMpVWuV+6CNMq/ZwmKbuxmFE+pFEZYGuvJd16gzR3tGJqJTOnjMAGhK8b8oXJ+TF4NQNooe20ol/DXgiuQAargPuH3RwzjYmF3N8VI4KUc3LaG4TwVXn4LwPOxrQSnfwJlZwLml1HAKOV0qcG0mXX6ZXOpoVhEoRPdQyUHc8ZW+53Agbtind7bYh5TsMVDFUrcgNwnwTOsWjil049la1IJO2uMRluacKlrtyzEp6zqrW8ZJO7mYAO69x4WyGqf2ZgIdA6djBAoGBAPqRHWAIgPa80eXbwCYkRtUG/ONBsQGi7+wm6nyhkXvNXJeokgH2DCgLH2+fW2scfOJuZc9r5WftEjOBvNfr2LDcwdyTSTh21WYcPSZx9HDf2d5/SWTcjNcyU0b5qfWIUKi/Zm9UY7r3X7yMA5dUD/cvu1PBJ5NWFrK1Gm2ph44dAoGBAPLn+LkHweU0fbxQq/76T5yVVpMKUaE9xwrJlUxEDPAQGnLPbFg4JeUt/YPhsOV85W4c4oQE+uFZrF0uf+1fEnS6MOJ+sq668upzC2hBp1B5138wM7615v1rvXVVH6qXfFop67FdBzPHt1NAN43mEIBZHTQ5hSVXFlYSZp9mxuEjAoGBAKCzUVO2IIAeub/iIGpV+dfGk4ptJ0kVZyreCqXEObpdC3V496uqUkGcYJ0GZ2ta6f2PMFzHpmnw8it2mdchu+gyrWL6U4uTK2pB0jZF/7Ak4WaB3GCD0xBxhleO6CJBOvn/R4M/bHcNEKmsYuE7WMIAKvScfPVR0VzsKfcLM5VBAoGAVvWg32zdh1bBZLdku8WU1rPH6KAbFSRuq3f7UPBTyWWaclu7p+GB/4f1aE9V6vJJmKASn7zArAhUYo+REMOmcc9uTMea5F7dM/23qb1HTtIvycLR44ZviW4Wx3iP+5x70jOLw1VQjMME6HLm8I/afHhqshWdiv6ganPv9UTwEg0CgYBSDi2dqg8F7ij5CN+LMDLSn3b8GCw+7efGIt7imm/O2V/FlHD40IA6qGg6DXNQrnoZQt94nMb1cZEvm1dxi6rmQNrhCyoMogAaPqgFhZGq1OjmhVZiXFUWy4WAcjdzFc9wZd3/XtaofRKHLK+ngTFhhVApKypLk3Rg9bCAAjzyVg== - - peerId: 12D3KooWDCypXSyN6ppuMZGxVnBd1ZQCMV4y7Bn187S4duYmf8rA + signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== + encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= + - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF address: 127.0.0.1:4432 - signingKey: SGyNE0dFaQgtgNuzdcO7LB+TEz9VHAOtlQLk6WWkrkQyXiZV3casg8Q2/4PO1Oylc8Fu72RU001Hclj5JCbiLw== - encryptionKey: MIIEpAIBAAKCAQEA0k3mw4FyexRkLgLjHzYs4Ppeyv6r9ZrP00imNf15JTuM8ajMx5oJX7JQTm8KOLRJjUdZZAd5Gtp0ezfYAQK1ZjEWwCmfp8j8FBgJIDSLpjxl88SXMLgATXYfhklnQvKlQjs/X3Ka4zdTrav2tMH9IAo6TSNZhlPQNsUory1SGHs+KqHv4p0sG8oWuKYhfBj8rWHQdUVptkIBKgojFDeJJD04Tbf9kUakbK/8KuXB6zF5H4WN3p4rMMwkClyTGeYO4LDg5TzVn8NnUi3/b/vO/3us1G/TMoRe/6umUfpQxrwo+7S2T6A4YwetWRp6xALLhp+HfAWnn0lA/D8/w1WpKwIDAQABAoIBAQC5cdQxRa5rddm48PbSCPWeFWkNW3DLDI6CYyedqDvxZwer+QtKXzww1I4X+7ZptiC9odLjb+uMkGHyXZXtnjPTPyounQWZ8JLILUGu0mbqWYwVXp9raHVr2OOHiKaz1D+BnbkOM4L9JUZ2eJL9ZaoNXLd4WdmRp8qM4WI0xqQDzOANx2HhyL/+dJmQeIUND+pdeH+Z+fYowU3ho32txNvBnMXQhF1T5K9i1VO5W49RAjIRbENsT+paPGKbNubDHRt1j36ktK4eC4HSdgv8tccdsGyrEiIbAt1XsTZfM8ie4D3A8RhSxiTC6Fkgv6vIm+iFTLzBFZKesOBcd8sfKeyBAoGBAOts5PQQJhldPDzlbnqzxMOR98WHbkVZjCqWSkNA34vqyFuPcRuX0rHK/qpg23ilbUP0fGMDTGgFzTt51FZLL16SXyRfjNhzjdmryryeddQwbp92ta2GEgnU6t1FyCuSCtcLDKJd/D9A9dC5UI6z+ES4TOnbR3nakXK9t4cUOFthAoGBAOSu+wL+SEA5erR+m3LpOsELK68CCJQPxn3VpoVfJZawgF+fEoXVMLTERxJput1+ADomIEdNc9ex86TjKx9gJ4piNHscRPFeT/AgESOIGHLOc1gk2DPqNj6wBIarUJQ9t4KcHScboh1dTPJeqqv2NSwIiLQoqFUIhfKZLnrW3zwLAoGBAJh0hC+o5YM3ZXLqAIllMN6VACbidP5j5ukNOjojIKCzAdyJH24G+2I3WoNrBbUzK3b+NC7KTAhw+V6ynlbjiWFs2D/twH/LFOkI3tkWpKcsVfbeIPimAbhsMUvpjJ7qjCqF9UCQLHGp14W6+/ftg7C8yNIINlkquVXclaTb60MBAoGAPqmL8ogG+EJH00mWAujRxq/u6meePiQMedKfbJBj1mTK6GjIRI/kZsQZzXvXTnYGTejAk4kvov0KDDaLTG+mpg6+3rUiVxlGwj+nMptKR7s2dAK0k5UsBAVrWBN9YwF+VXW9r0etJmq4ePljvvcaHtS/0M4LQjGxsoYy7EoQpX0CgYAhnf0McB7F1MxSjB0soMNv/v5utVzVihS3re2yKNdkI/YUEMB+yU3Q4gh+OljjBM6Y5To3BsQBAx4l2CysMKFHjIE/5AtdbvIS+chZZqB3vcZXSayvX8P1Z1uFdw/saiO2cRDJmR+TxaOPa2C9SzDoNTACthwLErHfzvEvVroKmw== + signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== + encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/node2.yml b/etc/configs/node2.yml index dabf73a2..bf48cbd9 100755 --- a/etc/configs/node2.yml +++ b/etc/configs/node2.yml @@ -5,25 +5,27 @@ grpcServer: - 127.0.0.1:4431 tls: false account: - peerId: 12D3KooWLtuKtCPBYrFJV1NdejiCr2s614ppe9rmUXnkTHtAUD5U - peerKey: 07JMoW5cQUtGO9nNIGQo9e99b7Wf/4YvTtNEA0lt4gCkmhwB1EB9ay+kitxVJJgmdyGLxbUUlGqwXsAj0zlHWw== - signingKey: 07JMoW5cQUtGO9nNIGQo9e99b7Wf/4YvTtNEA0lt4gCkmhwB1EB9ay+kitxVJJgmdyGLxbUUlGqwXsAj0zlHWw== - encryptionKey: MIIEpAIBAAKCAQEA7cA6J/icl8wseeXkt8oJr5AeYadUAG5EdCOdHj4S/Z7ivff4MOIKAeQITpq+rqhmXxOePYXSpQXE20Y9PW9tuw4gzOuq1ylSG/MWMcLDH1eIxg66rnmUqUbdiW4GGJjVjc9jvN0Up+MfSrUF6fM0jWTFoXVJQIeQQGERCIYjFzjfBl1xYvPghdxNgei/K5ZGYRggT28143XdIH4KTXGtp51hAKoyY9eCqYMtm9wvjxazhPVxO2CsYaqMxBLshY3jfHNqJnx8u6+h4Bl4uUcdbLNUgMcEgk7ehbQp2K0CqNoKXxbCTI6V57UVcJHDIaO5B6FyR6BguzHHNPJ4yd3q9wIDAQABAoIBAQCm2Mf3VRlPzhFIWnVwJXE2q8Umcu8Yfkm712Jj3twk8GPfPS4H4Bl1yjmqMB6xI6zz/CiItGlnNe04lMpVWuV+6CNMq/ZwmKbuxmFE+pFEZYGuvJd16gzR3tGJqJTOnjMAGhK8b8oXJ+TF4NQNooe20ol/DXgiuQAargPuH3RwzjYmF3N8VI4KUc3LaG4TwVXn4LwPOxrQSnfwJlZwLml1HAKOV0qcG0mXX6ZXOpoVhEoRPdQyUHc8ZW+53Agbtind7bYh5TsMVDFUrcgNwnwTOsWjil049la1IJO2uMRluacKlrtyzEp6zqrW8ZJO7mYAO69x4WyGqf2ZgIdA6djBAoGBAPqRHWAIgPa80eXbwCYkRtUG/ONBsQGi7+wm6nyhkXvNXJeokgH2DCgLH2+fW2scfOJuZc9r5WftEjOBvNfr2LDcwdyTSTh21WYcPSZx9HDf2d5/SWTcjNcyU0b5qfWIUKi/Zm9UY7r3X7yMA5dUD/cvu1PBJ5NWFrK1Gm2ph44dAoGBAPLn+LkHweU0fbxQq/76T5yVVpMKUaE9xwrJlUxEDPAQGnLPbFg4JeUt/YPhsOV85W4c4oQE+uFZrF0uf+1fEnS6MOJ+sq668upzC2hBp1B5138wM7615v1rvXVVH6qXfFop67FdBzPHt1NAN43mEIBZHTQ5hSVXFlYSZp9mxuEjAoGBAKCzUVO2IIAeub/iIGpV+dfGk4ptJ0kVZyreCqXEObpdC3V496uqUkGcYJ0GZ2ta6f2PMFzHpmnw8it2mdchu+gyrWL6U4uTK2pB0jZF/7Ak4WaB3GCD0xBxhleO6CJBOvn/R4M/bHcNEKmsYuE7WMIAKvScfPVR0VzsKfcLM5VBAoGAVvWg32zdh1bBZLdku8WU1rPH6KAbFSRuq3f7UPBTyWWaclu7p+GB/4f1aE9V6vJJmKASn7zArAhUYo+REMOmcc9uTMea5F7dM/23qb1HTtIvycLR44ZviW4Wx3iP+5x70jOLw1VQjMME6HLm8I/afHhqshWdiv6ganPv9UTwEg0CgYBSDi2dqg8F7ij5CN+LMDLSn3b8GCw+7efGIt7imm/O2V/FlHD40IA6qGg6DXNQrnoZQt94nMb1cZEvm1dxi6rmQNrhCyoMogAaPqgFhZGq1OjmhVZiXFUWy4WAcjdzFc9wZd3/XtaofRKHLK+ngTFhhVApKypLk3Rg9bCAAjzyVg== + peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 + peerKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== + signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== + encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= apiServer: - port: "8081" + listenAddrs: + - 127.0.0.1:8081 + tls: false nodes: - - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu + - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj address: 127.0.0.1:4430 - signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= - - peerId: 12D3KooWLtuKtCPBYrFJV1NdejiCr2s614ppe9rmUXnkTHtAUD5U + signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== + - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 address: 127.0.0.1:4431 - signingKey: 07JMoW5cQUtGO9nNIGQo9e99b7Wf/4YvTtNEA0lt4gCkmhwB1EB9ay+kitxVJJgmdyGLxbUUlGqwXsAj0zlHWw== - encryptionKey: MIIEpAIBAAKCAQEA7cA6J/icl8wseeXkt8oJr5AeYadUAG5EdCOdHj4S/Z7ivff4MOIKAeQITpq+rqhmXxOePYXSpQXE20Y9PW9tuw4gzOuq1ylSG/MWMcLDH1eIxg66rnmUqUbdiW4GGJjVjc9jvN0Up+MfSrUF6fM0jWTFoXVJQIeQQGERCIYjFzjfBl1xYvPghdxNgei/K5ZGYRggT28143XdIH4KTXGtp51hAKoyY9eCqYMtm9wvjxazhPVxO2CsYaqMxBLshY3jfHNqJnx8u6+h4Bl4uUcdbLNUgMcEgk7ehbQp2K0CqNoKXxbCTI6V57UVcJHDIaO5B6FyR6BguzHHNPJ4yd3q9wIDAQABAoIBAQCm2Mf3VRlPzhFIWnVwJXE2q8Umcu8Yfkm712Jj3twk8GPfPS4H4Bl1yjmqMB6xI6zz/CiItGlnNe04lMpVWuV+6CNMq/ZwmKbuxmFE+pFEZYGuvJd16gzR3tGJqJTOnjMAGhK8b8oXJ+TF4NQNooe20ol/DXgiuQAargPuH3RwzjYmF3N8VI4KUc3LaG4TwVXn4LwPOxrQSnfwJlZwLml1HAKOV0qcG0mXX6ZXOpoVhEoRPdQyUHc8ZW+53Agbtind7bYh5TsMVDFUrcgNwnwTOsWjil049la1IJO2uMRluacKlrtyzEp6zqrW8ZJO7mYAO69x4WyGqf2ZgIdA6djBAoGBAPqRHWAIgPa80eXbwCYkRtUG/ONBsQGi7+wm6nyhkXvNXJeokgH2DCgLH2+fW2scfOJuZc9r5WftEjOBvNfr2LDcwdyTSTh21WYcPSZx9HDf2d5/SWTcjNcyU0b5qfWIUKi/Zm9UY7r3X7yMA5dUD/cvu1PBJ5NWFrK1Gm2ph44dAoGBAPLn+LkHweU0fbxQq/76T5yVVpMKUaE9xwrJlUxEDPAQGnLPbFg4JeUt/YPhsOV85W4c4oQE+uFZrF0uf+1fEnS6MOJ+sq668upzC2hBp1B5138wM7615v1rvXVVH6qXfFop67FdBzPHt1NAN43mEIBZHTQ5hSVXFlYSZp9mxuEjAoGBAKCzUVO2IIAeub/iIGpV+dfGk4ptJ0kVZyreCqXEObpdC3V496uqUkGcYJ0GZ2ta6f2PMFzHpmnw8it2mdchu+gyrWL6U4uTK2pB0jZF/7Ak4WaB3GCD0xBxhleO6CJBOvn/R4M/bHcNEKmsYuE7WMIAKvScfPVR0VzsKfcLM5VBAoGAVvWg32zdh1bBZLdku8WU1rPH6KAbFSRuq3f7UPBTyWWaclu7p+GB/4f1aE9V6vJJmKASn7zArAhUYo+REMOmcc9uTMea5F7dM/23qb1HTtIvycLR44ZviW4Wx3iP+5x70jOLw1VQjMME6HLm8I/afHhqshWdiv6ganPv9UTwEg0CgYBSDi2dqg8F7ij5CN+LMDLSn3b8GCw+7efGIt7imm/O2V/FlHD40IA6qGg6DXNQrnoZQt94nMb1cZEvm1dxi6rmQNrhCyoMogAaPqgFhZGq1OjmhVZiXFUWy4WAcjdzFc9wZd3/XtaofRKHLK+ngTFhhVApKypLk3Rg9bCAAjzyVg== - - peerId: 12D3KooWDCypXSyN6ppuMZGxVnBd1ZQCMV4y7Bn187S4duYmf8rA + signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== + encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= + - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF address: 127.0.0.1:4432 - signingKey: SGyNE0dFaQgtgNuzdcO7LB+TEz9VHAOtlQLk6WWkrkQyXiZV3casg8Q2/4PO1Oylc8Fu72RU001Hclj5JCbiLw== - encryptionKey: MIIEpAIBAAKCAQEA0k3mw4FyexRkLgLjHzYs4Ppeyv6r9ZrP00imNf15JTuM8ajMx5oJX7JQTm8KOLRJjUdZZAd5Gtp0ezfYAQK1ZjEWwCmfp8j8FBgJIDSLpjxl88SXMLgATXYfhklnQvKlQjs/X3Ka4zdTrav2tMH9IAo6TSNZhlPQNsUory1SGHs+KqHv4p0sG8oWuKYhfBj8rWHQdUVptkIBKgojFDeJJD04Tbf9kUakbK/8KuXB6zF5H4WN3p4rMMwkClyTGeYO4LDg5TzVn8NnUi3/b/vO/3us1G/TMoRe/6umUfpQxrwo+7S2T6A4YwetWRp6xALLhp+HfAWnn0lA/D8/w1WpKwIDAQABAoIBAQC5cdQxRa5rddm48PbSCPWeFWkNW3DLDI6CYyedqDvxZwer+QtKXzww1I4X+7ZptiC9odLjb+uMkGHyXZXtnjPTPyounQWZ8JLILUGu0mbqWYwVXp9raHVr2OOHiKaz1D+BnbkOM4L9JUZ2eJL9ZaoNXLd4WdmRp8qM4WI0xqQDzOANx2HhyL/+dJmQeIUND+pdeH+Z+fYowU3ho32txNvBnMXQhF1T5K9i1VO5W49RAjIRbENsT+paPGKbNubDHRt1j36ktK4eC4HSdgv8tccdsGyrEiIbAt1XsTZfM8ie4D3A8RhSxiTC6Fkgv6vIm+iFTLzBFZKesOBcd8sfKeyBAoGBAOts5PQQJhldPDzlbnqzxMOR98WHbkVZjCqWSkNA34vqyFuPcRuX0rHK/qpg23ilbUP0fGMDTGgFzTt51FZLL16SXyRfjNhzjdmryryeddQwbp92ta2GEgnU6t1FyCuSCtcLDKJd/D9A9dC5UI6z+ES4TOnbR3nakXK9t4cUOFthAoGBAOSu+wL+SEA5erR+m3LpOsELK68CCJQPxn3VpoVfJZawgF+fEoXVMLTERxJput1+ADomIEdNc9ex86TjKx9gJ4piNHscRPFeT/AgESOIGHLOc1gk2DPqNj6wBIarUJQ9t4KcHScboh1dTPJeqqv2NSwIiLQoqFUIhfKZLnrW3zwLAoGBAJh0hC+o5YM3ZXLqAIllMN6VACbidP5j5ukNOjojIKCzAdyJH24G+2I3WoNrBbUzK3b+NC7KTAhw+V6ynlbjiWFs2D/twH/LFOkI3tkWpKcsVfbeIPimAbhsMUvpjJ7qjCqF9UCQLHGp14W6+/ftg7C8yNIINlkquVXclaTb60MBAoGAPqmL8ogG+EJH00mWAujRxq/u6meePiQMedKfbJBj1mTK6GjIRI/kZsQZzXvXTnYGTejAk4kvov0KDDaLTG+mpg6+3rUiVxlGwj+nMptKR7s2dAK0k5UsBAVrWBN9YwF+VXW9r0etJmq4ePljvvcaHtS/0M4LQjGxsoYy7EoQpX0CgYAhnf0McB7F1MxSjB0soMNv/v5utVzVihS3re2yKNdkI/YUEMB+yU3Q4gh+OljjBM6Y5To3BsQBAx4l2CysMKFHjIE/5AtdbvIS+chZZqB3vcZXSayvX8P1Z1uFdw/saiO2cRDJmR+TxaOPa2C9SzDoNTACthwLErHfzvEvVroKmw== + signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== + encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/node3.yml b/etc/configs/node3.yml index a809a72b..ef2997ec 100755 --- a/etc/configs/node3.yml +++ b/etc/configs/node3.yml @@ -5,25 +5,27 @@ grpcServer: - 127.0.0.1:4432 tls: false account: - peerId: 12D3KooWDCypXSyN6ppuMZGxVnBd1ZQCMV4y7Bn187S4duYmf8rA - peerKey: SGyNE0dFaQgtgNuzdcO7LB+TEz9VHAOtlQLk6WWkrkQyXiZV3casg8Q2/4PO1Oylc8Fu72RU001Hclj5JCbiLw== - signingKey: SGyNE0dFaQgtgNuzdcO7LB+TEz9VHAOtlQLk6WWkrkQyXiZV3casg8Q2/4PO1Oylc8Fu72RU001Hclj5JCbiLw== - encryptionKey: MIIEpAIBAAKCAQEA0k3mw4FyexRkLgLjHzYs4Ppeyv6r9ZrP00imNf15JTuM8ajMx5oJX7JQTm8KOLRJjUdZZAd5Gtp0ezfYAQK1ZjEWwCmfp8j8FBgJIDSLpjxl88SXMLgATXYfhklnQvKlQjs/X3Ka4zdTrav2tMH9IAo6TSNZhlPQNsUory1SGHs+KqHv4p0sG8oWuKYhfBj8rWHQdUVptkIBKgojFDeJJD04Tbf9kUakbK/8KuXB6zF5H4WN3p4rMMwkClyTGeYO4LDg5TzVn8NnUi3/b/vO/3us1G/TMoRe/6umUfpQxrwo+7S2T6A4YwetWRp6xALLhp+HfAWnn0lA/D8/w1WpKwIDAQABAoIBAQC5cdQxRa5rddm48PbSCPWeFWkNW3DLDI6CYyedqDvxZwer+QtKXzww1I4X+7ZptiC9odLjb+uMkGHyXZXtnjPTPyounQWZ8JLILUGu0mbqWYwVXp9raHVr2OOHiKaz1D+BnbkOM4L9JUZ2eJL9ZaoNXLd4WdmRp8qM4WI0xqQDzOANx2HhyL/+dJmQeIUND+pdeH+Z+fYowU3ho32txNvBnMXQhF1T5K9i1VO5W49RAjIRbENsT+paPGKbNubDHRt1j36ktK4eC4HSdgv8tccdsGyrEiIbAt1XsTZfM8ie4D3A8RhSxiTC6Fkgv6vIm+iFTLzBFZKesOBcd8sfKeyBAoGBAOts5PQQJhldPDzlbnqzxMOR98WHbkVZjCqWSkNA34vqyFuPcRuX0rHK/qpg23ilbUP0fGMDTGgFzTt51FZLL16SXyRfjNhzjdmryryeddQwbp92ta2GEgnU6t1FyCuSCtcLDKJd/D9A9dC5UI6z+ES4TOnbR3nakXK9t4cUOFthAoGBAOSu+wL+SEA5erR+m3LpOsELK68CCJQPxn3VpoVfJZawgF+fEoXVMLTERxJput1+ADomIEdNc9ex86TjKx9gJ4piNHscRPFeT/AgESOIGHLOc1gk2DPqNj6wBIarUJQ9t4KcHScboh1dTPJeqqv2NSwIiLQoqFUIhfKZLnrW3zwLAoGBAJh0hC+o5YM3ZXLqAIllMN6VACbidP5j5ukNOjojIKCzAdyJH24G+2I3WoNrBbUzK3b+NC7KTAhw+V6ynlbjiWFs2D/twH/LFOkI3tkWpKcsVfbeIPimAbhsMUvpjJ7qjCqF9UCQLHGp14W6+/ftg7C8yNIINlkquVXclaTb60MBAoGAPqmL8ogG+EJH00mWAujRxq/u6meePiQMedKfbJBj1mTK6GjIRI/kZsQZzXvXTnYGTejAk4kvov0KDDaLTG+mpg6+3rUiVxlGwj+nMptKR7s2dAK0k5UsBAVrWBN9YwF+VXW9r0etJmq4ePljvvcaHtS/0M4LQjGxsoYy7EoQpX0CgYAhnf0McB7F1MxSjB0soMNv/v5utVzVihS3re2yKNdkI/YUEMB+yU3Q4gh+OljjBM6Y5To3BsQBAx4l2CysMKFHjIE/5AtdbvIS+chZZqB3vcZXSayvX8P1Z1uFdw/saiO2cRDJmR+TxaOPa2C9SzDoNTACthwLErHfzvEvVroKmw== + peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF + peerKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== + signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== + encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN apiServer: - port: "8082" + listenAddrs: + - 127.0.0.1:8082 + tls: false nodes: - - peerId: 12D3KooWLn13hDrZ6YRGM517fHf2zS6qhPNRu18inLMpRqn1YGKu + - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj address: 127.0.0.1:4430 - signingKey: 3mzfKBWtn7mitFEgq8u4eysWOJ6ySbUs49irfHwcuOmi1YMpobz9anoqd4yaT1owZiRPYXqx5k2Z4sNVRE3kXA== - encryptionKey: MIIEpQIBAAKCAQEA3U7b4w9JTKE3TLM1WQ5iqdLbvUuozMp/hDEg7S15Gr6wrtLomMSBkfmVQ3Cu+CHdxAFqUFClItYlSFgtZWIFiSiQxCeaN2dmgczd9T4TlRAw6y6uJXtT9r7FIgizPP4B0/tnzPI6yYgpdwzCV2nRSjw3mMr5Nav3QYs18kYrJ1/Np2Wob5HOoRTUD++pPrToevTb7GNL/irrC8wXSE7oU6S7ix6Nh9vzEHg/V5FONBF/wWD/ri7Gy0j0qgUQ+gjxLWKr8xPDnRAve13zzo+54lGCyVvlm/rwCY9Jx378V1IuRx+S8F/GFuVozHD4XVaoSTtpCWPBQNSKDXgaIIKDowIDAQABAoIBACpMXj6ht1LMJXOldPbWhwkKYjFl+pdZxNGRSkfKvzDbbY2chhRcyp8J4vuG2ApY/rftxVIgd8+Wun1/TP3ppEE43aKAJzubqb35WBr9iGSfOZpZy7MiRUQN5kPBAfEQY20OyiIj0hSez74PVD283eGgbMfpU4Rsn8+JOgBaZPkbPViJLJY8PyHU6vwWw60dye1iJTz9yuBtoEqY0XKxnLaVXTQaWx0Te+VYU8twxDgXFWRaXtHuk7xnxOkCZDLrzIvuOYa5lsLoT8K62LDeXbyHBPhbdW0j4ZYzAOTsaUWpjuJzef9aj3JJdfyADiqb5iu6HHksvKzkZEau34zjilECgYEA/c8ZJm62uJMHNssTJYiLRw89l5hYwIZ/1TXdFRF8+xrTin5opYjpscSTO5bY2IYqLx2xuPiJCY1eGGB9L/RtkaVh51ySzq0d+4zpPIRKFcOOgdxHwlgoCgIhQECyfJZNMFGBUIlPXZ/phvXOXRvWFzDPhqThenVG2QzF+wLP0AUCgYEA3zfviQFJ1FOKJMozYO3tUZFmsIrAcO9hfuE7uuWz0Fw2m1XiwxjuOr1RbsSsh/lKke2h4tiGrlfiFhwCpIp91NkVTFrtFOQxbDxkYLkFiWkZDkOaK9YhKMa2cgEm3p+RGawokjbm51LKf+cbYN9xGaAe3y2WzIE4kNpfWE4SXYcCgYEAoagcrrvpqZoMCDxED63ud+4fHsUsEkQYe6Z5EAg5gH5PqnBlGrofjthTpqqnpxGdILFbFyNFtU3TVtduJPMcLp4Vw5TU9MqSxDu1+pOP1FjgFZpGImSf6+/7Wb9bb7sToujm4nLymAFYblt1exxVuiOeqnWuH58+5tQZ7YyW7DkCgYEAl7WuqZEkmpiEpWh/7vsGdo+6GXbUQG2R9+gg7m+7/HsP6hc/XZYOJAIT3JLzKB84nWHCyyiasNeuI5S5/xbZWtaH8TNDOxW0uXl6R3q41qGFk/pCSFTqiIo16dn6jwgoWCh4EpgZ61KLqs5p/zcd6Wq4ULrtaOTSizC/6IZ3WPUCgYEA6xCJy3+ICCgr8/c7hfd2Ylb3aOsXIffdgALhXjDcrNUCqgB4R+S3WReAwrABemQGl4tySQE/1f3Ru7SzMMciFogGyJ/YSXqSi6Y8oDD7MqlKPiWlN6WY1nSRMlLbkUOqpA5JaDM0kcmXjZpBBQr277GOnh9uKN8zUy5xoptctxI= - - peerId: 12D3KooWLtuKtCPBYrFJV1NdejiCr2s614ppe9rmUXnkTHtAUD5U + signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== + encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== + - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 address: 127.0.0.1:4431 - signingKey: 07JMoW5cQUtGO9nNIGQo9e99b7Wf/4YvTtNEA0lt4gCkmhwB1EB9ay+kitxVJJgmdyGLxbUUlGqwXsAj0zlHWw== - encryptionKey: MIIEpAIBAAKCAQEA7cA6J/icl8wseeXkt8oJr5AeYadUAG5EdCOdHj4S/Z7ivff4MOIKAeQITpq+rqhmXxOePYXSpQXE20Y9PW9tuw4gzOuq1ylSG/MWMcLDH1eIxg66rnmUqUbdiW4GGJjVjc9jvN0Up+MfSrUF6fM0jWTFoXVJQIeQQGERCIYjFzjfBl1xYvPghdxNgei/K5ZGYRggT28143XdIH4KTXGtp51hAKoyY9eCqYMtm9wvjxazhPVxO2CsYaqMxBLshY3jfHNqJnx8u6+h4Bl4uUcdbLNUgMcEgk7ehbQp2K0CqNoKXxbCTI6V57UVcJHDIaO5B6FyR6BguzHHNPJ4yd3q9wIDAQABAoIBAQCm2Mf3VRlPzhFIWnVwJXE2q8Umcu8Yfkm712Jj3twk8GPfPS4H4Bl1yjmqMB6xI6zz/CiItGlnNe04lMpVWuV+6CNMq/ZwmKbuxmFE+pFEZYGuvJd16gzR3tGJqJTOnjMAGhK8b8oXJ+TF4NQNooe20ol/DXgiuQAargPuH3RwzjYmF3N8VI4KUc3LaG4TwVXn4LwPOxrQSnfwJlZwLml1HAKOV0qcG0mXX6ZXOpoVhEoRPdQyUHc8ZW+53Agbtind7bYh5TsMVDFUrcgNwnwTOsWjil049la1IJO2uMRluacKlrtyzEp6zqrW8ZJO7mYAO69x4WyGqf2ZgIdA6djBAoGBAPqRHWAIgPa80eXbwCYkRtUG/ONBsQGi7+wm6nyhkXvNXJeokgH2DCgLH2+fW2scfOJuZc9r5WftEjOBvNfr2LDcwdyTSTh21WYcPSZx9HDf2d5/SWTcjNcyU0b5qfWIUKi/Zm9UY7r3X7yMA5dUD/cvu1PBJ5NWFrK1Gm2ph44dAoGBAPLn+LkHweU0fbxQq/76T5yVVpMKUaE9xwrJlUxEDPAQGnLPbFg4JeUt/YPhsOV85W4c4oQE+uFZrF0uf+1fEnS6MOJ+sq668upzC2hBp1B5138wM7615v1rvXVVH6qXfFop67FdBzPHt1NAN43mEIBZHTQ5hSVXFlYSZp9mxuEjAoGBAKCzUVO2IIAeub/iIGpV+dfGk4ptJ0kVZyreCqXEObpdC3V496uqUkGcYJ0GZ2ta6f2PMFzHpmnw8it2mdchu+gyrWL6U4uTK2pB0jZF/7Ak4WaB3GCD0xBxhleO6CJBOvn/R4M/bHcNEKmsYuE7WMIAKvScfPVR0VzsKfcLM5VBAoGAVvWg32zdh1bBZLdku8WU1rPH6KAbFSRuq3f7UPBTyWWaclu7p+GB/4f1aE9V6vJJmKASn7zArAhUYo+REMOmcc9uTMea5F7dM/23qb1HTtIvycLR44ZviW4Wx3iP+5x70jOLw1VQjMME6HLm8I/afHhqshWdiv6ganPv9UTwEg0CgYBSDi2dqg8F7ij5CN+LMDLSn3b8GCw+7efGIt7imm/O2V/FlHD40IA6qGg6DXNQrnoZQt94nMb1cZEvm1dxi6rmQNrhCyoMogAaPqgFhZGq1OjmhVZiXFUWy4WAcjdzFc9wZd3/XtaofRKHLK+ngTFhhVApKypLk3Rg9bCAAjzyVg== - - peerId: 12D3KooWDCypXSyN6ppuMZGxVnBd1ZQCMV4y7Bn187S4duYmf8rA + signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== + encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= + - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF address: 127.0.0.1:4432 - signingKey: SGyNE0dFaQgtgNuzdcO7LB+TEz9VHAOtlQLk6WWkrkQyXiZV3casg8Q2/4PO1Oylc8Fu72RU001Hclj5JCbiLw== - encryptionKey: MIIEpAIBAAKCAQEA0k3mw4FyexRkLgLjHzYs4Ppeyv6r9ZrP00imNf15JTuM8ajMx5oJX7JQTm8KOLRJjUdZZAd5Gtp0ezfYAQK1ZjEWwCmfp8j8FBgJIDSLpjxl88SXMLgATXYfhklnQvKlQjs/X3Ka4zdTrav2tMH9IAo6TSNZhlPQNsUory1SGHs+KqHv4p0sG8oWuKYhfBj8rWHQdUVptkIBKgojFDeJJD04Tbf9kUakbK/8KuXB6zF5H4WN3p4rMMwkClyTGeYO4LDg5TzVn8NnUi3/b/vO/3us1G/TMoRe/6umUfpQxrwo+7S2T6A4YwetWRp6xALLhp+HfAWnn0lA/D8/w1WpKwIDAQABAoIBAQC5cdQxRa5rddm48PbSCPWeFWkNW3DLDI6CYyedqDvxZwer+QtKXzww1I4X+7ZptiC9odLjb+uMkGHyXZXtnjPTPyounQWZ8JLILUGu0mbqWYwVXp9raHVr2OOHiKaz1D+BnbkOM4L9JUZ2eJL9ZaoNXLd4WdmRp8qM4WI0xqQDzOANx2HhyL/+dJmQeIUND+pdeH+Z+fYowU3ho32txNvBnMXQhF1T5K9i1VO5W49RAjIRbENsT+paPGKbNubDHRt1j36ktK4eC4HSdgv8tccdsGyrEiIbAt1XsTZfM8ie4D3A8RhSxiTC6Fkgv6vIm+iFTLzBFZKesOBcd8sfKeyBAoGBAOts5PQQJhldPDzlbnqzxMOR98WHbkVZjCqWSkNA34vqyFuPcRuX0rHK/qpg23ilbUP0fGMDTGgFzTt51FZLL16SXyRfjNhzjdmryryeddQwbp92ta2GEgnU6t1FyCuSCtcLDKJd/D9A9dC5UI6z+ES4TOnbR3nakXK9t4cUOFthAoGBAOSu+wL+SEA5erR+m3LpOsELK68CCJQPxn3VpoVfJZawgF+fEoXVMLTERxJput1+ADomIEdNc9ex86TjKx9gJ4piNHscRPFeT/AgESOIGHLOc1gk2DPqNj6wBIarUJQ9t4KcHScboh1dTPJeqqv2NSwIiLQoqFUIhfKZLnrW3zwLAoGBAJh0hC+o5YM3ZXLqAIllMN6VACbidP5j5ukNOjojIKCzAdyJH24G+2I3WoNrBbUzK3b+NC7KTAhw+V6ynlbjiWFs2D/twH/LFOkI3tkWpKcsVfbeIPimAbhsMUvpjJ7qjCqF9UCQLHGp14W6+/ftg7C8yNIINlkquVXclaTb60MBAoGAPqmL8ogG+EJH00mWAujRxq/u6meePiQMedKfbJBj1mTK6GjIRI/kZsQZzXvXTnYGTejAk4kvov0KDDaLTG+mpg6+3rUiVxlGwj+nMptKR7s2dAK0k5UsBAVrWBN9YwF+VXW9r0etJmq4ePljvvcaHtS/0M4LQjGxsoYy7EoQpX0CgYAhnf0McB7F1MxSjB0soMNv/v5utVzVihS3re2yKNdkI/YUEMB+yU3Q4gh+OljjBM6Y5To3BsQBAx4l2CysMKFHjIE/5AtdbvIS+chZZqB3vcZXSayvX8P1Z1uFdw/saiO2cRDJmR+TxaOPa2C9SzDoNTACthwLErHfzvEvVroKmw== + signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== + encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN space: gcTTL: 60 syncPeriod: 10 diff --git a/util/cmd/nodesgen/gen.go b/util/cmd/nodesgen/gen.go index ed659e48..00dabb70 100644 --- a/util/cmd/nodesgen/gen.go +++ b/util/cmd/nodesgen/gen.go @@ -21,15 +21,15 @@ var ( type NodesMap struct { Nodes []struct { - Addresses []string `yaml:"grpcAddresses"` - APIPort string `yaml:"apiPort"` + Addresses []string `yaml:"grpcAddresses"` + APIAddresses []string `yaml:"apiAddresses"` } `yaml:"nodes"` Consensus []struct { Addresses []string `yaml:"grpcAddresses"` } Clients []struct { - Addresses []string `yaml:"grpcAddresses"` - APIPort string `yaml:"apiPort"` + Addresses []string `yaml:"grpcAddresses"` + APIAddresses []string `yaml:"apiAddresses"` } } @@ -49,7 +49,7 @@ func main() { var configs []config.Config var nodes []config.Node for _, n := range nodesMap.Nodes { - cfg, err := genNodeConfig(n.Addresses, n.APIPort) + cfg, err := genNodeConfig(n.Addresses, n.APIAddresses) if err != nil { panic(fmt.Sprintf("could not generate the config file: %s", err.Error())) } @@ -66,7 +66,7 @@ func main() { var clientConfigs []config.Config for _, c := range nodesMap.Clients { - cfg, err := genClientConfig(c.Addresses, c.APIPort) + cfg, err := genClientConfig(c.Addresses, c.APIAddresses) if err != nil { panic(fmt.Sprintf("could not generate the config file: %s", err.Error())) } @@ -143,7 +143,7 @@ func main() { } } -func genNodeConfig(addresses []string, apiPort string) (config.Config, error) { +func genNodeConfig(addresses []string, apiAddresses []string) (config.Config, error) { encKey, _, err := encryptionkey.GenerateRandomRSAKeyPair(2048) if err != nil { return config.Config{}, err @@ -182,8 +182,9 @@ func genNodeConfig(addresses []string, apiPort string) (config.Config, error) { SigningKey: encSignKey, EncryptionKey: encEncKey, }, - APIServer: config.APIServer{ - Port: apiPort, + APIServer: config.GrpcServer{ + ListenAddrs: apiAddresses, + TLS: false, }, Space: config.Space{ GCTTL: 60, @@ -192,7 +193,7 @@ func genNodeConfig(addresses []string, apiPort string) (config.Config, error) { }, nil } -func genClientConfig(addresses []string, apiPort string) (config.Config, error) { +func genClientConfig(addresses []string, apiAddresses []string) (config.Config, error) { encKey, _, err := encryptionkey.GenerateRandomRSAKeyPair(2048) if err != nil { return config.Config{}, err @@ -241,8 +242,9 @@ func genClientConfig(addresses []string, apiPort string) (config.Config, error) SigningKey: encSignKey, EncryptionKey: encEncKey, }, - APIServer: config.APIServer{ - Port: apiPort, + APIServer: config.GrpcServer{ + ListenAddrs: apiAddresses, + TLS: false, }, Space: config.Space{ GCTTL: 60, diff --git a/util/cmd/nodesgen/nodemap.yml b/util/cmd/nodesgen/nodemap.yml index 7cd1f72a..46514f0a 100644 --- a/util/cmd/nodesgen/nodemap.yml +++ b/util/cmd/nodesgen/nodemap.yml @@ -1,13 +1,16 @@ nodes: - grpcAddresses: - "127.0.0.1:4430" - apiPort: "8080" + apiAddresses: + - "127.0.0.1:8080" - grpcAddresses: - "127.0.0.1:4431" - apiPort: "8081" + apiAddresses: + - "127.0.0.1:8081" - grpcAddresses: - "127.0.0.1:4432" - apiPort: "8082" + apiAddresses: + - "127.0.0.1:8082" consensus: - grpcAddresses: - "127.0.0.1:4530" @@ -18,7 +21,9 @@ consensus: clients: - grpcAddresses: - "127.0.0.1:4630" - apiPort: "8090" + apiAddresses: + - "127.0.0.1:8090" - grpcAddresses: - "127.0.0.1:4631" - apiPort: "8091" + apiAddresses: + - "127.0.0.1:8091" From bab107ebf699b1fcd8592afc4eb7fd6344438543 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Thu, 1 Dec 2022 11:15:17 +0100 Subject: [PATCH 04/32] WIP debug client --- client/api/service.go | 3 +- common/net/rpc/server/drpcserver.go | 3 +- util/cmd/debug/api/service.go | 43 ++++++++++++++++ util/cmd/debug/client/service.go | 73 +++++++++++++++++++++++++++ util/cmd/debug/debug.go | 77 +++++++++++++++++++++++++++++ util/cmd/debug/stdin/service.go | 69 ++++++++++++++++++++++++++ 6 files changed, 266 insertions(+), 2 deletions(-) create mode 100644 util/cmd/debug/api/service.go create mode 100644 util/cmd/debug/client/service.go create mode 100644 util/cmd/debug/debug.go create mode 100644 util/cmd/debug/stdin/service.go diff --git a/client/api/service.go b/client/api/service.go index 587c756d..aed12e29 100644 --- a/client/api/service.go +++ b/client/api/service.go @@ -56,7 +56,8 @@ func (s *service) Name() (name string) { func (s *service) Run(ctx context.Context) (err error) { err = s.BaseDrpcServer.Run( ctx, - s.cfg.APIServer.ListenAddrs, func(handler drpc.Handler) drpc.Handler { + s.cfg.APIServer.ListenAddrs, + func(handler drpc.Handler) drpc.Handler { return handler }, s.transport.BasicListener) diff --git a/common/net/rpc/server/drpcserver.go b/common/net/rpc/server/drpcserver.go index 5d894607..73559cfe 100644 --- a/common/net/rpc/server/drpcserver.go +++ b/common/net/rpc/server/drpcserver.go @@ -61,7 +61,8 @@ func (s *drpcServer) Run(ctx context.Context) (err error) { if err = s.metric.Registry().Register(histVec); err != nil { return } - return s.BaseDrpcServer.Run(ctx, + return s.BaseDrpcServer.Run( + ctx, s.config.ListenAddrs, func(handler drpc.Handler) drpc.Handler { return &metric.PrometheusDRPC{ diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go new file mode 100644 index 00000000..4c55aa83 --- /dev/null +++ b/util/cmd/debug/api/service.go @@ -0,0 +1,43 @@ +package api + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + "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/util/cmd/debug/client" +) + +const CName = "debug.api" + +var log = logger.NewNamed(CName) + +type Service interface { + CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) + app.Component +} + +type service struct { + client client.Service +} + +func New() Service { + return &service{} +} + +func (s *service) Init(a *app.App) (err error) { + s.client = a.MustComponent(client.CName).(client.Service) + return nil +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) { + cl, err := s.client.Get(ctx, ip) + if err != nil { + return + } + return cl.CreateSpace(ctx, request) +} diff --git a/util/cmd/debug/client/service.go b/util/cmd/debug/client/service.go new file mode 100644 index 00000000..2c2993ec --- /dev/null +++ b/util/cmd/debug/client/service.go @@ -0,0 +1,73 @@ +package client + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + "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/pkg/ocache" + "net" + "storj.io/drpc/drpcconn" + "time" +) + +type Service interface { + Get(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) + app.ComponentRunnable +} + +const CName = "debug.client" + +var log = logger.NewNamed(CName) + +type service struct { + cache ocache.OCache +} + +func New() Service { + return &service{} +} + +func (s *service) Init(a *app.App) (err error) { + s.cache = ocache.New( + func(ctx context.Context, ip string) (value ocache.Object, err error) { + conn, err := net.Dial("tcp", ip) + if err != nil { + return + } + value = drpcconn.New(conn) + return + }, + ocache.WithLogger(log.Sugar()), + ocache.WithGCPeriod(time.Minute), + ocache.WithTTL(time.Minute*5), + ) + return nil +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) Run(ctx context.Context) (err error) { + return nil +} + +func (s *service) Get(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) { + v, err := s.cache.Get(ctx, ip) + if err != nil { + return nil, err + } + conn := v.(*drpcconn.Conn) + select { + case <-conn.Closed(): + default: + return apiproto.NewDRPCClientApiClient(conn), nil + } + s.cache.Remove(ip) + return s.Get(ctx, ip) +} + +func (s *service) Close(ctx context.Context) (err error) { + return s.cache.Close() +} diff --git a/util/cmd/debug/debug.go b/util/cmd/debug/debug.go new file mode 100644 index 00000000..1910ca79 --- /dev/null +++ b/util/cmd/debug/debug.go @@ -0,0 +1,77 @@ +package main + +import ( + "context" + "flag" + "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/util/cmd/debug/api" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/client" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/stdin" + "go.uber.org/zap" + "net/http" + "os" + "os/signal" + "syscall" + "time" +) + +var log = logger.NewNamed("main") + +var ( + // we can't use "v" here because of glog init (through badger) setting flag.Bool with "v" + flagVersion = flag.Bool("ver", false, "show version and exit") + flagHelp = flag.Bool("h", false, "show help and exit") +) + +func main() { + flag.Parse() + + if *flagVersion { + fmt.Println(app.VersionDescription()) + return + } + if *flagHelp { + flag.PrintDefaults() + return + } + + if debug, ok := os.LookupEnv("ANYPROF"); ok && debug != "" { + go func() { + http.ListenAndServe(debug, nil) + }() + } + + // create app + ctx := context.Background() + a := new(app.App) + Bootstrap(a) + // start app + if err := a.Start(ctx); err != nil { + log.Fatal("can't start app", zap.Error(err)) + } + log.Info("app started", zap.String("version", a.Version())) + + // wait exit signal + exit := make(chan os.Signal, 1) + signal.Notify(exit, os.Interrupt, syscall.SIGKILL, syscall.SIGTERM, syscall.SIGQUIT) + sig := <-exit + log.Info("received exit signal, stop app...", zap.String("signal", fmt.Sprint(sig))) + + // close app + ctx, cancel := context.WithTimeout(ctx, time.Minute) + defer cancel() + if err := a.Close(ctx); err != nil { + log.Fatal("close error", zap.Error(err)) + } else { + log.Info("goodbye!") + } + time.Sleep(time.Second / 3) +} + +func Bootstrap(a *app.App) { + a.Register(client.New()). + Register(api.New()). + Register(stdin.New()) +} diff --git a/util/cmd/debug/stdin/service.go b/util/cmd/debug/stdin/service.go new file mode 100644 index 00000000..a7c3e653 --- /dev/null +++ b/util/cmd/debug/stdin/service.go @@ -0,0 +1,69 @@ +package stdin + +import ( + "bufio" + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + "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/util/cmd/debug/api" + "os" +) + +const CName = "debug.stdin" + +var log = logger.NewNamed(CName).Sugar() + +type Service interface { + app.ComponentRunnable +} + +type service struct { + api api.Service +} + +func New() Service { + return &service{} +} + +func (s *service) Init(a *app.App) (err error) { + s.api = a.MustComponent(api.CName).(api.Service) + return +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) Run(ctx context.Context) (err error) { + go s.readStdin() + return nil +} + +func (s *service) Close(ctx context.Context) (err error) { + return nil +} + +func (s *service) readStdin() { + // create new reader from stdin + reader := bufio.NewReader(os.Stdin) + // start infinite loop to continuously listen to input + for { + // read by one line (enter pressed) + str, err := reader.ReadString('\n') + // check for errors + if err != nil { + // close channel just to inform others + log.Errorf("Error in read string: %s", err) + return + } + log.Debug(str) + + res, err := s.api.CreateSpace(context.Background(), "127.0.0.1:8090", &apiproto.CreateSpaceRequest{}) + if err != nil { + log.Errorf("Error in performing request: %s", err) + return + } + log.Debug(res) + } +} From a370efda8715cfc597b4a3b1c2d6f2941720b34d Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Thu, 1 Dec 2022 16:30:41 +0100 Subject: [PATCH 05/32] WIP debug client --- util/cmd/debug/api/client/service.go | 43 +++++++++++++ util/cmd/debug/api/node/service.go | 32 ++++++++++ util/cmd/debug/api/service.go | 64 ++++++++++++++++--- util/cmd/debug/debug.go | 10 ++- .../debug/{client => drpcclient}/service.go | 27 ++++++-- util/cmd/debug/peers/peers.go | 59 +++++++++++++++++ util/cmd/debug/stdin/service.go | 29 ++++++--- 7 files changed, 239 insertions(+), 25 deletions(-) create mode 100644 util/cmd/debug/api/client/service.go create mode 100644 util/cmd/debug/api/node/service.go rename util/cmd/debug/{client => drpcclient}/service.go (65%) create mode 100644 util/cmd/debug/peers/peers.go diff --git a/util/cmd/debug/api/client/service.go b/util/cmd/debug/api/client/service.go new file mode 100644 index 00000000..70593ae2 --- /dev/null +++ b/util/cmd/debug/api/client/service.go @@ -0,0 +1,43 @@ +package client + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + "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/util/cmd/debug/drpcclient" +) + +const CName = "api.client" + +var log = logger.NewNamed(CName) + +type Service interface { + CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) + app.Component +} + +type service struct { + client drpcclient.Service +} + +func New() Service { + return &service{} +} + +func (s *service) Init(a *app.App) (err error) { + s.client = a.MustComponent(drpcclient.CName).(drpcclient.Service) + return nil +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.CreateSpace(ctx, request) +} diff --git a/util/cmd/debug/api/node/service.go b/util/cmd/debug/api/node/service.go new file mode 100644 index 00000000..900b45f9 --- /dev/null +++ b/util/cmd/debug/api/node/service.go @@ -0,0 +1,32 @@ +package node + +import ( + "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/util/cmd/debug/drpcclient" +) + +const CName = "api.node" + +var log = logger.NewNamed(CName) + +type Service interface { + app.Component +} + +type service struct { + client drpcclient.Service +} + +func New() Service { + return &service{} +} + +func (s *service) Init(a *app.App) (err error) { + s.client = a.MustComponent(drpcclient.CName).(drpcclient.Service) + return nil +} + +func (s *service) Name() (name string) { + return CName +} diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index 4c55aa83..a2c9d302 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -2,31 +2,47 @@ package api import ( "context" + "errors" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" "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/util/cmd/debug/client" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/client" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" ) const CName = "debug.api" var log = logger.NewNamed(CName) +var ( + ErrNoSuchCommand = errors.New("no such command") + ErrIncorrectPeerType = errors.New("incorrect peer type") + ErrIncorrectParamsCount = errors.New("incorrect params count") +) + +type Command struct { + Cmd func(server peers.Peer, params []string) (string, error) +} + type Service interface { - CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) app.Component + Call(server peers.Peer, cmdName string, params []string) (string, error) } type service struct { - client client.Service + clientCommands map[string]Command + nodeCommands map[string]Command } func New() Service { - return &service{} + return &service{clientCommands: map[string]Command{}, nodeCommands: map[string]Command{}} } func (s *service) Init(a *app.App) (err error) { - s.client = a.MustComponent(client.CName).(client.Service) + s.registerClientCommands(a.MustComponent(client.CName).(client.Service)) + s.registerNodeCommands(a.MustComponent(node.CName).(node.Service)) + return nil } @@ -34,10 +50,40 @@ func (s *service) Name() (name string) { return CName } -func (s *service) CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) { - cl, err := s.client.Get(ctx, ip) - if err != nil { +func (s *service) Call(server peers.Peer, cmdName string, params []string) (res string, err error) { + var ( + cmd Command + commands map[string]Command + ) + + switch server.PeerType { + case peers.PeerTypeClient: + commands = s.clientCommands + case peers.PeerTypeNode: + commands = s.nodeCommands + } + cmd, ok := commands[cmdName] + if !ok { + err = ErrNoSuchCommand return } - return cl.CreateSpace(ctx, request) + return cmd.Cmd(server, params) +} + +func (s *service) registerClientCommands(client client.Service) { + s.clientCommands["create-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 0 { + err = ErrIncorrectParamsCount + return + } + resp, err := client.CreateSpace(context.Background(), server.Address, &apiproto.CreateSpaceRequest{}) + if err != nil { + return + } + res = resp.Id + return + }} +} + +func (s *service) registerNodeCommands(node node.Service) { } diff --git a/util/cmd/debug/debug.go b/util/cmd/debug/debug.go index 1910ca79..5b273d33 100644 --- a/util/cmd/debug/debug.go +++ b/util/cmd/debug/debug.go @@ -7,7 +7,10 @@ import ( "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/util/cmd/debug/api" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/client" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/client" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/drpcclient" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/stdin" "go.uber.org/zap" "net/http" @@ -71,7 +74,10 @@ func main() { } func Bootstrap(a *app.App) { - a.Register(client.New()). + a.Register(drpcclient.New()). + Register(peers.New()). + Register(client.New()). + Register(node.New()). Register(api.New()). Register(stdin.New()) } diff --git a/util/cmd/debug/client/service.go b/util/cmd/debug/drpcclient/service.go similarity index 65% rename from util/cmd/debug/client/service.go rename to util/cmd/debug/drpcclient/service.go index 2c2993ec..2d4fb4bf 100644 --- a/util/cmd/debug/client/service.go +++ b/util/cmd/debug/drpcclient/service.go @@ -1,4 +1,4 @@ -package client +package drpcclient import ( "context" @@ -12,11 +12,12 @@ import ( ) type Service interface { - Get(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) + GetClient(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) + GetNode(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) app.ComponentRunnable } -const CName = "debug.client" +const CName = "debug.drpcclient" var log = logger.NewNamed(CName) @@ -53,7 +54,7 @@ func (s *service) Run(ctx context.Context) (err error) { return nil } -func (s *service) Get(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) { +func (s *service) GetClient(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) { v, err := s.cache.Get(ctx, ip) if err != nil { return nil, err @@ -65,7 +66,23 @@ func (s *service) Get(ctx context.Context, ip string) (apiproto.DRPCClientApiCli return apiproto.NewDRPCClientApiClient(conn), nil } s.cache.Remove(ip) - return s.Get(ctx, ip) + return s.GetClient(ctx, ip) +} + +func (s *service) GetNode(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) { + v, err := s.cache.Get(ctx, ip) + if err != nil { + return nil, err + } + conn := v.(*drpcconn.Conn) + select { + case <-conn.Closed(): + default: + panic("should return node") + return apiproto.NewDRPCClientApiClient(conn), nil + } + s.cache.Remove(ip) + return s.GetClient(ctx, ip) } func (s *service) Close(ctx context.Context) (err error) { diff --git a/util/cmd/debug/peers/peers.go b/util/cmd/debug/peers/peers.go new file mode 100644 index 00000000..9b0053c8 --- /dev/null +++ b/util/cmd/debug/peers/peers.go @@ -0,0 +1,59 @@ +package peers + +import ( + "errors" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" +) + +type PeerType int + +const ( + PeerTypeClient PeerType = iota + PeerTypeNode +) + +const CName = "debug.peers" + +var ErrNoSuchPeer = errors.New("no such peer") + +type Service interface { + app.Component + Get(alias string) (Peer, error) +} + +type Peer struct { + PeerType PeerType + Address string +} + +type service struct { + peerMap map[string]Peer +} + +func New() Service { + return &service{peerMap: map[string]Peer{}} +} + +func (s *service) Init(a *app.App) (err error) { + s.peerMap["client1"] = Peer{ + PeerType: PeerTypeClient, + Address: "127.0.0.1:8090", + } + s.peerMap["client2"] = Peer{ + PeerType: PeerTypeClient, + Address: "127.0.0.1:8091", + } + return +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) Get(alias string) (Peer, error) { + peer, ok := s.peerMap[alias] + if !ok { + return Peer{}, ErrNoSuchPeer + } + return peer, nil +} diff --git a/util/cmd/debug/stdin/service.go b/util/cmd/debug/stdin/service.go index a7c3e653..716829b2 100644 --- a/util/cmd/debug/stdin/service.go +++ b/util/cmd/debug/stdin/service.go @@ -3,11 +3,12 @@ package stdin import ( "bufio" "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" "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/util/cmd/debug/api" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" "os" + "strings" ) const CName = "debug.stdin" @@ -19,7 +20,8 @@ type Service interface { } type service struct { - api api.Service + api api.Service + peers peers.Service } func New() Service { @@ -28,6 +30,7 @@ func New() Service { func (s *service) Init(a *app.App) (err error) { s.api = a.MustComponent(api.CName).(api.Service) + s.peers = a.MustComponent(peers.CName).(peers.Service) return } @@ -45,21 +48,29 @@ func (s *service) Close(ctx context.Context) (err error) { } func (s *service) readStdin() { - // create new reader from stdin reader := bufio.NewReader(os.Stdin) - // start infinite loop to continuously listen to input for { - // read by one line (enter pressed) str, err := reader.ReadString('\n') - // check for errors if err != nil { - // close channel just to inform others log.Errorf("Error in read string: %s", err) return } - log.Debug(str) + // trimming newline + str = str[:len(str)-1] - res, err := s.api.CreateSpace(context.Background(), "127.0.0.1:8090", &apiproto.CreateSpaceRequest{}) + log.Debug(str) + split := strings.Split(str, " ") + if len(split) < 2 { + log.Error("incorrect number of arguments") + continue + } + + peer, err := s.peers.Get(split[0]) + if err != nil { + log.Error("no such peer") + continue + } + res, err := s.api.Call(peer, split[1], split[2:]) if err != nil { log.Errorf("Error in performing request: %s", err) return From bdae3a76d0fa40303a2fd2466f6bc79f2844feec Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Thu, 1 Dec 2022 21:28:36 +0100 Subject: [PATCH 06/32] Redirect logs and add more commands --- util/cmd/debug/api/client/service.go | 54 ++++++++++++++++++++++++++ util/cmd/debug/api/service.go | 58 +++++++++++++++++++++++++++- util/cmd/debug/debug.go | 14 +++++++ util/cmd/debug/stdin/service.go | 18 +++++---- 4 files changed, 135 insertions(+), 9 deletions(-) diff --git a/util/cmd/debug/api/client/service.go b/util/cmd/debug/api/client/service.go index 70593ae2..1acdcb91 100644 --- a/util/cmd/debug/api/client/service.go +++ b/util/cmd/debug/api/client/service.go @@ -14,6 +14,12 @@ var log = logger.NewNamed(CName) type Service interface { CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) + DeriveSpace(ctx context.Context, ip string, request *apiproto.DeriveSpaceRequest) (resp *apiproto.DeriveSpaceResponse, err error) + CreateDocument(ctx context.Context, ip string, request *apiproto.CreateDocumentRequest) (resp *apiproto.CreateDocumentResponse, err error) + DeleteDocument(ctx context.Context, ip string, request *apiproto.DeleteDocumentRequest) (resp *apiproto.DeleteDocumentResponse, err error) + AddText(ctx context.Context, ip string, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) + 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) app.Component } @@ -41,3 +47,51 @@ func (s *service) CreateSpace(ctx context.Context, ip string, request *apiproto. } return cl.CreateSpace(ctx, request) } + +func (s *service) DeriveSpace(ctx context.Context, ip string, request *apiproto.DeriveSpaceRequest) (resp *apiproto.DeriveSpaceResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.DeriveSpace(ctx, request) +} + +func (s *service) CreateDocument(ctx context.Context, ip string, request *apiproto.CreateDocumentRequest) (resp *apiproto.CreateDocumentResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.CreateDocument(ctx, request) +} + +func (s *service) DeleteDocument(ctx context.Context, ip string, request *apiproto.DeleteDocumentRequest) (resp *apiproto.DeleteDocumentResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.DeleteDocument(ctx, request) +} + +func (s *service) AddText(ctx context.Context, ip string, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.AddText(ctx, request) +} + +func (s *service) AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.AllTrees(ctx, request) +} + +func (s *service) AllSpaces(ctx context.Context, ip string, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.AllSpaces(ctx, request) +} diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index a2c9d302..fb80a7d0 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -55,7 +55,6 @@ func (s *service) Call(server peers.Peer, cmdName string, params []string) (res cmd Command commands map[string]Command ) - switch server.PeerType { case peers.PeerTypeClient: commands = s.clientCommands @@ -83,6 +82,63 @@ func (s *service) registerClientCommands(client client.Service) { res = resp.Id return }} + s.clientCommands["derive-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 0 { + err = ErrIncorrectParamsCount + return + } + resp, err := client.DeriveSpace(context.Background(), server.Address, &apiproto.DeriveSpaceRequest{}) + if err != nil { + return + } + res = resp.Id + return + }} + s.clientCommands["create-document"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 1 { + err = ErrIncorrectParamsCount + return + } + resp, err := client.CreateDocument(context.Background(), server.Address, &apiproto.CreateDocumentRequest{ + SpaceId: params[0], + }) + if err != nil { + return + } + res = resp.Id + return + }} + s.clientCommands["delete-document"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 2 { + err = ErrIncorrectParamsCount + return + } + _, err = client.DeleteDocument(context.Background(), server.Address, &apiproto.DeleteDocumentRequest{ + SpaceId: params[0], + DocumentId: params[1], + }) + if err != nil { + return + } + res = "deleted" + return + }} + s.clientCommands["add-text"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 3 { + err = ErrIncorrectParamsCount + return + } + resp, err := client.AddText(context.Background(), server.Address, &apiproto.AddTextRequest{ + SpaceId: params[0], + DocumentId: params[1], + Text: params[2], + }) + if err != nil { + return + } + res = resp.DocumentId + return + }} } func (s *service) registerNodeCommands(node node.Service) { diff --git a/util/cmd/debug/debug.go b/util/cmd/debug/debug.go index 5b273d33..3a29c7bf 100644 --- a/util/cmd/debug/debug.go +++ b/util/cmd/debug/debug.go @@ -13,6 +13,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/stdin" "go.uber.org/zap" + "go.uber.org/zap/zapcore" "net/http" "os" "os/signal" @@ -28,6 +29,19 @@ var ( flagHelp = flag.Bool("h", false, "show help and exit") ) +func init() { + config := zap.NewProductionEncoderConfig() + config.EncodeTime = zapcore.ISO8601TimeEncoder + + logFile, err := os.OpenFile("debug.json", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + panic(err) + } + + core := zapcore.NewCore(zapcore.NewJSONEncoder(config), zapcore.AddSync(logFile), zapcore.DebugLevel) + logger.SetDefault(zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))) +} + func main() { flag.Parse() diff --git a/util/cmd/debug/stdin/service.go b/util/cmd/debug/stdin/service.go index 716829b2..f51535f2 100644 --- a/util/cmd/debug/stdin/service.go +++ b/util/cmd/debug/stdin/service.go @@ -3,6 +3,7 @@ package stdin import ( "bufio" "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/util/cmd/debug/api" @@ -13,7 +14,7 @@ import ( const CName = "debug.stdin" -var log = logger.NewNamed(CName).Sugar() +var log = logger.NewNamed(CName) type Service interface { app.ComponentRunnable @@ -50,31 +51,32 @@ func (s *service) Close(ctx context.Context) (err error) { func (s *service) readStdin() { reader := bufio.NewReader(os.Stdin) for { + fmt.Print("> ") str, err := reader.ReadString('\n') if err != nil { - log.Errorf("Error in read string: %s", err) + fmt.Println("error in read string:", err) return } // trimming newline str = str[:len(str)-1] - log.Debug(str) split := strings.Split(str, " ") if len(split) < 2 { - log.Error("incorrect number of arguments") + fmt.Println("incorrect number of arguments") continue } peer, err := s.peers.Get(split[0]) if err != nil { - log.Error("no such peer") + fmt.Println("no such peer", err) continue } + res, err := s.api.Call(peer, split[1], split[2:]) if err != nil { - log.Errorf("Error in performing request: %s", err) - return + fmt.Println("error in performing request:", err) + continue } - log.Debug(res) + fmt.Println(res) } } From 4593637e232992b00e2717c2a4dc43ae94fa6584 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Thu, 1 Dec 2022 22:08:01 +0100 Subject: [PATCH 07/32] Add scripts --- util/cmd/debug/api/service.go | 72 ++++++++++++++++++++++++++++++--- util/cmd/debug/stdin/service.go | 22 ++++++++-- 2 files changed, 86 insertions(+), 8 deletions(-) diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index fb80a7d0..8d3afffc 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -3,12 +3,14 @@ package api import ( "context" "errors" + "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" "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/util/cmd/debug/api/client" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" + "strconv" ) const CName = "debug.api" @@ -25,23 +27,40 @@ type Command struct { Cmd func(server peers.Peer, params []string) (string, error) } +type Script struct { + Cmd func(params []string) (string, error) +} + type Service interface { app.Component Call(server peers.Peer, cmdName string, params []string) (string, error) + Script(scriptName string, params []string) (res string, err error) } type service struct { clientCommands map[string]Command nodeCommands map[string]Command + scripts map[string]Script + client client.Service + node node.Service + peers peers.Service } func New() Service { - return &service{clientCommands: map[string]Command{}, nodeCommands: map[string]Command{}} + return &service{ + clientCommands: map[string]Command{}, + nodeCommands: map[string]Command{}, + scripts: map[string]Script{}, + } } func (s *service) Init(a *app.App) (err error) { - s.registerClientCommands(a.MustComponent(client.CName).(client.Service)) - s.registerNodeCommands(a.MustComponent(node.CName).(node.Service)) + s.client = a.MustComponent(client.CName).(client.Service) + s.node = a.MustComponent(node.CName).(node.Service) + s.peers = a.MustComponent(peers.CName).(peers.Service) + s.registerClientCommands() + s.registerNodeCommands() + s.registerScripts() return nil } @@ -50,6 +69,15 @@ func (s *service) Name() (name string) { return CName } +func (s *service) Script(scriptName string, params []string) (res string, err error) { + script, ok := s.scripts[scriptName] + if !ok { + err = ErrNoSuchCommand + return + } + return script.Cmd(params) +} + func (s *service) Call(server peers.Peer, cmdName string, params []string) (res string, err error) { var ( cmd Command @@ -69,7 +97,8 @@ func (s *service) Call(server peers.Peer, cmdName string, params []string) (res return cmd.Cmd(server, params) } -func (s *service) registerClientCommands(client client.Service) { +func (s *service) registerClientCommands() { + client := s.client s.clientCommands["create-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { if len(params) != 0 { err = ErrIncorrectParamsCount @@ -141,5 +170,38 @@ func (s *service) registerClientCommands(client client.Service) { }} } -func (s *service) registerNodeCommands(node node.Service) { +func (s *service) registerNodeCommands() { +} + +func (s *service) registerScripts() { + s.scripts["create-many"] = Script{Cmd: func(params []string) (res string, err error) { + if len(params) != 5 { + err = ErrIncorrectParamsCount + return + } + peer, err := s.peers.Get(params[0]) + if err != nil { + return + } + last, err := strconv.Atoi(params[4]) + if err != nil { + return + } + if last <= 0 { + err = fmt.Errorf("incorrect number of steps") + return + } + + for i := 0; i < last; i++ { + _, err := s.client.AddText(context.Background(), peer.Address, &apiproto.AddTextRequest{ + SpaceId: params[1], + DocumentId: params[2], + Text: params[3], + }) + if err != nil { + return "", err + } + } + return + }} } diff --git a/util/cmd/debug/stdin/service.go b/util/cmd/debug/stdin/service.go index f51535f2..982a4b93 100644 --- a/util/cmd/debug/stdin/service.go +++ b/util/cmd/debug/stdin/service.go @@ -50,6 +50,7 @@ func (s *service) Close(ctx context.Context) (err error) { func (s *service) readStdin() { reader := bufio.NewReader(os.Stdin) +Loop: for { fmt.Print("> ") str, err := reader.ReadString('\n') @@ -65,16 +66,31 @@ func (s *service) readStdin() { fmt.Println("incorrect number of arguments") continue } + switch split[0] { + case "script": + res, err := s.api.Script(split[1], split[2:]) + if err != nil { + fmt.Println("error in performing script:", err) + continue Loop + } + fmt.Println(res) + continue Loop + case "cmd": + break + default: + fmt.Println("incorrect input") + continue Loop + } - peer, err := s.peers.Get(split[0]) + peer, err := s.peers.Get(split[1]) if err != nil { fmt.Println("no such peer", err) continue } - res, err := s.api.Call(peer, split[1], split[2:]) + res, err := s.api.Call(peer, split[2], split[3:]) if err != nil { - fmt.Println("error in performing request:", err) + fmt.Println("error in performing command:", err) continue } fmt.Println(res) From ea9a51ec029ac99122ac4b73282a1ce979d95b43 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Fri, 2 Dec 2022 09:52:04 +0100 Subject: [PATCH 08/32] Add load space methods and fix storage errors --- client/api/apiproto/api.pb.go | 358 ++++++++++++++++++++++++--- client/api/apiproto/api_drpc.pb.go | 42 +++- client/api/apiproto/protos/api.proto | 8 + client/api/rpchandler.go | 9 + client/storage/spacestorage.go | 4 +- etc/configs/client2.yml | 4 +- node/storage/spacestorage.go | 2 +- util/cmd/debug/api/client/service.go | 9 + util/cmd/debug/api/service.go | 14 ++ 9 files changed, 410 insertions(+), 40 deletions(-) diff --git a/client/api/apiproto/api.pb.go b/client/api/apiproto/api.pb.go index 59eaeb5d..61c99e32 100644 --- a/client/api/apiproto/api.pb.go +++ b/client/api/apiproto/api.pb.go @@ -786,6 +786,86 @@ func (m *AllSpacesResponse) GetSpaceIds() []string { return nil } +type LoadSpaceRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` +} + +func (m *LoadSpaceRequest) Reset() { *m = LoadSpaceRequest{} } +func (m *LoadSpaceRequest) String() string { return proto.CompactTextString(m) } +func (*LoadSpaceRequest) ProtoMessage() {} +func (*LoadSpaceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{17} +} +func (m *LoadSpaceRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LoadSpaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_LoadSpaceRequest.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 *LoadSpaceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoadSpaceRequest.Merge(m, src) +} +func (m *LoadSpaceRequest) XXX_Size() int { + return m.Size() +} +func (m *LoadSpaceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_LoadSpaceRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_LoadSpaceRequest proto.InternalMessageInfo + +func (m *LoadSpaceRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +type LoadSpaceResponse struct { +} + +func (m *LoadSpaceResponse) Reset() { *m = LoadSpaceResponse{} } +func (m *LoadSpaceResponse) String() string { return proto.CompactTextString(m) } +func (*LoadSpaceResponse) ProtoMessage() {} +func (*LoadSpaceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{18} +} +func (m *LoadSpaceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LoadSpaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_LoadSpaceResponse.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 *LoadSpaceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoadSpaceResponse.Merge(m, src) +} +func (m *LoadSpaceResponse) XXX_Size() int { + return m.Size() +} +func (m *LoadSpaceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_LoadSpaceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_LoadSpaceResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*CreateSpaceRequest)(nil), "api.CreateSpaceRequest") proto.RegisterType((*CreateSpaceResponse)(nil), "api.CreateSpaceResponse") @@ -804,45 +884,48 @@ func init() { proto.RegisterType((*AllTreesResponse)(nil), "api.AllTreesResponse") proto.RegisterType((*AllSpacesRequest)(nil), "api.AllSpacesRequest") proto.RegisterType((*AllSpacesResponse)(nil), "api.AllSpacesResponse") + proto.RegisterType((*LoadSpaceRequest)(nil), "api.LoadSpaceRequest") + proto.RegisterType((*LoadSpaceResponse)(nil), "api.LoadSpaceResponse") } func init() { proto.RegisterFile("api/apiproto/protos/api.proto", fileDescriptor_fc31080c27db9707) } var fileDescriptor_fc31080c27db9707 = []byte{ - // 517 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x8f, 0xd2, 0x50, - 0x14, 0xa5, 0xc0, 0x7c, 0xf4, 0x60, 0x60, 0xbc, 0x03, 0xd8, 0xd4, 0x58, 0xc9, 0x4b, 0x9c, 0x90, - 0x68, 0x86, 0x38, 0x63, 0x62, 0xe2, 0x6a, 0x70, 0xd8, 0x10, 0x57, 0xe2, 0xac, 0x5c, 0x98, 0xd4, - 0xe9, 0x4b, 0x6c, 0xc2, 0xc7, 0x93, 0x16, 0x33, 0x7f, 0xc1, 0x9d, 0x3f, 0xcb, 0xe5, 0x2c, 0x5d, - 0x1a, 0xf8, 0x23, 0xa6, 0xaf, 0xb7, 0xa5, 0x1f, 0x4c, 0xcc, 0x64, 0x36, 0xf0, 0xee, 0x79, 0xf7, - 0x9c, 0x7b, 0x4b, 0xcf, 0x01, 0xcf, 0x5c, 0xe5, 0x0f, 0x5c, 0xe5, 0xab, 0xe5, 0x22, 0x5c, 0x0c, - 0xf4, 0x67, 0x10, 0xd5, 0xa7, 0xfa, 0x48, 0x35, 0x57, 0xf9, 0xa2, 0x0d, 0xba, 0x5c, 0x4a, 0x37, - 0x94, 0x9f, 0x94, 0x7b, 0x2d, 0x27, 0xf2, 0xfb, 0x4a, 0x06, 0xa1, 0x78, 0x81, 0xe3, 0x1c, 0x1a, - 0xa8, 0xc5, 0x3c, 0x90, 0xd4, 0x44, 0xd5, 0xf7, 0x2c, 0xa3, 0x67, 0xf4, 0xcd, 0x49, 0xd5, 0xf7, - 0x22, 0xf2, 0x48, 0x2e, 0xfd, 0x1f, 0x25, 0x72, 0x0e, 0xbd, 0x83, 0xfc, 0x1a, 0x9d, 0x78, 0xc6, - 0x68, 0x71, 0xbd, 0x9a, 0xc9, 0x79, 0xc8, 0x7c, 0xb2, 0x70, 0x10, 0x44, 0xcc, 0x71, 0xd2, 0x9d, - 0x94, 0xa2, 0x8f, 0x6e, 0x91, 0x72, 0x87, 0xf8, 0x47, 0x74, 0x46, 0x72, 0x2a, 0xef, 0x21, 0x4e, - 0x0e, 0xe0, 0x71, 0xf3, 0xd8, 0xb3, 0xaa, 0xfa, 0x32, 0x83, 0x08, 0x0b, 0xdd, 0xa2, 0x64, 0x3c, - 0x5c, 0x7c, 0x41, 0x73, 0xe8, 0x79, 0x57, 0xf2, 0xe6, 0xe1, 0x53, 0x88, 0x50, 0x0f, 0xe5, 0x4d, - 0x68, 0xd5, 0xf4, 0x8d, 0x3e, 0x8b, 0x31, 0x5a, 0xa9, 0x3e, 0x3f, 0x6f, 0x5e, 0xc6, 0x28, 0xc9, - 0x74, 0xb1, 0xff, 0x4d, 0xba, 0x5e, 0x3a, 0x82, 0x2b, 0xf1, 0x01, 0xad, 0xd1, 0x6a, 0xa6, 0xae, - 0x96, 0x52, 0x3e, 0xfc, 0x17, 0x39, 0xc1, 0xd1, 0x56, 0x8c, 0x17, 0x23, 0xd4, 0xbd, 0xd5, 0x4c, - 0xb1, 0x94, 0x3e, 0x8b, 0x97, 0x68, 0x0d, 0xa7, 0xd3, 0xa8, 0x2d, 0xf8, 0xff, 0x3b, 0x7e, 0x85, - 0x7a, 0xd4, 0x59, 0x7c, 0xa3, 0xd4, 0xc6, 0x5e, 0xf4, 0x0c, 0x81, 0x55, 0xed, 0xd5, 0xfa, 0xe6, - 0x24, 0x2e, 0xc4, 0x39, 0x8e, 0xb6, 0xd2, 0xbc, 0xc2, 0x73, 0xec, 0x85, 0x11, 0x60, 0x19, 0xbd, - 0x5a, 0xbf, 0x71, 0x66, 0x9e, 0x46, 0x96, 0xd7, 0x4b, 0xc6, 0xb8, 0x20, 0x4d, 0xd2, 0xee, 0x4c, - 0x16, 0x12, 0x03, 0x3c, 0xce, 0x60, 0xac, 0x64, 0xe3, 0x90, 0xd7, 0x8a, 0xc5, 0xcc, 0x49, 0x5a, - 0x9f, 0xfd, 0xac, 0xc3, 0xbc, 0x9c, 0xfa, 0x72, 0x1e, 0x0e, 0x95, 0x4f, 0x17, 0x68, 0x64, 0x02, - 0x43, 0x4f, 0xf4, 0xcc, 0x72, 0xb0, 0x6c, 0xab, 0x7c, 0xc1, 0xb3, 0x2e, 0xd0, 0xc8, 0xa4, 0x86, - 0x15, 0xca, 0xe9, 0x62, 0x85, 0x5d, 0x01, 0x1b, 0xa3, 0x99, 0x4f, 0x07, 0xd9, 0x99, 0x69, 0x85, - 0x20, 0xd8, 0x4f, 0x77, 0xde, 0x6d, 0xa5, 0xf2, 0x5e, 0x67, 0xa9, 0x9d, 0x99, 0x62, 0xa9, 0xdd, - 0xe1, 0xa0, 0x37, 0x38, 0x60, 0xf3, 0xd2, 0xb1, 0xee, 0xcb, 0x47, 0xc5, 0x6e, 0xe7, 0x41, 0x66, - 0xbd, 0xc5, 0x61, 0x62, 0x2d, 0x8a, 0x3b, 0x0a, 0xb6, 0xb5, 0x3b, 0x05, 0x74, 0x4b, 0x4c, 0x0c, - 0xc1, 0xc4, 0x82, 0xf5, 0x98, 0x58, 0x72, 0xcd, 0x3b, 0x98, 0xa9, 0x01, 0x28, 0xed, 0xc9, 0x99, - 0xc4, 0xee, 0x16, 0xe1, 0x98, 0xfb, 0xfe, 0xe4, 0xf7, 0xda, 0x31, 0x6e, 0xd7, 0x8e, 0xf1, 0x77, - 0xed, 0x18, 0xbf, 0x36, 0x4e, 0xe5, 0x76, 0xe3, 0x54, 0xfe, 0x6c, 0x9c, 0xca, 0xe7, 0x47, 0xd9, - 0xbf, 0xe0, 0xaf, 0xfb, 0xfa, 0xeb, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0x60, 0xfe, - 0x5b, 0x99, 0x05, 0x00, 0x00, + // 544 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0x8d, 0x93, 0xf4, 0xc3, 0x13, 0x94, 0xa4, 0x93, 0x0f, 0x2c, 0x23, 0x4c, 0xb4, 0x12, 0x55, + 0x24, 0xaa, 0x46, 0xb4, 0x48, 0x48, 0x9c, 0x1a, 0x9a, 0x4b, 0x04, 0x17, 0x42, 0x4f, 0x1c, 0x90, + 0x4c, 0x77, 0x25, 0x2c, 0x25, 0xf1, 0x12, 0x3b, 0xa8, 0x3f, 0x83, 0x3f, 0x85, 0xc4, 0xb1, 0x47, + 0x8e, 0x28, 0xf9, 0x23, 0xc8, 0xeb, 0xf1, 0xd7, 0x3a, 0x05, 0x55, 0xbd, 0x24, 0x9e, 0xb7, 0xf3, + 0xde, 0xcc, 0xc6, 0xef, 0x29, 0xf0, 0xd4, 0x95, 0xde, 0xc8, 0x95, 0x9e, 0x5c, 0xf9, 0xa1, 0x3f, + 0x52, 0x9f, 0x41, 0x54, 0x9f, 0xaa, 0x47, 0xac, 0xb9, 0xd2, 0x63, 0x5d, 0xc0, 0xcb, 0x95, 0x70, + 0x43, 0xf1, 0x51, 0xba, 0xd7, 0x62, 0x26, 0xbe, 0xad, 0x45, 0x10, 0xb2, 0xe7, 0xd0, 0x29, 0xa0, + 0x81, 0xf4, 0x97, 0x81, 0xc0, 0x26, 0x54, 0x3d, 0x6e, 0x19, 0x03, 0x63, 0x68, 0xce, 0xaa, 0x1e, + 0x8f, 0xc8, 0x13, 0xb1, 0xf2, 0xbe, 0x97, 0xc8, 0x05, 0xf4, 0x0e, 0xf2, 0x4b, 0xe8, 0xc5, 0x33, + 0x26, 0xfe, 0xf5, 0x7a, 0x21, 0x96, 0x21, 0xf1, 0xd1, 0x82, 0x83, 0x20, 0x62, 0x4e, 0x93, 0xee, + 0xa4, 0x64, 0x43, 0xe8, 0xeb, 0x94, 0x3b, 0xc4, 0x3f, 0x40, 0x6f, 0x22, 0xe6, 0xe2, 0x1e, 0xe2, + 0xe8, 0x00, 0x70, 0x6a, 0x9e, 0x72, 0xab, 0xaa, 0x0e, 0x73, 0x08, 0xb3, 0xa0, 0xaf, 0x4b, 0xc6, + 0xc3, 0xd9, 0x67, 0x68, 0x8e, 0x39, 0xbf, 0x12, 0x37, 0x0f, 0x9f, 0x82, 0x08, 0xf5, 0x50, 0xdc, + 0x84, 0x56, 0x4d, 0x9d, 0xa8, 0x67, 0x36, 0x85, 0x56, 0xaa, 0x4f, 0xf7, 0x2d, 0xca, 0x18, 0x25, + 0x99, 0x3e, 0xec, 0x7f, 0x15, 0x2e, 0x4f, 0x47, 0x50, 0xc5, 0xde, 0x41, 0x6b, 0xb2, 0x5e, 0xc8, + 0xab, 0x95, 0x10, 0x0f, 0xff, 0x45, 0x8e, 0xa1, 0x9d, 0x89, 0xd1, 0x62, 0x08, 0x75, 0xbe, 0x5e, + 0x48, 0x92, 0x52, 0xcf, 0xec, 0x05, 0xb4, 0xc6, 0xf3, 0x79, 0xd4, 0x16, 0xfc, 0xff, 0x1d, 0x9f, + 0x40, 0x3d, 0xea, 0xd4, 0xdf, 0x28, 0x76, 0x61, 0x2f, 0xba, 0x43, 0x60, 0x55, 0x07, 0xb5, 0xa1, + 0x39, 0x8b, 0x0b, 0x76, 0x0e, 0xed, 0x4c, 0x9a, 0x56, 0x78, 0x06, 0x7b, 0x61, 0x04, 0x58, 0xc6, + 0xa0, 0x36, 0x6c, 0x9c, 0x99, 0xa7, 0x91, 0xe5, 0xd5, 0x92, 0x31, 0xce, 0x50, 0x91, 0x94, 0x3b, + 0x93, 0x85, 0xd8, 0x08, 0x8e, 0x72, 0x18, 0x29, 0xd9, 0x70, 0x48, 0x6b, 0xc5, 0x62, 0xe6, 0x2c, + 0xad, 0xd9, 0x09, 0xb4, 0xdf, 0xfb, 0x2e, 0xcf, 0x3b, 0xff, 0x1f, 0xb7, 0xea, 0xc0, 0x51, 0xae, + 0x3b, 0x96, 0x3f, 0xfb, 0x59, 0x07, 0xf3, 0x72, 0xee, 0x89, 0x65, 0x38, 0x96, 0x1e, 0x5e, 0x40, + 0x23, 0x97, 0x39, 0x7c, 0xac, 0xd6, 0x2e, 0x67, 0xd3, 0xb6, 0xca, 0x07, 0xb4, 0xee, 0x05, 0x34, + 0x72, 0xc1, 0x23, 0x85, 0x72, 0x40, 0x49, 0x61, 0x57, 0x46, 0xa7, 0xd0, 0x2c, 0x06, 0x0c, 0xed, + 0xdc, 0x34, 0x2d, 0x4b, 0xf6, 0x93, 0x9d, 0x67, 0x99, 0x54, 0x31, 0x2e, 0x24, 0xb5, 0x33, 0x96, + 0x24, 0xb5, 0x3b, 0x5f, 0xf8, 0x0a, 0x0e, 0xc8, 0xff, 0xd8, 0x51, 0x7d, 0xc5, 0xb4, 0xd9, 0xdd, + 0x22, 0x48, 0xac, 0xd7, 0x70, 0x98, 0xb8, 0x13, 0xe3, 0x0e, 0xcd, 0xf9, 0x76, 0x4f, 0x43, 0x33, + 0x62, 0xe2, 0x29, 0x22, 0x6a, 0xee, 0x25, 0x62, 0xc9, 0x78, 0x6f, 0xc0, 0x4c, 0x3d, 0x84, 0x69, + 0x4f, 0xc1, 0x67, 0x76, 0x5f, 0x87, 0x33, 0x6e, 0x6a, 0x10, 0xe2, 0xea, 0xf6, 0x22, 0x6e, 0xc9, + 0x47, 0x6f, 0x8f, 0x7f, 0x6d, 0x1c, 0xe3, 0x76, 0xe3, 0x18, 0x7f, 0x36, 0x8e, 0xf1, 0x63, 0xeb, + 0x54, 0x6e, 0xb7, 0x4e, 0xe5, 0xf7, 0xd6, 0xa9, 0x7c, 0x7a, 0x94, 0xff, 0x07, 0xf8, 0xb2, 0xaf, + 0xbe, 0xce, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xb5, 0x35, 0xcb, 0x18, 0x06, 0x00, 0x00, } func (m *CreateSpaceRequest) Marshal() (dAtA []byte, err error) { @@ -1380,6 +1463,59 @@ func (m *AllSpacesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *LoadSpaceRequest) 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 *LoadSpaceRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LoadSpaceRequest) 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *LoadSpaceResponse) 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 *LoadSpaceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LoadSpaceResponse) 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 @@ -1626,6 +1762,28 @@ func (m *AllSpacesResponse) Size() (n int) { return n } +func (m *LoadSpaceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *LoadSpaceResponse) 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 } @@ -3092,6 +3250,138 @@ func (m *AllSpacesResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *LoadSpaceRequest) 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: LoadSpaceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LoadSpaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 *LoadSpaceResponse) 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: LoadSpaceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LoadSpaceResponse: 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 089dd379..a02e0f1a 100644 --- a/client/api/apiproto/api_drpc.pb.go +++ b/client/api/apiproto/api_drpc.pb.go @@ -48,6 +48,7 @@ type DRPCClientApiClient interface { DumpTree(ctx context.Context, in *DumpTreeRequest) (*DumpTreeResponse, error) AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) + LoadSpace(ctx context.Context, in *LoadSpaceRequest) (*LoadSpaceResponse, error) } type drpcClientApiClient struct { @@ -132,6 +133,15 @@ func (c *drpcClientApiClient) AllSpaces(ctx context.Context, in *AllSpacesReques return out, nil } +func (c *drpcClientApiClient) LoadSpace(ctx context.Context, in *LoadSpaceRequest) (*LoadSpaceResponse, error) { + out := new(LoadSpaceResponse) + err := c.cc.Invoke(ctx, "/api.ClientApi/LoadSpace", 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) @@ -141,6 +151,7 @@ type DRPCClientApiServer interface { DumpTree(context.Context, *DumpTreeRequest) (*DumpTreeResponse, error) AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) AllSpaces(context.Context, *AllSpacesRequest) (*AllSpacesResponse, error) + LoadSpace(context.Context, *LoadSpaceRequest) (*LoadSpaceResponse, error) } type DRPCClientApiUnimplementedServer struct{} @@ -177,9 +188,13 @@ func (s *DRPCClientApiUnimplementedServer) AllSpaces(context.Context, *AllSpaces return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) } +func (s *DRPCClientApiUnimplementedServer) LoadSpace(context.Context, *LoadSpaceRequest) (*LoadSpaceResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + type DRPCClientApiDescription struct{} -func (DRPCClientApiDescription) NumMethods() int { return 8 } +func (DRPCClientApiDescription) NumMethods() int { return 9 } func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { switch n { @@ -255,6 +270,15 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei in1.(*AllSpacesRequest), ) }, DRPCClientApiServer.AllSpaces, true + case 8: + return "/api.ClientApi/LoadSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + LoadSpace( + ctx, + in1.(*LoadSpaceRequest), + ) + }, DRPCClientApiServer.LoadSpace, true default: return "", nil, nil, nil, false } @@ -391,3 +415,19 @@ func (x *drpcClientApi_AllSpacesStream) SendAndClose(m *AllSpacesResponse) error } return x.CloseSend() } + +type DRPCClientApi_LoadSpaceStream interface { + drpc.Stream + SendAndClose(*LoadSpaceResponse) error +} + +type drpcClientApi_LoadSpaceStream struct { + drpc.Stream +} + +func (x *drpcClientApi_LoadSpaceStream) SendAndClose(m *LoadSpaceResponse) 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 4ac23157..616cfbed 100644 --- a/client/api/apiproto/protos/api.proto +++ b/client/api/apiproto/protos/api.proto @@ -12,6 +12,7 @@ service ClientApi { rpc DumpTree(DumpTreeRequest) returns(DumpTreeResponse); rpc AllTrees(AllTreesRequest) returns(AllTreesResponse); rpc AllSpaces(AllSpacesRequest) returns(AllSpacesResponse); + rpc LoadSpace(LoadSpaceRequest) returns(LoadSpaceResponse); } message CreateSpaceRequest { @@ -82,4 +83,11 @@ message AllSpacesRequest { message AllSpacesResponse { repeated string spaceIds = 1; +} + +message LoadSpaceRequest { + string spaceId = 1; +} + +message LoadSpaceResponse { } \ No newline at end of file diff --git a/client/api/rpchandler.go b/client/api/rpchandler.go index 707afd24..bdabe3d6 100644 --- a/client/api/rpchandler.go +++ b/client/api/rpchandler.go @@ -9,6 +9,15 @@ type rpcHandler struct { controller Controller } +func (r *rpcHandler) LoadSpace(ctx context.Context, request *apiproto.LoadSpaceRequest) (resp *apiproto.LoadSpaceResponse, err error) { + err = r.controller.LoadSpace(request.SpaceId) + if err != nil { + return + } + resp = &apiproto.LoadSpaceResponse{} + return +} + func (r *rpcHandler) CreateSpace(ctx context.Context, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) { id, err := r.controller.CreateSpace() if err != nil { diff --git a/client/storage/spacestorage.go b/client/storage/spacestorage.go index a6cee186..7f65f9ff 100644 --- a/client/storage/spacestorage.go +++ b/client/storage/spacestorage.go @@ -50,7 +50,7 @@ func newSpaceStorage(objDb *badger.DB, spaceId string) (store spacestorage.Space return nil }) if err == badger.ErrKeyNotFound { - err = spacesyncproto.ErrSpaceMissing + err = spacestorage.ErrSpaceStorageMissing } return } @@ -58,7 +58,7 @@ func newSpaceStorage(objDb *badger.DB, spaceId string) (store spacestorage.Space func createSpaceStorage(db *badger.DB, payload spacestorage.SpaceStorageCreatePayload) (store spacestorage.SpaceStorage, err error) { keys := newSpaceKeys(payload.SpaceHeaderWithId.Id) if hasDB(db, keys.HeaderKey()) { - err = spacesyncproto.ErrSpaceExists + err = spacestorage.ErrSpaceStorageExists return } err = spaceValidationFunc(payload) diff --git a/etc/configs/client2.yml b/etc/configs/client2.yml index 5be56006..4ad2654e 100755 --- a/etc/configs/client2.yml +++ b/etc/configs/client2.yml @@ -7,8 +7,8 @@ grpcServer: account: peerId: 12D3KooWEmCHgpYfEWmG558s3TmhKX4ieegQykUJpcLKtciWfwJh peerKey: +6iFHEa4A0gHQxXmzxNv4J7TAiPPlYuOUWk7pb4WvVFJeoVAydioJiY78tm22pceORFqdPFJLHcZN2kDZPYjOg== - signingKey: GghASlDw/5ei2CgbNekiRqKzuxbg0+WcdM2c9Hsy1CVjmB11Hy5AmVU+YGdwliKdgz9szGOOCCNo7Rr2IPpZsQ== - encryptionKey: MIIEowIBAAKCAQEA7sdDktnmkrDsXol+M2gdCZsNKmsNu3LwlSeh/PaQsqL8yYl11I/jUYjKTZcdZkeXiplEwyEgTO8Le+LUZIh2urVwiKcRhC3vMBJiUkGp2gSC2cAsua89593W9hntJI2NhExBvG68vEABz19Zs13w9y4pPOw3FJhEbPZQUjMJPQ+VKN/3tPvgChlJBtAYDGqT8NcUcLXMsCfNWHVPIvL4S3ljdSP6nImtnoMsN7abymi0SiMhQc5ck1Gs80LlReaSmslUHZMkn2K5POu0Lx1/NVJT4LmHIBgOvWZiSTza3Zbth7UavfOPvEMywQwSohsFkx1mVp2EY9CnrHVyu8ooxwIDAQABAoIBACy73CcI96+HweC8NY5/9OC10bOetsXldLkc4bY4o0c0TdOcEx0tj9LYo74Bj5p30yY+LKm57Qk8x5QAHPZwsn2sPFb9pcRzrpn897qdXqrfqXwOCtMGx7xGzVzx4oG0m0yr1KzuuiEyhKRLIsz9zoUges1VG8SZ+kfHpaigsxxjEFPyjAXqodWuUcexaPMeh2sI/S1qT9aKCqYq6ZzUo/yyh0E92jQOKcS1TViY0hpnFmpoFCjKRJQ0TSZGOjJMhBm3XlS74Bts+Gnnc53sX/u+ae7//yaXjXnkPmqz71Glf1sWAo42jwfIKzPpwgcpVCnMtau8pRyTpC5obQ/nvKECgYEA9MuJStZCHQ+KQNF4qia2ZVVSZGE0Cv4kJ1GbAxDuQmeHd6toPoxbc2QuLQAq54xwdLv6va7dHHJYpkDVFqSrFOufArGCUI4iAv2mLR9flcYjO0IJ1uFj/9HXD7lXfgJiNtiCL0wd4TQQmqzV0jSGfkN3260ZbDy+M7nbG4i1u0kCgYEA+bU5pvsG1FyCndRyOrg4JzxOrleo2Hzj471CovrT3K+O7MB+kkf35S6iLwIKVY5iprECWKFcpIi0m+PGE9eC/8kH31O//r3e7WYZAFcCIs/WconhDw9RGfDR6XTzNPUgbRzCde1+1c6QMP5MkA6ZgUhfXt4Crf/GQAeGIHs/M48CgYAL02FYii07diq5ouTvY1tgXdTTIJcBCPH6LEkOxtybvKCguVkZ3HH2ixpn9iAce35bRVGBpFbuLt/1eCBTLbVOF2vhF24yMguWlWZXu7JEbAP7st8C0HSiQSLgkZWWcssH10HCwyyWWouKzVqvAvaUVvINXLljrzOJECtzkxEkcQKBgQCVNeZKUivlj5X5K65KSjQ7tbyqTvU0z4P5XOlJrCoW78yuyeOYE2scxn3hKw3zy85FHvZw8ZMDOjD6CeQdjSTZJU4P8+KBHQHtx5le6576IElbTepu7k8e+hjksJ53YZZLvOiyQQUOS407yWkEl8TATPe4H19oi7LyJczO8fZ1HwKBgFJiABRKJkGWpiMsp9p8QvHG0chZiKAbZ8Qn9dJX+ymwfqerOxcig7dCIKHzMeOQJPImArjzW6jbiQKmXYTZwcc708/bXtiXAf6YMD07KaLd4Y0PsYto/lQkFjQrhTLHS4LxapjPg5nYBrhdF/8rj4vUQgLCxn1tL2CLlrutPrVX + signingKey: PNcZdEvKsu9LShQmgOhKHbBpO1uyHvEM/QO5PUu8rVMuSHBoGvFbcFZNNZ2beFgSr/N9EitzY81QQRoIh5c+Gg== + encryptionKey: MIIEowIBAAKCAQEA3fh3Bd/a3N+7aDwln5rJU6BXL/0D/h2bMXH832d40Oac3OARVxMpxpxT02I6y8uLq0pS41mjtIK4+QtBDfeV+GAcAgvlywu7Be1tM0I5ohMXC0hNnLUCUwOMcQx/ylOjzUdQHna9woZMh2kdhFowViy3KhA/ItR8YpfgTG8VP6DMXW+CxGZR0sxzBVpSGHxGgcdZnrWc5/4vyb5IhY/rAxefQa+lieoFwnTo0jvLBrLhyhryK7SBGd8uwPZRoYJaCTs2BpCrQ7Osc2RDtYPafQnm8tVR2elmc43fN0Sq86PdMl3A0XofCVVW708uCPiq950cXZnJoh1wQeNIqhqpuQIDAQABAoIBAGxo1XjBBBusCdO2zIlPB9UYEn0VjcWmoA1eJqrV1mPwvdwCc3WbnmOqJiavaxftqaFXA3SWayXWUpEPtg4kRdKw3f0B4pFwgT873oGSbqOBv1d7UKygmyoAKa9s81zVzMKNecvnInbHMMlRxWDGy6TK4gphNPTF4pokox+xgSc5cJB7cBtmIZo+8CQA5/q5Xm2W9ih1cRPullmVXuuQYrv2/5oDoBCdaiCAr5WTg4C8pHEOo6z+j7kp9Yeh7Wc4LmEnnCEJKKTbUcNk/pXclpVkMuE983SguyD5Sy3UIXRejSzt+x6KW0k6MolBbRGAlDbVAHxvqp7AQiAIavVCXAECgYEA5ViMqjawjpbIK39DOSozRqaBeFVYrfLI6mkSSQrZqpJzgBvfVo/DDwWP9FgX/TEjDWHBilfylmN8/dcuzJHgQgw/JnckTJbsfnWv71PTxI/YgGEF0L7OmePSY02p3jfHq5zwVg9yW3jPacLTLn99pVjchjShDyzwVjZ5AK2Dm/ECgYEA98R8d3/GjOi0iUacFpks9xlbu4pn7SfCFOBaq5a+EkXSauWMRuGaPbZ5NIn7rWygfPW6r/jZrmCyDbWSoPLsdlqb+oEc0wOCN0dshhMGrzdkZMxpy9GNt15+SDhwQZCK/FI4DdEmlvBkLUIUSySIWVDfwJHnddDHO3EhH6GgUkkCgYAf8mK9vxp+8j/11yddCiTUXZNBWNoeeOhFxtcWN520ZewS108X9rScHhE8Xx0QVszkK07TX4baLgeWMGhDdLqBWMVfLU9wH8HXp7sXIl0oT0VANMOjnUCYLST8UjAsVSbKH/VWd5ZdaYmy2MGkA3xUEPm+9AvPWlosGDBoyMLBcQKBgEOKO0ez/CLjOHuHVPtQDBLbxcbMxuG+Ccj5E55cvDls8RwUsPWNgCc8e7PXvVScHO+TaK2Zj3VahI76JRtcvRrSPly+H2ZiOXfqL2oo+5R97A8SLfDSkegfiRsUz3z/8vMvUnppvjQ9GYHA1plZPxXh1uy+mTLjk7vfbeEahQKJAoGBAIDbI7SL7MmWumSnPPwwxfQ5DaWwdn7yReWKUFlO3WFG9oN15M43NXG3zZoUsPdaeTNcvgDRQ4PmtZ+zQonac+obHNsq8ZZP7KjyFJNrrIgfeUDmdnW8u+UPxPjt1J4YStsLX5Ea+x5uE8qGWmK0xYCUkntBFgENhbD7qDokB1+q apiServer: listenAddrs: - 127.0.0.1:8091 diff --git a/node/storage/spacestorage.go b/node/storage/spacestorage.go index b89c346b..bf51c18b 100644 --- a/node/storage/spacestorage.go +++ b/node/storage/spacestorage.go @@ -110,7 +110,7 @@ func createSpaceStorage(rootPath string, payload spacestorage.SpaceStorageCreate return } if has { - err = spacesyncproto.ErrSpaceExists + err = spacestorage.ErrSpaceStorageExists return } err = spaceValidationFunc(payload) diff --git a/util/cmd/debug/api/client/service.go b/util/cmd/debug/api/client/service.go index 1acdcb91..d09046f3 100644 --- a/util/cmd/debug/api/client/service.go +++ b/util/cmd/debug/api/client/service.go @@ -20,6 +20,7 @@ type Service interface { AddText(ctx context.Context, ip string, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) 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) app.Component } @@ -95,3 +96,11 @@ func (s *service) AllSpaces(ctx context.Context, ip string, request *apiproto.Al } return cl.AllSpaces(ctx, request) } + +func (s *service) LoadSpace(ctx context.Context, ip string, request *apiproto.LoadSpaceRequest) (res *apiproto.LoadSpaceResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.LoadSpace(ctx, request) +} diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index 8d3afffc..4a8d019d 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -168,6 +168,20 @@ func (s *service) registerClientCommands() { res = resp.DocumentId return }} + s.clientCommands["load-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 1 { + err = ErrIncorrectParamsCount + return + } + _, err = client.LoadSpace(context.Background(), server.Address, &apiproto.LoadSpaceRequest{ + SpaceId: params[0], + }) + if err != nil { + return + } + res = params[0] + return + }} } func (s *service) registerNodeCommands() { From 1e4a25c15d79cad7eeed9fc1bde564cefc8d362b Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Fri, 2 Dec 2022 12:18:38 +0100 Subject: [PATCH 09/32] Add dump heads and new head when adding text --- client/api/controller.go | 11 +++++-- client/api/rpchandler.go | 12 ++++---- client/document/service.go | 15 ++++++++-- client/document/textdocument/textdocument.go | 10 +++++-- common/commonspace/diffservice/diffservice.go | 26 +++++++++++++++++ common/commonspace/space.go | 5 ++++ util/cmd/debug/api/service.go | 29 ++++++++++++++++++- 7 files changed, 94 insertions(+), 14 deletions(-) diff --git a/client/api/controller.go b/client/api/controller.go index 0e6b886c..94f7a690 100644 --- a/client/api/controller.go +++ b/client/api/controller.go @@ -7,6 +7,7 @@ import ( "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/commonspace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/diffservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" "math/rand" ) @@ -27,8 +28,10 @@ type Controller interface { DeleteDocument(spaceId, documentId string) (err error) // AllDocumentIds gets all ids of documents in space AllDocumentIds(spaceId string) (ids []string, err error) + // AllDocumentHeads gets heads of all documents + AllDocumentHeads(spaceId string) (ids []diffservice.TreeHeads, err error) // AddText adds text to space document - AddText(spaceId, documentId, text string) (err error) + AddText(spaceId, documentId, text string) (head string, err error) // DumpDocumentTree dumps the tree data into string DumpDocumentTree(spaceId, documentId string) (dump string, err error) @@ -107,7 +110,11 @@ func (c *controller) AllDocumentIds(spaceId string) (ids []string, err error) { return c.docService.AllDocumentIds(spaceId) } -func (c *controller) AddText(spaceId, documentId, text string) (err error) { +func (c *controller) AllDocumentHeads(spaceId string) (ids []diffservice.TreeHeads, err error) { + return c.docService.AllDocumentHeads(spaceId) +} + +func (c *controller) AddText(spaceId, documentId, text string) (head string, err error) { return c.docService.AddText(spaceId, documentId, text) } diff --git a/client/api/rpchandler.go b/client/api/rpchandler.go index bdabe3d6..a0f4d4aa 100644 --- a/client/api/rpchandler.go +++ b/client/api/rpchandler.go @@ -55,13 +55,13 @@ func (r *rpcHandler) DeleteDocument(ctx context.Context, request *apiproto.Delet } func (r *rpcHandler) AddText(ctx context.Context, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) { - err = r.controller.AddText(request.SpaceId, request.DocumentId, request.Text) + head, err := r.controller.AddText(request.SpaceId, request.DocumentId, request.Text) if err != nil { return } - // TODO: update controller to add head resp = &apiproto.AddTextResponse{ DocumentId: request.DocumentId, + HeadId: head, } return } @@ -78,15 +78,15 @@ func (r *rpcHandler) DumpTree(ctx context.Context, request *apiproto.DumpTreeReq } func (r *rpcHandler) AllTrees(ctx context.Context, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { - ids, err := r.controller.AllDocumentIds(request.SpaceId) + heads, err := r.controller.AllDocumentHeads(request.SpaceId) if err != nil { return } - // TODO: add getting heads to controller var trees []*apiproto.Tree - for _, id := range ids { + for _, head := range heads { trees = append(trees, &apiproto.Tree{ - Id: id, + Id: head.Id, + Heads: head.Heads, }) } resp = &apiproto.AllTreesResponse{Trees: trees} diff --git a/client/document/service.go b/client/document/service.go index d6f727ea..b03e2c61 100644 --- a/client/document/service.go +++ b/client/document/service.go @@ -8,6 +8,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/commonspace/diffservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" ) @@ -16,7 +17,8 @@ type Service interface { CreateDocument(spaceId string) (id string, err error) DeleteDocument(spaceId, documentId string) (err error) AllDocumentIds(spaceId string) (ids []string, err error) - AddText(spaceId, documentId, text string) (err error) + AllDocumentHeads(spaceId string) (ids []diffservice.TreeHeads, err error) + AddText(spaceId, documentId, text string) (head string, err error) DumpDocumentTree(spaceId, documentId string) (dump string, err error) } @@ -75,7 +77,16 @@ func (s *service) AllDocumentIds(spaceId string) (ids []string, err error) { return } -func (s *service) AddText(spaceId, documentId, text string) (err error) { +func (s *service) AllDocumentHeads(spaceId string) (ids []diffservice.TreeHeads, err error) { + space, err := s.spaceService.GetSpace(context.Background(), spaceId) + if err != nil { + return + } + ids = space.DebugAllHeads() + return +} + +func (s *service) AddText(spaceId, documentId, text string) (head string, err error) { doc, err := s.cache.GetDocument(context.Background(), spaceId, documentId) if err != nil { return diff --git a/client/document/textdocument/textdocument.go b/client/document/textdocument/textdocument.go index 4c4abb44..c6ef7ed6 100644 --- a/client/document/textdocument/textdocument.go +++ b/client/document/textdocument/textdocument.go @@ -13,7 +13,7 @@ import ( type TextDocument interface { tree.ObjectTree InnerTree() tree.ObjectTree - AddText(text string) error + AddText(text string) (string, error) Text() (string, error) TreeDump() string Close() error @@ -60,7 +60,7 @@ func (t *textDocument) InnerTree() tree.ObjectTree { return t.ObjectTree } -func (t *textDocument) AddText(text string) (err error) { +func (t *textDocument) AddText(text string) (head string, err error) { content := &testchanges.TextContent_TextAppend{ TextAppend: &testchanges.TextAppend{Text: text}, } @@ -76,12 +76,16 @@ func (t *textDocument) AddText(text string) (err error) { } t.Lock() defer t.Unlock() - _, err = t.AddContent(context.Background(), tree.SignableChangeContent{ + addRes, err := t.AddContent(context.Background(), tree.SignableChangeContent{ Data: res, Key: t.account.Account().SignKey, Identity: t.account.Account().Identity, IsSnapshot: false, }) + if err != nil { + return + } + head = addRes.Heads[0] return } diff --git a/common/commonspace/diffservice/diffservice.go b/common/commonspace/diffservice/diffservice.go index ae3b5cb4..d3ac3211 100644 --- a/common/commonspace/diffservice/diffservice.go +++ b/common/commonspace/diffservice/diffservice.go @@ -15,11 +15,17 @@ import ( "strings" ) +type TreeHeads struct { + Id string + Heads []string +} + type DiffService interface { HeadNotifiable HandleRangeRequest(ctx context.Context, req *spacesyncproto.HeadSyncRequest) (resp *spacesyncproto.HeadSyncResponse, err error) RemoveObjects(ids []string) AllIds() []string + DebugAllHeads() (res []TreeHeads) Init(objectIds []string, deletionState deletionstate.DeletionState) Close() (err error) @@ -79,6 +85,18 @@ func (d *diffService) AllIds() []string { return d.diff.Ids() } +func (d *diffService) DebugAllHeads() (res []TreeHeads) { + els := d.diff.Elements() + for _, el := range els { + idHead := TreeHeads{ + Id: el.Id, + Heads: splitString(el.Head), + } + res = append(res, idHead) + } + return +} + func (d *diffService) RemoveObjects(ids []string) { d.syncer.RemoveObjects(ids) } @@ -122,3 +140,11 @@ func concatStrings(strs []string) string { } return b.String() } + +func splitString(str string) (res []string) { + const cidLen = 59 + for i := 0; i < len(str); i += cidLen { + res = append(res, str[i:i+cidLen]) + } + return +} diff --git a/common/commonspace/space.go b/common/commonspace/space.go index 7401f30c..3d1a9a24 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -69,6 +69,7 @@ type Space interface { Init(ctx context.Context) error StoredIds() []string + DebugAllHeads() []diffservice.TreeHeads Description() (SpaceDescription, error) SpaceSyncRpc() RpcHandler @@ -196,6 +197,10 @@ func (s *space) StoredIds() []string { return s.diffService.AllIds() } +func (s *space) DebugAllHeads() []diffservice.TreeHeads { + return s.diffService.DebugAllHeads() +} + func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload, listener updatelistener.UpdateListener) (tr tree.ObjectTree, err error) { if s.isClosed.Load() { err = ErrSpaceClosed diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index 4a8d019d..607509a1 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -165,7 +165,7 @@ func (s *service) registerClientCommands() { if err != nil { return } - res = resp.DocumentId + res = resp.DocumentId + "->" + resp.HeadId return }} s.clientCommands["load-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { @@ -182,6 +182,33 @@ func (s *service) registerClientCommands() { res = params[0] return }} + s.clientCommands["all-trees"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 1 { + err = ErrIncorrectParamsCount + return + } + resp, err := client.AllTrees(context.Background(), server.Address, &apiproto.AllTreesRequest{ + SpaceId: params[0], + }) + if err != nil { + return + } + for treeIdx, tree := range resp.Trees { + treeStr := tree.Id + ":[" + for headIdx, head := range tree.Heads { + treeStr += head + if headIdx != len(tree.Heads)-1 { + treeStr += "," + } + } + treeStr += "]" + res += treeStr + if treeIdx != len(resp.Trees)-1 { + res += "\n" + } + } + return + }} } func (s *service) registerNodeCommands() { From aaecd2ae6d750849c01c91da391ea5e0c441f73c Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Fri, 2 Dec 2022 14:14:02 +0100 Subject: [PATCH 10/32] Move notifiable logic to synctree instead of syncclient --- client/api/service.go | 2 -- .../settingsdocument/settingsdocument.go | 1 + common/commonspace/synctree/syncclient.go | 13 ------------ common/commonspace/synctree/synctree.go | 21 ++++++++++++------- common/commonspace/synctree/synctree_test.go | 5 ++--- 5 files changed, 17 insertions(+), 25 deletions(-) diff --git a/client/api/service.go b/client/api/service.go index aed12e29..425fefee 100644 --- a/client/api/service.go +++ b/client/api/service.go @@ -13,7 +13,6 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" - "net/http" "storj.io/drpc" ) @@ -33,7 +32,6 @@ type Service interface { type service struct { controller Controller transport secure.Service - srv *http.Server cfg *config.Config *server.BaseDrpcServer } diff --git a/common/commonspace/settingsdocument/settingsdocument.go b/common/commonspace/settingsdocument/settingsdocument.go index fc05ad31..e0241229 100644 --- a/common/commonspace/settingsdocument/settingsdocument.go +++ b/common/commonspace/settingsdocument/settingsdocument.go @@ -110,6 +110,7 @@ func (s *settingsDocument) Rebuild(tr tree.ObjectTree) { } func (s *settingsDocument) Init(ctx context.Context) (err error) { + log.Debug("space settings id", zap.String("id", s.store.SpaceSettingsId())) s.SyncTree, err = s.buildFunc(ctx, s.store.SpaceSettingsId(), s) if err != nil { return diff --git a/common/commonspace/synctree/syncclient.go b/common/commonspace/synctree/syncclient.go index 506447ee..a049f2b1 100644 --- a/common/commonspace/synctree/syncclient.go +++ b/common/commonspace/synctree/syncclient.go @@ -2,7 +2,6 @@ package synctree import ( - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/diffservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" @@ -20,27 +19,23 @@ type syncClient struct { syncservice.StreamPool RequestFactory spaceId string - notifiable diffservice.HeadNotifiable configuration nodeconf.Configuration } func newSyncClient( spaceId string, pool syncservice.StreamPool, - notifiable diffservice.HeadNotifiable, factory RequestFactory, configuration nodeconf.Configuration) SyncClient { return &syncClient{ StreamPool: pool, RequestFactory: factory, - notifiable: notifiable, configuration: configuration, spaceId: spaceId, } } func (s *syncClient) BroadcastAsync(message *treechangeproto.TreeSyncMessage) (err error) { - s.notifyIfNeeded(message) objMsg, err := marshallTreeMessage(message, message.RootChange.Id, "") if err != nil { return @@ -57,7 +52,6 @@ func (s *syncClient) SendAsync(peerId string, message *treechangeproto.TreeSyncM } func (s *syncClient) BroadcastAsyncOrSendResponsible(message *treechangeproto.TreeSyncMessage) (err error) { - s.notifyIfNeeded(message) objMsg, err := marshallTreeMessage(message, message.RootChange.Id, "") if err != nil { return @@ -68,13 +62,6 @@ func (s *syncClient) BroadcastAsyncOrSendResponsible(message *treechangeproto.Tr return s.BroadcastAsync(message) } -func (s *syncClient) notifyIfNeeded(message *treechangeproto.TreeSyncMessage) { - if message.GetContent().GetHeadUpdate() != nil { - update := message.GetContent().GetHeadUpdate() - s.notifiable.UpdateHeads(message.RootChange.Id, update.Heads) - } -} - func marshallTreeMessage(message *treechangeproto.TreeSyncMessage, id, replyId string) (objMsg *spacesyncproto.ObjectSyncMessage, err error) { payload, err := message.Marshal() if err != nil { diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index 8aa94c03..ee3f92a4 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -35,6 +35,7 @@ type syncTree struct { tree.ObjectTree synchandler.SyncHandler syncClient SyncClient + notifiable diffservice.HeadNotifiable listener updatelistener.UpdateListener isClosed bool isDeleted bool @@ -77,12 +78,12 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error syncClient := createSyncClient( deps.SpaceId, deps.StreamPool, - deps.HeadNotifiable, sharedFactory, deps.Configuration) syncTree := &syncTree{ ObjectTree: objTree, syncClient: syncClient, + notifiable: deps.HeadNotifiable, listener: deps.Listener, } syncHandler := newSyncTreeHandler(syncTree, syncClient) @@ -107,12 +108,12 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error syncClient := createSyncClient( deps.SpaceId, deps.StreamPool, - deps.HeadNotifiable, GetRequestFactory(), deps.Configuration) syncTree := &syncTree{ ObjectTree: objTree, syncClient: syncClient, + notifiable: deps.HeadNotifiable, listener: deps.Listener, } syncHandler := newSyncTreeHandler(syncTree, syncClient) @@ -207,12 +208,12 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy syncClient := createSyncClient( deps.SpaceId, deps.StreamPool, - deps.HeadNotifiable, GetRequestFactory(), deps.Configuration) syncTree := &syncTree{ ObjectTree: objTree, syncClient: syncClient, + notifiable: deps.HeadNotifiable, listener: deps.Listener, } syncHandler := newSyncTreeHandler(syncTree, syncClient) @@ -258,6 +259,9 @@ func (s *syncTree) AddContent(ctx context.Context, content tree.SignableChangeCo if err != nil { return } + if s.notifiable != nil { + s.notifiable.UpdateHeads(s.ID(), res.Heads) + } headUpdate := s.syncClient.CreateHeadUpdate(s, res.Added) err = s.syncClient.BroadcastAsync(headUpdate) return @@ -281,10 +285,13 @@ func (s *syncTree) AddRawChanges(ctx context.Context, changes ...*treechangeprot s.listener.Rebuild(s) } } - //if res.Mode != tree.Nothing { - headUpdate := s.syncClient.CreateHeadUpdate(s, res.Added) - err = s.syncClient.BroadcastAsync(headUpdate) - //} + if res.Mode != tree.Nothing { + if s.notifiable != nil { + s.notifiable.UpdateHeads(s.ID(), res.Heads) + } + headUpdate := s.syncClient.CreateHeadUpdate(s, res.Added) + err = s.syncClient.BroadcastAsync(headUpdate) + } return } diff --git a/common/commonspace/synctree/synctree_test.go b/common/commonspace/synctree/synctree_test.go index df852e07..c55be822 100644 --- a/common/commonspace/synctree/synctree_test.go +++ b/common/commonspace/synctree/synctree_test.go @@ -2,7 +2,6 @@ package synctree import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/diffservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage/mock_storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/mock_synctree" @@ -55,7 +54,7 @@ func Test_DeriveSyncTree(t *testing.T) { require.Equal(t, expectedPayload, payload) return objTreeMock, nil } - createSyncClient = func(spaceId string, pool syncservice.StreamPool, notifiable diffservice.HeadNotifiable, factory RequestFactory, configuration nodeconf.Configuration) SyncClient { + createSyncClient = func(spaceId string, pool syncservice.StreamPool, factory RequestFactory, configuration nodeconf.Configuration) SyncClient { return syncClientMock } headUpdate := &treechangeproto.TreeSyncMessage{} @@ -91,7 +90,7 @@ func Test_CreateSyncTree(t *testing.T) { require.Equal(t, expectedPayload, payload) return objTreeMock, nil } - createSyncClient = func(spaceId string, pool syncservice.StreamPool, notifiable diffservice.HeadNotifiable, factory RequestFactory, configuration nodeconf.Configuration) SyncClient { + createSyncClient = func(spaceId string, pool syncservice.StreamPool, factory RequestFactory, configuration nodeconf.Configuration) SyncClient { return syncClientMock } headUpdate := &treechangeproto.TreeSyncMessage{} From 494b7552ce7fb5c235c4cbb2db18936a95fc1713 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Fri, 2 Dec 2022 19:45:43 +0100 Subject: [PATCH 11/32] Stopped space from unloading if trees are still there --- common/commonspace/space.go | 72 ++++++++++----- common/commonspace/syncservice/syncservice.go | 12 ++- common/commonspace/synctree/synctree.go | 89 ++++++++++++------- 3 files changed, 114 insertions(+), 59 deletions(-) diff --git a/common/commonspace/space.go b/common/commonspace/space.go index 3d1a9a24..98d434c2 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -18,6 +18,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey" "github.com/zeebo/errs" @@ -65,6 +66,9 @@ func NewSpaceId(id string, repKey uint64) string { } type Space interface { + ocache.ObjectLocker + ocache.ObjectLastUsage + Id() string Init(ctx context.Context) error @@ -98,13 +102,29 @@ type space struct { configuration nodeconf.Configuration settingsDocument settingsdocument.SettingsDocument - isClosed atomic.Bool + isClosed atomic.Bool + treesUsed atomic.Int32 +} + +func (s *space) StartTree() { + s.treesUsed.Add(1) + log.With(zap.Int32("trees used", s.treesUsed.Load())).Debug("starting tree") +} + +func (s *space) CloseTree() { + s.treesUsed.Add(-1) + log.With(zap.Int32("trees used", s.treesUsed.Load())).Debug("closing tree") } func (s *space) LastUsage() time.Time { return s.syncService.LastUsage() } +func (s *space) Locked() bool { + log.With(zap.Bool("locked", s.treesUsed.Load() > 1)).Debug("space lock status check") + return s.treesUsed.Load() > 1 +} + func (s *space) Id() string { return s.id } @@ -131,6 +151,7 @@ func (s *space) Description() (desc SpaceDescription, err error) { } func (s *space) Init(ctx context.Context) (err error) { + log.With(zap.String("spaceId", s.id)).Debug("initializing space") s.storage = newCommonStorage(s.storage) header, err := s.storage.SpaceHeader() @@ -207,14 +228,15 @@ func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePay return } deps := synctree.CreateDeps{ - SpaceId: s.id, - Payload: payload, - StreamPool: s.syncService.StreamPool(), - Configuration: s.configuration, - HeadNotifiable: s.diffService, - Listener: listener, - AclList: s.aclList, - SpaceStorage: s.storage, + SpaceId: s.id, + Payload: payload, + StreamPool: s.syncService.StreamPool(), + Configuration: s.configuration, + HeadNotifiable: s.diffService, + Listener: listener, + AclList: s.aclList, + SpaceStorage: s.storage, + TreeUsageController: s, } return synctree.DeriveSyncTree(ctx, deps) } @@ -225,14 +247,15 @@ func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePay return } deps := synctree.CreateDeps{ - SpaceId: s.id, - Payload: payload, - StreamPool: s.syncService.StreamPool(), - Configuration: s.configuration, - HeadNotifiable: s.diffService, - Listener: listener, - AclList: s.aclList, - SpaceStorage: s.storage, + SpaceId: s.id, + Payload: payload, + StreamPool: s.syncService.StreamPool(), + Configuration: s.configuration, + HeadNotifiable: s.diffService, + Listener: listener, + AclList: s.aclList, + SpaceStorage: s.storage, + TreeUsageController: s, } return synctree.CreateSyncTree(ctx, deps) } @@ -243,13 +266,14 @@ func (s *space) BuildTree(ctx context.Context, id string, listener updatelistene return } deps := synctree.BuildDeps{ - SpaceId: s.id, - StreamPool: s.syncService.StreamPool(), - Configuration: s.configuration, - HeadNotifiable: s.diffService, - Listener: listener, - AclList: s.aclList, - SpaceStorage: s.storage, + SpaceId: s.id, + StreamPool: s.syncService.StreamPool(), + Configuration: s.configuration, + HeadNotifiable: s.diffService, + Listener: listener, + AclList: s.aclList, + SpaceStorage: s.storage, + TreeUsageController: s, } return synctree.BuildSyncTreeOrGetRemote(ctx, id, deps) } diff --git a/common/commonspace/syncservice/syncservice.go b/common/commonspace/syncservice/syncservice.go index 983f5698..1dfd9243 100644 --- a/common/commonspace/syncservice/syncservice.go +++ b/common/commonspace/syncservice/syncservice.go @@ -9,6 +9,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/rpcerr" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache" + "go.uber.org/zap" "time" ) @@ -36,6 +37,7 @@ type syncService struct { stopStreamLoop context.CancelFunc connector nodeconf.ConfConnector streamLoopDone chan struct{} + log *zap.SugaredLogger // TODO: change to logger } func NewSyncService( @@ -62,6 +64,7 @@ func newSyncService( connector: connector, clientFactory: clientFactory, spaceId: spaceId, + log: log.With(zap.String("id", spaceId)), streamLoopDone: make(chan struct{}), } } @@ -83,6 +86,7 @@ func (s *syncService) LastUsage() time.Time { } func (s *syncService) HandleMessage(ctx context.Context, senderId string, message *spacesyncproto.ObjectSyncMessage) (err error) { + s.log.With(zap.String("peerId", senderId), zap.String("objectId", message.ObjectId)).Debug("handling message") obj, err := s.objectGetter.GetObject(ctx, message.ObjectId) if err != nil { return @@ -93,18 +97,21 @@ func (s *syncService) HandleMessage(ctx context.Context, senderId string, messag func (s *syncService) responsibleStreamCheckLoop(ctx context.Context) { defer close(s.streamLoopDone) checkResponsiblePeers := func() { + s.log.Debug("dialing responsible peers") respPeers, err := s.connector.DialResponsiblePeers(ctx, s.spaceId) if err != nil { + s.log.Error("failed to dial peers", zap.Error(err)) return } for _, p := range respPeers { if s.streamPool.HasActiveStream(p.Id()) { + s.log.Debug("has active stream for", zap.String("id", p.Id())) continue } stream, err := s.clientFactory.Client(p).Stream(ctx) if err != nil { err = rpcerr.Unwrap(err) - log.With("spaceId", s.spaceId).Errorf("failed to open stream: %v", err) + s.log.Errorf("failed to open stream: %v", err) // so here probably the request is failed because there is no such space, // but diffService should handle such cases by sending pushSpace continue @@ -113,9 +120,10 @@ func (s *syncService) responsibleStreamCheckLoop(ctx context.Context) { err = stream.Send(&spacesyncproto.ObjectSyncMessage{SpaceId: s.spaceId}) if err != nil { err = rpcerr.Unwrap(err) - log.With("spaceId", s.spaceId).Errorf("failed to send first message to stream: %v", err) + s.log.Errorf("failed to send first message to stream: %v", err) continue } + s.log.Debug("continue reading stream for", zap.String("id", p.Id())) s.streamPool.AddAndReadStreamAsync(stream) } } diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index ee3f92a4..7cb18ac3 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -30,15 +30,21 @@ type SyncTree interface { synchandler.SyncHandler } +type TreeUsageController interface { + StartTree() + CloseTree() +} + // SyncTree sends head updates to sync service and also sends new changes to update listener type syncTree struct { tree.ObjectTree synchandler.SyncHandler - syncClient SyncClient - notifiable diffservice.HeadNotifiable - listener updatelistener.UpdateListener - isClosed bool - isDeleted bool + syncClient SyncClient + notifiable diffservice.HeadNotifiable + listener updatelistener.UpdateListener + usageController TreeUsageController + isClosed bool + isDeleted bool } var log = logger.NewNamed("commonspace.synctree").Sugar() @@ -49,25 +55,27 @@ var buildObjectTree = tree.BuildObjectTree var createSyncClient = newSyncClient type CreateDeps struct { - SpaceId string - Payload tree.ObjectTreeCreatePayload - Configuration nodeconf.Configuration - HeadNotifiable diffservice.HeadNotifiable - StreamPool syncservice.StreamPool - Listener updatelistener.UpdateListener - AclList list.ACLList - SpaceStorage spacestorage.SpaceStorage + SpaceId string + Payload tree.ObjectTreeCreatePayload + Configuration nodeconf.Configuration + HeadNotifiable diffservice.HeadNotifiable + StreamPool syncservice.StreamPool + Listener updatelistener.UpdateListener + AclList list.ACLList + SpaceStorage spacestorage.SpaceStorage + TreeUsageController TreeUsageController } type BuildDeps struct { - SpaceId string - StreamPool syncservice.StreamPool - Configuration nodeconf.Configuration - HeadNotifiable diffservice.HeadNotifiable - Listener updatelistener.UpdateListener - AclList list.ACLList - SpaceStorage spacestorage.SpaceStorage - TreeStorage storage.TreeStorage + SpaceId string + StreamPool syncservice.StreamPool + Configuration nodeconf.Configuration + HeadNotifiable diffservice.HeadNotifiable + Listener updatelistener.UpdateListener + AclList list.ACLList + SpaceStorage spacestorage.SpaceStorage + TreeStorage storage.TreeStorage + TreeUsageController TreeUsageController } func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error) { @@ -81,10 +89,11 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error sharedFactory, deps.Configuration) syncTree := &syncTree{ - ObjectTree: objTree, - syncClient: syncClient, - notifiable: deps.HeadNotifiable, - listener: deps.Listener, + ObjectTree: objTree, + syncClient: syncClient, + notifiable: deps.HeadNotifiable, + usageController: deps.TreeUsageController, + listener: deps.Listener, } syncHandler := newSyncTreeHandler(syncTree, syncClient) syncTree.SyncHandler = syncHandler @@ -94,6 +103,9 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error if syncTree.listener != nil { syncTree.listener.Rebuild(syncTree) } + if syncTree.usageController != nil { + syncTree.usageController.StartTree() + } headUpdate := syncClient.CreateHeadUpdate(t, nil) err = syncClient.BroadcastAsync(headUpdate) @@ -111,10 +123,11 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error GetRequestFactory(), deps.Configuration) syncTree := &syncTree{ - ObjectTree: objTree, - syncClient: syncClient, - notifiable: deps.HeadNotifiable, - listener: deps.Listener, + ObjectTree: objTree, + syncClient: syncClient, + notifiable: deps.HeadNotifiable, + usageController: deps.TreeUsageController, + listener: deps.Listener, } syncHandler := newSyncTreeHandler(syncTree, syncClient) syncTree.SyncHandler = syncHandler @@ -125,6 +138,9 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error if syncTree.listener != nil { syncTree.listener.Rebuild(syncTree) } + if syncTree.usageController != nil { + syncTree.usageController.StartTree() + } headUpdate := syncClient.CreateHeadUpdate(t, nil) err = syncClient.BroadcastAsync(headUpdate) @@ -211,10 +227,11 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy GetRequestFactory(), deps.Configuration) syncTree := &syncTree{ - ObjectTree: objTree, - syncClient: syncClient, - notifiable: deps.HeadNotifiable, - listener: deps.Listener, + ObjectTree: objTree, + syncClient: syncClient, + notifiable: deps.HeadNotifiable, + usageController: deps.TreeUsageController, + listener: deps.Listener, } syncHandler := newSyncTreeHandler(syncTree, syncClient) syncTree.SyncHandler = syncHandler @@ -224,6 +241,9 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy if syncTree.listener != nil { syncTree.listener.Rebuild(syncTree) } + if syncTree.usageController != nil { + syncTree.usageController.StartTree() + } headUpdate := syncTree.syncClient.CreateHeadUpdate(t, nil) // here we will have different behaviour based on who is sending this update @@ -317,6 +337,9 @@ func (s *syncTree) Close() (err error) { if s.isClosed { return ErrSyncTreeClosed } + if s.usageController != nil { + s.usageController.CloseTree() + } s.isClosed = true return } From 9ae5710854075c6e0502e3792b2c8432eade6f99 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sat, 3 Dec 2022 11:48:18 +0100 Subject: [PATCH 12/32] Simplify space locked solution --- common/commonspace/space.go | 62 ++++++--------- common/commonspace/synctree/synctree.go | 100 +++++++++++------------- util/cmd/debug/api/service.go | 17 ++++ 3 files changed, 87 insertions(+), 92 deletions(-) diff --git a/common/commonspace/space.go b/common/commonspace/space.go index 98d434c2..4dc3db76 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -106,16 +106,6 @@ type space struct { treesUsed atomic.Int32 } -func (s *space) StartTree() { - s.treesUsed.Add(1) - log.With(zap.Int32("trees used", s.treesUsed.Load())).Debug("starting tree") -} - -func (s *space) CloseTree() { - s.treesUsed.Add(-1) - log.With(zap.Int32("trees used", s.treesUsed.Load())).Debug("closing tree") -} - func (s *space) LastUsage() time.Time { return s.syncService.LastUsage() } @@ -228,15 +218,15 @@ func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePay return } deps := synctree.CreateDeps{ - SpaceId: s.id, - Payload: payload, - StreamPool: s.syncService.StreamPool(), - Configuration: s.configuration, - HeadNotifiable: s.diffService, - Listener: listener, - AclList: s.aclList, - SpaceStorage: s.storage, - TreeUsageController: s, + SpaceId: s.id, + Payload: payload, + StreamPool: s.syncService.StreamPool(), + Configuration: s.configuration, + HeadNotifiable: s.diffService, + Listener: listener, + AclList: s.aclList, + SpaceStorage: s.storage, + TreeUsage: &s.treesUsed, } return synctree.DeriveSyncTree(ctx, deps) } @@ -247,15 +237,15 @@ func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePay return } deps := synctree.CreateDeps{ - SpaceId: s.id, - Payload: payload, - StreamPool: s.syncService.StreamPool(), - Configuration: s.configuration, - HeadNotifiable: s.diffService, - Listener: listener, - AclList: s.aclList, - SpaceStorage: s.storage, - TreeUsageController: s, + SpaceId: s.id, + Payload: payload, + StreamPool: s.syncService.StreamPool(), + Configuration: s.configuration, + HeadNotifiable: s.diffService, + Listener: listener, + AclList: s.aclList, + SpaceStorage: s.storage, + TreeUsage: &s.treesUsed, } return synctree.CreateSyncTree(ctx, deps) } @@ -266,14 +256,14 @@ func (s *space) BuildTree(ctx context.Context, id string, listener updatelistene return } deps := synctree.BuildDeps{ - SpaceId: s.id, - StreamPool: s.syncService.StreamPool(), - Configuration: s.configuration, - HeadNotifiable: s.diffService, - Listener: listener, - AclList: s.aclList, - SpaceStorage: s.storage, - TreeUsageController: s, + SpaceId: s.id, + StreamPool: s.syncService.StreamPool(), + Configuration: s.configuration, + HeadNotifiable: s.diffService, + Listener: listener, + AclList: s.aclList, + SpaceStorage: s.storage, + TreeUsage: &s.treesUsed, } return synctree.BuildSyncTreeOrGetRemote(ctx, id, deps) } diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index 7cb18ac3..69fe04a4 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -18,6 +18,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/gogo/protobuf/proto" "go.uber.org/zap" + "sync/atomic" ) var ( @@ -30,21 +31,16 @@ type SyncTree interface { synchandler.SyncHandler } -type TreeUsageController interface { - StartTree() - CloseTree() -} - // SyncTree sends head updates to sync service and also sends new changes to update listener type syncTree struct { tree.ObjectTree synchandler.SyncHandler - syncClient SyncClient - notifiable diffservice.HeadNotifiable - listener updatelistener.UpdateListener - usageController TreeUsageController - isClosed bool - isDeleted bool + syncClient SyncClient + notifiable diffservice.HeadNotifiable + listener updatelistener.UpdateListener + treeUsage *atomic.Int32 + isClosed bool + isDeleted bool } var log = logger.NewNamed("commonspace.synctree").Sugar() @@ -55,27 +51,27 @@ var buildObjectTree = tree.BuildObjectTree var createSyncClient = newSyncClient type CreateDeps struct { - SpaceId string - Payload tree.ObjectTreeCreatePayload - Configuration nodeconf.Configuration - HeadNotifiable diffservice.HeadNotifiable - StreamPool syncservice.StreamPool - Listener updatelistener.UpdateListener - AclList list.ACLList - SpaceStorage spacestorage.SpaceStorage - TreeUsageController TreeUsageController + SpaceId string + Payload tree.ObjectTreeCreatePayload + Configuration nodeconf.Configuration + HeadNotifiable diffservice.HeadNotifiable + StreamPool syncservice.StreamPool + Listener updatelistener.UpdateListener + AclList list.ACLList + SpaceStorage spacestorage.SpaceStorage + TreeUsage *atomic.Int32 } type BuildDeps struct { - SpaceId string - StreamPool syncservice.StreamPool - Configuration nodeconf.Configuration - HeadNotifiable diffservice.HeadNotifiable - Listener updatelistener.UpdateListener - AclList list.ACLList - SpaceStorage spacestorage.SpaceStorage - TreeStorage storage.TreeStorage - TreeUsageController TreeUsageController + SpaceId string + StreamPool syncservice.StreamPool + Configuration nodeconf.Configuration + HeadNotifiable diffservice.HeadNotifiable + Listener updatelistener.UpdateListener + AclList list.ACLList + SpaceStorage spacestorage.SpaceStorage + TreeStorage storage.TreeStorage + TreeUsage *atomic.Int32 } func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error) { @@ -89,11 +85,11 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error sharedFactory, deps.Configuration) syncTree := &syncTree{ - ObjectTree: objTree, - syncClient: syncClient, - notifiable: deps.HeadNotifiable, - usageController: deps.TreeUsageController, - listener: deps.Listener, + ObjectTree: objTree, + syncClient: syncClient, + notifiable: deps.HeadNotifiable, + treeUsage: deps.TreeUsage, + listener: deps.Listener, } syncHandler := newSyncTreeHandler(syncTree, syncClient) syncTree.SyncHandler = syncHandler @@ -103,9 +99,7 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error if syncTree.listener != nil { syncTree.listener.Rebuild(syncTree) } - if syncTree.usageController != nil { - syncTree.usageController.StartTree() - } + syncTree.treeUsage.Add(1) headUpdate := syncClient.CreateHeadUpdate(t, nil) err = syncClient.BroadcastAsync(headUpdate) @@ -123,11 +117,11 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error GetRequestFactory(), deps.Configuration) syncTree := &syncTree{ - ObjectTree: objTree, - syncClient: syncClient, - notifiable: deps.HeadNotifiable, - usageController: deps.TreeUsageController, - listener: deps.Listener, + ObjectTree: objTree, + syncClient: syncClient, + notifiable: deps.HeadNotifiable, + treeUsage: deps.TreeUsage, + listener: deps.Listener, } syncHandler := newSyncTreeHandler(syncTree, syncClient) syncTree.SyncHandler = syncHandler @@ -138,9 +132,7 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error if syncTree.listener != nil { syncTree.listener.Rebuild(syncTree) } - if syncTree.usageController != nil { - syncTree.usageController.StartTree() - } + syncTree.treeUsage.Add(1) headUpdate := syncClient.CreateHeadUpdate(t, nil) err = syncClient.BroadcastAsync(headUpdate) @@ -227,11 +219,11 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy GetRequestFactory(), deps.Configuration) syncTree := &syncTree{ - ObjectTree: objTree, - syncClient: syncClient, - notifiable: deps.HeadNotifiable, - usageController: deps.TreeUsageController, - listener: deps.Listener, + ObjectTree: objTree, + syncClient: syncClient, + notifiable: deps.HeadNotifiable, + treeUsage: deps.TreeUsage, + listener: deps.Listener, } syncHandler := newSyncTreeHandler(syncTree, syncClient) syncTree.SyncHandler = syncHandler @@ -241,9 +233,7 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy if syncTree.listener != nil { syncTree.listener.Rebuild(syncTree) } - if syncTree.usageController != nil { - syncTree.usageController.StartTree() - } + syncTree.treeUsage.Add(1) headUpdate := syncTree.syncClient.CreateHeadUpdate(t, nil) // here we will have different behaviour based on who is sending this update @@ -337,9 +327,7 @@ func (s *syncTree) Close() (err error) { if s.isClosed { return ErrSyncTreeClosed } - if s.usageController != nil { - s.usageController.CloseTree() - } + s.treeUsage.Add(-1) s.isClosed = true return } diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index 607509a1..4f7fc740 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -209,6 +209,23 @@ func (s *service) registerClientCommands() { } return }} + s.clientCommands["all-spaces"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 0 { + err = ErrIncorrectParamsCount + return + } + resp, err := client.AllSpaces(context.Background(), server.Address, &apiproto.AllSpacesRequest{}) + if err != nil { + return + } + for treeIdx, spaceId := range resp.SpaceIds { + res += spaceId + if treeIdx != len(resp.SpaceIds)-1 { + res += "\n" + } + } + return + }} } func (s *service) registerNodeCommands() { From 4062a76e214ddcf3bb8f104881fb818af5e982b1 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sat, 3 Dec 2022 12:44:02 +0100 Subject: [PATCH 13/32] WIP node api --- common/commonspace/space.go | 5 +- node/Makefile | 6 +- node/api/apiproto/api.pb.go | 1415 ++++++++++++++++++++++++++++ node/api/apiproto/api_drpc.pb.go | 193 ++++ node/api/apiproto/protos/api.proto | 39 + node/api/rpchandler.go | 56 ++ node/api/service.go | 69 ++ node/cmd/node.go | 4 +- node/storage/storageservice.go | 21 +- 9 files changed, 1801 insertions(+), 7 deletions(-) create mode 100644 node/api/apiproto/api.pb.go create mode 100644 node/api/apiproto/api_drpc.pb.go create mode 100644 node/api/apiproto/protos/api.proto create mode 100644 node/api/rpchandler.go create mode 100644 node/api/service.go diff --git a/common/commonspace/space.go b/common/commonspace/space.go index 4dc3db76..a1ce64b0 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -43,10 +43,7 @@ type SpaceCreatePayload struct { ReplicationKey uint64 } -const ( - SpaceTypeDerived = "derived.space" - SettingsSyncPeriodSeconds = 10 -) +const SpaceTypeDerived = "derived.space" type SpaceDerivePayload struct { SigningKey signingkey.PrivKey diff --git a/node/Makefile b/node/Makefile index e33e5c6e..c6194e7c 100644 --- a/node/Makefile +++ b/node/Makefile @@ -6,4 +6,8 @@ build: go build -v -o ../bin/anytype-node -ldflags "$(FLAGS)" github.com/anytypeio/go-anytype-infrastructure-experiments/node/cmd test: - go test ./... --cover \ No newline at end of file + go test ./... --cover + +proto: + @$(eval GOGO_START := GOGO_NO_UNDERSCORE=1 GOGO_EXPORT_ONEOF_INTERFACE=1) + $(GOGO_START) protoc --gogofaster_out=:. --go-drpc_out=protolib=github.com/gogo/protobuf:. api/apiproto/protos/*.proto \ No newline at end of file diff --git a/node/api/apiproto/api.pb.go b/node/api/apiproto/api.pb.go new file mode 100644 index 00000000..a24500f3 --- /dev/null +++ b/node/api/apiproto/api.pb.go @@ -0,0 +1,1415 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: api/apiproto/protos/api.proto + +package apiproto + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type DumpTreeRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + DocumentId string `protobuf:"bytes,2,opt,name=documentId,proto3" json:"documentId,omitempty"` +} + +func (m *DumpTreeRequest) Reset() { *m = DumpTreeRequest{} } +func (m *DumpTreeRequest) String() string { return proto.CompactTextString(m) } +func (*DumpTreeRequest) ProtoMessage() {} +func (*DumpTreeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{0} +} +func (m *DumpTreeRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DumpTreeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DumpTreeRequest.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 *DumpTreeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DumpTreeRequest.Merge(m, src) +} +func (m *DumpTreeRequest) XXX_Size() int { + return m.Size() +} +func (m *DumpTreeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DumpTreeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DumpTreeRequest proto.InternalMessageInfo + +func (m *DumpTreeRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +func (m *DumpTreeRequest) GetDocumentId() string { + if m != nil { + return m.DocumentId + } + return "" +} + +type DumpTreeResponse struct { + Dump string `protobuf:"bytes,1,opt,name=dump,proto3" json:"dump,omitempty"` +} + +func (m *DumpTreeResponse) Reset() { *m = DumpTreeResponse{} } +func (m *DumpTreeResponse) String() string { return proto.CompactTextString(m) } +func (*DumpTreeResponse) ProtoMessage() {} +func (*DumpTreeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{1} +} +func (m *DumpTreeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DumpTreeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DumpTreeResponse.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 *DumpTreeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DumpTreeResponse.Merge(m, src) +} +func (m *DumpTreeResponse) XXX_Size() int { + return m.Size() +} +func (m *DumpTreeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DumpTreeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DumpTreeResponse proto.InternalMessageInfo + +func (m *DumpTreeResponse) GetDump() string { + if m != nil { + return m.Dump + } + return "" +} + +type AllTreesRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` +} + +func (m *AllTreesRequest) Reset() { *m = AllTreesRequest{} } +func (m *AllTreesRequest) String() string { return proto.CompactTextString(m) } +func (*AllTreesRequest) ProtoMessage() {} +func (*AllTreesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{2} +} +func (m *AllTreesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllTreesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllTreesRequest.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 *AllTreesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllTreesRequest.Merge(m, src) +} +func (m *AllTreesRequest) XXX_Size() int { + return m.Size() +} +func (m *AllTreesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AllTreesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AllTreesRequest proto.InternalMessageInfo + +func (m *AllTreesRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +type Tree struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Heads []string `protobuf:"bytes,2,rep,name=heads,proto3" json:"heads,omitempty"` +} + +func (m *Tree) Reset() { *m = Tree{} } +func (m *Tree) String() string { return proto.CompactTextString(m) } +func (*Tree) ProtoMessage() {} +func (*Tree) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{3} +} +func (m *Tree) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Tree) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Tree.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 *Tree) XXX_Merge(src proto.Message) { + xxx_messageInfo_Tree.Merge(m, src) +} +func (m *Tree) XXX_Size() int { + return m.Size() +} +func (m *Tree) XXX_DiscardUnknown() { + xxx_messageInfo_Tree.DiscardUnknown(m) +} + +var xxx_messageInfo_Tree proto.InternalMessageInfo + +func (m *Tree) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Tree) GetHeads() []string { + if m != nil { + return m.Heads + } + return nil +} + +type AllTreesResponse struct { + Trees []*Tree `protobuf:"bytes,1,rep,name=trees,proto3" json:"trees,omitempty"` +} + +func (m *AllTreesResponse) Reset() { *m = AllTreesResponse{} } +func (m *AllTreesResponse) String() string { return proto.CompactTextString(m) } +func (*AllTreesResponse) ProtoMessage() {} +func (*AllTreesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{4} +} +func (m *AllTreesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllTreesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllTreesResponse.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 *AllTreesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllTreesResponse.Merge(m, src) +} +func (m *AllTreesResponse) XXX_Size() int { + return m.Size() +} +func (m *AllTreesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AllTreesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AllTreesResponse proto.InternalMessageInfo + +func (m *AllTreesResponse) GetTrees() []*Tree { + if m != nil { + return m.Trees + } + return nil +} + +type AllSpacesRequest struct { +} + +func (m *AllSpacesRequest) Reset() { *m = AllSpacesRequest{} } +func (m *AllSpacesRequest) String() string { return proto.CompactTextString(m) } +func (*AllSpacesRequest) ProtoMessage() {} +func (*AllSpacesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{5} +} +func (m *AllSpacesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllSpacesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllSpacesRequest.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 *AllSpacesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllSpacesRequest.Merge(m, src) +} +func (m *AllSpacesRequest) XXX_Size() int { + return m.Size() +} +func (m *AllSpacesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AllSpacesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AllSpacesRequest proto.InternalMessageInfo + +type AllSpacesResponse struct { + SpaceIds []string `protobuf:"bytes,1,rep,name=spaceIds,proto3" json:"spaceIds,omitempty"` +} + +func (m *AllSpacesResponse) Reset() { *m = AllSpacesResponse{} } +func (m *AllSpacesResponse) String() string { return proto.CompactTextString(m) } +func (*AllSpacesResponse) ProtoMessage() {} +func (*AllSpacesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{6} +} +func (m *AllSpacesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllSpacesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllSpacesResponse.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 *AllSpacesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllSpacesResponse.Merge(m, src) +} +func (m *AllSpacesResponse) XXX_Size() int { + return m.Size() +} +func (m *AllSpacesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AllSpacesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AllSpacesResponse proto.InternalMessageInfo + +func (m *AllSpacesResponse) GetSpaceIds() []string { + if m != nil { + return m.SpaceIds + } + return nil +} + +func init() { + proto.RegisterType((*DumpTreeRequest)(nil), "api.DumpTreeRequest") + proto.RegisterType((*DumpTreeResponse)(nil), "api.DumpTreeResponse") + proto.RegisterType((*AllTreesRequest)(nil), "api.AllTreesRequest") + proto.RegisterType((*Tree)(nil), "api.Tree") + proto.RegisterType((*AllTreesResponse)(nil), "api.AllTreesResponse") + proto.RegisterType((*AllSpacesRequest)(nil), "api.AllSpacesRequest") + proto.RegisterType((*AllSpacesResponse)(nil), "api.AllSpacesResponse") +} + +func init() { proto.RegisterFile("api/apiproto/protos/api.proto", fileDescriptor_fc31080c27db9707) } + +var fileDescriptor_fc31080c27db9707 = []byte{ + // 336 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x4e, 0xea, 0x40, + 0x14, 0x65, 0x0a, 0x3c, 0xe8, 0x7d, 0x46, 0x70, 0x82, 0xa6, 0x21, 0x71, 0x24, 0xb3, 0x20, 0x24, + 0x1a, 0x48, 0x60, 0x41, 0xe2, 0x0e, 0xe3, 0x86, 0x98, 0xb8, 0xa8, 0xae, 0xdc, 0x55, 0x66, 0x12, + 0x27, 0x01, 0x3a, 0x32, 0xed, 0x7f, 0xf8, 0x37, 0xfe, 0x82, 0x4b, 0x96, 0x2e, 0x4d, 0xfb, 0x23, + 0x66, 0xa6, 0xd3, 0x52, 0xeb, 0xc2, 0x4d, 0x3b, 0xf7, 0xcc, 0xbd, 0xe7, 0x9c, 0x7b, 0x32, 0x70, + 0x1e, 0x48, 0x31, 0x09, 0xa4, 0x90, 0xbb, 0x30, 0x0a, 0x27, 0xe6, 0xab, 0x74, 0x3d, 0x36, 0x47, + 0x5c, 0x0f, 0xa4, 0xa0, 0x77, 0xd0, 0xb9, 0x8d, 0x37, 0xf2, 0x71, 0xc7, 0xb9, 0xcf, 0x5f, 0x63, + 0xae, 0x22, 0xec, 0x41, 0x4b, 0xc9, 0x60, 0xc5, 0x97, 0xcc, 0x43, 0x03, 0x34, 0x72, 0xfd, 0xbc, + 0xc4, 0x04, 0x80, 0x85, 0xab, 0x78, 0xc3, 0xb7, 0xd1, 0x92, 0x79, 0x8e, 0xb9, 0x2c, 0x21, 0x74, + 0x08, 0xdd, 0x03, 0x99, 0x92, 0xe1, 0x56, 0x71, 0x8c, 0xa1, 0xc1, 0xe2, 0x8d, 0xb4, 0x54, 0xe6, + 0x4c, 0x2f, 0xa1, 0xb3, 0x58, 0xaf, 0x75, 0x9b, 0xfa, 0x53, 0x94, 0x5e, 0x41, 0x43, 0x77, 0xe2, + 0x63, 0x70, 0x44, 0x7e, 0xe9, 0x08, 0x86, 0x7b, 0xd0, 0x7c, 0xe1, 0x01, 0x53, 0x9e, 0x33, 0xa8, + 0x8f, 0x5c, 0x3f, 0x2b, 0xe8, 0x0c, 0xba, 0x07, 0x6a, 0x6b, 0xe1, 0x02, 0x9a, 0x91, 0x06, 0x3c, + 0x34, 0xa8, 0x8f, 0xfe, 0x4f, 0xdd, 0xb1, 0xce, 0xc0, 0x98, 0xcc, 0x70, 0x8a, 0xcd, 0xd0, 0x83, + 0x16, 0xcc, 0x0d, 0xd1, 0x09, 0x9c, 0x94, 0x30, 0xcb, 0xd4, 0x87, 0xb6, 0xb5, 0x95, 0x91, 0xb9, + 0x7e, 0x51, 0x4f, 0xdf, 0x11, 0xb4, 0xee, 0x43, 0xc6, 0x17, 0x52, 0xe0, 0x39, 0xb4, 0xf3, 0x20, + 0x70, 0xcf, 0xc8, 0x55, 0x42, 0xee, 0x9f, 0x56, 0x50, 0x2b, 0x30, 0x87, 0x76, 0x6e, 0xdf, 0x0e, + 0x56, 0x82, 0xb2, 0x83, 0xbf, 0x76, 0xbc, 0x06, 0xb7, 0xb0, 0x8b, 0x8b, 0x9e, 0x1f, 0x2b, 0xf5, + 0xcf, 0xaa, 0x70, 0x36, 0x7b, 0x33, 0xfc, 0x48, 0x08, 0xda, 0x27, 0x04, 0x7d, 0x25, 0x04, 0xbd, + 0xa5, 0xa4, 0xb6, 0x4f, 0x49, 0xed, 0x33, 0x25, 0xb5, 0xa7, 0xa3, 0xf2, 0x0b, 0x7a, 0xfe, 0x67, + 0x7e, 0xb3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xcf, 0x0b, 0x8b, 0x58, 0x02, 0x00, 0x00, +} + +func (m *DumpTreeRequest) 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 *DumpTreeRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DumpTreeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DocumentId) > 0 { + i -= len(m.DocumentId) + copy(dAtA[i:], m.DocumentId) + i = encodeVarintApi(dAtA, i, uint64(len(m.DocumentId))) + i-- + dAtA[i] = 0x12 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DumpTreeResponse) 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 *DumpTreeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DumpTreeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Dump) > 0 { + i -= len(m.Dump) + copy(dAtA[i:], m.Dump) + i = encodeVarintApi(dAtA, i, uint64(len(m.Dump))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AllTreesRequest) 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 *AllTreesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllTreesRequest) 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Tree) 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 *Tree) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Tree) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Heads) > 0 { + for iNdEx := len(m.Heads) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Heads[iNdEx]) + copy(dAtA[i:], m.Heads[iNdEx]) + i = encodeVarintApi(dAtA, i, uint64(len(m.Heads[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AllTreesResponse) 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 *AllTreesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllTreesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Trees) > 0 { + for iNdEx := len(m.Trees) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Trees[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *AllSpacesRequest) 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 *AllSpacesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllSpacesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *AllSpacesResponse) 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 *AllSpacesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllSpacesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SpaceIds) > 0 { + for iNdEx := len(m.SpaceIds) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.SpaceIds[iNdEx]) + copy(dAtA[i:], m.SpaceIds[iNdEx]) + i = encodeVarintApi(dAtA, i, uint64(len(m.SpaceIds[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintApi(dAtA []byte, offset int, v uint64) int { + offset -= sovApi(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *DumpTreeRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.DocumentId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *DumpTreeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Dump) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *AllTreesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *Tree) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if len(m.Heads) > 0 { + for _, s := range m.Heads { + l = len(s) + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + +func (m *AllTreesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Trees) > 0 { + for _, e := range m.Trees { + l = e.Size() + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + +func (m *AllSpacesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *AllSpacesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.SpaceIds) > 0 { + for _, s := range m.SpaceIds { + l = len(s) + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + +func sovApi(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozApi(x uint64) (n int) { + return sovApi(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *DumpTreeRequest) 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: DumpTreeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DumpTreeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DocumentId", 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.DocumentId = 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 *DumpTreeResponse) 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: DumpTreeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DumpTreeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Dump", 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.Dump = 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 *AllTreesRequest) 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: AllTreesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllTreesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 *Tree) 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: Tree: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Tree: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 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.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Heads", 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.Heads = append(m.Heads, 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 *AllTreesResponse) 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: AllTreesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllTreesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Trees", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Trees = append(m.Trees, &Tree{}) + if err := m.Trees[len(m.Trees)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + 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 *AllSpacesRequest) 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: AllSpacesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllSpacesRequest: 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 (m *AllSpacesResponse) 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: AllSpacesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllSpacesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpaceIds", 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.SpaceIds = append(m.SpaceIds, 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 skipApi(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowApi + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowApi + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowApi + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthApi + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupApi + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthApi + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthApi = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowApi = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupApi = fmt.Errorf("proto: unexpected end of group") +) diff --git a/node/api/apiproto/api_drpc.pb.go b/node/api/apiproto/api_drpc.pb.go new file mode 100644 index 00000000..6dcc8e3e --- /dev/null +++ b/node/api/apiproto/api_drpc.pb.go @@ -0,0 +1,193 @@ +// Code generated by protoc-gen-go-drpc. DO NOT EDIT. +// protoc-gen-go-drpc version: v0.0.32 +// source: api/apiproto/protos/api.proto + +package apiproto + +import ( + bytes "bytes" + context "context" + errors "errors" + jsonpb "github.com/gogo/protobuf/jsonpb" + proto "github.com/gogo/protobuf/proto" + drpc "storj.io/drpc" + drpcerr "storj.io/drpc/drpcerr" +) + +type drpcEncoding_File_api_apiproto_protos_api_proto struct{} + +func (drpcEncoding_File_api_apiproto_protos_api_proto) Marshal(msg drpc.Message) ([]byte, error) { + return proto.Marshal(msg.(proto.Message)) +} + +func (drpcEncoding_File_api_apiproto_protos_api_proto) Unmarshal(buf []byte, msg drpc.Message) error { + return proto.Unmarshal(buf, msg.(proto.Message)) +} + +func (drpcEncoding_File_api_apiproto_protos_api_proto) JSONMarshal(msg drpc.Message) ([]byte, error) { + var buf bytes.Buffer + err := new(jsonpb.Marshaler).Marshal(&buf, msg.(proto.Message)) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +func (drpcEncoding_File_api_apiproto_protos_api_proto) JSONUnmarshal(buf []byte, msg drpc.Message) error { + return jsonpb.Unmarshal(bytes.NewReader(buf), msg.(proto.Message)) +} + +type DRPCNodeApiClient interface { + DRPCConn() drpc.Conn + + DumpTree(ctx context.Context, in *DumpTreeRequest) (*DumpTreeResponse, error) + AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) + AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) +} + +type drpcNodeApiClient struct { + cc drpc.Conn +} + +func NewDRPCNodeApiClient(cc drpc.Conn) DRPCNodeApiClient { + return &drpcNodeApiClient{cc} +} + +func (c *drpcNodeApiClient) DRPCConn() drpc.Conn { return c.cc } + +func (c *drpcNodeApiClient) DumpTree(ctx context.Context, in *DumpTreeRequest) (*DumpTreeResponse, error) { + out := new(DumpTreeResponse) + err := c.cc.Invoke(ctx, "/api.NodeApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcNodeApiClient) AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) { + out := new(AllTreesResponse) + err := c.cc.Invoke(ctx, "/api.NodeApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcNodeApiClient) AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) { + out := new(AllSpacesResponse) + err := c.cc.Invoke(ctx, "/api.NodeApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +type DRPCNodeApiServer interface { + DumpTree(context.Context, *DumpTreeRequest) (*DumpTreeResponse, error) + AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) + AllSpaces(context.Context, *AllSpacesRequest) (*AllSpacesResponse, error) +} + +type DRPCNodeApiUnimplementedServer struct{} + +func (s *DRPCNodeApiUnimplementedServer) DumpTree(context.Context, *DumpTreeRequest) (*DumpTreeResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCNodeApiUnimplementedServer) AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCNodeApiUnimplementedServer) AllSpaces(context.Context, *AllSpacesRequest) (*AllSpacesResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +type DRPCNodeApiDescription struct{} + +func (DRPCNodeApiDescription) NumMethods() int { return 3 } + +func (DRPCNodeApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { + switch n { + case 0: + return "/api.NodeApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCNodeApiServer). + DumpTree( + ctx, + in1.(*DumpTreeRequest), + ) + }, DRPCNodeApiServer.DumpTree, true + case 1: + return "/api.NodeApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCNodeApiServer). + AllTrees( + ctx, + in1.(*AllTreesRequest), + ) + }, DRPCNodeApiServer.AllTrees, true + case 2: + return "/api.NodeApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCNodeApiServer). + AllSpaces( + ctx, + in1.(*AllSpacesRequest), + ) + }, DRPCNodeApiServer.AllSpaces, true + default: + return "", nil, nil, nil, false + } +} + +func DRPCRegisterNodeApi(mux drpc.Mux, impl DRPCNodeApiServer) error { + return mux.Register(impl, DRPCNodeApiDescription{}) +} + +type DRPCNodeApi_DumpTreeStream interface { + drpc.Stream + SendAndClose(*DumpTreeResponse) error +} + +type drpcNodeApi_DumpTreeStream struct { + drpc.Stream +} + +func (x *drpcNodeApi_DumpTreeStream) SendAndClose(m *DumpTreeResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCNodeApi_AllTreesStream interface { + drpc.Stream + SendAndClose(*AllTreesResponse) error +} + +type drpcNodeApi_AllTreesStream struct { + drpc.Stream +} + +func (x *drpcNodeApi_AllTreesStream) SendAndClose(m *AllTreesResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCNodeApi_AllSpacesStream interface { + drpc.Stream + SendAndClose(*AllSpacesResponse) error +} + +type drpcNodeApi_AllSpacesStream struct { + drpc.Stream +} + +func (x *drpcNodeApi_AllSpacesStream) SendAndClose(m *AllSpacesResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} diff --git a/node/api/apiproto/protos/api.proto b/node/api/apiproto/protos/api.proto new file mode 100644 index 00000000..f60fd440 --- /dev/null +++ b/node/api/apiproto/protos/api.proto @@ -0,0 +1,39 @@ +syntax = "proto3"; +package api; + +option go_package = "api/apiproto"; + +service NodeApi { + rpc DumpTree(DumpTreeRequest) returns(DumpTreeResponse); + rpc AllTrees(AllTreesRequest) returns(AllTreesResponse); + rpc AllSpaces(AllSpacesRequest) returns(AllSpacesResponse); +} + +message DumpTreeRequest { + string spaceId = 1; + string documentId = 2; +} + +message DumpTreeResponse { + string dump = 1; +} + +message AllTreesRequest { + string spaceId = 1; +} + +message Tree { + string id = 1; + repeated string heads = 2; +} + +message AllTreesResponse { + repeated Tree trees = 1; +} + +message AllSpacesRequest { +} + +message AllSpacesResponse { + repeated string spaceIds = 1; +} diff --git a/node/api/rpchandler.go b/node/api/rpchandler.go new file mode 100644 index 00000000..13c099f9 --- /dev/null +++ b/node/api/rpchandler.go @@ -0,0 +1,56 @@ +package api + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/storage" +) + +type rpcHandler struct { + treeCache treegetter.TreeGetter + spaceService nodespace.Service + storageService storage.NodeStorage +} + +func (r *rpcHandler) DumpTree(ctx context.Context, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) { + tree, err := r.treeCache.GetTree(context.Background(), request.SpaceId, request.DocumentId) + if err != nil { + return + } + dump, err := tree.DebugDump() + if err != nil { + return + } + resp = &apiproto.DumpTreeResponse{ + Dump: dump, + } + return +} + +func (r *rpcHandler) AllTrees(ctx context.Context, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { + space, err := r.spaceService.GetSpace(ctx, request.SpaceId) + if err != nil { + return + } + heads := space.DebugAllHeads() + var trees []*apiproto.Tree + for _, head := range heads { + trees = append(trees, &apiproto.Tree{ + Id: head.Id, + Heads: head.Heads, + }) + } + resp = &apiproto.AllTreesResponse{Trees: trees} + return +} + +func (r *rpcHandler) AllSpaces(ctx context.Context, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) { + ids, err := r.storageService.AllSpaceIds() + if err != nil { + return + } + resp = &apiproto.AllSpacesResponse{SpaceIds: ids} + return +} diff --git a/node/api/service.go b/node/api/service.go new file mode 100644 index 00000000..9b39d618 --- /dev/null +++ b/node/api/service.go @@ -0,0 +1,69 @@ +package api + +import ( + "context" + "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/commonspace/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace" + nodestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/node/storage" + "storj.io/drpc" +) + +const CName = "api.service" + +var log = logger.NewNamed(CName) + +func New() Service { + return &service{BaseDrpcServer: server.NewBaseDrpcServer()} +} + +type Service interface { + app.ComponentRunnable + drpc.Mux +} + +type service struct { + transport secure.Service + cfg *config.Config + treeCache treegetter.TreeGetter + spaceService nodespace.Service + storageService nodestorage.NodeStorage + *server.BaseDrpcServer +} + +func (s *service) Init(a *app.App) (err error) { + s.treeCache = a.MustComponent(treegetter.CName).(treegetter.TreeGetter) + s.spaceService = a.MustComponent(nodespace.CName).(nodespace.Service) + s.storageService = a.MustComponent(storage.CName).(nodestorage.NodeStorage) + s.cfg = a.MustComponent(config.CName).(*config.Config) + s.transport = a.MustComponent(secure.CName).(secure.Service) + return nil +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) Run(ctx context.Context) (err error) { + err = s.BaseDrpcServer.Run( + ctx, + s.cfg.APIServer.ListenAddrs, + func(handler drpc.Handler) drpc.Handler { + return handler + }, + s.transport.BasicListener) + if err != nil { + return + } + return apiproto.DRPCRegisterNodeApi(s, &rpcHandler{s.treeCache, s.spaceService, s.storageService}) +} + +func (s *service) Close(ctx context.Context) (err error) { + return s.BaseDrpcServer.Close(ctx) +} diff --git a/node/cmd/node.go b/node/cmd/node.go index 1606ac3e..a931bdc4 100644 --- a/node/cmd/node.go +++ b/node/cmd/node.go @@ -15,6 +15,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace/nodecache" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/storage" @@ -101,5 +102,6 @@ func Bootstrap(a *app.App) { Register(pool.New()). Register(nodespace.New()). Register(commonspace.New()). - Register(server.New()) + Register(server.New()). + Register(api.New()) } diff --git a/node/storage/storageservice.go b/node/storage/storageservice.go index 9b703cd8..24943a62 100644 --- a/node/storage/storageservice.go +++ b/node/storage/storageservice.go @@ -4,13 +4,19 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" + "os" ) type storageService struct { rootPath string } -func New() storage.SpaceStorageProvider { +type NodeStorage interface { + storage.SpaceStorageProvider + AllSpaceIds() (ids []string, err error) +} + +func New() NodeStorage { return &storageService{} } @@ -31,3 +37,16 @@ func (s *storageService) SpaceStorage(id string) (storage.SpaceStorage, error) { func (s *storageService) CreateSpaceStorage(payload storage.SpaceStorageCreatePayload) (storage.SpaceStorage, error) { return createSpaceStorage(s.rootPath, payload) } + +func (s *storageService) AllSpaceIds() (ids []string, err error) { + var files []string + fileInfo, err := os.ReadDir(s.rootPath) + if err != nil { + return files, err + } + + for _, file := range fileInfo { + files = append(files, file.Name()) + } + return files, nil +} From 3d624adc0960f974ee9d2643876289ab074f2212 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sat, 3 Dec 2022 13:09:15 +0100 Subject: [PATCH 14/32] WIP node api --- client/api/apiproto/api.pb.go | 109 ++++++++++++++------------- client/api/apiproto/api_drpc.pb.go | 36 ++++----- client/api/apiproto/protos/api.proto | 2 +- node/api/apiproto/api.pb.go | 59 ++++++++------- node/api/apiproto/api_drpc.pb.go | 12 +-- node/api/apiproto/protos/api.proto | 2 +- util/cmd/debug/api/client/service.go | 11 ++- util/cmd/debug/api/node/service.go | 29 +++++++ util/cmd/debug/api/service.go | 96 ++++++++++++++++++++--- util/cmd/debug/drpcclient/service.go | 18 ++--- util/cmd/debug/peers/peers.go | 4 + 11 files changed, 248 insertions(+), 130 deletions(-) diff --git a/client/api/apiproto/api.pb.go b/client/api/apiproto/api.pb.go index 61c99e32..42b7ccc6 100644 --- a/client/api/apiproto/api.pb.go +++ b/client/api/apiproto/api.pb.go @@ -867,65 +867,66 @@ func (m *LoadSpaceResponse) XXX_DiscardUnknown() { var xxx_messageInfo_LoadSpaceResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*CreateSpaceRequest)(nil), "api.CreateSpaceRequest") - proto.RegisterType((*CreateSpaceResponse)(nil), "api.CreateSpaceResponse") - proto.RegisterType((*DeriveSpaceRequest)(nil), "api.DeriveSpaceRequest") - proto.RegisterType((*DeriveSpaceResponse)(nil), "api.DeriveSpaceResponse") - proto.RegisterType((*CreateDocumentRequest)(nil), "api.CreateDocumentRequest") - proto.RegisterType((*CreateDocumentResponse)(nil), "api.CreateDocumentResponse") - proto.RegisterType((*DeleteDocumentRequest)(nil), "api.DeleteDocumentRequest") - proto.RegisterType((*DeleteDocumentResponse)(nil), "api.DeleteDocumentResponse") - proto.RegisterType((*AddTextRequest)(nil), "api.AddTextRequest") - proto.RegisterType((*AddTextResponse)(nil), "api.AddTextResponse") - proto.RegisterType((*DumpTreeRequest)(nil), "api.DumpTreeRequest") - proto.RegisterType((*DumpTreeResponse)(nil), "api.DumpTreeResponse") - proto.RegisterType((*AllTreesRequest)(nil), "api.AllTreesRequest") - proto.RegisterType((*Tree)(nil), "api.Tree") - proto.RegisterType((*AllTreesResponse)(nil), "api.AllTreesResponse") - proto.RegisterType((*AllSpacesRequest)(nil), "api.AllSpacesRequest") - proto.RegisterType((*AllSpacesResponse)(nil), "api.AllSpacesResponse") - proto.RegisterType((*LoadSpaceRequest)(nil), "api.LoadSpaceRequest") - proto.RegisterType((*LoadSpaceResponse)(nil), "api.LoadSpaceResponse") + proto.RegisterType((*CreateSpaceRequest)(nil), "clientapi.CreateSpaceRequest") + proto.RegisterType((*CreateSpaceResponse)(nil), "clientapi.CreateSpaceResponse") + proto.RegisterType((*DeriveSpaceRequest)(nil), "clientapi.DeriveSpaceRequest") + proto.RegisterType((*DeriveSpaceResponse)(nil), "clientapi.DeriveSpaceResponse") + proto.RegisterType((*CreateDocumentRequest)(nil), "clientapi.CreateDocumentRequest") + proto.RegisterType((*CreateDocumentResponse)(nil), "clientapi.CreateDocumentResponse") + proto.RegisterType((*DeleteDocumentRequest)(nil), "clientapi.DeleteDocumentRequest") + proto.RegisterType((*DeleteDocumentResponse)(nil), "clientapi.DeleteDocumentResponse") + proto.RegisterType((*AddTextRequest)(nil), "clientapi.AddTextRequest") + proto.RegisterType((*AddTextResponse)(nil), "clientapi.AddTextResponse") + proto.RegisterType((*DumpTreeRequest)(nil), "clientapi.DumpTreeRequest") + proto.RegisterType((*DumpTreeResponse)(nil), "clientapi.DumpTreeResponse") + proto.RegisterType((*AllTreesRequest)(nil), "clientapi.AllTreesRequest") + proto.RegisterType((*Tree)(nil), "clientapi.Tree") + proto.RegisterType((*AllTreesResponse)(nil), "clientapi.AllTreesResponse") + proto.RegisterType((*AllSpacesRequest)(nil), "clientapi.AllSpacesRequest") + proto.RegisterType((*AllSpacesResponse)(nil), "clientapi.AllSpacesResponse") + proto.RegisterType((*LoadSpaceRequest)(nil), "clientapi.LoadSpaceRequest") + proto.RegisterType((*LoadSpaceResponse)(nil), "clientapi.LoadSpaceResponse") } func init() { proto.RegisterFile("api/apiproto/protos/api.proto", fileDescriptor_fc31080c27db9707) } var fileDescriptor_fc31080c27db9707 = []byte{ - // 544 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4d, 0x6f, 0xd3, 0x40, - 0x10, 0x8d, 0x93, 0xf4, 0xc3, 0x13, 0x94, 0xa4, 0x93, 0x0f, 0x2c, 0x23, 0x4c, 0xb4, 0x12, 0x55, - 0x24, 0xaa, 0x46, 0xb4, 0x48, 0x48, 0x9c, 0x1a, 0x9a, 0x4b, 0x04, 0x17, 0x42, 0x4f, 0x1c, 0x90, - 0x4c, 0x77, 0x25, 0x2c, 0x25, 0xf1, 0x12, 0x3b, 0xa8, 0x3f, 0x83, 0x3f, 0x85, 0xc4, 0xb1, 0x47, - 0x8e, 0x28, 0xf9, 0x23, 0xc8, 0xeb, 0xf1, 0xd7, 0x3a, 0x05, 0x55, 0xbd, 0x24, 0x9e, 0xb7, 0xf3, - 0xde, 0xcc, 0xc6, 0xef, 0x29, 0xf0, 0xd4, 0x95, 0xde, 0xc8, 0x95, 0x9e, 0x5c, 0xf9, 0xa1, 0x3f, - 0x52, 0x9f, 0x41, 0x54, 0x9f, 0xaa, 0x47, 0xac, 0xb9, 0xd2, 0x63, 0x5d, 0xc0, 0xcb, 0x95, 0x70, - 0x43, 0xf1, 0x51, 0xba, 0xd7, 0x62, 0x26, 0xbe, 0xad, 0x45, 0x10, 0xb2, 0xe7, 0xd0, 0x29, 0xa0, - 0x81, 0xf4, 0x97, 0x81, 0xc0, 0x26, 0x54, 0x3d, 0x6e, 0x19, 0x03, 0x63, 0x68, 0xce, 0xaa, 0x1e, - 0x8f, 0xc8, 0x13, 0xb1, 0xf2, 0xbe, 0x97, 0xc8, 0x05, 0xf4, 0x0e, 0xf2, 0x4b, 0xe8, 0xc5, 0x33, - 0x26, 0xfe, 0xf5, 0x7a, 0x21, 0x96, 0x21, 0xf1, 0xd1, 0x82, 0x83, 0x20, 0x62, 0x4e, 0x93, 0xee, - 0xa4, 0x64, 0x43, 0xe8, 0xeb, 0x94, 0x3b, 0xc4, 0x3f, 0x40, 0x6f, 0x22, 0xe6, 0xe2, 0x1e, 0xe2, - 0xe8, 0x00, 0x70, 0x6a, 0x9e, 0x72, 0xab, 0xaa, 0x0e, 0x73, 0x08, 0xb3, 0xa0, 0xaf, 0x4b, 0xc6, - 0xc3, 0xd9, 0x67, 0x68, 0x8e, 0x39, 0xbf, 0x12, 0x37, 0x0f, 0x9f, 0x82, 0x08, 0xf5, 0x50, 0xdc, - 0x84, 0x56, 0x4d, 0x9d, 0xa8, 0x67, 0x36, 0x85, 0x56, 0xaa, 0x4f, 0xf7, 0x2d, 0xca, 0x18, 0x25, - 0x99, 0x3e, 0xec, 0x7f, 0x15, 0x2e, 0x4f, 0x47, 0x50, 0xc5, 0xde, 0x41, 0x6b, 0xb2, 0x5e, 0xc8, - 0xab, 0x95, 0x10, 0x0f, 0xff, 0x45, 0x8e, 0xa1, 0x9d, 0x89, 0xd1, 0x62, 0x08, 0x75, 0xbe, 0x5e, - 0x48, 0x92, 0x52, 0xcf, 0xec, 0x05, 0xb4, 0xc6, 0xf3, 0x79, 0xd4, 0x16, 0xfc, 0xff, 0x1d, 0x9f, - 0x40, 0x3d, 0xea, 0xd4, 0xdf, 0x28, 0x76, 0x61, 0x2f, 0xba, 0x43, 0x60, 0x55, 0x07, 0xb5, 0xa1, - 0x39, 0x8b, 0x0b, 0x76, 0x0e, 0xed, 0x4c, 0x9a, 0x56, 0x78, 0x06, 0x7b, 0x61, 0x04, 0x58, 0xc6, - 0xa0, 0x36, 0x6c, 0x9c, 0x99, 0xa7, 0x91, 0xe5, 0xd5, 0x92, 0x31, 0xce, 0x50, 0x91, 0x94, 0x3b, - 0x93, 0x85, 0xd8, 0x08, 0x8e, 0x72, 0x18, 0x29, 0xd9, 0x70, 0x48, 0x6b, 0xc5, 0x62, 0xe6, 0x2c, - 0xad, 0xd9, 0x09, 0xb4, 0xdf, 0xfb, 0x2e, 0xcf, 0x3b, 0xff, 0x1f, 0xb7, 0xea, 0xc0, 0x51, 0xae, - 0x3b, 0x96, 0x3f, 0xfb, 0x59, 0x07, 0xf3, 0x72, 0xee, 0x89, 0x65, 0x38, 0x96, 0x1e, 0x5e, 0x40, - 0x23, 0x97, 0x39, 0x7c, 0xac, 0xd6, 0x2e, 0x67, 0xd3, 0xb6, 0xca, 0x07, 0xb4, 0xee, 0x05, 0x34, - 0x72, 0xc1, 0x23, 0x85, 0x72, 0x40, 0x49, 0x61, 0x57, 0x46, 0xa7, 0xd0, 0x2c, 0x06, 0x0c, 0xed, - 0xdc, 0x34, 0x2d, 0x4b, 0xf6, 0x93, 0x9d, 0x67, 0x99, 0x54, 0x31, 0x2e, 0x24, 0xb5, 0x33, 0x96, - 0x24, 0xb5, 0x3b, 0x5f, 0xf8, 0x0a, 0x0e, 0xc8, 0xff, 0xd8, 0x51, 0x7d, 0xc5, 0xb4, 0xd9, 0xdd, - 0x22, 0x48, 0xac, 0xd7, 0x70, 0x98, 0xb8, 0x13, 0xe3, 0x0e, 0xcd, 0xf9, 0x76, 0x4f, 0x43, 0x33, - 0x62, 0xe2, 0x29, 0x22, 0x6a, 0xee, 0x25, 0x62, 0xc9, 0x78, 0x6f, 0xc0, 0x4c, 0x3d, 0x84, 0x69, - 0x4f, 0xc1, 0x67, 0x76, 0x5f, 0x87, 0x33, 0x6e, 0x6a, 0x10, 0xe2, 0xea, 0xf6, 0x22, 0x6e, 0xc9, - 0x47, 0x6f, 0x8f, 0x7f, 0x6d, 0x1c, 0xe3, 0x76, 0xe3, 0x18, 0x7f, 0x36, 0x8e, 0xf1, 0x63, 0xeb, - 0x54, 0x6e, 0xb7, 0x4e, 0xe5, 0xf7, 0xd6, 0xa9, 0x7c, 0x7a, 0x94, 0xff, 0x07, 0xf8, 0xb2, 0xaf, - 0xbe, 0xce, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xb5, 0x35, 0xcb, 0x18, 0x06, 0x00, 0x00, + // 553 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcb, 0x6e, 0xd3, 0x40, + 0x14, 0x86, 0xe3, 0x5c, 0xda, 0xfa, 0x04, 0x25, 0xe9, 0x69, 0x1b, 0x19, 0x43, 0xad, 0x30, 0x52, + 0xab, 0x48, 0x54, 0x89, 0x28, 0x2b, 0x76, 0x84, 0x44, 0x48, 0x11, 0xd9, 0x10, 0xca, 0x86, 0x05, + 0x92, 0xc9, 0x8c, 0x84, 0xa5, 0x5c, 0x86, 0xd8, 0x41, 0x7d, 0x0c, 0x5e, 0x85, 0xb7, 0x60, 0xd9, + 0x25, 0x4b, 0x94, 0xbc, 0x08, 0xf2, 0x78, 0x6c, 0xcf, 0xd8, 0x4e, 0x11, 0xea, 0x26, 0xf1, 0x9c, + 0xcb, 0x77, 0xce, 0xc4, 0xff, 0xaf, 0xc0, 0xb9, 0xcb, 0xbd, 0xbe, 0xcb, 0x3d, 0xbe, 0x5e, 0x05, + 0xab, 0xbe, 0xf8, 0xf4, 0xc3, 0x73, 0x4f, 0x3c, 0xa2, 0x39, 0x9b, 0x7b, 0x6c, 0x19, 0xb8, 0xdc, + 0x23, 0xa7, 0x80, 0xc3, 0x35, 0x73, 0x03, 0xf6, 0x81, 0xbb, 0x33, 0x36, 0x65, 0xdf, 0x36, 0xcc, + 0x0f, 0xc8, 0x05, 0x9c, 0x68, 0x51, 0x9f, 0xaf, 0x96, 0x3e, 0xc3, 0x06, 0x94, 0x3d, 0x6a, 0x19, + 0x1d, 0xa3, 0x6b, 0x4e, 0xcb, 0x1e, 0x0d, 0x9b, 0x47, 0x6c, 0xed, 0x7d, 0xcf, 0x35, 0x6b, 0xd1, + 0x3d, 0xcd, 0x2f, 0xe0, 0x2c, 0x9a, 0x31, 0x5a, 0xcd, 0x36, 0x0b, 0xb6, 0x0c, 0x64, 0x3f, 0x5a, + 0x70, 0xe8, 0x87, 0x9d, 0xe3, 0xb8, 0x3a, 0x3e, 0x92, 0x2e, 0xb4, 0xb3, 0x2d, 0x7b, 0xe0, 0xef, + 0xe1, 0x6c, 0xc4, 0xe6, 0xec, 0x3f, 0xe0, 0xe8, 0x00, 0x50, 0x59, 0x3c, 0xa6, 0x56, 0x59, 0x24, + 0x95, 0x08, 0xb1, 0xa0, 0x9d, 0x45, 0x46, 0xc3, 0xc9, 0x67, 0x68, 0x0c, 0x28, 0xbd, 0x61, 0xb7, + 0x0f, 0x9f, 0x82, 0x08, 0xd5, 0x80, 0xdd, 0x06, 0x56, 0x45, 0x64, 0xc4, 0x33, 0x19, 0x43, 0x33, + 0xe1, 0xcb, 0xfb, 0xea, 0x18, 0x23, 0x87, 0x69, 0xc3, 0xc1, 0x57, 0xe6, 0xd2, 0x64, 0x84, 0x3c, + 0x91, 0x77, 0xd0, 0x1c, 0x6d, 0x16, 0xfc, 0x66, 0xcd, 0xd8, 0xc3, 0x7f, 0x91, 0x4b, 0x68, 0xa5, + 0x30, 0xb9, 0x18, 0x42, 0x95, 0x6e, 0x16, 0x5c, 0xa2, 0xc4, 0x33, 0x79, 0x0e, 0xcd, 0xc1, 0x7c, + 0x1e, 0x96, 0xf9, 0xff, 0x7e, 0xc7, 0x57, 0x50, 0x0d, 0x2b, 0xb3, 0x6f, 0x14, 0x4f, 0xa1, 0x16, + 0xde, 0xc1, 0xb7, 0xca, 0x9d, 0x4a, 0xd7, 0x9c, 0x46, 0x07, 0xf2, 0x0a, 0x5a, 0x29, 0x5a, 0xae, + 0x70, 0x01, 0xb5, 0x20, 0x0c, 0x58, 0x46, 0xa7, 0xd2, 0xad, 0x5f, 0x37, 0x7b, 0x89, 0xda, 0x7b, + 0x62, 0xd5, 0x28, 0x4b, 0x50, 0xb4, 0x0a, 0x8d, 0xc6, 0x6b, 0x91, 0x3e, 0x1c, 0x2b, 0x31, 0xc9, + 0xb3, 0xe1, 0x48, 0x2e, 0x17, 0x21, 0xcd, 0x69, 0x72, 0x26, 0x57, 0xd0, 0x9a, 0xac, 0x5c, 0xaa, + 0xea, 0xff, 0x9e, 0xbb, 0x9d, 0xc0, 0xb1, 0x52, 0x1d, 0xe1, 0xaf, 0x7f, 0xd6, 0xc0, 0x1c, 0x8a, + 0x0d, 0x07, 0xdc, 0xc3, 0x09, 0xd4, 0x15, 0xe7, 0xe1, 0xb9, 0xb2, 0x7c, 0xde, 0xa7, 0xb6, 0xb3, + 0x2f, 0x2d, 0x57, 0x9f, 0x40, 0x5d, 0xb1, 0xa2, 0x46, 0xcb, 0x1b, 0x57, 0xa3, 0x15, 0x39, 0xf8, + 0x23, 0x34, 0x74, 0xfb, 0x61, 0x27, 0x37, 0x3f, 0xe3, 0x37, 0xfb, 0xd9, 0x3d, 0x15, 0x29, 0x56, + 0x37, 0x96, 0x86, 0x2d, 0xb4, 0xb1, 0x86, 0x2d, 0x76, 0x25, 0xbe, 0x86, 0x43, 0xe9, 0x1a, 0x7c, + 0xac, 0x54, 0xeb, 0x4e, 0xb5, 0xed, 0xa2, 0x94, 0x24, 0x0c, 0xe1, 0x28, 0xd6, 0x37, 0xaa, 0x75, + 0x19, 0x07, 0xd9, 0x4f, 0x0a, 0x73, 0x29, 0x24, 0x56, 0xa8, 0x06, 0xc9, 0x38, 0x42, 0x83, 0xe4, + 0x24, 0xfd, 0x16, 0xcc, 0x44, 0x97, 0x98, 0xa9, 0xd4, 0x14, 0x6c, 0x3f, 0x2d, 0x4e, 0xa6, 0x9c, + 0x44, 0x80, 0x1a, 0x27, 0x2b, 0x62, 0x8d, 0x93, 0xd3, 0xec, 0x9b, 0xcb, 0x5f, 0x5b, 0xc7, 0xb8, + 0xdb, 0x3a, 0xc6, 0x9f, 0xad, 0x63, 0xfc, 0xd8, 0x39, 0xa5, 0xbb, 0x9d, 0x53, 0xfa, 0xbd, 0x73, + 0x4a, 0x9f, 0x1e, 0xa9, 0xff, 0x3c, 0x5f, 0x0e, 0xc4, 0xd7, 0xcb, 0xbf, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x5d, 0x2e, 0xfd, 0x34, 0x90, 0x06, 0x00, 0x00, } func (m *CreateSpaceRequest) Marshal() (dAtA []byte, err error) { diff --git a/client/api/apiproto/api_drpc.pb.go b/client/api/apiproto/api_drpc.pb.go index a02e0f1a..f1e6be1f 100644 --- a/client/api/apiproto/api_drpc.pb.go +++ b/client/api/apiproto/api_drpc.pb.go @@ -63,7 +63,7 @@ func (c *drpcClientApiClient) DRPCConn() drpc.Conn { return c.cc } func (c *drpcClientApiClient) CreateSpace(ctx context.Context, in *CreateSpaceRequest) (*CreateSpaceResponse, error) { out := new(CreateSpaceResponse) - err := c.cc.Invoke(ctx, "/api.ClientApi/CreateSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/CreateSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -72,7 +72,7 @@ func (c *drpcClientApiClient) CreateSpace(ctx context.Context, in *CreateSpaceRe func (c *drpcClientApiClient) DeriveSpace(ctx context.Context, in *DeriveSpaceRequest) (*DeriveSpaceResponse, error) { out := new(DeriveSpaceResponse) - err := c.cc.Invoke(ctx, "/api.ClientApi/DeriveSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/DeriveSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -81,7 +81,7 @@ func (c *drpcClientApiClient) DeriveSpace(ctx context.Context, in *DeriveSpaceRe func (c *drpcClientApiClient) CreateDocument(ctx context.Context, in *CreateDocumentRequest) (*CreateDocumentResponse, error) { out := new(CreateDocumentResponse) - err := c.cc.Invoke(ctx, "/api.ClientApi/CreateDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/CreateDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -90,7 +90,7 @@ func (c *drpcClientApiClient) CreateDocument(ctx context.Context, in *CreateDocu func (c *drpcClientApiClient) DeleteDocument(ctx context.Context, in *DeleteDocumentRequest) (*DeleteDocumentResponse, error) { out := new(DeleteDocumentResponse) - err := c.cc.Invoke(ctx, "/api.ClientApi/DeleteDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/DeleteDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -99,7 +99,7 @@ func (c *drpcClientApiClient) DeleteDocument(ctx context.Context, in *DeleteDocu func (c *drpcClientApiClient) AddText(ctx context.Context, in *AddTextRequest) (*AddTextResponse, error) { out := new(AddTextResponse) - err := c.cc.Invoke(ctx, "/api.ClientApi/AddText", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/AddText", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -108,7 +108,7 @@ func (c *drpcClientApiClient) AddText(ctx context.Context, in *AddTextRequest) ( func (c *drpcClientApiClient) DumpTree(ctx context.Context, in *DumpTreeRequest) (*DumpTreeResponse, error) { out := new(DumpTreeResponse) - err := c.cc.Invoke(ctx, "/api.ClientApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -117,7 +117,7 @@ func (c *drpcClientApiClient) DumpTree(ctx context.Context, in *DumpTreeRequest) func (c *drpcClientApiClient) AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) { out := new(AllTreesResponse) - err := c.cc.Invoke(ctx, "/api.ClientApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -126,7 +126,7 @@ func (c *drpcClientApiClient) AllTrees(ctx context.Context, in *AllTreesRequest) func (c *drpcClientApiClient) AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) { out := new(AllSpacesResponse) - err := c.cc.Invoke(ctx, "/api.ClientApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -135,7 +135,7 @@ func (c *drpcClientApiClient) AllSpaces(ctx context.Context, in *AllSpacesReques func (c *drpcClientApiClient) LoadSpace(ctx context.Context, in *LoadSpaceRequest) (*LoadSpaceResponse, error) { out := new(LoadSpaceResponse) - err := c.cc.Invoke(ctx, "/api.ClientApi/LoadSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/LoadSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -199,7 +199,7 @@ func (DRPCClientApiDescription) NumMethods() int { return 9 } func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { switch n { case 0: - return "/api.ClientApi/CreateSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/clientapi.ClientApi/CreateSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). CreateSpace( @@ -208,7 +208,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei ) }, DRPCClientApiServer.CreateSpace, true case 1: - return "/api.ClientApi/DeriveSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/clientapi.ClientApi/DeriveSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). DeriveSpace( @@ -217,7 +217,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei ) }, DRPCClientApiServer.DeriveSpace, true case 2: - return "/api.ClientApi/CreateDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/clientapi.ClientApi/CreateDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). CreateDocument( @@ -226,7 +226,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei ) }, DRPCClientApiServer.CreateDocument, true case 3: - return "/api.ClientApi/DeleteDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/clientapi.ClientApi/DeleteDocument", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). DeleteDocument( @@ -235,7 +235,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei ) }, DRPCClientApiServer.DeleteDocument, true case 4: - return "/api.ClientApi/AddText", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/clientapi.ClientApi/AddText", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). AddText( @@ -244,7 +244,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei ) }, DRPCClientApiServer.AddText, true case 5: - return "/api.ClientApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/clientapi.ClientApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). DumpTree( @@ -253,7 +253,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei ) }, DRPCClientApiServer.DumpTree, true case 6: - return "/api.ClientApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/clientapi.ClientApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). AllTrees( @@ -262,7 +262,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei ) }, DRPCClientApiServer.AllTrees, true case 7: - return "/api.ClientApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/clientapi.ClientApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). AllSpaces( @@ -271,7 +271,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei ) }, DRPCClientApiServer.AllSpaces, true case 8: - return "/api.ClientApi/LoadSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/clientapi.ClientApi/LoadSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). LoadSpace( diff --git a/client/api/apiproto/protos/api.proto b/client/api/apiproto/protos/api.proto index 616cfbed..ab454bcf 100644 --- a/client/api/apiproto/protos/api.proto +++ b/client/api/apiproto/protos/api.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package api; +package clientapi; option go_package = "api/apiproto"; diff --git a/node/api/apiproto/api.pb.go b/node/api/apiproto/api.pb.go index a24500f3..169a9d60 100644 --- a/node/api/apiproto/api.pb.go +++ b/node/api/apiproto/api.pb.go @@ -339,40 +339,41 @@ func (m *AllSpacesResponse) GetSpaceIds() []string { } func init() { - proto.RegisterType((*DumpTreeRequest)(nil), "api.DumpTreeRequest") - proto.RegisterType((*DumpTreeResponse)(nil), "api.DumpTreeResponse") - proto.RegisterType((*AllTreesRequest)(nil), "api.AllTreesRequest") - proto.RegisterType((*Tree)(nil), "api.Tree") - proto.RegisterType((*AllTreesResponse)(nil), "api.AllTreesResponse") - proto.RegisterType((*AllSpacesRequest)(nil), "api.AllSpacesRequest") - proto.RegisterType((*AllSpacesResponse)(nil), "api.AllSpacesResponse") + proto.RegisterType((*DumpTreeRequest)(nil), "nodeapi.DumpTreeRequest") + proto.RegisterType((*DumpTreeResponse)(nil), "nodeapi.DumpTreeResponse") + proto.RegisterType((*AllTreesRequest)(nil), "nodeapi.AllTreesRequest") + proto.RegisterType((*Tree)(nil), "nodeapi.Tree") + proto.RegisterType((*AllTreesResponse)(nil), "nodeapi.AllTreesResponse") + proto.RegisterType((*AllSpacesRequest)(nil), "nodeapi.AllSpacesRequest") + proto.RegisterType((*AllSpacesResponse)(nil), "nodeapi.AllSpacesResponse") } func init() { proto.RegisterFile("api/apiproto/protos/api.proto", fileDescriptor_fc31080c27db9707) } var fileDescriptor_fc31080c27db9707 = []byte{ - // 336 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xc1, 0x4e, 0xea, 0x40, - 0x14, 0x65, 0x0a, 0x3c, 0xe8, 0x7d, 0x46, 0x70, 0x82, 0xa6, 0x21, 0x71, 0x24, 0xb3, 0x20, 0x24, - 0x1a, 0x48, 0x60, 0x41, 0xe2, 0x0e, 0xe3, 0x86, 0x98, 0xb8, 0xa8, 0xae, 0xdc, 0x55, 0x66, 0x12, - 0x27, 0x01, 0x3a, 0x32, 0xed, 0x7f, 0xf8, 0x37, 0xfe, 0x82, 0x4b, 0x96, 0x2e, 0x4d, 0xfb, 0x23, - 0x66, 0xa6, 0xd3, 0x52, 0xeb, 0xc2, 0x4d, 0x3b, 0xf7, 0xcc, 0xbd, 0xe7, 0x9c, 0x7b, 0x32, 0x70, - 0x1e, 0x48, 0x31, 0x09, 0xa4, 0x90, 0xbb, 0x30, 0x0a, 0x27, 0xe6, 0xab, 0x74, 0x3d, 0x36, 0x47, - 0x5c, 0x0f, 0xa4, 0xa0, 0x77, 0xd0, 0xb9, 0x8d, 0x37, 0xf2, 0x71, 0xc7, 0xb9, 0xcf, 0x5f, 0x63, - 0xae, 0x22, 0xec, 0x41, 0x4b, 0xc9, 0x60, 0xc5, 0x97, 0xcc, 0x43, 0x03, 0x34, 0x72, 0xfd, 0xbc, - 0xc4, 0x04, 0x80, 0x85, 0xab, 0x78, 0xc3, 0xb7, 0xd1, 0x92, 0x79, 0x8e, 0xb9, 0x2c, 0x21, 0x74, - 0x08, 0xdd, 0x03, 0x99, 0x92, 0xe1, 0x56, 0x71, 0x8c, 0xa1, 0xc1, 0xe2, 0x8d, 0xb4, 0x54, 0xe6, - 0x4c, 0x2f, 0xa1, 0xb3, 0x58, 0xaf, 0x75, 0x9b, 0xfa, 0x53, 0x94, 0x5e, 0x41, 0x43, 0x77, 0xe2, - 0x63, 0x70, 0x44, 0x7e, 0xe9, 0x08, 0x86, 0x7b, 0xd0, 0x7c, 0xe1, 0x01, 0x53, 0x9e, 0x33, 0xa8, - 0x8f, 0x5c, 0x3f, 0x2b, 0xe8, 0x0c, 0xba, 0x07, 0x6a, 0x6b, 0xe1, 0x02, 0x9a, 0x91, 0x06, 0x3c, - 0x34, 0xa8, 0x8f, 0xfe, 0x4f, 0xdd, 0xb1, 0xce, 0xc0, 0x98, 0xcc, 0x70, 0x8a, 0xcd, 0xd0, 0x83, - 0x16, 0xcc, 0x0d, 0xd1, 0x09, 0x9c, 0x94, 0x30, 0xcb, 0xd4, 0x87, 0xb6, 0xb5, 0x95, 0x91, 0xb9, - 0x7e, 0x51, 0x4f, 0xdf, 0x11, 0xb4, 0xee, 0x43, 0xc6, 0x17, 0x52, 0xe0, 0x39, 0xb4, 0xf3, 0x20, - 0x70, 0xcf, 0xc8, 0x55, 0x42, 0xee, 0x9f, 0x56, 0x50, 0x2b, 0x30, 0x87, 0x76, 0x6e, 0xdf, 0x0e, - 0x56, 0x82, 0xb2, 0x83, 0xbf, 0x76, 0xbc, 0x06, 0xb7, 0xb0, 0x8b, 0x8b, 0x9e, 0x1f, 0x2b, 0xf5, - 0xcf, 0xaa, 0x70, 0x36, 0x7b, 0x33, 0xfc, 0x48, 0x08, 0xda, 0x27, 0x04, 0x7d, 0x25, 0x04, 0xbd, - 0xa5, 0xa4, 0xb6, 0x4f, 0x49, 0xed, 0x33, 0x25, 0xb5, 0xa7, 0xa3, 0xf2, 0x0b, 0x7a, 0xfe, 0x67, - 0x7e, 0xb3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xcf, 0x0b, 0x8b, 0x58, 0x02, 0x00, 0x00, + // 339 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0x4e, 0xf2, 0x40, + 0x10, 0xc7, 0xd9, 0x02, 0x1f, 0x74, 0x3e, 0x15, 0xdc, 0x78, 0x58, 0x9b, 0xb8, 0x21, 0x6b, 0x42, + 0x48, 0x34, 0x90, 0xe0, 0xc1, 0x23, 0x81, 0x78, 0x21, 0x26, 0x1e, 0xaa, 0x27, 0x6f, 0x95, 0xdd, + 0xc4, 0x4d, 0x80, 0x5d, 0xd9, 0xf6, 0x3d, 0x7c, 0x2c, 0x6f, 0x72, 0xf4, 0x68, 0xe0, 0x45, 0x4c, + 0xb7, 0x5b, 0x28, 0x48, 0xe2, 0xa5, 0x9d, 0x99, 0xff, 0xf4, 0x37, 0xff, 0x99, 0x14, 0x2e, 0x22, + 0x2d, 0x7b, 0x91, 0x96, 0x7a, 0xa1, 0x62, 0xd5, 0xb3, 0x4f, 0x93, 0xe6, 0x5d, 0x1b, 0xe2, 0xda, + 0x5c, 0x71, 0x11, 0x69, 0xc9, 0xee, 0xa1, 0x71, 0x97, 0xcc, 0xf4, 0xd3, 0x42, 0x88, 0x50, 0xbc, + 0x25, 0xc2, 0xc4, 0x98, 0x40, 0xcd, 0xe8, 0x68, 0x22, 0xc6, 0x9c, 0xa0, 0x16, 0xea, 0xf8, 0x61, + 0x9e, 0x62, 0x0a, 0xc0, 0xd5, 0x24, 0x99, 0x89, 0x79, 0x3c, 0xe6, 0xc4, 0xb3, 0x62, 0xa1, 0xc2, + 0xda, 0xd0, 0xdc, 0xc2, 0x8c, 0x56, 0x73, 0x23, 0x30, 0x86, 0x0a, 0x4f, 0x66, 0xda, 0xa1, 0x6c, + 0xcc, 0xae, 0xa0, 0x31, 0x9c, 0x4e, 0xd3, 0x36, 0xf3, 0xe7, 0x50, 0x76, 0x0d, 0x95, 0xb4, 0x13, + 0x9f, 0x80, 0x27, 0x73, 0xd1, 0x93, 0x1c, 0x9f, 0x41, 0xf5, 0x55, 0x44, 0xdc, 0x10, 0xaf, 0x55, + 0xee, 0xf8, 0x61, 0x96, 0xb0, 0x5b, 0x68, 0x6e, 0xd1, 0xce, 0xc2, 0x25, 0x54, 0xe3, 0xb4, 0x40, + 0x50, 0xab, 0xdc, 0xf9, 0xdf, 0x3f, 0xee, 0xba, 0xe5, 0xbb, 0xd6, 0x68, 0xa6, 0x31, 0x6c, 0x3f, + 0x7c, 0x4c, 0x87, 0xe6, 0xa6, 0x58, 0x0f, 0x4e, 0x0b, 0x35, 0x47, 0x0b, 0xa0, 0xee, 0xac, 0x65, + 0x40, 0x3f, 0xdc, 0xe4, 0xfd, 0x4f, 0x04, 0xb5, 0x07, 0xc5, 0xc5, 0x50, 0x4b, 0x3c, 0x80, 0x7a, + 0x7e, 0x0c, 0x4c, 0x36, 0x23, 0xf7, 0x8e, 0x1d, 0x9c, 0x1f, 0x50, 0xdc, 0xa0, 0x01, 0xd4, 0xf3, + 0x55, 0x0a, 0x80, 0xbd, 0xc3, 0x15, 0x00, 0xbf, 0xf6, 0x1e, 0x81, 0xbf, 0xb1, 0x8f, 0x77, 0xfa, + 0x76, 0xd6, 0x0c, 0x82, 0x43, 0x52, 0xc6, 0x18, 0xb5, 0x3f, 0x56, 0x14, 0x2d, 0x57, 0x14, 0x7d, + 0xaf, 0x28, 0x7a, 0x5f, 0xd3, 0xd2, 0x72, 0x4d, 0x4b, 0x5f, 0x6b, 0x5a, 0x7a, 0x3e, 0x2a, 0xfe, + 0x61, 0x2f, 0xff, 0xec, 0xeb, 0xe6, 0x27, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x75, 0x8c, 0xa4, 0x78, + 0x02, 0x00, 0x00, } func (m *DumpTreeRequest) Marshal() (dAtA []byte, err error) { diff --git a/node/api/apiproto/api_drpc.pb.go b/node/api/apiproto/api_drpc.pb.go index 6dcc8e3e..f12d2219 100644 --- a/node/api/apiproto/api_drpc.pb.go +++ b/node/api/apiproto/api_drpc.pb.go @@ -57,7 +57,7 @@ func (c *drpcNodeApiClient) DRPCConn() drpc.Conn { return c.cc } func (c *drpcNodeApiClient) DumpTree(ctx context.Context, in *DumpTreeRequest) (*DumpTreeResponse, error) { out := new(DumpTreeResponse) - err := c.cc.Invoke(ctx, "/api.NodeApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/nodeapi.NodeApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -66,7 +66,7 @@ func (c *drpcNodeApiClient) DumpTree(ctx context.Context, in *DumpTreeRequest) ( func (c *drpcNodeApiClient) AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) { out := new(AllTreesResponse) - err := c.cc.Invoke(ctx, "/api.NodeApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/nodeapi.NodeApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -75,7 +75,7 @@ func (c *drpcNodeApiClient) AllTrees(ctx context.Context, in *AllTreesRequest) ( func (c *drpcNodeApiClient) AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) { out := new(AllSpacesResponse) - err := c.cc.Invoke(ctx, "/api.NodeApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + err := c.cc.Invoke(ctx, "/nodeapi.NodeApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) if err != nil { return nil, err } @@ -109,7 +109,7 @@ func (DRPCNodeApiDescription) NumMethods() int { return 3 } func (DRPCNodeApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { switch n { case 0: - return "/api.NodeApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/nodeapi.NodeApi/DumpTree", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCNodeApiServer). DumpTree( @@ -118,7 +118,7 @@ func (DRPCNodeApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receive ) }, DRPCNodeApiServer.DumpTree, true case 1: - return "/api.NodeApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/nodeapi.NodeApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCNodeApiServer). AllTrees( @@ -127,7 +127,7 @@ func (DRPCNodeApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receive ) }, DRPCNodeApiServer.AllTrees, true case 2: - return "/api.NodeApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, + return "/nodeapi.NodeApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCNodeApiServer). AllSpaces( diff --git a/node/api/apiproto/protos/api.proto b/node/api/apiproto/protos/api.proto index f60fd440..7fea1f87 100644 --- a/node/api/apiproto/protos/api.proto +++ b/node/api/apiproto/protos/api.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package api; +package nodeapi; option go_package = "api/apiproto"; diff --git a/util/cmd/debug/api/client/service.go b/util/cmd/debug/api/client/service.go index d09046f3..07cb784e 100644 --- a/util/cmd/debug/api/client/service.go +++ b/util/cmd/debug/api/client/service.go @@ -13,15 +13,16 @@ const CName = "api.client" var log = logger.NewNamed(CName) type Service interface { + app.Component CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) DeriveSpace(ctx context.Context, ip string, request *apiproto.DeriveSpaceRequest) (resp *apiproto.DeriveSpaceResponse, err error) CreateDocument(ctx context.Context, ip string, request *apiproto.CreateDocumentRequest) (resp *apiproto.CreateDocumentResponse, err error) DeleteDocument(ctx context.Context, ip string, request *apiproto.DeleteDocumentRequest) (resp *apiproto.DeleteDocumentResponse, err error) AddText(ctx context.Context, ip string, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) + DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) 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) - app.Component } type service struct { @@ -81,6 +82,14 @@ func (s *service) AddText(ctx context.Context, ip string, request *apiproto.AddT return cl.AddText(ctx, request) } +func (s *service) DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.DumpTree(ctx, request) +} + func (s *service) AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { diff --git a/util/cmd/debug/api/node/service.go b/util/cmd/debug/api/node/service.go index 900b45f9..37a166eb 100644 --- a/util/cmd/debug/api/node/service.go +++ b/util/cmd/debug/api/node/service.go @@ -1,8 +1,10 @@ package node import ( + "context" "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/node/api/apiproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/drpcclient" ) @@ -12,6 +14,9 @@ var log = logger.NewNamed(CName) type Service interface { app.Component + DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) + 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) } type service struct { @@ -30,3 +35,27 @@ func (s *service) Init(a *app.App) (err error) { func (s *service) Name() (name string) { return CName } + +func (s *service) DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) { + cl, err := s.client.GetNode(ctx, ip) + if err != nil { + return + } + return cl.DumpTree(ctx, request) +} + +func (s *service) AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { + cl, err := s.client.GetNode(ctx, ip) + if err != nil { + return + } + return cl.AllTrees(ctx, request) +} + +func (s *service) AllSpaces(ctx context.Context, ip string, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) { + cl, err := s.client.GetNode(ctx, ip) + if err != nil { + return + } + return cl.AllSpaces(ctx, request) +} diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index 4f7fc740..57463efd 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -4,9 +4,10 @@ import ( "context" "errors" "fmt" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + nodeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/client" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" @@ -98,13 +99,12 @@ func (s *service) Call(server peers.Peer, cmdName string, params []string) (res } func (s *service) registerClientCommands() { - client := s.client s.clientCommands["create-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { if len(params) != 0 { err = ErrIncorrectParamsCount return } - resp, err := client.CreateSpace(context.Background(), server.Address, &apiproto.CreateSpaceRequest{}) + resp, err := s.client.CreateSpace(context.Background(), server.Address, &clientproto.CreateSpaceRequest{}) if err != nil { return } @@ -116,7 +116,7 @@ func (s *service) registerClientCommands() { err = ErrIncorrectParamsCount return } - resp, err := client.DeriveSpace(context.Background(), server.Address, &apiproto.DeriveSpaceRequest{}) + resp, err := s.client.DeriveSpace(context.Background(), server.Address, &clientproto.DeriveSpaceRequest{}) if err != nil { return } @@ -128,7 +128,7 @@ func (s *service) registerClientCommands() { err = ErrIncorrectParamsCount return } - resp, err := client.CreateDocument(context.Background(), server.Address, &apiproto.CreateDocumentRequest{ + resp, err := s.client.CreateDocument(context.Background(), server.Address, &clientproto.CreateDocumentRequest{ SpaceId: params[0], }) if err != nil { @@ -142,7 +142,7 @@ func (s *service) registerClientCommands() { err = ErrIncorrectParamsCount return } - _, err = client.DeleteDocument(context.Background(), server.Address, &apiproto.DeleteDocumentRequest{ + _, err = s.client.DeleteDocument(context.Background(), server.Address, &clientproto.DeleteDocumentRequest{ SpaceId: params[0], DocumentId: params[1], }) @@ -157,7 +157,7 @@ func (s *service) registerClientCommands() { err = ErrIncorrectParamsCount return } - resp, err := client.AddText(context.Background(), server.Address, &apiproto.AddTextRequest{ + resp, err := s.client.AddText(context.Background(), server.Address, &clientproto.AddTextRequest{ SpaceId: params[0], DocumentId: params[1], Text: params[2], @@ -173,7 +173,7 @@ func (s *service) registerClientCommands() { err = ErrIncorrectParamsCount return } - _, err = client.LoadSpace(context.Background(), server.Address, &apiproto.LoadSpaceRequest{ + _, err = s.client.LoadSpace(context.Background(), server.Address, &clientproto.LoadSpaceRequest{ SpaceId: params[0], }) if err != nil { @@ -187,7 +187,7 @@ func (s *service) registerClientCommands() { err = ErrIncorrectParamsCount return } - resp, err := client.AllTrees(context.Background(), server.Address, &apiproto.AllTreesRequest{ + resp, err := s.client.AllTrees(context.Background(), server.Address, &clientproto.AllTreesRequest{ SpaceId: params[0], }) if err != nil { @@ -209,12 +209,27 @@ func (s *service) registerClientCommands() { } return }} + s.clientCommands["dump-tree"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 2 { + err = ErrIncorrectParamsCount + return + } + resp, err := s.client.DumpTree(context.Background(), server.Address, &clientproto.DumpTreeRequest{ + SpaceId: params[0], + DocumentId: params[1], + }) + if err != nil { + return + } + res = resp.Dump + return + }} s.clientCommands["all-spaces"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { if len(params) != 0 { err = ErrIncorrectParamsCount return } - resp, err := client.AllSpaces(context.Background(), server.Address, &apiproto.AllSpacesRequest{}) + resp, err := s.client.AllSpaces(context.Background(), server.Address, &clientproto.AllSpacesRequest{}) if err != nil { return } @@ -229,6 +244,65 @@ func (s *service) registerClientCommands() { } func (s *service) registerNodeCommands() { + s.nodeCommands["all-trees"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 1 { + err = ErrIncorrectParamsCount + return + } + resp, err := s.node.AllTrees(context.Background(), server.Address, &nodeproto.AllTreesRequest{ + SpaceId: params[0], + }) + if err != nil { + return + } + for treeIdx, tree := range resp.Trees { + treeStr := tree.Id + ":[" + for headIdx, head := range tree.Heads { + treeStr += head + if headIdx != len(tree.Heads)-1 { + treeStr += "," + } + } + treeStr += "]" + res += treeStr + if treeIdx != len(resp.Trees)-1 { + res += "\n" + } + } + return + }} + s.nodeCommands["dump-tree"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 2 { + err = ErrIncorrectParamsCount + return + } + resp, err := s.node.DumpTree(context.Background(), server.Address, &nodeproto.DumpTreeRequest{ + SpaceId: params[0], + DocumentId: params[1], + }) + if err != nil { + return + } + res = resp.Dump + return + }} + s.nodeCommands["all-spaces"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 0 { + err = ErrIncorrectParamsCount + return + } + resp, err := s.node.AllSpaces(context.Background(), server.Address, &nodeproto.AllSpacesRequest{}) + if err != nil { + return + } + for treeIdx, spaceId := range resp.SpaceIds { + res += spaceId + if treeIdx != len(resp.SpaceIds)-1 { + res += "\n" + } + } + return + }} } func (s *service) registerScripts() { @@ -251,7 +325,7 @@ func (s *service) registerScripts() { } for i := 0; i < last; i++ { - _, err := s.client.AddText(context.Background(), peer.Address, &apiproto.AddTextRequest{ + _, err := s.client.AddText(context.Background(), peer.Address, &clientproto.AddTextRequest{ SpaceId: params[1], DocumentId: params[2], Text: params[3], diff --git a/util/cmd/debug/drpcclient/service.go b/util/cmd/debug/drpcclient/service.go index 2d4fb4bf..2f59cfd0 100644 --- a/util/cmd/debug/drpcclient/service.go +++ b/util/cmd/debug/drpcclient/service.go @@ -2,18 +2,19 @@ package drpcclient import ( "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" "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/pkg/ocache" + nodeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" "net" "storj.io/drpc/drpcconn" "time" ) type Service interface { - GetClient(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) - GetNode(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) + GetClient(ctx context.Context, ip string) (clientproto.DRPCClientApiClient, error) + GetNode(ctx context.Context, ip string) (nodeproto.DRPCNodeApiClient, error) app.ComponentRunnable } @@ -54,7 +55,7 @@ func (s *service) Run(ctx context.Context) (err error) { return nil } -func (s *service) GetClient(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) { +func (s *service) GetClient(ctx context.Context, ip string) (clientproto.DRPCClientApiClient, error) { v, err := s.cache.Get(ctx, ip) if err != nil { return nil, err @@ -63,13 +64,13 @@ func (s *service) GetClient(ctx context.Context, ip string) (apiproto.DRPCClient select { case <-conn.Closed(): default: - return apiproto.NewDRPCClientApiClient(conn), nil + return clientproto.NewDRPCClientApiClient(conn), nil } s.cache.Remove(ip) return s.GetClient(ctx, ip) } -func (s *service) GetNode(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) { +func (s *service) GetNode(ctx context.Context, ip string) (nodeproto.DRPCNodeApiClient, error) { v, err := s.cache.Get(ctx, ip) if err != nil { return nil, err @@ -78,11 +79,10 @@ func (s *service) GetNode(ctx context.Context, ip string) (apiproto.DRPCClientAp select { case <-conn.Closed(): default: - panic("should return node") - return apiproto.NewDRPCClientApiClient(conn), nil + return nodeproto.NewDRPCNodeApiClient(conn), nil } s.cache.Remove(ip) - return s.GetClient(ctx, ip) + return s.GetNode(ctx, ip) } func (s *service) Close(ctx context.Context) (err error) { diff --git a/util/cmd/debug/peers/peers.go b/util/cmd/debug/peers/peers.go index 9b0053c8..92992cf7 100644 --- a/util/cmd/debug/peers/peers.go +++ b/util/cmd/debug/peers/peers.go @@ -43,6 +43,10 @@ func (s *service) Init(a *app.App) (err error) { PeerType: PeerTypeClient, Address: "127.0.0.1:8091", } + s.peerMap["node1"] = Peer{ + PeerType: PeerTypeNode, + Address: "127.0.0.1:8080", + } return } From 8b86ad29186ba64bc2d65e5f1532a295c25cc043 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sat, 3 Dec 2022 13:23:14 +0100 Subject: [PATCH 15/32] Check space dir existence before creating new --- node/storage/spacestorage.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/node/storage/spacestorage.go b/node/storage/spacestorage.go index bf51c18b..15a88cf0 100644 --- a/node/storage/spacestorage.go +++ b/node/storage/spacestorage.go @@ -8,6 +8,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "go.uber.org/zap" + "os" "path" "time" ) @@ -30,6 +31,11 @@ type spaceStorage struct { func newSpaceStorage(rootPath string, spaceId string) (store spacestorage.SpaceStorage, err error) { log.With(zap.String("id", spaceId)).Debug("space storage opening with new") dbPath := path.Join(rootPath, spaceId) + if _, err = os.Stat(dbPath); err != nil { + err = spacestorage.ErrSpaceStorageMissing + return + } + objDb, err := pogreb.Open(dbPath, defPogrebOptions) if err != nil { return From eb7a6fb9dc3cc1df3cc863a5661ea0e55cac85a2 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sat, 3 Dec 2022 14:43:18 +0100 Subject: [PATCH 16/32] WIP add snapshot methods to debug api --- client/api/apiproto/api.pb.go | 615 +++++++++++++++++-- client/api/apiproto/api_drpc.pb.go | 46 +- client/api/apiproto/protos/api.proto | 13 + client/api/controller.go | 138 ----- client/api/rpchandler.go | 65 +- client/api/service.go | 20 +- client/document/service.go | 15 +- client/document/textdocument/textdocument.go | 7 +- 8 files changed, 717 insertions(+), 202 deletions(-) delete mode 100644 client/api/controller.go diff --git a/client/api/apiproto/api.pb.go b/client/api/apiproto/api.pb.go index 42b7ccc6..e0fd415f 100644 --- a/client/api/apiproto/api.pb.go +++ b/client/api/apiproto/api.pb.go @@ -362,6 +362,7 @@ type AddTextRequest struct { SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` DocumentId string `protobuf:"bytes,2,opt,name=documentId,proto3" json:"documentId,omitempty"` Text string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"` + IsSnapshot bool `protobuf:"varint,4,opt,name=isSnapshot,proto3" json:"isSnapshot,omitempty"` } func (m *AddTextRequest) Reset() { *m = AddTextRequest{} } @@ -418,9 +419,17 @@ func (m *AddTextRequest) GetText() string { return "" } +func (m *AddTextRequest) GetIsSnapshot() bool { + if m != nil { + return m.IsSnapshot + } + return false +} + type AddTextResponse struct { DocumentId string `protobuf:"bytes,1,opt,name=documentId,proto3" json:"documentId,omitempty"` HeadId string `protobuf:"bytes,2,opt,name=headId,proto3" json:"headId,omitempty"` + RootId string `protobuf:"bytes,3,opt,name=rootId,proto3" json:"rootId,omitempty"` } func (m *AddTextResponse) Reset() { *m = AddTextResponse{} } @@ -470,6 +479,13 @@ func (m *AddTextResponse) GetHeadId() string { return "" } +func (m *AddTextResponse) GetRootId() string { + if m != nil { + return m.RootId + } + return "" +} + type DumpTreeRequest struct { SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` DocumentId string `protobuf:"bytes,2,opt,name=documentId,proto3" json:"documentId,omitempty"` @@ -866,6 +882,110 @@ func (m *LoadSpaceResponse) XXX_DiscardUnknown() { var xxx_messageInfo_LoadSpaceResponse proto.InternalMessageInfo +type TreeParamsRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + DocumentId string `protobuf:"bytes,2,opt,name=documentId,proto3" json:"documentId,omitempty"` +} + +func (m *TreeParamsRequest) Reset() { *m = TreeParamsRequest{} } +func (m *TreeParamsRequest) String() string { return proto.CompactTextString(m) } +func (*TreeParamsRequest) ProtoMessage() {} +func (*TreeParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{19} +} +func (m *TreeParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TreeParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TreeParamsRequest.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 *TreeParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_TreeParamsRequest.Merge(m, src) +} +func (m *TreeParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *TreeParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_TreeParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_TreeParamsRequest proto.InternalMessageInfo + +func (m *TreeParamsRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +func (m *TreeParamsRequest) GetDocumentId() string { + if m != nil { + return m.DocumentId + } + return "" +} + +type TreeParamsResponse struct { + RootId string `protobuf:"bytes,1,opt,name=rootId,proto3" json:"rootId,omitempty"` + HeadIds []string `protobuf:"bytes,2,rep,name=headIds,proto3" json:"headIds,omitempty"` +} + +func (m *TreeParamsResponse) Reset() { *m = TreeParamsResponse{} } +func (m *TreeParamsResponse) String() string { return proto.CompactTextString(m) } +func (*TreeParamsResponse) ProtoMessage() {} +func (*TreeParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{20} +} +func (m *TreeParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TreeParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TreeParamsResponse.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 *TreeParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_TreeParamsResponse.Merge(m, src) +} +func (m *TreeParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *TreeParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_TreeParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_TreeParamsResponse proto.InternalMessageInfo + +func (m *TreeParamsResponse) GetRootId() string { + if m != nil { + return m.RootId + } + return "" +} + +func (m *TreeParamsResponse) GetHeadIds() []string { + if m != nil { + return m.HeadIds + } + return nil +} + func init() { proto.RegisterType((*CreateSpaceRequest)(nil), "clientapi.CreateSpaceRequest") proto.RegisterType((*CreateSpaceResponse)(nil), "clientapi.CreateSpaceResponse") @@ -886,47 +1006,54 @@ func init() { proto.RegisterType((*AllSpacesResponse)(nil), "clientapi.AllSpacesResponse") proto.RegisterType((*LoadSpaceRequest)(nil), "clientapi.LoadSpaceRequest") proto.RegisterType((*LoadSpaceResponse)(nil), "clientapi.LoadSpaceResponse") + proto.RegisterType((*TreeParamsRequest)(nil), "clientapi.TreeParamsRequest") + proto.RegisterType((*TreeParamsResponse)(nil), "clientapi.TreeParamsResponse") } func init() { proto.RegisterFile("api/apiproto/protos/api.proto", fileDescriptor_fc31080c27db9707) } var fileDescriptor_fc31080c27db9707 = []byte{ - // 553 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcb, 0x6e, 0xd3, 0x40, - 0x14, 0x86, 0xe3, 0x5c, 0xda, 0xfa, 0x04, 0x25, 0xe9, 0x69, 0x1b, 0x19, 0x43, 0xad, 0x30, 0x52, - 0xab, 0x48, 0x54, 0x89, 0x28, 0x2b, 0x76, 0x84, 0x44, 0x48, 0x11, 0xd9, 0x10, 0xca, 0x86, 0x05, - 0x92, 0xc9, 0x8c, 0x84, 0xa5, 0x5c, 0x86, 0xd8, 0x41, 0x7d, 0x0c, 0x5e, 0x85, 0xb7, 0x60, 0xd9, - 0x25, 0x4b, 0x94, 0xbc, 0x08, 0xf2, 0x78, 0x6c, 0xcf, 0xd8, 0x4e, 0x11, 0xea, 0x26, 0xf1, 0x9c, - 0xcb, 0x77, 0xce, 0xc4, 0xff, 0xaf, 0xc0, 0xb9, 0xcb, 0xbd, 0xbe, 0xcb, 0x3d, 0xbe, 0x5e, 0x05, - 0xab, 0xbe, 0xf8, 0xf4, 0xc3, 0x73, 0x4f, 0x3c, 0xa2, 0x39, 0x9b, 0x7b, 0x6c, 0x19, 0xb8, 0xdc, - 0x23, 0xa7, 0x80, 0xc3, 0x35, 0x73, 0x03, 0xf6, 0x81, 0xbb, 0x33, 0x36, 0x65, 0xdf, 0x36, 0xcc, - 0x0f, 0xc8, 0x05, 0x9c, 0x68, 0x51, 0x9f, 0xaf, 0x96, 0x3e, 0xc3, 0x06, 0x94, 0x3d, 0x6a, 0x19, - 0x1d, 0xa3, 0x6b, 0x4e, 0xcb, 0x1e, 0x0d, 0x9b, 0x47, 0x6c, 0xed, 0x7d, 0xcf, 0x35, 0x6b, 0xd1, - 0x3d, 0xcd, 0x2f, 0xe0, 0x2c, 0x9a, 0x31, 0x5a, 0xcd, 0x36, 0x0b, 0xb6, 0x0c, 0x64, 0x3f, 0x5a, - 0x70, 0xe8, 0x87, 0x9d, 0xe3, 0xb8, 0x3a, 0x3e, 0x92, 0x2e, 0xb4, 0xb3, 0x2d, 0x7b, 0xe0, 0xef, - 0xe1, 0x6c, 0xc4, 0xe6, 0xec, 0x3f, 0xe0, 0xe8, 0x00, 0x50, 0x59, 0x3c, 0xa6, 0x56, 0x59, 0x24, - 0x95, 0x08, 0xb1, 0xa0, 0x9d, 0x45, 0x46, 0xc3, 0xc9, 0x67, 0x68, 0x0c, 0x28, 0xbd, 0x61, 0xb7, - 0x0f, 0x9f, 0x82, 0x08, 0xd5, 0x80, 0xdd, 0x06, 0x56, 0x45, 0x64, 0xc4, 0x33, 0x19, 0x43, 0x33, - 0xe1, 0xcb, 0xfb, 0xea, 0x18, 0x23, 0x87, 0x69, 0xc3, 0xc1, 0x57, 0xe6, 0xd2, 0x64, 0x84, 0x3c, - 0x91, 0x77, 0xd0, 0x1c, 0x6d, 0x16, 0xfc, 0x66, 0xcd, 0xd8, 0xc3, 0x7f, 0x91, 0x4b, 0x68, 0xa5, - 0x30, 0xb9, 0x18, 0x42, 0x95, 0x6e, 0x16, 0x5c, 0xa2, 0xc4, 0x33, 0x79, 0x0e, 0xcd, 0xc1, 0x7c, - 0x1e, 0x96, 0xf9, 0xff, 0x7e, 0xc7, 0x57, 0x50, 0x0d, 0x2b, 0xb3, 0x6f, 0x14, 0x4f, 0xa1, 0x16, - 0xde, 0xc1, 0xb7, 0xca, 0x9d, 0x4a, 0xd7, 0x9c, 0x46, 0x07, 0xf2, 0x0a, 0x5a, 0x29, 0x5a, 0xae, - 0x70, 0x01, 0xb5, 0x20, 0x0c, 0x58, 0x46, 0xa7, 0xd2, 0xad, 0x5f, 0x37, 0x7b, 0x89, 0xda, 0x7b, - 0x62, 0xd5, 0x28, 0x4b, 0x50, 0xb4, 0x0a, 0x8d, 0xc6, 0x6b, 0x91, 0x3e, 0x1c, 0x2b, 0x31, 0xc9, - 0xb3, 0xe1, 0x48, 0x2e, 0x17, 0x21, 0xcd, 0x69, 0x72, 0x26, 0x57, 0xd0, 0x9a, 0xac, 0x5c, 0xaa, - 0xea, 0xff, 0x9e, 0xbb, 0x9d, 0xc0, 0xb1, 0x52, 0x1d, 0xe1, 0xaf, 0x7f, 0xd6, 0xc0, 0x1c, 0x8a, - 0x0d, 0x07, 0xdc, 0xc3, 0x09, 0xd4, 0x15, 0xe7, 0xe1, 0xb9, 0xb2, 0x7c, 0xde, 0xa7, 0xb6, 0xb3, - 0x2f, 0x2d, 0x57, 0x9f, 0x40, 0x5d, 0xb1, 0xa2, 0x46, 0xcb, 0x1b, 0x57, 0xa3, 0x15, 0x39, 0xf8, - 0x23, 0x34, 0x74, 0xfb, 0x61, 0x27, 0x37, 0x3f, 0xe3, 0x37, 0xfb, 0xd9, 0x3d, 0x15, 0x29, 0x56, - 0x37, 0x96, 0x86, 0x2d, 0xb4, 0xb1, 0x86, 0x2d, 0x76, 0x25, 0xbe, 0x86, 0x43, 0xe9, 0x1a, 0x7c, - 0xac, 0x54, 0xeb, 0x4e, 0xb5, 0xed, 0xa2, 0x94, 0x24, 0x0c, 0xe1, 0x28, 0xd6, 0x37, 0xaa, 0x75, - 0x19, 0x07, 0xd9, 0x4f, 0x0a, 0x73, 0x29, 0x24, 0x56, 0xa8, 0x06, 0xc9, 0x38, 0x42, 0x83, 0xe4, - 0x24, 0xfd, 0x16, 0xcc, 0x44, 0x97, 0x98, 0xa9, 0xd4, 0x14, 0x6c, 0x3f, 0x2d, 0x4e, 0xa6, 0x9c, - 0x44, 0x80, 0x1a, 0x27, 0x2b, 0x62, 0x8d, 0x93, 0xd3, 0xec, 0x9b, 0xcb, 0x5f, 0x5b, 0xc7, 0xb8, - 0xdb, 0x3a, 0xc6, 0x9f, 0xad, 0x63, 0xfc, 0xd8, 0x39, 0xa5, 0xbb, 0x9d, 0x53, 0xfa, 0xbd, 0x73, - 0x4a, 0x9f, 0x1e, 0xa9, 0xff, 0x3c, 0x5f, 0x0e, 0xc4, 0xd7, 0xcb, 0xbf, 0x01, 0x00, 0x00, 0xff, - 0xff, 0x5d, 0x2e, 0xfd, 0x34, 0x90, 0x06, 0x00, 0x00, + // 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, } func (m *CreateSpaceRequest) Marshal() (dAtA []byte, err error) { @@ -1175,6 +1302,16 @@ func (m *AddTextRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.IsSnapshot { + i-- + if m.IsSnapshot { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } if len(m.Text) > 0 { i -= len(m.Text) copy(dAtA[i:], m.Text) @@ -1219,6 +1356,13 @@ func (m *AddTextResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.RootId) > 0 { + i -= len(m.RootId) + copy(dAtA[i:], m.RootId) + i = encodeVarintApi(dAtA, i, uint64(len(m.RootId))) + i-- + dAtA[i] = 0x1a + } if len(m.HeadId) > 0 { i -= len(m.HeadId) copy(dAtA[i:], m.HeadId) @@ -1517,6 +1661,82 @@ func (m *LoadSpaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *TreeParamsRequest) 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 *TreeParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TreeParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DocumentId) > 0 { + i -= len(m.DocumentId) + copy(dAtA[i:], m.DocumentId) + i = encodeVarintApi(dAtA, i, uint64(len(m.DocumentId))) + i-- + dAtA[i] = 0x12 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TreeParamsResponse) 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 *TreeParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TreeParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HeadIds) > 0 { + for iNdEx := len(m.HeadIds) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.HeadIds[iNdEx]) + copy(dAtA[i:], m.HeadIds[iNdEx]) + i = encodeVarintApi(dAtA, i, uint64(len(m.HeadIds[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.RootId) > 0 { + i -= len(m.RootId) + copy(dAtA[i:], m.RootId) + i = encodeVarintApi(dAtA, i, uint64(len(m.RootId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintApi(dAtA []byte, offset int, v uint64) int { offset -= sovApi(v) base := offset @@ -1642,6 +1862,9 @@ func (m *AddTextRequest) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if m.IsSnapshot { + n += 2 + } return n } @@ -1659,6 +1882,10 @@ func (m *AddTextResponse) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + l = len(m.RootId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } return n } @@ -1785,6 +2012,42 @@ func (m *LoadSpaceResponse) Size() (n int) { return n } +func (m *TreeParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.DocumentId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *TreeParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.RootId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if len(m.HeadIds) > 0 { + for _, s := range m.HeadIds { + l = len(s) + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + func sovApi(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -2508,6 +2771,26 @@ func (m *AddTextRequest) Unmarshal(dAtA []byte) error { } m.Text = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsSnapshot", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsSnapshot = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -2622,6 +2905,38 @@ func (m *AddTextResponse) Unmarshal(dAtA []byte) error { } m.HeadId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RootId", 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.RootId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -3383,6 +3698,234 @@ func (m *LoadSpaceResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *TreeParamsRequest) 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: TreeParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TreeParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DocumentId", 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.DocumentId = 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 *TreeParamsResponse) 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: TreeParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TreeParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RootId", 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.RootId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HeadIds", 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.HeadIds = append(m.HeadIds, 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 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 f1e6be1f..adfe74ac 100644 --- a/client/api/apiproto/api_drpc.pb.go +++ b/client/api/apiproto/api_drpc.pb.go @@ -46,6 +46,7 @@ type DRPCClientApiClient interface { DeleteDocument(ctx context.Context, in *DeleteDocumentRequest) (*DeleteDocumentResponse, error) AddText(ctx context.Context, in *AddTextRequest) (*AddTextResponse, error) DumpTree(ctx context.Context, in *DumpTreeRequest) (*DumpTreeResponse, error) + TreeParams(ctx context.Context, in *TreeParamsRequest) (*TreeParamsResponse, error) AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) LoadSpace(ctx context.Context, in *LoadSpaceRequest) (*LoadSpaceResponse, error) @@ -115,6 +116,15 @@ func (c *drpcClientApiClient) DumpTree(ctx context.Context, in *DumpTreeRequest) return out, nil } +func (c *drpcClientApiClient) TreeParams(ctx context.Context, in *TreeParamsRequest) (*TreeParamsResponse, error) { + out := new(TreeParamsResponse) + err := c.cc.Invoke(ctx, "/clientapi.ClientApi/TreeParams", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + func (c *drpcClientApiClient) AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) { out := new(AllTreesResponse) err := c.cc.Invoke(ctx, "/clientapi.ClientApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) @@ -149,6 +159,7 @@ type DRPCClientApiServer interface { DeleteDocument(context.Context, *DeleteDocumentRequest) (*DeleteDocumentResponse, error) AddText(context.Context, *AddTextRequest) (*AddTextResponse, error) DumpTree(context.Context, *DumpTreeRequest) (*DumpTreeResponse, error) + TreeParams(context.Context, *TreeParamsRequest) (*TreeParamsResponse, error) AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) AllSpaces(context.Context, *AllSpacesRequest) (*AllSpacesResponse, error) LoadSpace(context.Context, *LoadSpaceRequest) (*LoadSpaceResponse, error) @@ -180,6 +191,10 @@ func (s *DRPCClientApiUnimplementedServer) DumpTree(context.Context, *DumpTreeRe return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) } +func (s *DRPCClientApiUnimplementedServer) TreeParams(context.Context, *TreeParamsRequest) (*TreeParamsResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + func (s *DRPCClientApiUnimplementedServer) AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) { return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) } @@ -194,7 +209,7 @@ func (s *DRPCClientApiUnimplementedServer) LoadSpace(context.Context, *LoadSpace type DRPCClientApiDescription struct{} -func (DRPCClientApiDescription) NumMethods() int { return 9 } +func (DRPCClientApiDescription) NumMethods() int { return 10 } func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { switch n { @@ -253,6 +268,15 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei ) }, DRPCClientApiServer.DumpTree, true case 6: + return "/clientapi.ClientApi/TreeParams", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCClientApiServer). + TreeParams( + ctx, + in1.(*TreeParamsRequest), + ) + }, DRPCClientApiServer.TreeParams, true + case 7: return "/clientapi.ClientApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). @@ -261,7 +285,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei in1.(*AllTreesRequest), ) }, DRPCClientApiServer.AllTrees, true - case 7: + case 8: return "/clientapi.ClientApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). @@ -270,7 +294,7 @@ func (DRPCClientApiDescription) Method(n int) (string, drpc.Encoding, drpc.Recei in1.(*AllSpacesRequest), ) }, DRPCClientApiServer.AllSpaces, true - case 8: + case 9: return "/clientapi.ClientApi/LoadSpace", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCClientApiServer). @@ -384,6 +408,22 @@ func (x *drpcClientApi_DumpTreeStream) SendAndClose(m *DumpTreeResponse) error { return x.CloseSend() } +type DRPCClientApi_TreeParamsStream interface { + drpc.Stream + SendAndClose(*TreeParamsResponse) error +} + +type drpcClientApi_TreeParamsStream struct { + drpc.Stream +} + +func (x *drpcClientApi_TreeParamsStream) SendAndClose(m *TreeParamsResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + type DRPCClientApi_AllTreesStream interface { drpc.Stream SendAndClose(*AllTreesResponse) error diff --git a/client/api/apiproto/protos/api.proto b/client/api/apiproto/protos/api.proto index ab454bcf..0c5b7256 100644 --- a/client/api/apiproto/protos/api.proto +++ b/client/api/apiproto/protos/api.proto @@ -10,6 +10,7 @@ service ClientApi { rpc DeleteDocument(DeleteDocumentRequest) returns(DeleteDocumentResponse); rpc AddText(AddTextRequest) returns(AddTextResponse); rpc DumpTree(DumpTreeRequest) returns(DumpTreeResponse); + rpc TreeParams(TreeParamsRequest) returns(TreeParamsResponse); rpc AllTrees(AllTreesRequest) returns(AllTreesResponse); rpc AllSpaces(AllSpacesRequest) returns(AllSpacesResponse); rpc LoadSpace(LoadSpaceRequest) returns(LoadSpaceResponse); @@ -49,11 +50,13 @@ message AddTextRequest { string spaceId = 1; string documentId = 2; string text = 3; + bool isSnapshot = 4; } message AddTextResponse { string documentId = 1; string headId = 2; + string rootId = 3; } message DumpTreeRequest { @@ -90,4 +93,14 @@ message LoadSpaceRequest { } message LoadSpaceResponse { +} + +message TreeParamsRequest { + string spaceId = 1; + string documentId = 2; +} + +message TreeParamsResponse { + string rootId = 1; + repeated string headIds = 2; } \ No newline at end of file diff --git a/client/api/controller.go b/client/api/controller.go deleted file mode 100644 index 94f7a690..00000000 --- a/client/api/controller.go +++ /dev/null @@ -1,138 +0,0 @@ -package api - -import ( - "context" - "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" - "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/commonspace" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/diffservice" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" - "math/rand" -) - -type Controller interface { - // DeriveSpace derives the space from current account - DeriveSpace() (id string, err error) - // CreateSpace creates new space with random data - CreateSpace() (id string, err error) - // AllSpaceIds returns ids of all spaces - AllSpaceIds() (ids []string, err error) - // LoadSpace asks node to load a particular space - LoadSpace(id string) (err error) - - // CreateDocument creates new document in space - CreateDocument(spaceId string) (id string, err error) - // DeleteDocument deletes a document from space - DeleteDocument(spaceId, documentId string) (err error) - // AllDocumentIds gets all ids of documents in space - AllDocumentIds(spaceId string) (ids []string, err error) - // AllDocumentHeads gets heads of all documents - AllDocumentHeads(spaceId string) (ids []diffservice.TreeHeads, err error) - // AddText adds text to space document - AddText(spaceId, documentId, text string) (head string, err error) - // DumpDocumentTree dumps the tree data into string - DumpDocumentTree(spaceId, documentId string) (dump string, err error) - - ValidInvites(spaceId string) (invites []string, err error) - GenerateInvite(spaceId string) (invite string, err error) - JoinSpace(invite string) (err error) -} - -type controller struct { - spaceService clientspace.Service - storageService storage.ClientStorage - docService document.Service - account account.Service -} - -func newController(spaceService clientspace.Service, - storageService storage.ClientStorage, - docService document.Service, - account account.Service) Controller { - return &controller{ - spaceService: spaceService, - storageService: storageService, - docService: docService, - account: account, - } -} - -func (c *controller) DeriveSpace() (id string, err error) { - sp, err := c.spaceService.DeriveSpace(context.Background(), commonspace.SpaceDerivePayload{ - SigningKey: c.account.Account().SignKey, - EncryptionKey: c.account.Account().EncKey, - }) - if err != nil { - return - } - id = sp.Id() - return -} - -func (c *controller) CreateSpace() (id string, err error) { - key, err := symmetric.NewRandom() - if err != nil { - return - } - sp, err := c.spaceService.CreateSpace(context.Background(), commonspace.SpaceCreatePayload{ - SigningKey: c.account.Account().SignKey, - EncryptionKey: c.account.Account().EncKey, - ReadKey: key.Bytes(), - ReplicationKey: rand.Uint64(), - }) - if err != nil { - return - } - id = sp.Id() - return -} - -func (c *controller) AllSpaceIds() (ids []string, err error) { - return c.storageService.AllSpaceIds() -} - -func (c *controller) LoadSpace(id string) (err error) { - _, err = c.spaceService.GetSpace(context.Background(), id) - return -} - -func (c *controller) CreateDocument(spaceId string) (id string, err error) { - return c.docService.CreateDocument(spaceId) -} - -func (c *controller) DeleteDocument(spaceId, documentId string) (err error) { - return c.docService.DeleteDocument(spaceId, documentId) -} - -func (c *controller) AllDocumentIds(spaceId string) (ids []string, err error) { - return c.docService.AllDocumentIds(spaceId) -} - -func (c *controller) AllDocumentHeads(spaceId string) (ids []diffservice.TreeHeads, err error) { - return c.docService.AllDocumentHeads(spaceId) -} - -func (c *controller) AddText(spaceId, documentId, text string) (head string, err error) { - return c.docService.AddText(spaceId, documentId, text) -} - -func (c *controller) DumpDocumentTree(spaceId, documentId string) (dump string, err error) { - return c.docService.DumpDocumentTree(spaceId, documentId) -} - -func (c *controller) ValidInvites(spaceId string) (invites []string, err error) { - //TODO implement me - panic("implement me") -} - -func (c *controller) GenerateInvite(spaceId string) (invite string, err error) { - //TODO implement me - panic("implement me") -} - -func (c *controller) JoinSpace(invite string) (err error) { - //TODO implement me - panic("implement me") -} diff --git a/client/api/rpchandler.go b/client/api/rpchandler.go index a0f4d4aa..e4ee55a7 100644 --- a/client/api/rpchandler.go +++ b/client/api/rpchandler.go @@ -3,14 +3,24 @@ package api import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" + "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/commonspace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric" + "math/rand" ) type rpcHandler struct { - controller Controller + spaceService clientspace.Service + storageService storage.ClientStorage + docService document.Service + account account.Service } func (r *rpcHandler) LoadSpace(ctx context.Context, request *apiproto.LoadSpaceRequest) (resp *apiproto.LoadSpaceResponse, err error) { - err = r.controller.LoadSpace(request.SpaceId) + _, err = r.spaceService.GetSpace(context.Background(), request.SpaceId) if err != nil { return } @@ -19,7 +29,20 @@ func (r *rpcHandler) LoadSpace(ctx context.Context, request *apiproto.LoadSpaceR } func (r *rpcHandler) CreateSpace(ctx context.Context, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) { - id, err := r.controller.CreateSpace() + key, err := symmetric.NewRandom() + if err != nil { + return + } + sp, err := r.spaceService.CreateSpace(context.Background(), commonspace.SpaceCreatePayload{ + SigningKey: r.account.Account().SignKey, + EncryptionKey: r.account.Account().EncKey, + ReadKey: key.Bytes(), + ReplicationKey: rand.Uint64(), + }) + if err != nil { + return + } + id := sp.Id() if err != nil { return } @@ -28,7 +51,14 @@ func (r *rpcHandler) CreateSpace(ctx context.Context, request *apiproto.CreateSp } func (r *rpcHandler) DeriveSpace(ctx context.Context, request *apiproto.DeriveSpaceRequest) (resp *apiproto.DeriveSpaceResponse, err error) { - id, err := r.controller.DeriveSpace() + sp, err := r.spaceService.DeriveSpace(context.Background(), commonspace.SpaceDerivePayload{ + SigningKey: r.account.Account().SignKey, + EncryptionKey: r.account.Account().EncKey, + }) + if err != nil { + return + } + id := sp.Id() if err != nil { return } @@ -37,7 +67,7 @@ func (r *rpcHandler) DeriveSpace(ctx context.Context, request *apiproto.DeriveSp } func (r *rpcHandler) CreateDocument(ctx context.Context, request *apiproto.CreateDocumentRequest) (resp *apiproto.CreateDocumentResponse, err error) { - id, err := r.controller.CreateDocument(request.SpaceId) + id, err := r.docService.CreateDocument(request.SpaceId) if err != nil { return } @@ -46,7 +76,7 @@ func (r *rpcHandler) CreateDocument(ctx context.Context, request *apiproto.Creat } func (r *rpcHandler) DeleteDocument(ctx context.Context, request *apiproto.DeleteDocumentRequest) (resp *apiproto.DeleteDocumentResponse, err error) { - err = r.controller.DeleteDocument(request.SpaceId, request.DocumentId) + err = r.docService.DeleteDocument(request.SpaceId, request.DocumentId) if err != nil { return } @@ -55,19 +85,20 @@ func (r *rpcHandler) DeleteDocument(ctx context.Context, request *apiproto.Delet } func (r *rpcHandler) AddText(ctx context.Context, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) { - head, err := r.controller.AddText(request.SpaceId, request.DocumentId, request.Text) + root, head, err := r.docService.AddText(request.SpaceId, request.DocumentId, request.Text, request.IsSnapshot) if err != nil { return } resp = &apiproto.AddTextResponse{ DocumentId: request.DocumentId, HeadId: head, + RootId: root, } return } func (r *rpcHandler) DumpTree(ctx context.Context, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) { - dump, err := r.controller.DumpDocumentTree(request.SpaceId, request.DocumentId) + dump, err := r.docService.DumpDocumentTree(request.SpaceId, request.DocumentId) if err != nil { return } @@ -78,7 +109,7 @@ func (r *rpcHandler) DumpTree(ctx context.Context, request *apiproto.DumpTreeReq } func (r *rpcHandler) AllTrees(ctx context.Context, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { - heads, err := r.controller.AllDocumentHeads(request.SpaceId) + heads, err := r.docService.AllDocumentHeads(request.SpaceId) if err != nil { return } @@ -94,10 +125,24 @@ func (r *rpcHandler) AllTrees(ctx context.Context, request *apiproto.AllTreesReq } func (r *rpcHandler) AllSpaces(ctx context.Context, request *apiproto.AllSpacesRequest) (resp *apiproto.AllSpacesResponse, err error) { - ids, err := r.controller.AllSpaceIds() + ids, err := r.storageService.AllSpaceIds() if err != nil { return } resp = &apiproto.AllSpacesResponse{SpaceIds: ids} return } + +func (r *rpcHandler) TreeParams(ctx context.Context, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) { + root, heads, err := r.docService.TreeParams(request.SpaceId, request.DocumentId) + if err != nil { + return + } + resp = &apiproto.TreeParamsResponse{ + RootId: root, + HeadIds: heads, + } + return +} + +//TreeParams(spaceId, documentId string) (root string, head []string, err error) diff --git a/client/api/service.go b/client/api/service.go index 425fefee..0c09a39f 100644 --- a/client/api/service.go +++ b/client/api/service.go @@ -30,18 +30,20 @@ type Service interface { } type service struct { - controller Controller - transport secure.Service - cfg *config.Config + transport secure.Service + cfg *config.Config + spaceService clientspace.Service + storageService clientstorage.ClientStorage + docService document.Service + account account.Service *server.BaseDrpcServer } func (s *service) Init(a *app.App) (err error) { - s.controller = newController( - a.MustComponent(clientspace.CName).(clientspace.Service), - a.MustComponent(storage.CName).(clientstorage.ClientStorage), - a.MustComponent(document.CName).(document.Service), - a.MustComponent(account.CName).(account.Service)) + s.spaceService = a.MustComponent(clientspace.CName).(clientspace.Service) + s.storageService = a.MustComponent(storage.CName).(clientstorage.ClientStorage) + s.docService = a.MustComponent(document.CName).(document.Service) + s.account = a.MustComponent(account.CName).(account.Service) s.cfg = a.MustComponent(config.CName).(*config.Config) s.transport = a.MustComponent(secure.CName).(secure.Service) return nil @@ -62,7 +64,7 @@ func (s *service) Run(ctx context.Context) (err error) { if err != nil { return } - return apiproto.DRPCRegisterClientApi(s, &rpcHandler{s.controller}) + return apiproto.DRPCRegisterClientApi(s, &rpcHandler{s.spaceService, s.storageService, s.docService, s.account}) } func (s *service) Close(ctx context.Context) (err error) { diff --git a/client/document/service.go b/client/document/service.go index b03e2c61..467cc71a 100644 --- a/client/document/service.go +++ b/client/document/service.go @@ -18,8 +18,9 @@ type Service interface { DeleteDocument(spaceId, documentId string) (err error) AllDocumentIds(spaceId string) (ids []string, err error) AllDocumentHeads(spaceId string) (ids []diffservice.TreeHeads, err error) - AddText(spaceId, documentId, text string) (head string, err error) + AddText(spaceId, documentId, text string, isSnapshot bool) (root, head string, err error) DumpDocumentTree(spaceId, documentId string) (dump string, err error) + TreeParams(spaceId, documentId string) (root string, head []string, err error) } const CName = "client.document" @@ -86,12 +87,12 @@ func (s *service) AllDocumentHeads(spaceId string) (ids []diffservice.TreeHeads, return } -func (s *service) AddText(spaceId, documentId, text string) (head string, err error) { +func (s *service) AddText(spaceId, documentId, text string, isSnapshot bool) (root, head string, err error) { doc, err := s.cache.GetDocument(context.Background(), spaceId, documentId) if err != nil { return } - return doc.AddText(text) + return doc.AddText(text, isSnapshot) } func (s *service) DumpDocumentTree(spaceId, documentId string) (dump string, err error) { @@ -101,3 +102,11 @@ func (s *service) DumpDocumentTree(spaceId, documentId string) (dump string, err } return doc.DebugDump() } + +func (s *service) TreeParams(spaceId, documentId string) (root string, heads []string, err error) { + tr, err := s.cache.GetTree(context.Background(), spaceId, documentId) + if err != nil { + return + } + return tr.Root().Id, tr.Heads(), nil +} diff --git a/client/document/textdocument/textdocument.go b/client/document/textdocument/textdocument.go index c6ef7ed6..78a2573b 100644 --- a/client/document/textdocument/textdocument.go +++ b/client/document/textdocument/textdocument.go @@ -13,7 +13,7 @@ import ( type TextDocument interface { tree.ObjectTree InnerTree() tree.ObjectTree - AddText(text string) (string, error) + AddText(text string, isSnapshot bool) (string, string, error) Text() (string, error) TreeDump() string Close() error @@ -60,7 +60,7 @@ func (t *textDocument) InnerTree() tree.ObjectTree { return t.ObjectTree } -func (t *textDocument) AddText(text string) (head string, err error) { +func (t *textDocument) AddText(text string, isSnapshot bool) (root, head string, err error) { content := &testchanges.TextContent_TextAppend{ TextAppend: &testchanges.TextAppend{Text: text}, } @@ -80,11 +80,12 @@ func (t *textDocument) AddText(text string) (head string, err error) { Data: res, Key: t.account.Account().SignKey, Identity: t.account.Account().Identity, - IsSnapshot: false, + IsSnapshot: isSnapshot, }) if err != nil { return } + root = t.Root().Id head = addRes.Heads[0] return } From 339dd2b0062335b36b3b1d9a1b3a25f3712f176a Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sat, 3 Dec 2022 15:06:43 +0100 Subject: [PATCH 17/32] Add tree params and debugging --- client/api/rpchandler.go | 2 - node/api/apiproto/api.pb.go | 495 +++++++++++++++++++++++++-- node/api/apiproto/api_drpc.pb.go | 44 ++- node/api/apiproto/protos/api.proto | 11 + node/api/rpchandler.go | 12 + util/cmd/debug/api/client/service.go | 9 + util/cmd/debug/api/node/service.go | 9 + util/cmd/debug/api/service.go | 47 ++- 8 files changed, 600 insertions(+), 29 deletions(-) diff --git a/client/api/rpchandler.go b/client/api/rpchandler.go index e4ee55a7..e1c85c2a 100644 --- a/client/api/rpchandler.go +++ b/client/api/rpchandler.go @@ -144,5 +144,3 @@ func (r *rpcHandler) TreeParams(ctx context.Context, request *apiproto.TreeParam } return } - -//TreeParams(spaceId, documentId string) (root string, head []string, err error) diff --git a/node/api/apiproto/api.pb.go b/node/api/apiproto/api.pb.go index 169a9d60..d7302194 100644 --- a/node/api/apiproto/api.pb.go +++ b/node/api/apiproto/api.pb.go @@ -338,6 +338,110 @@ func (m *AllSpacesResponse) GetSpaceIds() []string { return nil } +type TreeParamsRequest struct { + SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"` + DocumentId string `protobuf:"bytes,2,opt,name=documentId,proto3" json:"documentId,omitempty"` +} + +func (m *TreeParamsRequest) Reset() { *m = TreeParamsRequest{} } +func (m *TreeParamsRequest) String() string { return proto.CompactTextString(m) } +func (*TreeParamsRequest) ProtoMessage() {} +func (*TreeParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{7} +} +func (m *TreeParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TreeParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TreeParamsRequest.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 *TreeParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_TreeParamsRequest.Merge(m, src) +} +func (m *TreeParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *TreeParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_TreeParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_TreeParamsRequest proto.InternalMessageInfo + +func (m *TreeParamsRequest) GetSpaceId() string { + if m != nil { + return m.SpaceId + } + return "" +} + +func (m *TreeParamsRequest) GetDocumentId() string { + if m != nil { + return m.DocumentId + } + return "" +} + +type TreeParamsResponse struct { + RootId string `protobuf:"bytes,1,opt,name=rootId,proto3" json:"rootId,omitempty"` + HeadIds []string `protobuf:"bytes,2,rep,name=headIds,proto3" json:"headIds,omitempty"` +} + +func (m *TreeParamsResponse) Reset() { *m = TreeParamsResponse{} } +func (m *TreeParamsResponse) String() string { return proto.CompactTextString(m) } +func (*TreeParamsResponse) ProtoMessage() {} +func (*TreeParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_fc31080c27db9707, []int{8} +} +func (m *TreeParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TreeParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TreeParamsResponse.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 *TreeParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_TreeParamsResponse.Merge(m, src) +} +func (m *TreeParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *TreeParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_TreeParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_TreeParamsResponse proto.InternalMessageInfo + +func (m *TreeParamsResponse) GetRootId() string { + if m != nil { + return m.RootId + } + return "" +} + +func (m *TreeParamsResponse) GetHeadIds() []string { + if m != nil { + return m.HeadIds + } + return nil +} + func init() { proto.RegisterType((*DumpTreeRequest)(nil), "nodeapi.DumpTreeRequest") proto.RegisterType((*DumpTreeResponse)(nil), "nodeapi.DumpTreeResponse") @@ -346,34 +450,39 @@ func init() { proto.RegisterType((*AllTreesResponse)(nil), "nodeapi.AllTreesResponse") proto.RegisterType((*AllSpacesRequest)(nil), "nodeapi.AllSpacesRequest") proto.RegisterType((*AllSpacesResponse)(nil), "nodeapi.AllSpacesResponse") + proto.RegisterType((*TreeParamsRequest)(nil), "nodeapi.TreeParamsRequest") + proto.RegisterType((*TreeParamsResponse)(nil), "nodeapi.TreeParamsResponse") } func init() { proto.RegisterFile("api/apiproto/protos/api.proto", fileDescriptor_fc31080c27db9707) } var fileDescriptor_fc31080c27db9707 = []byte{ - // 339 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0x4e, 0xf2, 0x40, - 0x10, 0xc7, 0xd9, 0x02, 0x1f, 0x74, 0x3e, 0x15, 0xdc, 0x78, 0x58, 0x9b, 0xb8, 0x21, 0x6b, 0x42, - 0x48, 0x34, 0x90, 0xe0, 0xc1, 0x23, 0x81, 0x78, 0x21, 0x26, 0x1e, 0xaa, 0x27, 0x6f, 0x95, 0xdd, - 0xc4, 0x4d, 0x80, 0x5d, 0xd9, 0xf6, 0x3d, 0x7c, 0x2c, 0x6f, 0x72, 0xf4, 0x68, 0xe0, 0x45, 0x4c, - 0xb7, 0x5b, 0x28, 0x48, 0xe2, 0xa5, 0x9d, 0x99, 0xff, 0xf4, 0x37, 0xff, 0x99, 0x14, 0x2e, 0x22, - 0x2d, 0x7b, 0x91, 0x96, 0x7a, 0xa1, 0x62, 0xd5, 0xb3, 0x4f, 0x93, 0xe6, 0x5d, 0x1b, 0xe2, 0xda, - 0x5c, 0x71, 0x11, 0x69, 0xc9, 0xee, 0xa1, 0x71, 0x97, 0xcc, 0xf4, 0xd3, 0x42, 0x88, 0x50, 0xbc, - 0x25, 0xc2, 0xc4, 0x98, 0x40, 0xcd, 0xe8, 0x68, 0x22, 0xc6, 0x9c, 0xa0, 0x16, 0xea, 0xf8, 0x61, - 0x9e, 0x62, 0x0a, 0xc0, 0xd5, 0x24, 0x99, 0x89, 0x79, 0x3c, 0xe6, 0xc4, 0xb3, 0x62, 0xa1, 0xc2, - 0xda, 0xd0, 0xdc, 0xc2, 0x8c, 0x56, 0x73, 0x23, 0x30, 0x86, 0x0a, 0x4f, 0x66, 0xda, 0xa1, 0x6c, - 0xcc, 0xae, 0xa0, 0x31, 0x9c, 0x4e, 0xd3, 0x36, 0xf3, 0xe7, 0x50, 0x76, 0x0d, 0x95, 0xb4, 0x13, - 0x9f, 0x80, 0x27, 0x73, 0xd1, 0x93, 0x1c, 0x9f, 0x41, 0xf5, 0x55, 0x44, 0xdc, 0x10, 0xaf, 0x55, - 0xee, 0xf8, 0x61, 0x96, 0xb0, 0x5b, 0x68, 0x6e, 0xd1, 0xce, 0xc2, 0x25, 0x54, 0xe3, 0xb4, 0x40, - 0x50, 0xab, 0xdc, 0xf9, 0xdf, 0x3f, 0xee, 0xba, 0xe5, 0xbb, 0xd6, 0x68, 0xa6, 0x31, 0x6c, 0x3f, - 0x7c, 0x4c, 0x87, 0xe6, 0xa6, 0x58, 0x0f, 0x4e, 0x0b, 0x35, 0x47, 0x0b, 0xa0, 0xee, 0xac, 0x65, - 0x40, 0x3f, 0xdc, 0xe4, 0xfd, 0x4f, 0x04, 0xb5, 0x07, 0xc5, 0xc5, 0x50, 0x4b, 0x3c, 0x80, 0x7a, - 0x7e, 0x0c, 0x4c, 0x36, 0x23, 0xf7, 0x8e, 0x1d, 0x9c, 0x1f, 0x50, 0xdc, 0xa0, 0x01, 0xd4, 0xf3, - 0x55, 0x0a, 0x80, 0xbd, 0xc3, 0x15, 0x00, 0xbf, 0xf6, 0x1e, 0x81, 0xbf, 0xb1, 0x8f, 0x77, 0xfa, - 0x76, 0xd6, 0x0c, 0x82, 0x43, 0x52, 0xc6, 0x18, 0xb5, 0x3f, 0x56, 0x14, 0x2d, 0x57, 0x14, 0x7d, - 0xaf, 0x28, 0x7a, 0x5f, 0xd3, 0xd2, 0x72, 0x4d, 0x4b, 0x5f, 0x6b, 0x5a, 0x7a, 0x3e, 0x2a, 0xfe, - 0x61, 0x2f, 0xff, 0xec, 0xeb, 0xe6, 0x27, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x75, 0x8c, 0xa4, 0x78, - 0x02, 0x00, 0x00, + // 394 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0xcd, 0x4a, 0xf3, 0x40, + 0x14, 0x6d, 0xd2, 0xdf, 0xdc, 0xef, 0xa7, 0xed, 0x20, 0x12, 0x23, 0x86, 0x32, 0x42, 0x29, 0x28, + 0x2d, 0xd4, 0x85, 0xcb, 0xd2, 0xa2, 0x42, 0x11, 0x45, 0xa2, 0x2b, 0x77, 0xb1, 0x33, 0x60, 0xa0, + 0xe9, 0x8c, 0x99, 0xe4, 0x3d, 0x5c, 0xf9, 0x4c, 0x2e, 0xbb, 0x74, 0x29, 0xed, 0x8b, 0xc8, 0x24, + 0x93, 0x34, 0xa9, 0x05, 0x17, 0x6e, 0x92, 0x39, 0x73, 0x6e, 0xce, 0x3d, 0x73, 0xcf, 0x04, 0x8e, + 0x5c, 0xee, 0x0d, 0x5c, 0xee, 0xf1, 0x80, 0x85, 0x6c, 0x10, 0x3f, 0x85, 0xc4, 0xfd, 0x78, 0x89, + 0xea, 0x0b, 0x46, 0xa8, 0xcb, 0x3d, 0x7c, 0x0d, 0xcd, 0x8b, 0xc8, 0xe7, 0x0f, 0x01, 0xa5, 0x0e, + 0x7d, 0x89, 0xa8, 0x08, 0x91, 0x09, 0x75, 0xc1, 0xdd, 0x19, 0x9d, 0x12, 0x53, 0xeb, 0x68, 0x3d, + 0xc3, 0x49, 0x21, 0xb2, 0x01, 0x08, 0x9b, 0x45, 0x3e, 0x5d, 0x84, 0x53, 0x62, 0xea, 0x31, 0x99, + 0xdb, 0xc1, 0x5d, 0x68, 0x6d, 0xc4, 0x04, 0x67, 0x0b, 0x41, 0x11, 0x82, 0x0a, 0x89, 0x7c, 0xae, + 0xa4, 0xe2, 0x35, 0x3e, 0x81, 0xe6, 0x78, 0x3e, 0x97, 0x65, 0xe2, 0xc7, 0xa6, 0xf8, 0x14, 0x2a, + 0xb2, 0x12, 0xfd, 0x07, 0xdd, 0x4b, 0x49, 0xdd, 0x23, 0x68, 0x0f, 0xaa, 0xcf, 0xd4, 0x25, 0xc2, + 0xd4, 0x3b, 0xe5, 0x9e, 0xe1, 0x24, 0x00, 0x9f, 0x43, 0x6b, 0x23, 0xad, 0x2c, 0x1c, 0x43, 0x35, + 0x94, 0x1b, 0xa6, 0xd6, 0x29, 0xf7, 0xfe, 0x0c, 0xff, 0xf5, 0xd5, 0xe1, 0xfb, 0xb1, 0xd1, 0x84, + 0xc3, 0x28, 0xfe, 0xf0, 0x5e, 0x36, 0x4d, 0x4d, 0xe1, 0x01, 0xb4, 0x73, 0x7b, 0x4a, 0xcd, 0x82, + 0x86, 0xb2, 0x96, 0x08, 0x1a, 0x4e, 0x86, 0xf1, 0x0d, 0xb4, 0xa5, 0xe6, 0x9d, 0x1b, 0xb8, 0xbe, + 0xf8, 0xfd, 0x3c, 0xaf, 0x00, 0xe5, 0xe5, 0x94, 0x81, 0x7d, 0xa8, 0x05, 0x8c, 0x85, 0x99, 0x9c, + 0x42, 0xb2, 0x8f, 0x9c, 0xc1, 0x34, 0x1b, 0x49, 0x0a, 0x87, 0x6f, 0x3a, 0xd4, 0x6f, 0x19, 0xa1, + 0x63, 0xee, 0xa1, 0x11, 0x34, 0xd2, 0x8c, 0x90, 0x99, 0x4d, 0x62, 0xeb, 0x0e, 0x58, 0x07, 0x3b, + 0x18, 0xd5, 0xfe, 0x12, 0x60, 0x63, 0x0a, 0x59, 0x85, 0x61, 0x16, 0x0e, 0x6e, 0x1d, 0xee, 0xe4, + 0x94, 0xcc, 0x08, 0x1a, 0x69, 0x50, 0x39, 0x1f, 0x5b, 0xd7, 0x22, 0xe7, 0xe3, 0x5b, 0xaa, 0x13, + 0x30, 0xb2, 0x70, 0x50, 0xa1, 0xae, 0x10, 0xa2, 0x65, 0xed, 0xa2, 0x12, 0x8d, 0x49, 0xf7, 0x7d, + 0x65, 0x6b, 0xcb, 0x95, 0xad, 0x7d, 0xae, 0x6c, 0xed, 0x75, 0x6d, 0x97, 0x96, 0x6b, 0xbb, 0xf4, + 0xb1, 0xb6, 0x4b, 0x8f, 0x7f, 0xf3, 0xff, 0xcf, 0x53, 0x2d, 0x7e, 0x9d, 0x7d, 0x05, 0x00, 0x00, + 0xff, 0xff, 0xb6, 0x98, 0xe5, 0x1d, 0x56, 0x03, 0x00, 0x00, } func (m *DumpTreeRequest) Marshal() (dAtA []byte, err error) { @@ -604,6 +713,82 @@ func (m *AllSpacesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *TreeParamsRequest) 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 *TreeParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TreeParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DocumentId) > 0 { + i -= len(m.DocumentId) + copy(dAtA[i:], m.DocumentId) + i = encodeVarintApi(dAtA, i, uint64(len(m.DocumentId))) + i-- + dAtA[i] = 0x12 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TreeParamsResponse) 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 *TreeParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TreeParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HeadIds) > 0 { + for iNdEx := len(m.HeadIds) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.HeadIds[iNdEx]) + copy(dAtA[i:], m.HeadIds[iNdEx]) + i = encodeVarintApi(dAtA, i, uint64(len(m.HeadIds[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.RootId) > 0 { + i -= len(m.RootId) + copy(dAtA[i:], m.RootId) + i = encodeVarintApi(dAtA, i, uint64(len(m.RootId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintApi(dAtA []byte, offset int, v uint64) int { offset -= sovApi(v) base := offset @@ -716,6 +901,42 @@ func (m *AllSpacesResponse) Size() (n int) { return n } +func (m *TreeParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpaceId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.DocumentId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *TreeParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.RootId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if len(m.HeadIds) > 0 { + for _, s := range m.HeadIds { + l = len(s) + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + func sovApi(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -1330,6 +1551,234 @@ func (m *AllSpacesResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *TreeParamsRequest) 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: TreeParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TreeParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DocumentId", 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.DocumentId = 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 *TreeParamsResponse) 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: TreeParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TreeParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RootId", 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.RootId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HeadIds", 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.HeadIds = append(m.HeadIds, 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 skipApi(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/node/api/apiproto/api_drpc.pb.go b/node/api/apiproto/api_drpc.pb.go index f12d2219..22440c92 100644 --- a/node/api/apiproto/api_drpc.pb.go +++ b/node/api/apiproto/api_drpc.pb.go @@ -41,6 +41,7 @@ type DRPCNodeApiClient interface { DRPCConn() drpc.Conn DumpTree(ctx context.Context, in *DumpTreeRequest) (*DumpTreeResponse, error) + TreeParams(ctx context.Context, in *TreeParamsRequest) (*TreeParamsResponse, error) AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) AllSpaces(ctx context.Context, in *AllSpacesRequest) (*AllSpacesResponse, error) } @@ -64,6 +65,15 @@ func (c *drpcNodeApiClient) DumpTree(ctx context.Context, in *DumpTreeRequest) ( return out, nil } +func (c *drpcNodeApiClient) TreeParams(ctx context.Context, in *TreeParamsRequest) (*TreeParamsResponse, error) { + out := new(TreeParamsResponse) + err := c.cc.Invoke(ctx, "/nodeapi.NodeApi/TreeParams", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + func (c *drpcNodeApiClient) AllTrees(ctx context.Context, in *AllTreesRequest) (*AllTreesResponse, error) { out := new(AllTreesResponse) err := c.cc.Invoke(ctx, "/nodeapi.NodeApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, in, out) @@ -84,6 +94,7 @@ func (c *drpcNodeApiClient) AllSpaces(ctx context.Context, in *AllSpacesRequest) type DRPCNodeApiServer interface { DumpTree(context.Context, *DumpTreeRequest) (*DumpTreeResponse, error) + TreeParams(context.Context, *TreeParamsRequest) (*TreeParamsResponse, error) AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) AllSpaces(context.Context, *AllSpacesRequest) (*AllSpacesResponse, error) } @@ -94,6 +105,10 @@ func (s *DRPCNodeApiUnimplementedServer) DumpTree(context.Context, *DumpTreeRequ return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) } +func (s *DRPCNodeApiUnimplementedServer) TreeParams(context.Context, *TreeParamsRequest) (*TreeParamsResponse, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + func (s *DRPCNodeApiUnimplementedServer) AllTrees(context.Context, *AllTreesRequest) (*AllTreesResponse, error) { return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) } @@ -104,7 +119,7 @@ func (s *DRPCNodeApiUnimplementedServer) AllSpaces(context.Context, *AllSpacesRe type DRPCNodeApiDescription struct{} -func (DRPCNodeApiDescription) NumMethods() int { return 3 } +func (DRPCNodeApiDescription) NumMethods() int { return 4 } func (DRPCNodeApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { switch n { @@ -118,6 +133,15 @@ func (DRPCNodeApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receive ) }, DRPCNodeApiServer.DumpTree, true case 1: + return "/nodeapi.NodeApi/TreeParams", drpcEncoding_File_api_apiproto_protos_api_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCNodeApiServer). + TreeParams( + ctx, + in1.(*TreeParamsRequest), + ) + }, DRPCNodeApiServer.TreeParams, true + case 2: return "/nodeapi.NodeApi/AllTrees", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCNodeApiServer). @@ -126,7 +150,7 @@ func (DRPCNodeApiDescription) Method(n int) (string, drpc.Encoding, drpc.Receive in1.(*AllTreesRequest), ) }, DRPCNodeApiServer.AllTrees, true - case 2: + case 3: return "/nodeapi.NodeApi/AllSpaces", drpcEncoding_File_api_apiproto_protos_api_proto{}, func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { return srv.(DRPCNodeApiServer). @@ -160,6 +184,22 @@ func (x *drpcNodeApi_DumpTreeStream) SendAndClose(m *DumpTreeResponse) error { return x.CloseSend() } +type DRPCNodeApi_TreeParamsStream interface { + drpc.Stream + SendAndClose(*TreeParamsResponse) error +} + +type drpcNodeApi_TreeParamsStream struct { + drpc.Stream +} + +func (x *drpcNodeApi_TreeParamsStream) SendAndClose(m *TreeParamsResponse) error { + if err := x.MsgSend(m, drpcEncoding_File_api_apiproto_protos_api_proto{}); err != nil { + return err + } + return x.CloseSend() +} + type DRPCNodeApi_AllTreesStream interface { drpc.Stream SendAndClose(*AllTreesResponse) error diff --git a/node/api/apiproto/protos/api.proto b/node/api/apiproto/protos/api.proto index 7fea1f87..4ed13b20 100644 --- a/node/api/apiproto/protos/api.proto +++ b/node/api/apiproto/protos/api.proto @@ -5,6 +5,7 @@ option go_package = "api/apiproto"; service NodeApi { rpc DumpTree(DumpTreeRequest) returns(DumpTreeResponse); + rpc TreeParams(TreeParamsRequest) returns(TreeParamsResponse); rpc AllTrees(AllTreesRequest) returns(AllTreesResponse); rpc AllSpaces(AllSpacesRequest) returns(AllSpacesResponse); } @@ -37,3 +38,13 @@ message AllSpacesRequest { message AllSpacesResponse { repeated string spaceIds = 1; } + +message TreeParamsRequest { + string spaceId = 1; + string documentId = 2; +} + +message TreeParamsResponse { + string rootId = 1; + repeated string headIds = 2; +} \ No newline at end of file diff --git a/node/api/rpchandler.go b/node/api/rpchandler.go index 13c099f9..98718ab1 100644 --- a/node/api/rpchandler.go +++ b/node/api/rpchandler.go @@ -54,3 +54,15 @@ func (r *rpcHandler) AllSpaces(ctx context.Context, request *apiproto.AllSpacesR resp = &apiproto.AllSpacesResponse{SpaceIds: ids} return } + +func (r *rpcHandler) TreeParams(ctx context.Context, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) { + tree, err := r.treeCache.GetTree(context.Background(), request.SpaceId, request.DocumentId) + if err != nil { + return + } + resp = &apiproto.TreeParamsResponse{ + RootId: tree.Root().Id, + HeadIds: tree.Heads(), + } + return +} diff --git a/util/cmd/debug/api/client/service.go b/util/cmd/debug/api/client/service.go index 07cb784e..af30504f 100644 --- a/util/cmd/debug/api/client/service.go +++ b/util/cmd/debug/api/client/service.go @@ -20,6 +20,7 @@ type Service interface { DeleteDocument(ctx context.Context, ip string, request *apiproto.DeleteDocumentRequest) (resp *apiproto.DeleteDocumentResponse, err error) AddText(ctx context.Context, ip string, request *apiproto.AddTextRequest) (resp *apiproto.AddTextResponse, err error) DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) + TreeParams(ctx context.Context, ip string, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) 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) @@ -90,6 +91,14 @@ func (s *service) DumpTree(ctx context.Context, ip string, request *apiproto.Dum return cl.DumpTree(ctx, request) } +func (s *service) TreeParams(ctx context.Context, ip string, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) { + cl, err := s.client.GetClient(ctx, ip) + if err != nil { + return + } + return cl.TreeParams(ctx, request) +} + func (s *service) AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { cl, err := s.client.GetClient(ctx, ip) if err != nil { diff --git a/util/cmd/debug/api/node/service.go b/util/cmd/debug/api/node/service.go index 37a166eb..56b1ab95 100644 --- a/util/cmd/debug/api/node/service.go +++ b/util/cmd/debug/api/node/service.go @@ -15,6 +15,7 @@ var log = logger.NewNamed(CName) type Service interface { app.Component DumpTree(ctx context.Context, ip string, request *apiproto.DumpTreeRequest) (resp *apiproto.DumpTreeResponse, err error) + TreeParams(ctx context.Context, ip string, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) 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) } @@ -44,6 +45,14 @@ func (s *service) DumpTree(ctx context.Context, ip string, request *apiproto.Dum return cl.DumpTree(ctx, request) } +func (s *service) TreeParams(ctx context.Context, ip string, request *apiproto.TreeParamsRequest) (resp *apiproto.TreeParamsResponse, err error) { + cl, err := s.client.GetNode(ctx, ip) + if err != nil { + return + } + return cl.TreeParams(ctx, request) +} + func (s *service) AllTrees(ctx context.Context, ip string, request *apiproto.AllTreesRequest) (resp *apiproto.AllTreesResponse, err error) { cl, err := s.client.GetNode(ctx, ip) if err != nil { diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index 57463efd..670e9ece 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -153,7 +153,7 @@ func (s *service) registerClientCommands() { return }} s.clientCommands["add-text"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 3 { + if len(params) != 3 && len(params) != 4 { err = ErrIncorrectParamsCount return } @@ -161,11 +161,12 @@ func (s *service) registerClientCommands() { SpaceId: params[0], DocumentId: params[1], Text: params[2], + IsSnapshot: len(params) == 4, }) if err != nil { return } - res = resp.DocumentId + "->" + resp.HeadId + res = resp.DocumentId + "->" + resp.RootId + "->" + resp.HeadId return }} s.clientCommands["load-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { @@ -224,6 +225,27 @@ func (s *service) registerClientCommands() { res = resp.Dump return }} + s.clientCommands["tree-params"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 2 { + err = ErrIncorrectParamsCount + return + } + resp, err := s.client.TreeParams(context.Background(), server.Address, &clientproto.TreeParamsRequest{ + SpaceId: params[0], + DocumentId: params[1], + }) + if err != nil { + return + } + res = resp.RootId + "->" + for headIdx, head := range resp.HeadIds { + res += head + if headIdx != len(resp.HeadIds)-1 { + res += "," + } + } + return + }} s.clientCommands["all-spaces"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { if len(params) != 0 { err = ErrIncorrectParamsCount @@ -286,6 +308,27 @@ func (s *service) registerNodeCommands() { res = resp.Dump return }} + s.nodeCommands["tree-params"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { + if len(params) != 2 { + err = ErrIncorrectParamsCount + return + } + resp, err := s.node.TreeParams(context.Background(), server.Address, &nodeproto.TreeParamsRequest{ + SpaceId: params[0], + DocumentId: params[1], + }) + if err != nil { + return + } + res = resp.RootId + "->" + for headIdx, head := range resp.HeadIds { + res += head + if headIdx != len(resp.HeadIds)-1 { + res += "," + } + } + return + }} s.nodeCommands["all-spaces"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { if len(params) != 0 { err = ErrIncorrectParamsCount From 25191a24433a4744b02a2e77dbed7a77fe2c840e Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sat, 3 Dec 2022 15:59:45 +0100 Subject: [PATCH 18/32] Fix dfsprev --- common/pkg/acl/tree/tree.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/pkg/acl/tree/tree.go b/common/pkg/acl/tree/tree.go index 80bbb78c..f1dbbf9b 100644 --- a/common/pkg/acl/tree/tree.go +++ b/common/pkg/acl/tree/tree.go @@ -336,8 +336,9 @@ func (t *Tree) dfsPrev(stack []*Change, breakpoints []string, visit func(ch *Cha t.visitedBuf = append(t.visitedBuf, ch) for _, prevId := range ch.PreviousIds { - prevCh := t.attached[prevId] - if !prevCh.visited { + prevCh, exists := t.attached[prevId] + // here the only time it wouldn't exist if we are at the tree root + if exists && !prevCh.visited { stack = append(stack, prevCh) } } From cdfee1232e9a92ad5b8bb0ab7a7313ae702a19d7 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sat, 3 Dec 2022 17:54:10 +0100 Subject: [PATCH 19/32] Fix syncservice loop --- common/commonspace/syncservice/syncservice.go | 23 +++++++----- common/nodeconf/confconnector.go | 36 ++++++++++++++----- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/common/commonspace/syncservice/syncservice.go b/common/commonspace/syncservice/syncservice.go index 1dfd9243..ed9f6427 100644 --- a/common/commonspace/syncservice/syncservice.go +++ b/common/commonspace/syncservice/syncservice.go @@ -97,17 +97,24 @@ func (s *syncService) HandleMessage(ctx context.Context, senderId string, messag func (s *syncService) responsibleStreamCheckLoop(ctx context.Context) { defer close(s.streamLoopDone) checkResponsiblePeers := func() { - s.log.Debug("dialing responsible peers") - respPeers, err := s.connector.DialResponsiblePeers(ctx, s.spaceId) + var ( + activeNodeIds []string + configuration = s.connector.Configuration() + ) + for _, nodeId := range configuration.NodeIds(s.spaceId) { + if s.streamPool.HasActiveStream(nodeId) { + s.log.Debug("has active stream for", zap.String("id", nodeId)) + activeNodeIds = append(activeNodeIds, nodeId) + continue + } + } + newPeers, err := s.connector.DialResponsiblePeers(ctx, s.spaceId, activeNodeIds) if err != nil { s.log.Error("failed to dial peers", zap.Error(err)) return } - for _, p := range respPeers { - if s.streamPool.HasActiveStream(p.Id()) { - s.log.Debug("has active stream for", zap.String("id", p.Id())) - continue - } + + for _, p := range newPeers { stream, err := s.clientFactory.Client(p).Stream(ctx) if err != nil { err = rpcerr.Unwrap(err) @@ -123,7 +130,7 @@ func (s *syncService) responsibleStreamCheckLoop(ctx context.Context) { s.log.Errorf("failed to send first message to stream: %v", err) continue } - s.log.Debug("continue reading stream for", zap.String("id", p.Id())) + s.log.Debug("reading stream for", zap.String("id", p.Id())) s.streamPool.AddAndReadStreamAsync(stream) } } diff --git a/common/nodeconf/confconnector.go b/common/nodeconf/confconnector.go index bb2c302a..e970b327 100644 --- a/common/nodeconf/confconnector.go +++ b/common/nodeconf/confconnector.go @@ -4,11 +4,13 @@ import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice" ) type ConfConnector interface { + Configuration() Configuration GetResponsiblePeers(ctx context.Context, spaceId string) ([]peer.Peer, error) - DialResponsiblePeers(ctx context.Context, spaceId string) ([]peer.Peer, error) + DialResponsiblePeers(ctx context.Context, spaceId string, activeNodeIds []string) ([]peer.Peer, error) } type confConnector struct { @@ -20,21 +22,36 @@ func NewConfConnector(conf Configuration, pool pool.Pool) ConfConnector { return &confConnector{conf: conf, pool: pool} } -func (s *confConnector) GetResponsiblePeers(ctx context.Context, spaceId string) ([]peer.Peer, error) { - return s.connectOneOrMany(ctx, spaceId, s.pool.Get, s.pool.GetOneOf) +func (s *confConnector) Configuration() Configuration { + return s.conf } -func (s *confConnector) DialResponsiblePeers(ctx context.Context, spaceId string) ([]peer.Peer, error) { - return s.connectOneOrMany(ctx, spaceId, s.pool.Dial, s.pool.DialOneOf) +func (s *confConnector) GetResponsiblePeers(ctx context.Context, spaceId string) ([]peer.Peer, error) { + return s.connectOneOrMany(ctx, spaceId, nil, s.pool.Get, s.pool.GetOneOf) +} + +func (s *confConnector) DialResponsiblePeers(ctx context.Context, spaceId string, activeNodeIds []string) ([]peer.Peer, error) { + return s.connectOneOrMany(ctx, spaceId, activeNodeIds, s.pool.Dial, s.pool.DialOneOf) } func (s *confConnector) connectOneOrMany( - ctx context.Context, spaceId string, + ctx context.Context, + spaceId string, + activeNodeIds []string, connectOne func(context.Context, string) (peer.Peer, error), connectOneOf func(context.Context, []string) (peer.Peer, error)) (peers []peer.Peer, err error) { - allNodes := s.conf.NodeIds(spaceId) + var ( + inactiveNodeIds []string + allNodes = s.conf.NodeIds(spaceId) + ) + for _, id := range allNodes { + if slice.FindPos(activeNodeIds, id) == -1 { + inactiveNodeIds = append(inactiveNodeIds, id) + } + } + if s.conf.IsResponsible(spaceId) { - for _, id := range allNodes { + for _, id := range inactiveNodeIds { var p peer.Peer p, err = connectOne(ctx, id) if err != nil { @@ -42,7 +59,8 @@ func (s *confConnector) connectOneOrMany( } peers = append(peers, p) } - } else { + } else if len(activeNodeIds) == 0 { + // that means that all connected ids var p peer.Peer p, err = connectOneOf(ctx, allNodes) if err != nil { From 6ed6142129040ce1d280014133a82f00ed831d8e Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sun, 4 Dec 2022 15:02:50 +0100 Subject: [PATCH 20/32] Add two client script and fix common snapshot bug --- common/commonspace/syncservice/syncservice.go | 2 +- common/nodeconf/confconnector.go | 4 +- common/pkg/acl/tree/rawloader.go | 12 +++-- util/cmd/debug/api/service.go | 52 +++++++++++++++++++ 4 files changed, 63 insertions(+), 7 deletions(-) diff --git a/common/commonspace/syncservice/syncservice.go b/common/commonspace/syncservice/syncservice.go index ed9f6427..06cf98a4 100644 --- a/common/commonspace/syncservice/syncservice.go +++ b/common/commonspace/syncservice/syncservice.go @@ -108,7 +108,7 @@ func (s *syncService) responsibleStreamCheckLoop(ctx context.Context) { continue } } - newPeers, err := s.connector.DialResponsiblePeers(ctx, s.spaceId, activeNodeIds) + newPeers, err := s.connector.DialInactiveResponsiblePeers(ctx, s.spaceId, activeNodeIds) if err != nil { s.log.Error("failed to dial peers", zap.Error(err)) return diff --git a/common/nodeconf/confconnector.go b/common/nodeconf/confconnector.go index e970b327..c797fb3f 100644 --- a/common/nodeconf/confconnector.go +++ b/common/nodeconf/confconnector.go @@ -10,7 +10,7 @@ import ( type ConfConnector interface { Configuration() Configuration GetResponsiblePeers(ctx context.Context, spaceId string) ([]peer.Peer, error) - DialResponsiblePeers(ctx context.Context, spaceId string, activeNodeIds []string) ([]peer.Peer, error) + DialInactiveResponsiblePeers(ctx context.Context, spaceId string, activeNodeIds []string) ([]peer.Peer, error) } type confConnector struct { @@ -30,7 +30,7 @@ func (s *confConnector) GetResponsiblePeers(ctx context.Context, spaceId string) return s.connectOneOrMany(ctx, spaceId, nil, s.pool.Get, s.pool.GetOneOf) } -func (s *confConnector) DialResponsiblePeers(ctx context.Context, spaceId string, activeNodeIds []string) ([]peer.Peer, error) { +func (s *confConnector) DialInactiveResponsiblePeers(ctx context.Context, spaceId string, activeNodeIds []string) ([]peer.Peer, error) { return s.connectOneOrMany(ctx, spaceId, activeNodeIds, s.pool.Dial, s.pool.DialOneOf) } diff --git a/common/pkg/acl/tree/rawloader.go b/common/pkg/acl/tree/rawloader.go index e6c556ff..58d77427 100644 --- a/common/pkg/acl/tree/rawloader.go +++ b/common/pkg/acl/tree/rawloader.go @@ -137,23 +137,27 @@ func (r *rawChangeLoader) LoadFromStorage(commonSnapshot string, heads, breakpoi if !shouldVisit(entry.position, exists) { continue } + if id == commonSnapshot { + commonSnapshotVisited = true + continue + } if !exists { entry, err = r.loadEntry(id) if err != nil { continue } } - // setting the counter when we visit - r.cache[id] = visit(entry) + entry = visit(entry) + r.cache[id] = entry for _, prev := range entry.change.PreviousIds { if prev == commonSnapshot { commonSnapshotVisited = true break } - entry, exists = r.cache[prev] - if !shouldVisit(entry.position, exists) { + prevEntry, exists := r.cache[prev] + if !shouldVisit(prevEntry.position, exists) { continue } r.idStack = append(r.idStack, prev) diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index 670e9ece..475c17f2 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -11,7 +11,10 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/client" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" + "github.com/zeebo/errs" + "math/rand" "strconv" + "sync" ) const CName = "debug.api" @@ -379,4 +382,53 @@ func (s *service) registerScripts() { } return }} + s.scripts["create-many-two-clients"] = Script{Cmd: func(params []string) (res string, err error) { + if len(params) != 6 { + err = ErrIncorrectParamsCount + return + } + peer1, err := s.peers.Get(params[0]) + if err != nil { + return + } + peer2, err := s.peers.Get(params[1]) + if err != nil { + return + } + last, err := strconv.Atoi(params[5]) + if err != nil { + return + } + if last <= 0 { + err = fmt.Errorf("incorrect number of steps") + return + } + wg := &sync.WaitGroup{} + var mError errs.Group + createMany := func(peer peers.Peer) { + defer wg.Done() + for i := 0; i < last; i++ { + _, err := s.client.AddText(context.Background(), peer.Address, &clientproto.AddTextRequest{ + SpaceId: params[2], + DocumentId: params[3], + Text: params[4], + IsSnapshot: rand.Int()%2 == 0, + }) + if err != nil { + mError.Add(err) + return + } + } + } + for _, p := range []peers.Peer{peer1, peer2} { + wg.Add(1) + createMany(p) + } + wg.Wait() + if mError.Err() != nil { + err = mError.Err() + return + } + return + }} } From 016543db406b5cbd508e165e794e530e93a94efc Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Mon, 5 Dec 2022 12:43:36 +0100 Subject: [PATCH 21/32] Use cobra command line --- util/cmd/debug/api/service.go | 880 ++++++++++++++++++-------------- util/cmd/debug/debug.go | 44 +- util/cmd/debug/stdin/service.go | 98 ---- 3 files changed, 509 insertions(+), 513 deletions(-) delete mode 100644 util/cmd/debug/stdin/service.go diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index 475c17f2..d5a5f61a 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -2,7 +2,6 @@ package api import ( "context" - "errors" "fmt" clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" @@ -11,51 +10,55 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/client" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" - "github.com/zeebo/errs" - "math/rand" - "strconv" - "sync" + "github.com/spf13/cobra" + _ "github.com/spf13/cobra" ) const CName = "debug.api" var log = logger.NewNamed(CName) -var ( - ErrNoSuchCommand = errors.New("no such command") - ErrIncorrectPeerType = errors.New("incorrect peer type") - ErrIncorrectParamsCount = errors.New("incorrect params count") -) - -type Command struct { - Cmd func(server peers.Peer, params []string) (string, error) -} - -type Script struct { - Cmd func(params []string) (string, error) -} - type Service interface { - app.Component - Call(server peers.Peer, cmdName string, params []string) (string, error) - Script(scriptName string, params []string) (res string, err error) + app.ComponentRunnable } type service struct { - clientCommands map[string]Command - nodeCommands map[string]Command - scripts map[string]Script client client.Service node node.Service peers peers.Service + clientCommands []*cobra.Command + nodeCommands []*cobra.Command + scripts []*cobra.Command } func New() Service { - return &service{ - clientCommands: map[string]Command{}, - nodeCommands: map[string]Command{}, - scripts: map[string]Script{}, + return &service{} +} + +func (s *service) Run(ctx context.Context) (err error) { + rootCmd := &cobra.Command{Use: "debug"} + + clientCmd := &cobra.Command{Use: "client commands"} + clientCmd.PersistentFlags().StringP("client", "c", "", "the alias of the client") + clientCmd.MarkFlagRequired("client") + for _, cmd := range s.clientCommands { + clientCmd.AddCommand(cmd) } + rootCmd.AddCommand(clientCmd) + + nodeCmd := &cobra.Command{Use: "node commands"} + nodeCmd.PersistentFlags().StringP("node", "n", "", "the alias of the node") + nodeCmd.MarkFlagRequired("node") + for _, cmd := range s.nodeCommands { + nodeCmd.AddCommand(cmd) + } + rootCmd.AddCommand(nodeCmd) + + return rootCmd.Execute() +} + +func (s *service) Close(ctx context.Context) (err error) { + return nil } func (s *service) Init(a *app.App) (err error) { @@ -64,7 +67,7 @@ func (s *service) Init(a *app.App) (err error) { s.peers = a.MustComponent(peers.CName).(peers.Service) s.registerClientCommands() s.registerNodeCommands() - s.registerScripts() + //s.registerScripts() return nil } @@ -73,362 +76,493 @@ func (s *service) Name() (name string) { return CName } -func (s *service) Script(scriptName string, params []string) (res string, err error) { - script, ok := s.scripts[scriptName] - if !ok { - err = ErrNoSuchCommand - return - } - return script.Cmd(params) -} - -func (s *service) Call(server peers.Peer, cmdName string, params []string) (res string, err error) { - var ( - cmd Command - commands map[string]Command - ) - switch server.PeerType { - case peers.PeerTypeClient: - commands = s.clientCommands - case peers.PeerTypeNode: - commands = s.nodeCommands - } - cmd, ok := commands[cmdName] - if !ok { - err = ErrNoSuchCommand - return - } - return cmd.Cmd(server, params) -} - func (s *service) registerClientCommands() { - s.clientCommands["create-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 0 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.client.CreateSpace(context.Background(), server.Address, &clientproto.CreateSpaceRequest{}) - if err != nil { - return - } - res = resp.Id - return - }} - s.clientCommands["derive-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 0 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.client.DeriveSpace(context.Background(), server.Address, &clientproto.DeriveSpaceRequest{}) - if err != nil { - return - } - res = resp.Id - return - }} - s.clientCommands["create-document"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 1 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.client.CreateDocument(context.Background(), server.Address, &clientproto.CreateDocumentRequest{ - SpaceId: params[0], - }) - if err != nil { - return - } - res = resp.Id - return - }} - s.clientCommands["delete-document"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 2 { - err = ErrIncorrectParamsCount - return - } - _, err = s.client.DeleteDocument(context.Background(), server.Address, &clientproto.DeleteDocumentRequest{ - SpaceId: params[0], - DocumentId: params[1], - }) - if err != nil { - return - } - res = "deleted" - return - }} - s.clientCommands["add-text"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 3 && len(params) != 4 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.client.AddText(context.Background(), server.Address, &clientproto.AddTextRequest{ - SpaceId: params[0], - DocumentId: params[1], - Text: params[2], - IsSnapshot: len(params) == 4, - }) - if err != nil { - return - } - res = resp.DocumentId + "->" + resp.RootId + "->" + resp.HeadId - return - }} - s.clientCommands["load-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 1 { - err = ErrIncorrectParamsCount - return - } - _, err = s.client.LoadSpace(context.Background(), server.Address, &clientproto.LoadSpaceRequest{ - SpaceId: params[0], - }) - if err != nil { - return - } - res = params[0] - return - }} - s.clientCommands["all-trees"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 1 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.client.AllTrees(context.Background(), server.Address, &clientproto.AllTreesRequest{ - SpaceId: params[0], - }) - if err != nil { - return - } - for treeIdx, tree := range resp.Trees { - treeStr := tree.Id + ":[" - for headIdx, head := range tree.Heads { - treeStr += head - if headIdx != len(tree.Heads)-1 { - treeStr += "," + cmdCreateSpace := &cobra.Command{ + Use: "create-space [params]", + Short: "create the space", + Args: cobra.RangeArgs(0, 0), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return + } + resp, err := s.client.CreateSpace(context.Background(), server.Address, &clientproto.CreateSpaceRequest{}) + if err != nil { + fmt.Println("couldn't create a space", err) + return + } + fmt.Println(resp.Id) + }, + } + s.clientCommands = append(s.clientCommands, cmdCreateSpace) + + cmdLoadSpace := &cobra.Command{ + Use: "load-space [params]", + Short: "load the space", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return + } + _, err = s.client.LoadSpace(context.Background(), server.Address, &clientproto.LoadSpaceRequest{ + SpaceId: args[0], + }) + if err != nil { + fmt.Println("couldn't load the space", err) + return + } + fmt.Println("space loaded", args[0]) + }, + } + s.clientCommands = append(s.clientCommands, cmdLoadSpace) + + cmdDeriveSpace := &cobra.Command{ + Use: "derive-space [params]", + Short: "derive the space from account data", + Args: cobra.RangeArgs(0, 0), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return + } + resp, err := s.client.DeriveSpace(context.Background(), server.Address, &clientproto.DeriveSpaceRequest{}) + if err != nil { + fmt.Println("couldn't derive a space", err) + return + } + fmt.Println(resp.Id) + }, + } + s.clientCommands = append(s.clientCommands, cmdDeriveSpace) + + cmdCreateDocument := &cobra.Command{ + Use: "create-document [params]", + Short: "create the document in a particular space", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return + } + resp, err := s.client.CreateDocument(context.Background(), server.Address, &clientproto.CreateDocumentRequest{ + SpaceId: args[0], + }) + if err != nil { + fmt.Println("couldn't create a document", err) + return + } + fmt.Println(resp.Id) + }, + } + s.clientCommands = append(s.clientCommands, cmdCreateDocument) + + cmdDeleteDocument := &cobra.Command{ + Use: "delete-document [params]", + Short: "delete the document in a particular space", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + space, _ := cmd.Flags().GetString("space") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return + } + _, err = s.client.DeleteDocument(context.Background(), server.Address, &clientproto.DeleteDocumentRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't delete the document", err) + return + } + fmt.Println("deleted", args[1]) + }, + } + cmdDeleteDocument.Flags().String("space", "", "the space where something is happening :-)") + cmdDeleteDocument.MarkFlagRequired("space") + s.clientCommands = append(s.clientCommands, cmdDeleteDocument) + + cmdAddText := &cobra.Command{ + Use: "add-text [params]", + Short: "add text to the document in the particular space", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + space, _ := cmd.Flags().GetString("space") + document, _ := cmd.Flags().GetString("document") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return + } + resp, err := s.client.AddText(context.Background(), server.Address, &clientproto.AddTextRequest{ + SpaceId: space, + DocumentId: document, + Text: args[0], + }) + if err != nil { + fmt.Println("couldn't add text to the document", err) + return + } + fmt.Println("added text", resp.DocumentId, "root:", resp.RootId, "head:", resp.HeadId) + }, + } + cmdAddText.Flags().String("space", "", "the space where something is happening :-)") + cmdAddText.Flags().String("document", "", "the document where something is happening :-)") + cmdAddText.MarkFlagRequired("space") + cmdAddText.MarkFlagRequired("document") + s.clientCommands = append(s.clientCommands, cmdAddText) + + cmdAllTrees := &cobra.Command{ + Use: "all-trees [params]", + Short: "print all trees in space and their heads", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return + } + resp, err := s.client.AllTrees(context.Background(), server.Address, &clientproto.AllTreesRequest{ + SpaceId: args[0], + }) + if err != nil { + fmt.Println("couldn't print all the trees", err) + return + } + var res string + for treeIdx, tree := range resp.Trees { + treeStr := tree.Id + ":[" + for headIdx, head := range tree.Heads { + treeStr += head + if headIdx != len(tree.Heads)-1 { + treeStr += "," + } + } + treeStr += "]" + res += treeStr + if treeIdx != len(resp.Trees)-1 { + res += "\n" } } - treeStr += "]" - res += treeStr - if treeIdx != len(resp.Trees)-1 { - res += "\n" + fmt.Println(res) + }, + } + s.clientCommands = append(s.clientCommands, cmdAllTrees) + + cmdDumpTree := &cobra.Command{ + Use: "dump-tree [params]", + Short: "get graphviz description of the tree", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + space, _ := cmd.Flags().GetString("space") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return } - } - return - }} - s.clientCommands["dump-tree"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 2 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.client.DumpTree(context.Background(), server.Address, &clientproto.DumpTreeRequest{ - SpaceId: params[0], - DocumentId: params[1], - }) - if err != nil { - return - } - res = resp.Dump - return - }} - s.clientCommands["tree-params"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 2 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.client.TreeParams(context.Background(), server.Address, &clientproto.TreeParamsRequest{ - SpaceId: params[0], - DocumentId: params[1], - }) - if err != nil { - return - } - res = resp.RootId + "->" - for headIdx, head := range resp.HeadIds { - res += head - if headIdx != len(resp.HeadIds)-1 { - res += "," + + resp, err := s.client.DumpTree(context.Background(), server.Address, &clientproto.DumpTreeRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't dump the tree", err) + return } - } - return - }} - s.clientCommands["all-spaces"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 0 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.client.AllSpaces(context.Background(), server.Address, &clientproto.AllSpacesRequest{}) - if err != nil { - return - } - for treeIdx, spaceId := range resp.SpaceIds { - res += spaceId - if treeIdx != len(resp.SpaceIds)-1 { - res += "\n" + fmt.Println(resp.Dump) + }, + } + cmdDumpTree.Flags().String("space", "", "the space where something is happening :-)") + cmdDumpTree.MarkFlagRequired("space") + s.clientCommands = append(s.clientCommands, cmdDumpTree) + + cmdTreeParams := &cobra.Command{ + Use: "tree-params [params]", + Short: "print heads and root of the tree", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + space, _ := cmd.Flags().GetString("space") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return } - } - return - }} + + resp, err := s.client.TreeParams(context.Background(), server.Address, &clientproto.TreeParamsRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't print params of the tree", err) + return + } + res := resp.RootId + "->" + for headIdx, head := range resp.HeadIds { + res += head + if headIdx != len(resp.HeadIds)-1 { + res += "," + } + } + fmt.Println(res) + }, + } + cmdTreeParams.Flags().String("space", "", "the space where something is happening :-)") + cmdTreeParams.MarkFlagRequired("space") + s.clientCommands = append(s.clientCommands, cmdTreeParams) + + cmdAllSpaces := &cobra.Command{ + Use: "all-spaces [params]", + Short: "print all spaces", + Args: cobra.RangeArgs(0, 0), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + server, err := s.peers.Get(cli) + if err != nil { + fmt.Println("no such client") + return + } + resp, err := s.client.AllSpaces(context.Background(), server.Address, &clientproto.AllSpacesRequest{}) + if err != nil { + fmt.Println("couldn't print all the spaces", err) + return + } + var res string + for treeIdx, spaceId := range resp.SpaceIds { + res += spaceId + if treeIdx != len(resp.SpaceIds)-1 { + res += "\n" + } + } + fmt.Println(res) + }, + } + s.clientCommands = append(s.clientCommands, cmdAllSpaces) } func (s *service) registerNodeCommands() { - s.nodeCommands["all-trees"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 1 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.node.AllTrees(context.Background(), server.Address, &nodeproto.AllTreesRequest{ - SpaceId: params[0], - }) - if err != nil { - return - } - for treeIdx, tree := range resp.Trees { - treeStr := tree.Id + ":[" - for headIdx, head := range tree.Heads { - treeStr += head - if headIdx != len(tree.Heads)-1 { - treeStr += "," - } + cmdAllTrees := &cobra.Command{ + Use: "all-trees [params]", + Short: "print all trees in space and their heads", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + nd, _ := cmd.Flags().GetString("node") + server, err := s.peers.Get(nd) + if err != nil { + fmt.Println("no such node") + return } - treeStr += "]" - res += treeStr - if treeIdx != len(resp.Trees)-1 { - res += "\n" - } - } - return - }} - s.nodeCommands["dump-tree"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 2 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.node.DumpTree(context.Background(), server.Address, &nodeproto.DumpTreeRequest{ - SpaceId: params[0], - DocumentId: params[1], - }) - if err != nil { - return - } - res = resp.Dump - return - }} - s.nodeCommands["tree-params"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 2 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.node.TreeParams(context.Background(), server.Address, &nodeproto.TreeParamsRequest{ - SpaceId: params[0], - DocumentId: params[1], - }) - if err != nil { - return - } - res = resp.RootId + "->" - for headIdx, head := range resp.HeadIds { - res += head - if headIdx != len(resp.HeadIds)-1 { - res += "," - } - } - return - }} - s.nodeCommands["all-spaces"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { - if len(params) != 0 { - err = ErrIncorrectParamsCount - return - } - resp, err := s.node.AllSpaces(context.Background(), server.Address, &nodeproto.AllSpacesRequest{}) - if err != nil { - return - } - for treeIdx, spaceId := range resp.SpaceIds { - res += spaceId - if treeIdx != len(resp.SpaceIds)-1 { - res += "\n" - } - } - return - }} -} - -func (s *service) registerScripts() { - s.scripts["create-many"] = Script{Cmd: func(params []string) (res string, err error) { - if len(params) != 5 { - err = ErrIncorrectParamsCount - return - } - peer, err := s.peers.Get(params[0]) - if err != nil { - return - } - last, err := strconv.Atoi(params[4]) - if err != nil { - return - } - if last <= 0 { - err = fmt.Errorf("incorrect number of steps") - return - } - - for i := 0; i < last; i++ { - _, err := s.client.AddText(context.Background(), peer.Address, &clientproto.AddTextRequest{ - SpaceId: params[1], - DocumentId: params[2], - Text: params[3], + resp, err := s.node.AllTrees(context.Background(), server.Address, &nodeproto.AllTreesRequest{ + SpaceId: args[0], }) if err != nil { - return "", err + fmt.Println("couldn't print all the trees", err) + return } - } - return - }} - s.scripts["create-many-two-clients"] = Script{Cmd: func(params []string) (res string, err error) { - if len(params) != 6 { - err = ErrIncorrectParamsCount - return - } - peer1, err := s.peers.Get(params[0]) - if err != nil { - return - } - peer2, err := s.peers.Get(params[1]) - if err != nil { - return - } - last, err := strconv.Atoi(params[5]) - if err != nil { - return - } - if last <= 0 { - err = fmt.Errorf("incorrect number of steps") - return - } - wg := &sync.WaitGroup{} - var mError errs.Group - createMany := func(peer peers.Peer) { - defer wg.Done() - for i := 0; i < last; i++ { - _, err := s.client.AddText(context.Background(), peer.Address, &clientproto.AddTextRequest{ - SpaceId: params[2], - DocumentId: params[3], - Text: params[4], - IsSnapshot: rand.Int()%2 == 0, - }) - if err != nil { - mError.Add(err) - return + var res string + for treeIdx, tree := range resp.Trees { + treeStr := tree.Id + ":[" + for headIdx, head := range tree.Heads { + treeStr += head + if headIdx != len(tree.Heads)-1 { + treeStr += "," + } + } + treeStr += "]" + res += treeStr + if treeIdx != len(resp.Trees)-1 { + res += "\n" } } - } - for _, p := range []peers.Peer{peer1, peer2} { - wg.Add(1) - createMany(p) - } - wg.Wait() - if mError.Err() != nil { - err = mError.Err() - return - } - return - }} + fmt.Println(res) + }, + } + s.nodeCommands = append(s.nodeCommands, cmdAllTrees) + + cmdDumpTree := &cobra.Command{ + Use: "dump-tree [params]", + Short: "get graphviz description of the tree", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + nd, _ := cmd.Flags().GetString("node") + space, _ := cmd.Flags().GetString("space") + server, err := s.peers.Get(nd) + if err != nil { + fmt.Println("no such node") + return + } + + resp, err := s.node.DumpTree(context.Background(), server.Address, &nodeproto.DumpTreeRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't dump the tree", err) + return + } + fmt.Println(resp.Dump) + }, + } + cmdDumpTree.Flags().String("space", "", "the space where something is happening :-)") + cmdDumpTree.MarkFlagRequired("space") + s.nodeCommands = append(s.nodeCommands, cmdDumpTree) + + cmdTreeParams := &cobra.Command{ + Use: "tree-params [params]", + Short: "print heads and root of the tree", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + nd, _ := cmd.Flags().GetString("node") + space, _ := cmd.Flags().GetString("space") + server, err := s.peers.Get(nd) + if err != nil { + fmt.Println("no such node") + return + } + + resp, err := s.node.TreeParams(context.Background(), server.Address, &nodeproto.TreeParamsRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't print params of the tree", err) + return + } + res := resp.RootId + "->" + for headIdx, head := range resp.HeadIds { + res += head + if headIdx != len(resp.HeadIds)-1 { + res += "," + } + } + fmt.Println(res) + }, + } + cmdTreeParams.Flags().String("space", "", "the space where something is happening :-)") + cmdTreeParams.MarkFlagRequired("space") + s.nodeCommands = append(s.nodeCommands, cmdTreeParams) + + cmdAllSpaces := &cobra.Command{ + Use: "all-spaces [params]", + Short: "print all spaces", + Args: cobra.RangeArgs(0, 0), + Run: func(cmd *cobra.Command, args []string) { + nd, _ := cmd.Flags().GetString("node") + server, err := s.peers.Get(nd) + if err != nil { + fmt.Println("no such node") + return + } + resp, err := s.node.AllSpaces(context.Background(), server.Address, &nodeproto.AllSpacesRequest{}) + if err != nil { + fmt.Println("couldn't print all the spaces", err) + return + } + var res string + for treeIdx, spaceId := range resp.SpaceIds { + res += spaceId + if treeIdx != len(resp.SpaceIds)-1 { + res += "\n" + } + } + fmt.Println(res) + }, + } + s.nodeCommands = append(s.nodeCommands, cmdAllSpaces) } + +// +//func (s *service) registerScripts() { +// s.scripts["create-many"] = Script{Cmd: func(params []string) (res string, err error) { +// if len(params) != 5 { +// err = ErrIncorrectParamsCount +// return +// } +// peer, err := s.peers.Get(params[0]) +// if err != nil { +// return +// } +// last, err := strconv.Atoi(params[4]) +// if err != nil { +// return +// } +// if last <= 0 { +// err = fmt.Errorf("incorrect number of steps") +// return +// } +// +// for i := 0; i < last; i++ { +// _, err := s.client.AddText(context.Background(), peer.Address, &clientproto.AddTextRequest{ +// SpaceId: params[1], +// DocumentId: params[2], +// Text: params[3], +// }) +// if err != nil { +// return "", err +// } +// } +// return +// }} +// s.scripts["create-many-two-clients"] = Script{Cmd: func(params []string) (res string, err error) { +// if len(params) != 6 { +// err = ErrIncorrectParamsCount +// return +// } +// peer1, err := s.peers.Get(params[0]) +// if err != nil { +// return +// } +// peer2, err := s.peers.Get(params[1]) +// if err != nil { +// return +// } +// last, err := strconv.Atoi(params[5]) +// if err != nil { +// return +// } +// if last <= 0 { +// err = fmt.Errorf("incorrect number of steps") +// return +// } +// wg := &sync.WaitGroup{} +// var mError errs.Group +// createMany := func(peer peers.Peer) { +// defer wg.Done() +// for i := 0; i < last; i++ { +// _, err := s.client.AddText(context.Background(), peer.Address, &clientproto.AddTextRequest{ +// SpaceId: params[2], +// DocumentId: params[3], +// Text: params[4], +// IsSnapshot: rand.Int()%2 == 0, +// }) +// if err != nil { +// mError.Add(err) +// return +// } +// } +// } +// for _, p := range []peers.Peer{peer1, peer2} { +// wg.Add(1) +// createMany(p) +// } +// wg.Wait() +// if mError.Err() != nil { +// err = mError.Err() +// return +// } +// return +// }} +//} diff --git a/util/cmd/debug/debug.go b/util/cmd/debug/debug.go index 3a29c7bf..a17cb5c4 100644 --- a/util/cmd/debug/debug.go +++ b/util/cmd/debug/debug.go @@ -2,8 +2,6 @@ package main import ( "context" - "flag" - "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/util/cmd/debug/api" @@ -11,24 +9,14 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/drpcclient" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/stdin" "go.uber.org/zap" "go.uber.org/zap/zapcore" "net/http" "os" - "os/signal" - "syscall" - "time" ) var log = logger.NewNamed("main") -var ( - // we can't use "v" here because of glog init (through badger) setting flag.Bool with "v" - flagVersion = flag.Bool("ver", false, "show version and exit") - flagHelp = flag.Bool("h", false, "show help and exit") -) - func init() { config := zap.NewProductionEncoderConfig() config.EncodeTime = zapcore.ISO8601TimeEncoder @@ -43,17 +31,6 @@ func init() { } func main() { - flag.Parse() - - if *flagVersion { - fmt.Println(app.VersionDescription()) - return - } - if *flagHelp { - flag.PrintDefaults() - return - } - if debug, ok := os.LookupEnv("ANYPROF"); ok && debug != "" { go func() { http.ListenAndServe(debug, nil) @@ -64,27 +41,11 @@ func main() { ctx := context.Background() a := new(app.App) Bootstrap(a) + // start app if err := a.Start(ctx); err != nil { log.Fatal("can't start app", zap.Error(err)) } - log.Info("app started", zap.String("version", a.Version())) - - // wait exit signal - exit := make(chan os.Signal, 1) - signal.Notify(exit, os.Interrupt, syscall.SIGKILL, syscall.SIGTERM, syscall.SIGQUIT) - sig := <-exit - log.Info("received exit signal, stop app...", zap.String("signal", fmt.Sprint(sig))) - - // close app - ctx, cancel := context.WithTimeout(ctx, time.Minute) - defer cancel() - if err := a.Close(ctx); err != nil { - log.Fatal("close error", zap.Error(err)) - } else { - log.Info("goodbye!") - } - time.Sleep(time.Second / 3) } func Bootstrap(a *app.App) { @@ -92,6 +53,5 @@ func Bootstrap(a *app.App) { Register(peers.New()). Register(client.New()). Register(node.New()). - Register(api.New()). - Register(stdin.New()) + Register(api.New()) } diff --git a/util/cmd/debug/stdin/service.go b/util/cmd/debug/stdin/service.go deleted file mode 100644 index 982a4b93..00000000 --- a/util/cmd/debug/stdin/service.go +++ /dev/null @@ -1,98 +0,0 @@ -package stdin - -import ( - "bufio" - "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/util/cmd/debug/api" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" - "os" - "strings" -) - -const CName = "debug.stdin" - -var log = logger.NewNamed(CName) - -type Service interface { - app.ComponentRunnable -} - -type service struct { - api api.Service - peers peers.Service -} - -func New() Service { - return &service{} -} - -func (s *service) Init(a *app.App) (err error) { - s.api = a.MustComponent(api.CName).(api.Service) - s.peers = a.MustComponent(peers.CName).(peers.Service) - return -} - -func (s *service) Name() (name string) { - return CName -} - -func (s *service) Run(ctx context.Context) (err error) { - go s.readStdin() - return nil -} - -func (s *service) Close(ctx context.Context) (err error) { - return nil -} - -func (s *service) readStdin() { - reader := bufio.NewReader(os.Stdin) -Loop: - for { - fmt.Print("> ") - str, err := reader.ReadString('\n') - if err != nil { - fmt.Println("error in read string:", err) - return - } - // trimming newline - str = str[:len(str)-1] - - split := strings.Split(str, " ") - if len(split) < 2 { - fmt.Println("incorrect number of arguments") - continue - } - switch split[0] { - case "script": - res, err := s.api.Script(split[1], split[2:]) - if err != nil { - fmt.Println("error in performing script:", err) - continue Loop - } - fmt.Println(res) - continue Loop - case "cmd": - break - default: - fmt.Println("incorrect input") - continue Loop - } - - peer, err := s.peers.Get(split[1]) - if err != nil { - fmt.Println("no such peer", err) - continue - } - - res, err := s.api.Call(peer, split[2], split[3:]) - if err != nil { - fmt.Println("error in performing command:", err) - continue - } - fmt.Println(res) - } -} From cd197dc7d7e6b00adddbb140b385bb0aef9aa500 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Mon, 5 Dec 2022 16:35:14 +0100 Subject: [PATCH 22/32] Add scripts --- util/cmd/debug/api/service.go | 194 +++++++++++++++++----------------- 1 file changed, 95 insertions(+), 99 deletions(-) diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index d5a5f61a..20818643 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -12,6 +12,10 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" "github.com/spf13/cobra" _ "github.com/spf13/cobra" + "github.com/zeebo/errs" + "math/rand" + "strings" + "sync" ) const CName = "debug.api" @@ -38,7 +42,7 @@ func New() Service { func (s *service) Run(ctx context.Context) (err error) { rootCmd := &cobra.Command{Use: "debug"} - clientCmd := &cobra.Command{Use: "client commands"} + clientCmd := &cobra.Command{Use: "client commands to be executed on a specified client"} clientCmd.PersistentFlags().StringP("client", "c", "", "the alias of the client") clientCmd.MarkFlagRequired("client") for _, cmd := range s.clientCommands { @@ -46,7 +50,7 @@ func (s *service) Run(ctx context.Context) (err error) { } rootCmd.AddCommand(clientCmd) - nodeCmd := &cobra.Command{Use: "node commands"} + nodeCmd := &cobra.Command{Use: "node commands to be executed on a node"} nodeCmd.PersistentFlags().StringP("node", "n", "", "the alias of the node") nodeCmd.MarkFlagRequired("node") for _, cmd := range s.nodeCommands { @@ -54,6 +58,12 @@ func (s *service) Run(ctx context.Context) (err error) { } rootCmd.AddCommand(nodeCmd) + scriptsCmd := &cobra.Command{Use: "script which can have arbitrary params and can include mutliple clients and nodes"} + for _, cmd := range s.scripts { + scriptsCmd.AddCommand(cmd) + } + rootCmd.AddCommand(scriptsCmd) + return rootCmd.Execute() } @@ -67,7 +77,7 @@ func (s *service) Init(a *app.App) (err error) { s.peers = a.MustComponent(peers.CName).(peers.Service) s.registerClientCommands() s.registerNodeCommands() - //s.registerScripts() + s.registerScripts() return nil } @@ -78,7 +88,7 @@ func (s *service) Name() (name string) { func (s *service) registerClientCommands() { cmdCreateSpace := &cobra.Command{ - Use: "create-space [params]", + Use: "create-space", Short: "create the space", Args: cobra.RangeArgs(0, 0), Run: func(cmd *cobra.Command, args []string) { @@ -99,7 +109,7 @@ func (s *service) registerClientCommands() { s.clientCommands = append(s.clientCommands, cmdCreateSpace) cmdLoadSpace := &cobra.Command{ - Use: "load-space [params]", + Use: "load-space [space]", Short: "load the space", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { @@ -122,7 +132,7 @@ func (s *service) registerClientCommands() { s.clientCommands = append(s.clientCommands, cmdLoadSpace) cmdDeriveSpace := &cobra.Command{ - Use: "derive-space [params]", + Use: "derive-space", Short: "derive the space from account data", Args: cobra.RangeArgs(0, 0), Run: func(cmd *cobra.Command, args []string) { @@ -143,7 +153,7 @@ func (s *service) registerClientCommands() { s.clientCommands = append(s.clientCommands, cmdDeriveSpace) cmdCreateDocument := &cobra.Command{ - Use: "create-document [params]", + Use: "create-document [space]", Short: "create the document in a particular space", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { @@ -166,7 +176,7 @@ func (s *service) registerClientCommands() { s.clientCommands = append(s.clientCommands, cmdCreateDocument) cmdDeleteDocument := &cobra.Command{ - Use: "delete-document [params]", + Use: "delete-document [document]", Short: "delete the document in a particular space", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { @@ -193,13 +203,14 @@ func (s *service) registerClientCommands() { s.clientCommands = append(s.clientCommands, cmdDeleteDocument) cmdAddText := &cobra.Command{ - Use: "add-text [params]", + Use: "add-text [text]", Short: "add text to the document in the particular space", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { cli, _ := cmd.Flags().GetString("client") space, _ := cmd.Flags().GetString("space") document, _ := cmd.Flags().GetString("document") + snapshot, _ := cmd.Flags().GetBool("snapshot") server, err := s.peers.Get(cli) if err != nil { fmt.Println("no such client") @@ -209,6 +220,7 @@ func (s *service) registerClientCommands() { SpaceId: space, DocumentId: document, Text: args[0], + IsSnapshot: snapshot, }) if err != nil { fmt.Println("couldn't add text to the document", err) @@ -219,12 +231,13 @@ func (s *service) registerClientCommands() { } cmdAddText.Flags().String("space", "", "the space where something is happening :-)") cmdAddText.Flags().String("document", "", "the document where something is happening :-)") + cmdAddText.Flags().Bool("snapshot", false, "tells if the snapshot should be created") cmdAddText.MarkFlagRequired("space") cmdAddText.MarkFlagRequired("document") s.clientCommands = append(s.clientCommands, cmdAddText) cmdAllTrees := &cobra.Command{ - Use: "all-trees [params]", + Use: "all-trees [space]", Short: "print all trees in space and their heads", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { @@ -262,7 +275,7 @@ func (s *service) registerClientCommands() { s.clientCommands = append(s.clientCommands, cmdAllTrees) cmdDumpTree := &cobra.Command{ - Use: "dump-tree [params]", + Use: "dump-tree [document]", Short: "get graphviz description of the tree", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { @@ -290,7 +303,7 @@ func (s *service) registerClientCommands() { s.clientCommands = append(s.clientCommands, cmdDumpTree) cmdTreeParams := &cobra.Command{ - Use: "tree-params [params]", + Use: "tree-params [document]", Short: "print heads and root of the tree", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { @@ -325,7 +338,7 @@ func (s *service) registerClientCommands() { s.clientCommands = append(s.clientCommands, cmdTreeParams) cmdAllSpaces := &cobra.Command{ - Use: "all-spaces [params]", + Use: "all-spaces", Short: "print all spaces", Args: cobra.RangeArgs(0, 0), Run: func(cmd *cobra.Command, args []string) { @@ -355,7 +368,7 @@ func (s *service) registerClientCommands() { func (s *service) registerNodeCommands() { cmdAllTrees := &cobra.Command{ - Use: "all-trees [params]", + Use: "all-trees [space]", Short: "print all trees in space and their heads", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { @@ -393,7 +406,7 @@ func (s *service) registerNodeCommands() { s.nodeCommands = append(s.nodeCommands, cmdAllTrees) cmdDumpTree := &cobra.Command{ - Use: "dump-tree [params]", + Use: "dump-tree [space]", Short: "get graphviz description of the tree", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { @@ -421,7 +434,7 @@ func (s *service) registerNodeCommands() { s.nodeCommands = append(s.nodeCommands, cmdDumpTree) cmdTreeParams := &cobra.Command{ - Use: "tree-params [params]", + Use: "tree-params [document]", Short: "print heads and root of the tree", Args: cobra.RangeArgs(1, 1), Run: func(cmd *cobra.Command, args []string) { @@ -456,7 +469,7 @@ func (s *service) registerNodeCommands() { s.nodeCommands = append(s.nodeCommands, cmdTreeParams) cmdAllSpaces := &cobra.Command{ - Use: "all-spaces [params]", + Use: "all-spaces", Short: "print all spaces", Args: cobra.RangeArgs(0, 0), Run: func(cmd *cobra.Command, args []string) { @@ -484,85 +497,68 @@ func (s *service) registerNodeCommands() { s.nodeCommands = append(s.nodeCommands, cmdAllSpaces) } -// -//func (s *service) registerScripts() { -// s.scripts["create-many"] = Script{Cmd: func(params []string) (res string, err error) { -// if len(params) != 5 { -// err = ErrIncorrectParamsCount -// return -// } -// peer, err := s.peers.Get(params[0]) -// if err != nil { -// return -// } -// last, err := strconv.Atoi(params[4]) -// if err != nil { -// return -// } -// if last <= 0 { -// err = fmt.Errorf("incorrect number of steps") -// return -// } -// -// for i := 0; i < last; i++ { -// _, err := s.client.AddText(context.Background(), peer.Address, &clientproto.AddTextRequest{ -// SpaceId: params[1], -// DocumentId: params[2], -// Text: params[3], -// }) -// if err != nil { -// return "", err -// } -// } -// return -// }} -// s.scripts["create-many-two-clients"] = Script{Cmd: func(params []string) (res string, err error) { -// if len(params) != 6 { -// err = ErrIncorrectParamsCount -// return -// } -// peer1, err := s.peers.Get(params[0]) -// if err != nil { -// return -// } -// peer2, err := s.peers.Get(params[1]) -// if err != nil { -// return -// } -// last, err := strconv.Atoi(params[5]) -// if err != nil { -// return -// } -// if last <= 0 { -// err = fmt.Errorf("incorrect number of steps") -// return -// } -// wg := &sync.WaitGroup{} -// var mError errs.Group -// createMany := func(peer peers.Peer) { -// defer wg.Done() -// for i := 0; i < last; i++ { -// _, err := s.client.AddText(context.Background(), peer.Address, &clientproto.AddTextRequest{ -// SpaceId: params[2], -// DocumentId: params[3], -// Text: params[4], -// IsSnapshot: rand.Int()%2 == 0, -// }) -// if err != nil { -// mError.Add(err) -// return -// } -// } -// } -// for _, p := range []peers.Peer{peer1, peer2} { -// wg.Add(1) -// createMany(p) -// } -// wg.Wait() -// if mError.Err() != nil { -// err = mError.Err() -// return -// } -// return -// }} -//} +func (s *service) registerScripts() { + cmdAddTextMany := &cobra.Command{ + Use: "add-text-many [text]", + Short: "add text to the document in the particular space in many clients at the same time with randomized snapshots", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + clients, _ := cmd.Flags().GetString("clients") + space, _ := cmd.Flags().GetString("space") + document, _ := cmd.Flags().GetString("document") + times, _ := cmd.Flags().GetInt("times") + if times <= 0 { + fmt.Println("the times parameter should be more than 0") + return + } + var addresses []string + for _, cl := range strings.Split(clients, ",") { + if len(cl) == 0 { + continue + } + server, err := s.peers.Get(cl) + if err != nil { + fmt.Println("no such client") + return + } + addresses = append(addresses, server.Address) + } + + wg := &sync.WaitGroup{} + var mError errs.Group + createMany := func(address string) { + defer wg.Done() + for i := 0; i < times; i++ { + _, err := s.client.AddText(context.Background(), address, &clientproto.AddTextRequest{ + SpaceId: space, + DocumentId: document, + Text: args[0], + IsSnapshot: rand.Int()%2 == 0, + }) + if err != nil { + mError.Add(err) + return + } + } + } + for _, p := range addresses { + wg.Add(1) + createMany(p) + } + wg.Wait() + if mError.Err() != nil { + fmt.Println("got errors while executing add many", mError.Err()) + return + } + return + }, + } + cmdAddTextMany.Flags().String("space", "", "the space where something is happening :-)") + cmdAddTextMany.Flags().String("document", "", "the document where something is happening :-)") + cmdAddTextMany.Flags().String("clients", "", "the aliases of clients with value separated by comma") + cmdAddTextMany.Flags().Int("times", 1, "how many times we should add the change") + cmdAddTextMany.MarkFlagRequired("space") + cmdAddTextMany.MarkFlagRequired("document") + cmdAddTextMany.MarkFlagRequired("clients") + s.scripts = append(s.scripts, cmdAddTextMany) +} From acf5b95646df8b51775a17672a23107860fd7d93 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Mon, 5 Dec 2022 17:21:14 +0100 Subject: [PATCH 23/32] Fix notifiable when creating sync tree --- common/commonspace/space.go | 2 +- common/commonspace/synctree/synctree.go | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/common/commonspace/space.go b/common/commonspace/space.go index a1ce64b0..4c654e17 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -108,7 +108,7 @@ func (s *space) LastUsage() time.Time { } func (s *space) Locked() bool { - log.With(zap.Bool("locked", s.treesUsed.Load() > 1)).Debug("space lock status check") + log.With(zap.Int32("trees used", s.treesUsed.Load())).Debug("space lock status check") return s.treesUsed.Load() > 1 } diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index 69fe04a4..c6461c8a 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -100,6 +100,9 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error syncTree.listener.Rebuild(syncTree) } syncTree.treeUsage.Add(1) + if syncTree.notifiable != nil { + syncTree.notifiable.UpdateHeads(objTree.ID(), objTree.Heads()) + } headUpdate := syncClient.CreateHeadUpdate(t, nil) err = syncClient.BroadcastAsync(headUpdate) @@ -133,6 +136,9 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error syncTree.listener.Rebuild(syncTree) } syncTree.treeUsage.Add(1) + if syncTree.notifiable != nil { + syncTree.notifiable.UpdateHeads(objTree.ID(), objTree.Heads()) + } headUpdate := syncClient.CreateHeadUpdate(t, nil) err = syncClient.BroadcastAsync(headUpdate) From a8507d8120e381d25d06c558f77b36fd01a319d6 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Mon, 5 Dec 2022 18:51:59 +0100 Subject: [PATCH 24/32] Update synctree ping logic --- common/commonspace/diffservice/diffservice.go | 2 +- common/commonspace/diffservice/diffsyncer.go | 15 ++++++++++- .../commonspace/diffservice/headnotifiable.go | 11 -------- .../settingsdocument/settingsdocument.go | 5 ++-- .../synctree/mock_synctree/mock_synctree.go | 14 ++++++++++ common/commonspace/synctree/synctree.go | 20 +++++++++----- common/commonspace/synctree/synctree_test.go | 3 +++ .../nodeconf/mock_nodeconf/mock_nodeconf.go | 26 ++++++++++++++----- 8 files changed, 68 insertions(+), 28 deletions(-) delete mode 100644 common/commonspace/diffservice/headnotifiable.go diff --git a/common/commonspace/diffservice/diffservice.go b/common/commonspace/diffservice/diffservice.go index d3ac3211..31a678a9 100644 --- a/common/commonspace/diffservice/diffservice.go +++ b/common/commonspace/diffservice/diffservice.go @@ -21,7 +21,7 @@ type TreeHeads struct { } type DiffService interface { - HeadNotifiable + UpdateHeads(id string, heads []string) HandleRangeRequest(ctx context.Context, req *spacesyncproto.HeadSyncRequest) (resp *spacesyncproto.HeadSyncResponse, err error) RemoveObjects(ids []string) AllIds() []string diff --git a/common/commonspace/diffservice/diffsyncer.go b/common/commonspace/diffservice/diffsyncer.go index 1618ee71..49947c0a 100644 --- a/common/commonspace/diffservice/diffsyncer.go +++ b/common/commonspace/diffservice/diffsyncer.go @@ -6,6 +6,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settingsdocument/deletionstate" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/rpcerr" @@ -116,7 +117,19 @@ func (d *diffSyncer) syncWithPeer(ctx context.Context, p peer.Peer) (err error) func (d *diffSyncer) pingTreesInCache(ctx context.Context, trees []string) { for _, tId := range trees { - _, _ = d.cache.GetTree(ctx, d.spaceId, tId) + tree, err := d.cache.GetTree(ctx, d.spaceId, tId) + if err != nil { + continue + } + syncTree, ok := tree.(synctree.SyncTree) + if !ok { + continue + } + // the idea why we call it directly is that if we try to get it from cache + // it may be already there (i.e. loaded) + // and build func will not be called, thus we won't sync the tree + // therefore we just do it manually + syncTree.Ping() } } diff --git a/common/commonspace/diffservice/headnotifiable.go b/common/commonspace/diffservice/headnotifiable.go deleted file mode 100644 index 8e987dc9..00000000 --- a/common/commonspace/diffservice/headnotifiable.go +++ /dev/null @@ -1,11 +0,0 @@ -package diffservice - -type HeadNotifiable interface { - UpdateHeads(id string, heads []string) -} - -type HeadNotifiableFunc func(id string, heads []string) - -func (h HeadNotifiableFunc) UpdateHeads(id string, heads []string) { - h(id, heads) -} diff --git a/common/commonspace/settingsdocument/settingsdocument.go b/common/commonspace/settingsdocument/settingsdocument.go index e0241229..644fd692 100644 --- a/common/commonspace/settingsdocument/settingsdocument.go +++ b/common/commonspace/settingsdocument/settingsdocument.go @@ -110,8 +110,9 @@ func (s *settingsDocument) Rebuild(tr tree.ObjectTree) { } func (s *settingsDocument) Init(ctx context.Context) (err error) { - log.Debug("space settings id", zap.String("id", s.store.SpaceSettingsId())) - s.SyncTree, err = s.buildFunc(ctx, s.store.SpaceSettingsId(), s) + settingsId := s.store.SpaceSettingsId() + log.Debug("space settings id", zap.String("id", settingsId)) + s.SyncTree, err = s.buildFunc(ctx, settingsId, s) if err != nil { return } diff --git a/common/commonspace/synctree/mock_synctree/mock_synctree.go b/common/commonspace/synctree/mock_synctree/mock_synctree.go index 8f726e61..c8f84390 100644 --- a/common/commonspace/synctree/mock_synctree/mock_synctree.go +++ b/common/commonspace/synctree/mock_synctree/mock_synctree.go @@ -368,6 +368,20 @@ func (mr *MockSyncTreeMockRecorder) Lock() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Lock", reflect.TypeOf((*MockSyncTree)(nil).Lock)) } +// Ping mocks base method. +func (m *MockSyncTree) Ping() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Ping") + ret0, _ := ret[0].(error) + return ret0 +} + +// Ping indicates an expected call of Ping. +func (mr *MockSyncTreeMockRecorder) Ping() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ping", reflect.TypeOf((*MockSyncTree)(nil).Ping)) +} + // RLock mocks base method. func (m *MockSyncTree) RLock() { m.ctrl.T.Helper() diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index c6461c8a..cd874462 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/diffservice" spacestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler" @@ -26,9 +25,14 @@ var ( ErrSyncTreeDeleted = errors.New("sync tree is deleted") ) +type HeadNotifiable interface { + UpdateHeads(id string, heads []string) +} + type SyncTree interface { tree.ObjectTree synchandler.SyncHandler + Ping() (err error) } // SyncTree sends head updates to sync service and also sends new changes to update listener @@ -36,7 +40,7 @@ type syncTree struct { tree.ObjectTree synchandler.SyncHandler syncClient SyncClient - notifiable diffservice.HeadNotifiable + notifiable HeadNotifiable listener updatelistener.UpdateListener treeUsage *atomic.Int32 isClosed bool @@ -54,7 +58,7 @@ type CreateDeps struct { SpaceId string Payload tree.ObjectTreeCreatePayload Configuration nodeconf.Configuration - HeadNotifiable diffservice.HeadNotifiable + HeadNotifiable HeadNotifiable StreamPool syncservice.StreamPool Listener updatelistener.UpdateListener AclList list.ACLList @@ -66,7 +70,7 @@ type BuildDeps struct { SpaceId string StreamPool syncservice.StreamPool Configuration nodeconf.Configuration - HeadNotifiable diffservice.HeadNotifiable + HeadNotifiable HeadNotifiable Listener updatelistener.UpdateListener AclList list.ACLList SpaceStorage spacestorage.SpaceStorage @@ -246,9 +250,6 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy if isFirstBuild { // send to everybody, because everybody should know that the node or client got new tree err = syncTree.syncClient.BroadcastAsync(headUpdate) - } else { - // send either to everybody if client or to replica set if node - err = syncTree.syncClient.BroadcastAsyncOrSendResponsible(headUpdate) } return } @@ -347,3 +348,8 @@ func (s *syncTree) checkAlive() (err error) { } return } + +func (s *syncTree) Ping() (err error) { + headUpdate := s.syncClient.CreateHeadUpdate(s, nil) + return s.syncClient.BroadcastAsyncOrSendResponsible(headUpdate) +} diff --git a/common/commonspace/synctree/synctree_test.go b/common/commonspace/synctree/synctree_test.go index c55be822..f35cd396 100644 --- a/common/commonspace/synctree/synctree_test.go +++ b/common/commonspace/synctree/synctree_test.go @@ -16,6 +16,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" + "sync/atomic" "testing" ) @@ -67,6 +68,7 @@ func Test_DeriveSyncTree(t *testing.T) { Payload: expectedPayload, Listener: updateListenerMock, SpaceStorage: spaceStorageMock, + TreeUsage: &atomic.Int32{}, } _, err := DeriveSyncTree(ctx, deps) @@ -103,6 +105,7 @@ func Test_CreateSyncTree(t *testing.T) { Payload: expectedPayload, Listener: updateListenerMock, SpaceStorage: spaceStorageMock, + TreeUsage: &atomic.Int32{}, } _, err := CreateSyncTree(ctx, deps) diff --git a/common/nodeconf/mock_nodeconf/mock_nodeconf.go b/common/nodeconf/mock_nodeconf/mock_nodeconf.go index 206c2528..88e7505d 100644 --- a/common/nodeconf/mock_nodeconf/mock_nodeconf.go +++ b/common/nodeconf/mock_nodeconf/mock_nodeconf.go @@ -195,19 +195,33 @@ func (m *MockConfConnector) EXPECT() *MockConfConnectorMockRecorder { return m.recorder } -// DialResponsiblePeers mocks base method. -func (m *MockConfConnector) DialResponsiblePeers(arg0 context.Context, arg1 string) ([]peer.Peer, error) { +// Configuration mocks base method. +func (m *MockConfConnector) Configuration() nodeconf.Configuration { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DialResponsiblePeers", arg0, arg1) + ret := m.ctrl.Call(m, "Configuration") + ret0, _ := ret[0].(nodeconf.Configuration) + return ret0 +} + +// Configuration indicates an expected call of Configuration. +func (mr *MockConfConnectorMockRecorder) Configuration() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Configuration", reflect.TypeOf((*MockConfConnector)(nil).Configuration)) +} + +// DialInactiveResponsiblePeers mocks base method. +func (m *MockConfConnector) DialInactiveResponsiblePeers(arg0 context.Context, arg1 string, arg2 []string) ([]peer.Peer, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DialInactiveResponsiblePeers", arg0, arg1, arg2) ret0, _ := ret[0].([]peer.Peer) ret1, _ := ret[1].(error) return ret0, ret1 } -// DialResponsiblePeers indicates an expected call of DialResponsiblePeers. -func (mr *MockConfConnectorMockRecorder) DialResponsiblePeers(arg0, arg1 interface{}) *gomock.Call { +// DialInactiveResponsiblePeers indicates an expected call of DialInactiveResponsiblePeers. +func (mr *MockConfConnectorMockRecorder) DialInactiveResponsiblePeers(arg0, arg1, arg2 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DialResponsiblePeers", reflect.TypeOf((*MockConfConnector)(nil).DialResponsiblePeers), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DialInactiveResponsiblePeers", reflect.TypeOf((*MockConfConnector)(nil).DialInactiveResponsiblePeers), arg0, arg1, arg2) } // GetResponsiblePeers mocks base method. From f9a064e9aa9b3781ec9b61515d1466c5dd31f7e2 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Mon, 5 Dec 2022 19:11:16 +0100 Subject: [PATCH 25/32] Remove duplicated code --- common/commonspace/synctree/synctree.go | 31 +++++++++++-------------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index cd874462..967e3dc9 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -100,13 +100,7 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error t = syncTree syncTree.Lock() defer syncTree.Unlock() - if syncTree.listener != nil { - syncTree.listener.Rebuild(syncTree) - } - syncTree.treeUsage.Add(1) - if syncTree.notifiable != nil { - syncTree.notifiable.UpdateHeads(objTree.ID(), objTree.Heads()) - } + syncTree.afterBuild() headUpdate := syncClient.CreateHeadUpdate(t, nil) err = syncClient.BroadcastAsync(headUpdate) @@ -136,13 +130,7 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error syncTree.Lock() defer syncTree.Unlock() // TODO: refactor here because the code is duplicated, when we create a tree we should only create a storage and then build a tree - if syncTree.listener != nil { - syncTree.listener.Rebuild(syncTree) - } - syncTree.treeUsage.Add(1) - if syncTree.notifiable != nil { - syncTree.notifiable.UpdateHeads(objTree.ID(), objTree.Heads()) - } + syncTree.afterBuild() headUpdate := syncClient.CreateHeadUpdate(t, nil) err = syncClient.BroadcastAsync(headUpdate) @@ -240,10 +228,7 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy t = syncTree syncTree.Lock() defer syncTree.Unlock() - if syncTree.listener != nil { - syncTree.listener.Rebuild(syncTree) - } - syncTree.treeUsage.Add(1) + syncTree.afterBuild() headUpdate := syncTree.syncClient.CreateHeadUpdate(t, nil) // here we will have different behaviour based on who is sending this update @@ -353,3 +338,13 @@ func (s *syncTree) Ping() (err error) { headUpdate := s.syncClient.CreateHeadUpdate(s, nil) return s.syncClient.BroadcastAsyncOrSendResponsible(headUpdate) } + +func (s *syncTree) afterBuild() { + if s.listener != nil { + s.listener.Rebuild(s) + } + s.treeUsage.Add(1) + if s.notifiable != nil { + s.notifiable.UpdateHeads(s.ID(), s.Heads()) + } +} From 50e3d70f702b92a4267c43ebbd192e5a16b9a10f Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Mon, 5 Dec 2022 20:02:26 +0100 Subject: [PATCH 26/32] Fix incorrect args in debug --- common/commonspace/space.go | 5 +++-- util/cmd/debug/api/service.go | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/common/commonspace/space.go b/common/commonspace/space.go index 4c654e17..8d58d864 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -108,8 +108,9 @@ func (s *space) LastUsage() time.Time { } func (s *space) Locked() bool { - log.With(zap.Int32("trees used", s.treesUsed.Load())).Debug("space lock status check") - return s.treesUsed.Load() > 1 + locked := s.treesUsed.Load() > 1 + log.With(zap.Int32("trees used", s.treesUsed.Load()), zap.Bool("locked", locked)).Debug("space lock status check") + return locked } func (s *space) Id() string { diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go index 20818643..d225db76 100644 --- a/util/cmd/debug/api/service.go +++ b/util/cmd/debug/api/service.go @@ -195,7 +195,7 @@ func (s *service) registerClientCommands() { fmt.Println("couldn't delete the document", err) return } - fmt.Println("deleted", args[1]) + fmt.Println("deleted", args[0]) }, } cmdDeleteDocument.Flags().String("space", "", "the space where something is happening :-)") From 6f8a21e547d2873c3cb6b6685abe941052e7d948 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Mon, 5 Dec 2022 23:04:56 +0100 Subject: [PATCH 27/32] More fixes to settingsdocument --- .../settingsdocument/settingsdocument.go | 17 +++++++++++++++++ .../settingsdocument/settingsdocument_test.go | 2 ++ 2 files changed, 19 insertions(+) diff --git a/common/commonspace/settingsdocument/settingsdocument.go b/common/commonspace/settingsdocument/settingsdocument.go index 644fd692..f8f3fda6 100644 --- a/common/commonspace/settingsdocument/settingsdocument.go +++ b/common/commonspace/settingsdocument/settingsdocument.go @@ -3,6 +3,7 @@ package settingsdocument import ( "context" + "errors" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/settingsdocument/deletionstate" @@ -22,6 +23,12 @@ type SettingsDocument interface { DeleteObject(id string) (err error) } +var ( + ErrDeleteSelf = errors.New("cannot delete seld") + ErrAlreadyDeleted = errors.New("the document is already deleted") + ErrDocDoesNotExist = errors.New("the document does not exist") +) + type BuildTreeFunc func(ctx context.Context, id string, listener updatelistener.UpdateListener) (t synctree.SyncTree, err error) type Deps struct { @@ -129,9 +136,19 @@ func (s *settingsDocument) Close() error { func (s *settingsDocument) DeleteObject(id string) (err error) { s.Lock() defer s.Unlock() + if s.ID() == id { + err = ErrDeleteSelf + return + } if s.deletionState.Exists(id) { + err = ErrAlreadyDeleted return nil } + _, err = s.store.TreeStorage(id) + if err != nil { + err = ErrDocDoesNotExist + return + } // TODO: add snapshot logic res, err := s.deletionState.CreateDeleteChange(id, false) diff --git a/common/commonspace/settingsdocument/settingsdocument_test.go b/common/commonspace/settingsdocument/settingsdocument_test.go index d69e0fbc..8b69fe7a 100644 --- a/common/commonspace/settingsdocument/settingsdocument_test.go +++ b/common/commonspace/settingsdocument/settingsdocument_test.go @@ -129,7 +129,9 @@ func TestSettingsDocument_DeleteObject(t *testing.T) { delId := "delId" + fx.syncTree.EXPECT().ID().Return("syncId") fx.delState.EXPECT().Exists(delId).Return(false) + fx.spaceStorage.EXPECT().TreeStorage(delId).Return(nil, nil) res := []byte("settingsData") fx.delState.EXPECT().CreateDeleteChange(delId, false).Return(res, nil) From de12b352167aa3971fc99efb549ebbb01fdd1323 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 6 Dec 2022 10:19:53 +0100 Subject: [PATCH 28/32] Change tree creation logic --- client/document/service.go | 6 +-- client/document/textdocument/textdocument.go | 13 +---- common/commonspace/space.go | 38 ++++++------- common/commonspace/synctree/synctree.go | 57 ++++++-------------- common/commonspace/synctree/synctree_test.go | 13 +---- 5 files changed, 36 insertions(+), 91 deletions(-) diff --git a/client/document/service.go b/client/document/service.go index 467cc71a..23dff39e 100644 --- a/client/document/service.go +++ b/client/document/service.go @@ -53,11 +53,7 @@ func (s *service) CreateDocument(spaceId string) (id string, err error) { if err != nil { return } - doc, err := textdocument.CreateTextDocument(context.Background(), space, s.account, nil) - if err != nil { - return - } - id = doc.ID() + id, err = textdocument.CreateTextDocument(context.Background(), space, s.account) return } diff --git a/client/document/textdocument/textdocument.go b/client/document/textdocument/textdocument.go index 78a2573b..d47ccf50 100644 --- a/client/document/textdocument/textdocument.go +++ b/client/document/textdocument/textdocument.go @@ -27,22 +27,13 @@ type textDocument struct { func CreateTextDocument( ctx context.Context, space commonspace.Space, - account account.Service, - listener updatelistener.UpdateListener) (doc TextDocument, err error) { + account account.Service) (id string, err error) { payload := tree.ObjectTreeCreatePayload{ SignKey: account.Account().SignKey, SpaceId: space.Id(), Identity: account.Account().Identity, } - t, err := space.CreateTree(ctx, payload, listener) - if err != nil { - return - } - - return &textDocument{ - ObjectTree: t, - account: account, - }, nil + return space.CreateTree(ctx, payload) } func NewTextDocument(ctx context.Context, space commonspace.Space, id string, listener updatelistener.UpdateListener, account account.Service) (doc TextDocument, err error) { diff --git a/common/commonspace/space.go b/common/commonspace/space.go index 8d58d864..e23796a7 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -75,8 +75,8 @@ type Space interface { SpaceSyncRpc() RpcHandler - DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload, listener updatelistener.UpdateListener) (tree.ObjectTree, error) - CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload, listener updatelistener.UpdateListener) (tree.ObjectTree, error) + DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (string, error) + CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (string, error) BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (tree.ObjectTree, error) DeleteTree(ctx context.Context, id string) (err error) @@ -210,40 +210,34 @@ func (s *space) DebugAllHeads() []diffservice.TreeHeads { return s.diffService.DebugAllHeads() } -func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload, listener updatelistener.UpdateListener) (tr tree.ObjectTree, err error) { +func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (id string, err error) { if s.isClosed.Load() { err = ErrSpaceClosed return } deps := synctree.CreateDeps{ - SpaceId: s.id, - Payload: payload, - StreamPool: s.syncService.StreamPool(), - Configuration: s.configuration, - HeadNotifiable: s.diffService, - Listener: listener, - AclList: s.aclList, - SpaceStorage: s.storage, - TreeUsage: &s.treesUsed, + SpaceId: s.id, + Payload: payload, + StreamPool: s.syncService.StreamPool(), + Configuration: s.configuration, + AclList: s.aclList, + SpaceStorage: s.storage, } return synctree.DeriveSyncTree(ctx, deps) } -func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload, listener updatelistener.UpdateListener) (tr tree.ObjectTree, err error) { +func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (id string, err error) { if s.isClosed.Load() { err = ErrSpaceClosed return } deps := synctree.CreateDeps{ - SpaceId: s.id, - Payload: payload, - StreamPool: s.syncService.StreamPool(), - Configuration: s.configuration, - HeadNotifiable: s.diffService, - Listener: listener, - AclList: s.aclList, - SpaceStorage: s.storage, - TreeUsage: &s.treesUsed, + SpaceId: s.id, + Payload: payload, + StreamPool: s.syncService.StreamPool(), + Configuration: s.configuration, + AclList: s.aclList, + SpaceStorage: s.storage, } return synctree.CreateSyncTree(ctx, deps) } diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index 967e3dc9..830d8104 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -55,15 +55,12 @@ var buildObjectTree = tree.BuildObjectTree var createSyncClient = newSyncClient type CreateDeps struct { - SpaceId string - Payload tree.ObjectTreeCreatePayload - Configuration nodeconf.Configuration - HeadNotifiable HeadNotifiable - StreamPool syncservice.StreamPool - Listener updatelistener.UpdateListener - AclList list.ACLList - SpaceStorage spacestorage.SpaceStorage - TreeUsage *atomic.Int32 + SpaceId string + Payload tree.ObjectTreeCreatePayload + Configuration nodeconf.Configuration + StreamPool syncservice.StreamPool + AclList list.ACLList + SpaceStorage spacestorage.SpaceStorage } type BuildDeps struct { @@ -78,36 +75,25 @@ type BuildDeps struct { TreeUsage *atomic.Int32 } -func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error) { +func DeriveSyncTree(ctx context.Context, deps CreateDeps) (id string, err error) { objTree, err := createDerivedObjectTree(deps.Payload, deps.AclList, deps.SpaceStorage.CreateTreeStorage) if err != nil { return } + syncClient := createSyncClient( deps.SpaceId, deps.StreamPool, sharedFactory, deps.Configuration) - syncTree := &syncTree{ - ObjectTree: objTree, - syncClient: syncClient, - notifiable: deps.HeadNotifiable, - treeUsage: deps.TreeUsage, - listener: deps.Listener, - } - syncHandler := newSyncTreeHandler(syncTree, syncClient) - syncTree.SyncHandler = syncHandler - t = syncTree - syncTree.Lock() - defer syncTree.Unlock() - syncTree.afterBuild() - headUpdate := syncClient.CreateHeadUpdate(t, nil) - err = syncClient.BroadcastAsync(headUpdate) + headUpdate := syncClient.CreateHeadUpdate(objTree, nil) + syncClient.BroadcastAsync(headUpdate) + id = objTree.ID() return } -func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error) { +func CreateSyncTree(ctx context.Context, deps CreateDeps) (id string, err error) { objTree, err := createObjectTree(deps.Payload, deps.AclList, deps.SpaceStorage.CreateTreeStorage) if err != nil { return @@ -117,23 +103,10 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error deps.StreamPool, GetRequestFactory(), deps.Configuration) - syncTree := &syncTree{ - ObjectTree: objTree, - syncClient: syncClient, - notifiable: deps.HeadNotifiable, - treeUsage: deps.TreeUsage, - listener: deps.Listener, - } - syncHandler := newSyncTreeHandler(syncTree, syncClient) - syncTree.SyncHandler = syncHandler - t = syncTree - syncTree.Lock() - defer syncTree.Unlock() - // TODO: refactor here because the code is duplicated, when we create a tree we should only create a storage and then build a tree - syncTree.afterBuild() - headUpdate := syncClient.CreateHeadUpdate(t, nil) - err = syncClient.BroadcastAsync(headUpdate) + headUpdate := syncClient.CreateHeadUpdate(objTree, nil) + syncClient.BroadcastAsync(headUpdate) + id = objTree.ID() return } diff --git a/common/commonspace/synctree/synctree_test.go b/common/commonspace/synctree/synctree_test.go index f35cd396..bdf2c451 100644 --- a/common/commonspace/synctree/synctree_test.go +++ b/common/commonspace/synctree/synctree_test.go @@ -16,7 +16,6 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" - "sync/atomic" "testing" ) @@ -43,7 +42,6 @@ func Test_DeriveSyncTree(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - updateListenerMock := mock_updatelistener.NewMockUpdateListener(ctrl) syncClientMock := mock_synctree.NewMockSyncClient(ctrl) aclListMock := mock_list.NewMockACLList(ctrl) objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl)) @@ -59,16 +57,13 @@ func Test_DeriveSyncTree(t *testing.T) { return syncClientMock } headUpdate := &treechangeproto.TreeSyncMessage{} - syncClientMock.EXPECT().CreateHeadUpdate(syncTreeMatcher{objTreeMock, syncClientMock, updateListenerMock}, gomock.Nil()).Return(headUpdate) + syncClientMock.EXPECT().CreateHeadUpdate(gomock.Any(), gomock.Nil()).Return(headUpdate) syncClientMock.EXPECT().BroadcastAsync(gomock.Eq(headUpdate)).Return(nil) - updateListenerMock.EXPECT().Rebuild(gomock.Any()) deps := CreateDeps{ AclList: aclListMock, SpaceId: spaceId, Payload: expectedPayload, - Listener: updateListenerMock, SpaceStorage: spaceStorageMock, - TreeUsage: &atomic.Int32{}, } _, err := DeriveSyncTree(ctx, deps) @@ -80,7 +75,6 @@ func Test_CreateSyncTree(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - updateListenerMock := mock_updatelistener.NewMockUpdateListener(ctrl) syncClientMock := mock_synctree.NewMockSyncClient(ctrl) aclListMock := mock_list.NewMockACLList(ctrl) objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl)) @@ -96,16 +90,13 @@ func Test_CreateSyncTree(t *testing.T) { return syncClientMock } headUpdate := &treechangeproto.TreeSyncMessage{} - syncClientMock.EXPECT().CreateHeadUpdate(syncTreeMatcher{objTreeMock, syncClientMock, updateListenerMock}, gomock.Nil()).Return(headUpdate) + syncClientMock.EXPECT().CreateHeadUpdate(gomock.Any(), gomock.Nil()).Return(headUpdate) syncClientMock.EXPECT().BroadcastAsync(gomock.Eq(headUpdate)).Return(nil) - updateListenerMock.EXPECT().Rebuild(gomock.Any()) deps := CreateDeps{ AclList: aclListMock, SpaceId: spaceId, Payload: expectedPayload, - Listener: updateListenerMock, SpaceStorage: spaceStorageMock, - TreeUsage: &atomic.Int32{}, } _, err := CreateSyncTree(ctx, deps) From 761772f09aed77b665882e1d3d150f3325071aab Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 6 Dec 2022 16:36:17 +0100 Subject: [PATCH 29/32] Add build helpers for local testing --- .gitignore | 4 +- etc/client.yml | 26 ++++++------- etc/config.yml | 26 ++++++------- etc/configs/client1.yml | 26 ++++++------- etc/configs/client2.yml | 26 ++++++------- etc/configs/cons1.yml | 8 ++-- etc/configs/cons2.yml | 8 ++-- etc/configs/cons3.yml | 8 ++-- etc/configs/node1.yml | 26 ++++++------- etc/configs/node2.yml | 26 ++++++------- etc/configs/node3.yml | 26 ++++++------- playground/Makefile | 33 ++++++++++++++++ playground/init.sh | 84 ++++++++++++++++++++++++++++++++++++++++ util/cmd/nodesgen/gen.go | 24 ++++++------ 14 files changed, 234 insertions(+), 117 deletions(-) create mode 100644 playground/Makefile create mode 100755 playground/init.sh diff --git a/.gitignore b/.gitignore index 26edddfa..f80831a8 100644 --- a/.gitignore +++ b/.gitignore @@ -8,8 +8,8 @@ # Test binary, built with `go test -c` *.test -# playground folder for testing different clients -playground +# playground/tmp folder for testing different clients +playground/tmp # .paw folder for macos paw client .paw diff --git a/etc/client.yml b/etc/client.yml index 95a044e0..46d748f5 100644 --- a/etc/client.yml +++ b/etc/client.yml @@ -5,27 +5,27 @@ grpcServer: - 127.0.0.1:4630 tls: false account: - peerId: 12D3KooWGqJFMrA5NUx2Yn2rGPBUkz3bbmynsqLEmxdcPYEaFSiZ - peerKey: XZcLB5xuffw2Bz3PJtb1feFacM2fR9+q8ik9YgzHzLtoPvTaz1X7wVgxhMpxcrUJIywRjffqsuEPJ9d/5pFIDg== - signingKey: PNcZdEvKsu9LShQmgOhKHbBpO1uyHvEM/QO5PUu8rVMuSHBoGvFbcFZNNZ2beFgSr/N9EitzY81QQRoIh5c+Gg== - encryptionKey: MIIEowIBAAKCAQEA3fh3Bd/a3N+7aDwln5rJU6BXL/0D/h2bMXH832d40Oac3OARVxMpxpxT02I6y8uLq0pS41mjtIK4+QtBDfeV+GAcAgvlywu7Be1tM0I5ohMXC0hNnLUCUwOMcQx/ylOjzUdQHna9woZMh2kdhFowViy3KhA/ItR8YpfgTG8VP6DMXW+CxGZR0sxzBVpSGHxGgcdZnrWc5/4vyb5IhY/rAxefQa+lieoFwnTo0jvLBrLhyhryK7SBGd8uwPZRoYJaCTs2BpCrQ7Osc2RDtYPafQnm8tVR2elmc43fN0Sq86PdMl3A0XofCVVW708uCPiq950cXZnJoh1wQeNIqhqpuQIDAQABAoIBAGxo1XjBBBusCdO2zIlPB9UYEn0VjcWmoA1eJqrV1mPwvdwCc3WbnmOqJiavaxftqaFXA3SWayXWUpEPtg4kRdKw3f0B4pFwgT873oGSbqOBv1d7UKygmyoAKa9s81zVzMKNecvnInbHMMlRxWDGy6TK4gphNPTF4pokox+xgSc5cJB7cBtmIZo+8CQA5/q5Xm2W9ih1cRPullmVXuuQYrv2/5oDoBCdaiCAr5WTg4C8pHEOo6z+j7kp9Yeh7Wc4LmEnnCEJKKTbUcNk/pXclpVkMuE983SguyD5Sy3UIXRejSzt+x6KW0k6MolBbRGAlDbVAHxvqp7AQiAIavVCXAECgYEA5ViMqjawjpbIK39DOSozRqaBeFVYrfLI6mkSSQrZqpJzgBvfVo/DDwWP9FgX/TEjDWHBilfylmN8/dcuzJHgQgw/JnckTJbsfnWv71PTxI/YgGEF0L7OmePSY02p3jfHq5zwVg9yW3jPacLTLn99pVjchjShDyzwVjZ5AK2Dm/ECgYEA98R8d3/GjOi0iUacFpks9xlbu4pn7SfCFOBaq5a+EkXSauWMRuGaPbZ5NIn7rWygfPW6r/jZrmCyDbWSoPLsdlqb+oEc0wOCN0dshhMGrzdkZMxpy9GNt15+SDhwQZCK/FI4DdEmlvBkLUIUSySIWVDfwJHnddDHO3EhH6GgUkkCgYAf8mK9vxp+8j/11yddCiTUXZNBWNoeeOhFxtcWN520ZewS108X9rScHhE8Xx0QVszkK07TX4baLgeWMGhDdLqBWMVfLU9wH8HXp7sXIl0oT0VANMOjnUCYLST8UjAsVSbKH/VWd5ZdaYmy2MGkA3xUEPm+9AvPWlosGDBoyMLBcQKBgEOKO0ez/CLjOHuHVPtQDBLbxcbMxuG+Ccj5E55cvDls8RwUsPWNgCc8e7PXvVScHO+TaK2Zj3VahI76JRtcvRrSPly+H2ZiOXfqL2oo+5R97A8SLfDSkegfiRsUz3z/8vMvUnppvjQ9GYHA1plZPxXh1uy+mTLjk7vfbeEahQKJAoGBAIDbI7SL7MmWumSnPPwwxfQ5DaWwdn7yReWKUFlO3WFG9oN15M43NXG3zZoUsPdaeTNcvgDRQ4PmtZ+zQonac+obHNsq8ZZP7KjyFJNrrIgfeUDmdnW8u+UPxPjt1J4YStsLX5Ea+x5uE8qGWmK0xYCUkntBFgENhbD7qDokB1+q + peerId: 12D3KooWAQFT6zznsaGXVfuNpwBRzNJz7baL7LrEizLTTja9bjZX + peerKey: ltnZjSrDLpimgrNjU6fPfIJXFvezWBWG/lAN1TwexJcIribJwjn4I+moUi4a9V++E+7e1qT5Th1bcSSuVyrWNg== + signingKey: dq9WuXES/kTW7fiTmSrM0aXjkYxrXVe6yb9JrZCGvDxltONioEDqeBFntz8FAupeOsgxbq4SsrsBri9jSdFCXw== + encryptionKey: MIIEogIBAAKCAQEArl641+uxFrnsM8mkKYQFa56rJoxSvdmBDtX584V6eNCp0PDxj+tkZggjist4BDwJQvGYCckuTDFU60l9dKMFsY8Eqe+2BnNXdoSZtebIQeOS3A7EHW8I+CTaFHe+Ty/2TDGRQnJzxGPCwhJ9qi9YSOi4P6AgxGdTt+5K7gvyuldhJd1XgMBmcjfPqmNqG0nQOEBBSOvcnAd3R8Tl7ayK6s3axDhqOvXeCXkI6ZG1NI6g3TPBYL+klgFzsDkvABhW4vq5IydZR25mGfqPv+vZ48a1rllaxbG9mGhGMj1BfcV0vqEMECWJOlHca0gVISJJm+ni9q5TRQ+Z0eMiuILl/wIDAQABAoIBAE8YaICJSSsl6x8SuIScfljzAG/b9yxnHUO9jEQKqCNlg6JjqS+/dytRRc4PvcEt+oWDUZQezgGB3yNbkqz1xf9lAJiVQ9xpNaNtQsxggzZgJJ3tlMhFNaxaCxJ9vrXs66xkT5/0is7q8c1W1en8z+9CoVE7MaHlvPQSA6s3gENF3+1AUgaoMGK2hhqc7rtC4ANl8DIndEgFCkoXVnIZwQXlcam4WIuSavcuTRlLdPJxP4sHYf5hBTgF1+0EeIeuOzHOzL4Dzz/GbCNMYEwjR0TceNOZ93OrXH51BZQP4B0g6S4vbSlIj4FjNQlvW/BbDn1VedWqAmRhSq6Fop4MTgECgYEAzddpqQKY667c3BEFxxPRkOAwYuHHPhMdiwb/78zB4wd1Q4v9E9MuEGyXqojQH9X7VIl5pfNJXQ4j2TatwUEonnfu3T6hij2aQN+PN81GIBIJvF8qeeZtD8+jhS6BXR/Hh/D2hkWHfjiynjTmJYMXod5vYD6eTaiLw/cyED4qz6cCgYEA2NwXGROPcdnkYfQAI8kKVm/8IokcBXaCJxf4w1fj4KhRxjXw6lmh2070EfsjAslw+SNxhXh1a/cZQ4JkzUMmQezAXdlbiHZ9g/BbVG4R2xezEsxnRimlieBQ+1stzWId1hO5KurybZKvCF5NOOuNjwE7wgDHV1SPjhI3H/LpwekCgYANxpbZqsTVMRSy3ajHU/o4eeiDFZ0h+GGHxmYmhEuNiBg+9wVu6Dky/DGCRjm3h7iURccQZiHIyoN3rAMg5d10DY68284v1EOYh92r3F8PEmX4Z14OXm96GWlWJnCd7NyLqoK1Jb4VonHByMSGSimwuZQ2mro5dEg2Szrcf2yaDQKBgDEGkLI6mdNDTz5VyzJL4OpppraoCI2znPj5kmOXGw1PAC2vRCe228CYuNTX0bJvl/q66I8kDGe8FRoOAHvnEl8VBugwm2DeaMHLNNqBh8fgM7usOizCfYoODEDG/DPSWqxrCRGKzAO5hZh+uTaFChuqS7gwNOCpXUrhE1VFtVMBAoGAFcKs62/+1FOqcBGgfuCtNXMmS3mnEogWaCYyfPwBioZR8SBeoR21hUd7H7JRi4Ho984xYgbnAB76b+UDjgvSnut9eahZmzAxuvxvvUHiqb/wxAmibzov0Di7c+xtbA8XOF2U1lwZ+i89OpxRnEV8b4Dr7fzjed6BVgR+SUzMkMs= apiServer: listenAddrs: - 127.0.0.1:8090 tls: false nodes: - - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj + - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo address: 127.0.0.1:4430 - signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== - - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 + signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= + - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC address: 127.0.0.1:4431 - signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== - encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= - - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF + signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== + encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= + - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W address: 127.0.0.1:4432 - signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== - encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN + signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== + encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/config.yml b/etc/config.yml index 5d65ce02..09984fbc 100644 --- a/etc/config.yml +++ b/etc/config.yml @@ -5,27 +5,27 @@ grpcServer: - 127.0.0.1:4430 tls: false account: - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj - peerKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== + peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo + peerKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= apiServer: listenAddrs: - 127.0.0.1:8080 tls: false nodes: - - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj + - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo address: 127.0.0.1:4430 - signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== - - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 + signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= + - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC address: 127.0.0.1:4431 - signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== - encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= - - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF + signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== + encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= + - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W address: 127.0.0.1:4432 - signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== - encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN + signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== + encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/client1.yml b/etc/configs/client1.yml index 4d9f6e45..cb45e128 100755 --- a/etc/configs/client1.yml +++ b/etc/configs/client1.yml @@ -5,27 +5,27 @@ grpcServer: - 127.0.0.1:4630 tls: false account: - peerId: 12D3KooWGqJFMrA5NUx2Yn2rGPBUkz3bbmynsqLEmxdcPYEaFSiZ - peerKey: XZcLB5xuffw2Bz3PJtb1feFacM2fR9+q8ik9YgzHzLtoPvTaz1X7wVgxhMpxcrUJIywRjffqsuEPJ9d/5pFIDg== - signingKey: PNcZdEvKsu9LShQmgOhKHbBpO1uyHvEM/QO5PUu8rVMuSHBoGvFbcFZNNZ2beFgSr/N9EitzY81QQRoIh5c+Gg== - encryptionKey: MIIEowIBAAKCAQEA3fh3Bd/a3N+7aDwln5rJU6BXL/0D/h2bMXH832d40Oac3OARVxMpxpxT02I6y8uLq0pS41mjtIK4+QtBDfeV+GAcAgvlywu7Be1tM0I5ohMXC0hNnLUCUwOMcQx/ylOjzUdQHna9woZMh2kdhFowViy3KhA/ItR8YpfgTG8VP6DMXW+CxGZR0sxzBVpSGHxGgcdZnrWc5/4vyb5IhY/rAxefQa+lieoFwnTo0jvLBrLhyhryK7SBGd8uwPZRoYJaCTs2BpCrQ7Osc2RDtYPafQnm8tVR2elmc43fN0Sq86PdMl3A0XofCVVW708uCPiq950cXZnJoh1wQeNIqhqpuQIDAQABAoIBAGxo1XjBBBusCdO2zIlPB9UYEn0VjcWmoA1eJqrV1mPwvdwCc3WbnmOqJiavaxftqaFXA3SWayXWUpEPtg4kRdKw3f0B4pFwgT873oGSbqOBv1d7UKygmyoAKa9s81zVzMKNecvnInbHMMlRxWDGy6TK4gphNPTF4pokox+xgSc5cJB7cBtmIZo+8CQA5/q5Xm2W9ih1cRPullmVXuuQYrv2/5oDoBCdaiCAr5WTg4C8pHEOo6z+j7kp9Yeh7Wc4LmEnnCEJKKTbUcNk/pXclpVkMuE983SguyD5Sy3UIXRejSzt+x6KW0k6MolBbRGAlDbVAHxvqp7AQiAIavVCXAECgYEA5ViMqjawjpbIK39DOSozRqaBeFVYrfLI6mkSSQrZqpJzgBvfVo/DDwWP9FgX/TEjDWHBilfylmN8/dcuzJHgQgw/JnckTJbsfnWv71PTxI/YgGEF0L7OmePSY02p3jfHq5zwVg9yW3jPacLTLn99pVjchjShDyzwVjZ5AK2Dm/ECgYEA98R8d3/GjOi0iUacFpks9xlbu4pn7SfCFOBaq5a+EkXSauWMRuGaPbZ5NIn7rWygfPW6r/jZrmCyDbWSoPLsdlqb+oEc0wOCN0dshhMGrzdkZMxpy9GNt15+SDhwQZCK/FI4DdEmlvBkLUIUSySIWVDfwJHnddDHO3EhH6GgUkkCgYAf8mK9vxp+8j/11yddCiTUXZNBWNoeeOhFxtcWN520ZewS108X9rScHhE8Xx0QVszkK07TX4baLgeWMGhDdLqBWMVfLU9wH8HXp7sXIl0oT0VANMOjnUCYLST8UjAsVSbKH/VWd5ZdaYmy2MGkA3xUEPm+9AvPWlosGDBoyMLBcQKBgEOKO0ez/CLjOHuHVPtQDBLbxcbMxuG+Ccj5E55cvDls8RwUsPWNgCc8e7PXvVScHO+TaK2Zj3VahI76JRtcvRrSPly+H2ZiOXfqL2oo+5R97A8SLfDSkegfiRsUz3z/8vMvUnppvjQ9GYHA1plZPxXh1uy+mTLjk7vfbeEahQKJAoGBAIDbI7SL7MmWumSnPPwwxfQ5DaWwdn7yReWKUFlO3WFG9oN15M43NXG3zZoUsPdaeTNcvgDRQ4PmtZ+zQonac+obHNsq8ZZP7KjyFJNrrIgfeUDmdnW8u+UPxPjt1J4YStsLX5Ea+x5uE8qGWmK0xYCUkntBFgENhbD7qDokB1+q + peerId: 12D3KooWAQFT6zznsaGXVfuNpwBRzNJz7baL7LrEizLTTja9bjZX + peerKey: ltnZjSrDLpimgrNjU6fPfIJXFvezWBWG/lAN1TwexJcIribJwjn4I+moUi4a9V++E+7e1qT5Th1bcSSuVyrWNg== + signingKey: dq9WuXES/kTW7fiTmSrM0aXjkYxrXVe6yb9JrZCGvDxltONioEDqeBFntz8FAupeOsgxbq4SsrsBri9jSdFCXw== + encryptionKey: MIIEogIBAAKCAQEArl641+uxFrnsM8mkKYQFa56rJoxSvdmBDtX584V6eNCp0PDxj+tkZggjist4BDwJQvGYCckuTDFU60l9dKMFsY8Eqe+2BnNXdoSZtebIQeOS3A7EHW8I+CTaFHe+Ty/2TDGRQnJzxGPCwhJ9qi9YSOi4P6AgxGdTt+5K7gvyuldhJd1XgMBmcjfPqmNqG0nQOEBBSOvcnAd3R8Tl7ayK6s3axDhqOvXeCXkI6ZG1NI6g3TPBYL+klgFzsDkvABhW4vq5IydZR25mGfqPv+vZ48a1rllaxbG9mGhGMj1BfcV0vqEMECWJOlHca0gVISJJm+ni9q5TRQ+Z0eMiuILl/wIDAQABAoIBAE8YaICJSSsl6x8SuIScfljzAG/b9yxnHUO9jEQKqCNlg6JjqS+/dytRRc4PvcEt+oWDUZQezgGB3yNbkqz1xf9lAJiVQ9xpNaNtQsxggzZgJJ3tlMhFNaxaCxJ9vrXs66xkT5/0is7q8c1W1en8z+9CoVE7MaHlvPQSA6s3gENF3+1AUgaoMGK2hhqc7rtC4ANl8DIndEgFCkoXVnIZwQXlcam4WIuSavcuTRlLdPJxP4sHYf5hBTgF1+0EeIeuOzHOzL4Dzz/GbCNMYEwjR0TceNOZ93OrXH51BZQP4B0g6S4vbSlIj4FjNQlvW/BbDn1VedWqAmRhSq6Fop4MTgECgYEAzddpqQKY667c3BEFxxPRkOAwYuHHPhMdiwb/78zB4wd1Q4v9E9MuEGyXqojQH9X7VIl5pfNJXQ4j2TatwUEonnfu3T6hij2aQN+PN81GIBIJvF8qeeZtD8+jhS6BXR/Hh/D2hkWHfjiynjTmJYMXod5vYD6eTaiLw/cyED4qz6cCgYEA2NwXGROPcdnkYfQAI8kKVm/8IokcBXaCJxf4w1fj4KhRxjXw6lmh2070EfsjAslw+SNxhXh1a/cZQ4JkzUMmQezAXdlbiHZ9g/BbVG4R2xezEsxnRimlieBQ+1stzWId1hO5KurybZKvCF5NOOuNjwE7wgDHV1SPjhI3H/LpwekCgYANxpbZqsTVMRSy3ajHU/o4eeiDFZ0h+GGHxmYmhEuNiBg+9wVu6Dky/DGCRjm3h7iURccQZiHIyoN3rAMg5d10DY68284v1EOYh92r3F8PEmX4Z14OXm96GWlWJnCd7NyLqoK1Jb4VonHByMSGSimwuZQ2mro5dEg2Szrcf2yaDQKBgDEGkLI6mdNDTz5VyzJL4OpppraoCI2znPj5kmOXGw1PAC2vRCe228CYuNTX0bJvl/q66I8kDGe8FRoOAHvnEl8VBugwm2DeaMHLNNqBh8fgM7usOizCfYoODEDG/DPSWqxrCRGKzAO5hZh+uTaFChuqS7gwNOCpXUrhE1VFtVMBAoGAFcKs62/+1FOqcBGgfuCtNXMmS3mnEogWaCYyfPwBioZR8SBeoR21hUd7H7JRi4Ho984xYgbnAB76b+UDjgvSnut9eahZmzAxuvxvvUHiqb/wxAmibzov0Di7c+xtbA8XOF2U1lwZ+i89OpxRnEV8b4Dr7fzjed6BVgR+SUzMkMs= apiServer: listenAddrs: - 127.0.0.1:8090 tls: false nodes: - - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj + - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo address: 127.0.0.1:4430 - signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== - - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 + signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= + - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC address: 127.0.0.1:4431 - signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== - encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= - - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF + signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== + encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= + - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W address: 127.0.0.1:4432 - signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== - encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN + signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== + encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/client2.yml b/etc/configs/client2.yml index 4ad2654e..117c627e 100755 --- a/etc/configs/client2.yml +++ b/etc/configs/client2.yml @@ -5,27 +5,27 @@ grpcServer: - 127.0.0.1:4631 tls: false account: - peerId: 12D3KooWEmCHgpYfEWmG558s3TmhKX4ieegQykUJpcLKtciWfwJh - peerKey: +6iFHEa4A0gHQxXmzxNv4J7TAiPPlYuOUWk7pb4WvVFJeoVAydioJiY78tm22pceORFqdPFJLHcZN2kDZPYjOg== - signingKey: PNcZdEvKsu9LShQmgOhKHbBpO1uyHvEM/QO5PUu8rVMuSHBoGvFbcFZNNZ2beFgSr/N9EitzY81QQRoIh5c+Gg== - encryptionKey: MIIEowIBAAKCAQEA3fh3Bd/a3N+7aDwln5rJU6BXL/0D/h2bMXH832d40Oac3OARVxMpxpxT02I6y8uLq0pS41mjtIK4+QtBDfeV+GAcAgvlywu7Be1tM0I5ohMXC0hNnLUCUwOMcQx/ylOjzUdQHna9woZMh2kdhFowViy3KhA/ItR8YpfgTG8VP6DMXW+CxGZR0sxzBVpSGHxGgcdZnrWc5/4vyb5IhY/rAxefQa+lieoFwnTo0jvLBrLhyhryK7SBGd8uwPZRoYJaCTs2BpCrQ7Osc2RDtYPafQnm8tVR2elmc43fN0Sq86PdMl3A0XofCVVW708uCPiq950cXZnJoh1wQeNIqhqpuQIDAQABAoIBAGxo1XjBBBusCdO2zIlPB9UYEn0VjcWmoA1eJqrV1mPwvdwCc3WbnmOqJiavaxftqaFXA3SWayXWUpEPtg4kRdKw3f0B4pFwgT873oGSbqOBv1d7UKygmyoAKa9s81zVzMKNecvnInbHMMlRxWDGy6TK4gphNPTF4pokox+xgSc5cJB7cBtmIZo+8CQA5/q5Xm2W9ih1cRPullmVXuuQYrv2/5oDoBCdaiCAr5WTg4C8pHEOo6z+j7kp9Yeh7Wc4LmEnnCEJKKTbUcNk/pXclpVkMuE983SguyD5Sy3UIXRejSzt+x6KW0k6MolBbRGAlDbVAHxvqp7AQiAIavVCXAECgYEA5ViMqjawjpbIK39DOSozRqaBeFVYrfLI6mkSSQrZqpJzgBvfVo/DDwWP9FgX/TEjDWHBilfylmN8/dcuzJHgQgw/JnckTJbsfnWv71PTxI/YgGEF0L7OmePSY02p3jfHq5zwVg9yW3jPacLTLn99pVjchjShDyzwVjZ5AK2Dm/ECgYEA98R8d3/GjOi0iUacFpks9xlbu4pn7SfCFOBaq5a+EkXSauWMRuGaPbZ5NIn7rWygfPW6r/jZrmCyDbWSoPLsdlqb+oEc0wOCN0dshhMGrzdkZMxpy9GNt15+SDhwQZCK/FI4DdEmlvBkLUIUSySIWVDfwJHnddDHO3EhH6GgUkkCgYAf8mK9vxp+8j/11yddCiTUXZNBWNoeeOhFxtcWN520ZewS108X9rScHhE8Xx0QVszkK07TX4baLgeWMGhDdLqBWMVfLU9wH8HXp7sXIl0oT0VANMOjnUCYLST8UjAsVSbKH/VWd5ZdaYmy2MGkA3xUEPm+9AvPWlosGDBoyMLBcQKBgEOKO0ez/CLjOHuHVPtQDBLbxcbMxuG+Ccj5E55cvDls8RwUsPWNgCc8e7PXvVScHO+TaK2Zj3VahI76JRtcvRrSPly+H2ZiOXfqL2oo+5R97A8SLfDSkegfiRsUz3z/8vMvUnppvjQ9GYHA1plZPxXh1uy+mTLjk7vfbeEahQKJAoGBAIDbI7SL7MmWumSnPPwwxfQ5DaWwdn7yReWKUFlO3WFG9oN15M43NXG3zZoUsPdaeTNcvgDRQ4PmtZ+zQonac+obHNsq8ZZP7KjyFJNrrIgfeUDmdnW8u+UPxPjt1J4YStsLX5Ea+x5uE8qGWmK0xYCUkntBFgENhbD7qDokB1+q + peerId: 12D3KooWKf46wegbEsPhaBb4U2resrZP4pDtRfQZgkpo5Vor83mx + peerKey: MK+G4UJmlb+HZZZiGJAf1Uw0fIJIafmzYNvPxB6oq66SMjcX8nE35Npwoc5YnVzAGYD7JUUWt2BgH/jvn9tvXw== + signingKey: dq9WuXES/kTW7fiTmSrM0aXjkYxrXVe6yb9JrZCGvDxltONioEDqeBFntz8FAupeOsgxbq4SsrsBri9jSdFCXw== + encryptionKey: MIIEogIBAAKCAQEArl641+uxFrnsM8mkKYQFa56rJoxSvdmBDtX584V6eNCp0PDxj+tkZggjist4BDwJQvGYCckuTDFU60l9dKMFsY8Eqe+2BnNXdoSZtebIQeOS3A7EHW8I+CTaFHe+Ty/2TDGRQnJzxGPCwhJ9qi9YSOi4P6AgxGdTt+5K7gvyuldhJd1XgMBmcjfPqmNqG0nQOEBBSOvcnAd3R8Tl7ayK6s3axDhqOvXeCXkI6ZG1NI6g3TPBYL+klgFzsDkvABhW4vq5IydZR25mGfqPv+vZ48a1rllaxbG9mGhGMj1BfcV0vqEMECWJOlHca0gVISJJm+ni9q5TRQ+Z0eMiuILl/wIDAQABAoIBAE8YaICJSSsl6x8SuIScfljzAG/b9yxnHUO9jEQKqCNlg6JjqS+/dytRRc4PvcEt+oWDUZQezgGB3yNbkqz1xf9lAJiVQ9xpNaNtQsxggzZgJJ3tlMhFNaxaCxJ9vrXs66xkT5/0is7q8c1W1en8z+9CoVE7MaHlvPQSA6s3gENF3+1AUgaoMGK2hhqc7rtC4ANl8DIndEgFCkoXVnIZwQXlcam4WIuSavcuTRlLdPJxP4sHYf5hBTgF1+0EeIeuOzHOzL4Dzz/GbCNMYEwjR0TceNOZ93OrXH51BZQP4B0g6S4vbSlIj4FjNQlvW/BbDn1VedWqAmRhSq6Fop4MTgECgYEAzddpqQKY667c3BEFxxPRkOAwYuHHPhMdiwb/78zB4wd1Q4v9E9MuEGyXqojQH9X7VIl5pfNJXQ4j2TatwUEonnfu3T6hij2aQN+PN81GIBIJvF8qeeZtD8+jhS6BXR/Hh/D2hkWHfjiynjTmJYMXod5vYD6eTaiLw/cyED4qz6cCgYEA2NwXGROPcdnkYfQAI8kKVm/8IokcBXaCJxf4w1fj4KhRxjXw6lmh2070EfsjAslw+SNxhXh1a/cZQ4JkzUMmQezAXdlbiHZ9g/BbVG4R2xezEsxnRimlieBQ+1stzWId1hO5KurybZKvCF5NOOuNjwE7wgDHV1SPjhI3H/LpwekCgYANxpbZqsTVMRSy3ajHU/o4eeiDFZ0h+GGHxmYmhEuNiBg+9wVu6Dky/DGCRjm3h7iURccQZiHIyoN3rAMg5d10DY68284v1EOYh92r3F8PEmX4Z14OXm96GWlWJnCd7NyLqoK1Jb4VonHByMSGSimwuZQ2mro5dEg2Szrcf2yaDQKBgDEGkLI6mdNDTz5VyzJL4OpppraoCI2znPj5kmOXGw1PAC2vRCe228CYuNTX0bJvl/q66I8kDGe8FRoOAHvnEl8VBugwm2DeaMHLNNqBh8fgM7usOizCfYoODEDG/DPSWqxrCRGKzAO5hZh+uTaFChuqS7gwNOCpXUrhE1VFtVMBAoGAFcKs62/+1FOqcBGgfuCtNXMmS3mnEogWaCYyfPwBioZR8SBeoR21hUd7H7JRi4Ho984xYgbnAB76b+UDjgvSnut9eahZmzAxuvxvvUHiqb/wxAmibzov0Di7c+xtbA8XOF2U1lwZ+i89OpxRnEV8b4Dr7fzjed6BVgR+SUzMkMs= apiServer: listenAddrs: - 127.0.0.1:8091 tls: false nodes: - - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj + - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo address: 127.0.0.1:4430 - signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== - - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 + signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= + - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC address: 127.0.0.1:4431 - signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== - encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= - - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF + signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== + encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= + - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W address: 127.0.0.1:4432 - signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== - encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN + signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== + encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/cons1.yml b/etc/configs/cons1.yml index c125ad77..1b0a656f 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: 12D3KooWPsSPX6ePtB3fzp2MAvc8hsApVN4qM8XsvvYxDaskFLuX - peerKey: TRRz2qmTsqaihHfeigB1JKAhdT2H4qHq3SODHzK5pXjQzSGaegmSBCuaqdeMjULymDhxczVfzqHUUfTfBIBj8g== - signingKey: TRRz2qmTsqaihHfeigB1JKAhdT2H4qHq3SODHzK5pXjQzSGaegmSBCuaqdeMjULymDhxczVfzqHUUfTfBIBj8g== - encryptionKey: MIIEpAIBAAKCAQEAxZDAWVCZfI7t0bs+vmjxZv91e03SGvCVSrhAZZmsVtz+gcqkMdYFUs7qA202G7DDpNWoz0NNraMLho5nYx84EDkPxN+BLiDz6QgFCLArViLYVqc0xwoULecCHPENMISs2bBZ+VoJeGEW6tTAZ6ORaDUn6XNbCwbdlgrwBMU865R0tIQuKJqqfY6QzRGI0vxXnkMOZ77euZxPv5KTCIj7cGwDW4zAAyeryc19LPeTO8oEP2bYBvOXf9UZzspQAw22c3Bf2Bkvs3Er5VKYmeqTZ129zFddisF6CGhYgYEG1WczQIsNXXEihjQV+o0eozKHNHWi77j4SOwam+bzDy6TywIDAQABAoIBADgEQOWSGtLcW8X5x2KJsti3WgIqIIaO7GWRNIEaP2kpo+f9Iu0Wd8/w5x0tnAfh6LcV9ZU+ygmPjzcJrXrHYUgIRdZWYPRJV58dLQA3ozH7E0gOhMJiszIIq+q01j6Jf9EBVaGDy+eb77mJtTwtfo8Dc1uX35qSycU/OKrBmfJZVy4ain13kFwLVDCU3nLhl4heE9+MI1ay6FVyCvAYqwYHNHQ3SrhXtryYDRULi6XKmj2EoTntXxQ+lYn6HScvbQMBwT6COaPMr5/Kwi1ZQFoNr+GQE4Hx2yGtlmUCQiL4WhweXt7SXfEIoWTvVgBtE+XzYM/9e3IAi46AvcpIgIECgYEAyc/dO8nKvtfQtinizK3oGW3zqAO8ZOpqnxmTKIzM9u2KJoSCARMpAF5jNSzWJfWejcIasyLba18zWtwtsh21MoN/8ds7J4sNkdWzQBcOh9WHk//mWo6vu7UVv1lmmFQAw0qqXEyjw9WWZLBOG6QivOQK64hiRn9ZIhBGX6MJKCsCgYEA+pz9PH1CE8VSgJDtckb4KQAm5JdQcK13FUvykhp50Y4e+EOGFxYYatRwPL5aAyWgJtSaRpTQi/3WGcGnZva5XQaT37KXG2PKPyfBC039/steKyGqR95D4EciUs3iShAQ0Ef7C/nVRGl+Dh+4kKcDYwBwWrjkoW19g0NZpiUN0uECgYEAgqtmccnszrjqWKiyQxjvSVfaBhW1LBpkQvPKRt0z8UZIxzvQ+WUwjR6QWePYHOf2a48cvpR5QgJ4PAKIS+XUZwqiEzWCDc6JUL3vvDWxoN3vVTLCMixlOMK9fBIkzcjGXazAtdahyrFHGZbWXCtgmrGFKJA8Ia1fRyEGj/H+gdUCgYBYbBmBRSSSOzW/vOK6RkX6mV4fmy+7gciZUAGXARZoFH/i0lg2PwqAbtHm7LZvk8/sw2hnbMwkCHyI++Wnk3eVVePIsodUF6JdJBadeXgbdP+VsjwVPVuvfwmiM5gaz45PHoZ6FDzl9V6Pdyu0hejQ/m+l4sRwHGSDcrjnwP0eoQKBgQDIiMOgEcihm4JiV07eHI4XiUotlW8/N3exVEsNLKNO0eHhmUv1fjsTd1+lWTo6qIP9eU79WOVeF5BKa0fVUMJhBc3f3VZRJ8DLBijFIsTqRIsT9mVMXSkePsgKv3o+rBnvQsExwqO80NgHX+HIPR6afYmt9Pe+Z1DoRitvrHe4NA== + peerId: 12D3KooWMFoL77exAU5HWRX9rp994JcYBVjjXdxZfAeFyhFFKBvh + peerKey: k8fptyRgJkwui+3PxxWllK9QXa20UIyFJKMHy7E3mWep9IbJnyFMi+4Y541CrZvLKrffq2Hxwk1XDBjuSFRWAg== + signingKey: k8fptyRgJkwui+3PxxWllK9QXa20UIyFJKMHy7E3mWep9IbJnyFMi+4Y541CrZvLKrffq2Hxwk1XDBjuSFRWAg== + encryptionKey: MIIEpAIBAAKCAQEAyqz7zpkayRW+SVYLgiqTJTZEI2dHP6pk47O5mkBUrYNAl/So1jC2yt7RLM0QVruxlJB/i40+RUfmLCIo4X6sucT4Jqy8ShbrO+39J5m1v4a0PIe2jzFIexnshgBMo1dh/5b2rPwzcvKau3EGVtBMb6NRi5SQbyGTY7QP74jT6ff39TdttSbj1EHM9tYoPe6Dn4uhwRoHKLx++4blj/6pFai7rkEfG59Rbu3w+MZRlxFwdp50dJew/UVptkJfFnQAlK1kbdE4zDVgX8FrDuBDEiOqinUptdMw5Ptch3rV+QlCclS21Mb2Le3ncr2Aps5daf1PfXe3Y+utImVPzxAOHQIDAQABAoIBAEg94IODj0idt3Xsda2v/0MEVMVJytumoM+JAF87DvPKFPwU+Rlfw8gMJAMUFP7VaDbMSqozbj7DogeZJXk67dZJnyop5/OAt9hkvBehcmcSXKw2s5vWtT8rvmMFOEwAma3A4axHOQ9/6idl4hyPoq8oR6i5C8KQ9ThUtllrLB344oikT5+OzgoVyAo08IFss+e/UGs8woeHdmHDYiVfvCs6mPGLuQ1U+VKR7t8C7L6Yol9RVKNwlHQ29zjlRwDrOVT9a1V8iI4lL+wMnvSauFbNrpwRD6mnrevxS8zZELIoGxQ6VZCk5awLLE5ywiDFIUeY0BPf3FpLJlWvaXfo+AECgYEA8JjR4SAneTffLIG058NMN4xAo8BmL66zwEmj1MQXI98Ty4A9bV/q/6lVxlHunh97r5WKcpwdSPfc/V4xu7QjXNgTmqlJjHngR8Uull5nW0uZvit1CFHMnE6ONdJ52HJSg4lR7WheJaZ16nE0Ty3Nea9qodWGQmk+iFKWgk8JfaUCgYEA16aquAZJQw+3/sq66OnU6ajTJNAp3yUPFIL2qT+cGy+rVhiSTpDEYMTFCdoywBM66lklrGbMjjF4FCX0laOxfdxDhB/490BL/93xZSh50Mn6yNhXUotltVZCdUfjNYNJL971ALYdLDkU1Au3TVA+lnBK4RFTHsZXkd2YznjPVRkCgYEAh++QBYZJRy/OJDNUpu2tDmVr0BlQovguDyKMMhZojJfpcz0Nd9KNz8047Ug1bZmUJGx1QLP7x9JjRbQGnWr13+sliGjFaV0i3uoFnGfSNb7NKqkbAoxU8qtfpgE5XpWZEUBwzZX+O3+Fd+RmDaZvRaVatf0SUktsTVF8QDuvvRECgYAAxEXtG5CdHWwxCrV5aINqRUBi7B6J/Y69Ku4HkgNTEWtRhgrXHqqkEW8F5vGxPyBBfwmkQEVP6BseLzhcY9WYtfTDfn2bG25pvXdDPc6ZEG7E0ggVcgtthp373sKPCSV0dx114C/gXV+WlWgUbUmbrVCG1lHuVRQwn5IQgdty2QKBgQDL5pJmnYLlnqKVTM4PcREj2/3SOJ4ytsMtEMxWbXhMMYlo+tkA+mxmRCJaCZabWDxtpvn8Fn/WqIwbDeL5j8QhNL/Dsdqyh+puNBWV/hd9OWdbNm0xxV5wkPJR9uVLJB+NpTbEAAz/lcuAxceMsCQSp4KCvhxr/zbQwnqdM3jjFQ== mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons2.yml b/etc/configs/cons2.yml index 7bc0291a..0e896ff1 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: 12D3KooWE7bvg6GgoJkfYBwAQYb4a4kcp4Lwsp1ihAh7G246sZDN - peerKey: tbcXH39s55jQorh5ShxFRcWjOr0Dmrr7zth8wuvc7DQ/2S1RbwPZZnJm/EniVXbjVrBeAgvu2sRJ8Adnh2nTDQ== - signingKey: tbcXH39s55jQorh5ShxFRcWjOr0Dmrr7zth8wuvc7DQ/2S1RbwPZZnJm/EniVXbjVrBeAgvu2sRJ8Adnh2nTDQ== - encryptionKey: MIIEpAIBAAKCAQEAvCsruS4iV1RE3cusy/0+ik2A4Anzl+WWNK4/bLKZZ+uIVr3dh7sp8OsRGkYF4hXscM6I7llmIJfwIurWcMbj6q8Vth0ba/KmUNdza2A0A5opbVBS5aDerbDGm+C9Q9qZr2w9xqo37P9FJ03Y1EMAer0MjZ8yUMMiVvyLcwh3hCd5AgA0xC9LJyXf2mjQY9zvf0OYei3/Y/2diNB/HGc5WpNUG/N/Z4ZyIWZemPvTF98NF+8wGGB1JLBlHwLGZ7GUg64na+ntlig58feGbH6N5K+qPyvqlz1FC7c3iZdOYClqxXAojeOGqZvEi0TvZRr20UgGeep9GUPGmMTfnW6GpwIDAQABAoIBAQCXbRZum5W/OW2CH9oa/t1JZz2DDf8eCgBqvJ8F1mRloMHDLGAOTqxd2I2W2yr42jPARDUluoPZTuxM7TdM4oGf5u5N8/aRVGBLRlb33h99lp4n/i/34xHQLSZnYuBsropnBXBhY7JF4te/3YHUr2a/X0uu3KIdJCuKXQnLtNCZY9gm/aQ6VE0FSZ/1HoqnktBRLK6HPa+L1+tCgCQ/YCuHiXd5Pwi8U16BEMqwtNAfZUBq96AhVcyDDIpO5uyWnNQWCcLVw/+6JV4w0dX9KlH3QVwWdrksnV30rQWeV+tuItemkrgHr57C4DZUvLYbCfOjuK88buaPQejCHrPADDXhAoGBAMokc+Kuu21iuKZz8TNbPss0EO6ZjEJv7tA3aTTW0b+3t2mIfOTa/KHfJwTZOHtAQllF63gx+Cty6PEVrCShAVdA+s15MRywzdWALFcAmjYTCNKneD/TMRnNiuEJZZTEMSeqCrXCLRZQxPrkjOpIxZnotJ9/jmswFmhuPHqq8oVdAoGBAO5Nm8yKaXtb+aJ8Wzpyxv5a3J0BSdkFfvj+A8AXKH+ZKmaNrz/+79msZe5t90HrqYSUhhnoSAdncxWKn6N6Lrixjpe2ddfML0SNhQWGzRFF4RLtwmLaJmgpDbUtIAdIX3MTvCDUQeRiZYw24yYFosfr3/vppsmiTnjX9YrBmFfTAoGAFAVWQP5ja+saNMpI+ngwGPo4LxmgLbheY9sJHYWlUqLElLxC+nvCB9pNSAqnsHVl3Oey8b2pQcxoy/AEk8AqnNS/wngdaCUOzfWa7qcNnwt1lT+nBlNJiq+z8KP4nqpr3+zUkLoBszMev2bBmjbI83x730xH88/YeFFqxg+GY7UCgYAAxzQZCOKrSnOYOju6ByHrNrS9toFdOg1eFsZAXFL/h6qBxzipRtXVqiBzFNzX1EMrcai2cPG7RHU1vswipoV8iOfkSu47lCkbWjLy/6uvwMCpZSlbVUcG1At9afZOz8ewAoJ8wPSuIDwgpxU6zI3phTWoBu1Kf0MuVdYxa8xpjQKBgQCLyjx0+j+TkqUai8RAwQWGOsToL+aZ7pJFIi0NS0+W5Tk0YLE/UJ07ukNlXwXig/s/H75gY8DerRaBRJhBY5NUE6q33gtQLXUZeqJPdl20lQJpYbUhsMKGhr5qZdu87AOeSLnzQ6Ukchcgsj335Vc5AFsODWf6ApbIUiVUa3DZgg== + peerId: 12D3KooWNeYL4h9367PEZsnAtkBkr26oVdRbHtqApSdofMWbo9ze + peerKey: 2X3XNEEgtVHg8LiKK5Z7o7JZpeTTyyYenoE4T6A9Eze+o5xVkfwtBVNAbahHMNX/4jz5AQUbjQreEVckEOWGnw== + signingKey: 2X3XNEEgtVHg8LiKK5Z7o7JZpeTTyyYenoE4T6A9Eze+o5xVkfwtBVNAbahHMNX/4jz5AQUbjQreEVckEOWGnw== + encryptionKey: MIIEowIBAAKCAQEAt5r0RtReZFB8HVO9XU9par7zneZQRZEpMuw9PLjshfwU5Q/vghxNWSUYyumetezmJaUiOg6C4ZYWkDX3f+wbyB+OCjN4keibDSMOZLudDeFJzdb4Z77Pz9rV1YhqOI+0NrArva/qoO5hPYRu1qXKZCAezFj/gto7C7IFX1RtkD74doAvefWvqE8r1MhDjDvsCkqRR9tTBqpQUvlESaij+DzAZebwHqKi9rgVsgrQddPbjruDlLKwQjyRFe9e1IDrAiDmbWWZ4V0MOMHfMdEiQ3CVdzPD0kLsaoQmp3bsjLLOx/OSrXxvFvYtznrFr2I0dRHQAU6RYxkPkryRcnD33wIDAQABAoIBAF3xxj2bmjSfzfG/kCv3XwwEamiHmNkPnlH0+JxiTnt78UEHN1iOnLEZPydMBC436canSO0F0cgVYLQnON1WdRyfsLDdhzq5FuTQ5CN8r66TcI0HCpEi2/gRk8ovg5IvTVmSKL9lDJuNfWnZolDoAbfbi4apnwtYGFAypXcSnwDnqWXyq4rIBu4bffkUbr5FxqdAcM5t8fUkhr/4qPf2gVAyz5t0fXK8Xs2frXHK7DB0JcoQ9k7xGpjEudYphsHvIYhSi5yIL/cI0AIOmOyW2p4Ct4J/BaJHqQVa2KauYr1ijDNOOmWksCH2KrxGBDu3er1/eqNjBkzGqziN4VNTawECgYEAzvh7VCU/HfZ6xnR6oVmGz+SWszKgFYWgrhAT2Je5SXznro+eaRJq98faZjN/rnriEi8U63w80x9s6mu5DHUoyT62t8KNGcYx2p7mn0okpO6vUq9qLYOpPfuqCO8zFUk4SGIUxhd1tE5XGG+Xt0SxwqX2sz6wa2KibeCCT04zXF8CgYEA4xmBcb7ZG9fn/CQam4NAsBlnMD5zYynKHCGJ9muW1PvJHLDh3NMdT6IIa/FUX0u8QsmV9r0Dkx11ATVMVvEdJ1FP93qHqjr3l+irBDYQbaDfqghFI6Fea//dsk8n9RHM2yuEr76nvPRZJfLsyzTocjLStTe2/DDAGpc/TjeoFIECgYBp1vPqgemW/vamCea0ID4qjfDqzpbCqsUSfjJH7r7X78HiqJsPjFWbRF5RKUDADyMQvXbrPWs1Y7qk3lWRI1CqKSHzMtBJP+s6q0uwZY/7r/uEQyP/BndDtTCsxPXQitL3YQDSlCii/fTYECj7lWt56LkRzJsXLyd1HPxGZe0p7QKBgDzsAbKu3PVANUaJtO2VB0x2dB0YE8I9Wq+zO5x0flECfpAIz356z/kl4ZZ7dgPegFF2XJmFWSklFNdPIfyM0CJVCNu97hj3mqYQz5fgnQWby4SElW+agYb9a87Ct1hh/w+om/69aagh8Kxif61/sv+3rJjaqmb6+P3pJx1nhtqBAoGBAIFyOM12Kch+3dEwrYCv2hR34qgcClDXbjQGhjuwl0nf5qqy4TADfQeHlDwQmpvMRTiQIlj1ipaoZqV3fDlsvgZgRxMwCkViMwsg0TR3CFR4jNC4aqrmv9fC+mTCnH3BeIGOohkTW77Zx+0PvX440MQ4Ye2YuMoioP8cRDfOmH4H mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons3.yml b/etc/configs/cons3.yml index 8499abfe..938ffbe6 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: 12D3KooWFGB9ujKw8kCZB1hxx23uT1XmXftuJKCDKjS4mc8s4DWU - peerKey: C5mG044YYpB7dckuIXWLfASCnhP6HyZTj7EsDaE/Or1Q5xTnpKWjMfOcRczHEDgvY2o0o76uCjf1W+m4D7uFFQ== - signingKey: C5mG044YYpB7dckuIXWLfASCnhP6HyZTj7EsDaE/Or1Q5xTnpKWjMfOcRczHEDgvY2o0o76uCjf1W+m4D7uFFQ== - encryptionKey: MIIEogIBAAKCAQEAo2Bg77RBJuTd32ZNZZkAhnSMMvNea2FwCUgg3HgQC73dfcCiMClpJzlrO5wFOYqDM+Wnzk+8symPGMe3Kjb74JnwxnHupcYwMsqOy1Qc92iFdsyvko9+5t78Vx+JR3QARi0UwL+WKHRkMy0QXTH2eMdZgixF0+tCbyN5TKI1hZcr9jYzrNNcLgQYLJslOK1lGoPrIkLa5LtpbRXikSW2gAYmTqYz3QiOxmai1IE3GmXQmnFrAveIyEKa1NoVU6nsE07OLb/nOEHbA1wZqduxEviYgqiHNR4rvM0kfzCwN6Ri3S1yw/27v7WY+833jfe3V/G2irDVirbSuMgAMjGrpQIDAQABAoIBAAiwsbdOYUDOX7boXCmRT+PXAzYal+UiU7FKsuTHRiM5wDRWMMpbCYralQegru52na//AUQKHcFx7nik9us57X/u8E299bG/rwSknZ/XI4tNdfvxu00ScO+a4NVJiiXQ18rjzvzJtBUGy+Wk+f/bDn8yK2KvNC+njesXefZHko0+fYhs89ESNTU+ySCFjRJQxIDbU+rDP/1c8MzUxB9KKoUZKVX1BaGbjA8YZRjDSdoekwm4VAIBbhf7J6GW1sXezXdQO2rLm7UEBZQeZ6/CnRs48AH1uoNK2Gof/qcYj01WRgB4oyg0dLeWfAb0WuSrivxQhI4CK0mn3bdjiOVheqkCgYEAzAkU60/YPcvuYysPCqbIyhKLyycS1UcCwaWjxR1c4xh9KKo9AqdayDqClGximbEXZsXdfm6FStieAIb0a4s6nFynOMMexe8xK5as6p52+ecAyxidtfNqWRAoZQm7QvTNAtX6jrwJJtbpeQinCqZD0yF5ruj0B+mqyiMm0BTPDAMCgYEAzPxegtEn5P7yIusGoDv75fbMJyvdIVSCmBSWB2rN1V4onC7i1V4hGHRbmNK4o8U3tb4BgvQaHFhrNCw6h4JoT2lGTMkj9QfflgFSOjHaJoOATdzFBJZZOUR6+pGRvn1T+N5SM7isGwBbD4qM3dlG79ODRnRyiX4nQE3dF19zXTcCgYAG0jrnzwiMsFes6xCaq47E6q/Pv+OqS7B05uO9wEiNsxDkHiTiBNRNI1+gNKtrNfdxUSYhhvJf2TQXEmvzeHkiJxrUE/ngZim/qk7nnRqfKjDlmVIUdinVBmxDTHr9Nw/vi1XQFcs8iCzQBhEHkx1rXpAh39ngtdgm39v5UujFHwKBgF703XcuGpP7AgHo68XYY6UwwXu31xT0iBaZGrLO6BDaMGfBVHTQyPYCGNhfbQb4egknvp2CJIJS9z5Q6sARSe7XbqhtWMnOXuWnMQciRtMmgY4QIfgxCZ38uhdOzbv3ZKnZmyy4dImBja1SWlT+rNy2F47QrKpClT41k6CbJ97bAoGAIdOW6fJk+hvq1SrGcCW8+MUHqjRtKIndg2bgDbBNsD0eVlksv0L+p6wjIfNNQnfqlluGgyR/vEQkSmdJwvZ5d/7xdrLOkQZ6KmshK71bGWi8yDG4+qlZrO6rD2dmDcReBq1jG8/4oABTI0t9tGTkLWgw8LPJMcXcDnW9aaCg8uo= + peerId: 12D3KooWS2ASPd6ThTBzez1j6qNPRETbNnKrjFg7EBnqKizEUnig + peerKey: aFY5YOblyu6/2w5QsihT3U2J0ARiNzh0T5A9lVDnNlbwwLJ18vSkkGK4LKM6WjljUXCCPxcxYDqRTM0O/arkrQ== + signingKey: aFY5YOblyu6/2w5QsihT3U2J0ARiNzh0T5A9lVDnNlbwwLJ18vSkkGK4LKM6WjljUXCCPxcxYDqRTM0O/arkrQ== + encryptionKey: MIIEpAIBAAKCAQEAttySfcjFQgsqldabBebJQsKbb7FkwIwWtJwTdCVmGp4P/H2/kkZC+3rLqwXOYybX4D1eWkd4ZM7Dzi2Ra/h0RvQKD6wm6fRplLCZjZRLdYyuYO4oSWshSMceS/1K271NYTQtazkQYDMxpmhU+4PMtCj8VIszIbOY37Itfi+sy5Q/dp9gKh93LtloZJeqGuuLhyAXvHfJvhmBSk5g/Nzcb0JYePu0pHuT8QPVJGXfGgRuZpO7qqeTcx603tgOi/hlswxHLhdag4UELifcW0PiWWrJ3yrB9n+D1bzY4LgVr715pk8EKAq4JyQV6nuAENpk8oiyM1nuB8SGvWkJ7nITBwIDAQABAoIBAGsMiX21cTUOkGmTbsFvr9azUod6k/7cg9ZLoF/YHQPsEHPBscqR81iBNIX0KjSFYs9VXc0AFgz9tkcXChDpLDj1WIaAQ2+ms8Bl+h6V9+7i4prAETmZy6xtVOErcQ1ertP+1a/1gg6vKZu/bDCpoca+T6m2q8JI/2/FQTij9EZgj2WJxuJFvQy9HtWNN8UdIcp3av9h5pP+l8TY/Szqq7uv9X9QTi2aCC/t3RxolALTJ3zXV9Vu/dshKjSvC1nZ2KecfQgbb3sJskLzXBWJt2ThJMoblPw96G4zqwCmfY/QKpofpZ8tzE3Pk3ecZ4t1rPGDqvH3+Ma6HS4qwPWo+7ECgYEA5NSGd/ukAl27o6IW8yEw2E9/JmBfccWtn1YYJjQnnUTeQTR2JVukEPJPh67dTrKw1AGdIK7861YpMUs/r86azwn0PQezHKzhVd4vxbwFmgQA1U1QDY5CJmCpWGddZRgkS1gWZlX7b2+01+2/AWZuYuvccaPF54hlBVJIDp6V4WUCgYEAzJLLwX5gIUXmB1xmEaq7vCXbtIAiZI4564NHtiyEc9mPvCbev6y3LYT/B0nbWsYArJxM0uu2suHAzhjMUpAeFsOko81SqzLi9HaowgVqQw7vP7ilbHAe6C3uulmOX8kH1gnur6F8uydf3CjNh2GJMOm5II/FtFOpaV5fDkk28fsCgYEA2TlakSmjbs+WIWbsjE60tJL6q+6OjE1QXVJ4SEP4WxYWOiXYBeyxmZi8oJwB4ARHUmpZw735wFmhbvb09SqW0PWtEgZuJEmE+2OZTAcJ9kPYmqPy23txFkdqWs583UwGoDN1yB3VOtr6/IPnbyfSoDswn/wNEZbr9xo95wrqUvUCgYEAplQwcHk05bi0R4Xbwz+C9n39fWu1CvcMpq0NkFPvuVXJ5NvhvgxKvyrkQ+PMAqj8gVtvpwpZeGXO4oMNFY/xtuaJJVlafrGYD9WubloCxNUOt0uEzH740iQOdts7xCtqQJ/AvnHZPT3NVe6i9RDbf7Z4e74JrA1dr7s4JCBpGSMCgYAP7tR3uZ7Zv/5e5NqDqWoqx8zlWVSNCPIavzpTomTUHZ04QliFQqxHfR2HVvMVfCpfTzoH7Tms4DlPBkWw7QiZeNIrxK6iNbrnlbvELlJPosVNEtjMMB5J94kU9Ej7zQI2kWNwvGrse4EuY6lGZmN3OY/pSTcgbUdlBkCWASSDxg== mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/node1.yml b/etc/configs/node1.yml index 415640cb..0dd5a81e 100755 --- a/etc/configs/node1.yml +++ b/etc/configs/node1.yml @@ -5,27 +5,27 @@ grpcServer: - 127.0.0.1:4430 tls: false account: - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj - peerKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== + peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo + peerKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= apiServer: listenAddrs: - 127.0.0.1:8080 tls: false nodes: - - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj + - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo address: 127.0.0.1:4430 - signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== - - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 + signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= + - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC address: 127.0.0.1:4431 - signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== - encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= - - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF + signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== + encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= + - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W address: 127.0.0.1:4432 - signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== - encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN + signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== + encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/node2.yml b/etc/configs/node2.yml index bf48cbd9..3029730a 100755 --- a/etc/configs/node2.yml +++ b/etc/configs/node2.yml @@ -5,27 +5,27 @@ grpcServer: - 127.0.0.1:4431 tls: false account: - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 - peerKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== - signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== - encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= + peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC + peerKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== + signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== + encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= apiServer: listenAddrs: - 127.0.0.1:8081 tls: false nodes: - - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj + - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo address: 127.0.0.1:4430 - signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== - - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 + signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= + - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC address: 127.0.0.1:4431 - signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== - encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= - - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF + signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== + encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= + - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W address: 127.0.0.1:4432 - signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== - encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN + signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== + encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/node3.yml b/etc/configs/node3.yml index ef2997ec..d8db7666 100755 --- a/etc/configs/node3.yml +++ b/etc/configs/node3.yml @@ -5,27 +5,27 @@ grpcServer: - 127.0.0.1:4432 tls: false account: - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF - peerKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== - signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== - encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN + peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W + peerKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== + signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== + encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== apiServer: listenAddrs: - 127.0.0.1:8082 tls: false nodes: - - peerId: 12D3KooWAX385eRRj6Lua7dGfPHDycjaeHCJNHiKL2gsDZFKNtJj + - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo address: 127.0.0.1:4430 - signingKey: Lg0Z24RD2s+Ba8XkMGK/8z5uN7TPwQh3EJ/qYJ1t+w0Ka0cjBO1RYggnmyk5zAuYCQbcX1YEQNxNxjYjzP3rWA== - encryptionKey: MIIEpAIBAAKCAQEAuTD4HWt1GQE9177aQCPj5+cy5PiDzp7lguEMW/Lthm0ZcIGl5sulWXQIUa2IAJIzZBqT50kBwVdRUXkpvcgyi0FxATKQoIl0E0nb6HlDnTicG1UcbNfIuPtODmHSUfG4i+rTkHrSkcV26OFFWvrRp3wymqmBXmncYlaOF0KKH+H1FRNVG/3MiBkLq9QZdGxPRo27DNM13u4gbIuQJ+t3LV0b5vMPfYZA+52IDc07na1WtAh7XZhdcU2xWwHY1HLYG84Ez49oZodNtzrkyabGxwC4DzDLoXJ07hKkyoM2rIVIZxLlxeJtfMwEOL7a415okyALTszxIkN1RJs4ccGAzQIDAQABAoIBADVJAsssRSgptEqkjpXP/d6XJoy9eOd1zuIGsRCv6Go6cAxwMXUj+XKwsUgXHz/S0VinURFGb2vbHPnNXBZQSULKVKKckwKuKij2ooDUi4DsbfZrWd9zgzy+imoW+XY8j/YqXi9/N6Fb6Of/EX6pFrQTR1g7F4879H6TGxVUPvwHAPnV9u5vvPP6nmnwJpxD5Qq8ZITy0YSVYB34EppROftthH4DQ0JMedtK/gqXsX7mAZG8CXFe3a4syQJd/zimwPduzU/h9M9KMLzKg5iZ8dJ830aWTmISABuA2LUzaBCYJEpYvhR/3B9OO2eKR7Lt43BwZZeLwPNviGQvICnlVv0CgYEA8uZedVApZb/SKuB1QuNUk4wh/99JUkAYdXnkjMmaC62ov1V+WTMTpZLpdtTjXxpxN9PZa4SqegJCGUvUwcc8x3dw0DkT/6PrLA7Zk4X6X+NbPcpV9yZHCnsWTnNQjHj+d9jBoGJBnhECeBmnlguK8AaaP26/EL46TBRSvfUPj/MCgYEAwy3Wp3NxFrq08iMFqhmlOvdX6C1fAp9MM+IE9sPF1C/fJ17qkvH6NteX0y+vf1/Lh5cAcKNCepm1OMufYJHViEGkwPB5CaF8GwvqOYg83tb1BZQFdWd+MvG3i6cCQ2ekPDE6MyrF9XxKbUs0AXoQLVkIGNni1ZTxa0ec7d43nD8CgYEAkwlQ9MLpzGYp2zq0wSDL+eVCT5ni0J9sLvDyoScI0Tj2hZxDN8vrgLdGDGEioldnYdwkKSnN6L2lNZrp18O7zyNGb0WeDYo0uh7jJqJbxd/jQ6xQDaRmLLoF7sdvYxl7MSFNVMEl54F0dS9Se0nReSsGBJANqRz+PT+wNr06BnECgYEAi1Uw1K97vu8gd276/zh5lQO39J5XIicYHj2ur36IvnZCRvfiW2504iu8Td3P2g1H3Y61mLNjpOQP0/DA4Q6asj+yXq4Mqgxm7WPvHI0ebzJjDk1iLDLqi3G1RvO9kOLvAq1dz+MsGJhXBXjXMmqyG71gI2WAIlrGkYA5DjJB3r8CgYBbAY80gZlxhMTAPhqfMb1CtVFTZ1ubu4Np22ywst8lHAo0bpux85m/cKcrWgesLTP8F1Bb39h/dcpRt4HRhCdK0LPuqh0YCQGCrc8M5SH3V1TUiEhez0Av6UgMZttyoH0zPwQhi42Owze7x2gY3dDiSwkt8Xx364bw61tmr9BDoQ== - - peerId: 12D3KooWNpKCsfrCbHcD5rQLqH8NJK6bYCN4tLyo4NP272FLkry2 + signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== + encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= + - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC address: 127.0.0.1:4431 - signingKey: d0vASENdPCsVAqvqtZ6Qru3uBnenNC4wuA5p0ZZ7XvHBJJRXM1g7M+LD7Z1CWcT5XLgfecFnrfcozuCpPXyqfQ== - encryptionKey: MIIEogIBAAKCAQEAqvQvxDUu7+rF8KHF1MB1mTu7ZlpDPqtwo92ZoPEHEYzcPDbwAxrWJvytd8vNPLWQFv5K210RVd95y9m1DpzsAw7S+Zw9BQpeP9SgIUaJA/U9lvkJeXWE1qKaev2Voh58duY60voZFgTZCrRPELt3LYkJnM17FY2ENaxCcUzagx7czdAAzcOk75Np7GdPg9krUvdKxzZMacj1G6hfM1nHS8th4TKNum5XLPshdxcJaBXhRgMiKqP0WJMbMf5gblqfOAeiO1o/RC7bU1j0j/AIj4biCdqSr8bE5vfKAMIouATVo+fgk65AoIgWJuokDvN7w51MKdVKaku8Meq71UH6IwIDAQABAoIBABm1n3lihiyOojYOHjJgv07MLOK3sGU8YzRBn1kU5ns9M+HaYT4WSx6R4YSiobr/kyviEl/rHzBK64Y8t337G4NaN2BSntqjNIlk8LAQa4qs1xZdXY9mnROqYJEekeJPs2guN6qC8kLdd8akVz+s8b9nXIq4XEphfgCUZ2mipToSqySYFF9WqifJiA1LMakTJA2X8pZU0gQTjbXLfCsKdcoe+rzyTMPVaPskKmQIdj/8CTg52lLJlYojmVVyK35N2tGBzxZpYeOOeDSH2EYpguPjKi30FHSbH7yoiaznQYcNCZ6pIP6db7YiKPpmsVtJm6ZvZQsLMqkuEf+OjnJ6UAECgYEAx7S2DLUxEjN5qEKt8pM44uP3RpthdJkS4LWgGxnuZVBKyUfZ8l2PSbeKxQHp/0BYVyAX3g31ktE/IN9VKEqbR+BIICsvbCrJEukregbq11hL8eUkQFEcUOUTqwV/yL6Xjegbf4fIUz697Mm3tdNkuIgkO1viFV0BcBmrmibYf/MCgYEA2ySnb1T2ERzWBTnY+YEf8SRMeqhQeGpVM717VPgAI/D9JSwf1c0FyN98r1yVFZJ8eCrTgvPaN3U4dYQ7ewlSov7mjruVagkuNGOG6YxMcAlb0cbV1/ZddQ1QAioyNTaOGA2Y2wbzr14ANevAQUxP1EUo+a0c00afM6MJkrGCWRECgYAH38At0BcXOKBbWgWxwsxDZemiBw5YopBz+7VMXEFiDUBln0egnr+/kFUQX3rybX8OMF3Ai5xbJZTvnt6ksAxfUSCG5C0Cfs1eyYLFVPB9fSXBa996CbisF9wmqhjXuWwQVE6BQMFNRvQGGg38RVF7VSLYlE7duMUNvnVdpppysQKBgFNwJFQufDZNzWtV+DgfowLUuE3nciQ3EFPP7HqQprUIl8okf8aO9oniFf5K+PSqvrueSsRMhqSg/Cs6es9A4HbxKOXlpGEoN7B4yLB528y4s34u/9LnmfPsaq84U7+REw8zdiTHA9ecqeXd6miyXp7K6mwOLrB+7jTh+c4hyiiRAoGAR/rC7kVONBorQcuvZdEBjz5Ybua1r/yvZl9tJjmqZbPfJ/mwIrlSrXY8pP0w0rCRM8btumdiBvE+uQHphgJB4Ihpr+Z5rWS4bjVlpTpW6GmzpzfCstZ0OtYFwxBLSj3/Xt7kczSDprr2YwypanV4hTi8r/ZjHgse/syJgg8HxEw= - - peerId: 12D3KooWDBBa5W9yNgVxpWTmjFmoMqLQ5Kn9X5NNrRDLmJUuzFsF + signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== + encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= + - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W address: 127.0.0.1:4432 - signingKey: 5jDWnSWrhuQsMLu98xIaCz+Wm/mZpHNA6abbekA/wWYx6EZhZrClYo9gomziZFXGHt825V1TeDfVaRcFwExAog== - encryptionKey: MIIEowIBAAKCAQEAwTezZS/sUjQhf8oXBB0smIbZPaA+fTCzNTD2WIdxavgnyXu/vS+gBkxC9GNUgyPUsYl5HNbyLwtTuheBkgFwx0oFEckVyLFq6LAQptQW9T3qer0hgCrwXBE23HQzsCJvaw3k4M1JiBIW7uFCOPdrhrBGcbAd+CNbmbuq76wyo7+qFM25Ifs+9PhyWLdSW3/yXey1MxSepjdJH9cgJLJWUAZY01DwQUYS0cHJGq+AAzrRtqnQau0Cv3P/U2Kss55hjXTVVxfLrzMmUeJw0FD86VsEb2OT3AbnQg1gNIZ/rK23+nEfJlMpzzV0wKIPs2D0BqMJ29lsdEjcj/LdID6vJwIDAQABAoIBAFHEFqDdlO58rSh9BxxwlCy/9DMGGyuzbkM2QynXt4GDHqM/QTb4bon7v+HYHy2X/ixbdutjcv3Bl18LD4QQI//SLS8Hn7ZcjleGGqXe3xBNcWsbmo+4nBr6FfNZIX6KNAhjytXvSgzRSu8wWGvvGIvZERaPZz9ZByyZpI7kmlF8z79HG0g0fbEEvQYmlxwbJvcrPAspn4y8OsBVkO8geScKWZYJSJiBPPknjnTXVWW1US9thRzait845XfP2b4AD9bvzbFgcb66PIo7l/MHoCQUGfeuTb1CxmPjuI16CQTU5QqqIZyH+7EnCk1RYg36Ee2Hm3kk7SzXVuh1R7Xq/oECgYEAzHAfuHLIzVgGrJnLDNeS/5xRX58wgzxtK9m2UxSymehj+1XwB2TkHG8Tp8k1vnlsK5naurqB7kamjb20ujTOyHYzpGBWhfZO+G4DctNLihLDAAebCFZBicF82/Qr53HuIf/L53JQFLCzxLsdFEHp+rhckN7nlFaHGCJZkrAgy6ECgYEA8fMc7iMnPSayeA2lBL9UugW58zacNod+1bHwIDksNMaQ1v9DRhKo6cqXwkbhgVItZsQBKii2xeKa7YHp9+fkrpt1NXUesY+mP8GRsaClWQhJ8d9ad4PFvNj9/KAIRaUfO+ScR6W+z7HpY3qCpLgKVMjAHzkpPjVO+oCmHqMeRccCgYArJRKcs6TLKWOnM4HVwP0l8tB9lLQBTlRf57+BwyF6N8A5/8X7WYCGu65zP5SXETsR7JNrywa2ybRGv52Pmqt1RPTbIPXBqdy6s0UJC6yqhBEhRXmjhcipEOuP4/UMEFBIXpqiys45v50AzNhzOQHvRs9KR7Cp7qTuI/mxanhRYQKBgQCyJOzCMkPr9JgnaPR9wFqj9R9rAmSWicFLmo5RS4dO/H0csCpaZ9bS/QYsV4AmddlT9zFcV0nr/eNQyPz6OVXZckEksS1+U2R3QREDFmNoYIABhRDZOr7XQ3YPEc3FacTLlpGy90i9KCPNySB0I8YHkyBSXQYO9bVHIH4vxK6/dQKBgD/0KdsQl3Hpm914fcM6SjnaOuoI27nbdsUba64QGJV1HM894RSHqn0aSas7YmSTrIrjPsENar2ZqI7Kqa+3AYGk4UobgIvuMAn5YF/9NAtr/+fVmJFxQc5DHax5AfzwuTQCPk+VQAeB5PYGgn3+gvVlrEye33rMmCLa23H9LPZN + signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== + encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== space: gcTTL: 60 syncPeriod: 10 diff --git a/playground/Makefile b/playground/Makefile new file mode 100644 index 00000000..e8366946 --- /dev/null +++ b/playground/Makefile @@ -0,0 +1,33 @@ +.PHONY: client1 client2 node nodes-start nodes-stop clean-db log-node-1 log-node-2 log-node3 log-client-1 log-client-2 +export GOPRIVATE=github.com/anytypeio +# TODO: make different folders in etc for different programs + +nodes-start: + ./init.sh nodes_start + +nodes-stop: + ./init.sh nodes_stop + +clean-db: + rm -rf tmp + +clients-start: + ./init.sh clients_start + +clients-stop: + ./init.sh clients_stop + +log-node-1: + ./init.sh node_log 1 + +log-node-2: + ./init.sh node_log 2 + +log-node-3: + ./init.sh node_log 3 + +log-client-1: + ./init.sh client_log 1 + +log-client-2: + ./init.sh client_log 2 \ No newline at end of file diff --git a/playground/init.sh b/playground/init.sh new file mode 100755 index 00000000..b55c3b7d --- /dev/null +++ b/playground/init.sh @@ -0,0 +1,84 @@ +#!/bin/bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/Users/mikhailrakhmanov/go/go1.19.2/bin + +export GOPRIVATE=github.com/anytypeio + +NODE_GO="../../../node/cmd/node.go" +CLIENT_GO="../../../client/cmd/client.go" +CONFIGS_DIR="../../../etc/configs" + +do_usage() { + echo "usage: $0 {nodes_start|nodes_stop|clients_start|clients_stop}" + echo "usage: $0 node_log " + echo "usage: $0 client_log " + exit 1 +} + +do_nodes_start() { + for NUMBER in {1..3}; do + install -d tmp/node$NUMBER/ tmp/log/ + (cd tmp/node$NUMBER && go run $NODE_GO -c $CONFIGS_DIR/node$NUMBER.yml &>../log/node$NUMBER.log) & + NODE_PID=$! + echo $NODE_PID >tmp/node$NUMBER.pid + echo NODE_PID=$NODE_PID + done +} + +do_nodes_stop() { + for NUMBER in {1..3}; do + NODE_PID=$(cat tmp/node$NUMBER.pid) + pkill -P $NODE_PID + pkill -f $CONFIGS_DIR/node$NUMBER.yml + done +} + +do_node_log() { + local NODE_NUMBER=$1 + tail -f tmp/log/node$NODE_NUMBER.log +} + +do_client_log() { + local CLIENT_NUMBER=$1 + tail -f tmp/log/client$CLIENT_NUMBER.log +} + +do_clients_start() { + for NUMBER in {1..2}; do + install -d tmp/client$NUMBER/ tmp/log/ + (cd tmp/client$NUMBER && go run $CLIENT_GO -c $CONFIGS_DIR/client$NUMBER.yml &>../log/client$NUMBER.log) & + CLIENT_PID=$! + echo $CLIENT_PID >tmp/client$NUMBER.pid + echo CLIENT_PID=$CLIENT_PID + done +} + +do_clients_stop() { + for NUMBER in {1..2}; do + CLIENT_PID=$(cat tmp/client$NUMBER.pid) + pkill -P $CLIENT_PID + pkill -f $CONFIGS_DIR/client$NUMBER.yml + done +} + +case $1 in +nodes_start | nodes_stop | clients_start | clients_stop) + do_$1 + ;; +node_log) + if [[ -z $2 ]]; then + do_usage + else + do_$1 $2 + fi + ;; +client_log) + if [[ -z $2 ]]; then + do_usage + else + do_$1 $2 + fi + ;; +*) + do_usage + ;; +esac diff --git a/util/cmd/nodesgen/gen.go b/util/cmd/nodesgen/gen.go index 00dabb70..4b40da35 100644 --- a/util/cmd/nodesgen/gen.go +++ b/util/cmd/nodesgen/gen.go @@ -64,9 +64,19 @@ func main() { nodes = append(nodes, node) } + encClientKey, _, err := encryptionkey.GenerateRandomRSAKeyPair(2048) + if err != nil { + panic(fmt.Sprintf("could not generate client encryption key: %s", err.Error())) + } + + signClientKey, _, err := signingkey.GenerateRandomEd25519KeyPair() + if err != nil { + panic(fmt.Sprintf("could not generate client signing key: %s", err.Error())) + } + var clientConfigs []config.Config for _, c := range nodesMap.Clients { - cfg, err := genClientConfig(c.Addresses, c.APIAddresses) + cfg, err := genClientConfig(c.Addresses, c.APIAddresses, encClientKey, signClientKey) if err != nil { panic(fmt.Sprintf("could not generate the config file: %s", err.Error())) } @@ -193,17 +203,7 @@ func genNodeConfig(addresses []string, apiAddresses []string) (config.Config, er }, nil } -func genClientConfig(addresses []string, apiAddresses []string) (config.Config, error) { - encKey, _, err := encryptionkey.GenerateRandomRSAKeyPair(2048) - if err != nil { - return config.Config{}, err - } - - signKey, _, err := signingkey.GenerateRandomEd25519KeyPair() - if err != nil { - return config.Config{}, err - } - +func genClientConfig(addresses []string, apiAddresses []string, encKey encryptionkey.PrivKey, signKey signingkey.PrivKey) (config.Config, error) { peerKey, _, err := signingkey.GenerateRandomEd25519KeyPair() if err != nil { return config.Config{}, err From 2ffd735e25d41f4ca120819e23db2651e454781a Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 6 Dec 2022 18:15:26 +0100 Subject: [PATCH 30/32] Add debug client to script and change commands --- .gitignore | 1 + etc/acl.yml | 28 - playground/Makefile | 9 +- playground/init.sh | 18 +- util/cmd/debug/api/service.go | 564 ------------------ .../debug/{api => commands}/client/service.go | 2 +- util/cmd/debug/commands/clientcmds.go | 293 +++++++++ .../debug/{api => commands}/node/service.go | 2 +- util/cmd/debug/commands/nodecmds.go | 141 +++++ util/cmd/debug/commands/nodesmap.go | 15 + util/cmd/debug/commands/scripts.go | 79 +++ util/cmd/debug/commands/service.go | 112 ++++ util/cmd/debug/debug.go | 12 +- util/cmd/debug/peers/peers.go | 63 -- util/cmd/nodesgen/gen.go | 2 +- 15 files changed, 668 insertions(+), 673 deletions(-) delete mode 100644 etc/acl.yml delete mode 100644 util/cmd/debug/api/service.go rename util/cmd/debug/{api => commands}/client/service.go (99%) create mode 100644 util/cmd/debug/commands/clientcmds.go rename util/cmd/debug/{api => commands}/node/service.go (98%) create mode 100644 util/cmd/debug/commands/nodecmds.go create mode 100644 util/cmd/debug/commands/nodesmap.go create mode 100644 util/cmd/debug/commands/scripts.go create mode 100644 util/cmd/debug/commands/service.go delete mode 100644 util/cmd/debug/peers/peers.go diff --git a/.gitignore b/.gitignore index f80831a8..f27a09eb 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ # playground/tmp folder for testing different clients playground/tmp +playground/debug.json # .paw folder for macos paw client .paw diff --git a/etc/acl.yml b/etc/acl.yml deleted file mode 100644 index a9a44268..00000000 --- a/etc/acl.yml +++ /dev/null @@ -1,28 +0,0 @@ -records: - - identity: A - aclChanges: - - userAdd: - identity: A - permission: admin - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - - userAdd: - identity: B - permission: admin - encryptionKey: key.Enc.B - encryptedReadKeys: [key.Read.1] - readKey: key.Read.1 -keys: - Enc: - - name: A - value: JgG4CcCbae1qEpe7mKpBzsHjZhXUmDSNVNX2B1gxFZsJyMX4V6kBQUott9zRWyeXaW1ZmpzuxDXnwSQpAnNurhXyGa9iQaAPqzY9A9VWBPD33Yy1eW7TRuVemzToh8jJQKQKnZNbF8ucTWV9qahusKzyvN8uyhrqoW2tAPfA9S3E3ognCuqbLSW6yjE2rBKayvyS1BVwzjSd6FZK4DDyjfU3pbEVjut3wytGEAn9af6sNMmyCnf2MX5vLovWs9rU8av61wD4z7HTsXyGFx4K75N4Go249Hpe9SKAT6HxhRc3yvj63krPLiQV5yMuH2UeMUXBDekUQyNmBEdn9wrur7mLqB67Bc6tcc2PP8XApBCdWJHvHjN4FktSpaG5vbCqoZbLD1oCbk36q2x9s6XM8pydVqD1J9P3nTbfgMb5pJCTFjNtgKeuKv6wjfJeA9jF1VhcJQisfsahgv9MvZ9M8FJpZTq1zKUhYDCRnZxUkraoMS5yNNVdDzaUckKEDthqik7BMWCWT79vq7uVgMwEvGwGi76gtoMg1159bbPMLZ4bdPVfhH2S9QjPrzQfwZSrzB2YeVPjWpaXDeLDity5H8n1NK2oniAQR6gE71n81neSptsuhV6o6QpQ89AU8y57XmEsou4VEryn8vUxBHhULLxrLNUouxyWamCeFiDjk5cSN6koQsf9BYKSNTPFTrwjTKForDokMhcPdMtFktKwjv7u9UEGcY4MKvNzZZkc77gHiP8bqVtdNNoLpTFUC5SZ9i7bKdHvK12HpSy7yzzPeMXJ9UwhLxkok1g81ngTbN1yxRhvYXyHZFtguCR9kvGojDjka91MTBtk551qDw9eCn2xZT9U8jqzBCjdpvSg3mRWKMPnYAGB7m7u1ye165wyGFvzcHAx3vtXjxAqLUeKYZCjv2m6V9D2Y4qH1TQNddWqH14T1JVMis971UCH9Ddpj6a3387oUnufD1P6HZN2ieJCvptrmbGVvxJYYSvmVf1dkwbtqurDRNWD7TJ7gf6iqSP549C9bxP4GpLt3ygjHmMtcuUzstBuztvunJUnQhfnJxqU6LjRdsFzm53wGWgXNxab7ZvQcPyLwsevn1b98FGPnVpS5iY4LjmqW4ugrC6HgrbsjrXiKzR1yZKhLQkCbLzPoaHb8iB5iBnCr7d4yf5CtfpFRqgoqMFdK5LNZYmDX4HzUKN6A7wC3gGiSRFTLcgGZeSMkB5Pa61CZBU7WCQgFxykycE9HRA7PiQa496GWDCV15teToCpFRsAa6jDmR1MGXPeLRqQgve49VXnQN5FL7c1VuEv5SWjeTuCnMB47DJKBaP7eKJNKgLwETALzSCMF3nRiRgeb15kfoS4BbrJ5yupjrvwmbmvNg1AYFFS5sYNWft7K8v87wQvBakRtGP71Kp8NX77XFtu6xdB7sR6jpfC6qJPyB9akWNXgCrWy9kE4ih42gwAZdUugNZ9YtEsgRM3pwb6qJhkAPyEJtrxrja859PCAgqPSQiPQN33PaMkgQ6HJknu8CrjKRiXAycZ16KLUkHV64TNhEjPTcX1a7rqpD131AYMWX8d7CCdc9Ys7RUb6BwguuNSh8rJK3x4AkMDSUsaE8ynKvpC7RXZpJ9Nxfhd - - name: B - value: JgG4CcCbae1qEpe7mKXzp7m5hNc56SSyZd9DwUaEStKJrq7RToAC2Vgd3i6hKRwa58zCWeN6Wjc3o6qrdKPEPRvcyEPysamajVo5mdQiUgWAmr97pGEsyjuRjQoC2GY2LvLiEQxEgwFgJxKGMHMiaWMtDfxCDUaDEm4bu5RdMhqRZekAWho6c3WoEeruSr14iX1TrocFNfBkBY7CjEw8kcywXCTNgtvhb2Qiwgj5AxEF4wyw4bzaNA9ctXb1hoHPFVMu6C51pkFY7jUD9zwyH3ukgnAewkGAcPNbKmaTAtMosKRVaAN97mAwXh2VRt1hWmRvVk7r76EjnVKhD4vbsKZc56RVcHTVWRVdhU7FGyPsiE5rSQAz1JQGYzxnZpX7EG77CyrmUGyfueVfRHhwY2oq8A4uQCRaQxSaJHYLowjXSxh8DQ2V6MTqyzti32C27utBYdHzLVCJSGkmdzGwrFcHqsq7nLDxmvJVErPvyReixEe8kFmqopJ3e6LLm8WdYw9K6JYBjXnEfwPzm7Von9sf3dcaGDUHYfttMyeke7fAXJkvPRje69hYVyzdQGAauuojzGkkvQWCSMK1KCMNMznRaPDCNvofrQhYrub24WhmwpKhorufdfW8Cb4T6reBDCtaWVsbuinjtL6F6Sui5aYHJFLJ6e4pPewr1P4EuZYRbMBZwN5KvDLhTGLBuBnaTqUUdF6bj2U22NoRYMogiHiftqKqiexKNDXX1Zg9RQEvxgjuVo6SBW42mVEA8agrLhruRqCmiduJxVrfqLNGeYXHXrcmMEgW7uosJbPXvTcfRvdFWS1ov7oSALvj6vhDQ28Yi9D2ETNdNsfVWAFQuwvPpW7CHQGXTitprVbqH8JYxNZuGygcLmr5efbB22Vzu4ntd1HoraQpG12qeDEUA7tXYUpoYyuSdWwKPjSAMtaQcCSfVrhKQHQuKJargrVrez8vjWuwLfvSucV7ZHe7gjqvYgULdE1ubRCRSd7DuLjEN2Vd6obzV2c3MRet7ZSf4Sp88WM5AuTyW7BjArBc4S3gUQ8rYaiZ8Tu7NCxkEzbFwWRaemZkwfvcsX3XxqjyF37tFSGkEqE5kuBvpZW72675LkDffj7kH1zA8yE6dVujJjWsNYVFJWndUtz5Vy2KCdZAbBgq19q4AtsxWPodU2N3yZXzFAFAzTrxS6V4P7Scpdau1avgRvHLcBQPunA37xaYMy8YMifJwtmRY25mnAQwZAk3eANk7tXwZd58SDnciLNvARJvwKzTQBXcshkwyy52SX8XmXDJsPnRLaHmiYBJ63Yzr5XpZuuAtxb9qrWG2NHCNxfomHokWacV1hjZPPd6ZxT1FuRozB6Qt2NLcyqY7bnTcQJb1jPUaTAGXXCR8WVmmmYo2fDQe8CdBmgyPvbzNTEJUyScBz4RdycB5PZap4SurJCWtHbuMyQbQUB6jJgURDstfXS5Akfe4oruNq9rnYcNtnsDJPtrhXHBqzDizmf1BDxR5FB2RCxzCgeAfg8WQ1Ug9PVAGTzob6ZqCrGXzWXEUniZnf1vjr7QhGKBYXEX9SWDoSMUpP4FreVDTnx15ijRZTV3p8xG5fE9e36TnugRVvTyq7XzmyPBjW2r66f1bior - Sign: - - name: A - value: 3id6ddLcoNoe9rDgGM88ET8T6TnvHm5GFqFdN6kBzn7Q8d6VUGgjeT59CNWFiaofdeRnHBvX2A5ZacMXvfwaYEFuCbug - - name: B - value: 3iiLPj6wMUQpPwTBNZcUgkbXub1jumg4AEV9LfMyFHZVc84GLyAjVbVvH6EAGhcNrxRxL82aW4BimhDZCpLsRCqx5vwj - Read: - - name: 1 - value: bamccoi5jdypwnjkiuuogkawvhkbowha4qg756uhnbkecr5vt3h4q diff --git a/playground/Makefile b/playground/Makefile index e8366946..84cafaef 100644 --- a/playground/Makefile +++ b/playground/Makefile @@ -1,4 +1,4 @@ -.PHONY: client1 client2 node nodes-start nodes-stop clean-db log-node-1 log-node-2 log-node3 log-client-1 log-client-2 +.PHONY: nodes-start nodes-stop clients-start clients-stop clean-all log-node-1 log-node-2 log-node3 log-client-1 log-client-2 export GOPRIVATE=github.com/anytypeio # TODO: make different folders in etc for different programs @@ -8,7 +8,7 @@ nodes-start: nodes-stop: ./init.sh nodes_stop -clean-db: +clean-all: rm -rf tmp clients-start: @@ -30,4 +30,7 @@ log-client-1: ./init.sh client_log 1 log-client-2: - ./init.sh client_log 2 \ No newline at end of file + ./init.sh client_log 2 + +debug: + @(echo "To run debug api please run './init.sh debug [params]' with respective args to debug client") diff --git a/playground/init.sh b/playground/init.sh index b55c3b7d..976eda55 100755 --- a/playground/init.sh +++ b/playground/init.sh @@ -5,10 +5,12 @@ export GOPRIVATE=github.com/anytypeio NODE_GO="../../../node/cmd/node.go" CLIENT_GO="../../../client/cmd/client.go" +DEBUG_GO="../util/cmd/debug/debug.go" +NODEMAP_YML="../util/cmd/nodesgen/nodemap.yml" CONFIGS_DIR="../../../etc/configs" do_usage() { - echo "usage: $0 {nodes_start|nodes_stop|clients_start|clients_stop}" + echo "usage: $0 {nodes_start|nodes_stop|clients_start|clients_stop|debug}" echo "usage: $0 node_log " echo "usage: $0 client_log " exit 1 @@ -34,12 +36,12 @@ do_nodes_stop() { do_node_log() { local NODE_NUMBER=$1 - tail -f tmp/log/node$NODE_NUMBER.log + tail -f -n 500 tmp/log/node$NODE_NUMBER.log } do_client_log() { local CLIENT_NUMBER=$1 - tail -f tmp/log/client$CLIENT_NUMBER.log + tail -f -n 500 tmp/log/client$CLIENT_NUMBER.log } do_clients_start() { @@ -60,9 +62,15 @@ do_clients_stop() { done } +do_debug() { + go run $DEBUG_GO --config $NODEMAP_YML $* +} + case $1 in -nodes_start | nodes_stop | clients_start | clients_stop) - do_$1 +nodes_start | nodes_stop | clients_start | clients_stop | debug) + first_arg=$1 + shift + do_$first_arg $* ;; node_log) if [[ -z $2 ]]; then diff --git a/util/cmd/debug/api/service.go b/util/cmd/debug/api/service.go deleted file mode 100644 index d225db76..00000000 --- a/util/cmd/debug/api/service.go +++ /dev/null @@ -1,564 +0,0 @@ -package api - -import ( - "context" - "fmt" - clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" - nodeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/client" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" - "github.com/spf13/cobra" - _ "github.com/spf13/cobra" - "github.com/zeebo/errs" - "math/rand" - "strings" - "sync" -) - -const CName = "debug.api" - -var log = logger.NewNamed(CName) - -type Service interface { - app.ComponentRunnable -} - -type service struct { - client client.Service - node node.Service - peers peers.Service - clientCommands []*cobra.Command - nodeCommands []*cobra.Command - scripts []*cobra.Command -} - -func New() Service { - return &service{} -} - -func (s *service) Run(ctx context.Context) (err error) { - rootCmd := &cobra.Command{Use: "debug"} - - clientCmd := &cobra.Command{Use: "client commands to be executed on a specified client"} - clientCmd.PersistentFlags().StringP("client", "c", "", "the alias of the client") - clientCmd.MarkFlagRequired("client") - for _, cmd := range s.clientCommands { - clientCmd.AddCommand(cmd) - } - rootCmd.AddCommand(clientCmd) - - nodeCmd := &cobra.Command{Use: "node commands to be executed on a node"} - nodeCmd.PersistentFlags().StringP("node", "n", "", "the alias of the node") - nodeCmd.MarkFlagRequired("node") - for _, cmd := range s.nodeCommands { - nodeCmd.AddCommand(cmd) - } - rootCmd.AddCommand(nodeCmd) - - scriptsCmd := &cobra.Command{Use: "script which can have arbitrary params and can include mutliple clients and nodes"} - for _, cmd := range s.scripts { - scriptsCmd.AddCommand(cmd) - } - rootCmd.AddCommand(scriptsCmd) - - return rootCmd.Execute() -} - -func (s *service) Close(ctx context.Context) (err error) { - return nil -} - -func (s *service) Init(a *app.App) (err error) { - s.client = a.MustComponent(client.CName).(client.Service) - s.node = a.MustComponent(node.CName).(node.Service) - s.peers = a.MustComponent(peers.CName).(peers.Service) - s.registerClientCommands() - s.registerNodeCommands() - s.registerScripts() - - return nil -} - -func (s *service) Name() (name string) { - return CName -} - -func (s *service) registerClientCommands() { - cmdCreateSpace := &cobra.Command{ - Use: "create-space", - Short: "create the space", - Args: cobra.RangeArgs(0, 0), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - resp, err := s.client.CreateSpace(context.Background(), server.Address, &clientproto.CreateSpaceRequest{}) - if err != nil { - fmt.Println("couldn't create a space", err) - return - } - fmt.Println(resp.Id) - }, - } - s.clientCommands = append(s.clientCommands, cmdCreateSpace) - - cmdLoadSpace := &cobra.Command{ - Use: "load-space [space]", - Short: "load the space", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - _, err = s.client.LoadSpace(context.Background(), server.Address, &clientproto.LoadSpaceRequest{ - SpaceId: args[0], - }) - if err != nil { - fmt.Println("couldn't load the space", err) - return - } - fmt.Println("space loaded", args[0]) - }, - } - s.clientCommands = append(s.clientCommands, cmdLoadSpace) - - cmdDeriveSpace := &cobra.Command{ - Use: "derive-space", - Short: "derive the space from account data", - Args: cobra.RangeArgs(0, 0), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - resp, err := s.client.DeriveSpace(context.Background(), server.Address, &clientproto.DeriveSpaceRequest{}) - if err != nil { - fmt.Println("couldn't derive a space", err) - return - } - fmt.Println(resp.Id) - }, - } - s.clientCommands = append(s.clientCommands, cmdDeriveSpace) - - cmdCreateDocument := &cobra.Command{ - Use: "create-document [space]", - Short: "create the document in a particular space", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - resp, err := s.client.CreateDocument(context.Background(), server.Address, &clientproto.CreateDocumentRequest{ - SpaceId: args[0], - }) - if err != nil { - fmt.Println("couldn't create a document", err) - return - } - fmt.Println(resp.Id) - }, - } - s.clientCommands = append(s.clientCommands, cmdCreateDocument) - - cmdDeleteDocument := &cobra.Command{ - Use: "delete-document [document]", - Short: "delete the document in a particular space", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - space, _ := cmd.Flags().GetString("space") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - _, err = s.client.DeleteDocument(context.Background(), server.Address, &clientproto.DeleteDocumentRequest{ - SpaceId: space, - DocumentId: args[0], - }) - if err != nil { - fmt.Println("couldn't delete the document", err) - return - } - fmt.Println("deleted", args[0]) - }, - } - cmdDeleteDocument.Flags().String("space", "", "the space where something is happening :-)") - cmdDeleteDocument.MarkFlagRequired("space") - s.clientCommands = append(s.clientCommands, cmdDeleteDocument) - - cmdAddText := &cobra.Command{ - Use: "add-text [text]", - Short: "add text to the document in the particular space", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - space, _ := cmd.Flags().GetString("space") - document, _ := cmd.Flags().GetString("document") - snapshot, _ := cmd.Flags().GetBool("snapshot") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - resp, err := s.client.AddText(context.Background(), server.Address, &clientproto.AddTextRequest{ - SpaceId: space, - DocumentId: document, - Text: args[0], - IsSnapshot: snapshot, - }) - if err != nil { - fmt.Println("couldn't add text to the document", err) - return - } - fmt.Println("added text", resp.DocumentId, "root:", resp.RootId, "head:", resp.HeadId) - }, - } - cmdAddText.Flags().String("space", "", "the space where something is happening :-)") - cmdAddText.Flags().String("document", "", "the document where something is happening :-)") - cmdAddText.Flags().Bool("snapshot", false, "tells if the snapshot should be created") - cmdAddText.MarkFlagRequired("space") - cmdAddText.MarkFlagRequired("document") - s.clientCommands = append(s.clientCommands, cmdAddText) - - cmdAllTrees := &cobra.Command{ - Use: "all-trees [space]", - Short: "print all trees in space and their heads", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - resp, err := s.client.AllTrees(context.Background(), server.Address, &clientproto.AllTreesRequest{ - SpaceId: args[0], - }) - if err != nil { - fmt.Println("couldn't print all the trees", err) - return - } - var res string - for treeIdx, tree := range resp.Trees { - treeStr := tree.Id + ":[" - for headIdx, head := range tree.Heads { - treeStr += head - if headIdx != len(tree.Heads)-1 { - treeStr += "," - } - } - treeStr += "]" - res += treeStr - if treeIdx != len(resp.Trees)-1 { - res += "\n" - } - } - fmt.Println(res) - }, - } - s.clientCommands = append(s.clientCommands, cmdAllTrees) - - cmdDumpTree := &cobra.Command{ - Use: "dump-tree [document]", - Short: "get graphviz description of the tree", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - space, _ := cmd.Flags().GetString("space") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - - resp, err := s.client.DumpTree(context.Background(), server.Address, &clientproto.DumpTreeRequest{ - SpaceId: space, - DocumentId: args[0], - }) - if err != nil { - fmt.Println("couldn't dump the tree", err) - return - } - fmt.Println(resp.Dump) - }, - } - cmdDumpTree.Flags().String("space", "", "the space where something is happening :-)") - cmdDumpTree.MarkFlagRequired("space") - s.clientCommands = append(s.clientCommands, cmdDumpTree) - - cmdTreeParams := &cobra.Command{ - Use: "tree-params [document]", - Short: "print heads and root of the tree", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - space, _ := cmd.Flags().GetString("space") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - - resp, err := s.client.TreeParams(context.Background(), server.Address, &clientproto.TreeParamsRequest{ - SpaceId: space, - DocumentId: args[0], - }) - if err != nil { - fmt.Println("couldn't print params of the tree", err) - return - } - res := resp.RootId + "->" - for headIdx, head := range resp.HeadIds { - res += head - if headIdx != len(resp.HeadIds)-1 { - res += "," - } - } - fmt.Println(res) - }, - } - cmdTreeParams.Flags().String("space", "", "the space where something is happening :-)") - cmdTreeParams.MarkFlagRequired("space") - s.clientCommands = append(s.clientCommands, cmdTreeParams) - - cmdAllSpaces := &cobra.Command{ - Use: "all-spaces", - Short: "print all spaces", - Args: cobra.RangeArgs(0, 0), - Run: func(cmd *cobra.Command, args []string) { - cli, _ := cmd.Flags().GetString("client") - server, err := s.peers.Get(cli) - if err != nil { - fmt.Println("no such client") - return - } - resp, err := s.client.AllSpaces(context.Background(), server.Address, &clientproto.AllSpacesRequest{}) - if err != nil { - fmt.Println("couldn't print all the spaces", err) - return - } - var res string - for treeIdx, spaceId := range resp.SpaceIds { - res += spaceId - if treeIdx != len(resp.SpaceIds)-1 { - res += "\n" - } - } - fmt.Println(res) - }, - } - s.clientCommands = append(s.clientCommands, cmdAllSpaces) -} - -func (s *service) registerNodeCommands() { - cmdAllTrees := &cobra.Command{ - Use: "all-trees [space]", - Short: "print all trees in space and their heads", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - nd, _ := cmd.Flags().GetString("node") - server, err := s.peers.Get(nd) - if err != nil { - fmt.Println("no such node") - return - } - resp, err := s.node.AllTrees(context.Background(), server.Address, &nodeproto.AllTreesRequest{ - SpaceId: args[0], - }) - if err != nil { - fmt.Println("couldn't print all the trees", err) - return - } - var res string - for treeIdx, tree := range resp.Trees { - treeStr := tree.Id + ":[" - for headIdx, head := range tree.Heads { - treeStr += head - if headIdx != len(tree.Heads)-1 { - treeStr += "," - } - } - treeStr += "]" - res += treeStr - if treeIdx != len(resp.Trees)-1 { - res += "\n" - } - } - fmt.Println(res) - }, - } - s.nodeCommands = append(s.nodeCommands, cmdAllTrees) - - cmdDumpTree := &cobra.Command{ - Use: "dump-tree [space]", - Short: "get graphviz description of the tree", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - nd, _ := cmd.Flags().GetString("node") - space, _ := cmd.Flags().GetString("space") - server, err := s.peers.Get(nd) - if err != nil { - fmt.Println("no such node") - return - } - - resp, err := s.node.DumpTree(context.Background(), server.Address, &nodeproto.DumpTreeRequest{ - SpaceId: space, - DocumentId: args[0], - }) - if err != nil { - fmt.Println("couldn't dump the tree", err) - return - } - fmt.Println(resp.Dump) - }, - } - cmdDumpTree.Flags().String("space", "", "the space where something is happening :-)") - cmdDumpTree.MarkFlagRequired("space") - s.nodeCommands = append(s.nodeCommands, cmdDumpTree) - - cmdTreeParams := &cobra.Command{ - Use: "tree-params [document]", - Short: "print heads and root of the tree", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - nd, _ := cmd.Flags().GetString("node") - space, _ := cmd.Flags().GetString("space") - server, err := s.peers.Get(nd) - if err != nil { - fmt.Println("no such node") - return - } - - resp, err := s.node.TreeParams(context.Background(), server.Address, &nodeproto.TreeParamsRequest{ - SpaceId: space, - DocumentId: args[0], - }) - if err != nil { - fmt.Println("couldn't print params of the tree", err) - return - } - res := resp.RootId + "->" - for headIdx, head := range resp.HeadIds { - res += head - if headIdx != len(resp.HeadIds)-1 { - res += "," - } - } - fmt.Println(res) - }, - } - cmdTreeParams.Flags().String("space", "", "the space where something is happening :-)") - cmdTreeParams.MarkFlagRequired("space") - s.nodeCommands = append(s.nodeCommands, cmdTreeParams) - - cmdAllSpaces := &cobra.Command{ - Use: "all-spaces", - Short: "print all spaces", - Args: cobra.RangeArgs(0, 0), - Run: func(cmd *cobra.Command, args []string) { - nd, _ := cmd.Flags().GetString("node") - server, err := s.peers.Get(nd) - if err != nil { - fmt.Println("no such node") - return - } - resp, err := s.node.AllSpaces(context.Background(), server.Address, &nodeproto.AllSpacesRequest{}) - if err != nil { - fmt.Println("couldn't print all the spaces", err) - return - } - var res string - for treeIdx, spaceId := range resp.SpaceIds { - res += spaceId - if treeIdx != len(resp.SpaceIds)-1 { - res += "\n" - } - } - fmt.Println(res) - }, - } - s.nodeCommands = append(s.nodeCommands, cmdAllSpaces) -} - -func (s *service) registerScripts() { - cmdAddTextMany := &cobra.Command{ - Use: "add-text-many [text]", - Short: "add text to the document in the particular space in many clients at the same time with randomized snapshots", - Args: cobra.RangeArgs(1, 1), - Run: func(cmd *cobra.Command, args []string) { - clients, _ := cmd.Flags().GetString("clients") - space, _ := cmd.Flags().GetString("space") - document, _ := cmd.Flags().GetString("document") - times, _ := cmd.Flags().GetInt("times") - if times <= 0 { - fmt.Println("the times parameter should be more than 0") - return - } - var addresses []string - for _, cl := range strings.Split(clients, ",") { - if len(cl) == 0 { - continue - } - server, err := s.peers.Get(cl) - if err != nil { - fmt.Println("no such client") - return - } - addresses = append(addresses, server.Address) - } - - wg := &sync.WaitGroup{} - var mError errs.Group - createMany := func(address string) { - defer wg.Done() - for i := 0; i < times; i++ { - _, err := s.client.AddText(context.Background(), address, &clientproto.AddTextRequest{ - SpaceId: space, - DocumentId: document, - Text: args[0], - IsSnapshot: rand.Int()%2 == 0, - }) - if err != nil { - mError.Add(err) - return - } - } - } - for _, p := range addresses { - wg.Add(1) - createMany(p) - } - wg.Wait() - if mError.Err() != nil { - fmt.Println("got errors while executing add many", mError.Err()) - return - } - return - }, - } - cmdAddTextMany.Flags().String("space", "", "the space where something is happening :-)") - cmdAddTextMany.Flags().String("document", "", "the document where something is happening :-)") - cmdAddTextMany.Flags().String("clients", "", "the aliases of clients with value separated by comma") - cmdAddTextMany.Flags().Int("times", 1, "how many times we should add the change") - cmdAddTextMany.MarkFlagRequired("space") - cmdAddTextMany.MarkFlagRequired("document") - cmdAddTextMany.MarkFlagRequired("clients") - s.scripts = append(s.scripts, cmdAddTextMany) -} diff --git a/util/cmd/debug/api/client/service.go b/util/cmd/debug/commands/client/service.go similarity index 99% rename from util/cmd/debug/api/client/service.go rename to util/cmd/debug/commands/client/service.go index af30504f..e5817b0e 100644 --- a/util/cmd/debug/api/client/service.go +++ b/util/cmd/debug/commands/client/service.go @@ -8,7 +8,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/drpcclient" ) -const CName = "api.client" +const CName = "commands.client" var log = logger.NewNamed(CName) diff --git a/util/cmd/debug/commands/clientcmds.go b/util/cmd/debug/commands/clientcmds.go new file mode 100644 index 00000000..88791ea4 --- /dev/null +++ b/util/cmd/debug/commands/clientcmds.go @@ -0,0 +1,293 @@ +package commands + +import ( + "context" + "fmt" + clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + "github.com/spf13/cobra" +) + +func (s *service) registerClientCommands() { + cmdCreateSpace := &cobra.Command{ + Use: "create-space", + Short: "create the space", + Args: cobra.RangeArgs(0, 0), + 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 + } + resp, err := s.client.CreateSpace(context.Background(), addr, &clientproto.CreateSpaceRequest{}) + if err != nil { + fmt.Println("couldn't create a space", err) + return + } + fmt.Println(resp.Id) + }, + } + s.clientCommands = append(s.clientCommands, cmdCreateSpace) + + cmdLoadSpace := &cobra.Command{ + Use: "load-space [space]", + Short: "load the space", + Args: cobra.RangeArgs(1, 1), + 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 + } + + _, err := s.client.LoadSpace(context.Background(), addr, &clientproto.LoadSpaceRequest{ + SpaceId: args[0], + }) + if err != nil { + fmt.Println("couldn't load the space", err) + return + } + fmt.Println("space loaded", args[0]) + }, + } + s.clientCommands = append(s.clientCommands, cmdLoadSpace) + + cmdDeriveSpace := &cobra.Command{ + Use: "derive-space", + Short: "derive the space from account data", + Args: cobra.RangeArgs(0, 0), + 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 + } + + resp, err := s.client.DeriveSpace(context.Background(), addr, &clientproto.DeriveSpaceRequest{}) + if err != nil { + fmt.Println("couldn't derive a space", err) + return + } + fmt.Println(resp.Id) + }, + } + s.clientCommands = append(s.clientCommands, cmdDeriveSpace) + + cmdCreateDocument := &cobra.Command{ + Use: "create-document [space]", + Short: "create the document in a particular space", + Args: cobra.RangeArgs(1, 1), + 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 + } + resp, err := s.client.CreateDocument(context.Background(), addr, &clientproto.CreateDocumentRequest{ + SpaceId: args[0], + }) + if err != nil { + fmt.Println("couldn't create a document", err) + return + } + fmt.Println(resp.Id) + }, + } + s.clientCommands = append(s.clientCommands, cmdCreateDocument) + + cmdDeleteDocument := &cobra.Command{ + Use: "delete-document [document]", + Short: "delete the document in a particular space", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + space, _ := cmd.Flags().GetString("space") + addr, ok := s.peers[cli] + if !ok { + fmt.Println("no such client") + return + } + _, err := s.client.DeleteDocument(context.Background(), addr, &clientproto.DeleteDocumentRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't delete the document", err) + return + } + fmt.Println("deleted", args[0]) + }, + } + cmdDeleteDocument.Flags().String("space", "", "the space where something is happening :-)") + cmdDeleteDocument.MarkFlagRequired("space") + s.clientCommands = append(s.clientCommands, cmdDeleteDocument) + + cmdAddText := &cobra.Command{ + Use: "add-text [text]", + Short: "add text to the document in the particular space", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + space, _ := cmd.Flags().GetString("space") + document, _ := cmd.Flags().GetString("document") + snapshot, _ := cmd.Flags().GetBool("snapshot") + addr, ok := s.peers[cli] + if !ok { + fmt.Println("no such client") + return + } + + resp, err := s.client.AddText(context.Background(), addr, &clientproto.AddTextRequest{ + SpaceId: space, + DocumentId: document, + Text: args[0], + IsSnapshot: snapshot, + }) + if err != nil { + fmt.Println("couldn't add text to the document", err) + return + } + fmt.Println("added text", resp.DocumentId, "root:", resp.RootId, "head:", resp.HeadId) + }, + } + cmdAddText.Flags().String("space", "", "the space where something is happening :-)") + cmdAddText.Flags().String("document", "", "the document where something is happening :-)") + cmdAddText.Flags().Bool("snapshot", false, "tells if the snapshot should be created") + cmdAddText.MarkFlagRequired("space") + cmdAddText.MarkFlagRequired("document") + s.clientCommands = append(s.clientCommands, cmdAddText) + + cmdAllTrees := &cobra.Command{ + Use: "all-trees [space]", + Short: "print all trees in space and their heads", + Args: cobra.RangeArgs(1, 1), + 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 + } + + resp, err := s.client.AllTrees(context.Background(), addr, &clientproto.AllTreesRequest{ + SpaceId: args[0], + }) + if err != nil { + fmt.Println("couldn't print all the trees", err) + return + } + var res string + for treeIdx, tree := range resp.Trees { + treeStr := tree.Id + ":[" + for headIdx, head := range tree.Heads { + treeStr += head + if headIdx != len(tree.Heads)-1 { + treeStr += "," + } + } + treeStr += "]" + res += treeStr + if treeIdx != len(resp.Trees)-1 { + res += "\n" + } + } + fmt.Println(res) + }, + } + s.clientCommands = append(s.clientCommands, cmdAllTrees) + + cmdDumpTree := &cobra.Command{ + Use: "dump-tree [document]", + Short: "get graphviz description of the tree", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + space, _ := cmd.Flags().GetString("space") + addr, ok := s.peers[cli] + if !ok { + fmt.Println("no such client") + return + } + + resp, err := s.client.DumpTree(context.Background(), addr, &clientproto.DumpTreeRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't dump the tree", err) + return + } + fmt.Println(resp.Dump) + }, + } + cmdDumpTree.Flags().String("space", "", "the space where something is happening :-)") + cmdDumpTree.MarkFlagRequired("space") + s.clientCommands = append(s.clientCommands, cmdDumpTree) + + cmdTreeParams := &cobra.Command{ + Use: "tree-params [document]", + Short: "print heads and root of the tree", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + cli, _ := cmd.Flags().GetString("client") + space, _ := cmd.Flags().GetString("space") + addr, ok := s.peers[cli] + if !ok { + fmt.Println("no such client") + return + } + + resp, err := s.client.TreeParams(context.Background(), addr, &clientproto.TreeParamsRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't print params of the tree", err) + return + } + res := resp.RootId + "->" + for headIdx, head := range resp.HeadIds { + res += head + if headIdx != len(resp.HeadIds)-1 { + res += "," + } + } + fmt.Println(res) + }, + } + cmdTreeParams.Flags().String("space", "", "the space where something is happening :-)") + cmdTreeParams.MarkFlagRequired("space") + s.clientCommands = append(s.clientCommands, cmdTreeParams) + + cmdAllSpaces := &cobra.Command{ + Use: "all-spaces", + Short: "print all spaces", + Args: cobra.RangeArgs(0, 0), + 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 + } + + resp, err := s.client.AllSpaces(context.Background(), addr, &clientproto.AllSpacesRequest{}) + if err != nil { + fmt.Println("couldn't print all the spaces", err) + return + } + var res string + for treeIdx, spaceId := range resp.SpaceIds { + res += spaceId + if treeIdx != len(resp.SpaceIds)-1 { + res += "\n" + } + } + fmt.Println(res) + }, + } + s.clientCommands = append(s.clientCommands, cmdAllSpaces) +} diff --git a/util/cmd/debug/api/node/service.go b/util/cmd/debug/commands/node/service.go similarity index 98% rename from util/cmd/debug/api/node/service.go rename to util/cmd/debug/commands/node/service.go index 56b1ab95..cc09f9f6 100644 --- a/util/cmd/debug/api/node/service.go +++ b/util/cmd/debug/commands/node/service.go @@ -8,7 +8,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/drpcclient" ) -const CName = "api.node" +const CName = "commands.node" var log = logger.NewNamed(CName) diff --git a/util/cmd/debug/commands/nodecmds.go b/util/cmd/debug/commands/nodecmds.go new file mode 100644 index 00000000..4e86875e --- /dev/null +++ b/util/cmd/debug/commands/nodecmds.go @@ -0,0 +1,141 @@ +package commands + +import ( + "context" + "fmt" + nodeproto "github.com/anytypeio/go-anytype-infrastructure-experiments/node/api/apiproto" + "github.com/spf13/cobra" +) + +func (s *service) registerNodeCommands() { + cmdAllTrees := &cobra.Command{ + Use: "all-trees [space]", + Short: "print all trees in space and their heads", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + nd, _ := cmd.Flags().GetString("node") + addr, ok := s.peers[nd] + if !ok { + fmt.Println("no such node") + return + } + + resp, err := s.node.AllTrees(context.Background(), addr, &nodeproto.AllTreesRequest{ + SpaceId: args[0], + }) + if err != nil { + fmt.Println("couldn't print all the trees", err) + return + } + var res string + for treeIdx, tree := range resp.Trees { + treeStr := tree.Id + ":[" + for headIdx, head := range tree.Heads { + treeStr += head + if headIdx != len(tree.Heads)-1 { + treeStr += "," + } + } + treeStr += "]" + res += treeStr + if treeIdx != len(resp.Trees)-1 { + res += "\n" + } + } + fmt.Println(res) + }, + } + s.nodeCommands = append(s.nodeCommands, cmdAllTrees) + + cmdDumpTree := &cobra.Command{ + Use: "dump-tree [space]", + Short: "get graphviz description of the tree", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + nd, _ := cmd.Flags().GetString("node") + space, _ := cmd.Flags().GetString("space") + addr, ok := s.peers[nd] + if !ok { + fmt.Println("no such node") + return + } + + resp, err := s.node.DumpTree(context.Background(), addr, &nodeproto.DumpTreeRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't dump the tree", err) + return + } + fmt.Println(resp.Dump) + }, + } + cmdDumpTree.Flags().String("space", "", "the space where something is happening :-)") + cmdDumpTree.MarkFlagRequired("space") + s.nodeCommands = append(s.nodeCommands, cmdDumpTree) + + cmdTreeParams := &cobra.Command{ + Use: "tree-params [document]", + Short: "print heads and root of the tree", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + nd, _ := cmd.Flags().GetString("node") + space, _ := cmd.Flags().GetString("space") + addr, ok := s.peers[nd] + if !ok { + fmt.Println("no such node") + return + } + + resp, err := s.node.TreeParams(context.Background(), addr, &nodeproto.TreeParamsRequest{ + SpaceId: space, + DocumentId: args[0], + }) + if err != nil { + fmt.Println("couldn't print params of the tree", err) + return + } + res := resp.RootId + "->" + for headIdx, head := range resp.HeadIds { + res += head + if headIdx != len(resp.HeadIds)-1 { + res += "," + } + } + fmt.Println(res) + }, + } + cmdTreeParams.Flags().String("space", "", "the space where something is happening :-)") + cmdTreeParams.MarkFlagRequired("space") + s.nodeCommands = append(s.nodeCommands, cmdTreeParams) + + cmdAllSpaces := &cobra.Command{ + Use: "all-spaces", + Short: "print all spaces", + Args: cobra.RangeArgs(0, 0), + Run: func(cmd *cobra.Command, args []string) { + nd, _ := cmd.Flags().GetString("node") + addr, ok := s.peers[nd] + if !ok { + fmt.Println("no such node") + return + } + + resp, err := s.node.AllSpaces(context.Background(), addr, &nodeproto.AllSpacesRequest{}) + if err != nil { + fmt.Println("couldn't print all the spaces", err) + return + } + var res string + for treeIdx, spaceId := range resp.SpaceIds { + res += spaceId + if treeIdx != len(resp.SpaceIds)-1 { + res += "\n" + } + } + fmt.Println(res) + }, + } + s.nodeCommands = append(s.nodeCommands, cmdAllSpaces) +} diff --git a/util/cmd/debug/commands/nodesmap.go b/util/cmd/debug/commands/nodesmap.go new file mode 100644 index 00000000..1618681e --- /dev/null +++ b/util/cmd/debug/commands/nodesmap.go @@ -0,0 +1,15 @@ +package commands + +type NodesMap struct { + Nodes []struct { + Addresses []string `yaml:"grpcAddresses"` + APIAddresses []string `yaml:"apiAddresses"` + } `yaml:"nodes"` + Consensus []struct { + Addresses []string `yaml:"grpcAddresses"` + } + Clients []struct { + Addresses []string `yaml:"grpcAddresses"` + APIAddresses []string `yaml:"apiAddresses"` + } +} diff --git a/util/cmd/debug/commands/scripts.go b/util/cmd/debug/commands/scripts.go new file mode 100644 index 00000000..6431912c --- /dev/null +++ b/util/cmd/debug/commands/scripts.go @@ -0,0 +1,79 @@ +package commands + +import ( + "context" + "fmt" + clientproto "github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" + "github.com/spf13/cobra" + "github.com/zeebo/errs" + "math/rand" + "strings" + "sync" +) + +func (s *service) registerScripts() { + cmdAddTextMany := &cobra.Command{ + Use: "add-text-many [text]", + Short: "add text to the document in the particular space in many clients at the same time with randomized snapshots", + Args: cobra.RangeArgs(1, 1), + Run: func(cmd *cobra.Command, args []string) { + clients, _ := cmd.Flags().GetString("clients") + space, _ := cmd.Flags().GetString("space") + document, _ := cmd.Flags().GetString("document") + times, _ := cmd.Flags().GetInt("times") + if times <= 0 { + fmt.Println("the times parameter should be more than 0") + return + } + var addresses []string + for _, cl := range strings.Split(clients, ",") { + if len(cl) == 0 { + continue + } + addr, ok := s.peers[cl] + if !ok { + fmt.Println("no such client") + return + } + + addresses = append(addresses, addr) + } + + wg := &sync.WaitGroup{} + var mError errs.Group + createMany := func(address string) { + defer wg.Done() + for i := 0; i < times; i++ { + _, err := s.client.AddText(context.Background(), address, &clientproto.AddTextRequest{ + SpaceId: space, + DocumentId: document, + Text: args[0], + IsSnapshot: rand.Int()%2 == 0, + }) + if err != nil { + mError.Add(err) + return + } + } + } + for _, p := range addresses { + wg.Add(1) + createMany(p) + } + wg.Wait() + if mError.Err() != nil { + fmt.Println("got errors while executing add many", mError.Err()) + return + } + return + }, + } + cmdAddTextMany.Flags().String("space", "", "the space where something is happening :-)") + cmdAddTextMany.Flags().String("document", "", "the document where something is happening :-)") + cmdAddTextMany.Flags().String("clients", "", "the aliases of clients with value separated by comma") + cmdAddTextMany.Flags().Int("times", 1, "how many times we should add the change") + cmdAddTextMany.MarkFlagRequired("space") + cmdAddTextMany.MarkFlagRequired("document") + cmdAddTextMany.MarkFlagRequired("clients") + s.scripts = append(s.scripts, cmdAddTextMany) +} diff --git a/util/cmd/debug/commands/service.go b/util/cmd/debug/commands/service.go new file mode 100644 index 00000000..d4e8f110 --- /dev/null +++ b/util/cmd/debug/commands/service.go @@ -0,0 +1,112 @@ +package commands + +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/util/cmd/debug/commands/client" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/commands/node" + "github.com/spf13/cobra" + "gopkg.in/yaml.v3" + "io/ioutil" +) + +const CName = "debug.commands" + +var log = logger.NewNamed(CName) + +type Service interface { + app.ComponentRunnable +} + +type service struct { + client client.Service + node node.Service + peers map[string]string + clientCommands []*cobra.Command + nodeCommands []*cobra.Command + scripts []*cobra.Command +} + +func New() Service { + return &service{} +} + +func (s *service) Close(ctx context.Context) (err error) { + return nil +} + +func (s *service) Init(a *app.App) (err error) { + s.client = a.MustComponent(client.CName).(client.Service) + s.node = a.MustComponent(node.CName).(node.Service) + s.peers = map[string]string{} + s.registerClientCommands() + s.registerNodeCommands() + s.registerScripts() + + return nil +} + +func (s *service) Run(ctx context.Context) (err error) { + rootCmd := &cobra.Command{Use: "debug", PersistentPreRun: func(cmd *cobra.Command, args []string) { + cfgPath, err := cmd.Flags().GetString("config") + if err != nil { + panic(fmt.Sprintf("no config flag is registered: %s", err.Error())) + } + err = s.parseAddresses(cfgPath) + if err != nil { + panic(fmt.Sprintf("couldn't load config with addresses of nodes: %s", err.Error())) + } + }} + rootCmd.PersistentFlags().String("config", "util/cmd/nodesgen/nodemap.yml", "nodes configuration") + + clientCmd := &cobra.Command{Use: "client commands to be executed on a specified client"} + clientCmd.PersistentFlags().StringP("client", "c", "", "the alias of the client") + clientCmd.MarkFlagRequired("client") + for _, cmd := range s.clientCommands { + clientCmd.AddCommand(cmd) + } + rootCmd.AddCommand(clientCmd) + + nodeCmd := &cobra.Command{Use: "node commands to be executed on a node"} + nodeCmd.PersistentFlags().StringP("node", "n", "", "the alias of the node") + nodeCmd.MarkFlagRequired("node") + for _, cmd := range s.nodeCommands { + nodeCmd.AddCommand(cmd) + } + rootCmd.AddCommand(nodeCmd) + + scriptsCmd := &cobra.Command{Use: "script which can have arbitrary params and can include mutliple clients and nodes"} + for _, cmd := range s.scripts { + scriptsCmd.AddCommand(cmd) + } + rootCmd.AddCommand(scriptsCmd) + + return rootCmd.Execute() +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) parseAddresses(path string) (err error) { + nodesMap := &NodesMap{} + data, err := ioutil.ReadFile(path) + if err != nil { + return err + } + + err = yaml.Unmarshal(data, nodesMap) + if err != nil { + return err + } + + for idx, n := range nodesMap.Nodes { + s.peers[fmt.Sprintf("node%d", idx+1)] = n.APIAddresses[0] + } + for idx, c := range nodesMap.Clients { + s.peers[fmt.Sprintf("client%d", idx+1)] = c.APIAddresses[0] + } + return nil +} diff --git a/util/cmd/debug/debug.go b/util/cmd/debug/debug.go index a17cb5c4..8754ba61 100644 --- a/util/cmd/debug/debug.go +++ b/util/cmd/debug/debug.go @@ -4,11 +4,10 @@ import ( "context" "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/util/cmd/debug/api" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/client" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/commands" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/commands/client" + "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/commands/node" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/drpcclient" - "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" "go.uber.org/zap" "go.uber.org/zap/zapcore" "net/http" @@ -41,7 +40,7 @@ func main() { ctx := context.Background() a := new(app.App) Bootstrap(a) - + // start app if err := a.Start(ctx); err != nil { log.Fatal("can't start app", zap.Error(err)) @@ -50,8 +49,7 @@ func main() { func Bootstrap(a *app.App) { a.Register(drpcclient.New()). - Register(peers.New()). Register(client.New()). Register(node.New()). - Register(api.New()) + Register(commands.New()) } diff --git a/util/cmd/debug/peers/peers.go b/util/cmd/debug/peers/peers.go deleted file mode 100644 index 92992cf7..00000000 --- a/util/cmd/debug/peers/peers.go +++ /dev/null @@ -1,63 +0,0 @@ -package peers - -import ( - "errors" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" -) - -type PeerType int - -const ( - PeerTypeClient PeerType = iota - PeerTypeNode -) - -const CName = "debug.peers" - -var ErrNoSuchPeer = errors.New("no such peer") - -type Service interface { - app.Component - Get(alias string) (Peer, error) -} - -type Peer struct { - PeerType PeerType - Address string -} - -type service struct { - peerMap map[string]Peer -} - -func New() Service { - return &service{peerMap: map[string]Peer{}} -} - -func (s *service) Init(a *app.App) (err error) { - s.peerMap["client1"] = Peer{ - PeerType: PeerTypeClient, - Address: "127.0.0.1:8090", - } - s.peerMap["client2"] = Peer{ - PeerType: PeerTypeClient, - Address: "127.0.0.1:8091", - } - s.peerMap["node1"] = Peer{ - PeerType: PeerTypeNode, - Address: "127.0.0.1:8080", - } - return -} - -func (s *service) Name() (name string) { - return CName -} - -func (s *service) Get(alias string) (Peer, error) { - peer, ok := s.peerMap[alias] - if !ok { - return Peer{}, ErrNoSuchPeer - } - return peer, nil -} diff --git a/util/cmd/nodesgen/gen.go b/util/cmd/nodesgen/gen.go index 4b40da35..a05f4e6b 100644 --- a/util/cmd/nodesgen/gen.go +++ b/util/cmd/nodesgen/gen.go @@ -34,6 +34,7 @@ type NodesMap struct { } func main() { + flag.Parse() nodesMap := &NodesMap{} data, err := ioutil.ReadFile(*flagNodeMap) if err != nil { @@ -44,7 +45,6 @@ func main() { if err != nil { panic(err) } - flag.Parse() var configs []config.Config var nodes []config.Node From a08c3873b4821e9d84b9b4a5a4e0fea36a05c5d4 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 6 Dec 2022 21:02:37 +0100 Subject: [PATCH 31/32] Add config gen to Makefile --- etc/client.yml | 60 ++++++++++++++++++++--------------------- etc/config.yml | 60 ++++++++++++++++++++--------------------- etc/configs/client1.yml | 28 +++++++++---------- etc/configs/client2.yml | 28 +++++++++---------- etc/configs/cons1.yml | 8 +++--- etc/configs/cons2.yml | 8 +++--- etc/configs/cons3.yml | 8 +++--- etc/configs/node1.yml | 28 +++++++++---------- etc/configs/node2.yml | 28 +++++++++---------- etc/configs/node3.yml | 28 +++++++++---------- playground/Makefile | 5 +++- playground/init.sh | 15 +++++++++-- 12 files changed, 159 insertions(+), 145 deletions(-) diff --git a/etc/client.yml b/etc/client.yml index 46d748f5..9be9ee38 100644 --- a/etc/client.yml +++ b/etc/client.yml @@ -1,39 +1,39 @@ anytype: - swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec + swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec grpcServer: - listenAddrs: - - 127.0.0.1:4630 - tls: false + listenAddrs: + - 127.0.0.1:4630 + tls: false account: - peerId: 12D3KooWAQFT6zznsaGXVfuNpwBRzNJz7baL7LrEizLTTja9bjZX - peerKey: ltnZjSrDLpimgrNjU6fPfIJXFvezWBWG/lAN1TwexJcIribJwjn4I+moUi4a9V++E+7e1qT5Th1bcSSuVyrWNg== - signingKey: dq9WuXES/kTW7fiTmSrM0aXjkYxrXVe6yb9JrZCGvDxltONioEDqeBFntz8FAupeOsgxbq4SsrsBri9jSdFCXw== - encryptionKey: MIIEogIBAAKCAQEArl641+uxFrnsM8mkKYQFa56rJoxSvdmBDtX584V6eNCp0PDxj+tkZggjist4BDwJQvGYCckuTDFU60l9dKMFsY8Eqe+2BnNXdoSZtebIQeOS3A7EHW8I+CTaFHe+Ty/2TDGRQnJzxGPCwhJ9qi9YSOi4P6AgxGdTt+5K7gvyuldhJd1XgMBmcjfPqmNqG0nQOEBBSOvcnAd3R8Tl7ayK6s3axDhqOvXeCXkI6ZG1NI6g3TPBYL+klgFzsDkvABhW4vq5IydZR25mGfqPv+vZ48a1rllaxbG9mGhGMj1BfcV0vqEMECWJOlHca0gVISJJm+ni9q5TRQ+Z0eMiuILl/wIDAQABAoIBAE8YaICJSSsl6x8SuIScfljzAG/b9yxnHUO9jEQKqCNlg6JjqS+/dytRRc4PvcEt+oWDUZQezgGB3yNbkqz1xf9lAJiVQ9xpNaNtQsxggzZgJJ3tlMhFNaxaCxJ9vrXs66xkT5/0is7q8c1W1en8z+9CoVE7MaHlvPQSA6s3gENF3+1AUgaoMGK2hhqc7rtC4ANl8DIndEgFCkoXVnIZwQXlcam4WIuSavcuTRlLdPJxP4sHYf5hBTgF1+0EeIeuOzHOzL4Dzz/GbCNMYEwjR0TceNOZ93OrXH51BZQP4B0g6S4vbSlIj4FjNQlvW/BbDn1VedWqAmRhSq6Fop4MTgECgYEAzddpqQKY667c3BEFxxPRkOAwYuHHPhMdiwb/78zB4wd1Q4v9E9MuEGyXqojQH9X7VIl5pfNJXQ4j2TatwUEonnfu3T6hij2aQN+PN81GIBIJvF8qeeZtD8+jhS6BXR/Hh/D2hkWHfjiynjTmJYMXod5vYD6eTaiLw/cyED4qz6cCgYEA2NwXGROPcdnkYfQAI8kKVm/8IokcBXaCJxf4w1fj4KhRxjXw6lmh2070EfsjAslw+SNxhXh1a/cZQ4JkzUMmQezAXdlbiHZ9g/BbVG4R2xezEsxnRimlieBQ+1stzWId1hO5KurybZKvCF5NOOuNjwE7wgDHV1SPjhI3H/LpwekCgYANxpbZqsTVMRSy3ajHU/o4eeiDFZ0h+GGHxmYmhEuNiBg+9wVu6Dky/DGCRjm3h7iURccQZiHIyoN3rAMg5d10DY68284v1EOYh92r3F8PEmX4Z14OXm96GWlWJnCd7NyLqoK1Jb4VonHByMSGSimwuZQ2mro5dEg2Szrcf2yaDQKBgDEGkLI6mdNDTz5VyzJL4OpppraoCI2znPj5kmOXGw1PAC2vRCe228CYuNTX0bJvl/q66I8kDGe8FRoOAHvnEl8VBugwm2DeaMHLNNqBh8fgM7usOizCfYoODEDG/DPSWqxrCRGKzAO5hZh+uTaFChuqS7gwNOCpXUrhE1VFtVMBAoGAFcKs62/+1FOqcBGgfuCtNXMmS3mnEogWaCYyfPwBioZR8SBeoR21hUd7H7JRi4Ho984xYgbnAB76b+UDjgvSnut9eahZmzAxuvxvvUHiqb/wxAmibzov0Di7c+xtbA8XOF2U1lwZ+i89OpxRnEV8b4Dr7fzjed6BVgR+SUzMkMs= + peerId: 12D3KooWFgtCbkf47HhFyQW2cEdAkvaofpokCiaa24Phnz7hpepG + peerKey: 4nWcqWOZxv1iXWYuW35eJlF9nxownm38bZjQ27pmFgVXO26vobKLx70TnNTQzZQdoW/dZtxyE9PO37R74vfPQQ== + signingKey: ULbtmmyFjkJ6Z+54FI1OJWfu0QdIeoCckwcrBZDLGhw2o2cXTFH5KGxQuAruNTbREz9eAVGmhGoBZtKVi6/6ng== + encryptionKey: MIIEowIBAAKCAQEAuGAvw/JQuivjoFIhV9RGkoCjO60jNkQpVPWK52eUtEvKHT2EzufhCRwxhAreajoyzk0PsyJ75FWrrvYs2tkSVHFOSiBkZIsldn5gPg1cnvnJOZ9VKDFp8h85d/4cPQ5tX78043nYTgLje2EmbB83inIr4oiZgxDrtLkozJHleAyWuOLIvlWO1l4Uplf6+uooL/5+WeUCuSGUM0wgXfpn+I2IuRhVDVZiChfp51Q6D6brTdOzNcWq1dw6Vld67u8aCLF1EVZ+xM/rnLLBC7MFvIw44LqHvmvGs/lpE9nMNx5L2KfpbpHSBI0IH3FkLQe2Qz8OMZpIa+aga/DzrBpEdwIDAQABAoIBACudXU898AjKPxN6ujZ7maIoWfTQ9SZuI1TcrNomr4+i6hHWrqb/RUWRbMkuhQSd9czFf/RBMQuHlJBT3bJ7bRGaqAly9iyumdMY/A1RvdpBfm9qGIvkfIpxBngzHVz4H7lpkspI1XlGx6c1CRDEpa/TaDwzUhUmGIvszRDvZlfqQvjPjyYSV5Hdc4ywh5zjuSFlxOD/9gsPRE5v4M4FGrGv8cm859P1u95Wxxo3pWincpzjvWw2LpsUGctyU34MhErxh86vNhP9v+nR4VkdojVKkHQTYnPKUlaKj6F+IUSj8syxuTJb8bs0GBuvcXW9AKp/K0xq/GBC8Cu/XN7Ln7kCgYEAwZoqLnU9OuwkcN5AHYW7XsxmVCEnxOsncrUbIzEKPvy4wELdOCVVrX66zmIjb+1+mhaz+mGMGEpkVMBld3wdDfmGgo0CAPlF4efH1ppMzUm2aZ+HYQR8KMH1XOT9qjbGEnLeWcANQT0vZPpe77PQLNwLJ1zv6EtXMMrEH0s4ijUCgYEA88zCNsBtB07ayFr9r+RCfHx/X9wFkT59t2K+axIfZE02f62WWqJCZYMlZu9XAbYEQ94H43/NAL9wfA8dgnF7mKSL8stJKt0g2iPa3MluF4Gq5Y2XYEVf/EDEhP2jh8p1l+xs18rVzsQQ6b3CEU9ytmBJWvkWnwVXf+ZnsCFECXsCgYBM3YyJzXp1/nOpbFRAZGw0AytNk6xafpK29DjGDB5pS6V+kA2M0SXnMD2y2zv+oGh3fTQP4NLigga7r3eZrOlMNxm0k4+MG2wneQLarYB4sR9/aBsz5bf15qwoKbKc9gpGIN0u/RVGJai/irhOqzGn3eV/x2Jo9CC1+otLcW4NUQKBgQCOOHlnZTN1GuwICwSIkhiy9BF+AyUASLsfuquoXEcRxPUw4DugnZ0sCKhN9vsDlYHBcYmajhgyAnuE83BcgwT906eMOEhzh9G9T0NCnwLpFYxzIvkWgQHwbnv1tNyrv1CAEryf2cSGPNw87qSCYp1hhKPmPP6UP5J+mxMLrSw6dwKBgHHFweDS2tw4TNxJQjhfQOp5t9VQbQffFZAqpXGFTc4vf7XePlxIGoIpOg4ShHCKKHSy0PtsLe7QjLrdbMkyYh8oGqgNe5CYTzFFDeK6Im1DoiqNWT+YUWF/gzVRUSpo0QW+4J1hfChG2URp9KbnditXKsJ5Vh+QayHPoZwN7Kgl apiServer: - listenAddrs: - - 127.0.0.1:8090 - tls: false + listenAddrs: + - 127.0.0.1:8090 + tls: false nodes: - - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo - address: 127.0.0.1:4430 - signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= - - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC - address: 127.0.0.1:4431 - signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== - encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= - - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W - address: 127.0.0.1:4432 - signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== - encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== + - peerId: 12D3KooWPuwdqpDQxWhD2Vh4yskx2T5VMrwdpTZLfACzgsGfQfNy + address: 127.0.0.1:4430 + signingKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + encryptionKey: MIIEpAIBAAKCAQEAxnE9Htwto+2fVmonkG9/DxNre33n7kjfrZU73JcHmpKhPlRFirig5T8rs2MaTq1R72/8nGBJuSxsz1PnexI3die39pY1OFYfZCZ59LbT7uH/xHcvkVrK2n50Q41KbbGT9BEzyW+XPkKPDpTq3/igYP+yUQgoWLfMwxCCLKXDe6qUC0fuIxR80fvj3XvorB5dnAiQ01JkH4PtCV1OWT6ZpLGhzcYxsxTHozd6LdMOC7wgGhW26dOSa/vZ1t5avbewFVIz0qfqBncunb7tjO4xa3xVYaA5jBbixDQUYFjVzW7cksrrN4CFNBDBGJ8PLS80MuMg0OG0O+/Qi1mbGb2mUQIDAQABAoIBACODAD0VidVcILeGJ65hRYudHg7raSXrRJv7qMrA/EtdEh3lVsyMXb6on1lq0rphqdf/YmVZldfda1tu2G3dxK8QTIuENeHvB48Uk56HWUXWi77M1WZdqQ+QsZ2lGzymGqQCsBHMNnSd1Jv3alDKXWj+WRrHKvE1cx81RRZYU7M9cpurnF5YNjO7L+7sMxUA9uAQGbe3kDVzrygraicLYQpxSNHytName0A+k3ug0qer4I6PmZhhJykkz6MD3dz/n625HSS+X+TuTm52T2b87tL27xXmSnUK7eYWjZ1vQlP1fWmqnac6u5LApUZaRi0tTjtefSjRW4jr1q20RqOp1kECgYEA7Onh3zM9ejATsjW6WISGKiBPci0D7DUbIuGuJrdQRadlkZzmeQ/VOYAuxIQD4GnQDRhM1FyxsqiAWkJOyCLFiMmsgIEyW9/eRhF8NlCVU+DA/fxy9EagfBbVsgiSBwOex24hPXIVYlaHkLAloNoD4bpw0pQZSDWXr+xvMFNwoGsCgYEA1m3sWA/e8ZuXForaUOoJzBU9nwC79bXv2UNktsVvBlQ1o9pbjoYDcVoAPwuBVUL1UwqDNMzPdhDBKBjZmCyjS6zlYD5ZKjF2m8iTyc4QcaBCdM0iyQpSXTmrfMx+hK1aWwL1p8ssNcednp5ExSAaTyNNGVdbtddiQ6/KMPmhUzMCgYEAwDjLsUNr4BXeBTweo+9yw/9PNn5brm0wRU8C9BrMIJe/izPYs+UqxerBB2Vtl8mCqv1KaQuEika5TYJ7VVsRFvk641DwQScUu5k4RQGBB3tWWz1XL+eWEticLkVR5isDyyAKDEbiHtXCTJz/CtGZUK7rF5BeKv6AwpZ9aKJqwV0CgYEAqXDlQNURu+PR6TtBtoypvz3NmraO0GO7KvipPhAXYm3qkRa8IIxfbhPLfAYQZhpqFvuIoJFzIn2s1I2GbExhoSv3eSzrcn7xlbpSpjYSImeb/AYZhbmFSiuHCi/hjeAaNS7KhZPz1G9vaubvusFaaMyhYPP6AWA4QvpHEJpB06cCgYBqR6/7d2hQiq4MJUrBEzLwG4ijnPeq+UVLQjE598hVIj+8UhRZRRcNWVEJxfcIL1v6Bpo8XISDNVRb30T9bPGVnXvC1jutTUbXKUB1/8iXuyH3IVieobch+bGd4v7ehH/lI7vzB6hjJpFzHopfFUn4wacSQdcFi3tRAwUB/L0S/w== + - peerId: 12D3KooWBgHmDqtXH9SrZfAmwCFsD8LZhTD5dg5wkhdbqFoS8GBN + address: 127.0.0.1:4431 + signingKey: l6LFiKqr4ZHgcPbL+DR7KwMbzImufQPFgpoHOJ/nvfUbpb76DCADHuT1I4gIs+XByglnY1KV8jbMfW64XRW5XQ== + encryptionKey: MIIEowIBAAKCAQEA4ltcn1AH048bMXcKOOW7/E0TZYPxL3OtcHXWHSAZjeeTA/rc45G2eaNgyY7Ji+feLtZERbXNWGFBdNp31NHDYZAYwbZmjEqTEgV4yVx7BQP3VBEzglTJaNLTf+XIJnVAEkoHS6ogjC0oXTM6paHu64EitoOCzF9zqL023swjE3HU0dm2xwsUdGnKeO5nPMso/6e3VMavkKnFmvB965ECCBujtediP4lVdIABNVtoMHCoeI5Sn+m7TKqJSyDOIEMhHT3orYUNZWVeAHE1YTM2cI5tSnDZP80CHZ674Z/bKL7Jaznmq87mVt1h9Use2EkxR07/dJuTGvFOos4jHoiR9QIDAQABAoIBAHAr8EluooI/j61CnYk2p6LPG0aaTQJD4/YwHuwOBTviP2OghKgthGzg/szDerNfMyaoveqBvoIGqCZdQTbwwE7v1qTgXA83wYwTtBitQLVqkr1RTOJQXAMbPv5Jg5czUY3+q4DejQSKOE9/XJfKGJkSRH6Hy2C2CJ3dLnzYUqWGO3t70RLT1/sC6p6w3lXdy3dKZGkoR2wva+HXQxVrP8X5HOResXgNZwgMHt9KF1QHVCcySKYiEAefEKTSdKD2fOd4FxLgp3zWpvH3jrX0zd/DqzTlFD5Ns6Ayp2sIfHVp3sn99DZZM6DauMepQKtoSCnXZ+qKhekAwNVJnsVQkSECgYEA4spY9araeFUSl4uXCUQOpCkSshYOPRYN6sBbHsx8tV2eQtCT+5SuNYmzur3c5bkiraGEab8rZfGdDL6fLxQyaqbOmN31Db5kNh/2X+sRnxkak8lsROUWQZRF9doH73FDv6ZlI3V/JicZlOUCfN5BYT+x74R4/c1YXfyuD1J9gr0CgYEA/4K4SDwZUY4bOVCmKQz0OM+RW4PAAH6LHKenTAZNTeDNFFxc2nqnzRGMEKZTDGy0kbT5mBhBHFgShXcAiKxc5/MGkpt8Jcq6Fr5KGU9aZtYKji6mwMTsUndPNQydh3vOt5pOmcuMM6ovanNTvI8k6Qo53OY1IpO5CfOROu0hm5kCgYBnWsYd92YnDsYxUEldzKlLgPhnNov4pNNk15LvP0vaL7cPRhUaw1B9T6scAKjp/GxkasZ4lsnFZM4o37qV7wNm/WwL2KN0Rv9Od1SFtBBMzFkDXvk7kJeK/XLAr0OMiLbSYZeYCFUQ4yLSa2et1nA/TJLf0CR/rhSGiMAedX6DlQKBgAx1137OT33GrFUzNacy1oYeuTv5RNfBVA9lrabrd8GggN/JUU3mRWCexnHZaptkgbnJVZKxPBuhv+V6VDBWF4HIPD3SD0/YfxK03PA3CnWRYppkdAValRvAbcBsiRIeW4pgoAyn/IJYfk92qFK9uFMVCJVZNKYnBhMSKbbx8X2hAoGBAKwvzyAImbNB+493q1R/lSayxzG76bRJ/EseiTqwIec9c4C+Bd/sVXR+Re+xZb0FI/va1bz5CrduTzLSKBmf/+0lzl0MJvWY2+SXfGYdbl4+TTyqgDDfwqW0Tj8pDimye2BneyTmXko1rF+2Sxen7kMXnJLwpqjwZ6TZJuoqeK8q + - peerId: 12D3KooWASsipDzkridiMBmE7VSqp8yZvGWPY1VqySgMSZk6tsiL + address: 127.0.0.1:4432 + signingKey: /6+uYFwFf9nU6fvXQVtpHhjd8+v4dXc7esZzqkhjyfMJWlMiZOtQeb913FXofD5f20WksU0l6i22B09sFFYwDQ== + encryptionKey: MIIEogIBAAKCAQEAwCy84lzkxtzgn4ixGm0LSUTujOBpOh9m7XDoDPZnMTmExdOe9a5v/LXzdlCOCuBvK5u1T3ALBJMA3Zgvjv/jPRQUdiHprP3sbdfc6IgZPBFdLKFTc9yAA7GMbI4y7LhGMLGOMOqQXs+DOeImfmxEs3ykLXHKNas5ORnZPVnB6E9Qod8KH7UyMmBjQkOZYOOw10X4JZiU6xJp/E+VVWcmeXgNBbj5xOWMSzM+hhoA4wNOzBxACucaKDmqD6qugzebOqyUVSzFnEbquro+MYTWYdUDjZTXdvxgUUo80MGQ164gZhkFUKrmSpUvu3YErFySEGqAdFNwOZ6y/4X3s0BHvQIDAQABAoIBAAZiNhAK5+qXMbr67m8jSimv6YCyf6xXmLKwenTbxofDEl8D7ZbZqYyqeqDmgiFoXSkErhwqa6NGQtQZlxLX+zNvNFLMQ5fkg3MOpZ7vzm7JYN/3p+8EVxhIUJLWkmh8opBBhaioUg1kNUa59W9jp1CTBl0gF4h63JbB/g5kqeVOllUw7J1igAoaX36nOJGOwIynCWdizhDhgyjR4OcYfOLwcPDJueKTc5vM10g3LuMSK/sJmaD3TkJFPtDHw+RMW6wqyjsnkrg2D2oohXEyGWYYIXo2so4HCez0AB1I1JAxtVnRPvSIp7xLMm7+AkDoq12QYDHfxZtDTpfmvJg+Sn0CgYEAxCd+oribtdQW+JUctjsDbSQX5CeRISH5Ith3jveBx2jKIqQVnoVPz6URHOvnlIsqYYLANB8B3JHMWfR2UmkK11x0OcZecB06+oBoCZukvSXF+GqVHzLAQUxaoEBDCCPneskj5w+riMWBiiGDp32rUnkqv0nh7dnH+GfORcJ44L8CgYEA+s5s5EALj1jyU9w4+HVUyVsIrUitFnQg6qw/Td3Kj+8CXImKlS+rlmbQv0m1aOcvtFjQRIjjzZJAf/ausfAME+MayoNODgZsDk5RyDKuSWzMLvZLAa1LD52Uli5Pg8KtpzKVTn4xE1MbjsQcUNhFRAgrNEKNyuzXzdp4uXgGOoMCgYASXwiTQOsEepq0KXMI9jn57Nl3+uSyz7W/t7pq329+N6hG2ktUD3RMJE+X/9gup2IOw+owd377I4SaIDU8vq3PQc944cVShspRT9lunO8u7+y8uW7B/0TWWMpcG+irSIGTlGcSavtL0gOx5jWoaDK1hLemNss8NZtu/nnpOq+LjQKBgDisVozJMBOHPNLYS4NROAR77p0BdCNDwIBmxbM5r+EQWA9DAS6u4+4Lc5YV+MkonG37N6yU5iz4pFyGCHmqzX/c7JvgSc3/g4FED1TWpu1uiUD/ZHmPiAuSRxYchtk2L3k9g+GFwF8mg26iP+fAxv4VfnXDqDi3hhg9CtSWG4ozAoGAOWZXlFKqzGAfcucIe54FVQnweXG9sEuIPAvWvVRs4406ggNmL5eHccXpPHWTgetsr2TYMqPTDVMRmhBzSkyrYgk+b2tme79HPzTWs2Yg/pzjOfTgw7MBX/KlvOW5/J+dvrF3Gx8AHHZ9QQdYqi/MS1NKb2K3IbD0/m5gL5Pwi6A= space: - gcTTL: 60 - syncPeriod: 10 + gcTTL: 60 + syncPeriod: 11 storage: - path: db + path: db metric: - addr: "" + addr: "" log: - production: false - defaultLevel: "" - namedLevels: {} + production: false + defaultLevel: "" + namedLevels: {} diff --git a/etc/config.yml b/etc/config.yml index 09984fbc..b74fd7b2 100644 --- a/etc/config.yml +++ b/etc/config.yml @@ -1,39 +1,39 @@ anytype: - swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec + swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec grpcServer: - listenAddrs: - - 127.0.0.1:4430 - tls: false + listenAddrs: + - 127.0.0.1:4430 + tls: false account: - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo - peerKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= + peerId: 12D3KooWPuwdqpDQxWhD2Vh4yskx2T5VMrwdpTZLfACzgsGfQfNy + peerKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + signingKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + encryptionKey: MIIEpAIBAAKCAQEAxnE9Htwto+2fVmonkG9/DxNre33n7kjfrZU73JcHmpKhPlRFirig5T8rs2MaTq1R72/8nGBJuSxsz1PnexI3die39pY1OFYfZCZ59LbT7uH/xHcvkVrK2n50Q41KbbGT9BEzyW+XPkKPDpTq3/igYP+yUQgoWLfMwxCCLKXDe6qUC0fuIxR80fvj3XvorB5dnAiQ01JkH4PtCV1OWT6ZpLGhzcYxsxTHozd6LdMOC7wgGhW26dOSa/vZ1t5avbewFVIz0qfqBncunb7tjO4xa3xVYaA5jBbixDQUYFjVzW7cksrrN4CFNBDBGJ8PLS80MuMg0OG0O+/Qi1mbGb2mUQIDAQABAoIBACODAD0VidVcILeGJ65hRYudHg7raSXrRJv7qMrA/EtdEh3lVsyMXb6on1lq0rphqdf/YmVZldfda1tu2G3dxK8QTIuENeHvB48Uk56HWUXWi77M1WZdqQ+QsZ2lGzymGqQCsBHMNnSd1Jv3alDKXWj+WRrHKvE1cx81RRZYU7M9cpurnF5YNjO7L+7sMxUA9uAQGbe3kDVzrygraicLYQpxSNHytName0A+k3ug0qer4I6PmZhhJykkz6MD3dz/n625HSS+X+TuTm52T2b87tL27xXmSnUK7eYWjZ1vQlP1fWmqnac6u5LApUZaRi0tTjtefSjRW4jr1q20RqOp1kECgYEA7Onh3zM9ejATsjW6WISGKiBPci0D7DUbIuGuJrdQRadlkZzmeQ/VOYAuxIQD4GnQDRhM1FyxsqiAWkJOyCLFiMmsgIEyW9/eRhF8NlCVU+DA/fxy9EagfBbVsgiSBwOex24hPXIVYlaHkLAloNoD4bpw0pQZSDWXr+xvMFNwoGsCgYEA1m3sWA/e8ZuXForaUOoJzBU9nwC79bXv2UNktsVvBlQ1o9pbjoYDcVoAPwuBVUL1UwqDNMzPdhDBKBjZmCyjS6zlYD5ZKjF2m8iTyc4QcaBCdM0iyQpSXTmrfMx+hK1aWwL1p8ssNcednp5ExSAaTyNNGVdbtddiQ6/KMPmhUzMCgYEAwDjLsUNr4BXeBTweo+9yw/9PNn5brm0wRU8C9BrMIJe/izPYs+UqxerBB2Vtl8mCqv1KaQuEika5TYJ7VVsRFvk641DwQScUu5k4RQGBB3tWWz1XL+eWEticLkVR5isDyyAKDEbiHtXCTJz/CtGZUK7rF5BeKv6AwpZ9aKJqwV0CgYEAqXDlQNURu+PR6TtBtoypvz3NmraO0GO7KvipPhAXYm3qkRa8IIxfbhPLfAYQZhpqFvuIoJFzIn2s1I2GbExhoSv3eSzrcn7xlbpSpjYSImeb/AYZhbmFSiuHCi/hjeAaNS7KhZPz1G9vaubvusFaaMyhYPP6AWA4QvpHEJpB06cCgYBqR6/7d2hQiq4MJUrBEzLwG4ijnPeq+UVLQjE598hVIj+8UhRZRRcNWVEJxfcIL1v6Bpo8XISDNVRb30T9bPGVnXvC1jutTUbXKUB1/8iXuyH3IVieobch+bGd4v7ehH/lI7vzB6hjJpFzHopfFUn4wacSQdcFi3tRAwUB/L0S/w== apiServer: - listenAddrs: - - 127.0.0.1:8080 - tls: false + listenAddrs: + - 127.0.0.1:8080 + tls: false nodes: - - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo - address: 127.0.0.1:4430 - signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= - - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC - address: 127.0.0.1:4431 - signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== - encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= - - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W - address: 127.0.0.1:4432 - signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== - encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== + - peerId: 12D3KooWPuwdqpDQxWhD2Vh4yskx2T5VMrwdpTZLfACzgsGfQfNy + address: 127.0.0.1:4430 + signingKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + encryptionKey: MIIEpAIBAAKCAQEAxnE9Htwto+2fVmonkG9/DxNre33n7kjfrZU73JcHmpKhPlRFirig5T8rs2MaTq1R72/8nGBJuSxsz1PnexI3die39pY1OFYfZCZ59LbT7uH/xHcvkVrK2n50Q41KbbGT9BEzyW+XPkKPDpTq3/igYP+yUQgoWLfMwxCCLKXDe6qUC0fuIxR80fvj3XvorB5dnAiQ01JkH4PtCV1OWT6ZpLGhzcYxsxTHozd6LdMOC7wgGhW26dOSa/vZ1t5avbewFVIz0qfqBncunb7tjO4xa3xVYaA5jBbixDQUYFjVzW7cksrrN4CFNBDBGJ8PLS80MuMg0OG0O+/Qi1mbGb2mUQIDAQABAoIBACODAD0VidVcILeGJ65hRYudHg7raSXrRJv7qMrA/EtdEh3lVsyMXb6on1lq0rphqdf/YmVZldfda1tu2G3dxK8QTIuENeHvB48Uk56HWUXWi77M1WZdqQ+QsZ2lGzymGqQCsBHMNnSd1Jv3alDKXWj+WRrHKvE1cx81RRZYU7M9cpurnF5YNjO7L+7sMxUA9uAQGbe3kDVzrygraicLYQpxSNHytName0A+k3ug0qer4I6PmZhhJykkz6MD3dz/n625HSS+X+TuTm52T2b87tL27xXmSnUK7eYWjZ1vQlP1fWmqnac6u5LApUZaRi0tTjtefSjRW4jr1q20RqOp1kECgYEA7Onh3zM9ejATsjW6WISGKiBPci0D7DUbIuGuJrdQRadlkZzmeQ/VOYAuxIQD4GnQDRhM1FyxsqiAWkJOyCLFiMmsgIEyW9/eRhF8NlCVU+DA/fxy9EagfBbVsgiSBwOex24hPXIVYlaHkLAloNoD4bpw0pQZSDWXr+xvMFNwoGsCgYEA1m3sWA/e8ZuXForaUOoJzBU9nwC79bXv2UNktsVvBlQ1o9pbjoYDcVoAPwuBVUL1UwqDNMzPdhDBKBjZmCyjS6zlYD5ZKjF2m8iTyc4QcaBCdM0iyQpSXTmrfMx+hK1aWwL1p8ssNcednp5ExSAaTyNNGVdbtddiQ6/KMPmhUzMCgYEAwDjLsUNr4BXeBTweo+9yw/9PNn5brm0wRU8C9BrMIJe/izPYs+UqxerBB2Vtl8mCqv1KaQuEika5TYJ7VVsRFvk641DwQScUu5k4RQGBB3tWWz1XL+eWEticLkVR5isDyyAKDEbiHtXCTJz/CtGZUK7rF5BeKv6AwpZ9aKJqwV0CgYEAqXDlQNURu+PR6TtBtoypvz3NmraO0GO7KvipPhAXYm3qkRa8IIxfbhPLfAYQZhpqFvuIoJFzIn2s1I2GbExhoSv3eSzrcn7xlbpSpjYSImeb/AYZhbmFSiuHCi/hjeAaNS7KhZPz1G9vaubvusFaaMyhYPP6AWA4QvpHEJpB06cCgYBqR6/7d2hQiq4MJUrBEzLwG4ijnPeq+UVLQjE598hVIj+8UhRZRRcNWVEJxfcIL1v6Bpo8XISDNVRb30T9bPGVnXvC1jutTUbXKUB1/8iXuyH3IVieobch+bGd4v7ehH/lI7vzB6hjJpFzHopfFUn4wacSQdcFi3tRAwUB/L0S/w== + - peerId: 12D3KooWBgHmDqtXH9SrZfAmwCFsD8LZhTD5dg5wkhdbqFoS8GBN + address: 127.0.0.1:4431 + signingKey: l6LFiKqr4ZHgcPbL+DR7KwMbzImufQPFgpoHOJ/nvfUbpb76DCADHuT1I4gIs+XByglnY1KV8jbMfW64XRW5XQ== + encryptionKey: MIIEowIBAAKCAQEA4ltcn1AH048bMXcKOOW7/E0TZYPxL3OtcHXWHSAZjeeTA/rc45G2eaNgyY7Ji+feLtZERbXNWGFBdNp31NHDYZAYwbZmjEqTEgV4yVx7BQP3VBEzglTJaNLTf+XIJnVAEkoHS6ogjC0oXTM6paHu64EitoOCzF9zqL023swjE3HU0dm2xwsUdGnKeO5nPMso/6e3VMavkKnFmvB965ECCBujtediP4lVdIABNVtoMHCoeI5Sn+m7TKqJSyDOIEMhHT3orYUNZWVeAHE1YTM2cI5tSnDZP80CHZ674Z/bKL7Jaznmq87mVt1h9Use2EkxR07/dJuTGvFOos4jHoiR9QIDAQABAoIBAHAr8EluooI/j61CnYk2p6LPG0aaTQJD4/YwHuwOBTviP2OghKgthGzg/szDerNfMyaoveqBvoIGqCZdQTbwwE7v1qTgXA83wYwTtBitQLVqkr1RTOJQXAMbPv5Jg5czUY3+q4DejQSKOE9/XJfKGJkSRH6Hy2C2CJ3dLnzYUqWGO3t70RLT1/sC6p6w3lXdy3dKZGkoR2wva+HXQxVrP8X5HOResXgNZwgMHt9KF1QHVCcySKYiEAefEKTSdKD2fOd4FxLgp3zWpvH3jrX0zd/DqzTlFD5Ns6Ayp2sIfHVp3sn99DZZM6DauMepQKtoSCnXZ+qKhekAwNVJnsVQkSECgYEA4spY9araeFUSl4uXCUQOpCkSshYOPRYN6sBbHsx8tV2eQtCT+5SuNYmzur3c5bkiraGEab8rZfGdDL6fLxQyaqbOmN31Db5kNh/2X+sRnxkak8lsROUWQZRF9doH73FDv6ZlI3V/JicZlOUCfN5BYT+x74R4/c1YXfyuD1J9gr0CgYEA/4K4SDwZUY4bOVCmKQz0OM+RW4PAAH6LHKenTAZNTeDNFFxc2nqnzRGMEKZTDGy0kbT5mBhBHFgShXcAiKxc5/MGkpt8Jcq6Fr5KGU9aZtYKji6mwMTsUndPNQydh3vOt5pOmcuMM6ovanNTvI8k6Qo53OY1IpO5CfOROu0hm5kCgYBnWsYd92YnDsYxUEldzKlLgPhnNov4pNNk15LvP0vaL7cPRhUaw1B9T6scAKjp/GxkasZ4lsnFZM4o37qV7wNm/WwL2KN0Rv9Od1SFtBBMzFkDXvk7kJeK/XLAr0OMiLbSYZeYCFUQ4yLSa2et1nA/TJLf0CR/rhSGiMAedX6DlQKBgAx1137OT33GrFUzNacy1oYeuTv5RNfBVA9lrabrd8GggN/JUU3mRWCexnHZaptkgbnJVZKxPBuhv+V6VDBWF4HIPD3SD0/YfxK03PA3CnWRYppkdAValRvAbcBsiRIeW4pgoAyn/IJYfk92qFK9uFMVCJVZNKYnBhMSKbbx8X2hAoGBAKwvzyAImbNB+493q1R/lSayxzG76bRJ/EseiTqwIec9c4C+Bd/sVXR+Re+xZb0FI/va1bz5CrduTzLSKBmf/+0lzl0MJvWY2+SXfGYdbl4+TTyqgDDfwqW0Tj8pDimye2BneyTmXko1rF+2Sxen7kMXnJLwpqjwZ6TZJuoqeK8q + - peerId: 12D3KooWASsipDzkridiMBmE7VSqp8yZvGWPY1VqySgMSZk6tsiL + address: 127.0.0.1:4432 + signingKey: /6+uYFwFf9nU6fvXQVtpHhjd8+v4dXc7esZzqkhjyfMJWlMiZOtQeb913FXofD5f20WksU0l6i22B09sFFYwDQ== + encryptionKey: MIIEogIBAAKCAQEAwCy84lzkxtzgn4ixGm0LSUTujOBpOh9m7XDoDPZnMTmExdOe9a5v/LXzdlCOCuBvK5u1T3ALBJMA3Zgvjv/jPRQUdiHprP3sbdfc6IgZPBFdLKFTc9yAA7GMbI4y7LhGMLGOMOqQXs+DOeImfmxEs3ykLXHKNas5ORnZPVnB6E9Qod8KH7UyMmBjQkOZYOOw10X4JZiU6xJp/E+VVWcmeXgNBbj5xOWMSzM+hhoA4wNOzBxACucaKDmqD6qugzebOqyUVSzFnEbquro+MYTWYdUDjZTXdvxgUUo80MGQ164gZhkFUKrmSpUvu3YErFySEGqAdFNwOZ6y/4X3s0BHvQIDAQABAoIBAAZiNhAK5+qXMbr67m8jSimv6YCyf6xXmLKwenTbxofDEl8D7ZbZqYyqeqDmgiFoXSkErhwqa6NGQtQZlxLX+zNvNFLMQ5fkg3MOpZ7vzm7JYN/3p+8EVxhIUJLWkmh8opBBhaioUg1kNUa59W9jp1CTBl0gF4h63JbB/g5kqeVOllUw7J1igAoaX36nOJGOwIynCWdizhDhgyjR4OcYfOLwcPDJueKTc5vM10g3LuMSK/sJmaD3TkJFPtDHw+RMW6wqyjsnkrg2D2oohXEyGWYYIXo2so4HCez0AB1I1JAxtVnRPvSIp7xLMm7+AkDoq12QYDHfxZtDTpfmvJg+Sn0CgYEAxCd+oribtdQW+JUctjsDbSQX5CeRISH5Ith3jveBx2jKIqQVnoVPz6URHOvnlIsqYYLANB8B3JHMWfR2UmkK11x0OcZecB06+oBoCZukvSXF+GqVHzLAQUxaoEBDCCPneskj5w+riMWBiiGDp32rUnkqv0nh7dnH+GfORcJ44L8CgYEA+s5s5EALj1jyU9w4+HVUyVsIrUitFnQg6qw/Td3Kj+8CXImKlS+rlmbQv0m1aOcvtFjQRIjjzZJAf/ausfAME+MayoNODgZsDk5RyDKuSWzMLvZLAa1LD52Uli5Pg8KtpzKVTn4xE1MbjsQcUNhFRAgrNEKNyuzXzdp4uXgGOoMCgYASXwiTQOsEepq0KXMI9jn57Nl3+uSyz7W/t7pq329+N6hG2ktUD3RMJE+X/9gup2IOw+owd377I4SaIDU8vq3PQc944cVShspRT9lunO8u7+y8uW7B/0TWWMpcG+irSIGTlGcSavtL0gOx5jWoaDK1hLemNss8NZtu/nnpOq+LjQKBgDisVozJMBOHPNLYS4NROAR77p0BdCNDwIBmxbM5r+EQWA9DAS6u4+4Lc5YV+MkonG37N6yU5iz4pFyGCHmqzX/c7JvgSc3/g4FED1TWpu1uiUD/ZHmPiAuSRxYchtk2L3k9g+GFwF8mg26iP+fAxv4VfnXDqDi3hhg9CtSWG4ozAoGAOWZXlFKqzGAfcucIe54FVQnweXG9sEuIPAvWvVRs4406ggNmL5eHccXpPHWTgetsr2TYMqPTDVMRmhBzSkyrYgk+b2tme79HPzTWs2Yg/pzjOfTgw7MBX/KlvOW5/J+dvrF3Gx8AHHZ9QQdYqi/MS1NKb2K3IbD0/m5gL5Pwi6A= space: - gcTTL: 60 - syncPeriod: 10 + gcTTL: 60 + syncPeriod: 11 storage: - path: db + path: db metric: - addr: "" + addr: "" log: - production: false - defaultLevel: "" - namedLevels: {} + production: false + defaultLevel: "" + namedLevels: {} diff --git a/etc/configs/client1.yml b/etc/configs/client1.yml index cb45e128..9be9ee38 100755 --- a/etc/configs/client1.yml +++ b/etc/configs/client1.yml @@ -5,30 +5,30 @@ grpcServer: - 127.0.0.1:4630 tls: false account: - peerId: 12D3KooWAQFT6zznsaGXVfuNpwBRzNJz7baL7LrEizLTTja9bjZX - peerKey: ltnZjSrDLpimgrNjU6fPfIJXFvezWBWG/lAN1TwexJcIribJwjn4I+moUi4a9V++E+7e1qT5Th1bcSSuVyrWNg== - signingKey: dq9WuXES/kTW7fiTmSrM0aXjkYxrXVe6yb9JrZCGvDxltONioEDqeBFntz8FAupeOsgxbq4SsrsBri9jSdFCXw== - encryptionKey: MIIEogIBAAKCAQEArl641+uxFrnsM8mkKYQFa56rJoxSvdmBDtX584V6eNCp0PDxj+tkZggjist4BDwJQvGYCckuTDFU60l9dKMFsY8Eqe+2BnNXdoSZtebIQeOS3A7EHW8I+CTaFHe+Ty/2TDGRQnJzxGPCwhJ9qi9YSOi4P6AgxGdTt+5K7gvyuldhJd1XgMBmcjfPqmNqG0nQOEBBSOvcnAd3R8Tl7ayK6s3axDhqOvXeCXkI6ZG1NI6g3TPBYL+klgFzsDkvABhW4vq5IydZR25mGfqPv+vZ48a1rllaxbG9mGhGMj1BfcV0vqEMECWJOlHca0gVISJJm+ni9q5TRQ+Z0eMiuILl/wIDAQABAoIBAE8YaICJSSsl6x8SuIScfljzAG/b9yxnHUO9jEQKqCNlg6JjqS+/dytRRc4PvcEt+oWDUZQezgGB3yNbkqz1xf9lAJiVQ9xpNaNtQsxggzZgJJ3tlMhFNaxaCxJ9vrXs66xkT5/0is7q8c1W1en8z+9CoVE7MaHlvPQSA6s3gENF3+1AUgaoMGK2hhqc7rtC4ANl8DIndEgFCkoXVnIZwQXlcam4WIuSavcuTRlLdPJxP4sHYf5hBTgF1+0EeIeuOzHOzL4Dzz/GbCNMYEwjR0TceNOZ93OrXH51BZQP4B0g6S4vbSlIj4FjNQlvW/BbDn1VedWqAmRhSq6Fop4MTgECgYEAzddpqQKY667c3BEFxxPRkOAwYuHHPhMdiwb/78zB4wd1Q4v9E9MuEGyXqojQH9X7VIl5pfNJXQ4j2TatwUEonnfu3T6hij2aQN+PN81GIBIJvF8qeeZtD8+jhS6BXR/Hh/D2hkWHfjiynjTmJYMXod5vYD6eTaiLw/cyED4qz6cCgYEA2NwXGROPcdnkYfQAI8kKVm/8IokcBXaCJxf4w1fj4KhRxjXw6lmh2070EfsjAslw+SNxhXh1a/cZQ4JkzUMmQezAXdlbiHZ9g/BbVG4R2xezEsxnRimlieBQ+1stzWId1hO5KurybZKvCF5NOOuNjwE7wgDHV1SPjhI3H/LpwekCgYANxpbZqsTVMRSy3ajHU/o4eeiDFZ0h+GGHxmYmhEuNiBg+9wVu6Dky/DGCRjm3h7iURccQZiHIyoN3rAMg5d10DY68284v1EOYh92r3F8PEmX4Z14OXm96GWlWJnCd7NyLqoK1Jb4VonHByMSGSimwuZQ2mro5dEg2Szrcf2yaDQKBgDEGkLI6mdNDTz5VyzJL4OpppraoCI2znPj5kmOXGw1PAC2vRCe228CYuNTX0bJvl/q66I8kDGe8FRoOAHvnEl8VBugwm2DeaMHLNNqBh8fgM7usOizCfYoODEDG/DPSWqxrCRGKzAO5hZh+uTaFChuqS7gwNOCpXUrhE1VFtVMBAoGAFcKs62/+1FOqcBGgfuCtNXMmS3mnEogWaCYyfPwBioZR8SBeoR21hUd7H7JRi4Ho984xYgbnAB76b+UDjgvSnut9eahZmzAxuvxvvUHiqb/wxAmibzov0Di7c+xtbA8XOF2U1lwZ+i89OpxRnEV8b4Dr7fzjed6BVgR+SUzMkMs= + peerId: 12D3KooWFgtCbkf47HhFyQW2cEdAkvaofpokCiaa24Phnz7hpepG + peerKey: 4nWcqWOZxv1iXWYuW35eJlF9nxownm38bZjQ27pmFgVXO26vobKLx70TnNTQzZQdoW/dZtxyE9PO37R74vfPQQ== + signingKey: ULbtmmyFjkJ6Z+54FI1OJWfu0QdIeoCckwcrBZDLGhw2o2cXTFH5KGxQuAruNTbREz9eAVGmhGoBZtKVi6/6ng== + encryptionKey: MIIEowIBAAKCAQEAuGAvw/JQuivjoFIhV9RGkoCjO60jNkQpVPWK52eUtEvKHT2EzufhCRwxhAreajoyzk0PsyJ75FWrrvYs2tkSVHFOSiBkZIsldn5gPg1cnvnJOZ9VKDFp8h85d/4cPQ5tX78043nYTgLje2EmbB83inIr4oiZgxDrtLkozJHleAyWuOLIvlWO1l4Uplf6+uooL/5+WeUCuSGUM0wgXfpn+I2IuRhVDVZiChfp51Q6D6brTdOzNcWq1dw6Vld67u8aCLF1EVZ+xM/rnLLBC7MFvIw44LqHvmvGs/lpE9nMNx5L2KfpbpHSBI0IH3FkLQe2Qz8OMZpIa+aga/DzrBpEdwIDAQABAoIBACudXU898AjKPxN6ujZ7maIoWfTQ9SZuI1TcrNomr4+i6hHWrqb/RUWRbMkuhQSd9czFf/RBMQuHlJBT3bJ7bRGaqAly9iyumdMY/A1RvdpBfm9qGIvkfIpxBngzHVz4H7lpkspI1XlGx6c1CRDEpa/TaDwzUhUmGIvszRDvZlfqQvjPjyYSV5Hdc4ywh5zjuSFlxOD/9gsPRE5v4M4FGrGv8cm859P1u95Wxxo3pWincpzjvWw2LpsUGctyU34MhErxh86vNhP9v+nR4VkdojVKkHQTYnPKUlaKj6F+IUSj8syxuTJb8bs0GBuvcXW9AKp/K0xq/GBC8Cu/XN7Ln7kCgYEAwZoqLnU9OuwkcN5AHYW7XsxmVCEnxOsncrUbIzEKPvy4wELdOCVVrX66zmIjb+1+mhaz+mGMGEpkVMBld3wdDfmGgo0CAPlF4efH1ppMzUm2aZ+HYQR8KMH1XOT9qjbGEnLeWcANQT0vZPpe77PQLNwLJ1zv6EtXMMrEH0s4ijUCgYEA88zCNsBtB07ayFr9r+RCfHx/X9wFkT59t2K+axIfZE02f62WWqJCZYMlZu9XAbYEQ94H43/NAL9wfA8dgnF7mKSL8stJKt0g2iPa3MluF4Gq5Y2XYEVf/EDEhP2jh8p1l+xs18rVzsQQ6b3CEU9ytmBJWvkWnwVXf+ZnsCFECXsCgYBM3YyJzXp1/nOpbFRAZGw0AytNk6xafpK29DjGDB5pS6V+kA2M0SXnMD2y2zv+oGh3fTQP4NLigga7r3eZrOlMNxm0k4+MG2wneQLarYB4sR9/aBsz5bf15qwoKbKc9gpGIN0u/RVGJai/irhOqzGn3eV/x2Jo9CC1+otLcW4NUQKBgQCOOHlnZTN1GuwICwSIkhiy9BF+AyUASLsfuquoXEcRxPUw4DugnZ0sCKhN9vsDlYHBcYmajhgyAnuE83BcgwT906eMOEhzh9G9T0NCnwLpFYxzIvkWgQHwbnv1tNyrv1CAEryf2cSGPNw87qSCYp1hhKPmPP6UP5J+mxMLrSw6dwKBgHHFweDS2tw4TNxJQjhfQOp5t9VQbQffFZAqpXGFTc4vf7XePlxIGoIpOg4ShHCKKHSy0PtsLe7QjLrdbMkyYh8oGqgNe5CYTzFFDeK6Im1DoiqNWT+YUWF/gzVRUSpo0QW+4J1hfChG2URp9KbnditXKsJ5Vh+QayHPoZwN7Kgl apiServer: listenAddrs: - 127.0.0.1:8090 tls: false nodes: - - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo + - peerId: 12D3KooWPuwdqpDQxWhD2Vh4yskx2T5VMrwdpTZLfACzgsGfQfNy address: 127.0.0.1:4430 - signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= - - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC + signingKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + encryptionKey: MIIEpAIBAAKCAQEAxnE9Htwto+2fVmonkG9/DxNre33n7kjfrZU73JcHmpKhPlRFirig5T8rs2MaTq1R72/8nGBJuSxsz1PnexI3die39pY1OFYfZCZ59LbT7uH/xHcvkVrK2n50Q41KbbGT9BEzyW+XPkKPDpTq3/igYP+yUQgoWLfMwxCCLKXDe6qUC0fuIxR80fvj3XvorB5dnAiQ01JkH4PtCV1OWT6ZpLGhzcYxsxTHozd6LdMOC7wgGhW26dOSa/vZ1t5avbewFVIz0qfqBncunb7tjO4xa3xVYaA5jBbixDQUYFjVzW7cksrrN4CFNBDBGJ8PLS80MuMg0OG0O+/Qi1mbGb2mUQIDAQABAoIBACODAD0VidVcILeGJ65hRYudHg7raSXrRJv7qMrA/EtdEh3lVsyMXb6on1lq0rphqdf/YmVZldfda1tu2G3dxK8QTIuENeHvB48Uk56HWUXWi77M1WZdqQ+QsZ2lGzymGqQCsBHMNnSd1Jv3alDKXWj+WRrHKvE1cx81RRZYU7M9cpurnF5YNjO7L+7sMxUA9uAQGbe3kDVzrygraicLYQpxSNHytName0A+k3ug0qer4I6PmZhhJykkz6MD3dz/n625HSS+X+TuTm52T2b87tL27xXmSnUK7eYWjZ1vQlP1fWmqnac6u5LApUZaRi0tTjtefSjRW4jr1q20RqOp1kECgYEA7Onh3zM9ejATsjW6WISGKiBPci0D7DUbIuGuJrdQRadlkZzmeQ/VOYAuxIQD4GnQDRhM1FyxsqiAWkJOyCLFiMmsgIEyW9/eRhF8NlCVU+DA/fxy9EagfBbVsgiSBwOex24hPXIVYlaHkLAloNoD4bpw0pQZSDWXr+xvMFNwoGsCgYEA1m3sWA/e8ZuXForaUOoJzBU9nwC79bXv2UNktsVvBlQ1o9pbjoYDcVoAPwuBVUL1UwqDNMzPdhDBKBjZmCyjS6zlYD5ZKjF2m8iTyc4QcaBCdM0iyQpSXTmrfMx+hK1aWwL1p8ssNcednp5ExSAaTyNNGVdbtddiQ6/KMPmhUzMCgYEAwDjLsUNr4BXeBTweo+9yw/9PNn5brm0wRU8C9BrMIJe/izPYs+UqxerBB2Vtl8mCqv1KaQuEika5TYJ7VVsRFvk641DwQScUu5k4RQGBB3tWWz1XL+eWEticLkVR5isDyyAKDEbiHtXCTJz/CtGZUK7rF5BeKv6AwpZ9aKJqwV0CgYEAqXDlQNURu+PR6TtBtoypvz3NmraO0GO7KvipPhAXYm3qkRa8IIxfbhPLfAYQZhpqFvuIoJFzIn2s1I2GbExhoSv3eSzrcn7xlbpSpjYSImeb/AYZhbmFSiuHCi/hjeAaNS7KhZPz1G9vaubvusFaaMyhYPP6AWA4QvpHEJpB06cCgYBqR6/7d2hQiq4MJUrBEzLwG4ijnPeq+UVLQjE598hVIj+8UhRZRRcNWVEJxfcIL1v6Bpo8XISDNVRb30T9bPGVnXvC1jutTUbXKUB1/8iXuyH3IVieobch+bGd4v7ehH/lI7vzB6hjJpFzHopfFUn4wacSQdcFi3tRAwUB/L0S/w== + - peerId: 12D3KooWBgHmDqtXH9SrZfAmwCFsD8LZhTD5dg5wkhdbqFoS8GBN address: 127.0.0.1:4431 - signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== - encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= - - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W + signingKey: l6LFiKqr4ZHgcPbL+DR7KwMbzImufQPFgpoHOJ/nvfUbpb76DCADHuT1I4gIs+XByglnY1KV8jbMfW64XRW5XQ== + encryptionKey: MIIEowIBAAKCAQEA4ltcn1AH048bMXcKOOW7/E0TZYPxL3OtcHXWHSAZjeeTA/rc45G2eaNgyY7Ji+feLtZERbXNWGFBdNp31NHDYZAYwbZmjEqTEgV4yVx7BQP3VBEzglTJaNLTf+XIJnVAEkoHS6ogjC0oXTM6paHu64EitoOCzF9zqL023swjE3HU0dm2xwsUdGnKeO5nPMso/6e3VMavkKnFmvB965ECCBujtediP4lVdIABNVtoMHCoeI5Sn+m7TKqJSyDOIEMhHT3orYUNZWVeAHE1YTM2cI5tSnDZP80CHZ674Z/bKL7Jaznmq87mVt1h9Use2EkxR07/dJuTGvFOos4jHoiR9QIDAQABAoIBAHAr8EluooI/j61CnYk2p6LPG0aaTQJD4/YwHuwOBTviP2OghKgthGzg/szDerNfMyaoveqBvoIGqCZdQTbwwE7v1qTgXA83wYwTtBitQLVqkr1RTOJQXAMbPv5Jg5czUY3+q4DejQSKOE9/XJfKGJkSRH6Hy2C2CJ3dLnzYUqWGO3t70RLT1/sC6p6w3lXdy3dKZGkoR2wva+HXQxVrP8X5HOResXgNZwgMHt9KF1QHVCcySKYiEAefEKTSdKD2fOd4FxLgp3zWpvH3jrX0zd/DqzTlFD5Ns6Ayp2sIfHVp3sn99DZZM6DauMepQKtoSCnXZ+qKhekAwNVJnsVQkSECgYEA4spY9araeFUSl4uXCUQOpCkSshYOPRYN6sBbHsx8tV2eQtCT+5SuNYmzur3c5bkiraGEab8rZfGdDL6fLxQyaqbOmN31Db5kNh/2X+sRnxkak8lsROUWQZRF9doH73FDv6ZlI3V/JicZlOUCfN5BYT+x74R4/c1YXfyuD1J9gr0CgYEA/4K4SDwZUY4bOVCmKQz0OM+RW4PAAH6LHKenTAZNTeDNFFxc2nqnzRGMEKZTDGy0kbT5mBhBHFgShXcAiKxc5/MGkpt8Jcq6Fr5KGU9aZtYKji6mwMTsUndPNQydh3vOt5pOmcuMM6ovanNTvI8k6Qo53OY1IpO5CfOROu0hm5kCgYBnWsYd92YnDsYxUEldzKlLgPhnNov4pNNk15LvP0vaL7cPRhUaw1B9T6scAKjp/GxkasZ4lsnFZM4o37qV7wNm/WwL2KN0Rv9Od1SFtBBMzFkDXvk7kJeK/XLAr0OMiLbSYZeYCFUQ4yLSa2et1nA/TJLf0CR/rhSGiMAedX6DlQKBgAx1137OT33GrFUzNacy1oYeuTv5RNfBVA9lrabrd8GggN/JUU3mRWCexnHZaptkgbnJVZKxPBuhv+V6VDBWF4HIPD3SD0/YfxK03PA3CnWRYppkdAValRvAbcBsiRIeW4pgoAyn/IJYfk92qFK9uFMVCJVZNKYnBhMSKbbx8X2hAoGBAKwvzyAImbNB+493q1R/lSayxzG76bRJ/EseiTqwIec9c4C+Bd/sVXR+Re+xZb0FI/va1bz5CrduTzLSKBmf/+0lzl0MJvWY2+SXfGYdbl4+TTyqgDDfwqW0Tj8pDimye2BneyTmXko1rF+2Sxen7kMXnJLwpqjwZ6TZJuoqeK8q + - peerId: 12D3KooWASsipDzkridiMBmE7VSqp8yZvGWPY1VqySgMSZk6tsiL address: 127.0.0.1:4432 - signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== - encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== + signingKey: /6+uYFwFf9nU6fvXQVtpHhjd8+v4dXc7esZzqkhjyfMJWlMiZOtQeb913FXofD5f20WksU0l6i22B09sFFYwDQ== + encryptionKey: MIIEogIBAAKCAQEAwCy84lzkxtzgn4ixGm0LSUTujOBpOh9m7XDoDPZnMTmExdOe9a5v/LXzdlCOCuBvK5u1T3ALBJMA3Zgvjv/jPRQUdiHprP3sbdfc6IgZPBFdLKFTc9yAA7GMbI4y7LhGMLGOMOqQXs+DOeImfmxEs3ykLXHKNas5ORnZPVnB6E9Qod8KH7UyMmBjQkOZYOOw10X4JZiU6xJp/E+VVWcmeXgNBbj5xOWMSzM+hhoA4wNOzBxACucaKDmqD6qugzebOqyUVSzFnEbquro+MYTWYdUDjZTXdvxgUUo80MGQ164gZhkFUKrmSpUvu3YErFySEGqAdFNwOZ6y/4X3s0BHvQIDAQABAoIBAAZiNhAK5+qXMbr67m8jSimv6YCyf6xXmLKwenTbxofDEl8D7ZbZqYyqeqDmgiFoXSkErhwqa6NGQtQZlxLX+zNvNFLMQ5fkg3MOpZ7vzm7JYN/3p+8EVxhIUJLWkmh8opBBhaioUg1kNUa59W9jp1CTBl0gF4h63JbB/g5kqeVOllUw7J1igAoaX36nOJGOwIynCWdizhDhgyjR4OcYfOLwcPDJueKTc5vM10g3LuMSK/sJmaD3TkJFPtDHw+RMW6wqyjsnkrg2D2oohXEyGWYYIXo2so4HCez0AB1I1JAxtVnRPvSIp7xLMm7+AkDoq12QYDHfxZtDTpfmvJg+Sn0CgYEAxCd+oribtdQW+JUctjsDbSQX5CeRISH5Ith3jveBx2jKIqQVnoVPz6URHOvnlIsqYYLANB8B3JHMWfR2UmkK11x0OcZecB06+oBoCZukvSXF+GqVHzLAQUxaoEBDCCPneskj5w+riMWBiiGDp32rUnkqv0nh7dnH+GfORcJ44L8CgYEA+s5s5EALj1jyU9w4+HVUyVsIrUitFnQg6qw/Td3Kj+8CXImKlS+rlmbQv0m1aOcvtFjQRIjjzZJAf/ausfAME+MayoNODgZsDk5RyDKuSWzMLvZLAa1LD52Uli5Pg8KtpzKVTn4xE1MbjsQcUNhFRAgrNEKNyuzXzdp4uXgGOoMCgYASXwiTQOsEepq0KXMI9jn57Nl3+uSyz7W/t7pq329+N6hG2ktUD3RMJE+X/9gup2IOw+owd377I4SaIDU8vq3PQc944cVShspRT9lunO8u7+y8uW7B/0TWWMpcG+irSIGTlGcSavtL0gOx5jWoaDK1hLemNss8NZtu/nnpOq+LjQKBgDisVozJMBOHPNLYS4NROAR77p0BdCNDwIBmxbM5r+EQWA9DAS6u4+4Lc5YV+MkonG37N6yU5iz4pFyGCHmqzX/c7JvgSc3/g4FED1TWpu1uiUD/ZHmPiAuSRxYchtk2L3k9g+GFwF8mg26iP+fAxv4VfnXDqDi3hhg9CtSWG4ozAoGAOWZXlFKqzGAfcucIe54FVQnweXG9sEuIPAvWvVRs4406ggNmL5eHccXpPHWTgetsr2TYMqPTDVMRmhBzSkyrYgk+b2tme79HPzTWs2Yg/pzjOfTgw7MBX/KlvOW5/J+dvrF3Gx8AHHZ9QQdYqi/MS1NKb2K3IbD0/m5gL5Pwi6A= space: gcTTL: 60 - syncPeriod: 10 + syncPeriod: 11 storage: path: db metric: diff --git a/etc/configs/client2.yml b/etc/configs/client2.yml index 117c627e..c4577024 100755 --- a/etc/configs/client2.yml +++ b/etc/configs/client2.yml @@ -5,30 +5,30 @@ grpcServer: - 127.0.0.1:4631 tls: false account: - peerId: 12D3KooWKf46wegbEsPhaBb4U2resrZP4pDtRfQZgkpo5Vor83mx - peerKey: MK+G4UJmlb+HZZZiGJAf1Uw0fIJIafmzYNvPxB6oq66SMjcX8nE35Npwoc5YnVzAGYD7JUUWt2BgH/jvn9tvXw== - signingKey: dq9WuXES/kTW7fiTmSrM0aXjkYxrXVe6yb9JrZCGvDxltONioEDqeBFntz8FAupeOsgxbq4SsrsBri9jSdFCXw== - encryptionKey: MIIEogIBAAKCAQEArl641+uxFrnsM8mkKYQFa56rJoxSvdmBDtX584V6eNCp0PDxj+tkZggjist4BDwJQvGYCckuTDFU60l9dKMFsY8Eqe+2BnNXdoSZtebIQeOS3A7EHW8I+CTaFHe+Ty/2TDGRQnJzxGPCwhJ9qi9YSOi4P6AgxGdTt+5K7gvyuldhJd1XgMBmcjfPqmNqG0nQOEBBSOvcnAd3R8Tl7ayK6s3axDhqOvXeCXkI6ZG1NI6g3TPBYL+klgFzsDkvABhW4vq5IydZR25mGfqPv+vZ48a1rllaxbG9mGhGMj1BfcV0vqEMECWJOlHca0gVISJJm+ni9q5TRQ+Z0eMiuILl/wIDAQABAoIBAE8YaICJSSsl6x8SuIScfljzAG/b9yxnHUO9jEQKqCNlg6JjqS+/dytRRc4PvcEt+oWDUZQezgGB3yNbkqz1xf9lAJiVQ9xpNaNtQsxggzZgJJ3tlMhFNaxaCxJ9vrXs66xkT5/0is7q8c1W1en8z+9CoVE7MaHlvPQSA6s3gENF3+1AUgaoMGK2hhqc7rtC4ANl8DIndEgFCkoXVnIZwQXlcam4WIuSavcuTRlLdPJxP4sHYf5hBTgF1+0EeIeuOzHOzL4Dzz/GbCNMYEwjR0TceNOZ93OrXH51BZQP4B0g6S4vbSlIj4FjNQlvW/BbDn1VedWqAmRhSq6Fop4MTgECgYEAzddpqQKY667c3BEFxxPRkOAwYuHHPhMdiwb/78zB4wd1Q4v9E9MuEGyXqojQH9X7VIl5pfNJXQ4j2TatwUEonnfu3T6hij2aQN+PN81GIBIJvF8qeeZtD8+jhS6BXR/Hh/D2hkWHfjiynjTmJYMXod5vYD6eTaiLw/cyED4qz6cCgYEA2NwXGROPcdnkYfQAI8kKVm/8IokcBXaCJxf4w1fj4KhRxjXw6lmh2070EfsjAslw+SNxhXh1a/cZQ4JkzUMmQezAXdlbiHZ9g/BbVG4R2xezEsxnRimlieBQ+1stzWId1hO5KurybZKvCF5NOOuNjwE7wgDHV1SPjhI3H/LpwekCgYANxpbZqsTVMRSy3ajHU/o4eeiDFZ0h+GGHxmYmhEuNiBg+9wVu6Dky/DGCRjm3h7iURccQZiHIyoN3rAMg5d10DY68284v1EOYh92r3F8PEmX4Z14OXm96GWlWJnCd7NyLqoK1Jb4VonHByMSGSimwuZQ2mro5dEg2Szrcf2yaDQKBgDEGkLI6mdNDTz5VyzJL4OpppraoCI2znPj5kmOXGw1PAC2vRCe228CYuNTX0bJvl/q66I8kDGe8FRoOAHvnEl8VBugwm2DeaMHLNNqBh8fgM7usOizCfYoODEDG/DPSWqxrCRGKzAO5hZh+uTaFChuqS7gwNOCpXUrhE1VFtVMBAoGAFcKs62/+1FOqcBGgfuCtNXMmS3mnEogWaCYyfPwBioZR8SBeoR21hUd7H7JRi4Ho984xYgbnAB76b+UDjgvSnut9eahZmzAxuvxvvUHiqb/wxAmibzov0Di7c+xtbA8XOF2U1lwZ+i89OpxRnEV8b4Dr7fzjed6BVgR+SUzMkMs= + peerId: 12D3KooWQuD9ShSHt4nb7bXefg8ndpDXCDzwrm9pjHsnDY2khbRi + peerKey: fp/Q18I7TNM4kgKXbbOBQJbJonlrQqAlZwTF6Rx/sKXgHQGZ1dBcS45oXGbTb15Bi2r7sOX+d6HJaaQE29MisQ== + signingKey: ULbtmmyFjkJ6Z+54FI1OJWfu0QdIeoCckwcrBZDLGhw2o2cXTFH5KGxQuAruNTbREz9eAVGmhGoBZtKVi6/6ng== + encryptionKey: MIIEowIBAAKCAQEAuGAvw/JQuivjoFIhV9RGkoCjO60jNkQpVPWK52eUtEvKHT2EzufhCRwxhAreajoyzk0PsyJ75FWrrvYs2tkSVHFOSiBkZIsldn5gPg1cnvnJOZ9VKDFp8h85d/4cPQ5tX78043nYTgLje2EmbB83inIr4oiZgxDrtLkozJHleAyWuOLIvlWO1l4Uplf6+uooL/5+WeUCuSGUM0wgXfpn+I2IuRhVDVZiChfp51Q6D6brTdOzNcWq1dw6Vld67u8aCLF1EVZ+xM/rnLLBC7MFvIw44LqHvmvGs/lpE9nMNx5L2KfpbpHSBI0IH3FkLQe2Qz8OMZpIa+aga/DzrBpEdwIDAQABAoIBACudXU898AjKPxN6ujZ7maIoWfTQ9SZuI1TcrNomr4+i6hHWrqb/RUWRbMkuhQSd9czFf/RBMQuHlJBT3bJ7bRGaqAly9iyumdMY/A1RvdpBfm9qGIvkfIpxBngzHVz4H7lpkspI1XlGx6c1CRDEpa/TaDwzUhUmGIvszRDvZlfqQvjPjyYSV5Hdc4ywh5zjuSFlxOD/9gsPRE5v4M4FGrGv8cm859P1u95Wxxo3pWincpzjvWw2LpsUGctyU34MhErxh86vNhP9v+nR4VkdojVKkHQTYnPKUlaKj6F+IUSj8syxuTJb8bs0GBuvcXW9AKp/K0xq/GBC8Cu/XN7Ln7kCgYEAwZoqLnU9OuwkcN5AHYW7XsxmVCEnxOsncrUbIzEKPvy4wELdOCVVrX66zmIjb+1+mhaz+mGMGEpkVMBld3wdDfmGgo0CAPlF4efH1ppMzUm2aZ+HYQR8KMH1XOT9qjbGEnLeWcANQT0vZPpe77PQLNwLJ1zv6EtXMMrEH0s4ijUCgYEA88zCNsBtB07ayFr9r+RCfHx/X9wFkT59t2K+axIfZE02f62WWqJCZYMlZu9XAbYEQ94H43/NAL9wfA8dgnF7mKSL8stJKt0g2iPa3MluF4Gq5Y2XYEVf/EDEhP2jh8p1l+xs18rVzsQQ6b3CEU9ytmBJWvkWnwVXf+ZnsCFECXsCgYBM3YyJzXp1/nOpbFRAZGw0AytNk6xafpK29DjGDB5pS6V+kA2M0SXnMD2y2zv+oGh3fTQP4NLigga7r3eZrOlMNxm0k4+MG2wneQLarYB4sR9/aBsz5bf15qwoKbKc9gpGIN0u/RVGJai/irhOqzGn3eV/x2Jo9CC1+otLcW4NUQKBgQCOOHlnZTN1GuwICwSIkhiy9BF+AyUASLsfuquoXEcRxPUw4DugnZ0sCKhN9vsDlYHBcYmajhgyAnuE83BcgwT906eMOEhzh9G9T0NCnwLpFYxzIvkWgQHwbnv1tNyrv1CAEryf2cSGPNw87qSCYp1hhKPmPP6UP5J+mxMLrSw6dwKBgHHFweDS2tw4TNxJQjhfQOp5t9VQbQffFZAqpXGFTc4vf7XePlxIGoIpOg4ShHCKKHSy0PtsLe7QjLrdbMkyYh8oGqgNe5CYTzFFDeK6Im1DoiqNWT+YUWF/gzVRUSpo0QW+4J1hfChG2URp9KbnditXKsJ5Vh+QayHPoZwN7Kgl apiServer: listenAddrs: - 127.0.0.1:8091 tls: false nodes: - - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo + - peerId: 12D3KooWPuwdqpDQxWhD2Vh4yskx2T5VMrwdpTZLfACzgsGfQfNy address: 127.0.0.1:4430 - signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= - - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC + signingKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + encryptionKey: MIIEpAIBAAKCAQEAxnE9Htwto+2fVmonkG9/DxNre33n7kjfrZU73JcHmpKhPlRFirig5T8rs2MaTq1R72/8nGBJuSxsz1PnexI3die39pY1OFYfZCZ59LbT7uH/xHcvkVrK2n50Q41KbbGT9BEzyW+XPkKPDpTq3/igYP+yUQgoWLfMwxCCLKXDe6qUC0fuIxR80fvj3XvorB5dnAiQ01JkH4PtCV1OWT6ZpLGhzcYxsxTHozd6LdMOC7wgGhW26dOSa/vZ1t5avbewFVIz0qfqBncunb7tjO4xa3xVYaA5jBbixDQUYFjVzW7cksrrN4CFNBDBGJ8PLS80MuMg0OG0O+/Qi1mbGb2mUQIDAQABAoIBACODAD0VidVcILeGJ65hRYudHg7raSXrRJv7qMrA/EtdEh3lVsyMXb6on1lq0rphqdf/YmVZldfda1tu2G3dxK8QTIuENeHvB48Uk56HWUXWi77M1WZdqQ+QsZ2lGzymGqQCsBHMNnSd1Jv3alDKXWj+WRrHKvE1cx81RRZYU7M9cpurnF5YNjO7L+7sMxUA9uAQGbe3kDVzrygraicLYQpxSNHytName0A+k3ug0qer4I6PmZhhJykkz6MD3dz/n625HSS+X+TuTm52T2b87tL27xXmSnUK7eYWjZ1vQlP1fWmqnac6u5LApUZaRi0tTjtefSjRW4jr1q20RqOp1kECgYEA7Onh3zM9ejATsjW6WISGKiBPci0D7DUbIuGuJrdQRadlkZzmeQ/VOYAuxIQD4GnQDRhM1FyxsqiAWkJOyCLFiMmsgIEyW9/eRhF8NlCVU+DA/fxy9EagfBbVsgiSBwOex24hPXIVYlaHkLAloNoD4bpw0pQZSDWXr+xvMFNwoGsCgYEA1m3sWA/e8ZuXForaUOoJzBU9nwC79bXv2UNktsVvBlQ1o9pbjoYDcVoAPwuBVUL1UwqDNMzPdhDBKBjZmCyjS6zlYD5ZKjF2m8iTyc4QcaBCdM0iyQpSXTmrfMx+hK1aWwL1p8ssNcednp5ExSAaTyNNGVdbtddiQ6/KMPmhUzMCgYEAwDjLsUNr4BXeBTweo+9yw/9PNn5brm0wRU8C9BrMIJe/izPYs+UqxerBB2Vtl8mCqv1KaQuEika5TYJ7VVsRFvk641DwQScUu5k4RQGBB3tWWz1XL+eWEticLkVR5isDyyAKDEbiHtXCTJz/CtGZUK7rF5BeKv6AwpZ9aKJqwV0CgYEAqXDlQNURu+PR6TtBtoypvz3NmraO0GO7KvipPhAXYm3qkRa8IIxfbhPLfAYQZhpqFvuIoJFzIn2s1I2GbExhoSv3eSzrcn7xlbpSpjYSImeb/AYZhbmFSiuHCi/hjeAaNS7KhZPz1G9vaubvusFaaMyhYPP6AWA4QvpHEJpB06cCgYBqR6/7d2hQiq4MJUrBEzLwG4ijnPeq+UVLQjE598hVIj+8UhRZRRcNWVEJxfcIL1v6Bpo8XISDNVRb30T9bPGVnXvC1jutTUbXKUB1/8iXuyH3IVieobch+bGd4v7ehH/lI7vzB6hjJpFzHopfFUn4wacSQdcFi3tRAwUB/L0S/w== + - peerId: 12D3KooWBgHmDqtXH9SrZfAmwCFsD8LZhTD5dg5wkhdbqFoS8GBN address: 127.0.0.1:4431 - signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== - encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= - - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W + signingKey: l6LFiKqr4ZHgcPbL+DR7KwMbzImufQPFgpoHOJ/nvfUbpb76DCADHuT1I4gIs+XByglnY1KV8jbMfW64XRW5XQ== + encryptionKey: MIIEowIBAAKCAQEA4ltcn1AH048bMXcKOOW7/E0TZYPxL3OtcHXWHSAZjeeTA/rc45G2eaNgyY7Ji+feLtZERbXNWGFBdNp31NHDYZAYwbZmjEqTEgV4yVx7BQP3VBEzglTJaNLTf+XIJnVAEkoHS6ogjC0oXTM6paHu64EitoOCzF9zqL023swjE3HU0dm2xwsUdGnKeO5nPMso/6e3VMavkKnFmvB965ECCBujtediP4lVdIABNVtoMHCoeI5Sn+m7TKqJSyDOIEMhHT3orYUNZWVeAHE1YTM2cI5tSnDZP80CHZ674Z/bKL7Jaznmq87mVt1h9Use2EkxR07/dJuTGvFOos4jHoiR9QIDAQABAoIBAHAr8EluooI/j61CnYk2p6LPG0aaTQJD4/YwHuwOBTviP2OghKgthGzg/szDerNfMyaoveqBvoIGqCZdQTbwwE7v1qTgXA83wYwTtBitQLVqkr1RTOJQXAMbPv5Jg5czUY3+q4DejQSKOE9/XJfKGJkSRH6Hy2C2CJ3dLnzYUqWGO3t70RLT1/sC6p6w3lXdy3dKZGkoR2wva+HXQxVrP8X5HOResXgNZwgMHt9KF1QHVCcySKYiEAefEKTSdKD2fOd4FxLgp3zWpvH3jrX0zd/DqzTlFD5Ns6Ayp2sIfHVp3sn99DZZM6DauMepQKtoSCnXZ+qKhekAwNVJnsVQkSECgYEA4spY9araeFUSl4uXCUQOpCkSshYOPRYN6sBbHsx8tV2eQtCT+5SuNYmzur3c5bkiraGEab8rZfGdDL6fLxQyaqbOmN31Db5kNh/2X+sRnxkak8lsROUWQZRF9doH73FDv6ZlI3V/JicZlOUCfN5BYT+x74R4/c1YXfyuD1J9gr0CgYEA/4K4SDwZUY4bOVCmKQz0OM+RW4PAAH6LHKenTAZNTeDNFFxc2nqnzRGMEKZTDGy0kbT5mBhBHFgShXcAiKxc5/MGkpt8Jcq6Fr5KGU9aZtYKji6mwMTsUndPNQydh3vOt5pOmcuMM6ovanNTvI8k6Qo53OY1IpO5CfOROu0hm5kCgYBnWsYd92YnDsYxUEldzKlLgPhnNov4pNNk15LvP0vaL7cPRhUaw1B9T6scAKjp/GxkasZ4lsnFZM4o37qV7wNm/WwL2KN0Rv9Od1SFtBBMzFkDXvk7kJeK/XLAr0OMiLbSYZeYCFUQ4yLSa2et1nA/TJLf0CR/rhSGiMAedX6DlQKBgAx1137OT33GrFUzNacy1oYeuTv5RNfBVA9lrabrd8GggN/JUU3mRWCexnHZaptkgbnJVZKxPBuhv+V6VDBWF4HIPD3SD0/YfxK03PA3CnWRYppkdAValRvAbcBsiRIeW4pgoAyn/IJYfk92qFK9uFMVCJVZNKYnBhMSKbbx8X2hAoGBAKwvzyAImbNB+493q1R/lSayxzG76bRJ/EseiTqwIec9c4C+Bd/sVXR+Re+xZb0FI/va1bz5CrduTzLSKBmf/+0lzl0MJvWY2+SXfGYdbl4+TTyqgDDfwqW0Tj8pDimye2BneyTmXko1rF+2Sxen7kMXnJLwpqjwZ6TZJuoqeK8q + - peerId: 12D3KooWASsipDzkridiMBmE7VSqp8yZvGWPY1VqySgMSZk6tsiL address: 127.0.0.1:4432 - signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== - encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== + signingKey: /6+uYFwFf9nU6fvXQVtpHhjd8+v4dXc7esZzqkhjyfMJWlMiZOtQeb913FXofD5f20WksU0l6i22B09sFFYwDQ== + encryptionKey: MIIEogIBAAKCAQEAwCy84lzkxtzgn4ixGm0LSUTujOBpOh9m7XDoDPZnMTmExdOe9a5v/LXzdlCOCuBvK5u1T3ALBJMA3Zgvjv/jPRQUdiHprP3sbdfc6IgZPBFdLKFTc9yAA7GMbI4y7LhGMLGOMOqQXs+DOeImfmxEs3ykLXHKNas5ORnZPVnB6E9Qod8KH7UyMmBjQkOZYOOw10X4JZiU6xJp/E+VVWcmeXgNBbj5xOWMSzM+hhoA4wNOzBxACucaKDmqD6qugzebOqyUVSzFnEbquro+MYTWYdUDjZTXdvxgUUo80MGQ164gZhkFUKrmSpUvu3YErFySEGqAdFNwOZ6y/4X3s0BHvQIDAQABAoIBAAZiNhAK5+qXMbr67m8jSimv6YCyf6xXmLKwenTbxofDEl8D7ZbZqYyqeqDmgiFoXSkErhwqa6NGQtQZlxLX+zNvNFLMQ5fkg3MOpZ7vzm7JYN/3p+8EVxhIUJLWkmh8opBBhaioUg1kNUa59W9jp1CTBl0gF4h63JbB/g5kqeVOllUw7J1igAoaX36nOJGOwIynCWdizhDhgyjR4OcYfOLwcPDJueKTc5vM10g3LuMSK/sJmaD3TkJFPtDHw+RMW6wqyjsnkrg2D2oohXEyGWYYIXo2so4HCez0AB1I1JAxtVnRPvSIp7xLMm7+AkDoq12QYDHfxZtDTpfmvJg+Sn0CgYEAxCd+oribtdQW+JUctjsDbSQX5CeRISH5Ith3jveBx2jKIqQVnoVPz6URHOvnlIsqYYLANB8B3JHMWfR2UmkK11x0OcZecB06+oBoCZukvSXF+GqVHzLAQUxaoEBDCCPneskj5w+riMWBiiGDp32rUnkqv0nh7dnH+GfORcJ44L8CgYEA+s5s5EALj1jyU9w4+HVUyVsIrUitFnQg6qw/Td3Kj+8CXImKlS+rlmbQv0m1aOcvtFjQRIjjzZJAf/ausfAME+MayoNODgZsDk5RyDKuSWzMLvZLAa1LD52Uli5Pg8KtpzKVTn4xE1MbjsQcUNhFRAgrNEKNyuzXzdp4uXgGOoMCgYASXwiTQOsEepq0KXMI9jn57Nl3+uSyz7W/t7pq329+N6hG2ktUD3RMJE+X/9gup2IOw+owd377I4SaIDU8vq3PQc944cVShspRT9lunO8u7+y8uW7B/0TWWMpcG+irSIGTlGcSavtL0gOx5jWoaDK1hLemNss8NZtu/nnpOq+LjQKBgDisVozJMBOHPNLYS4NROAR77p0BdCNDwIBmxbM5r+EQWA9DAS6u4+4Lc5YV+MkonG37N6yU5iz4pFyGCHmqzX/c7JvgSc3/g4FED1TWpu1uiUD/ZHmPiAuSRxYchtk2L3k9g+GFwF8mg26iP+fAxv4VfnXDqDi3hhg9CtSWG4ozAoGAOWZXlFKqzGAfcucIe54FVQnweXG9sEuIPAvWvVRs4406ggNmL5eHccXpPHWTgetsr2TYMqPTDVMRmhBzSkyrYgk+b2tme79HPzTWs2Yg/pzjOfTgw7MBX/KlvOW5/J+dvrF3Gx8AHHZ9QQdYqi/MS1NKb2K3IbD0/m5gL5Pwi6A= space: gcTTL: 60 - syncPeriod: 10 + syncPeriod: 11 storage: path: db metric: diff --git a/etc/configs/cons1.yml b/etc/configs/cons1.yml index 1b0a656f..1ff8aad4 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: 12D3KooWMFoL77exAU5HWRX9rp994JcYBVjjXdxZfAeFyhFFKBvh - peerKey: k8fptyRgJkwui+3PxxWllK9QXa20UIyFJKMHy7E3mWep9IbJnyFMi+4Y541CrZvLKrffq2Hxwk1XDBjuSFRWAg== - signingKey: k8fptyRgJkwui+3PxxWllK9QXa20UIyFJKMHy7E3mWep9IbJnyFMi+4Y541CrZvLKrffq2Hxwk1XDBjuSFRWAg== - encryptionKey: MIIEpAIBAAKCAQEAyqz7zpkayRW+SVYLgiqTJTZEI2dHP6pk47O5mkBUrYNAl/So1jC2yt7RLM0QVruxlJB/i40+RUfmLCIo4X6sucT4Jqy8ShbrO+39J5m1v4a0PIe2jzFIexnshgBMo1dh/5b2rPwzcvKau3EGVtBMb6NRi5SQbyGTY7QP74jT6ff39TdttSbj1EHM9tYoPe6Dn4uhwRoHKLx++4blj/6pFai7rkEfG59Rbu3w+MZRlxFwdp50dJew/UVptkJfFnQAlK1kbdE4zDVgX8FrDuBDEiOqinUptdMw5Ptch3rV+QlCclS21Mb2Le3ncr2Aps5daf1PfXe3Y+utImVPzxAOHQIDAQABAoIBAEg94IODj0idt3Xsda2v/0MEVMVJytumoM+JAF87DvPKFPwU+Rlfw8gMJAMUFP7VaDbMSqozbj7DogeZJXk67dZJnyop5/OAt9hkvBehcmcSXKw2s5vWtT8rvmMFOEwAma3A4axHOQ9/6idl4hyPoq8oR6i5C8KQ9ThUtllrLB344oikT5+OzgoVyAo08IFss+e/UGs8woeHdmHDYiVfvCs6mPGLuQ1U+VKR7t8C7L6Yol9RVKNwlHQ29zjlRwDrOVT9a1V8iI4lL+wMnvSauFbNrpwRD6mnrevxS8zZELIoGxQ6VZCk5awLLE5ywiDFIUeY0BPf3FpLJlWvaXfo+AECgYEA8JjR4SAneTffLIG058NMN4xAo8BmL66zwEmj1MQXI98Ty4A9bV/q/6lVxlHunh97r5WKcpwdSPfc/V4xu7QjXNgTmqlJjHngR8Uull5nW0uZvit1CFHMnE6ONdJ52HJSg4lR7WheJaZ16nE0Ty3Nea9qodWGQmk+iFKWgk8JfaUCgYEA16aquAZJQw+3/sq66OnU6ajTJNAp3yUPFIL2qT+cGy+rVhiSTpDEYMTFCdoywBM66lklrGbMjjF4FCX0laOxfdxDhB/490BL/93xZSh50Mn6yNhXUotltVZCdUfjNYNJL971ALYdLDkU1Au3TVA+lnBK4RFTHsZXkd2YznjPVRkCgYEAh++QBYZJRy/OJDNUpu2tDmVr0BlQovguDyKMMhZojJfpcz0Nd9KNz8047Ug1bZmUJGx1QLP7x9JjRbQGnWr13+sliGjFaV0i3uoFnGfSNb7NKqkbAoxU8qtfpgE5XpWZEUBwzZX+O3+Fd+RmDaZvRaVatf0SUktsTVF8QDuvvRECgYAAxEXtG5CdHWwxCrV5aINqRUBi7B6J/Y69Ku4HkgNTEWtRhgrXHqqkEW8F5vGxPyBBfwmkQEVP6BseLzhcY9WYtfTDfn2bG25pvXdDPc6ZEG7E0ggVcgtthp373sKPCSV0dx114C/gXV+WlWgUbUmbrVCG1lHuVRQwn5IQgdty2QKBgQDL5pJmnYLlnqKVTM4PcREj2/3SOJ4ytsMtEMxWbXhMMYlo+tkA+mxmRCJaCZabWDxtpvn8Fn/WqIwbDeL5j8QhNL/Dsdqyh+puNBWV/hd9OWdbNm0xxV5wkPJR9uVLJB+NpTbEAAz/lcuAxceMsCQSp4KCvhxr/zbQwnqdM3jjFQ== + peerId: 12D3KooWPHN8pCMgVaNfjzuXhHjsacrryW7DCyicurH3uKHXCyE5 + peerKey: yHyVKOM1zEIbaHgwIAcBD/s9TmYQj6dU3dSzs5OHyBTIEpMC+jaTKKmS/5QCzgLzJFBnvayFtXwR/dH9G49M7g== + signingKey: yHyVKOM1zEIbaHgwIAcBD/s9TmYQj6dU3dSzs5OHyBTIEpMC+jaTKKmS/5QCzgLzJFBnvayFtXwR/dH9G49M7g== + encryptionKey: MIIEowIBAAKCAQEAu7C6g3bFuQb113lDuKJKa2zzeZNQxdjEQTcC5NVZkt5Qbz1cV4o1Rav0+nrMYT0mRFz6HPElUM7D1o+e/FIxrCsVnoCm4hinORhpilrR/DBXpnSTMmRyBIocaBK0T8shY4zNMYztQ0eiwkGZnxJSqi3Jk+oa7B871YIVDxzgD3AkOkTcRnFR+5SE+B+2G9qzhvRVj+LvjdEbkgnqMImZOPGsa9sSCfDrC928aSAokick4u8JqCfDnl9lYLlBYaVxGipiMayIg8TgXvUhiNWKrCoNyONHDtAKsmrTDj9DWEWtdX/h01uHrWBGq1/AVUpJ1w/5zHUYKF7kopTEskTYwQIDAQABAoIBAHhmiW817OahwWkFQF0btrOtA48U4nbYdCUFnhSfjEN724tQiIEbhsr34UIhLiSeroKiRkv0oaRxzw0/upRQQc8ZIFg6XVOizvsAXwvC8PtfI4sDMz3bU4z37/sPLJ4XR4bt1t+XcMh9FrqYjGyPu3mxv6LkRXr9Gkv/k3TLaCxd/88AlxLNquCYw5HKzZIN7XxzvYRHgn6YULSE48BewpqPPhSS5APItFyFoE9esafSBAcr54LSlwJ4X0Vee3QCxy1WZl17PzUE3M+lGvQ/gdsm+WrY5zUP0MTz4z95urknrPIP8WDXrfK+SzEXwrBvP1XVk1Sl/KKBJaAf+NMS7cECgYEAw/LEz+TuazDlsSAe1/fx9UNHQOAy5hrNIHd37uWaBUC3DszZEDqenJ6WZhtJD4DHfXwqtvXuj9Ju76YfGInFxxucg8AS4cD4+J+KfZ3p2JmYz9d+f/wPXtvG01HubV/KAPVdpDrN9QF/U+YC3W3QAw30V40X1nzgoZWMcPwjITkCgYEA9TYTh9U1oV23meaXUE8ux2ubufxy+Y/J4x57Zp77ttEU8xRTCKHAPdgm5PbMwhXTsUJEoFrH06iTkbwy9yIjJom4sl00E+p9//fEdCg8sEvpSJms6TwB6CkPsWgkwqNJDYwU5XLXd8EP16WZ83vyewZvCz5ssn7UXq0nKEtk28kCgYEAwHogSfafHDwT5EGhCpRL4JgNzfRtCwsYo+O2s7xl5vMC3k7qib6LP12obvQueEQPsXvemYpKpIwY3N9ZfEkZNdQxklmCMq/T4KUW7P3JTzLRoJgVcrKuhodsbvf0NQv66aYcLc51sU2fPVKbTdcolVeHxNibqd1Q6mh0ZCfIekECgYAsRxl7u5o1izCuD59fFw1BYUL7cIRqX/Z6lnR98VNOja6UviTIODz4beGIErCik0JojajKs9nFdHlBJZSmX3mtacz6GC5hMkSSRfEpcGKVCwAS5fz9GKLXgyKcTEvnAYkdcyAK1pPlwezUacjE2KrOYDkI9Lq3+ILsnaOmeQa7UQKBgGvHLrUvRsi04mB+TVQYwrlwRA0NNsxQTMek1UvFlpx/KN8oaDn7Aylao9zxutXP1jBH3kYmhn56/9lJpluDWJAKtBVXl9a4dh/ppC3WTAloU3+4u0aC0Mk49Hg9730S5LVozqH+q8VWiFh3qbxkrlE/4yocWvm18X5C6+kejKOh mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons2.yml b/etc/configs/cons2.yml index 0e896ff1..3135de05 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: 12D3KooWNeYL4h9367PEZsnAtkBkr26oVdRbHtqApSdofMWbo9ze - peerKey: 2X3XNEEgtVHg8LiKK5Z7o7JZpeTTyyYenoE4T6A9Eze+o5xVkfwtBVNAbahHMNX/4jz5AQUbjQreEVckEOWGnw== - signingKey: 2X3XNEEgtVHg8LiKK5Z7o7JZpeTTyyYenoE4T6A9Eze+o5xVkfwtBVNAbahHMNX/4jz5AQUbjQreEVckEOWGnw== - encryptionKey: MIIEowIBAAKCAQEAt5r0RtReZFB8HVO9XU9par7zneZQRZEpMuw9PLjshfwU5Q/vghxNWSUYyumetezmJaUiOg6C4ZYWkDX3f+wbyB+OCjN4keibDSMOZLudDeFJzdb4Z77Pz9rV1YhqOI+0NrArva/qoO5hPYRu1qXKZCAezFj/gto7C7IFX1RtkD74doAvefWvqE8r1MhDjDvsCkqRR9tTBqpQUvlESaij+DzAZebwHqKi9rgVsgrQddPbjruDlLKwQjyRFe9e1IDrAiDmbWWZ4V0MOMHfMdEiQ3CVdzPD0kLsaoQmp3bsjLLOx/OSrXxvFvYtznrFr2I0dRHQAU6RYxkPkryRcnD33wIDAQABAoIBAF3xxj2bmjSfzfG/kCv3XwwEamiHmNkPnlH0+JxiTnt78UEHN1iOnLEZPydMBC436canSO0F0cgVYLQnON1WdRyfsLDdhzq5FuTQ5CN8r66TcI0HCpEi2/gRk8ovg5IvTVmSKL9lDJuNfWnZolDoAbfbi4apnwtYGFAypXcSnwDnqWXyq4rIBu4bffkUbr5FxqdAcM5t8fUkhr/4qPf2gVAyz5t0fXK8Xs2frXHK7DB0JcoQ9k7xGpjEudYphsHvIYhSi5yIL/cI0AIOmOyW2p4Ct4J/BaJHqQVa2KauYr1ijDNOOmWksCH2KrxGBDu3er1/eqNjBkzGqziN4VNTawECgYEAzvh7VCU/HfZ6xnR6oVmGz+SWszKgFYWgrhAT2Je5SXznro+eaRJq98faZjN/rnriEi8U63w80x9s6mu5DHUoyT62t8KNGcYx2p7mn0okpO6vUq9qLYOpPfuqCO8zFUk4SGIUxhd1tE5XGG+Xt0SxwqX2sz6wa2KibeCCT04zXF8CgYEA4xmBcb7ZG9fn/CQam4NAsBlnMD5zYynKHCGJ9muW1PvJHLDh3NMdT6IIa/FUX0u8QsmV9r0Dkx11ATVMVvEdJ1FP93qHqjr3l+irBDYQbaDfqghFI6Fea//dsk8n9RHM2yuEr76nvPRZJfLsyzTocjLStTe2/DDAGpc/TjeoFIECgYBp1vPqgemW/vamCea0ID4qjfDqzpbCqsUSfjJH7r7X78HiqJsPjFWbRF5RKUDADyMQvXbrPWs1Y7qk3lWRI1CqKSHzMtBJP+s6q0uwZY/7r/uEQyP/BndDtTCsxPXQitL3YQDSlCii/fTYECj7lWt56LkRzJsXLyd1HPxGZe0p7QKBgDzsAbKu3PVANUaJtO2VB0x2dB0YE8I9Wq+zO5x0flECfpAIz356z/kl4ZZ7dgPegFF2XJmFWSklFNdPIfyM0CJVCNu97hj3mqYQz5fgnQWby4SElW+agYb9a87Ct1hh/w+om/69aagh8Kxif61/sv+3rJjaqmb6+P3pJx1nhtqBAoGBAIFyOM12Kch+3dEwrYCv2hR34qgcClDXbjQGhjuwl0nf5qqy4TADfQeHlDwQmpvMRTiQIlj1ipaoZqV3fDlsvgZgRxMwCkViMwsg0TR3CFR4jNC4aqrmv9fC+mTCnH3BeIGOohkTW77Zx+0PvX440MQ4Ye2YuMoioP8cRDfOmH4H + peerId: 12D3KooWA5veToUAwEVVXV6PoR4dFH91HQZA339NZzqeT3C6mMS7 + peerKey: gGwpn8J8b1WXK3Lhaq3NnQMix+qQsHNRxAH/DUalvM0D/G9dc/GRiAu+NDtGKRc9z2YAw6HKJ5GJAfzWTMDREA== + signingKey: gGwpn8J8b1WXK3Lhaq3NnQMix+qQsHNRxAH/DUalvM0D/G9dc/GRiAu+NDtGKRc9z2YAw6HKJ5GJAfzWTMDREA== + encryptionKey: MIIEowIBAAKCAQEAw4BsTVcK6Rnt3kYtvMZ7HU3EmD6uQzjn0bqoCsFKFNOMh0x+GE4aDox6j8rEzbeNWFwkn7RI6kPuByuSxe5RPG9QP3mxoIgWc737IKx6X0K9vBc8rLTgbr/OCctQs5zfsvEYZa4sKG+mfXPh5oxNsLfAO87OiPsTEPXLYTrEGZ4GZ71HLO7EBsI8N4JvNWZVQq3bbv+S7kiXtXpI1kdfE1Nu5XZIVw3dSEWoP3X9Tp9zavLM/obwoN8IXFGqAbEKOZE9zZkqvwIVymFxqEn7bcqtkfhbvvyTpg/VSeRAQhJkhmx92QDgz8mt7d2ADan3hgqFO68qHK+VlH7D0eaMOQIDAQABAoIBAQCOG42d8kV2B2kGhxC8BbJ8LIlY+UcGihjINNvtZW8KEHQ37PxDgpIiPS7h0syXlHLj5aahiBTwZIxjHeNEiOT3/xnf6f+Z5xIa89/VckpJcGQmkuWBzMDPABEuwWFaDg/1LJdFYgOrKO1mh5OPWDEo4YiUcNFkdMz5KRG7DVJ6I0NNm2x4sRJf8KVfLiOBDX9CKEUpmXZCciUlA3PnXAiJwpYxHoTSktqMrVj7YWgUuaYB0ZQdaXTG5jPZAL7zdVP3Ub1h5Oc9i56UgP0qAo6uXhQR+Xr7wKptnQk9g27zddx7ofa8NtnDpgzMOfXvJjWsMBB8ego0rQjydUihsvLhAoGBAMree7cd/NgqXgDc8V2zusb1gZ0Ao1uvCcYmp/w7v/tUF/UOuvjYuFkHosvHEOjy3gHNrnFYcj1US3K8OFIRkp7b8TKkEL/ho01SVI9PMfczEws5K6ufBZQ+33hJ7+drOlirRQxW8lIZspL3im/CLxm9K2zSfj/oMreO0ZY5jM4dAoGBAPaz/DJOLSKzeu9LBzFjfDMhYN5N3dLHIG0dPIDYDJYyquXYIARZrOD5wWh3WahX1YyCC5bBgugRi3SG0/IaKZQg2+/X70RdLXNK5sZHxR2ZildGFFaA9ERLYy9Gq75hAGTA0dt4CA4iM90jy0Prwoya32SF+zywoMcGV3LLX0vNAoGAPQya2k5R6pNFWqkikXomuPzklmS8xDh2joTPhJ5Odcmms/5M0doWD+S2XvB27EM5//zvg/iD2GTnl42AvWHAZ8H0YbLxv2ydggVGoSHJ/YQHNRdtRuZB/Yy2HzLQ2Slxk4Fm9AGuRnqpPIT1yg/7sJk22ja1+3Fa4dY+yCBleRkCgYAU9L8Eiu18mCBmOUpYIKpJMZmn6JdiMzYG7sfX7gJLs+wecBhwJinwRmbud8zu5t8l+1n+qVt0WSEuedGBLEXB5nSoUABsHzogJAmsaCZPWF6PAU3y9ytIrdq0Bl3KYzUEWfi5mt2cTb14GHVIxLsW9ITrZhIsWpidr2U4RBxJNQKBgFl5qZd8wFwm1kv8j1BtiGMN3e9cIJlfuIm97SOuaEFSwo/QWnhLQ5QBNwIijXDx+Rx3jPPedMO/fYd8IjFdG1x+1g4XVlnCV8PMCsGFwsu3/Q4Av9q2uflsZlAc+6vdjB9uEr4jhiKd+j7f5SWpPHKCUWyeem47WSjyq3dsM7HG mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons3.yml b/etc/configs/cons3.yml index 938ffbe6..318499f5 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: 12D3KooWS2ASPd6ThTBzez1j6qNPRETbNnKrjFg7EBnqKizEUnig - peerKey: aFY5YOblyu6/2w5QsihT3U2J0ARiNzh0T5A9lVDnNlbwwLJ18vSkkGK4LKM6WjljUXCCPxcxYDqRTM0O/arkrQ== - signingKey: aFY5YOblyu6/2w5QsihT3U2J0ARiNzh0T5A9lVDnNlbwwLJ18vSkkGK4LKM6WjljUXCCPxcxYDqRTM0O/arkrQ== - encryptionKey: MIIEpAIBAAKCAQEAttySfcjFQgsqldabBebJQsKbb7FkwIwWtJwTdCVmGp4P/H2/kkZC+3rLqwXOYybX4D1eWkd4ZM7Dzi2Ra/h0RvQKD6wm6fRplLCZjZRLdYyuYO4oSWshSMceS/1K271NYTQtazkQYDMxpmhU+4PMtCj8VIszIbOY37Itfi+sy5Q/dp9gKh93LtloZJeqGuuLhyAXvHfJvhmBSk5g/Nzcb0JYePu0pHuT8QPVJGXfGgRuZpO7qqeTcx603tgOi/hlswxHLhdag4UELifcW0PiWWrJ3yrB9n+D1bzY4LgVr715pk8EKAq4JyQV6nuAENpk8oiyM1nuB8SGvWkJ7nITBwIDAQABAoIBAGsMiX21cTUOkGmTbsFvr9azUod6k/7cg9ZLoF/YHQPsEHPBscqR81iBNIX0KjSFYs9VXc0AFgz9tkcXChDpLDj1WIaAQ2+ms8Bl+h6V9+7i4prAETmZy6xtVOErcQ1ertP+1a/1gg6vKZu/bDCpoca+T6m2q8JI/2/FQTij9EZgj2WJxuJFvQy9HtWNN8UdIcp3av9h5pP+l8TY/Szqq7uv9X9QTi2aCC/t3RxolALTJ3zXV9Vu/dshKjSvC1nZ2KecfQgbb3sJskLzXBWJt2ThJMoblPw96G4zqwCmfY/QKpofpZ8tzE3Pk3ecZ4t1rPGDqvH3+Ma6HS4qwPWo+7ECgYEA5NSGd/ukAl27o6IW8yEw2E9/JmBfccWtn1YYJjQnnUTeQTR2JVukEPJPh67dTrKw1AGdIK7861YpMUs/r86azwn0PQezHKzhVd4vxbwFmgQA1U1QDY5CJmCpWGddZRgkS1gWZlX7b2+01+2/AWZuYuvccaPF54hlBVJIDp6V4WUCgYEAzJLLwX5gIUXmB1xmEaq7vCXbtIAiZI4564NHtiyEc9mPvCbev6y3LYT/B0nbWsYArJxM0uu2suHAzhjMUpAeFsOko81SqzLi9HaowgVqQw7vP7ilbHAe6C3uulmOX8kH1gnur6F8uydf3CjNh2GJMOm5II/FtFOpaV5fDkk28fsCgYEA2TlakSmjbs+WIWbsjE60tJL6q+6OjE1QXVJ4SEP4WxYWOiXYBeyxmZi8oJwB4ARHUmpZw735wFmhbvb09SqW0PWtEgZuJEmE+2OZTAcJ9kPYmqPy23txFkdqWs583UwGoDN1yB3VOtr6/IPnbyfSoDswn/wNEZbr9xo95wrqUvUCgYEAplQwcHk05bi0R4Xbwz+C9n39fWu1CvcMpq0NkFPvuVXJ5NvhvgxKvyrkQ+PMAqj8gVtvpwpZeGXO4oMNFY/xtuaJJVlafrGYD9WubloCxNUOt0uEzH740iQOdts7xCtqQJ/AvnHZPT3NVe6i9RDbf7Z4e74JrA1dr7s4JCBpGSMCgYAP7tR3uZ7Zv/5e5NqDqWoqx8zlWVSNCPIavzpTomTUHZ04QliFQqxHfR2HVvMVfCpfTzoH7Tms4DlPBkWw7QiZeNIrxK6iNbrnlbvELlJPosVNEtjMMB5J94kU9Ej7zQI2kWNwvGrse4EuY6lGZmN3OY/pSTcgbUdlBkCWASSDxg== + peerId: 12D3KooWS9fMHSbogWfa2o2NLm2Y7o3SGXojn5anj5zPz1TeZDz7 + peerKey: UYx7nyuYqq2+j/t8kTZczAoXCNflp1FNW60tNUfkEtzyrHQg/MAHjYwYGhYxzQ00xsntqLsuA0FAuyR+YtVrsA== + signingKey: UYx7nyuYqq2+j/t8kTZczAoXCNflp1FNW60tNUfkEtzyrHQg/MAHjYwYGhYxzQ00xsntqLsuA0FAuyR+YtVrsA== + encryptionKey: MIIEpQIBAAKCAQEAvbd32m4jCtCVSPthnycxPmbKNnnLUn8tHNQZr5Sl2cH1MBaRBEo1DBhI9UXIqd0iprFCvTJjo6s6vWVdLAXgkGpKbuWvh1wdVuMOsq5kQ34m+XEWKXVpSkpNboUh8LdBTrk7NqvpMy9vC2aUt6bKY2zPDnRFQKFeRobfapwntWLoIhmAtBJJRbZuvc8OsFHUQRjcN4ZXLBziRcMqG0IBFPstpiXJNp4f7oB/bWGKg9yKM4vkgaIXEq5RXSvtPD+Zx1ovt4YF0vStWxxM9rEIAAK49HlCJ/aQ7+YYpFGjzjMQMVjLlH+8pcP0ZO75/DgJa1YZDiZ6ICPJ7YADTURKQwIDAQABAoIBAQCdAKRzZAoj/RJOX5sedvTNy4s1If4du5m97dmD8OSAHX+n2EUS48aax845DRNPX+45PSEaKgVDgYUPED/XGtYJLa2DsRleT+EH8shLHv9iy5e9ftT0YnJMRMln2U2JRF8Lo0dZq1NGRM8FBFO22JVNStLgB2D4Z5L5ksx6Edjaxh5wIWxs3ETihzNSZFWvh1bVXdUzC0VfxO6VuiiTN7IMAeL7DiM0/QVc8vk4BKG00XtV9KvtnGqnynpHYvWZ4xRU4GYYwDwLZFWDssLgU+3SNJCeucGrrckC1/73B5gjJ3Lq39dbr2maEdKvo6KdE8kOLQyZxTMHWdAVH6MKGmPhAoGBAOZGlR5V6P/cI8d594VHz8txEp72IsK3Y73acbdqkV4kmvQUq36oj3ObO6ZNhaH3/j+M9xw12eizh2KV512aDmywEHGXbs2FY9Flck6fMRAamOrEkGHUUDdACDyyCRtO3EQMMNndy00dPY/Q+nrwHKLfwYcfDcrJXsBVS6Zy+hFdAoGBANLo+sMU4grnp/XurIIB+3Zahzfoeo4xMiLNRDOy0nuwG23mgozZKaRnsiyxrtBQ3un3cjQS3+mggsa+N95mF6h+aNzM98ySqqByw7v7N8c7LQjon/BxonBXLi/bETLS5+cdRRXHD6QbvREtFVtD9oRZJAeLvS++BdtS1s8vOfAfAoGBANh7JHbnVusqXmyKKfsfXqcoPtQ4GsepNlhmQx+mTNEPYqjxwaOJ/Yo2NmaKXIW/KUM/V5QqwBf2puE0gdTKHqNpBZx0O5N0wjk5wLNPDwXPq1CRyBZgTaUTSmsdCFim04YZW9eFnjl5ssVANipbDuDDsCFCPWoV00DHLx5k2th1AoGBAJmwA+rb8MuZex8OyM4Du8XGufnXglbTKoGJqkUx7YcMETDIZCFWra2Lkp5W69gI1icPlTy09E0+FY3VVsjNBDhXxPoAsiF0TrmUZ2U37rFTQcHYIZQIeiH6pUFiFOpAHZSgE5OG9rLTM7asb3+Nyrkua77D6Rw9D+9+MeHPvBxpAoGAPD6fta40UAA/SB8lLmviQ4odWlbbN4AiUO/oIey6PswU2ZJllHEOY67snzhfafdT8y8pHCQQGDnPELfdB/2b/4x7Pi4+xQ6LepxMkIgBnW4zrbsokbvuZ64anCAvK8cfqqvcD4OFEdh/GlTQHGSzlQ/RGbOAuQ7GTAYlsQmb+So= mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/node1.yml b/etc/configs/node1.yml index 0dd5a81e..b74fd7b2 100755 --- a/etc/configs/node1.yml +++ b/etc/configs/node1.yml @@ -5,30 +5,30 @@ grpcServer: - 127.0.0.1:4430 tls: false account: - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo - peerKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= + peerId: 12D3KooWPuwdqpDQxWhD2Vh4yskx2T5VMrwdpTZLfACzgsGfQfNy + peerKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + signingKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + encryptionKey: MIIEpAIBAAKCAQEAxnE9Htwto+2fVmonkG9/DxNre33n7kjfrZU73JcHmpKhPlRFirig5T8rs2MaTq1R72/8nGBJuSxsz1PnexI3die39pY1OFYfZCZ59LbT7uH/xHcvkVrK2n50Q41KbbGT9BEzyW+XPkKPDpTq3/igYP+yUQgoWLfMwxCCLKXDe6qUC0fuIxR80fvj3XvorB5dnAiQ01JkH4PtCV1OWT6ZpLGhzcYxsxTHozd6LdMOC7wgGhW26dOSa/vZ1t5avbewFVIz0qfqBncunb7tjO4xa3xVYaA5jBbixDQUYFjVzW7cksrrN4CFNBDBGJ8PLS80MuMg0OG0O+/Qi1mbGb2mUQIDAQABAoIBACODAD0VidVcILeGJ65hRYudHg7raSXrRJv7qMrA/EtdEh3lVsyMXb6on1lq0rphqdf/YmVZldfda1tu2G3dxK8QTIuENeHvB48Uk56HWUXWi77M1WZdqQ+QsZ2lGzymGqQCsBHMNnSd1Jv3alDKXWj+WRrHKvE1cx81RRZYU7M9cpurnF5YNjO7L+7sMxUA9uAQGbe3kDVzrygraicLYQpxSNHytName0A+k3ug0qer4I6PmZhhJykkz6MD3dz/n625HSS+X+TuTm52T2b87tL27xXmSnUK7eYWjZ1vQlP1fWmqnac6u5LApUZaRi0tTjtefSjRW4jr1q20RqOp1kECgYEA7Onh3zM9ejATsjW6WISGKiBPci0D7DUbIuGuJrdQRadlkZzmeQ/VOYAuxIQD4GnQDRhM1FyxsqiAWkJOyCLFiMmsgIEyW9/eRhF8NlCVU+DA/fxy9EagfBbVsgiSBwOex24hPXIVYlaHkLAloNoD4bpw0pQZSDWXr+xvMFNwoGsCgYEA1m3sWA/e8ZuXForaUOoJzBU9nwC79bXv2UNktsVvBlQ1o9pbjoYDcVoAPwuBVUL1UwqDNMzPdhDBKBjZmCyjS6zlYD5ZKjF2m8iTyc4QcaBCdM0iyQpSXTmrfMx+hK1aWwL1p8ssNcednp5ExSAaTyNNGVdbtddiQ6/KMPmhUzMCgYEAwDjLsUNr4BXeBTweo+9yw/9PNn5brm0wRU8C9BrMIJe/izPYs+UqxerBB2Vtl8mCqv1KaQuEika5TYJ7VVsRFvk641DwQScUu5k4RQGBB3tWWz1XL+eWEticLkVR5isDyyAKDEbiHtXCTJz/CtGZUK7rF5BeKv6AwpZ9aKJqwV0CgYEAqXDlQNURu+PR6TtBtoypvz3NmraO0GO7KvipPhAXYm3qkRa8IIxfbhPLfAYQZhpqFvuIoJFzIn2s1I2GbExhoSv3eSzrcn7xlbpSpjYSImeb/AYZhbmFSiuHCi/hjeAaNS7KhZPz1G9vaubvusFaaMyhYPP6AWA4QvpHEJpB06cCgYBqR6/7d2hQiq4MJUrBEzLwG4ijnPeq+UVLQjE598hVIj+8UhRZRRcNWVEJxfcIL1v6Bpo8XISDNVRb30T9bPGVnXvC1jutTUbXKUB1/8iXuyH3IVieobch+bGd4v7ehH/lI7vzB6hjJpFzHopfFUn4wacSQdcFi3tRAwUB/L0S/w== apiServer: listenAddrs: - 127.0.0.1:8080 tls: false nodes: - - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo + - peerId: 12D3KooWPuwdqpDQxWhD2Vh4yskx2T5VMrwdpTZLfACzgsGfQfNy address: 127.0.0.1:4430 - signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= - - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC + signingKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + encryptionKey: MIIEpAIBAAKCAQEAxnE9Htwto+2fVmonkG9/DxNre33n7kjfrZU73JcHmpKhPlRFirig5T8rs2MaTq1R72/8nGBJuSxsz1PnexI3die39pY1OFYfZCZ59LbT7uH/xHcvkVrK2n50Q41KbbGT9BEzyW+XPkKPDpTq3/igYP+yUQgoWLfMwxCCLKXDe6qUC0fuIxR80fvj3XvorB5dnAiQ01JkH4PtCV1OWT6ZpLGhzcYxsxTHozd6LdMOC7wgGhW26dOSa/vZ1t5avbewFVIz0qfqBncunb7tjO4xa3xVYaA5jBbixDQUYFjVzW7cksrrN4CFNBDBGJ8PLS80MuMg0OG0O+/Qi1mbGb2mUQIDAQABAoIBACODAD0VidVcILeGJ65hRYudHg7raSXrRJv7qMrA/EtdEh3lVsyMXb6on1lq0rphqdf/YmVZldfda1tu2G3dxK8QTIuENeHvB48Uk56HWUXWi77M1WZdqQ+QsZ2lGzymGqQCsBHMNnSd1Jv3alDKXWj+WRrHKvE1cx81RRZYU7M9cpurnF5YNjO7L+7sMxUA9uAQGbe3kDVzrygraicLYQpxSNHytName0A+k3ug0qer4I6PmZhhJykkz6MD3dz/n625HSS+X+TuTm52T2b87tL27xXmSnUK7eYWjZ1vQlP1fWmqnac6u5LApUZaRi0tTjtefSjRW4jr1q20RqOp1kECgYEA7Onh3zM9ejATsjW6WISGKiBPci0D7DUbIuGuJrdQRadlkZzmeQ/VOYAuxIQD4GnQDRhM1FyxsqiAWkJOyCLFiMmsgIEyW9/eRhF8NlCVU+DA/fxy9EagfBbVsgiSBwOex24hPXIVYlaHkLAloNoD4bpw0pQZSDWXr+xvMFNwoGsCgYEA1m3sWA/e8ZuXForaUOoJzBU9nwC79bXv2UNktsVvBlQ1o9pbjoYDcVoAPwuBVUL1UwqDNMzPdhDBKBjZmCyjS6zlYD5ZKjF2m8iTyc4QcaBCdM0iyQpSXTmrfMx+hK1aWwL1p8ssNcednp5ExSAaTyNNGVdbtddiQ6/KMPmhUzMCgYEAwDjLsUNr4BXeBTweo+9yw/9PNn5brm0wRU8C9BrMIJe/izPYs+UqxerBB2Vtl8mCqv1KaQuEika5TYJ7VVsRFvk641DwQScUu5k4RQGBB3tWWz1XL+eWEticLkVR5isDyyAKDEbiHtXCTJz/CtGZUK7rF5BeKv6AwpZ9aKJqwV0CgYEAqXDlQNURu+PR6TtBtoypvz3NmraO0GO7KvipPhAXYm3qkRa8IIxfbhPLfAYQZhpqFvuIoJFzIn2s1I2GbExhoSv3eSzrcn7xlbpSpjYSImeb/AYZhbmFSiuHCi/hjeAaNS7KhZPz1G9vaubvusFaaMyhYPP6AWA4QvpHEJpB06cCgYBqR6/7d2hQiq4MJUrBEzLwG4ijnPeq+UVLQjE598hVIj+8UhRZRRcNWVEJxfcIL1v6Bpo8XISDNVRb30T9bPGVnXvC1jutTUbXKUB1/8iXuyH3IVieobch+bGd4v7ehH/lI7vzB6hjJpFzHopfFUn4wacSQdcFi3tRAwUB/L0S/w== + - peerId: 12D3KooWBgHmDqtXH9SrZfAmwCFsD8LZhTD5dg5wkhdbqFoS8GBN address: 127.0.0.1:4431 - signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== - encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= - - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W + signingKey: l6LFiKqr4ZHgcPbL+DR7KwMbzImufQPFgpoHOJ/nvfUbpb76DCADHuT1I4gIs+XByglnY1KV8jbMfW64XRW5XQ== + encryptionKey: MIIEowIBAAKCAQEA4ltcn1AH048bMXcKOOW7/E0TZYPxL3OtcHXWHSAZjeeTA/rc45G2eaNgyY7Ji+feLtZERbXNWGFBdNp31NHDYZAYwbZmjEqTEgV4yVx7BQP3VBEzglTJaNLTf+XIJnVAEkoHS6ogjC0oXTM6paHu64EitoOCzF9zqL023swjE3HU0dm2xwsUdGnKeO5nPMso/6e3VMavkKnFmvB965ECCBujtediP4lVdIABNVtoMHCoeI5Sn+m7TKqJSyDOIEMhHT3orYUNZWVeAHE1YTM2cI5tSnDZP80CHZ674Z/bKL7Jaznmq87mVt1h9Use2EkxR07/dJuTGvFOos4jHoiR9QIDAQABAoIBAHAr8EluooI/j61CnYk2p6LPG0aaTQJD4/YwHuwOBTviP2OghKgthGzg/szDerNfMyaoveqBvoIGqCZdQTbwwE7v1qTgXA83wYwTtBitQLVqkr1RTOJQXAMbPv5Jg5czUY3+q4DejQSKOE9/XJfKGJkSRH6Hy2C2CJ3dLnzYUqWGO3t70RLT1/sC6p6w3lXdy3dKZGkoR2wva+HXQxVrP8X5HOResXgNZwgMHt9KF1QHVCcySKYiEAefEKTSdKD2fOd4FxLgp3zWpvH3jrX0zd/DqzTlFD5Ns6Ayp2sIfHVp3sn99DZZM6DauMepQKtoSCnXZ+qKhekAwNVJnsVQkSECgYEA4spY9araeFUSl4uXCUQOpCkSshYOPRYN6sBbHsx8tV2eQtCT+5SuNYmzur3c5bkiraGEab8rZfGdDL6fLxQyaqbOmN31Db5kNh/2X+sRnxkak8lsROUWQZRF9doH73FDv6ZlI3V/JicZlOUCfN5BYT+x74R4/c1YXfyuD1J9gr0CgYEA/4K4SDwZUY4bOVCmKQz0OM+RW4PAAH6LHKenTAZNTeDNFFxc2nqnzRGMEKZTDGy0kbT5mBhBHFgShXcAiKxc5/MGkpt8Jcq6Fr5KGU9aZtYKji6mwMTsUndPNQydh3vOt5pOmcuMM6ovanNTvI8k6Qo53OY1IpO5CfOROu0hm5kCgYBnWsYd92YnDsYxUEldzKlLgPhnNov4pNNk15LvP0vaL7cPRhUaw1B9T6scAKjp/GxkasZ4lsnFZM4o37qV7wNm/WwL2KN0Rv9Od1SFtBBMzFkDXvk7kJeK/XLAr0OMiLbSYZeYCFUQ4yLSa2et1nA/TJLf0CR/rhSGiMAedX6DlQKBgAx1137OT33GrFUzNacy1oYeuTv5RNfBVA9lrabrd8GggN/JUU3mRWCexnHZaptkgbnJVZKxPBuhv+V6VDBWF4HIPD3SD0/YfxK03PA3CnWRYppkdAValRvAbcBsiRIeW4pgoAyn/IJYfk92qFK9uFMVCJVZNKYnBhMSKbbx8X2hAoGBAKwvzyAImbNB+493q1R/lSayxzG76bRJ/EseiTqwIec9c4C+Bd/sVXR+Re+xZb0FI/va1bz5CrduTzLSKBmf/+0lzl0MJvWY2+SXfGYdbl4+TTyqgDDfwqW0Tj8pDimye2BneyTmXko1rF+2Sxen7kMXnJLwpqjwZ6TZJuoqeK8q + - peerId: 12D3KooWASsipDzkridiMBmE7VSqp8yZvGWPY1VqySgMSZk6tsiL address: 127.0.0.1:4432 - signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== - encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== + signingKey: /6+uYFwFf9nU6fvXQVtpHhjd8+v4dXc7esZzqkhjyfMJWlMiZOtQeb913FXofD5f20WksU0l6i22B09sFFYwDQ== + encryptionKey: MIIEogIBAAKCAQEAwCy84lzkxtzgn4ixGm0LSUTujOBpOh9m7XDoDPZnMTmExdOe9a5v/LXzdlCOCuBvK5u1T3ALBJMA3Zgvjv/jPRQUdiHprP3sbdfc6IgZPBFdLKFTc9yAA7GMbI4y7LhGMLGOMOqQXs+DOeImfmxEs3ykLXHKNas5ORnZPVnB6E9Qod8KH7UyMmBjQkOZYOOw10X4JZiU6xJp/E+VVWcmeXgNBbj5xOWMSzM+hhoA4wNOzBxACucaKDmqD6qugzebOqyUVSzFnEbquro+MYTWYdUDjZTXdvxgUUo80MGQ164gZhkFUKrmSpUvu3YErFySEGqAdFNwOZ6y/4X3s0BHvQIDAQABAoIBAAZiNhAK5+qXMbr67m8jSimv6YCyf6xXmLKwenTbxofDEl8D7ZbZqYyqeqDmgiFoXSkErhwqa6NGQtQZlxLX+zNvNFLMQ5fkg3MOpZ7vzm7JYN/3p+8EVxhIUJLWkmh8opBBhaioUg1kNUa59W9jp1CTBl0gF4h63JbB/g5kqeVOllUw7J1igAoaX36nOJGOwIynCWdizhDhgyjR4OcYfOLwcPDJueKTc5vM10g3LuMSK/sJmaD3TkJFPtDHw+RMW6wqyjsnkrg2D2oohXEyGWYYIXo2so4HCez0AB1I1JAxtVnRPvSIp7xLMm7+AkDoq12QYDHfxZtDTpfmvJg+Sn0CgYEAxCd+oribtdQW+JUctjsDbSQX5CeRISH5Ith3jveBx2jKIqQVnoVPz6URHOvnlIsqYYLANB8B3JHMWfR2UmkK11x0OcZecB06+oBoCZukvSXF+GqVHzLAQUxaoEBDCCPneskj5w+riMWBiiGDp32rUnkqv0nh7dnH+GfORcJ44L8CgYEA+s5s5EALj1jyU9w4+HVUyVsIrUitFnQg6qw/Td3Kj+8CXImKlS+rlmbQv0m1aOcvtFjQRIjjzZJAf/ausfAME+MayoNODgZsDk5RyDKuSWzMLvZLAa1LD52Uli5Pg8KtpzKVTn4xE1MbjsQcUNhFRAgrNEKNyuzXzdp4uXgGOoMCgYASXwiTQOsEepq0KXMI9jn57Nl3+uSyz7W/t7pq329+N6hG2ktUD3RMJE+X/9gup2IOw+owd377I4SaIDU8vq3PQc944cVShspRT9lunO8u7+y8uW7B/0TWWMpcG+irSIGTlGcSavtL0gOx5jWoaDK1hLemNss8NZtu/nnpOq+LjQKBgDisVozJMBOHPNLYS4NROAR77p0BdCNDwIBmxbM5r+EQWA9DAS6u4+4Lc5YV+MkonG37N6yU5iz4pFyGCHmqzX/c7JvgSc3/g4FED1TWpu1uiUD/ZHmPiAuSRxYchtk2L3k9g+GFwF8mg26iP+fAxv4VfnXDqDi3hhg9CtSWG4ozAoGAOWZXlFKqzGAfcucIe54FVQnweXG9sEuIPAvWvVRs4406ggNmL5eHccXpPHWTgetsr2TYMqPTDVMRmhBzSkyrYgk+b2tme79HPzTWs2Yg/pzjOfTgw7MBX/KlvOW5/J+dvrF3Gx8AHHZ9QQdYqi/MS1NKb2K3IbD0/m5gL5Pwi6A= space: gcTTL: 60 - syncPeriod: 10 + syncPeriod: 11 storage: path: db metric: diff --git a/etc/configs/node2.yml b/etc/configs/node2.yml index 3029730a..e2a8ecaa 100755 --- a/etc/configs/node2.yml +++ b/etc/configs/node2.yml @@ -5,30 +5,30 @@ grpcServer: - 127.0.0.1:4431 tls: false account: - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC - peerKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== - signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== - encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= + peerId: 12D3KooWBgHmDqtXH9SrZfAmwCFsD8LZhTD5dg5wkhdbqFoS8GBN + peerKey: l6LFiKqr4ZHgcPbL+DR7KwMbzImufQPFgpoHOJ/nvfUbpb76DCADHuT1I4gIs+XByglnY1KV8jbMfW64XRW5XQ== + signingKey: l6LFiKqr4ZHgcPbL+DR7KwMbzImufQPFgpoHOJ/nvfUbpb76DCADHuT1I4gIs+XByglnY1KV8jbMfW64XRW5XQ== + encryptionKey: MIIEowIBAAKCAQEA4ltcn1AH048bMXcKOOW7/E0TZYPxL3OtcHXWHSAZjeeTA/rc45G2eaNgyY7Ji+feLtZERbXNWGFBdNp31NHDYZAYwbZmjEqTEgV4yVx7BQP3VBEzglTJaNLTf+XIJnVAEkoHS6ogjC0oXTM6paHu64EitoOCzF9zqL023swjE3HU0dm2xwsUdGnKeO5nPMso/6e3VMavkKnFmvB965ECCBujtediP4lVdIABNVtoMHCoeI5Sn+m7TKqJSyDOIEMhHT3orYUNZWVeAHE1YTM2cI5tSnDZP80CHZ674Z/bKL7Jaznmq87mVt1h9Use2EkxR07/dJuTGvFOos4jHoiR9QIDAQABAoIBAHAr8EluooI/j61CnYk2p6LPG0aaTQJD4/YwHuwOBTviP2OghKgthGzg/szDerNfMyaoveqBvoIGqCZdQTbwwE7v1qTgXA83wYwTtBitQLVqkr1RTOJQXAMbPv5Jg5czUY3+q4DejQSKOE9/XJfKGJkSRH6Hy2C2CJ3dLnzYUqWGO3t70RLT1/sC6p6w3lXdy3dKZGkoR2wva+HXQxVrP8X5HOResXgNZwgMHt9KF1QHVCcySKYiEAefEKTSdKD2fOd4FxLgp3zWpvH3jrX0zd/DqzTlFD5Ns6Ayp2sIfHVp3sn99DZZM6DauMepQKtoSCnXZ+qKhekAwNVJnsVQkSECgYEA4spY9araeFUSl4uXCUQOpCkSshYOPRYN6sBbHsx8tV2eQtCT+5SuNYmzur3c5bkiraGEab8rZfGdDL6fLxQyaqbOmN31Db5kNh/2X+sRnxkak8lsROUWQZRF9doH73FDv6ZlI3V/JicZlOUCfN5BYT+x74R4/c1YXfyuD1J9gr0CgYEA/4K4SDwZUY4bOVCmKQz0OM+RW4PAAH6LHKenTAZNTeDNFFxc2nqnzRGMEKZTDGy0kbT5mBhBHFgShXcAiKxc5/MGkpt8Jcq6Fr5KGU9aZtYKji6mwMTsUndPNQydh3vOt5pOmcuMM6ovanNTvI8k6Qo53OY1IpO5CfOROu0hm5kCgYBnWsYd92YnDsYxUEldzKlLgPhnNov4pNNk15LvP0vaL7cPRhUaw1B9T6scAKjp/GxkasZ4lsnFZM4o37qV7wNm/WwL2KN0Rv9Od1SFtBBMzFkDXvk7kJeK/XLAr0OMiLbSYZeYCFUQ4yLSa2et1nA/TJLf0CR/rhSGiMAedX6DlQKBgAx1137OT33GrFUzNacy1oYeuTv5RNfBVA9lrabrd8GggN/JUU3mRWCexnHZaptkgbnJVZKxPBuhv+V6VDBWF4HIPD3SD0/YfxK03PA3CnWRYppkdAValRvAbcBsiRIeW4pgoAyn/IJYfk92qFK9uFMVCJVZNKYnBhMSKbbx8X2hAoGBAKwvzyAImbNB+493q1R/lSayxzG76bRJ/EseiTqwIec9c4C+Bd/sVXR+Re+xZb0FI/va1bz5CrduTzLSKBmf/+0lzl0MJvWY2+SXfGYdbl4+TTyqgDDfwqW0Tj8pDimye2BneyTmXko1rF+2Sxen7kMXnJLwpqjwZ6TZJuoqeK8q apiServer: listenAddrs: - 127.0.0.1:8081 tls: false nodes: - - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo + - peerId: 12D3KooWPuwdqpDQxWhD2Vh4yskx2T5VMrwdpTZLfACzgsGfQfNy address: 127.0.0.1:4430 - signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= - - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC + signingKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + encryptionKey: MIIEpAIBAAKCAQEAxnE9Htwto+2fVmonkG9/DxNre33n7kjfrZU73JcHmpKhPlRFirig5T8rs2MaTq1R72/8nGBJuSxsz1PnexI3die39pY1OFYfZCZ59LbT7uH/xHcvkVrK2n50Q41KbbGT9BEzyW+XPkKPDpTq3/igYP+yUQgoWLfMwxCCLKXDe6qUC0fuIxR80fvj3XvorB5dnAiQ01JkH4PtCV1OWT6ZpLGhzcYxsxTHozd6LdMOC7wgGhW26dOSa/vZ1t5avbewFVIz0qfqBncunb7tjO4xa3xVYaA5jBbixDQUYFjVzW7cksrrN4CFNBDBGJ8PLS80MuMg0OG0O+/Qi1mbGb2mUQIDAQABAoIBACODAD0VidVcILeGJ65hRYudHg7raSXrRJv7qMrA/EtdEh3lVsyMXb6on1lq0rphqdf/YmVZldfda1tu2G3dxK8QTIuENeHvB48Uk56HWUXWi77M1WZdqQ+QsZ2lGzymGqQCsBHMNnSd1Jv3alDKXWj+WRrHKvE1cx81RRZYU7M9cpurnF5YNjO7L+7sMxUA9uAQGbe3kDVzrygraicLYQpxSNHytName0A+k3ug0qer4I6PmZhhJykkz6MD3dz/n625HSS+X+TuTm52T2b87tL27xXmSnUK7eYWjZ1vQlP1fWmqnac6u5LApUZaRi0tTjtefSjRW4jr1q20RqOp1kECgYEA7Onh3zM9ejATsjW6WISGKiBPci0D7DUbIuGuJrdQRadlkZzmeQ/VOYAuxIQD4GnQDRhM1FyxsqiAWkJOyCLFiMmsgIEyW9/eRhF8NlCVU+DA/fxy9EagfBbVsgiSBwOex24hPXIVYlaHkLAloNoD4bpw0pQZSDWXr+xvMFNwoGsCgYEA1m3sWA/e8ZuXForaUOoJzBU9nwC79bXv2UNktsVvBlQ1o9pbjoYDcVoAPwuBVUL1UwqDNMzPdhDBKBjZmCyjS6zlYD5ZKjF2m8iTyc4QcaBCdM0iyQpSXTmrfMx+hK1aWwL1p8ssNcednp5ExSAaTyNNGVdbtddiQ6/KMPmhUzMCgYEAwDjLsUNr4BXeBTweo+9yw/9PNn5brm0wRU8C9BrMIJe/izPYs+UqxerBB2Vtl8mCqv1KaQuEika5TYJ7VVsRFvk641DwQScUu5k4RQGBB3tWWz1XL+eWEticLkVR5isDyyAKDEbiHtXCTJz/CtGZUK7rF5BeKv6AwpZ9aKJqwV0CgYEAqXDlQNURu+PR6TtBtoypvz3NmraO0GO7KvipPhAXYm3qkRa8IIxfbhPLfAYQZhpqFvuIoJFzIn2s1I2GbExhoSv3eSzrcn7xlbpSpjYSImeb/AYZhbmFSiuHCi/hjeAaNS7KhZPz1G9vaubvusFaaMyhYPP6AWA4QvpHEJpB06cCgYBqR6/7d2hQiq4MJUrBEzLwG4ijnPeq+UVLQjE598hVIj+8UhRZRRcNWVEJxfcIL1v6Bpo8XISDNVRb30T9bPGVnXvC1jutTUbXKUB1/8iXuyH3IVieobch+bGd4v7ehH/lI7vzB6hjJpFzHopfFUn4wacSQdcFi3tRAwUB/L0S/w== + - peerId: 12D3KooWBgHmDqtXH9SrZfAmwCFsD8LZhTD5dg5wkhdbqFoS8GBN address: 127.0.0.1:4431 - signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== - encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= - - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W + signingKey: l6LFiKqr4ZHgcPbL+DR7KwMbzImufQPFgpoHOJ/nvfUbpb76DCADHuT1I4gIs+XByglnY1KV8jbMfW64XRW5XQ== + encryptionKey: MIIEowIBAAKCAQEA4ltcn1AH048bMXcKOOW7/E0TZYPxL3OtcHXWHSAZjeeTA/rc45G2eaNgyY7Ji+feLtZERbXNWGFBdNp31NHDYZAYwbZmjEqTEgV4yVx7BQP3VBEzglTJaNLTf+XIJnVAEkoHS6ogjC0oXTM6paHu64EitoOCzF9zqL023swjE3HU0dm2xwsUdGnKeO5nPMso/6e3VMavkKnFmvB965ECCBujtediP4lVdIABNVtoMHCoeI5Sn+m7TKqJSyDOIEMhHT3orYUNZWVeAHE1YTM2cI5tSnDZP80CHZ674Z/bKL7Jaznmq87mVt1h9Use2EkxR07/dJuTGvFOos4jHoiR9QIDAQABAoIBAHAr8EluooI/j61CnYk2p6LPG0aaTQJD4/YwHuwOBTviP2OghKgthGzg/szDerNfMyaoveqBvoIGqCZdQTbwwE7v1qTgXA83wYwTtBitQLVqkr1RTOJQXAMbPv5Jg5czUY3+q4DejQSKOE9/XJfKGJkSRH6Hy2C2CJ3dLnzYUqWGO3t70RLT1/sC6p6w3lXdy3dKZGkoR2wva+HXQxVrP8X5HOResXgNZwgMHt9KF1QHVCcySKYiEAefEKTSdKD2fOd4FxLgp3zWpvH3jrX0zd/DqzTlFD5Ns6Ayp2sIfHVp3sn99DZZM6DauMepQKtoSCnXZ+qKhekAwNVJnsVQkSECgYEA4spY9araeFUSl4uXCUQOpCkSshYOPRYN6sBbHsx8tV2eQtCT+5SuNYmzur3c5bkiraGEab8rZfGdDL6fLxQyaqbOmN31Db5kNh/2X+sRnxkak8lsROUWQZRF9doH73FDv6ZlI3V/JicZlOUCfN5BYT+x74R4/c1YXfyuD1J9gr0CgYEA/4K4SDwZUY4bOVCmKQz0OM+RW4PAAH6LHKenTAZNTeDNFFxc2nqnzRGMEKZTDGy0kbT5mBhBHFgShXcAiKxc5/MGkpt8Jcq6Fr5KGU9aZtYKji6mwMTsUndPNQydh3vOt5pOmcuMM6ovanNTvI8k6Qo53OY1IpO5CfOROu0hm5kCgYBnWsYd92YnDsYxUEldzKlLgPhnNov4pNNk15LvP0vaL7cPRhUaw1B9T6scAKjp/GxkasZ4lsnFZM4o37qV7wNm/WwL2KN0Rv9Od1SFtBBMzFkDXvk7kJeK/XLAr0OMiLbSYZeYCFUQ4yLSa2et1nA/TJLf0CR/rhSGiMAedX6DlQKBgAx1137OT33GrFUzNacy1oYeuTv5RNfBVA9lrabrd8GggN/JUU3mRWCexnHZaptkgbnJVZKxPBuhv+V6VDBWF4HIPD3SD0/YfxK03PA3CnWRYppkdAValRvAbcBsiRIeW4pgoAyn/IJYfk92qFK9uFMVCJVZNKYnBhMSKbbx8X2hAoGBAKwvzyAImbNB+493q1R/lSayxzG76bRJ/EseiTqwIec9c4C+Bd/sVXR+Re+xZb0FI/va1bz5CrduTzLSKBmf/+0lzl0MJvWY2+SXfGYdbl4+TTyqgDDfwqW0Tj8pDimye2BneyTmXko1rF+2Sxen7kMXnJLwpqjwZ6TZJuoqeK8q + - peerId: 12D3KooWASsipDzkridiMBmE7VSqp8yZvGWPY1VqySgMSZk6tsiL address: 127.0.0.1:4432 - signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== - encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== + signingKey: /6+uYFwFf9nU6fvXQVtpHhjd8+v4dXc7esZzqkhjyfMJWlMiZOtQeb913FXofD5f20WksU0l6i22B09sFFYwDQ== + encryptionKey: MIIEogIBAAKCAQEAwCy84lzkxtzgn4ixGm0LSUTujOBpOh9m7XDoDPZnMTmExdOe9a5v/LXzdlCOCuBvK5u1T3ALBJMA3Zgvjv/jPRQUdiHprP3sbdfc6IgZPBFdLKFTc9yAA7GMbI4y7LhGMLGOMOqQXs+DOeImfmxEs3ykLXHKNas5ORnZPVnB6E9Qod8KH7UyMmBjQkOZYOOw10X4JZiU6xJp/E+VVWcmeXgNBbj5xOWMSzM+hhoA4wNOzBxACucaKDmqD6qugzebOqyUVSzFnEbquro+MYTWYdUDjZTXdvxgUUo80MGQ164gZhkFUKrmSpUvu3YErFySEGqAdFNwOZ6y/4X3s0BHvQIDAQABAoIBAAZiNhAK5+qXMbr67m8jSimv6YCyf6xXmLKwenTbxofDEl8D7ZbZqYyqeqDmgiFoXSkErhwqa6NGQtQZlxLX+zNvNFLMQ5fkg3MOpZ7vzm7JYN/3p+8EVxhIUJLWkmh8opBBhaioUg1kNUa59W9jp1CTBl0gF4h63JbB/g5kqeVOllUw7J1igAoaX36nOJGOwIynCWdizhDhgyjR4OcYfOLwcPDJueKTc5vM10g3LuMSK/sJmaD3TkJFPtDHw+RMW6wqyjsnkrg2D2oohXEyGWYYIXo2so4HCez0AB1I1JAxtVnRPvSIp7xLMm7+AkDoq12QYDHfxZtDTpfmvJg+Sn0CgYEAxCd+oribtdQW+JUctjsDbSQX5CeRISH5Ith3jveBx2jKIqQVnoVPz6URHOvnlIsqYYLANB8B3JHMWfR2UmkK11x0OcZecB06+oBoCZukvSXF+GqVHzLAQUxaoEBDCCPneskj5w+riMWBiiGDp32rUnkqv0nh7dnH+GfORcJ44L8CgYEA+s5s5EALj1jyU9w4+HVUyVsIrUitFnQg6qw/Td3Kj+8CXImKlS+rlmbQv0m1aOcvtFjQRIjjzZJAf/ausfAME+MayoNODgZsDk5RyDKuSWzMLvZLAa1LD52Uli5Pg8KtpzKVTn4xE1MbjsQcUNhFRAgrNEKNyuzXzdp4uXgGOoMCgYASXwiTQOsEepq0KXMI9jn57Nl3+uSyz7W/t7pq329+N6hG2ktUD3RMJE+X/9gup2IOw+owd377I4SaIDU8vq3PQc944cVShspRT9lunO8u7+y8uW7B/0TWWMpcG+irSIGTlGcSavtL0gOx5jWoaDK1hLemNss8NZtu/nnpOq+LjQKBgDisVozJMBOHPNLYS4NROAR77p0BdCNDwIBmxbM5r+EQWA9DAS6u4+4Lc5YV+MkonG37N6yU5iz4pFyGCHmqzX/c7JvgSc3/g4FED1TWpu1uiUD/ZHmPiAuSRxYchtk2L3k9g+GFwF8mg26iP+fAxv4VfnXDqDi3hhg9CtSWG4ozAoGAOWZXlFKqzGAfcucIe54FVQnweXG9sEuIPAvWvVRs4406ggNmL5eHccXpPHWTgetsr2TYMqPTDVMRmhBzSkyrYgk+b2tme79HPzTWs2Yg/pzjOfTgw7MBX/KlvOW5/J+dvrF3Gx8AHHZ9QQdYqi/MS1NKb2K3IbD0/m5gL5Pwi6A= space: gcTTL: 60 - syncPeriod: 10 + syncPeriod: 11 storage: path: db metric: diff --git a/etc/configs/node3.yml b/etc/configs/node3.yml index d8db7666..4731b7f1 100755 --- a/etc/configs/node3.yml +++ b/etc/configs/node3.yml @@ -5,30 +5,30 @@ grpcServer: - 127.0.0.1:4432 tls: false account: - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W - peerKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== - signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== - encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== + peerId: 12D3KooWASsipDzkridiMBmE7VSqp8yZvGWPY1VqySgMSZk6tsiL + peerKey: /6+uYFwFf9nU6fvXQVtpHhjd8+v4dXc7esZzqkhjyfMJWlMiZOtQeb913FXofD5f20WksU0l6i22B09sFFYwDQ== + signingKey: /6+uYFwFf9nU6fvXQVtpHhjd8+v4dXc7esZzqkhjyfMJWlMiZOtQeb913FXofD5f20WksU0l6i22B09sFFYwDQ== + encryptionKey: MIIEogIBAAKCAQEAwCy84lzkxtzgn4ixGm0LSUTujOBpOh9m7XDoDPZnMTmExdOe9a5v/LXzdlCOCuBvK5u1T3ALBJMA3Zgvjv/jPRQUdiHprP3sbdfc6IgZPBFdLKFTc9yAA7GMbI4y7LhGMLGOMOqQXs+DOeImfmxEs3ykLXHKNas5ORnZPVnB6E9Qod8KH7UyMmBjQkOZYOOw10X4JZiU6xJp/E+VVWcmeXgNBbj5xOWMSzM+hhoA4wNOzBxACucaKDmqD6qugzebOqyUVSzFnEbquro+MYTWYdUDjZTXdvxgUUo80MGQ164gZhkFUKrmSpUvu3YErFySEGqAdFNwOZ6y/4X3s0BHvQIDAQABAoIBAAZiNhAK5+qXMbr67m8jSimv6YCyf6xXmLKwenTbxofDEl8D7ZbZqYyqeqDmgiFoXSkErhwqa6NGQtQZlxLX+zNvNFLMQ5fkg3MOpZ7vzm7JYN/3p+8EVxhIUJLWkmh8opBBhaioUg1kNUa59W9jp1CTBl0gF4h63JbB/g5kqeVOllUw7J1igAoaX36nOJGOwIynCWdizhDhgyjR4OcYfOLwcPDJueKTc5vM10g3LuMSK/sJmaD3TkJFPtDHw+RMW6wqyjsnkrg2D2oohXEyGWYYIXo2so4HCez0AB1I1JAxtVnRPvSIp7xLMm7+AkDoq12QYDHfxZtDTpfmvJg+Sn0CgYEAxCd+oribtdQW+JUctjsDbSQX5CeRISH5Ith3jveBx2jKIqQVnoVPz6URHOvnlIsqYYLANB8B3JHMWfR2UmkK11x0OcZecB06+oBoCZukvSXF+GqVHzLAQUxaoEBDCCPneskj5w+riMWBiiGDp32rUnkqv0nh7dnH+GfORcJ44L8CgYEA+s5s5EALj1jyU9w4+HVUyVsIrUitFnQg6qw/Td3Kj+8CXImKlS+rlmbQv0m1aOcvtFjQRIjjzZJAf/ausfAME+MayoNODgZsDk5RyDKuSWzMLvZLAa1LD52Uli5Pg8KtpzKVTn4xE1MbjsQcUNhFRAgrNEKNyuzXzdp4uXgGOoMCgYASXwiTQOsEepq0KXMI9jn57Nl3+uSyz7W/t7pq329+N6hG2ktUD3RMJE+X/9gup2IOw+owd377I4SaIDU8vq3PQc944cVShspRT9lunO8u7+y8uW7B/0TWWMpcG+irSIGTlGcSavtL0gOx5jWoaDK1hLemNss8NZtu/nnpOq+LjQKBgDisVozJMBOHPNLYS4NROAR77p0BdCNDwIBmxbM5r+EQWA9DAS6u4+4Lc5YV+MkonG37N6yU5iz4pFyGCHmqzX/c7JvgSc3/g4FED1TWpu1uiUD/ZHmPiAuSRxYchtk2L3k9g+GFwF8mg26iP+fAxv4VfnXDqDi3hhg9CtSWG4ozAoGAOWZXlFKqzGAfcucIe54FVQnweXG9sEuIPAvWvVRs4406ggNmL5eHccXpPHWTgetsr2TYMqPTDVMRmhBzSkyrYgk+b2tme79HPzTWs2Yg/pzjOfTgw7MBX/KlvOW5/J+dvrF3Gx8AHHZ9QQdYqi/MS1NKb2K3IbD0/m5gL5Pwi6A= apiServer: listenAddrs: - 127.0.0.1:8082 tls: false nodes: - - peerId: 12D3KooWPuCNN8ypu3F3RoyquLM8ZGojYE1Sr2zYPsnYGaBC2YCo + - peerId: 12D3KooWPuwdqpDQxWhD2Vh4yskx2T5VMrwdpTZLfACzgsGfQfNy address: 127.0.0.1:4430 - signingKey: 89vbD65xQkrwVZYp3lixo4/WmK9Eetg5cYk10TWHolnRQHDGOPDfh05lhaj+aWAquPCXbLqSEVDi+EbhdpjA4A== - encryptionKey: MIIEpQIBAAKCAQEA2KlZx+EyOTIlnILcIPkbpedpZ23VaCCmy3uczmXQsKNMRZuan+5DyWxprWg1pgiF0+mLfOPXSaPAdz4a/KeFXs2FVUhJMOLRyl3KT0LGsKnONq7u0A8uruYf3pQ5tZtxgRJx5enqI1cJTDi8L6VDYK3Tz/BEqrkkeXImyw0qIeUEkKSFqD4McSk9WGGtUynnkZl7mVNyME835+hF9IZA0d0Uu1SjdwpN6ethHhduICEBok9rrbmxThLELa32J4SuF8zwh8P1HDJ0hruKkcx51wefTG3PVDRrnXHwosvjdMh4JjVcwJmY3I/1QGqNZAm+gNEFF58Rlwo4GbxulCl+MwIDAQABAoIBAQCIb6y/+Aoehnu04ZspkHVetilkHoBDADzI6uDGAMu4UD0ZoHFwwSQi1Yh+0J7oHXnZBrr2PKw4DUyISq3H6N5N4vJR0CF3DX67BvD9lLl2Spg3S1XL46OsM/JhwcnNmUOS2kCrXfA5rPeH7jpjbpjNaul1ioJTWB+l8sKHH5Umnd7cNjNQtycP8ioKdPX4XXLktgi7gCUD2GC1VBJ1e13nMEvFmRgqkYQhTWzk4R8PK6twAuClc2z8xEMG3TMYfM+yVl8y/ZsHGmlcID/eJY+Q8xGYOTGuL2o83mUavZ4eZFTMHSsyOSxhhoV3r7haKTUd2k+d6DEPvLDV+njZXggxAoGBAOXosVJyz6QxSuD4uwo13N0D3wbWGFVmFYn0b7mHYEGIdqRam455OWlHL56nUZsj1iOUQCSkZ54GDIEco3CsKflCemfrYZnhb0XQnDOW+X020KxYrDUZEVskIgxfxQFpIkmP7uDLEkiYvpk3TpbhWHt2niqCufSf+lX6qndA65SvAoGBAPE/y04P7+dOVsMd/dl1FxRKmwXBc46ahxC69MwJBRNB0Zv/k+ouGj7/JjcXhMEn+Eaz0NIxk/YgNJzK/qyAQVwMTksq2dbm0FR/QKzNghnNRQn7d8yULmN04RFs58m3kfcN9Q4ISMhzcHMCqcCIQ/fzlftenpQTmP303nA8bxe9AoGBAJ+GwFN3OsCxO0WzEQVarm/lGcHCmIvZE6TvqP5RAuc16yzLehh34PA95rrtWmCNky6I1aEXOpaZl9+WoYmyzEUabZjh6I0/sVf+EgRyA5dwi4aq2ILXbAWTotR3N1ltO89TQetUvNEGu2nQyIVEw4KXodPZdXJZ9vflwJaSw2QdAoGAQsSfJdmvUdsSlCnGydpoKsuDIBKsQrltzCmR+q48Y1oCAyS28UcVKH5BO1oc+cBwLFEz6BiklKfRJ9vepCtS64DUYmVXqOx0mA4n/itaaH2xL9QTEeGo/QmqCMKVW/ScRz3rppiQXDnm003XYVvVQ9h8l/dV+DF8VDzjGzj+nhkCgYEAu1N1XiZsq50ned9ygrfLUcmS7TJfyGjjqq6FfZpHRdYjVgoyYf1Kojg90x3m4xhSSdb3ZdKc/R83AWdXidMDiWoO07G+qj+/ZR9I1rpAZL0vYiUhX2oiMLaV2kReBPGHN58s5b5y3RWgTVRi6kYy9fxVTd2bkIsU9MsRfhq9E/M= - - peerId: 12D3KooWAZwVPGPh31VFaJVXFByy7EmCxzkq4TpBVfcKPTX5a5rC + signingKey: yOEpD2+cPldXc2urGuU+szunm7fddRa8xew2uVjaxifRcVzNKhSERpOefjrXaky7PcKmSmTsH/5ZFtcrh1uzqg== + encryptionKey: MIIEpAIBAAKCAQEAxnE9Htwto+2fVmonkG9/DxNre33n7kjfrZU73JcHmpKhPlRFirig5T8rs2MaTq1R72/8nGBJuSxsz1PnexI3die39pY1OFYfZCZ59LbT7uH/xHcvkVrK2n50Q41KbbGT9BEzyW+XPkKPDpTq3/igYP+yUQgoWLfMwxCCLKXDe6qUC0fuIxR80fvj3XvorB5dnAiQ01JkH4PtCV1OWT6ZpLGhzcYxsxTHozd6LdMOC7wgGhW26dOSa/vZ1t5avbewFVIz0qfqBncunb7tjO4xa3xVYaA5jBbixDQUYFjVzW7cksrrN4CFNBDBGJ8PLS80MuMg0OG0O+/Qi1mbGb2mUQIDAQABAoIBACODAD0VidVcILeGJ65hRYudHg7raSXrRJv7qMrA/EtdEh3lVsyMXb6on1lq0rphqdf/YmVZldfda1tu2G3dxK8QTIuENeHvB48Uk56HWUXWi77M1WZdqQ+QsZ2lGzymGqQCsBHMNnSd1Jv3alDKXWj+WRrHKvE1cx81RRZYU7M9cpurnF5YNjO7L+7sMxUA9uAQGbe3kDVzrygraicLYQpxSNHytName0A+k3ug0qer4I6PmZhhJykkz6MD3dz/n625HSS+X+TuTm52T2b87tL27xXmSnUK7eYWjZ1vQlP1fWmqnac6u5LApUZaRi0tTjtefSjRW4jr1q20RqOp1kECgYEA7Onh3zM9ejATsjW6WISGKiBPci0D7DUbIuGuJrdQRadlkZzmeQ/VOYAuxIQD4GnQDRhM1FyxsqiAWkJOyCLFiMmsgIEyW9/eRhF8NlCVU+DA/fxy9EagfBbVsgiSBwOex24hPXIVYlaHkLAloNoD4bpw0pQZSDWXr+xvMFNwoGsCgYEA1m3sWA/e8ZuXForaUOoJzBU9nwC79bXv2UNktsVvBlQ1o9pbjoYDcVoAPwuBVUL1UwqDNMzPdhDBKBjZmCyjS6zlYD5ZKjF2m8iTyc4QcaBCdM0iyQpSXTmrfMx+hK1aWwL1p8ssNcednp5ExSAaTyNNGVdbtddiQ6/KMPmhUzMCgYEAwDjLsUNr4BXeBTweo+9yw/9PNn5brm0wRU8C9BrMIJe/izPYs+UqxerBB2Vtl8mCqv1KaQuEika5TYJ7VVsRFvk641DwQScUu5k4RQGBB3tWWz1XL+eWEticLkVR5isDyyAKDEbiHtXCTJz/CtGZUK7rF5BeKv6AwpZ9aKJqwV0CgYEAqXDlQNURu+PR6TtBtoypvz3NmraO0GO7KvipPhAXYm3qkRa8IIxfbhPLfAYQZhpqFvuIoJFzIn2s1I2GbExhoSv3eSzrcn7xlbpSpjYSImeb/AYZhbmFSiuHCi/hjeAaNS7KhZPz1G9vaubvusFaaMyhYPP6AWA4QvpHEJpB06cCgYBqR6/7d2hQiq4MJUrBEzLwG4ijnPeq+UVLQjE598hVIj+8UhRZRRcNWVEJxfcIL1v6Bpo8XISDNVRb30T9bPGVnXvC1jutTUbXKUB1/8iXuyH3IVieobch+bGd4v7ehH/lI7vzB6hjJpFzHopfFUn4wacSQdcFi3tRAwUB/L0S/w== + - peerId: 12D3KooWBgHmDqtXH9SrZfAmwCFsD8LZhTD5dg5wkhdbqFoS8GBN address: 127.0.0.1:4431 - signingKey: 3R8tf1SBnajHShh0xlRoRLpuFAqiVi5avQIYGCxlyvwLKabCE0Xhwizum9nVN/Eo9OjRd4pjnBddw9a9/N29XQ== - encryptionKey: MIIEpQIBAAKCAQEA05X6IlO8BKmz5UBYS+TvBoZFhJ9oS4MZ8X89RwH/Ll2lsvvLSbT+dw6wb0Pmo5VSHuktfi7I9G8KcmRh5oqgKtxeSm0tItY5XlSzrFUKrHTZogno88uE0qY6/M6QmsorFSTA3nLBXiSLfffV01EBbzISi0HjOPF0B8WfHpv5a2OBJBlEcy88dGW+fmPNuKRpDgEDNGK670B9KWqJpFgxMTG6cUrPw8manyyNGt4Q7dSfTk+J8nZSMCy4tZMOeA8ogC+tSqgAeGpfKTi9j3ZZj9tnsbpZp0Kj8Mz7C5KDUmsZaQ4fvLiSOAnuIGCqb/WyqI3ENbpRtskiunhS3HMi1QIDAQABAoIBAQC8bLRr+3vV/zbocuvu8np2qf6gw8ECdkcVTIXKhZm1tcoJYbjA9AElD5zKCYMMrL6MLoXH+GwXWgfIpWKWB1/pq4QA7ccjXfmK6w1y6+zsdccWSZL+AYFQgp7HYkFex6mkU626rCFN8GeVD6+JV3tahhIDl/J9VHFLNo+kl6yAF2ZRLlJa+vqEv0GI7iqmU3s9VmCc3szZW6kjzZxQmXjr9Wvy70pVwn6ncKyoqK8ASfpAnxIQAENDPHOq1j/Uz3FElKlUbwdpGq/PpqDbxHRE4SRaZq2RXN1KJq3WYozFmbDq1XmiiCPXAa5go9SPz7+zgmvakQcct1ciLNGy+iBBAoGBAPqj8EZk9md+fW4r4IcPGr5sWmqVdLTMfvN9+i/fse346CuClKVeyypBkgCKGLNULFXYDtgP6DejLiiJCCqKORcUxZBk9D8HKi4vVPaXV8VgY+VZgocXxTCnyMm1N7J78uMLw0ThhJDwm3S5EfypVLCwc8Kpk9uFp2fg93I1gx9lAoGBANgcPskoywEmV6oGzA5YB7tbe/GQ4gYwDZue9fii2ElYf8YerfdisjqUoz8r5HP/O2FpwS5SHaihg9M0bNdKr2Az2mCVHWAA7eZItvov0NpMszKM4D2WSFeQQC0NNNjPvSiy3AKQ1o6IHnc3va7cY2G56VjGN5Zd6hBA+RgznNaxAoGAER0+m9/q/1ggwnQWicJbRiNp7Rs1c97+0CuK+Nfic2hqmgX5lm0pnEIL8SN82knmGRp+sPwtFBd9YGEzAIydp1jQwLJUBzW7CJpMx+W/pYeWaqO5CPZzjYX3bOaF3hcel6hG9h4cCjWTt92nP8RkNwhlbyZbJUM0EiDHZLIIuQ0CgYEAwkmKbMDe2RbGg1Z/B3o+4ULbCA7wFQ4IfdsIWdLVTgNhRBV640h44U+WAAoO5fYVRXuVMHaksWEbqbqdC2TajEuxzVjhwtizCHBhCEYKpueDxzN9ugCs4wQNnjMcSrtg3QEH6MqcCiH3+chEILuEIWzJi4UQnn+qGZjAGPD11NECgYEAnneuUOYzomflujppcwRb1H3Nn5D1gKmx/EBdrx3oL4K9OC6AK+dVObwe7yBbFjWDRRdCMemxcZTust7WAmPTXh8x1mJLQWOgqq5cdmaQq9Ni7pmpvUZkZ4KBVTrc11Q/Xgl1Y3kR68EHV/kOfe7iLal2qW4/WxcRrdko7nkJw4c= - - peerId: 12D3KooWDX4okTKn3SgjVEZDSJ7ufoHLzCYm6xXpMJ8y2Mcea84W + signingKey: l6LFiKqr4ZHgcPbL+DR7KwMbzImufQPFgpoHOJ/nvfUbpb76DCADHuT1I4gIs+XByglnY1KV8jbMfW64XRW5XQ== + encryptionKey: MIIEowIBAAKCAQEA4ltcn1AH048bMXcKOOW7/E0TZYPxL3OtcHXWHSAZjeeTA/rc45G2eaNgyY7Ji+feLtZERbXNWGFBdNp31NHDYZAYwbZmjEqTEgV4yVx7BQP3VBEzglTJaNLTf+XIJnVAEkoHS6ogjC0oXTM6paHu64EitoOCzF9zqL023swjE3HU0dm2xwsUdGnKeO5nPMso/6e3VMavkKnFmvB965ECCBujtediP4lVdIABNVtoMHCoeI5Sn+m7TKqJSyDOIEMhHT3orYUNZWVeAHE1YTM2cI5tSnDZP80CHZ674Z/bKL7Jaznmq87mVt1h9Use2EkxR07/dJuTGvFOos4jHoiR9QIDAQABAoIBAHAr8EluooI/j61CnYk2p6LPG0aaTQJD4/YwHuwOBTviP2OghKgthGzg/szDerNfMyaoveqBvoIGqCZdQTbwwE7v1qTgXA83wYwTtBitQLVqkr1RTOJQXAMbPv5Jg5czUY3+q4DejQSKOE9/XJfKGJkSRH6Hy2C2CJ3dLnzYUqWGO3t70RLT1/sC6p6w3lXdy3dKZGkoR2wva+HXQxVrP8X5HOResXgNZwgMHt9KF1QHVCcySKYiEAefEKTSdKD2fOd4FxLgp3zWpvH3jrX0zd/DqzTlFD5Ns6Ayp2sIfHVp3sn99DZZM6DauMepQKtoSCnXZ+qKhekAwNVJnsVQkSECgYEA4spY9araeFUSl4uXCUQOpCkSshYOPRYN6sBbHsx8tV2eQtCT+5SuNYmzur3c5bkiraGEab8rZfGdDL6fLxQyaqbOmN31Db5kNh/2X+sRnxkak8lsROUWQZRF9doH73FDv6ZlI3V/JicZlOUCfN5BYT+x74R4/c1YXfyuD1J9gr0CgYEA/4K4SDwZUY4bOVCmKQz0OM+RW4PAAH6LHKenTAZNTeDNFFxc2nqnzRGMEKZTDGy0kbT5mBhBHFgShXcAiKxc5/MGkpt8Jcq6Fr5KGU9aZtYKji6mwMTsUndPNQydh3vOt5pOmcuMM6ovanNTvI8k6Qo53OY1IpO5CfOROu0hm5kCgYBnWsYd92YnDsYxUEldzKlLgPhnNov4pNNk15LvP0vaL7cPRhUaw1B9T6scAKjp/GxkasZ4lsnFZM4o37qV7wNm/WwL2KN0Rv9Od1SFtBBMzFkDXvk7kJeK/XLAr0OMiLbSYZeYCFUQ4yLSa2et1nA/TJLf0CR/rhSGiMAedX6DlQKBgAx1137OT33GrFUzNacy1oYeuTv5RNfBVA9lrabrd8GggN/JUU3mRWCexnHZaptkgbnJVZKxPBuhv+V6VDBWF4HIPD3SD0/YfxK03PA3CnWRYppkdAValRvAbcBsiRIeW4pgoAyn/IJYfk92qFK9uFMVCJVZNKYnBhMSKbbx8X2hAoGBAKwvzyAImbNB+493q1R/lSayxzG76bRJ/EseiTqwIec9c4C+Bd/sVXR+Re+xZb0FI/va1bz5CrduTzLSKBmf/+0lzl0MJvWY2+SXfGYdbl4+TTyqgDDfwqW0Tj8pDimye2BneyTmXko1rF+2Sxen7kMXnJLwpqjwZ6TZJuoqeK8q + - peerId: 12D3KooWASsipDzkridiMBmE7VSqp8yZvGWPY1VqySgMSZk6tsiL address: 127.0.0.1:4432 - signingKey: rxurhoC48iYy98RPCxiYePvQK45ACmlRRfuzM920avU3AD4h917t7woetoUUYLGO/qOxCNgEGgi/c8qEKgYdnw== - encryptionKey: MIIEpAIBAAKCAQEArv4FXqlNhvxxySFKy7t6N/OmePWJpylKLMbRH6FHVocBAjfiM04LaZQlLgalhgCATQFJMA2S+leHNIQTEYWhMp4U2Q9T+pNd8QBB89bHEKTD0y2BFUMSm4GiyRfTGx/j/fvEpRJ7mloCJj7K0Ed49cjljfEOXebd2koOp/PsZ2ww7xmXjP9xcTh5joFH+E/ti9+v33pKuxRSgRTqnM9DJg2LgdcLJQfirdGnv0gbTN9Jk1glwJJYV4Mx/7SOHnjtg/aBbVJYoqYk+2ayWNlNeV8MDO5BEHKKg/up5r6Hr+E8Kg8WYTkNaY68eo0MymKHAdBB5w7XI6JVH8jm0ODH4QIDAQABAoIBAERfD64KrDXfkH2rOlQbrgcKdbKxDNV5NngEPlUDaKIQIX7CYuj0x1S7A0PWaPnQXFC5/eR+iTyy0ircp66i7XafeTnN2VwAFCZDmYEyG5kPJ0vtbY/nIvALWJUFcAAbF7N2mUB91jlajZhv1EJIiqRNmBM7ageaWngdk1hf37AQWY038dxZV4ETmseSXcunJ5uLJB3ENmw0ImCCVFsEc+1OQTr51Xgi7d8wLEBxCETfl/JkvdN7MDRWNHzvlRFuoQj7rvTjxAW/jfv4eyu5Fp5YKJCSQE0q5mY4K0HgJr7DYsKuXmUONKmUw09F3uFRClajKxACycBMfj0xaFWtVhkCgYEA5x7HC2VyrbhD6DSo/cbScRMbD295Ner3lxqV4MONML9vs49m7xpW+5qOhy9XP1wbY6mlWjy7I0a7SRZEoqxi/AmXcBV0cfCKqaEhou3KiR/qjKtMViJzO1HcaA/CskqIu60v51sb5synpEz8BKdUcLySWJ72r5+RCJOuu2P3EVcCgYEAwdR3bZQnAoYJQ61p8SdsTDIyduDQgsNUZKd+czDE/eNYdFaLN/7ZjZM2N0A06oScqLoz4e1yHTdEjWbjF7mhySvc0aHm+EvlQdnQsjKwNKs1SIblRe8lH/SmnFaPSvWM9FHpHFBj9QG0b/ogdOZKQZ+gJrcmWnkbkjvsr10ZlYcCgYBQBIXhWjREFQHdyS2g/08ouvapd2y90CX8eMXfVZTyhbUEs+dtbO8kmTQzdZ59X0RUUw3emhwocHqzKTSGJaz3mdKGiccRE7jOVe0xXaa7pwMrxLrfL3o51XO7y4ka9Vc1sxZcwVx9oemApu6yJcTEa2U3rYG2+EXcdFUQp+GIbQKBgQCoLpPF19QVY3nsaC7RmXRllPSmo6EopRW4FIEqr/ltlnNs1p8L4iygpEhZnnOLva801AQql935LbhkvQ50ypRvuohquQFxFmGBRt7HkCXGPXwJR0ru6HcdCCn84zqIPxGj+OK8t6BTubv3oV/CLwPldvz+OtKjlAvxUd+nta96RwKBgQCx4qlK5PapE/H4T2MSL53T1Xm2ESKIL5P3JwRlt8E0P2fvQpXthgsghCFu+38GMbne4urU12oBTcLZ24QDe1Lq4ZAHfA3dkuXHZYngKEdgGLWBD6E+JysWGj21wS2p/hRN19ooiuhR3shYjXClssSyQQOfURwuL42W7C/IzjdIiQ== + signingKey: /6+uYFwFf9nU6fvXQVtpHhjd8+v4dXc7esZzqkhjyfMJWlMiZOtQeb913FXofD5f20WksU0l6i22B09sFFYwDQ== + encryptionKey: MIIEogIBAAKCAQEAwCy84lzkxtzgn4ixGm0LSUTujOBpOh9m7XDoDPZnMTmExdOe9a5v/LXzdlCOCuBvK5u1T3ALBJMA3Zgvjv/jPRQUdiHprP3sbdfc6IgZPBFdLKFTc9yAA7GMbI4y7LhGMLGOMOqQXs+DOeImfmxEs3ykLXHKNas5ORnZPVnB6E9Qod8KH7UyMmBjQkOZYOOw10X4JZiU6xJp/E+VVWcmeXgNBbj5xOWMSzM+hhoA4wNOzBxACucaKDmqD6qugzebOqyUVSzFnEbquro+MYTWYdUDjZTXdvxgUUo80MGQ164gZhkFUKrmSpUvu3YErFySEGqAdFNwOZ6y/4X3s0BHvQIDAQABAoIBAAZiNhAK5+qXMbr67m8jSimv6YCyf6xXmLKwenTbxofDEl8D7ZbZqYyqeqDmgiFoXSkErhwqa6NGQtQZlxLX+zNvNFLMQ5fkg3MOpZ7vzm7JYN/3p+8EVxhIUJLWkmh8opBBhaioUg1kNUa59W9jp1CTBl0gF4h63JbB/g5kqeVOllUw7J1igAoaX36nOJGOwIynCWdizhDhgyjR4OcYfOLwcPDJueKTc5vM10g3LuMSK/sJmaD3TkJFPtDHw+RMW6wqyjsnkrg2D2oohXEyGWYYIXo2so4HCez0AB1I1JAxtVnRPvSIp7xLMm7+AkDoq12QYDHfxZtDTpfmvJg+Sn0CgYEAxCd+oribtdQW+JUctjsDbSQX5CeRISH5Ith3jveBx2jKIqQVnoVPz6URHOvnlIsqYYLANB8B3JHMWfR2UmkK11x0OcZecB06+oBoCZukvSXF+GqVHzLAQUxaoEBDCCPneskj5w+riMWBiiGDp32rUnkqv0nh7dnH+GfORcJ44L8CgYEA+s5s5EALj1jyU9w4+HVUyVsIrUitFnQg6qw/Td3Kj+8CXImKlS+rlmbQv0m1aOcvtFjQRIjjzZJAf/ausfAME+MayoNODgZsDk5RyDKuSWzMLvZLAa1LD52Uli5Pg8KtpzKVTn4xE1MbjsQcUNhFRAgrNEKNyuzXzdp4uXgGOoMCgYASXwiTQOsEepq0KXMI9jn57Nl3+uSyz7W/t7pq329+N6hG2ktUD3RMJE+X/9gup2IOw+owd377I4SaIDU8vq3PQc944cVShspRT9lunO8u7+y8uW7B/0TWWMpcG+irSIGTlGcSavtL0gOx5jWoaDK1hLemNss8NZtu/nnpOq+LjQKBgDisVozJMBOHPNLYS4NROAR77p0BdCNDwIBmxbM5r+EQWA9DAS6u4+4Lc5YV+MkonG37N6yU5iz4pFyGCHmqzX/c7JvgSc3/g4FED1TWpu1uiUD/ZHmPiAuSRxYchtk2L3k9g+GFwF8mg26iP+fAxv4VfnXDqDi3hhg9CtSWG4ozAoGAOWZXlFKqzGAfcucIe54FVQnweXG9sEuIPAvWvVRs4406ggNmL5eHccXpPHWTgetsr2TYMqPTDVMRmhBzSkyrYgk+b2tme79HPzTWs2Yg/pzjOfTgw7MBX/KlvOW5/J+dvrF3Gx8AHHZ9QQdYqi/MS1NKb2K3IbD0/m5gL5Pwi6A= space: gcTTL: 60 - syncPeriod: 10 + syncPeriod: 11 storage: path: db metric: diff --git a/playground/Makefile b/playground/Makefile index 84cafaef..c702c0c5 100644 --- a/playground/Makefile +++ b/playground/Makefile @@ -1,7 +1,10 @@ -.PHONY: nodes-start nodes-stop clients-start clients-stop clean-all log-node-1 log-node-2 log-node3 log-client-1 log-client-2 +.PHONY: nodes-start nodes-stop clients-start clients-stop clean-all log-node-1 log-node-2 log-node3 log-client-1 log-client-2 gen-configs export GOPRIVATE=github.com/anytypeio # TODO: make different folders in etc for different programs +gen-configs: + ./init.sh config_gen + nodes-start: ./init.sh nodes_start diff --git a/playground/init.sh b/playground/init.sh index 976eda55..8937deec 100755 --- a/playground/init.sh +++ b/playground/init.sh @@ -8,9 +8,11 @@ CLIENT_GO="../../../client/cmd/client.go" DEBUG_GO="../util/cmd/debug/debug.go" NODEMAP_YML="../util/cmd/nodesgen/nodemap.yml" CONFIGS_DIR="../../../etc/configs" +NODESGEN_GO="../util/cmd/nodesgen/gen.go" +ETC_DIR="../etc" do_usage() { - echo "usage: $0 {nodes_start|nodes_stop|clients_start|clients_stop|debug}" + echo "usage: $0 {nodes_start|nodes_stop|clients_start|clients_stop|debug|config_gen}" echo "usage: $0 node_log " echo "usage: $0 client_log " exit 1 @@ -44,6 +46,12 @@ do_client_log() { tail -f -n 500 tmp/log/client$CLIENT_NUMBER.log } +do_config_gen() { + go run $NODESGEN_GO -n $NODEMAP_YML -e $ETC_DIR + cp -rf $ETC_DIR/configs/node1.yml $ETC_DIR/config.yml + cp -rf $ETC_DIR/configs/client1.yml $ETC_DIR/client.yml +} + do_clients_start() { for NUMBER in {1..2}; do install -d tmp/client$NUMBER/ tmp/log/ @@ -67,7 +75,10 @@ do_debug() { } case $1 in -nodes_start | nodes_stop | clients_start | clients_stop | debug) +nodes_start | nodes_stop | clients_start | clients_stop | config_gen) + do_$1 + ;; +debug) first_arg=$1 shift do_$first_arg $* From 8b703efb557d5c768f397c0d8b80f3f6c1cd4d45 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 6 Dec 2022 21:02:47 +0100 Subject: [PATCH 32/32] Change sync period --- util/cmd/nodesgen/gen.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/cmd/nodesgen/gen.go b/util/cmd/nodesgen/gen.go index a05f4e6b..3bbcd4ec 100644 --- a/util/cmd/nodesgen/gen.go +++ b/util/cmd/nodesgen/gen.go @@ -198,7 +198,7 @@ func genNodeConfig(addresses []string, apiAddresses []string) (config.Config, er }, Space: config.Space{ GCTTL: 60, - SyncPeriod: 10, + SyncPeriod: 11, }, }, nil } @@ -248,7 +248,7 @@ func genClientConfig(addresses []string, apiAddresses []string, encKey encryptio }, Space: config.Space{ GCTTL: 60, - SyncPeriod: 10, + SyncPeriod: 11, }, }, nil }