From 7e6c72a198701f7bc9af984fe3d002b335138e25 Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Fri, 30 Sep 2022 19:16:44 +0300 Subject: [PATCH 1/6] consistent node db component --- Makefile | 2 + consensus/config/account.go | 7 + consensus/config/config.go | 35 + consensus/config/grpc.go | 6 + consensus/config/mongo.go | 7 + consensus/consensus.go | 22 + consensus/consensusproto/consensus.pb.go | 1718 +++++++++++++++++ consensus/consensusproto/consensus_drpc.pb.go | 217 +++ .../consensusproto/consensuserrs/errors.go | 16 + .../consensusproto/protos/consensus.proto | 55 + consensus/db/db.go | 181 ++ consensus/db/db_test.go | 218 +++ go.mod | 16 +- go.sum | 34 +- pkg/acl/aclrecordproto/aclrecord.pb.go | 1 + .../testutils/testchanges/proto/test.pb.go | 1 + 16 files changed, 2531 insertions(+), 5 deletions(-) create mode 100644 consensus/config/account.go create mode 100644 consensus/config/config.go create mode 100644 consensus/config/grpc.go create mode 100644 consensus/config/mongo.go create mode 100644 consensus/consensus.go create mode 100644 consensus/consensusproto/consensus.pb.go create mode 100644 consensus/consensusproto/consensus_drpc.pb.go create mode 100644 consensus/consensusproto/consensuserrs/errors.go create mode 100644 consensus/consensusproto/protos/consensus.proto create mode 100644 consensus/db/db.go create mode 100644 consensus/db/db_test.go diff --git a/Makefile b/Makefile index 53ddd25b..7817be8c 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,8 @@ proto: $(GOGO_START) protoc --gogofaster_out=:. $(P_TEST_CHANGES_PATH_PB)/proto/*.proto $(eval PKGMAP := $$(P_TREE_CHANGES),$$(P_ACL_RECORDS)) $(GOGO_START) protoc --gogofaster_out=$(PKGMAP):. --go-drpc_out=protolib=github.com/gogo/protobuf:. common/commonspace/spacesyncproto/protos/*.proto + $(GOGO_START) protoc --gogofaster_out=:. --go-drpc_out=protolib=github.com/gogo/protobuf:. consensus/consensusproto/protos/*.proto + build: diff --git a/consensus/config/account.go b/consensus/config/account.go new file mode 100644 index 00000000..4525b26f --- /dev/null +++ b/consensus/config/account.go @@ -0,0 +1,7 @@ +package config + +type Account struct { + PeerId string `yaml:"peerId"` + SigningKey string `yaml:"signingKey"` + EncryptionKey string `yaml:"encryptionKey"` +} diff --git a/consensus/config/config.go b/consensus/config/config.go new file mode 100644 index 00000000..87a7ea79 --- /dev/null +++ b/consensus/config/config.go @@ -0,0 +1,35 @@ +package config + +import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "gopkg.in/yaml.v3" + "io/ioutil" +) + +const CName = "config" + +func NewFromFile(path string) (c *Config, err error) { + c = &Config{} + data, err := ioutil.ReadFile(path) + if err != nil { + return nil, err + } + if err = yaml.Unmarshal(data, c); err != nil { + return nil, err + } + return +} + +type Config struct { + GrpcServer GrpcServer `yaml:"grpcServer"` + Account Account `yaml:"account"` + Mongo Mongo `yaml:"mongo"` +} + +func (c *Config) Init(a *app.App) (err error) { + return +} + +func (c Config) Name() (name string) { + return CName +} diff --git a/consensus/config/grpc.go b/consensus/config/grpc.go new file mode 100644 index 00000000..700c3567 --- /dev/null +++ b/consensus/config/grpc.go @@ -0,0 +1,6 @@ +package config + +type GrpcServer struct { + ListenAddrs []string `yaml:"listenAddrs"` + TLS bool `yaml:"tls"` +} diff --git a/consensus/config/mongo.go b/consensus/config/mongo.go new file mode 100644 index 00000000..87fb679d --- /dev/null +++ b/consensus/config/mongo.go @@ -0,0 +1,7 @@ +package config + +type Mongo struct { + Connect string `yaml:"connect"` + Database string `yaml:"database"` + LogCollection string `yaml:"logCollection"` +} diff --git a/consensus/consensus.go b/consensus/consensus.go new file mode 100644 index 00000000..a041ae26 --- /dev/null +++ b/consensus/consensus.go @@ -0,0 +1,22 @@ +package consensus + +import "time" + +type Log struct { + Id []byte `bson:"_id"` + Records []Record `bson:"records"` +} + +type Record struct { + Id []byte `bson:"id"` + PrevId []byte `bson:"prevId"` + Payload []byte `bson:"payload"` + Created time.Time `bson:"created"'` +} + +func (l Log) CopyRecords() Log { + l2 := l + l2.Records = make([]Record, len(l.Records)) + copy(l2.Records, l.Records) + return l2 +} diff --git a/consensus/consensusproto/consensus.pb.go b/consensus/consensusproto/consensus.pb.go new file mode 100644 index 00000000..1b3e20d2 --- /dev/null +++ b/consensus/consensusproto/consensus.pb.go @@ -0,0 +1,1718 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: consensus/consensusproto/protos/consensus.proto + +package consensusproto + +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 ErrCodes int32 + +const ( + ErrCodes_Unexpected ErrCodes = 0 + ErrCodes_LogExists ErrCodes = 1 + ErrCodes_LogNotFound ErrCodes = 2 + ErrCodes_RecordConflict ErrCodes = 3 + ErrCodes_ErrorOffset ErrCodes = 300 +) + +var ErrCodes_name = map[int32]string{ + 0: "Unexpected", + 1: "LogExists", + 2: "LogNotFound", + 3: "RecordConflict", + 300: "ErrorOffset", +} + +var ErrCodes_value = map[string]int32{ + "Unexpected": 0, + "LogExists": 1, + "LogNotFound": 2, + "RecordConflict": 3, + "ErrorOffset": 300, +} + +func (x ErrCodes) String() string { + return proto.EnumName(ErrCodes_name, int32(x)) +} + +func (ErrCodes) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_b8d7f1c16b400059, []int{0} +} + +type Log struct { + Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Records []*Record `protobuf:"bytes,2,rep,name=records,proto3" json:"records,omitempty"` + CreatedUnix uint64 `protobuf:"varint,3,opt,name=createdUnix,proto3" json:"createdUnix,omitempty"` +} + +func (m *Log) Reset() { *m = Log{} } +func (m *Log) String() string { return proto.CompactTextString(m) } +func (*Log) ProtoMessage() {} +func (*Log) Descriptor() ([]byte, []int) { + return fileDescriptor_b8d7f1c16b400059, []int{0} +} +func (m *Log) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Log) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Log.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 *Log) XXX_Merge(src proto.Message) { + xxx_messageInfo_Log.Merge(m, src) +} +func (m *Log) XXX_Size() int { + return m.Size() +} +func (m *Log) XXX_DiscardUnknown() { + xxx_messageInfo_Log.DiscardUnknown(m) +} + +var xxx_messageInfo_Log proto.InternalMessageInfo + +func (m *Log) GetId() []byte { + if m != nil { + return m.Id + } + return nil +} + +func (m *Log) GetRecords() []*Record { + if m != nil { + return m.Records + } + return nil +} + +func (m *Log) GetCreatedUnix() uint64 { + if m != nil { + return m.CreatedUnix + } + return 0 +} + +type Record struct { + Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + PrevId []byte `protobuf:"bytes,2,opt,name=prevId,proto3" json:"prevId,omitempty"` + Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` + CreatedUnix uint64 `protobuf:"varint,4,opt,name=createdUnix,proto3" json:"createdUnix,omitempty"` +} + +func (m *Record) Reset() { *m = Record{} } +func (m *Record) String() string { return proto.CompactTextString(m) } +func (*Record) ProtoMessage() {} +func (*Record) Descriptor() ([]byte, []int) { + return fileDescriptor_b8d7f1c16b400059, []int{1} +} +func (m *Record) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Record) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Record.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 *Record) XXX_Merge(src proto.Message) { + xxx_messageInfo_Record.Merge(m, src) +} +func (m *Record) XXX_Size() int { + return m.Size() +} +func (m *Record) XXX_DiscardUnknown() { + xxx_messageInfo_Record.DiscardUnknown(m) +} + +var xxx_messageInfo_Record proto.InternalMessageInfo + +func (m *Record) GetId() []byte { + if m != nil { + return m.Id + } + return nil +} + +func (m *Record) GetPrevId() []byte { + if m != nil { + return m.PrevId + } + return nil +} + +func (m *Record) GetPayload() []byte { + if m != nil { + return m.Payload + } + return nil +} + +func (m *Record) GetCreatedUnix() uint64 { + if m != nil { + return m.CreatedUnix + } + return 0 +} + +type Ok struct { +} + +func (m *Ok) Reset() { *m = Ok{} } +func (m *Ok) String() string { return proto.CompactTextString(m) } +func (*Ok) ProtoMessage() {} +func (*Ok) Descriptor() ([]byte, []int) { + return fileDescriptor_b8d7f1c16b400059, []int{2} +} +func (m *Ok) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Ok) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Ok.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 *Ok) XXX_Merge(src proto.Message) { + xxx_messageInfo_Ok.Merge(m, src) +} +func (m *Ok) XXX_Size() int { + return m.Size() +} +func (m *Ok) XXX_DiscardUnknown() { + xxx_messageInfo_Ok.DiscardUnknown(m) +} + +var xxx_messageInfo_Ok proto.InternalMessageInfo + +type AddLogRequest struct { + Log *Log `protobuf:"bytes,1,opt,name=log,proto3" json:"log,omitempty"` +} + +func (m *AddLogRequest) Reset() { *m = AddLogRequest{} } +func (m *AddLogRequest) String() string { return proto.CompactTextString(m) } +func (*AddLogRequest) ProtoMessage() {} +func (*AddLogRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b8d7f1c16b400059, []int{3} +} +func (m *AddLogRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AddLogRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AddLogRequest.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 *AddLogRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddLogRequest.Merge(m, src) +} +func (m *AddLogRequest) XXX_Size() int { + return m.Size() +} +func (m *AddLogRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AddLogRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AddLogRequest proto.InternalMessageInfo + +func (m *AddLogRequest) GetLog() *Log { + if m != nil { + return m.Log + } + return nil +} + +type AddRecordRequest struct { + LogId []byte `protobuf:"bytes,1,opt,name=logId,proto3" json:"logId,omitempty"` + Record *Record `protobuf:"bytes,2,opt,name=record,proto3" json:"record,omitempty"` +} + +func (m *AddRecordRequest) Reset() { *m = AddRecordRequest{} } +func (m *AddRecordRequest) String() string { return proto.CompactTextString(m) } +func (*AddRecordRequest) ProtoMessage() {} +func (*AddRecordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b8d7f1c16b400059, []int{4} +} +func (m *AddRecordRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AddRecordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AddRecordRequest.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 *AddRecordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddRecordRequest.Merge(m, src) +} +func (m *AddRecordRequest) XXX_Size() int { + return m.Size() +} +func (m *AddRecordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AddRecordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AddRecordRequest proto.InternalMessageInfo + +func (m *AddRecordRequest) GetLogId() []byte { + if m != nil { + return m.LogId + } + return nil +} + +func (m *AddRecordRequest) GetRecord() *Record { + if m != nil { + return m.Record + } + return nil +} + +type WatchLogRequest struct { + LogId []byte `protobuf:"bytes,1,opt,name=logId,proto3" json:"logId,omitempty"` +} + +func (m *WatchLogRequest) Reset() { *m = WatchLogRequest{} } +func (m *WatchLogRequest) String() string { return proto.CompactTextString(m) } +func (*WatchLogRequest) ProtoMessage() {} +func (*WatchLogRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b8d7f1c16b400059, []int{5} +} +func (m *WatchLogRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WatchLogRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_WatchLogRequest.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 *WatchLogRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_WatchLogRequest.Merge(m, src) +} +func (m *WatchLogRequest) XXX_Size() int { + return m.Size() +} +func (m *WatchLogRequest) XXX_DiscardUnknown() { + xxx_messageInfo_WatchLogRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_WatchLogRequest proto.InternalMessageInfo + +func (m *WatchLogRequest) GetLogId() []byte { + if m != nil { + return m.LogId + } + return nil +} + +type WatchLogEvent struct { + LogId []byte `protobuf:"bytes,1,opt,name=logId,proto3" json:"logId,omitempty"` + Records []*Record `protobuf:"bytes,2,rep,name=records,proto3" json:"records,omitempty"` +} + +func (m *WatchLogEvent) Reset() { *m = WatchLogEvent{} } +func (m *WatchLogEvent) String() string { return proto.CompactTextString(m) } +func (*WatchLogEvent) ProtoMessage() {} +func (*WatchLogEvent) Descriptor() ([]byte, []int) { + return fileDescriptor_b8d7f1c16b400059, []int{6} +} +func (m *WatchLogEvent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WatchLogEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_WatchLogEvent.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 *WatchLogEvent) XXX_Merge(src proto.Message) { + xxx_messageInfo_WatchLogEvent.Merge(m, src) +} +func (m *WatchLogEvent) XXX_Size() int { + return m.Size() +} +func (m *WatchLogEvent) XXX_DiscardUnknown() { + xxx_messageInfo_WatchLogEvent.DiscardUnknown(m) +} + +var xxx_messageInfo_WatchLogEvent proto.InternalMessageInfo + +func (m *WatchLogEvent) GetLogId() []byte { + if m != nil { + return m.LogId + } + return nil +} + +func (m *WatchLogEvent) GetRecords() []*Record { + if m != nil { + return m.Records + } + return nil +} + +func init() { + proto.RegisterEnum("anyConsensus.ErrCodes", ErrCodes_name, ErrCodes_value) + proto.RegisterType((*Log)(nil), "anyConsensus.Log") + proto.RegisterType((*Record)(nil), "anyConsensus.Record") + proto.RegisterType((*Ok)(nil), "anyConsensus.Ok") + proto.RegisterType((*AddLogRequest)(nil), "anyConsensus.AddLogRequest") + proto.RegisterType((*AddRecordRequest)(nil), "anyConsensus.AddRecordRequest") + proto.RegisterType((*WatchLogRequest)(nil), "anyConsensus.WatchLogRequest") + proto.RegisterType((*WatchLogEvent)(nil), "anyConsensus.WatchLogEvent") +} + +func init() { + proto.RegisterFile("consensus/consensusproto/protos/consensus.proto", fileDescriptor_b8d7f1c16b400059) +} + +var fileDescriptor_b8d7f1c16b400059 = []byte{ + // 458 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x41, 0x8b, 0xd3, 0x40, + 0x14, 0xee, 0x24, 0x35, 0xbb, 0x7d, 0x69, 0xbb, 0xf1, 0xb1, 0x48, 0xd8, 0xc5, 0x50, 0xe2, 0xc1, + 0x22, 0xd2, 0x95, 0x2a, 0x78, 0xf2, 0xb0, 0x96, 0x8a, 0x0b, 0xc5, 0x42, 0xa0, 0x0a, 0x9e, 0x8c, + 0x99, 0x69, 0x0c, 0x1b, 0x32, 0x75, 0x66, 0xba, 0x74, 0xff, 0x85, 0x3f, 0xc4, 0x1f, 0xe2, 0x45, + 0xd8, 0xa3, 0x47, 0x69, 0xff, 0x88, 0x74, 0xd2, 0xac, 0xc9, 0xb6, 0x3d, 0xec, 0x25, 0xc9, 0x7c, + 0xdf, 0xfb, 0xde, 0xf7, 0xe6, 0x7b, 0x04, 0xce, 0x22, 0x9e, 0x49, 0x96, 0xc9, 0xb9, 0xfc, 0xff, + 0x35, 0x13, 0x5c, 0xf1, 0x33, 0xfd, 0x2c, 0xa1, 0x3d, 0x0d, 0x60, 0x33, 0xcc, 0xae, 0x07, 0x05, + 0xe6, 0xc7, 0x60, 0x8e, 0x78, 0x8c, 0x6d, 0x30, 0x12, 0xea, 0x92, 0x0e, 0xe9, 0x36, 0x03, 0x23, + 0xa1, 0xd8, 0x83, 0x03, 0xc1, 0x22, 0x2e, 0xa8, 0x74, 0x8d, 0x8e, 0xd9, 0xb5, 0xfb, 0xc7, 0xbd, + 0xb2, 0xac, 0x17, 0x68, 0x32, 0x28, 0x8a, 0xb0, 0x03, 0x76, 0x24, 0x58, 0xa8, 0x18, 0x9d, 0x64, + 0xc9, 0xc2, 0x35, 0x3b, 0xa4, 0x5b, 0x0f, 0xca, 0x90, 0x9f, 0x82, 0x95, 0x8b, 0xb6, 0xbc, 0x1e, + 0x81, 0x35, 0x13, 0xec, 0xea, 0x82, 0xba, 0x86, 0xc6, 0x36, 0x27, 0x74, 0xe1, 0x60, 0x16, 0x5e, + 0xa7, 0x3c, 0xa4, 0xba, 0x5f, 0x33, 0x28, 0x8e, 0x77, 0xdd, 0xea, 0xdb, 0x6e, 0x75, 0x30, 0xc6, + 0x97, 0xfe, 0x2b, 0x68, 0x9d, 0x53, 0x3a, 0xe2, 0x71, 0xc0, 0xbe, 0xcf, 0x99, 0x54, 0xf8, 0x04, + 0xcc, 0x94, 0xc7, 0xda, 0xdb, 0xee, 0x3f, 0xac, 0x5e, 0x69, 0x5d, 0xb6, 0x66, 0xfd, 0x8f, 0xe0, + 0x9c, 0x53, 0xba, 0xb9, 0xe1, 0x46, 0x78, 0x0c, 0x0f, 0x52, 0x1e, 0x5f, 0x14, 0x63, 0xe7, 0x07, + 0x7c, 0x0e, 0x56, 0x1e, 0x80, 0x9e, 0x7c, 0x5f, 0x48, 0x9b, 0x1a, 0xff, 0x29, 0x1c, 0x7d, 0x0a, + 0x55, 0xf4, 0xad, 0x34, 0xcf, 0xce, 0xb6, 0xfe, 0x04, 0x5a, 0x45, 0xe1, 0xf0, 0x8a, 0x65, 0xfb, + 0xdc, 0xef, 0xb9, 0xa3, 0x67, 0x5f, 0xe0, 0x70, 0x28, 0xc4, 0x80, 0x53, 0x26, 0xb1, 0x0d, 0x30, + 0xc9, 0xd8, 0x62, 0xc6, 0x22, 0xc5, 0xa8, 0x53, 0xc3, 0x16, 0x34, 0xd6, 0x6e, 0x8b, 0x44, 0x2a, + 0xe9, 0x10, 0x3c, 0x02, 0x7b, 0xc4, 0xe3, 0x0f, 0x5c, 0xbd, 0xe3, 0xf3, 0x8c, 0x3a, 0x06, 0x22, + 0xb4, 0xf3, 0x76, 0x03, 0x9e, 0x4d, 0xd3, 0x24, 0x52, 0x8e, 0x89, 0x0e, 0xd8, 0x43, 0x21, 0xb8, + 0x18, 0x4f, 0xa7, 0x92, 0x29, 0xe7, 0xa7, 0xd1, 0xff, 0x4d, 0xa0, 0x71, 0xeb, 0x8f, 0xaf, 0xc1, + 0xca, 0xd3, 0xc7, 0xd3, 0xea, 0x60, 0x95, 0x9d, 0x9c, 0x38, 0x55, 0x72, 0x7c, 0x89, 0x6f, 0xa0, + 0x71, 0xbb, 0x00, 0xf4, 0xb6, 0xb4, 0x95, 0xcd, 0xec, 0x90, 0xbf, 0x87, 0xc3, 0x22, 0x3e, 0x7c, + 0x5c, 0x65, 0xef, 0xe4, 0x7f, 0x72, 0xba, 0x9b, 0xd6, 0xa9, 0xbf, 0x20, 0x6f, 0xfb, 0xbf, 0x96, + 0x1e, 0xb9, 0x59, 0x7a, 0xe4, 0xef, 0xd2, 0x23, 0x3f, 0x56, 0x5e, 0xed, 0x66, 0xe5, 0xd5, 0xfe, + 0xac, 0xbc, 0xda, 0x67, 0x77, 0xdf, 0x5f, 0xf7, 0xd5, 0xd2, 0xaf, 0x97, 0xff, 0x02, 0x00, 0x00, + 0xff, 0xff, 0x2f, 0xe9, 0x67, 0xad, 0x98, 0x03, 0x00, 0x00, +} + +func (m *Log) 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 *Log) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Log) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CreatedUnix != 0 { + i = encodeVarintConsensus(dAtA, i, uint64(m.CreatedUnix)) + i-- + dAtA[i] = 0x18 + } + if len(m.Records) > 0 { + for iNdEx := len(m.Records) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Records[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConsensus(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintConsensus(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Record) 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 *Record) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Record) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CreatedUnix != 0 { + i = encodeVarintConsensus(dAtA, i, uint64(m.CreatedUnix)) + i-- + dAtA[i] = 0x20 + } + if len(m.Payload) > 0 { + i -= len(m.Payload) + copy(dAtA[i:], m.Payload) + i = encodeVarintConsensus(dAtA, i, uint64(len(m.Payload))) + i-- + dAtA[i] = 0x1a + } + if len(m.PrevId) > 0 { + i -= len(m.PrevId) + copy(dAtA[i:], m.PrevId) + i = encodeVarintConsensus(dAtA, i, uint64(len(m.PrevId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintConsensus(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Ok) 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 *Ok) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Ok) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *AddLogRequest) 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 *AddLogRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AddLogRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Log != nil { + { + size, err := m.Log.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConsensus(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AddRecordRequest) 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 *AddRecordRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AddRecordRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Record != nil { + { + size, err := m.Record.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConsensus(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.LogId) > 0 { + i -= len(m.LogId) + copy(dAtA[i:], m.LogId) + i = encodeVarintConsensus(dAtA, i, uint64(len(m.LogId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *WatchLogRequest) 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 *WatchLogRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WatchLogRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.LogId) > 0 { + i -= len(m.LogId) + copy(dAtA[i:], m.LogId) + i = encodeVarintConsensus(dAtA, i, uint64(len(m.LogId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *WatchLogEvent) 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 *WatchLogEvent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WatchLogEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Records) > 0 { + for iNdEx := len(m.Records) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Records[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConsensus(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.LogId) > 0 { + i -= len(m.LogId) + copy(dAtA[i:], m.LogId) + i = encodeVarintConsensus(dAtA, i, uint64(len(m.LogId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintConsensus(dAtA []byte, offset int, v uint64) int { + offset -= sovConsensus(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Log) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovConsensus(uint64(l)) + } + if len(m.Records) > 0 { + for _, e := range m.Records { + l = e.Size() + n += 1 + l + sovConsensus(uint64(l)) + } + } + if m.CreatedUnix != 0 { + n += 1 + sovConsensus(uint64(m.CreatedUnix)) + } + return n +} + +func (m *Record) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovConsensus(uint64(l)) + } + l = len(m.PrevId) + if l > 0 { + n += 1 + l + sovConsensus(uint64(l)) + } + l = len(m.Payload) + if l > 0 { + n += 1 + l + sovConsensus(uint64(l)) + } + if m.CreatedUnix != 0 { + n += 1 + sovConsensus(uint64(m.CreatedUnix)) + } + return n +} + +func (m *Ok) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *AddLogRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Log != nil { + l = m.Log.Size() + n += 1 + l + sovConsensus(uint64(l)) + } + return n +} + +func (m *AddRecordRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.LogId) + if l > 0 { + n += 1 + l + sovConsensus(uint64(l)) + } + if m.Record != nil { + l = m.Record.Size() + n += 1 + l + sovConsensus(uint64(l)) + } + return n +} + +func (m *WatchLogRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.LogId) + if l > 0 { + n += 1 + l + sovConsensus(uint64(l)) + } + return n +} + +func (m *WatchLogEvent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.LogId) + if l > 0 { + n += 1 + l + sovConsensus(uint64(l)) + } + if len(m.Records) > 0 { + for _, e := range m.Records { + l = e.Size() + n += 1 + l + sovConsensus(uint64(l)) + } + } + return n +} + +func sovConsensus(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozConsensus(x uint64) (n int) { + return sovConsensus(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Log) 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 ErrIntOverflowConsensus + } + 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: Log: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Log: 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 byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Id = append(m.Id[:0], dAtA[iNdEx:postIndex]...) + if m.Id == nil { + m.Id = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Records", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Records = append(m.Records, &Record{}) + if err := m.Records[len(m.Records)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CreatedUnix", wireType) + } + m.CreatedUnix = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CreatedUnix |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipConsensus(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthConsensus + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Record) 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 ErrIntOverflowConsensus + } + 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: Record: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Record: 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 byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Id = append(m.Id[:0], dAtA[iNdEx:postIndex]...) + if m.Id == nil { + m.Id = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PrevId", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PrevId = append(m.PrevId[:0], dAtA[iNdEx:postIndex]...) + if m.PrevId == nil { + m.PrevId = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Payload = append(m.Payload[:0], dAtA[iNdEx:postIndex]...) + if m.Payload == nil { + m.Payload = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CreatedUnix", wireType) + } + m.CreatedUnix = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CreatedUnix |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipConsensus(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthConsensus + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Ok) 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 ErrIntOverflowConsensus + } + 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: Ok: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Ok: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipConsensus(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthConsensus + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AddLogRequest) 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 ErrIntOverflowConsensus + } + 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: AddLogRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AddLogRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Log", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Log == nil { + m.Log = &Log{} + } + if err := m.Log.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConsensus(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthConsensus + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AddRecordRequest) 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 ErrIntOverflowConsensus + } + 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: AddRecordRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AddRecordRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LogId", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LogId = append(m.LogId[:0], dAtA[iNdEx:postIndex]...) + if m.LogId == nil { + m.LogId = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Record", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Record == nil { + m.Record = &Record{} + } + if err := m.Record.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConsensus(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthConsensus + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WatchLogRequest) 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 ErrIntOverflowConsensus + } + 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: WatchLogRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WatchLogRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LogId", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LogId = append(m.LogId[:0], dAtA[iNdEx:postIndex]...) + if m.LogId == nil { + m.LogId = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConsensus(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthConsensus + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WatchLogEvent) 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 ErrIntOverflowConsensus + } + 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: WatchLogEvent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WatchLogEvent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LogId", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LogId = append(m.LogId[:0], dAtA[iNdEx:postIndex]...) + if m.LogId == nil { + m.LogId = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Records", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowConsensus + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthConsensus + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthConsensus + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Records = append(m.Records, &Record{}) + if err := m.Records[len(m.Records)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipConsensus(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthConsensus + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipConsensus(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, ErrIntOverflowConsensus + } + 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, ErrIntOverflowConsensus + } + 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, ErrIntOverflowConsensus + } + 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, ErrInvalidLengthConsensus + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupConsensus + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthConsensus + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthConsensus = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowConsensus = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupConsensus = fmt.Errorf("proto: unexpected end of group") +) diff --git a/consensus/consensusproto/consensus_drpc.pb.go b/consensus/consensusproto/consensus_drpc.pb.go new file mode 100644 index 00000000..f573360f --- /dev/null +++ b/consensus/consensusproto/consensus_drpc.pb.go @@ -0,0 +1,217 @@ +// Code generated by protoc-gen-go-drpc. DO NOT EDIT. +// protoc-gen-go-drpc version: v0.0.32 +// source: consensus/consensusproto/protos/consensus.proto + +package consensusproto + +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_consensus_consensusproto_protos_consensus_proto struct{} + +func (drpcEncoding_File_consensus_consensusproto_protos_consensus_proto) Marshal(msg drpc.Message) ([]byte, error) { + return proto.Marshal(msg.(proto.Message)) +} + +func (drpcEncoding_File_consensus_consensusproto_protos_consensus_proto) Unmarshal(buf []byte, msg drpc.Message) error { + return proto.Unmarshal(buf, msg.(proto.Message)) +} + +func (drpcEncoding_File_consensus_consensusproto_protos_consensus_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_consensus_consensusproto_protos_consensus_proto) JSONUnmarshal(buf []byte, msg drpc.Message) error { + return jsonpb.Unmarshal(bytes.NewReader(buf), msg.(proto.Message)) +} + +type DRPCConsensusClient interface { + DRPCConn() drpc.Conn + + AddLog(ctx context.Context, in *AddLogRequest) (*Ok, error) + AddRecord(ctx context.Context, in *AddRecordRequest) (*Ok, error) + WatchLog(ctx context.Context, in *WatchLogRequest) (DRPCConsensus_WatchLogClient, error) +} + +type drpcConsensusClient struct { + cc drpc.Conn +} + +func NewDRPCConsensusClient(cc drpc.Conn) DRPCConsensusClient { + return &drpcConsensusClient{cc} +} + +func (c *drpcConsensusClient) DRPCConn() drpc.Conn { return c.cc } + +func (c *drpcConsensusClient) AddLog(ctx context.Context, in *AddLogRequest) (*Ok, error) { + out := new(Ok) + err := c.cc.Invoke(ctx, "/anyConsensus.Consensus/AddLog", drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcConsensusClient) AddRecord(ctx context.Context, in *AddRecordRequest) (*Ok, error) { + out := new(Ok) + err := c.cc.Invoke(ctx, "/anyConsensus.Consensus/AddRecord", drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}, in, out) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *drpcConsensusClient) WatchLog(ctx context.Context, in *WatchLogRequest) (DRPCConsensus_WatchLogClient, error) { + stream, err := c.cc.NewStream(ctx, "/anyConsensus.Consensus/WatchLog", drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}) + if err != nil { + return nil, err + } + x := &drpcConsensus_WatchLogClient{stream} + if err := x.MsgSend(in, drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}); err != nil { + return nil, err + } + if err := x.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type DRPCConsensus_WatchLogClient interface { + drpc.Stream + Recv() (*WatchLogEvent, error) +} + +type drpcConsensus_WatchLogClient struct { + drpc.Stream +} + +func (x *drpcConsensus_WatchLogClient) Recv() (*WatchLogEvent, error) { + m := new(WatchLogEvent) + if err := x.MsgRecv(m, drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}); err != nil { + return nil, err + } + return m, nil +} + +func (x *drpcConsensus_WatchLogClient) RecvMsg(m *WatchLogEvent) error { + return x.MsgRecv(m, drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}) +} + +type DRPCConsensusServer interface { + AddLog(context.Context, *AddLogRequest) (*Ok, error) + AddRecord(context.Context, *AddRecordRequest) (*Ok, error) + WatchLog(*WatchLogRequest, DRPCConsensus_WatchLogStream) error +} + +type DRPCConsensusUnimplementedServer struct{} + +func (s *DRPCConsensusUnimplementedServer) AddLog(context.Context, *AddLogRequest) (*Ok, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCConsensusUnimplementedServer) AddRecord(context.Context, *AddRecordRequest) (*Ok, error) { + return nil, drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +func (s *DRPCConsensusUnimplementedServer) WatchLog(*WatchLogRequest, DRPCConsensus_WatchLogStream) error { + return drpcerr.WithCode(errors.New("Unimplemented"), drpcerr.Unimplemented) +} + +type DRPCConsensusDescription struct{} + +func (DRPCConsensusDescription) NumMethods() int { return 3 } + +func (DRPCConsensusDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) { + switch n { + case 0: + return "/anyConsensus.Consensus/AddLog", drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCConsensusServer). + AddLog( + ctx, + in1.(*AddLogRequest), + ) + }, DRPCConsensusServer.AddLog, true + case 1: + return "/anyConsensus.Consensus/AddRecord", drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return srv.(DRPCConsensusServer). + AddRecord( + ctx, + in1.(*AddRecordRequest), + ) + }, DRPCConsensusServer.AddRecord, true + case 2: + return "/anyConsensus.Consensus/WatchLog", drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}, + func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) { + return nil, srv.(DRPCConsensusServer). + WatchLog( + in1.(*WatchLogRequest), + &drpcConsensus_WatchLogStream{in2.(drpc.Stream)}, + ) + }, DRPCConsensusServer.WatchLog, true + default: + return "", nil, nil, nil, false + } +} + +func DRPCRegisterConsensus(mux drpc.Mux, impl DRPCConsensusServer) error { + return mux.Register(impl, DRPCConsensusDescription{}) +} + +type DRPCConsensus_AddLogStream interface { + drpc.Stream + SendAndClose(*Ok) error +} + +type drpcConsensus_AddLogStream struct { + drpc.Stream +} + +func (x *drpcConsensus_AddLogStream) SendAndClose(m *Ok) error { + if err := x.MsgSend(m, drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCConsensus_AddRecordStream interface { + drpc.Stream + SendAndClose(*Ok) error +} + +type drpcConsensus_AddRecordStream struct { + drpc.Stream +} + +func (x *drpcConsensus_AddRecordStream) SendAndClose(m *Ok) error { + if err := x.MsgSend(m, drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}); err != nil { + return err + } + return x.CloseSend() +} + +type DRPCConsensus_WatchLogStream interface { + drpc.Stream + Send(*WatchLogEvent) error +} + +type drpcConsensus_WatchLogStream struct { + drpc.Stream +} + +func (x *drpcConsensus_WatchLogStream) Send(m *WatchLogEvent) error { + return x.MsgSend(m, drpcEncoding_File_consensus_consensusproto_protos_consensus_proto{}) +} diff --git a/consensus/consensusproto/consensuserrs/errors.go b/consensus/consensusproto/consensuserrs/errors.go new file mode 100644 index 00000000..afe5ec10 --- /dev/null +++ b/consensus/consensusproto/consensuserrs/errors.go @@ -0,0 +1,16 @@ +package consensuserrs + +import ( + "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/rpcerr" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto" +) + +var ( + errGroup = rpcerr.ErrGroup(consensusproto.ErrCodes_ErrorOffset) + + ErrUnexpected = errGroup.Register(fmt.Errorf("unexpected consensus error"), uint64(consensusproto.ErrCodes_Unexpected)) + ErrConflict = errGroup.Register(fmt.Errorf("records conflict"), uint64(consensusproto.ErrCodes_RecordConflict)) + ErrLogExists = errGroup.Register(fmt.Errorf("log exists"), uint64(consensusproto.ErrCodes_LogExists)) + ErrLogNotFound = errGroup.Register(fmt.Errorf("log not found"), uint64(consensusproto.ErrCodes_LogNotFound)) +) diff --git a/consensus/consensusproto/protos/consensus.proto b/consensus/consensusproto/protos/consensus.proto new file mode 100644 index 00000000..256d2868 --- /dev/null +++ b/consensus/consensusproto/protos/consensus.proto @@ -0,0 +1,55 @@ +syntax = "proto3"; +package anyConsensus; + +option go_package = "consensus/consensusproto"; + +enum ErrCodes { + Unexpected = 0; + LogExists = 1; + LogNotFound = 2; + RecordConflict = 3; + ErrorOffset = 300; +} + + +message Log { + bytes id = 1; + repeated Record records = 2; + uint64 createdUnix = 3; +} + +message Record { + bytes id = 1; + bytes prevId = 2; + bytes payload = 3; + uint64 createdUnix = 4; +} + +service Consensus { + // AddLog adds new log to consensus + rpc AddLog(AddLogRequest) returns (Ok); + // AddRecord adds new record to log + rpc AddRecord(AddRecordRequest) returns (Ok); + // WatchLog fetches log and subscribes for a changes + rpc WatchLog(WatchLogRequest) returns (stream WatchLogEvent); +} + +message Ok {} + +message AddLogRequest { + Log log = 1; +} + +message AddRecordRequest { + bytes logId = 1; + Record record = 2; +} + +message WatchLogRequest { + bytes logId = 1; +} + +message WatchLogEvent { + bytes logId = 1; + repeated Record records = 2; +} diff --git a/consensus/db/db.go b/consensus/db/db.go new file mode 100644 index 00000000..120d7be0 --- /dev/null +++ b/consensus/db/db.go @@ -0,0 +1,181 @@ +package db + +import ( + "context" + "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/config" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto/consensuserrs" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + "go.uber.org/zap" +) + +const CName = "consensus.db" + +var log = logger.NewNamed(CName) + +func New() Service { + return &service{} +} + +type ChangeReceiver func(logId []byte, records []consensus.Record) + +type Service interface { + AddLog(ctx context.Context, log consensus.Log) (err error) + AddRecord(ctx context.Context, logId []byte, record consensus.Record) (err error) + FetchLog(ctx context.Context, logId []byte) (log consensus.Log, err error) + SetChangeReceiver(receiver ChangeReceiver) (err error) + app.ComponentRunnable +} + +type service struct { + conf config.Mongo + logColl *mongo.Collection + running bool + changeReceiver ChangeReceiver + + streamCtx context.Context + streamCancel context.CancelFunc + listenerDone chan struct{} +} + +func (s *service) Init(a *app.App) (err error) { + s.conf = a.MustComponent(config.CName).(*config.Config).Mongo + return nil +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) Run(ctx context.Context) (err error) { + client, err := mongo.Connect(ctx, options.Client().ApplyURI(s.conf.Connect)) + if err != nil { + return err + } + s.logColl = client.Database(s.conf.Database).Collection(s.conf.LogCollection) + s.running = true + if s.changeReceiver != nil { + if err = s.runStreamListener(ctx); err != nil { + return err + } + } + return +} + +func (s *service) AddLog(ctx context.Context, l consensus.Log) (err error) { + _, err = s.logColl.InsertOne(ctx, l) + if mongo.IsDuplicateKeyError(err) { + return consensuserrs.ErrLogExists + } + return +} + +type findLogQuery struct { + Id []byte `bson:"_id"` +} + +type findRecordQuery struct { + Id []byte `bson:"_id"` + LastRecordId []byte `bson:"records.0.id"` +} + +type updateOp struct { + Push struct { + Records struct { + Each []consensus.Record `bson:"$each""` + Pos int `bson:"$position"` + } `bson:"records"` + } `bson:"$push"` +} + +func (s *service) AddRecord(ctx context.Context, logId []byte, record consensus.Record) (err error) { + var upd updateOp + upd.Push.Records.Each = []consensus.Record{record} + result, err := s.logColl.UpdateOne(ctx, findRecordQuery{ + Id: logId, + LastRecordId: record.PrevId, + }, upd) + if err != nil { + log.Error("addRecord update error", zap.Error(err)) + return consensuserrs.ErrUnexpected + } + if result.ModifiedCount == 0 { + return consensuserrs.ErrConflict + } + return +} + +func (s *service) FetchLog(ctx context.Context, logId []byte) (l consensus.Log, err error) { + if err = s.logColl.FindOne(ctx, findLogQuery{Id: logId}).Decode(&l); err != nil { + if err == mongo.ErrNoDocuments { + err = consensuserrs.ErrLogNotFound + } + return + } + return +} + +func (s *service) SetChangeReceiver(receiver ChangeReceiver) (err error) { + if s.running { + return fmt.Errorf("set receiver must be called before Run") + } + s.changeReceiver = receiver + return +} + +type matchPipeline struct { + Match struct { + OT string `bson:"operationType"` + } `bson:"$match"` +} + +func (s *service) runStreamListener(ctx context.Context) (err error) { + var mp matchPipeline + mp.Match.OT = "update" + stream, err := s.logColl.Watch(ctx, []matchPipeline{mp}) + if err != nil { + return + } + s.listenerDone = make(chan struct{}) + s.streamCtx, s.streamCancel = context.WithCancel(context.Background()) + go s.streamListener(stream) + return +} + +type streamResult struct { + DocumentKey struct { + Id []byte `bson:"_id"` + } `bson:"documentKey"` + UpdateDescription struct { + UpdateFields struct { + Records []consensus.Record `bson:"records"` + } `bson:"updatedFields""` + } `bson:"updateDescription"` +} + +func (s *service) streamListener(stream *mongo.ChangeStream) { + defer close(s.listenerDone) + for stream.Next(s.streamCtx) { + var res streamResult + if err := stream.Decode(&res); err != nil { + log.Error("stream decode error:", zap.Error(err)) + } + s.changeReceiver(res.DocumentKey.Id, res.UpdateDescription.UpdateFields.Records) + } +} + +func (s *service) Close(ctx context.Context) (err error) { + if s.logColl != nil { + err = s.logColl.Database().Client().Disconnect(ctx) + s.logColl = nil + } + if s.listenerDone != nil { + s.streamCancel() + <-s.listenerDone + } + return +} diff --git a/consensus/db/db_test.go b/consensus/db/db_test.go new file mode 100644 index 00000000..add2ca37 --- /dev/null +++ b/consensus/db/db_test.go @@ -0,0 +1,218 @@ +package db + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/config" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto/consensuserrs" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "testing" + "time" +) + +var ctx = context.Background() + +func TestService_AddLog(t *testing.T) { + t.Run("success", func(t *testing.T) { + fx := newFixture(t, nil) + defer fx.Finish(t) + log := consensus.Log{ + Id: []byte("logOne"), + Records: []consensus.Record{ + { + Id: []byte("recordOne"), + PrevId: nil, + Payload: []byte("payload"), + Created: time.Now().Truncate(time.Second).UTC(), + }, + }, + } + require.NoError(t, fx.AddLog(ctx, log)) + fetched, err := fx.FetchLog(ctx, log.Id) + require.NoError(t, err) + assert.Equal(t, log, fetched) + }) + t.Run("duplicate error", func(t *testing.T) { + fx := newFixture(t, nil) + defer fx.Finish(t) + log := consensus.Log{ + Id: []byte("logOne"), + } + require.NoError(t, fx.AddLog(ctx, log)) + // TODO: check for specified error + require.Error(t, fx.AddLog(ctx, log)) + }) +} + +func TestService_AddRecord(t *testing.T) { + t.Run("success", func(t *testing.T) { + fx := newFixture(t, nil) + defer fx.Finish(t) + var records = []consensus.Record{ + { + Id: []byte("2"), + PrevId: []byte("1"), + }, + { + Id: []byte("3"), + PrevId: []byte("2"), + }, + { + Id: []byte("4"), + PrevId: []byte("3"), + }, + } + l := consensus.Log{ + Id: []byte("logTestRecords"), + Records: []consensus.Record{ + { + Id: []byte("1"), + }, + }, + } + require.NoError(t, fx.AddLog(ctx, l)) + for _, rec := range records { + require.NoError(t, fx.AddRecord(ctx, l.Id, rec)) + } + fx.assertLogValid(t, l.Id, 4) + }) + t.Run("conflict", func(t *testing.T) { + fx := newFixture(t, nil) + defer fx.Finish(t) + log := consensus.Log{ + Id: []byte("logTestRecords"), + Records: []consensus.Record{ + { + Id: []byte("1"), + }, + }, + } + require.NoError(t, fx.AddLog(ctx, log)) + assert.Error(t, fx.AddRecord(ctx, log.Id, consensus.Record{Id: []byte("2"), PrevId: []byte("3")})) + }) +} + +func TestService_FetchLog(t *testing.T) { + t.Run("not found", func(t *testing.T) { + fx := newFixture(t, nil) + defer fx.Finish(t) + l, err := fx.FetchLog(ctx, []byte("not exists")) + assert.Empty(t, l) + assert.ErrorIs(t, err, consensuserrs.ErrLogNotFound) + }) +} + +func TestService_ChangeReceive(t *testing.T) { + t.Run("set after run", func(t *testing.T) { + fx := newFixture(t, nil) + defer fx.Finish(t) + assert.Error(t, fx.SetChangeReceiver(func(logId []byte, records []consensus.Record) {})) + }) + t.Run("receive changes", func(t *testing.T) { + var logs = make(chan consensus.Log, 10) + var count int + fx := newFixture(t, func(logId []byte, records []consensus.Record) { + logs <- consensus.Log{Id: logId, Records: records} + count++ + }) + defer fx.Finish(t) + var l = consensus.Log{ + Id: []byte("logTestStream"), + Records: []consensus.Record{ + { + Id: []byte("1"), + }, + }, + } + var records = []consensus.Record{ + { + Id: []byte("2"), + PrevId: []byte("1"), + }, + { + Id: []byte("3"), + PrevId: []byte("2"), + }, + { + Id: []byte("4"), + PrevId: []byte("3"), + }, + } + require.NoError(t, fx.AddLog(ctx, l)) + assert.Empty(t, count) + + for _, rec := range records { + require.NoError(t, fx.AddRecord(ctx, l.Id, rec)) + } + + timeout := time.After(time.Second) + for i := 0; i < len(records); i++ { + select { + case resLog := <-logs: + assertLogValid(t, resLog, i+2) + case <-timeout: + require.False(t, true) + } + } + }) +} + +func newFixture(t *testing.T, cr ChangeReceiver) *fixture { + ctx, cancel := context.WithTimeout(ctx, time.Second) + fx := &fixture{ + Service: New(), + cancel: cancel, + a: new(app.App), + } + fx.a.Register(&config.Config{ + Mongo: config.Mongo{ + Connect: "mongodb://localhost:27017/?w=majority", + Database: "consensus_test", + LogCollection: "log", + }, + }) + fx.a.Register(fx.Service) + require.NoError(t, fx.Service.SetChangeReceiver(cr)) + err := fx.a.Start(ctx) + if err != nil { + fx.cancel() + } + require.NoError(t, err) + return fx +} + +type fixture struct { + Service + a *app.App + cancel context.CancelFunc +} + +func (fx *fixture) Finish(t *testing.T) { + if fx.cancel != nil { + fx.cancel() + } + coll := fx.Service.(*service).logColl + t.Log(coll.Drop(ctx)) + assert.NoError(t, fx.a.Close(ctx)) +} + +func (fx *fixture) assertLogValid(t *testing.T, logId []byte, count int) { + log, err := fx.FetchLog(ctx, logId) + require.NoError(t, err) + assertLogValid(t, log, count) +} + +func assertLogValid(t *testing.T, log consensus.Log, count int) { + if count >= 0 { + assert.Len(t, log.Records, count) + } + var prevId []byte + for _, rec := range log.Records { + if len(prevId) != 0 { + assert.Equal(t, string(prevId), string(rec.Id)) + } + prevId = rec.PrevId + } +} diff --git a/go.mod b/go.mod index 9c60aa54..a71e82d4 100644 --- a/go.mod +++ b/go.mod @@ -12,12 +12,13 @@ require ( github.com/ipfs/go-cid v0.1.0 github.com/libp2p/go-libp2p v0.20.3 github.com/libp2p/go-libp2p-core v0.16.1 - github.com/mr-tron/base58 v1.2.0 + github.com/minio/sha256-simd v1.0.0 github.com/multiformats/go-multibase v0.0.3 github.com/multiformats/go-multihash v0.1.0 github.com/stretchr/testify v1.8.0 github.com/zeebo/blake3 v0.2.3 github.com/zeebo/errs v1.3.0 + go.mongodb.org/mongo-driver v1.10.2 go.uber.org/zap v1.21.0 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 gopkg.in/yaml.v3 v3.0.1 @@ -33,11 +34,14 @@ require ( github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/fogleman/gg v1.3.0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/golang/snappy v0.0.1 // indirect + github.com/klauspost/compress v1.15.1 // indirect github.com/klauspost/cpuid/v2 v2.0.12 // indirect github.com/libp2p/go-buffer-pool v0.0.2 // indirect github.com/libp2p/go-openssl v0.0.7 // indirect github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect - github.com/minio/sha256-simd v1.0.0 // indirect + github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect + github.com/mr-tron/base58 v1.2.0 // indirect github.com/multiformats/go-base32 v0.0.3 // indirect github.com/multiformats/go-base36 v0.1.0 // indirect github.com/multiformats/go-multiaddr v0.5.0 // indirect @@ -47,11 +51,17 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.1 // indirect + github.com/xdg-go/stringprep v1.0.3 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.8.0 // indirect - golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect + golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect golang.org/x/image v0.0.0-20200119044424-58c23975cae1 // indirect + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 // indirect + golang.org/x/text v0.3.7 // indirect gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect lukechampine.com/blake3 v1.1.6 // indirect diff --git a/go.sum b/go.sum index 34c05834..fd2783ce 100644 --- a/go.sum +++ b/go.sum @@ -32,6 +32,10 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= @@ -42,6 +46,9 @@ github.com/ipfs/go-cid v0.1.0/go.mod h1:rH5/Xv83Rfy8Rw6xG+id3DYAMUVmem1MowoKwdXm github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE= @@ -64,6 +71,8 @@ github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8Rv github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= @@ -102,10 +111,21 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= @@ -117,6 +137,8 @@ github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo= github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= +go.mongodb.org/mongo-driver v1.10.2 h1:4Wk3cnqOrQCn0P92L3/mmurMxzdvWWs5J9jinAVKD+k= +go.mongodb.org/mongo-driver v1.10.2/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -134,8 +156,8 @@ golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/image v0.0.0-20200119044424-58c23975cae1 h1:5h3ngYt7+vXCDZCup/HkCQgW5XwmSvR/nA2JmJ0RErg= golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -149,9 +171,11 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -161,13 +185,18 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 h1:xHms4gcpe1YE7A3yIllJXP16CMAGuqwO2lX1mTyyRRc= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -177,6 +206,7 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/acl/aclrecordproto/aclrecord.pb.go b/pkg/acl/aclrecordproto/aclrecord.pb.go index 158b70f5..e11f5209 100644 --- a/pkg/acl/aclrecordproto/aclrecord.pb.go +++ b/pkg/acl/aclrecordproto/aclrecord.pb.go @@ -324,6 +324,7 @@ func (m *ACLRoot) GetTimestamp() int64 { type ACLContentValue struct { // Types that are valid to be assigned to Value: + // // *ACLContentValue_UserAdd // *ACLContentValue_UserRemove // *ACLContentValue_UserPermissionChange diff --git a/pkg/acl/testutils/testchanges/proto/test.pb.go b/pkg/acl/testutils/testchanges/proto/test.pb.go index e8e43c54..d99ba0b5 100644 --- a/pkg/acl/testutils/testchanges/proto/test.pb.go +++ b/pkg/acl/testutils/testchanges/proto/test.pb.go @@ -60,6 +60,7 @@ var xxx_messageInfo_PlainTextChange proto.InternalMessageInfo type PlainTextChange_Content struct { // Types that are valid to be assigned to Value: + // // *PlainTextChange_Content_TextAppend Value isPlainTextChange_Content_Value `protobuf_oneof:"value"` } From 5729a329597b86febf8356d3495913b64fac51a1 Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Tue, 4 Oct 2022 15:39:29 +0300 Subject: [PATCH 2/6] consensus node --- Makefile | 6 +- cmd/consensusnode/consensusnode.go | 94 +++++++++++++++ cmd/nodesgen/nodemap.yml | 3 + common/account/service.go | 5 + common/net/rpc/server/drpcserver.go | 9 +- common/net/secure/service.go | 3 +- config/config.go | 12 ++ consensus/config/account.go | 7 -- consensus/config/config.go | 19 ++- consensus/config/grpc.go | 6 - consensus/consensusrpc/consensrpc.go | 114 ++++++++++++++++++ consensus/db/db.go | 2 +- consensus/stream/object.go | 68 +++++++++++ consensus/stream/service.go | 127 ++++++++++++++++++++ consensus/stream/service_test.go | 169 +++++++++++++++++++++++++++ consensus/stream/stream.go | 34 ++++++ etc/configs/config1.yml | 22 ++-- etc/configs/config2.yml | 22 ++-- etc/configs/config3.yml | 28 +++++ etc/configs/cons/config1.yml | 32 +++++ etc/configs/cons/config2.yml | 32 +++++ etc/configs/cons/config3.yml | 32 +++++ etc/consensus-node.yml | 11 ++ go.mod | 1 + go.sum | 4 + node/account/service.go | 3 +- 26 files changed, 822 insertions(+), 43 deletions(-) create mode 100644 cmd/consensusnode/consensusnode.go delete mode 100644 consensus/config/account.go delete mode 100644 consensus/config/grpc.go create mode 100644 consensus/consensusrpc/consensrpc.go create mode 100644 consensus/stream/object.go create mode 100644 consensus/stream/service.go create mode 100644 consensus/stream/service_test.go create mode 100644 consensus/stream/stream.go create mode 100755 etc/configs/config3.yml create mode 100755 etc/configs/cons/config1.yml create mode 100755 etc/configs/cons/config2.yml create mode 100755 etc/configs/cons/config3.yml create mode 100644 etc/consensus-node.yml diff --git a/Makefile b/Makefile index 7817be8c..ad53dc00 100644 --- a/Makefile +++ b/Makefile @@ -35,4 +35,8 @@ proto: build: @$(eval FLAGS := $$(shell govvv -flags -pkg github.com/anytypeio/go-anytype-infrastructure-experiments/app)) - go build -v -o bin/anytype-node -ldflags "$(FLAGS)" cmd/node/node.go \ No newline at end of file + go build -v -o bin/anytype-node -ldflags "$(FLAGS)" cmd/node/node.go + +build-consensus: + @$(eval FLAGS := $$(shell govvv -flags -pkg github.com/anytypeio/go-anytype-infrastructure-experiments/app)) + go build -v -o bin/consensus-node -ldflags "$(FLAGS)" cmd/consensusnode/consensusnode.go \ No newline at end of file diff --git a/cmd/consensusnode/consensusnode.go b/cmd/consensusnode/consensusnode.go new file mode 100644 index 00000000..0a563755 --- /dev/null +++ b/cmd/consensusnode/consensusnode.go @@ -0,0 +1,94 @@ +package main + +import ( + "context" + "flag" + "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" + "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/consensus/config" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusrpc" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/db" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/stream" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/account" + "go.uber.org/zap" + "net/http" + "os" + "os/signal" + "syscall" + "time" +) + +var log = logger.NewNamed("main") + +var ( + flagConfigFile = flag.String("c", "etc/consensus-config.yml", "path to config file") + flagVersion = flag.Bool("v", 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) + + // open config file + conf, err := config.NewFromFile(*flagConfigFile) + if err != nil { + log.Fatal("can't open config file", zap.Error(err)) + } + + // bootstrap components + a.Register(conf) + 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(account.New()). + Register(secure.New()). + Register(server.New()). + Register(db.New()). + Register(stream.New()). + Register(consensusrpc.New()) +} diff --git a/cmd/nodesgen/nodemap.yml b/cmd/nodesgen/nodemap.yml index 27a0cb15..137e585f 100644 --- a/cmd/nodesgen/nodemap.yml +++ b/cmd/nodesgen/nodemap.yml @@ -5,3 +5,6 @@ nodes: - grpcAddresses: - "127.0.0.1:4431" apiPort: "8081" + - grpcAddresses: + - "127.0.0.1:4432" + apiPort: "8082" diff --git a/common/account/service.go b/common/account/service.go index bdf6984d..16c62bff 100644 --- a/common/account/service.go +++ b/common/account/service.go @@ -2,6 +2,7 @@ package account import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" ) @@ -11,3 +12,7 @@ type Service interface { app.Component Account() *account.AccountData } + +type ConfigGetter interface { + GetAccount() config.Account +} diff --git a/common/net/rpc/server/drpcserver.go b/common/net/rpc/server/drpcserver.go index 5e6078ff..5ad27a3c 100644 --- a/common/net/rpc/server/drpcserver.go +++ b/common/net/rpc/server/drpcserver.go @@ -4,7 +4,6 @@ import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" - "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" secure2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" "github.com/anytypeio/go-anytype-infrastructure-experiments/config" "github.com/zeebo/errs" @@ -30,20 +29,22 @@ type DRPCServer interface { drpc.Mux } +type configGetter interface { + GetGRPCServer() config.GrpcServer +} + type drpcServer struct { config config.GrpcServer drpcServer *drpcserver.Server transport secure2.Service listeners []secure2.ContextListener - pool pool.Pool cancel func() *drpcmux.Mux } func (s *drpcServer) Init(a *app.App) (err error) { - s.config = a.MustComponent(config.CName).(*config.Config).GrpcServer + s.config = a.MustComponent(config.CName).(configGetter).GetGRPCServer() s.transport = a.MustComponent(secure2.CName).(secure2.Service) - s.pool = a.MustComponent(pool.CName).(pool.Pool) return nil } diff --git a/common/net/secure/service.go b/common/net/secure/service.go index a93c3242..d8ade632 100644 --- a/common/net/secure/service.go +++ b/common/net/secure/service.go @@ -4,6 +4,7 @@ import ( "context" "github.com/anytypeio/go-anytype-infrastructure-experiments/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" + commonaccount "github.com/anytypeio/go-anytype-infrastructure-experiments/common/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys" "github.com/libp2p/go-libp2p-core/crypto" @@ -34,7 +35,7 @@ type service struct { } func (s *service) Init(a *app.App) (err error) { - account := a.MustComponent(config.CName).(*config.Config).Account + account := a.MustComponent(config.CName).(commonaccount.ConfigGetter).GetAccount() pkb, err := keys.DecodeBytesFromString(account.SigningKey) if err != nil { return diff --git a/config/config.go b/config/config.go index b8a84e34..012a7da5 100644 --- a/config/config.go +++ b/config/config.go @@ -39,3 +39,15 @@ func (c *Config) Init(a *app.App) (err error) { func (c Config) Name() (name string) { return CName } + +func (c Config) GetAnytype() Anytype { + return c.Anytype +} + +func (c Config) GetGRPCServer() GrpcServer { + return c.GrpcServer +} + +func (c Config) GetAccount() Account { + return c.Account +} diff --git a/consensus/config/account.go b/consensus/config/account.go deleted file mode 100644 index 4525b26f..00000000 --- a/consensus/config/account.go +++ /dev/null @@ -1,7 +0,0 @@ -package config - -type Account struct { - PeerId string `yaml:"peerId"` - SigningKey string `yaml:"signingKey"` - EncryptionKey string `yaml:"encryptionKey"` -} diff --git a/consensus/config/config.go b/consensus/config/config.go index 87a7ea79..45a83a08 100644 --- a/consensus/config/config.go +++ b/consensus/config/config.go @@ -2,6 +2,7 @@ package config import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/config" "gopkg.in/yaml.v3" "io/ioutil" ) @@ -21,9 +22,9 @@ func NewFromFile(path string) (c *Config, err error) { } type Config struct { - GrpcServer GrpcServer `yaml:"grpcServer"` - Account Account `yaml:"account"` - Mongo Mongo `yaml:"mongo"` + GrpcServer config.GrpcServer `yaml:"grpcServer"` + Account config.Account `yaml:"account"` + Mongo Mongo `yaml:"mongo"` } func (c *Config) Init(a *app.App) (err error) { @@ -33,3 +34,15 @@ func (c *Config) Init(a *app.App) (err error) { func (c Config) Name() (name string) { return CName } + +func (c Config) GetMongo() Mongo { + return c.Mongo +} + +func (c Config) GetGRPCServer() config.GrpcServer { + return c.GrpcServer +} + +func (c Config) GetAccount() config.Account { + return c.Account +} diff --git a/consensus/config/grpc.go b/consensus/config/grpc.go deleted file mode 100644 index 700c3567..00000000 --- a/consensus/config/grpc.go +++ /dev/null @@ -1,6 +0,0 @@ -package config - -type GrpcServer struct { - ListenAddrs []string `yaml:"listenAddrs"` - TLS bool `yaml:"tls"` -} diff --git a/consensus/consensusrpc/consensrpc.go b/consensus/consensusrpc/consensrpc.go new file mode 100644 index 00000000..6d502364 --- /dev/null +++ b/consensus/consensusrpc/consensrpc.go @@ -0,0 +1,114 @@ +package consensusrpc + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/db" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/stream" + "time" +) + +const CName = "consensus.consensusrpc" + +func New() app.Component { + return &consensusRpc{} +} + +type consensusRpc struct { + db db.Service + stream stream.Service +} + +func (c *consensusRpc) Init(a *app.App) (err error) { + c.db = a.MustComponent(db.CName).(db.Service) + c.stream = a.MustComponent(stream.CName).(stream.Service) + return consensusproto.DRPCRegisterConsensus(a.MustComponent(server.CName).(server.DRPCServer), c) +} + +func (c *consensusRpc) Name() (name string) { + return CName +} + +func (c *consensusRpc) AddLog(ctx context.Context, req *consensusproto.AddLogRequest) (*consensusproto.Ok, error) { + if err := c.db.AddLog(ctx, logFromProto(req.Log)); err != nil { + return nil, err + } + return &consensusproto.Ok{}, nil +} + +func (c *consensusRpc) AddRecord(ctx context.Context, req *consensusproto.AddRecordRequest) (*consensusproto.Ok, error) { + if err := c.db.AddRecord(ctx, req.LogId, recordFromProto(req.Record)); err != nil { + return nil, err + } + return &consensusproto.Ok{}, nil +} + +func (c *consensusRpc) WatchLog(req *consensusproto.WatchLogRequest, rpcStream consensusproto.DRPCConsensus_WatchLogStream) error { + stream, err := c.stream.Subscribe(rpcStream.Context(), req.LogId) + if err != nil { + return err + } + defer stream.Close() + var logSent bool + for { + if !logSent { + if err = rpcStream.Send(&consensusproto.WatchLogEvent{ + LogId: req.LogId, + Records: recordsToProto(stream.Records()), + }); err != nil { + return err + } + } else { + recs := stream.WaitRecords() + if len(recs) == 0 { + return rpcStream.Close() + } + if err = rpcStream.Send(&consensusproto.WatchLogEvent{ + LogId: req.LogId, + Records: recordsToProto(recs), + }); err != nil { + return err + } + } + } +} + +func logFromProto(log *consensusproto.Log) consensus.Log { + return consensus.Log{ + Id: log.Id, + Records: recordsFromProto(log.Records), + } +} + +func recordsFromProto(recs []*consensusproto.Record) []consensus.Record { + res := make([]consensus.Record, len(recs)) + for i, rec := range recs { + res[i] = recordFromProto(rec) + } + return res +} + +func recordFromProto(rec *consensusproto.Record) consensus.Record { + return consensus.Record{ + Id: rec.Id, + PrevId: rec.PrevId, + Payload: rec.Payload, + Created: time.Unix(int64(rec.CreatedUnix), 0), + } +} + +func recordsToProto(recs []consensus.Record) []*consensusproto.Record { + res := make([]*consensusproto.Record, len(recs)) + for i, rec := range recs { + res[i] = &consensusproto.Record{ + Id: rec.Id, + PrevId: rec.PrevId, + Payload: rec.Payload, + CreatedUnix: uint64(rec.Created.Unix()), + } + } + return res +} diff --git a/consensus/db/db.go b/consensus/db/db.go index 120d7be0..d0f2ad10 100644 --- a/consensus/db/db.go +++ b/consensus/db/db.go @@ -153,7 +153,7 @@ type streamResult struct { UpdateDescription struct { UpdateFields struct { Records []consensus.Record `bson:"records"` - } `bson:"updatedFields""` + } `bson:"updatedFields"` } `bson:"updateDescription"` } diff --git a/consensus/stream/object.go b/consensus/stream/object.go new file mode 100644 index 00000000..6f4f3d07 --- /dev/null +++ b/consensus/stream/object.go @@ -0,0 +1,68 @@ +package stream + +import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus" + "github.com/cheggaaa/mb/v2" + "sync" +) + +type object struct { + logId []byte + records []consensus.Record + + streams map[uint32]*stream + + lastStreamId uint32 + + mu sync.Mutex +} + +func (o *object) AddRecords(recs []consensus.Record) { + o.mu.Lock() + defer o.mu.Unlock() + + if len(recs) <= len(o.records) { + return + } + diff := recs[0 : len(recs)-len(o.records)] + o.records = recs + for _, st := range o.streams { + st.AddRecords(diff) + } +} + +func (o *object) Records() []consensus.Record { + o.mu.Lock() + defer o.mu.Unlock() + return o.records +} + +func (o *object) NewStream() Stream { + o.mu.Lock() + defer o.mu.Unlock() + o.lastStreamId++ + st := &stream{ + id: o.lastStreamId, + obj: o, + records: o.records, + mb: mb.New(consensus.Record{}, 100), + } + o.streams[st.id] = st + return st +} + +func (o *object) Locked() bool { + o.mu.Lock() + defer o.mu.Unlock() + return len(o.streams) > 0 +} + +func (o *object) removeStream(id uint32) { + o.mu.Lock() + defer o.mu.Unlock() + delete(o.streams, id) +} + +func (o *object) Close() (err error) { + return nil +} diff --git a/consensus/stream/service.go b/consensus/stream/service.go new file mode 100644 index 00000000..11c5bc42 --- /dev/null +++ b/consensus/stream/service.go @@ -0,0 +1,127 @@ +package stream + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/db" + "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/ocache" + "github.com/mr-tron/base58" + "go.uber.org/zap" + "time" +) + +const CName = "consensus.stream" + +var log = logger.NewNamed(CName) + +var ( + cacheTTL = time.Minute +) + +type ctxLog uint + +const ( + ctxLogKey ctxLog = 1 +) + +func New() Service { + return &service{} +} + +type Stream interface { + LogId() []byte + Records() []consensus.Record + WaitRecords() []consensus.Record + Close() +} + +type Service interface { + Subscribe(ctx context.Context, logId []byte) (stream Stream, err error) + app.ComponentRunnable +} + +type service struct { + db db.Service + cache ocache.OCache +} + +func (s *service) Init(a *app.App) (err error) { + s.db = a.MustComponent(db.CName).(db.Service) + s.cache = ocache.New(s.loadLog, + ocache.WithTTL(cacheTTL), + ocache.WithRefCounter(false), + ocache.WithLogger(log.Named("cache").Sugar()), + ) + + return s.db.SetChangeReceiver(s.receiveChange) +} + +func (s *service) Subscribe(ctx context.Context, logId []byte) (Stream, error) { + obj, err := s.getObject(ctx, logId) + if err != nil { + return nil, err + } + return obj.NewStream(), nil +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) Run(ctx context.Context) (err error) { + return nil +} + +func (s *service) loadLog(ctx context.Context, id string) (value ocache.Object, err error) { + if ctxLog := ctx.Value(ctxLogKey); ctxLog != nil { + return &object{ + logId: ctxLog.(consensus.Log).Id, + records: ctxLog.(consensus.Log).Records, + streams: make(map[uint32]*stream), + }, nil + } + logId := logIdFromString(id) + dbLog, err := s.db.FetchLog(ctx, logId) + if err != nil { + return nil, err + } + return &object{ + logId: dbLog.Id, + records: dbLog.Records, + streams: make(map[uint32]*stream), + }, nil +} + +func (s *service) receiveChange(logId []byte, records []consensus.Record) { + ctx := context.WithValue(context.Background(), ctxLogKey, consensus.Log{Id: logId, Records: records}) + obj, err := s.getObject(ctx, logId) + if err != nil { + log.Error("failed load object from cache", zap.Error(err)) + return + } + obj.AddRecords(records) +} + +func (s *service) getObject(ctx context.Context, logId []byte) (*object, error) { + id := logIdToString(logId) + cacheObj, err := s.cache.Get(ctx, id) + if err != nil { + return nil, err + } + return cacheObj.(*object), nil +} + +func (s *service) Close(ctx context.Context) (err error) { + return s.cache.Close() +} + +func logIdToString(logId []byte) string { + return base58.Encode(logId) +} + +func logIdFromString(s string) []byte { + logId, _ := base58.Decode(s) + return logId +} diff --git a/consensus/stream/service_test.go b/consensus/stream/service_test.go new file mode 100644 index 00000000..8acf865c --- /dev/null +++ b/consensus/stream/service_test.go @@ -0,0 +1,169 @@ +package stream + +import ( + "context" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/db" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "testing" + "time" +) + +var ctx = context.Background() + +func TestService_Subscribe(t *testing.T) { + fx := newFixture(t) + defer fx.Finish(t) + + var expLogId = []byte("logId") + + fx.mockDB.fetchLog = func(ctx context.Context, logId []byte) (log consensus.Log, err error) { + require.Equal(t, expLogId, logId) + return consensus.Log{ + Id: logId, + Records: []consensus.Record{ + { + Id: []byte{'1'}, + }, + }, + }, nil + } + + st1, err := fx.Subscribe(ctx, expLogId) + require.NoError(t, err) + require.Equal(t, expLogId, st1.LogId()) + sr1 := readStream(st1) + assert.Equal(t, uint32(1), sr1.id) + + st2, err := fx.Subscribe(ctx, expLogId) + require.NoError(t, err) + require.Equal(t, expLogId, st2.LogId()) + sr2 := readStream(st2) + assert.Equal(t, uint32(2), sr2.id) + + fx.mockDB.receiver(expLogId, []consensus.Record{ + { + Id: []byte{'1'}, + }, + }) + fx.mockDB.receiver([]byte("other id"), []consensus.Record{ + { + Id: []byte{'2'}, + PrevId: []byte{'1'}, + }, + { + Id: []byte{'1'}, + }, + }) + fx.mockDB.receiver(expLogId, []consensus.Record{ + { + Id: []byte{'2'}, + PrevId: []byte{'1'}, + }, + { + Id: []byte{'1'}, + }, + }) + st1.Close() + st2.Close() + + for _, sr := range []*streamReader{sr1, sr2} { + select { + case <-time.After(time.Second / 3): + require.False(t, true, "timeout") + case <-sr.finished: + } + } + + require.Equal(t, sr1.records, sr2.records) + require.Len(t, sr1.records, 1) + assert.Equal(t, []byte{'2'}, sr1.records[0].Id) +} + +func newFixture(t *testing.T) *fixture { + fx := &fixture{ + Service: New(), + mockDB: &mockDB{}, + a: new(app.App), + } + + fx.a.Register(fx.Service).Register(fx.mockDB) + require.NoError(t, fx.a.Start(ctx)) + return fx +} + +type fixture struct { + Service + mockDB *mockDB + a *app.App +} + +func (fx *fixture) Finish(t *testing.T) { + require.NoError(t, fx.a.Close(ctx)) +} + +func readStream(st Stream) *streamReader { + sr := &streamReader{ + id: st.(*stream).id, + stream: st, + finished: make(chan struct{}), + } + go sr.read() + return sr +} + +type streamReader struct { + id uint32 + stream Stream + + records []consensus.Record + finished chan struct{} +} + +func (sr *streamReader) read() { + defer close(sr.finished) + for { + records := sr.stream.WaitRecords() + if len(records) == 0 { + return + } + sr.records = append(sr.records, records...) + } +} + +type mockDB struct { + receiver db.ChangeReceiver + fetchLog func(ctx context.Context, logId []byte) (log consensus.Log, err error) +} + +func (m *mockDB) AddLog(ctx context.Context, log consensus.Log) (err error) { return nil } +func (m *mockDB) AddRecord(ctx context.Context, logId []byte, record consensus.Record) (err error) { + return nil +} + +func (m *mockDB) FetchLog(ctx context.Context, logId []byte) (log consensus.Log, err error) { + return m.fetchLog(ctx, logId) +} + +func (m *mockDB) SetChangeReceiver(receiver db.ChangeReceiver) (err error) { + m.receiver = receiver + return nil +} + +func (m *mockDB) Init(a *app.App) (err error) { + return nil +} + +func (m *mockDB) Name() (name string) { + return db.CName +} + +func (m *mockDB) Run(ctx context.Context) (err error) { + return +} + +func (m *mockDB) Close(ctx context.Context) (err error) { + return +} diff --git a/consensus/stream/stream.go b/consensus/stream/stream.go new file mode 100644 index 00000000..4f8f4b3e --- /dev/null +++ b/consensus/stream/stream.go @@ -0,0 +1,34 @@ +package stream + +import ( + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus" + "github.com/cheggaaa/mb/v2" +) + +type stream struct { + id uint32 + obj *object + records []consensus.Record + mb *mb.MB[consensus.Record] +} + +func (s *stream) LogId() []byte { + return s.obj.logId +} + +func (s *stream) AddRecords(records []consensus.Record) { + _ = s.mb.Add(records...) +} + +func (s *stream) Records() []consensus.Record { + return s.records +} + +func (s *stream) WaitRecords() []consensus.Record { + return s.mb.Wait() +} + +func (s *stream) Close() { + _ = s.mb.Close() + s.obj.removeStream(s.id) +} diff --git a/etc/configs/config1.yml b/etc/configs/config1.yml index 4885eab8..794ce8f9 100755 --- a/etc/configs/config1.yml +++ b/etc/configs/config1.yml @@ -5,20 +5,24 @@ grpcServer: - 127.0.0.1:4430 tls: false account: - peerId: 12D3KooWSUx2LXPvoZGp72Dt7b7r1kPSmQ6zAUwKkHFyX64uiXRu - signingKey: 4QTrtkFLQe9wQcWT/cgFEwfMHB5pt4axInNmCIMCZaz3nVdyygRoO8/YH0V15X6Mnw1NQWsS1YIWiLS22hwepA== - encryptionKey: MIIEpAIBAAKCAQEAmqAAOPfR86po3m+zwSzbAlZGgMMF188v35Ulqf9Gb4KO8DZ9ifxrqpjlLZRxPKeXj3wSSQEXsJf3A82rZlDxddZSM0i7Mx5G2G0zRHWx9dC58PpX6o/fDuvSwcyXqOgIK55N/hyEuIbWQgp5Rk9uy2Zbrhv5ZL5CvceM0b9wSKt/hRvntxSbG+HRgXWaQvAReGuJrySVvkh6fhC3G0IwqyFbGNq2zqAJej6NBzZA3thHgTn5PoWD8O4cyukBxunKGu3HLE3vJtqEMFrkNFw5SMpdEtxyTLN6T1HIeYCY9RL+BFYfxIWg6pGtIoIJKUB0XapJr9ltzvXfT9KeSCU0VwIDAQABAoIBAAp/xsQXf7gN4CUKbKg3RX+5H/xqQaFPvi5uUCpk3QGBWfdRm+CctSrWSul3ZOD7eD0T7aHrYxJonysw8ex2no6jyN0WmS91ZNYZRBvn6feI/rcwKHwS3NCEjsD+BWZAqx1bGGyivxhQf4fociemCR3ii2MdHygKCzobrKIpX5RvhanI4j01dyLlxwqTsteuc/o5RR4jfg1eN0kldFjk3UcSNyzzEv5o5UhRsHCLJBTNTvYZBN4FpyaqcLT9gKS9aVBvQH63R+E5dyxo1+24tZZricW59h2bN3CFriqkwBo1y0gTnR6VQ22MBvIUxYUm82cxXs/Vr0YQTSAaEGThxFECgYEAxKQMRnM39WMzrNx1WDwpBERRj1T0TbLf1uq6viPiLdik2Tm2aCBZyr5j82Ey7fZ7OafKGfsM0I2AuYeoBdYDuYN6A7tE9kpnECubnWuIvUeYcL+1VzzMedVtdKwQXrYbhqKtyvnSJ9gQ6CusHtsDE1bQvTMxBX4KNBeBYllCUasCgYEAyU0RPUaj56CyLHKty8jNg6wl+06IZ0pUPIWZ//b1zeZrlHGYDp/InxS8huGFapzOg1sbQBS6j3j3YE3Ts6v6FNuIa4pcPQ91YuHiWWQdgVjrCZdleanFWGTjIx12+RGj9vx4voRhNQcHW1YeTvvyj4BN/ECR6GNaoS/ZjBKo1AUCgYEAj6AyxxJJARagG9Y6b2QhoVg1Kjem6UmJbPStyUt0XIAsh+07afqXGxrM7mtEQ8MQZiBD4Y4Y4gs4xkprUzfqKIn7iNYznKDjflAbrXNpwLaWhWPBFCL4RtS4ycsTedoRaNlRjzvBYBDU6H9djHvzVyDF/itx1s0krr+sZSVE51kCgYBxGRinecna+KFCccgNp6s34H+Se2QNzGgZfOKyOjmOTniA9XV+Oe3I2yi1C34fESzCBm0ACuVqeIdcFz3rQ6OFFnbGHP2H3OiR/uFiYepl4uRjBimgOm9DI6Ot9f8DHxMlUGIygEPxPBq5CWCL9egpEeg+4rRXgYLI7w5mMZGjVQKBgQDC4qyH7FK3lLv5JomoK6nNjpyPNBmr0Rt215oM/AWQaxDhFZH5un68ueZ7MfybwXxHHFQ4ZeSwYs006f1XGPNW6qrH6pi/3SCLFuGVfNnLVwCBkm3QaQrxFm3v9LmVCidTNta0l0DrUldZdK8/P31GBxKo/MmYF/f9LO/Mfm/uDg== + peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck + signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== + encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== apiServer: port: "8080" nodes: - - peerId: 12D3KooWSUx2LXPvoZGp72Dt7b7r1kPSmQ6zAUwKkHFyX64uiXRu + - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck address: 127.0.0.1:4430 - signingKey: 4QTrtkFLQe9wQcWT/cgFEwfMHB5pt4axInNmCIMCZaz3nVdyygRoO8/YH0V15X6Mnw1NQWsS1YIWiLS22hwepA== - encryptionKey: MIIEpAIBAAKCAQEAmqAAOPfR86po3m+zwSzbAlZGgMMF188v35Ulqf9Gb4KO8DZ9ifxrqpjlLZRxPKeXj3wSSQEXsJf3A82rZlDxddZSM0i7Mx5G2G0zRHWx9dC58PpX6o/fDuvSwcyXqOgIK55N/hyEuIbWQgp5Rk9uy2Zbrhv5ZL5CvceM0b9wSKt/hRvntxSbG+HRgXWaQvAReGuJrySVvkh6fhC3G0IwqyFbGNq2zqAJej6NBzZA3thHgTn5PoWD8O4cyukBxunKGu3HLE3vJtqEMFrkNFw5SMpdEtxyTLN6T1HIeYCY9RL+BFYfxIWg6pGtIoIJKUB0XapJr9ltzvXfT9KeSCU0VwIDAQABAoIBAAp/xsQXf7gN4CUKbKg3RX+5H/xqQaFPvi5uUCpk3QGBWfdRm+CctSrWSul3ZOD7eD0T7aHrYxJonysw8ex2no6jyN0WmS91ZNYZRBvn6feI/rcwKHwS3NCEjsD+BWZAqx1bGGyivxhQf4fociemCR3ii2MdHygKCzobrKIpX5RvhanI4j01dyLlxwqTsteuc/o5RR4jfg1eN0kldFjk3UcSNyzzEv5o5UhRsHCLJBTNTvYZBN4FpyaqcLT9gKS9aVBvQH63R+E5dyxo1+24tZZricW59h2bN3CFriqkwBo1y0gTnR6VQ22MBvIUxYUm82cxXs/Vr0YQTSAaEGThxFECgYEAxKQMRnM39WMzrNx1WDwpBERRj1T0TbLf1uq6viPiLdik2Tm2aCBZyr5j82Ey7fZ7OafKGfsM0I2AuYeoBdYDuYN6A7tE9kpnECubnWuIvUeYcL+1VzzMedVtdKwQXrYbhqKtyvnSJ9gQ6CusHtsDE1bQvTMxBX4KNBeBYllCUasCgYEAyU0RPUaj56CyLHKty8jNg6wl+06IZ0pUPIWZ//b1zeZrlHGYDp/InxS8huGFapzOg1sbQBS6j3j3YE3Ts6v6FNuIa4pcPQ91YuHiWWQdgVjrCZdleanFWGTjIx12+RGj9vx4voRhNQcHW1YeTvvyj4BN/ECR6GNaoS/ZjBKo1AUCgYEAj6AyxxJJARagG9Y6b2QhoVg1Kjem6UmJbPStyUt0XIAsh+07afqXGxrM7mtEQ8MQZiBD4Y4Y4gs4xkprUzfqKIn7iNYznKDjflAbrXNpwLaWhWPBFCL4RtS4ycsTedoRaNlRjzvBYBDU6H9djHvzVyDF/itx1s0krr+sZSVE51kCgYBxGRinecna+KFCccgNp6s34H+Se2QNzGgZfOKyOjmOTniA9XV+Oe3I2yi1C34fESzCBm0ACuVqeIdcFz3rQ6OFFnbGHP2H3OiR/uFiYepl4uRjBimgOm9DI6Ot9f8DHxMlUGIygEPxPBq5CWCL9egpEeg+4rRXgYLI7w5mMZGjVQKBgQDC4qyH7FK3lLv5JomoK6nNjpyPNBmr0Rt215oM/AWQaxDhFZH5un68ueZ7MfybwXxHHFQ4ZeSwYs006f1XGPNW6qrH6pi/3SCLFuGVfNnLVwCBkm3QaQrxFm3v9LmVCidTNta0l0DrUldZdK8/P31GBxKo/MmYF/f9LO/Mfm/uDg== - - peerId: 12D3KooWFnz9fYCxHAnf2rvPQ7iPZcCprEqyN8kCtVQfN2K1TfqK + signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== + encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== + - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB address: 127.0.0.1:4431 - signingKey: IM0BTVQf4LKMUVRTAHxbBXmdz656+G2ssw4WdLc30pRYy6TsVVdh+n03pKXSCdg665tM/9AjQRCbzgvDf9riWg== - encryptionKey: MIIEpAIBAAKCAQEAm0HILjO7GRYYb0AvESmxdaj6ruIcSHEQIyqhPbfXZSmJNo9wIq89SaYYL4ZTwrF+ykPDJcBA8SjNHGXBPhZY+ejwCDzDyyv42FMs5lKw+/x94Yg++W72sxawtCLVi0RVY1g4UxOlCgAxl3YC9mVYoqQveXN3EsDd0YNK9fWiWP/Xl3KaJ4ErsfW3LZS9rD36dgDsKr9GqeVQf7lGkCkDmivCwHn3uaN/uzHaWvaZ7e7QWE/36vTmMsllTvi0Q9Y+v+HB5isIX9Jve1QmCS//DbDl9IMGdmyg/jlBs63Nk86Qwlw8ft3ttTWNldTpvD4Ycbgj3l59jT4rIvFJ88+5UwIDAQABAoIBAFfUn/1bMIYhlNMi+T15W7YXUTGsIpnstFdgn3T90rGdDM272ZEVl9NZTidck3f516NvMC/kEhkbnuVovyhzlgRS/a97SLxgdNdUPntR3mO/VCtJW27akl9//5j4d9vgXXnlB4AgBeahc2yey1A+xyTDQ0QuyPbn+tSytK5uNlioCeAqH4ruWxcg4t8MnwNQEOsnchrYHfXqJG+XxGn7m60U4oclbObGfxWxYZ85I0B6M5PW71VLkj/eKTvRJcW5ShDKLG5meiUM3KtwUdFRzv9Xi4aB9eTwEQ8ZV18KVmIF7baBy5anWDfGO4O9MvFSMmbMCe3EkrGaEaCp/gXenhkCgYEAw57dj7ewVHIAQxcNZ9SPRUNAY8g9yEYQ//30yTcpUjsGlqGNzua2OvALGL2ntFY304X9Iego+7Tzxs3T0x2FQ1N33NhoxwRcMqBdksMqmCb8Bm8UvnFIuvmsfPGkkzwa/8xNH81GZiz0p9zfi4lSKdZRfTQ4lBqvogExdnalSd0CgYEAyy2Mw4eeJQ0Y6QX3nad2/06oxWiS3++CITI6dAqiepAB6V7lnP90NKfLgzJcCJwzKlMhoVv7Lu4bDCXbvQ03ba+Dl+To8Jf5/9di8j8OfllqDWPnbqyueTHu5CUk+A2Gz3RhjmMXHpVgbFkUJTkJ1RDWPImNq0KzTYQ+ZwU8lO8CgYEAo1/0zuisnXowedew3HyLw17tUeiUoMTTwdiJLduh6Qle8UKvupK4svRzcBBFFbnEGiaXSFAqmj2AMxMHzBOljpsRSiJ7L2uWzLleLQpOcpBsf7sZ6guWoIGQ6zCtMEJMkkJAT0UTfJYjJmazVEg1lLdni1enwRmggX7ZnoRsewkCgYB2SpLF1FOSpsl2Ae9kbnettRI1vOimUD+nLCM0JGzshqNWR9XPTjtN3NN0EwHaUXbIkZXm6DKZ5C8DJ5eDvgojZihrau7kBNecyL3m5CeAEHbaTOwVV5xNG3FGiwm3EckHR271A2QWfkmhS0ubUFYVIrRYko1UxIS4AOKEAFyBKQKBgQCfIsGy4wOqRsKLzbun6fIVSz8X+sS3HclD7UZ6WKanOYyWZ420qnhLnfdDcNQjF/ApbzHdfwwTKVJSaZiK23kmReUVB9Cq2YAHMJYlp0ErgPzZstrRiRidtzJHm93owWc7GZinzd1M8EOYUSJ3+t8EZXZlbsD/oCTbX/BGqolo2w== + signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== + encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= + - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu + address: 127.0.0.1:4432 + signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== + encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/config2.yml b/etc/configs/config2.yml index 5e1eaadb..51c733ca 100755 --- a/etc/configs/config2.yml +++ b/etc/configs/config2.yml @@ -5,20 +5,24 @@ grpcServer: - 127.0.0.1:4431 tls: false account: - peerId: 12D3KooWFnz9fYCxHAnf2rvPQ7iPZcCprEqyN8kCtVQfN2K1TfqK - signingKey: IM0BTVQf4LKMUVRTAHxbBXmdz656+G2ssw4WdLc30pRYy6TsVVdh+n03pKXSCdg665tM/9AjQRCbzgvDf9riWg== - encryptionKey: MIIEpAIBAAKCAQEAm0HILjO7GRYYb0AvESmxdaj6ruIcSHEQIyqhPbfXZSmJNo9wIq89SaYYL4ZTwrF+ykPDJcBA8SjNHGXBPhZY+ejwCDzDyyv42FMs5lKw+/x94Yg++W72sxawtCLVi0RVY1g4UxOlCgAxl3YC9mVYoqQveXN3EsDd0YNK9fWiWP/Xl3KaJ4ErsfW3LZS9rD36dgDsKr9GqeVQf7lGkCkDmivCwHn3uaN/uzHaWvaZ7e7QWE/36vTmMsllTvi0Q9Y+v+HB5isIX9Jve1QmCS//DbDl9IMGdmyg/jlBs63Nk86Qwlw8ft3ttTWNldTpvD4Ycbgj3l59jT4rIvFJ88+5UwIDAQABAoIBAFfUn/1bMIYhlNMi+T15W7YXUTGsIpnstFdgn3T90rGdDM272ZEVl9NZTidck3f516NvMC/kEhkbnuVovyhzlgRS/a97SLxgdNdUPntR3mO/VCtJW27akl9//5j4d9vgXXnlB4AgBeahc2yey1A+xyTDQ0QuyPbn+tSytK5uNlioCeAqH4ruWxcg4t8MnwNQEOsnchrYHfXqJG+XxGn7m60U4oclbObGfxWxYZ85I0B6M5PW71VLkj/eKTvRJcW5ShDKLG5meiUM3KtwUdFRzv9Xi4aB9eTwEQ8ZV18KVmIF7baBy5anWDfGO4O9MvFSMmbMCe3EkrGaEaCp/gXenhkCgYEAw57dj7ewVHIAQxcNZ9SPRUNAY8g9yEYQ//30yTcpUjsGlqGNzua2OvALGL2ntFY304X9Iego+7Tzxs3T0x2FQ1N33NhoxwRcMqBdksMqmCb8Bm8UvnFIuvmsfPGkkzwa/8xNH81GZiz0p9zfi4lSKdZRfTQ4lBqvogExdnalSd0CgYEAyy2Mw4eeJQ0Y6QX3nad2/06oxWiS3++CITI6dAqiepAB6V7lnP90NKfLgzJcCJwzKlMhoVv7Lu4bDCXbvQ03ba+Dl+To8Jf5/9di8j8OfllqDWPnbqyueTHu5CUk+A2Gz3RhjmMXHpVgbFkUJTkJ1RDWPImNq0KzTYQ+ZwU8lO8CgYEAo1/0zuisnXowedew3HyLw17tUeiUoMTTwdiJLduh6Qle8UKvupK4svRzcBBFFbnEGiaXSFAqmj2AMxMHzBOljpsRSiJ7L2uWzLleLQpOcpBsf7sZ6guWoIGQ6zCtMEJMkkJAT0UTfJYjJmazVEg1lLdni1enwRmggX7ZnoRsewkCgYB2SpLF1FOSpsl2Ae9kbnettRI1vOimUD+nLCM0JGzshqNWR9XPTjtN3NN0EwHaUXbIkZXm6DKZ5C8DJ5eDvgojZihrau7kBNecyL3m5CeAEHbaTOwVV5xNG3FGiwm3EckHR271A2QWfkmhS0ubUFYVIrRYko1UxIS4AOKEAFyBKQKBgQCfIsGy4wOqRsKLzbun6fIVSz8X+sS3HclD7UZ6WKanOYyWZ420qnhLnfdDcNQjF/ApbzHdfwwTKVJSaZiK23kmReUVB9Cq2YAHMJYlp0ErgPzZstrRiRidtzJHm93owWc7GZinzd1M8EOYUSJ3+t8EZXZlbsD/oCTbX/BGqolo2w== + peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB + signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== + encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= apiServer: port: "8081" nodes: - - peerId: 12D3KooWSUx2LXPvoZGp72Dt7b7r1kPSmQ6zAUwKkHFyX64uiXRu + - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck address: 127.0.0.1:4430 - signingKey: 4QTrtkFLQe9wQcWT/cgFEwfMHB5pt4axInNmCIMCZaz3nVdyygRoO8/YH0V15X6Mnw1NQWsS1YIWiLS22hwepA== - encryptionKey: MIIEpAIBAAKCAQEAmqAAOPfR86po3m+zwSzbAlZGgMMF188v35Ulqf9Gb4KO8DZ9ifxrqpjlLZRxPKeXj3wSSQEXsJf3A82rZlDxddZSM0i7Mx5G2G0zRHWx9dC58PpX6o/fDuvSwcyXqOgIK55N/hyEuIbWQgp5Rk9uy2Zbrhv5ZL5CvceM0b9wSKt/hRvntxSbG+HRgXWaQvAReGuJrySVvkh6fhC3G0IwqyFbGNq2zqAJej6NBzZA3thHgTn5PoWD8O4cyukBxunKGu3HLE3vJtqEMFrkNFw5SMpdEtxyTLN6T1HIeYCY9RL+BFYfxIWg6pGtIoIJKUB0XapJr9ltzvXfT9KeSCU0VwIDAQABAoIBAAp/xsQXf7gN4CUKbKg3RX+5H/xqQaFPvi5uUCpk3QGBWfdRm+CctSrWSul3ZOD7eD0T7aHrYxJonysw8ex2no6jyN0WmS91ZNYZRBvn6feI/rcwKHwS3NCEjsD+BWZAqx1bGGyivxhQf4fociemCR3ii2MdHygKCzobrKIpX5RvhanI4j01dyLlxwqTsteuc/o5RR4jfg1eN0kldFjk3UcSNyzzEv5o5UhRsHCLJBTNTvYZBN4FpyaqcLT9gKS9aVBvQH63R+E5dyxo1+24tZZricW59h2bN3CFriqkwBo1y0gTnR6VQ22MBvIUxYUm82cxXs/Vr0YQTSAaEGThxFECgYEAxKQMRnM39WMzrNx1WDwpBERRj1T0TbLf1uq6viPiLdik2Tm2aCBZyr5j82Ey7fZ7OafKGfsM0I2AuYeoBdYDuYN6A7tE9kpnECubnWuIvUeYcL+1VzzMedVtdKwQXrYbhqKtyvnSJ9gQ6CusHtsDE1bQvTMxBX4KNBeBYllCUasCgYEAyU0RPUaj56CyLHKty8jNg6wl+06IZ0pUPIWZ//b1zeZrlHGYDp/InxS8huGFapzOg1sbQBS6j3j3YE3Ts6v6FNuIa4pcPQ91YuHiWWQdgVjrCZdleanFWGTjIx12+RGj9vx4voRhNQcHW1YeTvvyj4BN/ECR6GNaoS/ZjBKo1AUCgYEAj6AyxxJJARagG9Y6b2QhoVg1Kjem6UmJbPStyUt0XIAsh+07afqXGxrM7mtEQ8MQZiBD4Y4Y4gs4xkprUzfqKIn7iNYznKDjflAbrXNpwLaWhWPBFCL4RtS4ycsTedoRaNlRjzvBYBDU6H9djHvzVyDF/itx1s0krr+sZSVE51kCgYBxGRinecna+KFCccgNp6s34H+Se2QNzGgZfOKyOjmOTniA9XV+Oe3I2yi1C34fESzCBm0ACuVqeIdcFz3rQ6OFFnbGHP2H3OiR/uFiYepl4uRjBimgOm9DI6Ot9f8DHxMlUGIygEPxPBq5CWCL9egpEeg+4rRXgYLI7w5mMZGjVQKBgQDC4qyH7FK3lLv5JomoK6nNjpyPNBmr0Rt215oM/AWQaxDhFZH5un68ueZ7MfybwXxHHFQ4ZeSwYs006f1XGPNW6qrH6pi/3SCLFuGVfNnLVwCBkm3QaQrxFm3v9LmVCidTNta0l0DrUldZdK8/P31GBxKo/MmYF/f9LO/Mfm/uDg== - - peerId: 12D3KooWFnz9fYCxHAnf2rvPQ7iPZcCprEqyN8kCtVQfN2K1TfqK + signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== + encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== + - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB address: 127.0.0.1:4431 - signingKey: IM0BTVQf4LKMUVRTAHxbBXmdz656+G2ssw4WdLc30pRYy6TsVVdh+n03pKXSCdg665tM/9AjQRCbzgvDf9riWg== - encryptionKey: MIIEpAIBAAKCAQEAm0HILjO7GRYYb0AvESmxdaj6ruIcSHEQIyqhPbfXZSmJNo9wIq89SaYYL4ZTwrF+ykPDJcBA8SjNHGXBPhZY+ejwCDzDyyv42FMs5lKw+/x94Yg++W72sxawtCLVi0RVY1g4UxOlCgAxl3YC9mVYoqQveXN3EsDd0YNK9fWiWP/Xl3KaJ4ErsfW3LZS9rD36dgDsKr9GqeVQf7lGkCkDmivCwHn3uaN/uzHaWvaZ7e7QWE/36vTmMsllTvi0Q9Y+v+HB5isIX9Jve1QmCS//DbDl9IMGdmyg/jlBs63Nk86Qwlw8ft3ttTWNldTpvD4Ycbgj3l59jT4rIvFJ88+5UwIDAQABAoIBAFfUn/1bMIYhlNMi+T15W7YXUTGsIpnstFdgn3T90rGdDM272ZEVl9NZTidck3f516NvMC/kEhkbnuVovyhzlgRS/a97SLxgdNdUPntR3mO/VCtJW27akl9//5j4d9vgXXnlB4AgBeahc2yey1A+xyTDQ0QuyPbn+tSytK5uNlioCeAqH4ruWxcg4t8MnwNQEOsnchrYHfXqJG+XxGn7m60U4oclbObGfxWxYZ85I0B6M5PW71VLkj/eKTvRJcW5ShDKLG5meiUM3KtwUdFRzv9Xi4aB9eTwEQ8ZV18KVmIF7baBy5anWDfGO4O9MvFSMmbMCe3EkrGaEaCp/gXenhkCgYEAw57dj7ewVHIAQxcNZ9SPRUNAY8g9yEYQ//30yTcpUjsGlqGNzua2OvALGL2ntFY304X9Iego+7Tzxs3T0x2FQ1N33NhoxwRcMqBdksMqmCb8Bm8UvnFIuvmsfPGkkzwa/8xNH81GZiz0p9zfi4lSKdZRfTQ4lBqvogExdnalSd0CgYEAyy2Mw4eeJQ0Y6QX3nad2/06oxWiS3++CITI6dAqiepAB6V7lnP90NKfLgzJcCJwzKlMhoVv7Lu4bDCXbvQ03ba+Dl+To8Jf5/9di8j8OfllqDWPnbqyueTHu5CUk+A2Gz3RhjmMXHpVgbFkUJTkJ1RDWPImNq0KzTYQ+ZwU8lO8CgYEAo1/0zuisnXowedew3HyLw17tUeiUoMTTwdiJLduh6Qle8UKvupK4svRzcBBFFbnEGiaXSFAqmj2AMxMHzBOljpsRSiJ7L2uWzLleLQpOcpBsf7sZ6guWoIGQ6zCtMEJMkkJAT0UTfJYjJmazVEg1lLdni1enwRmggX7ZnoRsewkCgYB2SpLF1FOSpsl2Ae9kbnettRI1vOimUD+nLCM0JGzshqNWR9XPTjtN3NN0EwHaUXbIkZXm6DKZ5C8DJ5eDvgojZihrau7kBNecyL3m5CeAEHbaTOwVV5xNG3FGiwm3EckHR271A2QWfkmhS0ubUFYVIrRYko1UxIS4AOKEAFyBKQKBgQCfIsGy4wOqRsKLzbun6fIVSz8X+sS3HclD7UZ6WKanOYyWZ420qnhLnfdDcNQjF/ApbzHdfwwTKVJSaZiK23kmReUVB9Cq2YAHMJYlp0ErgPzZstrRiRidtzJHm93owWc7GZinzd1M8EOYUSJ3+t8EZXZlbsD/oCTbX/BGqolo2w== + signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== + encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= + - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu + address: 127.0.0.1:4432 + signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== + encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw space: gcTTL: 60 syncPeriod: 10 diff --git a/etc/configs/config3.yml b/etc/configs/config3.yml new file mode 100755 index 00000000..a8c0e426 --- /dev/null +++ b/etc/configs/config3.yml @@ -0,0 +1,28 @@ +anytype: + swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec +grpcServer: + listenAddrs: + - 127.0.0.1:4432 + tls: false +account: + peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu + signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== + encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw +apiServer: + port: "8082" +nodes: + - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck + address: 127.0.0.1:4430 + signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== + encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== + - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB + address: 127.0.0.1:4431 + signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== + encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= + - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu + address: 127.0.0.1:4432 + signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== + encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw +space: + gcTTL: 60 + syncPeriod: 10 diff --git a/etc/configs/cons/config1.yml b/etc/configs/cons/config1.yml new file mode 100755 index 00000000..1b9e053f --- /dev/null +++ b/etc/configs/cons/config1.yml @@ -0,0 +1,32 @@ +anytype: + swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec +grpcServer: + listenAddrs: + - 127.0.0.1:4530 + tls: false +account: + peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck + signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== + encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== +apiServer: + port: "8080" +nodes: + - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck + address: 127.0.0.1:4530 + signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== + encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== + - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB + address: 127.0.0.1:4531 + signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== + encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= + - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu + address: 127.0.0.1:4532 + signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== + encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw +space: + gcTTL: 60 + syncPeriod: 10 +mongo: + connect: "mongodb://localhost:27017/?w=majority" + database: "consensus" + collection: "log" diff --git a/etc/configs/cons/config2.yml b/etc/configs/cons/config2.yml new file mode 100755 index 00000000..e6ae09e4 --- /dev/null +++ b/etc/configs/cons/config2.yml @@ -0,0 +1,32 @@ +anytype: + swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec +grpcServer: + listenAddrs: + - 127.0.0.1:4531 + tls: false +account: + peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB + signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== + encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= +apiServer: + port: "8081" +nodes: + - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck + address: 127.0.0.1:4530 + signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== + encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== + - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB + address: 127.0.0.1:4531 + signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== + encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= + - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu + address: 127.0.0.1:4532 + signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== + encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw +space: + gcTTL: 60 + syncPeriod: 10 +mongo: + connect: "mongodb://localhost:27017/?w=majority" + database: "consensus" + collection: "log" diff --git a/etc/configs/cons/config3.yml b/etc/configs/cons/config3.yml new file mode 100755 index 00000000..df015573 --- /dev/null +++ b/etc/configs/cons/config3.yml @@ -0,0 +1,32 @@ +anytype: + swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec +grpcServer: + listenAddrs: + - 127.0.0.1:4532 + tls: false +account: + peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu + signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== + encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw +apiServer: + port: "8082" +nodes: + - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck + address: 127.0.0.1:4530 + signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== + encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== + - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB + address: 127.0.0.1:4531 + signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== + encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= + - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu + address: 127.0.0.1:4532 + signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== + encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw +space: + gcTTL: 60 + syncPeriod: 10 +mongo: + connect: "mongodb://localhost:27017/?w=majority" + database: "consensus" + collection: "log" \ No newline at end of file diff --git a/etc/consensus-node.yml b/etc/consensus-node.yml new file mode 100644 index 00000000..041c1c14 --- /dev/null +++ b/etc/consensus-node.yml @@ -0,0 +1,11 @@ +rpcServer: + listenAddrs: + - 127.0.0.1:4530 +account: + peerId: 12D3KooWSUx2LXPvoZGp72Dt7b7r1kPSmQ6zAUwKkHFyX64uiXRu + signingKey: 4QTrtkFLQe9wQcWT/cgFEwfMHB5pt4axInNmCIMCZaz3nVdyygRoO8/YH0V15X6Mnw1NQWsS1YIWiLS22hwepA== + encryptionKey: MIIEpAIBAAKCAQEAmqAAOPfR86po3m+zwSzbAlZGgMMF188v35Ulqf9Gb4KO8DZ9ifxrqpjlLZRxPKeXj3wSSQEXsJf3A82rZlDxddZSM0i7Mx5G2G0zRHWx9dC58PpX6o/fDuvSwcyXqOgIK55N/hyEuIbWQgp5Rk9uy2Zbrhv5ZL5CvceM0b9wSKt/hRvntxSbG+HRgXWaQvAReGuJrySVvkh6fhC3G0IwqyFbGNq2zqAJej6NBzZA3thHgTn5PoWD8O4cyukBxunKGu3HLE3vJtqEMFrkNFw5SMpdEtxyTLN6T1HIeYCY9RL+BFYfxIWg6pGtIoIJKUB0XapJr9ltzvXfT9KeSCU0VwIDAQABAoIBAAp/xsQXf7gN4CUKbKg3RX+5H/xqQaFPvi5uUCpk3QGBWfdRm+CctSrWSul3ZOD7eD0T7aHrYxJonysw8ex2no6jyN0WmS91ZNYZRBvn6feI/rcwKHwS3NCEjsD+BWZAqx1bGGyivxhQf4fociemCR3ii2MdHygKCzobrKIpX5RvhanI4j01dyLlxwqTsteuc/o5RR4jfg1eN0kldFjk3UcSNyzzEv5o5UhRsHCLJBTNTvYZBN4FpyaqcLT9gKS9aVBvQH63R+E5dyxo1+24tZZricW59h2bN3CFriqkwBo1y0gTnR6VQ22MBvIUxYUm82cxXs/Vr0YQTSAaEGThxFECgYEAxKQMRnM39WMzrNx1WDwpBERRj1T0TbLf1uq6viPiLdik2Tm2aCBZyr5j82Ey7fZ7OafKGfsM0I2AuYeoBdYDuYN6A7tE9kpnECubnWuIvUeYcL+1VzzMedVtdKwQXrYbhqKtyvnSJ9gQ6CusHtsDE1bQvTMxBX4KNBeBYllCUasCgYEAyU0RPUaj56CyLHKty8jNg6wl+06IZ0pUPIWZ//b1zeZrlHGYDp/InxS8huGFapzOg1sbQBS6j3j3YE3Ts6v6FNuIa4pcPQ91YuHiWWQdgVjrCZdleanFWGTjIx12+RGj9vx4voRhNQcHW1YeTvvyj4BN/ECR6GNaoS/ZjBKo1AUCgYEAj6AyxxJJARagG9Y6b2QhoVg1Kjem6UmJbPStyUt0XIAsh+07afqXGxrM7mtEQ8MQZiBD4Y4Y4gs4xkprUzfqKIn7iNYznKDjflAbrXNpwLaWhWPBFCL4RtS4ycsTedoRaNlRjzvBYBDU6H9djHvzVyDF/itx1s0krr+sZSVE51kCgYBxGRinecna+KFCccgNp6s34H+Se2QNzGgZfOKyOjmOTniA9XV+Oe3I2yi1C34fESzCBm0ACuVqeIdcFz3rQ6OFFnbGHP2H3OiR/uFiYepl4uRjBimgOm9DI6Ot9f8DHxMlUGIygEPxPBq5CWCL9egpEeg+4rRXgYLI7w5mMZGjVQKBgQDC4qyH7FK3lLv5JomoK6nNjpyPNBmr0Rt215oM/AWQaxDhFZH5un68ueZ7MfybwXxHHFQ4ZeSwYs006f1XGPNW6qrH6pi/3SCLFuGVfNnLVwCBkm3QaQrxFm3v9LmVCidTNta0l0DrUldZdK8/P31GBxKo/MmYF/f9LO/Mfm/uDg== +mongo: + connect: "mongodb://localhost:27017/?w=majority" + database: "consensus" + collection: "log" \ No newline at end of file diff --git a/go.mod b/go.mod index a71e82d4..17ad3f10 100644 --- a/go.mod +++ b/go.mod @@ -30,6 +30,7 @@ require ( github.com/btcsuite/btcd v0.22.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.1.3 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect + github.com/cheggaaa/mb/v2 v2.0.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/fogleman/gg v1.3.0 // indirect diff --git a/go.sum b/go.sum index fd2783ce..bf139393 100644 --- a/go.sum +++ b/go.sum @@ -15,6 +15,10 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cheggaaa/mb v1.0.3 h1:03ksWum+6kHclB+kjwKMaBtgl5gtNYUwNpxsHQciKe8= +github.com/cheggaaa/mb v1.0.3/go.mod h1:NUl0GBtFLlfg2o6iZwxzcG7Lslc2wV/ADTFbLXtVPE4= +github.com/cheggaaa/mb/v2 v2.0.1 h1:gn0khbEbKlw3i5VOYi0VnHEHayjZKfUDOyGSpHAybBs= +github.com/cheggaaa/mb/v2 v2.0.1/go.mod h1:XGeZw20Iqgjky26KL0mvCwk3+4NyZCUbshSo6ALne+c= github.com/corona10/goimagehash v1.0.2 h1:pUfB0LnsJASMPGEZLj7tGY251vF+qLGqOgEP4rUs6kA= github.com/corona10/goimagehash v1.0.2/go.mod h1:/l9umBhvcHQXVtQO1V6Gp1yD20STawkhRnnX0D1bvVI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/node/account/service.go b/node/account/service.go index f9f7a6a2..3181f9bd 100644 --- a/node/account/service.go +++ b/node/account/service.go @@ -24,8 +24,7 @@ func New() app.Component { } func (s *service) Init(a *app.App) (err error) { - cfg := a.MustComponent(config.CName).(*config.Config) - acc := cfg.Account + acc := a.MustComponent(config.CName).(commonaccount.ConfigGetter).GetAccount() decodedEncryptionKey, err := keys.DecodeKeyFromString( acc.EncryptionKey, From 9f902bfbe968fa76049cf73351bdad90b50b46ab Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Tue, 4 Oct 2022 16:36:11 +0300 Subject: [PATCH 3/6] nodesgen consensus configs --- cmd/nodesgen/gen.go | 88 ++++++++++++++++++++++++++--- cmd/nodesgen/nodemap.yml | 7 +++ config/nodes.go | 5 +- consensus/consensusclient/client.go | 12 ++++ etc/configs/config1.yml | 28 --------- etc/configs/config2.yml | 28 --------- etc/configs/config3.yml | 28 --------- etc/configs/cons/config1.yml | 32 ----------- etc/configs/cons/config2.yml | 32 ----------- etc/configs/cons/config3.yml | 32 ----------- etc/configs/cons1.yml | 12 ++++ etc/configs/cons2.yml | 12 ++++ etc/configs/cons3.yml | 12 ++++ etc/configs/node1.yml | 31 ++++++++++ etc/configs/node2.yml | 31 ++++++++++ etc/configs/node3.yml | 31 ++++++++++ 16 files changed, 232 insertions(+), 189 deletions(-) create mode 100644 consensus/consensusclient/client.go delete mode 100755 etc/configs/config1.yml delete mode 100755 etc/configs/config2.yml delete mode 100755 etc/configs/config3.yml delete mode 100755 etc/configs/cons/config1.yml delete mode 100755 etc/configs/cons/config2.yml delete mode 100755 etc/configs/cons/config3.yml create mode 100755 etc/configs/cons1.yml create mode 100755 etc/configs/cons2.yml create mode 100755 etc/configs/cons3.yml create mode 100755 etc/configs/node1.yml create mode 100755 etc/configs/node2.yml create mode 100755 etc/configs/node3.yml diff --git a/cmd/nodesgen/gen.go b/cmd/nodesgen/gen.go index 2eddeab6..5dcb42fa 100644 --- a/cmd/nodesgen/gen.go +++ b/cmd/nodesgen/gen.go @@ -4,6 +4,7 @@ import ( "flag" "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/config" + cconfig "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey" @@ -23,6 +24,9 @@ type NodesMap struct { Addresses []string `yaml:"grpcAddresses"` APIPort string `yaml:"apiPort"` } `yaml:"nodes"` + Consensus []struct { + Addresses []string `yaml:"grpcAddresses"` + } } func main() { @@ -41,17 +45,31 @@ func main() { var configs []config.Config var nodes []config.Node for _, n := range nodesMap.Nodes { - cfg, err := genConfig(n.Addresses, n.APIPort) + cfg, err := genNodeConfig(n.Addresses, n.APIPort) if err != nil { panic(fmt.Sprintf("could not generate the config file: %s", err.Error())) } configs = append(configs, cfg) node := config.Node{ - PeerId: cfg.Account.PeerId, - Address: cfg.GrpcServer.ListenAddrs[0], - SigningKey: cfg.Account.SigningKey, - EncryptionKey: cfg.Account.EncryptionKey, + PeerId: cfg.Account.PeerId, + Address: cfg.GrpcServer.ListenAddrs[0], + } + nodes = append(nodes, node) + } + + var consConfigs []cconfig.Config + for _, n := range nodesMap.Consensus { + cfg, err := genConsensusConfig(n.Addresses) + if err != nil { + panic(fmt.Sprintf("could not generate the config file: %s", err.Error())) + } + consConfigs = append(consConfigs, cfg) + + node := config.Node{ + PeerId: cfg.Account.PeerId, + Address: cfg.GrpcServer.ListenAddrs[0], + IsConsensus: true, } nodes = append(nodes, node) } @@ -77,7 +95,19 @@ func main() { createDir() } for idx, cfg := range configs { - path := fmt.Sprintf("%s/config%d.yml", configsPath, idx+1) + path := fmt.Sprintf("%s/node%d.yml", configsPath, idx+1) + bytes, err := yaml.Marshal(cfg) + if err != nil { + panic(fmt.Sprintf("could not marshal the keys: %v", err)) + } + + err = os.WriteFile(path, bytes, os.ModePerm) + if err != nil { + panic(fmt.Sprintf("could not write the config to file: %v", err)) + } + } + for idx, cfg := range consConfigs { + path := fmt.Sprintf("%s/cons%d.yml", configsPath, idx+1) bytes, err := yaml.Marshal(cfg) if err != nil { panic(fmt.Sprintf("could not marshal the keys: %v", err)) @@ -90,7 +120,7 @@ func main() { } } -func genConfig(addresses []string, apiPort string) (config.Config, error) { +func genNodeConfig(addresses []string, apiPort string) (config.Config, error) { encKey, _, err := encryptionkey.GenerateRandomRSAKeyPair(2048) if err != nil { return config.Config{}, err @@ -136,3 +166,47 @@ func genConfig(addresses []string, apiPort string) (config.Config, error) { }, }, nil } + +func genConsensusConfig(addresses []string) (cconfig.Config, error) { + encKey, _, err := encryptionkey.GenerateRandomRSAKeyPair(2048) + if err != nil { + return cconfig.Config{}, err + } + + signKey, _, err := signingkey.GenerateRandomEd25519KeyPair() + if err != nil { + return cconfig.Config{}, err + } + + encEncKey, err := keys.EncodeKeyToString(encKey) + if err != nil { + return cconfig.Config{}, err + } + + encSignKey, err := keys.EncodeKeyToString(signKey) + if err != nil { + return cconfig.Config{}, err + } + + peerID, err := peer.IDFromSigningPubKey(signKey.GetPublic()) + if err != nil { + return cconfig.Config{}, err + } + + return cconfig.Config{ + GrpcServer: config.GrpcServer{ + ListenAddrs: addresses, + TLS: false, + }, + Account: config.Account{ + PeerId: peerID.String(), + SigningKey: encSignKey, + EncryptionKey: encEncKey, + }, + Mongo: cconfig.Mongo{ + Connect: "mongodb://localhost:27017/?w=majority", + Database: "consensus", + LogCollection: "log", + }, + }, nil +} diff --git a/cmd/nodesgen/nodemap.yml b/cmd/nodesgen/nodemap.yml index 137e585f..ad4e9c80 100644 --- a/cmd/nodesgen/nodemap.yml +++ b/cmd/nodesgen/nodemap.yml @@ -8,3 +8,10 @@ nodes: - grpcAddresses: - "127.0.0.1:4432" apiPort: "8082" +consensus: + - grpcAddresses: + - "127.0.0.1:4530" + - grpcAddresses: + - "127.0.0.1:4531" + - grpcAddresses: + - "127.0.0.1:4532" diff --git a/config/nodes.go b/config/nodes.go index 932a76a9..9583d833 100644 --- a/config/nodes.go +++ b/config/nodes.go @@ -3,6 +3,7 @@ package config type Node struct { PeerId string `yaml:"peerId"` Address string `yaml:"address"` - SigningKey string `yaml:"signingKey"` - EncryptionKey string `yaml:"encryptionKey"` + SigningKey string `yaml:"signingKey,omitempty"` + EncryptionKey string `yaml:"encryptionKey,omitempty"` + IsConsensus bool `yaml:"isConsensus,omitempty"` } diff --git a/consensus/consensusclient/client.go b/consensus/consensusclient/client.go new file mode 100644 index 00000000..59cf8499 --- /dev/null +++ b/consensus/consensusclient/client.go @@ -0,0 +1,12 @@ +package consensusclient + +import "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + +const CName = "consensus.client" + +type Service interface { + app.Component +} + +type service struct { +} diff --git a/etc/configs/config1.yml b/etc/configs/config1.yml deleted file mode 100755 index 794ce8f9..00000000 --- a/etc/configs/config1.yml +++ /dev/null @@ -1,28 +0,0 @@ -anytype: - swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec -grpcServer: - listenAddrs: - - 127.0.0.1:4430 - tls: false -account: - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck - signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== - encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== -apiServer: - port: "8080" -nodes: - - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck - address: 127.0.0.1:4430 - signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== - encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== - - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB - address: 127.0.0.1:4431 - signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== - encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= - - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu - address: 127.0.0.1:4432 - signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== - encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw -space: - gcTTL: 60 - syncPeriod: 10 diff --git a/etc/configs/config2.yml b/etc/configs/config2.yml deleted file mode 100755 index 51c733ca..00000000 --- a/etc/configs/config2.yml +++ /dev/null @@ -1,28 +0,0 @@ -anytype: - swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec -grpcServer: - listenAddrs: - - 127.0.0.1:4431 - tls: false -account: - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB - signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== - encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= -apiServer: - port: "8081" -nodes: - - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck - address: 127.0.0.1:4430 - signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== - encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== - - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB - address: 127.0.0.1:4431 - signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== - encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= - - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu - address: 127.0.0.1:4432 - signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== - encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw -space: - gcTTL: 60 - syncPeriod: 10 diff --git a/etc/configs/config3.yml b/etc/configs/config3.yml deleted file mode 100755 index a8c0e426..00000000 --- a/etc/configs/config3.yml +++ /dev/null @@ -1,28 +0,0 @@ -anytype: - swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec -grpcServer: - listenAddrs: - - 127.0.0.1:4432 - tls: false -account: - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu - signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== - encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw -apiServer: - port: "8082" -nodes: - - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck - address: 127.0.0.1:4430 - signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== - encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== - - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB - address: 127.0.0.1:4431 - signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== - encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= - - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu - address: 127.0.0.1:4432 - signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== - encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw -space: - gcTTL: 60 - syncPeriod: 10 diff --git a/etc/configs/cons/config1.yml b/etc/configs/cons/config1.yml deleted file mode 100755 index 1b9e053f..00000000 --- a/etc/configs/cons/config1.yml +++ /dev/null @@ -1,32 +0,0 @@ -anytype: - swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec -grpcServer: - listenAddrs: - - 127.0.0.1:4530 - tls: false -account: - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck - signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== - encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== -apiServer: - port: "8080" -nodes: - - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck - address: 127.0.0.1:4530 - signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== - encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== - - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB - address: 127.0.0.1:4531 - signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== - encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= - - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu - address: 127.0.0.1:4532 - signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== - encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw -space: - gcTTL: 60 - syncPeriod: 10 -mongo: - connect: "mongodb://localhost:27017/?w=majority" - database: "consensus" - collection: "log" diff --git a/etc/configs/cons/config2.yml b/etc/configs/cons/config2.yml deleted file mode 100755 index e6ae09e4..00000000 --- a/etc/configs/cons/config2.yml +++ /dev/null @@ -1,32 +0,0 @@ -anytype: - swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec -grpcServer: - listenAddrs: - - 127.0.0.1:4531 - tls: false -account: - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB - signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== - encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= -apiServer: - port: "8081" -nodes: - - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck - address: 127.0.0.1:4530 - signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== - encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== - - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB - address: 127.0.0.1:4531 - signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== - encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= - - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu - address: 127.0.0.1:4532 - signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== - encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw -space: - gcTTL: 60 - syncPeriod: 10 -mongo: - connect: "mongodb://localhost:27017/?w=majority" - database: "consensus" - collection: "log" diff --git a/etc/configs/cons/config3.yml b/etc/configs/cons/config3.yml deleted file mode 100755 index df015573..00000000 --- a/etc/configs/cons/config3.yml +++ /dev/null @@ -1,32 +0,0 @@ -anytype: - swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec -grpcServer: - listenAddrs: - - 127.0.0.1:4532 - tls: false -account: - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu - signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== - encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw -apiServer: - port: "8082" -nodes: - - peerId: 12D3KooWPo3aLfq4t6iTmAWp6zDduEyZ4V9yb168NfneF4ufBcck - address: 127.0.0.1:4530 - signingKey: wE4Z/KtDHeA5PCaOQ5x4UQcHFo0B35H9cURBAYiAa8nPrQNFvmXrxgXwLkqwt/HoRN0NlcLzk/sBpU74yaXbNQ== - encryptionKey: MIIEpAIBAAKCAQEAuX3SpXlT52qn4xmS4sC0aw1NSWmmjlb9rKjKWamkbSB8wuuTCCaKboV3NfMR2YfmS+IPZ4IK47l0TtbyFM4Aaga0QTbbhGA0dXI2RiUK2a6iI1/j/wyc75UDJibnsMwCbtswnTJKfvNwEPaGI8yMZpxTMxTxKPMCqqz4Ej2WX87l/aa+9kLdW9FACRmoJUg2dbTrPgbtl+RzrNPjUvoyvN0QMuOr1v+g2lLrBtXDIjw5Tcp9v/aLNoXvhPjOc8z4G3sVGS/T9ndMOkaREef/msKp19QZwB4Lzmg3c7jHrRekrBaUn6azUcTabw7gaSVIh8WXln8Imn7cKqy5oXWRGwIDAQABAoIBAFdHafdsiFtKZybHoMLLM9lvT99sM++j5Qb6AQSBexnSAIJjADMEl3x7lmUvM0Xs2SL5gpAMs30FhUGXiB7b83vwHZ7V5iJ6dhSRIhKNWXal4irM8uXOlIVy0yF/iuM4iyiIQG6m/ECR4ThKF0H+/E1H3yoY/4RqG+YdLzi9++SmEsEig67vO3Uf9icm6bKw64/Sp0Mc4+KKlgu+qCsru2337jjlxJOLv9xWYW3yiTTV2EOJkqxMVqEXknZLVoY6QC+FZwkj3gyJPGFJu0+RqCdt5qcAcXf4/6lCA2iYjN+SuVLRRcNO/IBthRtvjw6XMTGRB9km0kc5tzFLRS52OLECgYEA7zidJZCDEWqdlEhiTwTA7wZbtjNVM5Gyqn22ap8Ux63tsueHPJDJO4/LSNnnO43mi79bXwP8Kh33iE2qnvzY3p1HXl8QWBbfdFl3eyP8rKdI+zZow1+REQQEGTT5gABa9t1we3hBD0Qq6u+a58+MJSlyx9fsJj1Xw81JgmLkbXMCgYEAxoB0bVyG1dfabNdpnLTRHMZKYS8Wc44/VFOLpw+ZBVTj/U+2FLmP5sFzK/TUPJ7C3p3JCMCeXRlmv+Vk4CD3WbVpbfdftFJcq1oJtziNSvSv2aR9eQZqQ9GTJE8Ale8aslxBKUNAWeHVoPSozrMy2KFO48ADQLAFPuBaAVf1Y7kCgYAERF1BO0erOtyetX/TawFKAjIGmPnPFq06L03erwG+4hJYW5rk8Kw2PMVigkiGnmxbV8l4c2i/E5PDwabmeRohNmr8evOerqHDwIjKEIVESyOZH4pU2dKLnCe6j2BX8SmuN5r3CNkYPZ4KXMXFlsUoMIoUmHxk3jk/i9zgz4TFkwKBgQC52zgn1URiINLgqei20w4gNQEbcW1CEOP23qqZZx9NQKifWu0PBpdX5bUiaP/3Kmcm7PF4AnHEla4A6pXCzNsL4bGvRrkTKzKdNZZ3OLoCfovP6hWZJYqFqUpt6pKPz+pdKcfRDKjJ/4t4QttzfZGUB6TH1da10Jl4v7NGIscd8QKBgQCppr1+ZfZH2rcYIgcyZEC2/CqU+CSCkxB0nJJGxZyY8KED3qAcYwAyzsAJaQKEIA91o6fwLOWNgP6H1cnXnRVr31uh/cveGr2xdtwLFc5/QHfTdFloCgsMQH66WwGgqQAQK6g8nBXDov5u0of2XGlLCPB2FD2QHqyizVF1wwl5TA== - - peerId: 12D3KooWMSRCGD7MKFwbxuonTV23Zk8bj5enUPBnrt24z8r8JRWB - address: 127.0.0.1:4531 - signingKey: NO1unZIre3IFAHjJ6hPUYqgxhVpsisqaUNXnBnKyZZWsrOMUiO1mPvUgOWJ4KiecUh6F8s33SAB+7AlXcrGg9A== - encryptionKey: MIIEogIBAAKCAQEA03Ro0fUDPbQ5yCPHebMDdnHha+7j+8/OuzbpXuNICSfx2ogR05mGatH2FCwTTVZRSzc0SSsnWMeas/gtGnkGuH5T0+PN02niHG0FSHyV2fjRhOd2fDq0Dr0BxzTnvt83XqMwRZVlJESQg2a3UFx+tdgo0gtZomSRswHyc0ZTufKYW9VvaWpicTswF57z1Xu6ZtcJzPmcRpAwmJQl1PLVgJ5WXAaBLhpupcmt2z5KNKAhya72WJIcW1SqzLtiOwERwOTXdniPKiWoy7mf+DiVHPRtMv++98nF1VzR1qpqty97VRcNTEb31lc18IUmUgZGS52zd1K/OIazfURmsn5CyQIDAQABAoIBAAt+JjxTHsv5wbI5D5xzuFp1shTVtRp4nvnZ8DEyFTY6L5D7GEzx6TZhFwjdpGbtrBl0dKkNaWQP5T6m3Hy120GnzBKWLReyh5GX81OPQe3I8kpQ8kWqQyMR7sjO/VGIfE/ueq8tgYPJHjmmGYyKmnBzwTQ5XbPP14NtNapCRkay6XiswHOxw0AJTlA4Ob1yTVSl7rBbY+U5QEfOIi+UuFZZ77vAJtZ8GW92k93mASy/io8S2FwvSKCR2aBSUtAx3mJ2LOdVngL6MPBF7OViogt4Ys7IZh2GxqPr3KsbMpNy7EEO4F+/L/BJ4DeCbbox3FohiJVujbtES4XAEumJ3SkCgYEA8qzZGuSscq/FlV3NwQ4YPlkrlpxX5hYA4mUGhMuTBW9sb29b09YaQqiTTqc/0SbpjHBNIf8h+EGGwpo7v5Fo4NsH0nNy0MbbCaD2lZbbfSlMFX9CtZh6tFdT+apqwD9g4A9YLde2gGfwreqjz8iv47UwNihv4Apd8HXNo3IfaqsCgYEA3xC2ZEw8pZm/UU8frtl/K6J+ODxpopjVDgSFSvUKuZEad2e3SK4tT8/KLyjvcmMvzjnNYycC1zXxZYaW+75jQNRJcduZstiRfck+ko0YI7sjE3xP37F2unrWD9/J91J4hyZ5DmnQvZ0hEaA1xJiaenLuqO+BVTQM9qDc6fH6CFsCgYA9h9gQepTDC5BUnBE0dwdsn51utbuPylp1DNqHRzrC8QqUgq7M2oeUCTw4gC2tMWmcQ0k7an5JfQvXQdYOb6chBEhKcx1UlGcrXNXI/hQu+w6gkMDwXHYYTeAr+KrSjf9ZMGrSTNSoYDJlVo4sfB0k5mcQBFbBfr9s3eHDJIeUuwKBgByzGcRtyp/D2Emt1HW6phIHJhY2L6Er6L2U91FdlbOqZ61VOs+vGUVbhrfqnGQrPstZxIMtUcA+wIA/gM2DAWIl7g0oI+5OzulQKyzP2ns+aJTpOZ2eR5hWlZQVRvb7NWauHIUuOB0tSkPqSQCyYa2/e9Vge1NrDv/sUoAHEhRhAoGAEgC9OD/M7YnC0q0R7FaZKmwnR36KkAJNItcgGq7Vrr0kbtBFxos0almHyIMJ9MFkIRjytL2J5RHP8ulvw2bdDiBX80YnNJ+HC0oue6MXGF6a3Wbb0XAkFxarfcR7nNzn3CJS0cwtMNgnQxLGUNHByMH5GsaNey0oAWiDsWtUJxU= - - peerId: 12D3KooWRTGXikGHDdsNATxd6Vk56iu1V4dd6KZj3vv7KnGAMpxu - address: 127.0.0.1:4532 - signingKey: krUwB1X4pZj1oy1i7ICHmMC6KhKmTYQflQaA3u5f3cToU2slOAZlMHEyRv8MUR5Trqtv2uAnQAXFSWotybLdlg== - encryptionKey: MIIEowIBAAKCAQEA2mlMdTZv7lTe3vbUKYbKKRjw0e3TvTmVRl8v/ayWPpn+bf/TPA+r3RoUaWnDEn4mHzUc+KNIPJJtv+uc2GXxG420R8lIs44zacuaYy8hbb7dYqK0u9ZoCkiaaT9nH/d/G8PsVy9jYQri4t4TtvvPebhZ2a2hHr4zEgilgTVEuxte0/QcKvEu2NYxaewLzejc2fJHyFOjfDhJqZOQKt8xlM0xszPcqzIDtDsuJFRRqw3Tk82427Ayc2I9EwLHd4r6qaNejW4BC5OXz+URHOJd130U8sslz4oTmkKuMkdu2HhkOznhw+TIn7TmzW6LQhJY9iBxmmM/V6VTXtgr6Fi7jQIDAQABAoIBAHUYfyVYSio81kAzlQuueDQQawwhtaN9e8p+vfwCy4pEhWP0BAvvWvTvRoI9cZg4ibexghbLc68F0lFSwIREIz/ieQUDpTaexnGx9tO2MPXlnkuDb+JE0QKyahaDJ4a76im4oL0daupcK8f1yBwSZOmdLI7Hx9nznu3MNO9Q38hvppsLNOkUf7KYTkGXGrdfY7CM6Fev9lr1o7QgNkkEgHas9SAxgjXX2sG+bhmz75eRnaoZ0KHhfSih8S17NaPpwpAOSQTdRpFCzEbHKAmn6BCJXGhdg4fSk0WgYEd23WhOaLsni2jqWMy252I5dykcm9qRYM+6Vo7CKEiC4axGkAECgYEA7QhOezQedHQ7qMnd2e/VBG0kgg5qTE+ztyWjBwrgdK2+Fd+DMmIMmZS+ETqz1rxnTp8miXv/7vz1SvxvxUFyXp6nKzFd+hPXJjIwmKuV1QF2kkHxFypOYPXF4BOPng8cEojKrud1nj7Bgm3bL3X6WzE8F5fvauC0DDlRRAZDYR0CgYEA6+OIIq56TMKfMMWNwWIVg3Ec3MZTFr6dwyw/CCAIdg9L4AtdaaY3erkvW7AGEP9ttXt5/foiv2zfd835VtoBevsCFHGzJlZTxuEtXjUHoDTKfxB88XZxIAwYvYJWjlgyOk/tDW/cRI6IshAQm+UhR/m4jYcmnHEqssjidcMDqTECgYEAtZVtehjdU91PbujmmfSPPcrW8wNUD43nYWDl2ZlNhlUrj9ogydIvUOCQEubjqpe+lI57mUtzL4R97aohff27Ph1Qd1hkZBYa9lnwvKSGLh3m1fjKVzLDxKfDpPuXREDTAqfkjcUnZ8kvuVmrVlqNJps7K9/rO/dUNyEZzoD10UkCgYBe5Wk18pU23jDmkQMnIgtflpiy5II2qzaSdvFglmpw/FRc7JWG1ByLnYZEz3qRSgDburHoD8H82pLIAq/lVcy0qdg7W0ZkDOSlJJ94v8Kym6o/FeX9ydVWvCcTziR+HVMPjGnkNvUZC3JImBfmb3ZFG1w4a3+H/ircQ95+25ZUcQKBgHB7u8EEpjxcuiUMSWxpUt2NCVIfwnsQQCBwDKdxh/EC+60kmZr83syAkmxGiB8UQf5VcVYJpTV8R12gsafdBzhXid3qOgWCLze1j5BnaLX4SD2CmOCB0myr0uO4xBYhACpkpZqHWs+ybozylnj6i6TiySxBysfi6aQivjhSo+Rw -space: - gcTTL: 60 - syncPeriod: 10 -mongo: - connect: "mongodb://localhost:27017/?w=majority" - database: "consensus" - collection: "log" \ No newline at end of file diff --git a/etc/configs/cons1.yml b/etc/configs/cons1.yml new file mode 100755 index 00000000..e75afc05 --- /dev/null +++ b/etc/configs/cons1.yml @@ -0,0 +1,12 @@ +grpcServer: + listenAddrs: + - 127.0.0.1:4530 + tls: false +account: + peerId: 12D3KooWKZcPNMmMqi6PZFjUkZqrFXXUYLpzoHBjbHLPojkuj4xp + signingKey: gnmy5mbz+c/TYLEFCa7dgPei1Z94GNEuj7XYutkAVreQzTur/0eA8JfYkWlIDLIMyzqS3pm4PtxG90/L3lKlQQ== + encryptionKey: MIIEogIBAAKCAQEAuxeAfwwc7aJeecn15nSuunXSUdVsaVsyTdxf7R1mc2Rux0CH7wbX0xL+UZVfMQ7hkPSp7rI4kP5T9iq+9gcMVgU6CjlBBJpv7KbbShRn1+71DqdJpfJYJNCawy8nu3YQrS0i15gOE7Pd5G3PZ44dtW8kh+Tq6qC7Am/e5Cd+CRgOxcBQnRQID5HTe18LF2jsx0CuvH/RUZDDdvtRVmxJYKVyWAXXOEKIn8lgdLM3bf5SzzDI2Mf1x50pLBNFBLD0MQJ8IRQ8S426C8SY1WJfyUzVinqmO/w16R67+Lj4qseE+TTmLprVWUgm3CdxzzrGebGU71QrTQc9TUr6tWDbDwIDAQABAoIBAEJevv3S/Twr2poX1Dzx7b5F59uR+8iQSpMmd301bc/HtCjJMq/P3KaLWV71v3Q21DxJHzOHU9vT7VMprN64d17YsdNIplEMvGHWe3qXLJOEuLh/DfhptW0x94UAaHbvFlFo7rBOx8ejijbr4aTZ3J4tlGcFBXVAmbbumsKTY/mzTH4H5zXDoSw2IVWkRP3UogKK3Jmee0fHm7XW5Ue68P2Bv6wCTfF6RGAZTxlX4x9X27OtZMsVPIooLUiUL7sBXXeqSupYIchc/o4ztv7CslNnGF7b6wc48HBkfcB4aoM/RIAXQG58aWFofMXpYEl7Ulk7FUUMXqlKwOrCcteAkhECgYEAzFIQH94N1+E8edQ6vlMvSXQaJvHYrEhQNWGLecLndYi5XCc0AtvR+wdQnGR+lDu1lbcm3h0e1E/G0LHDxkiJndKLrRD5L1JVOyd7I22dTrUAOYNsshygpqiYyt2CENCmEbz9eXZD0a9klqTEABvQVOdNUM5FXXAk6e/gX6i9PlkCgYEA6mnco9x4TysXv1VERP3RaFBPn21rgkxguXO4Jsi70hZ1NR+4L1aXI1ggKAbsXZ0rmjn5aru59cVvv8msnRRt+u5zFKWX8xpKM96+zZbKhv9XGw22jwmy7Sbx5PB3kFPZ5ud6EeQwNlQJLPqSYgAaL0c2mNkaerAQVtmNj0dmx6cCgYAjy/TbQHI4clPAHHi2Q6izO84hKJoHhRvYXmCrUoRuySeAh7XLEmw1iNCMteafXd6wfkgm/f8av2dbxOlB4g+KQQsLpT+jFM+t73rZeCjpUzjY2re+dNmImV07nZdeDtApp2zZTOkQ4aPD6NYWFslnNqcLEzh/6FfvTIGJAO028QKBgGdmArkUyszBCVyQU+jKvM/yfOyp6z4ySogDDzusV4y380NXlnrrCwfAG48MXr58UXtaDzaRT9mlGUHTx5wSIuEIxSJaWMgW1JxEqI0u8m7Ruq5oQhqeAJqzDwgZOeQj2H4NpL63lLyiHNoGPQOVX/dyxhZtzUxI1Sw6EkMdD60JAoGAJN9/rjBKpDG09HRwLA+ize4/+KAk0DLUwd5SoLJozUgw6r0J1eGPXAo9fj6fIKF3m6cW6I/MPX2R+MZ5eQJa82WzFKuwX0IFQvmpegQRGUa5fv8acqIWnhu6jq5MWOLGJfLhFTChscIIUT6I8rz9k57XCyvrIT65Cz8Y4HpggiU= +mongo: + connect: mongodb://localhost:27017/?w=majority + database: consensus + logCollection: log diff --git a/etc/configs/cons2.yml b/etc/configs/cons2.yml new file mode 100755 index 00000000..0ea4662c --- /dev/null +++ b/etc/configs/cons2.yml @@ -0,0 +1,12 @@ +grpcServer: + listenAddrs: + - 127.0.0.1:4531 + tls: false +account: + peerId: 12D3KooWGVroVVTuhc7GcnYZ3T9RmvuB4LWwqQRgvEMWQWPQqTy8 + signingKey: FGi5NwOrRlQAwGuwwi6rwAqAGD4FRGJExr0y+kc2LJpjRCYyLSau5CL2DiFYB+0Qx8+Qq+y2jxkvEjivGEqpzw== + encryptionKey: MIIEpAIBAAKCAQEAzn1d/3riBKfsBbp7zswhj5kHqsFP8ipq614bGdXrB8TyckbCVyfGe7Cgn9443drOr2SpIGgU/HCnxV3IcYYb8jLTfEh8Rfmo0BNhDAgnfGCjsOWxc/h7WRvWCTaQiOqEaN3A2ohA0eE/6lhXSGVJ0YAtOdyuwGFRKxoP4K/DGR4D9Bus04dCzi4bUhQsa02vxvsR35qAtNxJ2gEMGtAnKOeiQBpPt7+uWmNs7eu9CoxvodCQdAwJo66nmorXKYlzFcdDuMdiczJgizXPUMuYB++HBCSjzqFeTSa61IQtwPL3Is0mGhl81sDaN4HE3Q5E5C3zxeJ6vtMnLlddPmBJ4QIDAQABAoIBADLLAelLV/efOt653aSj8Al7sjgdr0W5i210S6RSS6swlhboMvvva9KXQxuwNTrVjQv17ehr0eW67HoPNLRAMfWk7QLgbblkzVLJwZCNHPFqcDmedsU5NVZZE5BWnL0hOwr0qXDYHWHDT86chnPnfn4LUpSuJUprZeT9VzSE56/wkhkm02uB1Nm0MDgQqIToryqWOlgFDtT4vgA4W6apASZRoPb6eT714SdyEggZ/L8Vozw/wiUkZT9EIOrMXMjU/4Laa6Z4SNL27tW5fCxMVOLpapHzc0/2KpnWWEsfB5VIxAyNpce+iTBbzWQQEi8f4NPKkEpsYMmxHWPnk3D+HPUCgYEA5yDhIQT9JJROgCo4G3OqpEqpaC6if1HBWSC5eEL+G9ZHajvGVBBLhRE1fcTtnb77mUVY3UrFkxTlfMnzhloX4xqLPUURN+eyx1UxbJkEt3NI62FH3YhhwnR3JPzA4POks5tmlEwXGQXIojFxCinzFkXaSV1pxnv03d/bTzXQNCsCgYEA5LW9rF8G3W1zZs++dPRAUXreHyq6wku4jIGZVE6nwlFTxLgY+D+5ZVaobJvR6j1Aetzrlc0FMMVb7SuQCI28ajSYAm+luc8657oJoKs5RfAxlM1PHx2u/1WAuL1NRPPLBuT0OpoXx/0JV2N+0h6QhP6ZufyKgI4b3gmZHAvfeCMCgYAtl87RNKq7DIZvweRPhgGjZxcD9i8X7oi1jD8J+i0mUJ7F1gTJkG1VUo+6v54gAAyhr4xYGufem8CpXS0s05jis9nDvFwpKwuZRrT5NzY2+gboZ8hFayHduhvGsBVcSrOyunUBzADCbuGlHRuvZZcOTblBv6ud+9XR7tbUSUlJAQKBgQCwf9CwhWU23JCCdy/z8crxFnD0fHVEHEt/o0RA27J7M2gCGFCsxAC/Q/EWX+nPaxWnu3XTVTT8PlKC5WtyLm+JRq1ItAChNFuxGND1PS4l2wdoXkkBKlcylTmRWAWZgMrdtzMDRoezvoLG/fGRFiVRfWoFLe905jZ7U8zk6AS9IQKBgQC4MjddDxyPulCHigqz4jexS5Rt8yhMxuG+4dZEOdlBmeq1OceGzJVmQNlermuKABXPdvilZmr8FxkvhtKQUy4cXf4ZNZzasLeoSdJ5jputkqZRG8AoH3HJSqNUwH7ckIZESLuHWLoppCw+dNloPxqhecHTkStor2mfFk+/GD9hJA== +mongo: + connect: mongodb://localhost:27017/?w=majority + database: consensus + logCollection: log diff --git a/etc/configs/cons3.yml b/etc/configs/cons3.yml new file mode 100755 index 00000000..1cf1613d --- /dev/null +++ b/etc/configs/cons3.yml @@ -0,0 +1,12 @@ +grpcServer: + listenAddrs: + - 127.0.0.1:4532 + tls: false +account: + peerId: 12D3KooWDLvgBnuUnuLea8QZBEA8MSffmWoNj8JFto3N5AqUDV44 + signingKey: AiP/yP1JWKJvZrxLMA9nnOwvRS8fF3x4ULqipTr6QXI0Zz3Vy90Mqrh05XKzMvN0tf1da7p2NsJHnPSFSpBUcQ== + encryptionKey: MIIEogIBAAKCAQEApCTKugLFti+G1B0hEARjyJPzq/tBe92EJVsY1zCgejBf8AGYu63hfirerSRaHXHbwicuDiQguBE3JiDHsaw213H2TfYNh0QVogVSHaOT8v9Gsd+rjrN24IQT496FUb2g+EEM6/1OgmxjCbmJMUKQgEBIMeciKXr7TIMhKXL6927smOBB39dKqiMxjT3FgKkw+mZFbFgXtTKdjEHQlFF7NC+ht3enN8aesb2O1RDfjf9bVWywrqzITk/fC8OS5k7Is0UZUcKpK7VUasDe6/1jqTfWW0nL+NK14w5GUtAV0j2PY44gdmhAMMdrn0ejR+r2uO8ARpsjyssqd56VKN2c1QIDAQABAoIBABCs9DOFiJSDq4ztEKjR6Vk9PqogMnzk+kHZSWLDO+pt87EsWFnoxlnM/SZV5RnMsWi+Fj21ieVpSlMDTYZNWpz0pPMyphkx34jARaFhNuye5o23jXRH4zHX+TVTK/Qr8aiG40suRsWVQVKBmOB6RLfiz/LR6nSQW+tf/wR4++obHxyikuT4BltgxRHJBS7jSElZ8e2ZAvV7UyWe+72+EF7UPxh5mOe2oE2IhUWFZFHxkf15Z1adfidfGM6PK6GjvaIVLOt4NuQmI/uqDLakz5by8DBhPiSWbQlE4eJ+b7YAyCfv1hG3oZ/M1k0yZYmWlCD5ukn//+cgBvqaVHvFDpkCgYEA1IZ6zw18Wy+TrJizTydnoLya8WCLp+UrwNQSQPC7tIIRtoB/BYs9gh5ecG7C6tPAdmnRGeJFWaLzyCDkGMlXtM9qnA0KFl3fmmXhsYtPqlBRtLR/emrXIEZrylj8WEmFOEbpkHC42LttD06lpe6OUnWvQydoIG09zFYFOzbySlMCgYEAxbiqhdVlV8cvwv3/AWMohprB5bZTmwLsdhk6gWJ1Ue1iDhl97EsfEOF4Y0zm6oZ/CAYB/RMeu3WO/Y2/erJ7mrPWOKYcEXG+9YwPiGaKkl5C+5y8/qm4xdcBQfC9ldY3X3dilQmyC0b27M8Hi9hla0wFZmOhD4yeIL2n1/rvJzcCgYA0Dcw+sprm6rxM5gnlNU2YfRmmTXNnaCZTUJ438b7H86PLA6YZAYXLPQz8lOSBB+R4HGru4BEEZ3k2Z3f26jnlO3htSHRUDiIaeyHQjsKwgIPCswMWRNz0NstoAGuuZDORGS1UB4f+7clEmorQHaIWaGTJGfnTF26vgdI+MrMdqQKBgBjBzKhBVhUtna9eumVkExj3m7u1nrZUIWOQOSEmQOZnQNXfH0NNDLDCap6UbH2FJbbNecZEdJ6oU6Uv8H/ehVeTmQky02TjxzNbvD4qCMPXBbAXqhqBCd/L0h59lF+EmR5dBnz+38pFsnloWtuJ1vkeZbayVuJpiwsydCe5BeT1AoGASfF5izXCmHYXkVwk+8qzJ70cWmtslBwgbvamK9xegRYuIMzIyLFJWsvJwRTCz/IJ2faOcyHQKRVIkQ6RAzOnT+JqalrBe36zAGS+ozWtTLXOXc5iAyEVPHdRUUmWFLLfijH4lmdxpOHR1IGNX474kvThatgiyHSJHtgHuiPLIz4= +mongo: + connect: mongodb://localhost:27017/?w=majority + database: consensus + logCollection: log diff --git a/etc/configs/node1.yml b/etc/configs/node1.yml new file mode 100755 index 00000000..e9a88618 --- /dev/null +++ b/etc/configs/node1.yml @@ -0,0 +1,31 @@ +anytype: + swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec +grpcServer: + listenAddrs: + - 127.0.0.1:4430 + tls: false +account: + peerId: 12D3KooWFVGSu8MfoUnPmUGPpJKNpxaM7mezZ98V1ERGEQbTWjnE + signingKey: b3+g3PNCtwX4YCLd+hTmqjub8R4yxCJJ9J7DJHgCw2hUQZ3tjkCDiuSfsdf2O//9jk81gVQ5ky8AHUpIxpGmzw== + encryptionKey: MIIEpAIBAAKCAQEAwDr0KIpH00tfbebj7FDGNbBWIBWxXdwD6M+P3DeAnHUkgK3kgOzkPGvI6gG7h+VzuqcSY566kgvykNd4WdBD0AUmijFi9sKbgw/TplXj2as5V84hwsAcx/DADMQqD14F/GFw54IALhaQhItYJO4eaxKspuxdrVRhJI91b3hRqlLBYgA15M4fYcoHaLSkoHTXuht2vC0qzFniXmJnR7sy2Z4qinTjGwsIo7bR42SjsBnvxx/50sowOAKQ2xjr3G7rBA3YHPxgTG6rWa4+QZabQelaKZaiMIow4ytEggRgFI/ooyvFDPy75XAQooAJCT4CfU3xv3cs3GteYrYlqyhzRwIDAQABAoIBAQCdqDxTe4YI/4pW4sUQLfdCVUttqRz889Oo/4LnhAXRTCoR94yvSJqwC16OvbkGbeOKtDfayHYQDgh1TqMAVlUnqPHA6VxXMajFxxc5Frx2631uTDtYNKPmP8fjMIembuDN60TkOrTXF96TNo2mTD1aZ8h+ZuE1pTy+9YHFWJLx8tvaQ4XcHNDHPuGT/HxeXqD7/COmmoxUMFccasfwlmPtb4uSHDmPl0bzFbhWholf138L/M27Nu8PMCFN6Et73gTdQar2YkAR3NTLDsXtMAEEgmOTI1cjg5nw5E8M3luloR7UoBfDybhnYpN2FEG9nrpSiJyglkF2PBKbvlvfvaLRAoGBAPR5c4NORx5aXCjOj2b15T/S2yFvFejciCHqljvFfe3W7ys5s1oMQlidIAIlQlEYBigjZQMQ3BRegGorlv/DI6B7cdw3JWIiqrfxls3K5guY8SRA7nYJnTozKnwdcJYldE96yG34yL1w6mKEgNDHhu5Xm+dBssO71Jg5LaDOQTD9AoGBAMlK+Iuv8DqXgVX92+RoULVkQAomeSNT3QOrtpVSaOnQOqWnHasaYdF6VM1NkOy05cRdf7nD4TNIMKNsQkGUojpG48lpd9IRldC3CDjmrqojgm0mYNpmQfj2NwWPgJyBrw1VPVc7XX76g41J9XdnAW0XU5H8qa5/8Tcn0tbjIDqTAoGBAJ0AglaJJtMvZJAwV5ffwuJCH8hQ9tkdB7AAX4rzQfREXER+QdhKlzEhdzTpiLVboFiWooBdi3jpV77XT5nhUDf4Dx9FqxRi/xAybo6rByHbjsGhkYLsmbSOt3IN1ggW9aM1TxKQ+xnuMhgi0DdEbDsUuGLDpnJdZiJ8Vfk3fFZhAoGAPMik0Rmpwyeo6Jyl4A0YAg5pwCbqAZ77aHZbxi+CeshkTU1vihGHZEg6f1xi3PerQmaxgRkDUgcEmPTB9Se67Tom4tU0V3zz7ni2xOfz6nCam/cw3AJw/YrsBoPU5G3MvIv23/aPPx7KxsmElC/IoHagx76yRn1gC7W81yLywn0CgYBiHYiEIS0DHXkjTNHV7oAyxdQN2SJ22Zu/6N1cP2sXVirss6JEKEHTzvVT1+qtTHxGyliyJaTiP4+ujNAJS0g6/U0F3v9Nba0/uGPLCI9FaYRxyMgNZAKTtImauMuSmaS93kgsz1Xm8CJhTJwvQaD5EHP4UqVe70G4UwwH10tS9w== +apiServer: + port: "8080" +nodes: + - peerId: 12D3KooWFVGSu8MfoUnPmUGPpJKNpxaM7mezZ98V1ERGEQbTWjnE + address: 127.0.0.1:4430 + - peerId: 12D3KooWMPgKGCLtNkmANzwHAnymEMCggS6csXuDroUFqb63FizD + address: 127.0.0.1:4431 + - peerId: 12D3KooWG7bXBK1NdyyWT4bnGUQjbe9kpVzsZSm97MQVR13zRx4M + address: 127.0.0.1:4432 + - peerId: 12D3KooWKZcPNMmMqi6PZFjUkZqrFXXUYLpzoHBjbHLPojkuj4xp + address: 127.0.0.1:4530 + isConsensus: true + - peerId: 12D3KooWGVroVVTuhc7GcnYZ3T9RmvuB4LWwqQRgvEMWQWPQqTy8 + address: 127.0.0.1:4531 + isConsensus: true + - peerId: 12D3KooWDLvgBnuUnuLea8QZBEA8MSffmWoNj8JFto3N5AqUDV44 + address: 127.0.0.1:4532 + isConsensus: true +space: + gcTTL: 60 + syncPeriod: 10 diff --git a/etc/configs/node2.yml b/etc/configs/node2.yml new file mode 100755 index 00000000..e7d634c7 --- /dev/null +++ b/etc/configs/node2.yml @@ -0,0 +1,31 @@ +anytype: + swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec +grpcServer: + listenAddrs: + - 127.0.0.1:4431 + tls: false +account: + peerId: 12D3KooWMPgKGCLtNkmANzwHAnymEMCggS6csXuDroUFqb63FizD + signingKey: TBi1TxcOr6kB5Wp+MQMH2m2jgNu1Un120H5aKw5Gybmr+T3auW8EL/4T5nsO0priJYMg5oki18E3AwCdOpjUqg== + encryptionKey: MIIEpQIBAAKCAQEA40ciap1GvcPsgBo/IAVcpR9KK2fTEKwUs/KCB1Y3nIKTeJSDRKOtQD8TyegiB9VEzWscRPz4sxCCuIfwuuErSl4fchMdClsFC8GYGoCN8KvGcwUoFODdWaUh3garg+TqGPARe40Re6+thR4wpAFQbLeYkaM5MUWxcWf6XgMv0RD04IMwkDvZkDDR8BEP5T6aGC0FLzrqtH8YGSoAoA/IsofjIhB27QO60p6ygY0W9fHWojha6Rxi031HhnVud9wDXiBIk41RHUFxzHJF9bANF1uwJQbAVOF3PBLN4sCwrTtMt+WF832F4UBMKvxqWL5YX49iC3QqOM8N8NXvThkoHQIDAQABAoIBAQDOnMpC1buLo+MKCdI9D+LLEYjhsL8FtwoTFHD0roJbu7DIu2oiKhHECBO7R1Y4fL7RZ4AJj1efoXDUxHAp060BLFO15n5N/bS2nUXjQd7HXcFIqvVnFYzkg+Qn7TRa8O2HwiaChRnRsUEzdOCPF8q/KqB+NT429r569CV89bSwft0B0AfDs0mEjGUH9NxBI9YliA7NsjTVAi8wCIU5HDfGwJddcM7NwAeftXQlguwPm4IAFh+7rMBsUAJiIyXSRGWjknF4OcxN0qYwBdPlHCqr2ty2uN9cUnkelxtmQqK5pywUEoCL0JTqSdNRtTI8qcmSlm6Vk9VFAPnHiEeMvgnZAoGBAOqPAqlz4FRj8OFba+5dsOKkUR7xzgv4tkcyDbWT2qZeWy8aUbrTp+DQjr8X7QNIVMPPagi/Hdpdu8b/Nj2BL0jDJuECDsa0/P1QVCjbqdy9aneUrocX7+O2O6HGmtg/376bWVXH60VsPI3ZX0KtgyQQqPO+JViD6IDn0Do3Jf+bAoGBAPgNvoif2t27f/Kxdd915s2BxXxBA1yri+Kjr1yUoKfWaWaMcwxfAf05+jWOA+4GzTexR/VB8WskXMNIvNu1DTzItb/4Ojn4nx6LT7VuT8lzCcD1G8HmVhdqX7Ogv+kQQMuWBtgvjdBzXro4uV5aB1BognIigCBp12wpcBFh5d6nAoGBAM51ruwk2PKvPZm/dNNNmKMF63mHccxL0XX9ct+/ExiZuT1Ot13xa7WRHfTKRI89HY91hGnKf6Z0FxLkFYQxr8MmM5Se0Q7KxFzcVhfYsj1gZNR5BN5YjYksIHUXcbijEHigGRROcqKa0PoyuYzhWatnFq/lUM4G3aKJaVm0rTe9AoGBANcIqyyrT0O64E8WkfV2su9iWT2+6lgyimCdv06FtcPptpNkm/OUhRftY797bmKw2MQ31gaB9PQJoLTV4IqiKGiSIiTZ3jgVFHOZFy9UAqzDIih5E2gC8oz39SC18MftBA647xQIHWsgKHVM6T0m1IJbJwIkcGgo+MvWHEWlVW2vAoGAOF95zv96d2HseG/TtHdPjmNSpLAL+42cGIl/xlzJdF/VVx8kO6T+Bf4YW9PReLq8pErVFqMHPjumY5+vuFs+GX+eR0cJbQI+dQ9DyFk8fVL1QkHvvnhiS06GRK4MD6waEX7KkeD5N1RM6t2d4fWowxcbQYqt6IV4kVNTK2x06Qo= +apiServer: + port: "8081" +nodes: + - peerId: 12D3KooWFVGSu8MfoUnPmUGPpJKNpxaM7mezZ98V1ERGEQbTWjnE + address: 127.0.0.1:4430 + - peerId: 12D3KooWMPgKGCLtNkmANzwHAnymEMCggS6csXuDroUFqb63FizD + address: 127.0.0.1:4431 + - peerId: 12D3KooWG7bXBK1NdyyWT4bnGUQjbe9kpVzsZSm97MQVR13zRx4M + address: 127.0.0.1:4432 + - peerId: 12D3KooWKZcPNMmMqi6PZFjUkZqrFXXUYLpzoHBjbHLPojkuj4xp + address: 127.0.0.1:4530 + isConsensus: true + - peerId: 12D3KooWGVroVVTuhc7GcnYZ3T9RmvuB4LWwqQRgvEMWQWPQqTy8 + address: 127.0.0.1:4531 + isConsensus: true + - peerId: 12D3KooWDLvgBnuUnuLea8QZBEA8MSffmWoNj8JFto3N5AqUDV44 + address: 127.0.0.1:4532 + isConsensus: true +space: + gcTTL: 60 + syncPeriod: 10 diff --git a/etc/configs/node3.yml b/etc/configs/node3.yml new file mode 100755 index 00000000..975cf31a --- /dev/null +++ b/etc/configs/node3.yml @@ -0,0 +1,31 @@ +anytype: + swarmKey: /key/swarm/psk/1.0.0/base16/209992e611c27d5dce8fbd2e7389f6b51da9bee980992ef60739460b536139ec +grpcServer: + listenAddrs: + - 127.0.0.1:4432 + tls: false +account: + peerId: 12D3KooWG7bXBK1NdyyWT4bnGUQjbe9kpVzsZSm97MQVR13zRx4M + signingKey: dm6xzcZCMOEs7h8dOJgMqcFB+EyZMXBjjOFzAqg7GeldkBfDFG75NB1gVc25MhokEeScnh8WAWEvy4YUikPJDg== + encryptionKey: MIIEpQIBAAKCAQEA7habKY4w6fYFTneChju1kFG999EeZG1bXQlNbeV9Wbsg4Hy1FDlZUNf7QxQDxCKGnSHLySt/FOdQvp007WcLIefwgaIr3vJQn1/QBKiYiKytE4qURMwum52FHAtw0Xnd8TjKPynei9boEx5nQ8wRA786sh1BLd9oWg/WZgZZ8fwMZDQTWSdn7bQh5fQcuvnd4MQD4A63JQ+0JitF8g9tLzH5n2IvbicXjkvY31rhf4lo8XeHtkKEkerxhBUm4Q3G0hiCD0xmQqBSNeaRa5dqxplFJmWxyvJM87ugsRFlntHEVpHjnhI8ZLRf/4wDlXqYCQ3pI0V5dSdI2vL2Lynx6QIDAQABAoIBAQC1XylChdyDTnSKawZWxcOxtmOWFosljB0uibifgFR2d9Q6zyWOy4VbzbzOQ7/+uSJ9L1Kz5FvCC9j57H52X6oeYTdZObZb95ItZurrsZfJfmm22jnLExRqXZwaWijOmxzU9yMy7O1o8AUJE38tKZbImPPY3epaTLeM7EWyoSIB8T0G4J99oZBGmjsuUtAVUDzpfuvAmqs8/tSzzOW47HgxCZJJLdmQeiCEwBmKyeMcI5iUfxDFZcTB2yReDNPPWzrkn6HybwtN8f114TvV1sEZpozcnJrhB8bxF34HKEC15j/iXlobH90YvKIdVAOJDGjMJZcQc5B8UkfHeSqf6b+BAoGBAP/4K8ZzwVKU80pbN54ExpoUD5k8L6SREUIjUSpecJ76bdDtbZij2rJ6D9pPKLr5PVEMVtbpcIOY4FBpsWhzkcZ2LW9w7p27DMXAm9jcf15w/WZJAIr5D46qBMAP4hvBm5adsii6HJLBauGz7sLz2uRnQCHQaknLo24mltZ3nP6RAoGBAO4d42ENPusmatInr0oA52jlC/h6yUFLCBoziU2JYm0kNcwVzmeIIIxH5yZtL9viwuNUoZQzWIM6dgxVFyb5qO3QHTqYAL9xgVkxMpyrSHBCwuJxcH8oDu8UH2UDVmna4PUdSc8tpQtAKPGKWdWTOG5G9Fu4BbcwCT7dcCWjmhnZAoGBAOtk4XTuTNHSEu7Fdh9GixF082dbFwFDO1jUO7c4BF/fM5BYWFpwDRXm9J8x/uX7gW0AaPfY09ThiR/KIxFIfr3BPkVm2LmLI9LULz4+gI9sX0xqRCqJosnzBs1NjgUyhg/707Rqew5m+xC3NRJpyVoUrcCq9qQItrH8oOh4NZNRAoGBAN7rKDVxmxe17Yc1E8tqMTpoQ96pxMPVpI4y9TWbioO2xI59U7BlJmNt5R56VbW7AsykLGh78T9Zea5t8rDQRa/th4+VQg34Cyoe/szhJX3DYoNvw+um6uQzqHh+uWV8PeH7O2Az0TFJLYuDBDsICmpjDtzW2LL4y48I67axBNFxAoGAHIn7/XyHYzkCilSDa1BG9TMYErdCehhVjlqFJ2rvQNnQN6NOfFvln3YN0dHxrKNmUzMsn9ZcV/36AIOgEmHeLVD0KUB50MCwBPtcbGN053rXbqx8AQUkPA7/+ERXiLcEELftFn37NXDv4Wj51w92tnUwke80J4lDos87Nx91w70= +apiServer: + port: "8082" +nodes: + - peerId: 12D3KooWFVGSu8MfoUnPmUGPpJKNpxaM7mezZ98V1ERGEQbTWjnE + address: 127.0.0.1:4430 + - peerId: 12D3KooWMPgKGCLtNkmANzwHAnymEMCggS6csXuDroUFqb63FizD + address: 127.0.0.1:4431 + - peerId: 12D3KooWG7bXBK1NdyyWT4bnGUQjbe9kpVzsZSm97MQVR13zRx4M + address: 127.0.0.1:4432 + - peerId: 12D3KooWKZcPNMmMqi6PZFjUkZqrFXXUYLpzoHBjbHLPojkuj4xp + address: 127.0.0.1:4530 + isConsensus: true + - peerId: 12D3KooWGVroVVTuhc7GcnYZ3T9RmvuB4LWwqQRgvEMWQWPQqTy8 + address: 127.0.0.1:4531 + isConsensus: true + - peerId: 12D3KooWDLvgBnuUnuLea8QZBEA8MSffmWoNj8JFto3N5AqUDV44 + address: 127.0.0.1:4532 + isConsensus: true +space: + gcTTL: 60 + syncPeriod: 10 From 9930db8dc71f27a2cafb4bfefb7e62dcfb7421fe Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Tue, 4 Oct 2022 16:40:40 +0300 Subject: [PATCH 4/6] ignore consensus nodes in configuratrion --- common/nodeconf/service.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/common/nodeconf/service.go b/common/nodeconf/service.go index d78aab4d..00fc6a7d 100644 --- a/common/nodeconf/service.go +++ b/common/nodeconf/service.go @@ -64,9 +64,9 @@ func (s *service) Init(a *app.App) (err error) { }); err != nil { return } - members := make([]chash.Member, 0, len(conf.Nodes)-1) + members := make([]chash.Member, 0, len(conf.Nodes)) for _, n := range conf.Nodes { - if n.PeerId == conf.Account.PeerId { + if n.IsConsensus { continue } var member *Node @@ -74,7 +74,6 @@ func (s *service) Init(a *app.App) (err error) { if err != nil { return } - members = append(members, member) } if err = config.chash.AddMembers(members...); err != nil { From b59cc28dc5ebcbc38e99a13f52a34d6bd3a0b22e Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Tue, 4 Oct 2022 17:55:30 +0300 Subject: [PATCH 5/6] consensus client --- common/nodeconf/service.go | 9 ++- consensus/consensusclient/client.go | 93 ++++++++++++++++++++++++++++- 2 files changed, 100 insertions(+), 2 deletions(-) diff --git a/common/nodeconf/service.go b/common/nodeconf/service.go index 00fc6a7d..cc80e288 100644 --- a/common/nodeconf/service.go +++ b/common/nodeconf/service.go @@ -23,6 +23,7 @@ var log = logger.NewNamed(CName) type Service interface { GetLast() Configuration GetById(id string) Configuration + ConsensusPeers() []string app.Component } @@ -30,7 +31,8 @@ type service struct { accountId string pool pool.Pool - last Configuration + consensusPeers []string + last Configuration } type Node struct { @@ -67,6 +69,7 @@ func (s *service) Init(a *app.App) (err error) { members := make([]chash.Member, 0, len(conf.Nodes)) for _, n := range conf.Nodes { if n.IsConsensus { + s.consensusPeers = append(s.consensusPeers, n.PeerId) continue } var member *Node @@ -96,6 +99,10 @@ func (s *service) GetById(id string) Configuration { panic("implement me") } +func (s *service) ConsensusPeers() []string { + return s.consensusPeers +} + func nodeFromConfigNode( n config.Node) (*Node, error) { decodedSigningKey, err := keys.DecodeKeyFromString( diff --git a/consensus/consensusclient/client.go b/consensus/consensusclient/client.go index 59cf8499..df277ca5 100644 --- a/consensus/consensusclient/client.go +++ b/consensus/consensusclient/client.go @@ -1,12 +1,103 @@ package consensusclient -import "github.com/anytypeio/go-anytype-infrastructure-experiments/app" +import ( + "context" + "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto" + "go.uber.org/zap" + "math/rand" + "sync" +) const CName = "consensus.client" +var log = logger.NewNamed(CName) + +func New() Service { + return new(service) +} + type Service interface { + AddLog(ctx context.Context, clog *consensusproto.Log) (err error) + AddRecord(ctx context.Context, logId []byte, clog *consensusproto.Record) (err error) + WatchLog(ctx context.Context, logId []byte) (stream consensusproto.DRPCConsensus_WatchLogClient, err error) app.Component } type service struct { + pool pool.Pool + nodeconf nodeconf.Service + client consensusproto.DRPCConsensusClient + mu sync.Mutex +} + +func (s *service) Init(a *app.App) (err error) { + s.pool = a.MustComponent(pool.CName).(pool.Pool) + s.nodeconf = a.MustComponent(nodeconf.CName).(nodeconf.Service) + return nil +} + +func (s *service) Name() (name string) { + return CName +} + +func (s *service) getClient(ctx context.Context) (consensusproto.DRPCConsensusClient, error) { + s.mu.Lock() + defer s.mu.Unlock() + if s.client != nil { + return s.client, nil + } + peers := s.nodeconf.ConsensusPeers() + rand.Shuffle(len(peers), func(i, j int) { + peers[i], peers[j] = peers[j], peers[i] + }) + + for _, peerId := range peers { + peer, err := s.pool.Get(ctx, peerId) + if err != nil { + log.Warn("can't connect to peer", zap.String("peerId", peerId), zap.Error(err)) + continue + } else { + s.client = consensusproto.NewDRPCConsensusClient(peer) + return s.client, nil + } + } + return nil, fmt.Errorf("unable to connect any consensus node") +} + +func (s *service) AddLog(ctx context.Context, clog *consensusproto.Log) (err error) { + cl, err := s.getClient(ctx) + if err != nil { + return + } + _, err = cl.AddLog(ctx, &consensusproto.AddLogRequest{ + Log: clog, + }) + return +} + +func (s *service) AddRecord(ctx context.Context, logId []byte, clog *consensusproto.Record) (err error) { + cl, err := s.getClient(ctx) + if err != nil { + return + } + _, err = cl.AddRecord(ctx, &consensusproto.AddRecordRequest{ + LogId: logId, + Record: clog, + }) + return +} + +func (s *service) WatchLog(ctx context.Context, logId []byte) (stream consensusproto.DRPCConsensus_WatchLogClient, err error) { + cl, err := s.getClient(ctx) + if err != nil { + return + } + return cl.WatchLog(ctx, &consensusproto.WatchLogRequest{ + LogId: logId, + }) } From 9f16e7c272f28f906b323f4f400151b3a3de0737 Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Wed, 5 Oct 2022 11:41:48 +0300 Subject: [PATCH 6/6] pool.Dial* methods + consesus test client --- cmd/consensusnode/consensusnode.go | 1 + .../testclient/consensustestclient.go | 260 ++++++++++++++++++ cmd/nodesgen/gen.go | 14 +- common/net/pool/pool.go | 29 +- consensus/consensusclient/client.go | 56 ++-- consensus/consensusrpc/consensrpc.go | 1 + etc/configs/cons1.yml | 6 +- etc/configs/cons2.yml | 6 +- etc/configs/cons3.yml | 6 +- etc/configs/node1.yml | 30 +- etc/configs/node2.yml | 30 +- etc/configs/node3.yml | 30 +- 12 files changed, 394 insertions(+), 75 deletions(-) create mode 100644 cmd/consensusnode/testclient/consensustestclient.go diff --git a/cmd/consensusnode/consensusnode.go b/cmd/consensusnode/consensusnode.go index 0a563755..2e804d35 100644 --- a/cmd/consensusnode/consensusnode.go +++ b/cmd/consensusnode/consensusnode.go @@ -15,6 +15,7 @@ import ( "github.com/anytypeio/go-anytype-infrastructure-experiments/node/account" "go.uber.org/zap" "net/http" + _ "net/http/pprof" "os" "os/signal" "syscall" diff --git a/cmd/consensusnode/testclient/consensustestclient.go b/cmd/consensusnode/testclient/consensustestclient.go new file mode 100644 index 00000000..c0301b8b --- /dev/null +++ b/cmd/consensusnode/testclient/consensustestclient.go @@ -0,0 +1,260 @@ +package main + +import ( + "context" + "flag" + "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/dialer" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" + "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/config" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusclient" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto" + "github.com/anytypeio/go-anytype-infrastructure-experiments/consensus/consensusproto/consensuserrs" + "github.com/anytypeio/go-anytype-infrastructure-experiments/node/account" + "go.uber.org/zap" + "gopkg.in/mgo.v2/bson" + "net/http" + _ "net/http/pprof" + "os" + "os/signal" + "syscall" + "time" +) + +var log = logger.NewNamed("main") + +var ( + flagConfigFile = flag.String("c", "etc/consensus-config.yml", "path to config file") + flagVersion = flag.Bool("v", 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) + + // open config file + conf, err := config.NewFromFile(*flagConfigFile) + if err != nil { + log.Fatal("can't open config file", zap.Error(err)) + } + + // bootstrap components + a.Register(conf) + 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())) + + if err := testClient(a.MustComponent(consensusclient.CName).(consensusclient.Service)); err != nil { + log.Fatal("test error", zap.Error(err)) + } else { + log.Info("test success!") + } + + // 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(account.New()). + Register(secure.New()). + Register(nodeconf.New()). + Register(dialer.New()). + Register(pool.New()). + Register(consensusclient.New()) +} + +func testClient(service consensusclient.Service) (err error) { + if err = testCreateLogAndRecord(service); err != nil { + return err + } + if err = testStream(service); err != nil { + return err + } + return +} + +func testCreateLogAndRecord(service consensusclient.Service) (err error) { + ctx := context.Background() + + // create log + newLogId := []byte(bson.NewObjectId()) + st := time.Now() + lastRecId := []byte(bson.NewObjectId()) + err = service.AddLog(ctx, &consensusproto.Log{ + Id: newLogId, + Records: []*consensusproto.Record{ + { + Id: lastRecId, + Payload: []byte("test"), + CreatedUnix: uint64(time.Now().Unix()), + }, + }, + }) + if err != nil { + return err + } + log.Info("log created", zap.String("id", bson.ObjectId(newLogId).Hex()), zap.Duration("dur", time.Since(st))) + + // create log with same id + st = time.Now() + + err = service.AddLog(ctx, &consensusproto.Log{ + Id: newLogId, + Records: []*consensusproto.Record{ + { + Id: lastRecId, + Payload: []byte("test"), + CreatedUnix: uint64(time.Now().Unix()), + }, + }, + }) + if err != consensuserrs.ErrLogExists { + return fmt.Errorf("unexpected error: '%v' want LogExists", zap.Error(err)) + } + err = nil + log.Info("log duplicate checked", zap.Duration("dur", time.Since(st))) + + // create record + st = time.Now() + recId := []byte(bson.NewObjectId()) + err = service.AddRecord(ctx, newLogId, &consensusproto.Record{ + Id: []byte(bson.NewObjectId()), + PrevId: lastRecId, + CreatedUnix: uint64(time.Now().Unix()), + }) + if err != nil { + return err + } + lastRecId = recId + log.Info("record created", zap.String("id", bson.ObjectId(lastRecId).Hex()), zap.Duration("dur", time.Since(st))) + + // record conflict + st = time.Now() + err = service.AddRecord(ctx, newLogId, &consensusproto.Record{ + Id: []byte(bson.NewObjectId()), + PrevId: []byte(bson.NewObjectId()), + CreatedUnix: uint64(time.Now().Unix()), + }) + if err != consensuserrs.ErrConflict { + return fmt.Errorf("unexpected error: '%v' want Conflict", zap.Error(err)) + } + err = nil + log.Info("conflict record checked", zap.Duration("dur", time.Since(st))) + + return +} + +func testStream(service consensusclient.Service) (err error) { + ctx := context.Background() + + // create log + newLogId := []byte(bson.NewObjectId()) + st := time.Now() + lastRecId := []byte(bson.NewObjectId()) + err = service.AddLog(ctx, &consensusproto.Log{ + Id: newLogId, + Records: []*consensusproto.Record{ + { + Id: lastRecId, + Payload: []byte("test"), + CreatedUnix: uint64(time.Now().Unix()), + }, + }, + }) + if err != nil { + return err + } + log.Info("log created", zap.String("id", bson.ObjectId(newLogId).Hex()), zap.Duration("dur", time.Since(st))) + + stream, err := service.WatchLog(ctx, newLogId) + if err != nil { + return err + } + defer stream.Close() + sr := readStream(stream) + for i := 0; i < 10; i++ { + st = time.Now() + recId := []byte(bson.NewObjectId()) + err = service.AddRecord(ctx, newLogId, &consensusproto.Record{ + Id: recId, + PrevId: lastRecId, + CreatedUnix: uint64(time.Now().Unix()), + }) + if err != nil { + return err + } + lastRecId = recId + log.Info("record created", zap.String("id", bson.ObjectId(lastRecId).Hex()), zap.Duration("dur", time.Since(st))) + } + fmt.Println(sr.log.Records) + return nil +} + +func readStream(stream consensusproto.DRPCConsensus_WatchLogClient) *streamReader { + sr := &streamReader{stream: stream} + go sr.read() + return sr +} + +type streamReader struct { + stream consensusproto.DRPCConsensus_WatchLogClient + log *consensusproto.Log +} + +func (sr *streamReader) read() { + for { + event, err := sr.stream.Recv() + if err != nil { + return + } + fmt.Println("received event", event) + if sr.log == nil { + sr.log = &consensusproto.Log{ + Id: event.LogId, + Records: event.Records, + } + } else { + sr.log.Records = append(event.Records, sr.log.Records...) + } + } +} diff --git a/cmd/nodesgen/gen.go b/cmd/nodesgen/gen.go index 5dcb42fa..51db1459 100644 --- a/cmd/nodesgen/gen.go +++ b/cmd/nodesgen/gen.go @@ -52,8 +52,10 @@ func main() { configs = append(configs, cfg) node := config.Node{ - PeerId: cfg.Account.PeerId, - Address: cfg.GrpcServer.ListenAddrs[0], + PeerId: cfg.Account.PeerId, + Address: cfg.GrpcServer.ListenAddrs[0], + SigningKey: cfg.Account.SigningKey, + EncryptionKey: cfg.Account.EncryptionKey, } nodes = append(nodes, node) } @@ -67,9 +69,11 @@ func main() { consConfigs = append(consConfigs, cfg) node := config.Node{ - PeerId: cfg.Account.PeerId, - Address: cfg.GrpcServer.ListenAddrs[0], - IsConsensus: true, + PeerId: cfg.Account.PeerId, + Address: cfg.GrpcServer.ListenAddrs[0], + SigningKey: cfg.Account.SigningKey, + EncryptionKey: cfg.Account.EncryptionKey, + IsConsensus: true, } nodes = append(nodes, node) } diff --git a/common/net/pool/pool.go b/common/net/pool/pool.go index d4e21bf4..4b7c4c45 100644 --- a/common/net/pool/pool.go +++ b/common/net/pool/pool.go @@ -30,21 +30,26 @@ func New() Pool { type Pool interface { // Get lookups to peer in existing connections or creates and cache new one Get(ctx context.Context, id string) (peer.Peer, error) + // Dial creates new connection to peer and not use cache + Dial(ctx context.Context, id string) (peer.Peer, error) // GetOneOf searches at least one existing connection in cache or creates a new one from a randomly selected id from given list GetOneOf(ctx context.Context, peerIds []string) (peer.Peer, error) + DialOneOf(ctx context.Context, peerIds []string) (peer.Peer, error) + app.ComponentRunnable } type pool struct { - cache ocache.OCache + cache ocache.OCache + dialer dialer.Dialer } func (p *pool) Init(a *app.App) (err error) { - dialer := a.MustComponent(dialer.CName).(dialer.Dialer) + p.dialer = a.MustComponent(dialer.CName).(dialer.Dialer) p.cache = ocache.New( func(ctx context.Context, id string) (value ocache.Object, err error) { - return dialer.Dial(ctx, id) + return p.dialer.Dial(ctx, id) }, ocache.WithLogger(log.Sugar()), ocache.WithGCPeriod(time.Minute), @@ -77,6 +82,10 @@ func (p *pool) Get(ctx context.Context, id string) (peer.Peer, error) { return p.Get(ctx, id) } +func (p *pool) Dial(ctx context.Context, id string) (peer.Peer, error) { + return p.dialer.Dial(ctx, id) +} + func (p *pool) GetOneOf(ctx context.Context, peerIds []string) (peer.Peer, error) { // finding existing connection for _, peerId := range peerIds { @@ -102,6 +111,20 @@ func (p *pool) GetOneOf(ctx context.Context, peerIds []string) (peer.Peer, error return nil, ErrUnableToConnect } +func (p *pool) DialOneOf(ctx context.Context, peerIds []string) (peer.Peer, error) { + // shuffle ids for better consistency + rand.Shuffle(len(peerIds), func(i, j int) { + peerIds[i], peerIds[j] = peerIds[j], peerIds[i] + }) + // connecting + for _, peerId := range peerIds { + if v, err := p.dialer.Dial(ctx, peerId); err == nil { + return v.(peer.Peer), nil + } + } + return nil, ErrUnableToConnect +} + func (p *pool) Close(ctx context.Context) (err error) { return p.cache.Close() } diff --git a/consensus/consensusclient/client.go b/consensus/consensusclient/client.go index df277ca5..0344734b 100644 --- a/consensus/consensusclient/client.go +++ b/consensus/consensusclient/client.go @@ -2,15 +2,12 @@ package consensusclient import ( "context" - "fmt" "github.com/anytypeio/go-anytype-infrastructure-experiments/app" "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" + "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/consensus/consensusproto" - "go.uber.org/zap" - "math/rand" - "sync" ) const CName = "consensus.client" @@ -31,8 +28,6 @@ type Service interface { type service struct { pool pool.Pool nodeconf nodeconf.Service - client consensusproto.DRPCConsensusClient - mu sync.Mutex } func (s *service) Init(a *app.App) (err error) { @@ -46,27 +41,19 @@ func (s *service) Name() (name string) { } func (s *service) getClient(ctx context.Context) (consensusproto.DRPCConsensusClient, error) { - s.mu.Lock() - defer s.mu.Unlock() - if s.client != nil { - return s.client, nil + peer, err := s.pool.GetOneOf(ctx, s.nodeconf.ConsensusPeers()) + if err != nil { + return nil, err } - peers := s.nodeconf.ConsensusPeers() - rand.Shuffle(len(peers), func(i, j int) { - peers[i], peers[j] = peers[j], peers[i] - }) + return consensusproto.NewDRPCConsensusClient(peer), nil +} - for _, peerId := range peers { - peer, err := s.pool.Get(ctx, peerId) - if err != nil { - log.Warn("can't connect to peer", zap.String("peerId", peerId), zap.Error(err)) - continue - } else { - s.client = consensusproto.NewDRPCConsensusClient(peer) - return s.client, nil - } +func (s *service) dialClient(ctx context.Context) (consensusproto.DRPCConsensusClient, error) { + peer, err := s.pool.DialOneOf(ctx, s.nodeconf.ConsensusPeers()) + if err != nil { + return nil, err } - return nil, fmt.Errorf("unable to connect any consensus node") + return consensusproto.NewDRPCConsensusClient(peer), nil } func (s *service) AddLog(ctx context.Context, clog *consensusproto.Log) (err error) { @@ -74,9 +61,11 @@ func (s *service) AddLog(ctx context.Context, clog *consensusproto.Log) (err err if err != nil { return } - _, err = cl.AddLog(ctx, &consensusproto.AddLogRequest{ + if _, err = cl.AddLog(ctx, &consensusproto.AddLogRequest{ Log: clog, - }) + }); err != nil { + return rpcerr.Unwrap(err) + } return } @@ -85,19 +74,24 @@ func (s *service) AddRecord(ctx context.Context, logId []byte, clog *consensuspr if err != nil { return } - _, err = cl.AddRecord(ctx, &consensusproto.AddRecordRequest{ + if _, err = cl.AddRecord(ctx, &consensusproto.AddRecordRequest{ LogId: logId, Record: clog, - }) + }); err != nil { + return rpcerr.Unwrap(err) + } return } func (s *service) WatchLog(ctx context.Context, logId []byte) (stream consensusproto.DRPCConsensus_WatchLogClient, err error) { - cl, err := s.getClient(ctx) + cl, err := s.dialClient(ctx) if err != nil { return } - return cl.WatchLog(ctx, &consensusproto.WatchLogRequest{ + if stream, err = cl.WatchLog(ctx, &consensusproto.WatchLogRequest{ LogId: logId, - }) + }); err != nil { + return nil, rpcerr.Unwrap(err) + } + return } diff --git a/consensus/consensusrpc/consensrpc.go b/consensus/consensusrpc/consensrpc.go index 6d502364..ecf458a7 100644 --- a/consensus/consensusrpc/consensrpc.go +++ b/consensus/consensusrpc/consensrpc.go @@ -61,6 +61,7 @@ func (c *consensusRpc) WatchLog(req *consensusproto.WatchLogRequest, rpcStream c }); err != nil { return err } + logSent = true } else { recs := stream.WaitRecords() if len(recs) == 0 { diff --git a/etc/configs/cons1.yml b/etc/configs/cons1.yml index e75afc05..f77921a0 100755 --- a/etc/configs/cons1.yml +++ b/etc/configs/cons1.yml @@ -3,9 +3,9 @@ grpcServer: - 127.0.0.1:4530 tls: false account: - peerId: 12D3KooWKZcPNMmMqi6PZFjUkZqrFXXUYLpzoHBjbHLPojkuj4xp - signingKey: gnmy5mbz+c/TYLEFCa7dgPei1Z94GNEuj7XYutkAVreQzTur/0eA8JfYkWlIDLIMyzqS3pm4PtxG90/L3lKlQQ== - encryptionKey: MIIEogIBAAKCAQEAuxeAfwwc7aJeecn15nSuunXSUdVsaVsyTdxf7R1mc2Rux0CH7wbX0xL+UZVfMQ7hkPSp7rI4kP5T9iq+9gcMVgU6CjlBBJpv7KbbShRn1+71DqdJpfJYJNCawy8nu3YQrS0i15gOE7Pd5G3PZ44dtW8kh+Tq6qC7Am/e5Cd+CRgOxcBQnRQID5HTe18LF2jsx0CuvH/RUZDDdvtRVmxJYKVyWAXXOEKIn8lgdLM3bf5SzzDI2Mf1x50pLBNFBLD0MQJ8IRQ8S426C8SY1WJfyUzVinqmO/w16R67+Lj4qseE+TTmLprVWUgm3CdxzzrGebGU71QrTQc9TUr6tWDbDwIDAQABAoIBAEJevv3S/Twr2poX1Dzx7b5F59uR+8iQSpMmd301bc/HtCjJMq/P3KaLWV71v3Q21DxJHzOHU9vT7VMprN64d17YsdNIplEMvGHWe3qXLJOEuLh/DfhptW0x94UAaHbvFlFo7rBOx8ejijbr4aTZ3J4tlGcFBXVAmbbumsKTY/mzTH4H5zXDoSw2IVWkRP3UogKK3Jmee0fHm7XW5Ue68P2Bv6wCTfF6RGAZTxlX4x9X27OtZMsVPIooLUiUL7sBXXeqSupYIchc/o4ztv7CslNnGF7b6wc48HBkfcB4aoM/RIAXQG58aWFofMXpYEl7Ulk7FUUMXqlKwOrCcteAkhECgYEAzFIQH94N1+E8edQ6vlMvSXQaJvHYrEhQNWGLecLndYi5XCc0AtvR+wdQnGR+lDu1lbcm3h0e1E/G0LHDxkiJndKLrRD5L1JVOyd7I22dTrUAOYNsshygpqiYyt2CENCmEbz9eXZD0a9klqTEABvQVOdNUM5FXXAk6e/gX6i9PlkCgYEA6mnco9x4TysXv1VERP3RaFBPn21rgkxguXO4Jsi70hZ1NR+4L1aXI1ggKAbsXZ0rmjn5aru59cVvv8msnRRt+u5zFKWX8xpKM96+zZbKhv9XGw22jwmy7Sbx5PB3kFPZ5ud6EeQwNlQJLPqSYgAaL0c2mNkaerAQVtmNj0dmx6cCgYAjy/TbQHI4clPAHHi2Q6izO84hKJoHhRvYXmCrUoRuySeAh7XLEmw1iNCMteafXd6wfkgm/f8av2dbxOlB4g+KQQsLpT+jFM+t73rZeCjpUzjY2re+dNmImV07nZdeDtApp2zZTOkQ4aPD6NYWFslnNqcLEzh/6FfvTIGJAO028QKBgGdmArkUyszBCVyQU+jKvM/yfOyp6z4ySogDDzusV4y380NXlnrrCwfAG48MXr58UXtaDzaRT9mlGUHTx5wSIuEIxSJaWMgW1JxEqI0u8m7Ruq5oQhqeAJqzDwgZOeQj2H4NpL63lLyiHNoGPQOVX/dyxhZtzUxI1Sw6EkMdD60JAoGAJN9/rjBKpDG09HRwLA+ize4/+KAk0DLUwd5SoLJozUgw6r0J1eGPXAo9fj6fIKF3m6cW6I/MPX2R+MZ5eQJa82WzFKuwX0IFQvmpegQRGUa5fv8acqIWnhu6jq5MWOLGJfLhFTChscIIUT6I8rz9k57XCyvrIT65Cz8Y4HpggiU= + peerId: 12D3KooWB2Xvsa8RrmdhcBTJMoogqPu43tWZ3XUwXMowcCuMjHjo + signingKey: zsY2jhPHbfMKIKfXGh+PsNBhCLD//dmJtBNMhG3m1OIR+bF4a7B5Wid8eBRm6vtCbOJzoxhJZjRYk1vEHuhmgg== + encryptionKey: MIIEpQIBAAKCAQEA4mbDvFUlpfiRkfnW22C0XvpAfB0m1G7vGcDWfNfgMmf8xD1rknWAGNZi2Ek3rjt9uVuL3DnlLEjGf0HrhsNm/VUI3nId72zgqTZd8fHbA+6h2ba9wP1t+IUf456k41bgljD09HxpvEKtHO1OWQGnVFMc5gqMeM7uovZS+NbXvG5RJoVgG/Ugw6BgEmj0e0LDmvvn2FRvmzst77EPQKlp43J4Vl0n7OtvBypLd/KA0dtB3Nl5rjcewFpSbUadhzJMnw38mtj/jwJsvvwUnzKuv6O6ZK1uqW8bFXKN5OmP8gw+EkZo/GX5IuyHdQwjYWKTAuWn/bYXbwsXAqYEtEW+XQIDAQABAoIBADCbC27FgP2u7eG/F6eljVPOukVrJMj6wA5xXhsTZaistpGS9iNNYqDydeolXfTkBMvkoZQ4QcFOJn9vsZcPIG9G8E6BhXe/kkQBzg2BdRnVA55wIzDpt9BhFEWT66Z7ImBcRlqu0yx9zBinwehN+JSb+1pP7XSKSKVn6MxPo6VqSlP4xRN8rQrq8sVvIt1eVH01rxhGBRM/gpoPtIXlf9cYRoa/49c1/Hk3YmE+oYG+oWzoBIsIDS8qEKfEzIrHTB8d0DmLW38xInTqwNgcp6GpoK9mDBhPcb6vZpd0uWx8pwqJ4cYQTJ/ksOrq67T6yyMaJn8WRJflg1taFD9ONoECgYEA9B7LsEXHRMzEAM1YKqxoiOm8UVfv+qdsLUBoeJb81fdgb8YjXq0KhD7+hGhfCogIWuCygXOYCd8srzZxlkSCK3S2F6R5xlsZY7TwSd2LvH4821T8dX/h+mYoe7dbrE2PjWuZL9PwSOLGfEYS7BS7vwl3Qd58sF5/hVX2Rg9V4tECgYEA7Ws7CEt3ic3i7YuzAdaw22WOHGETwb9cV5cwKRnvbhpIcU9fQa291+kIhgV6TaJuAmUJbnB3jwRYG3wEurRodlh8g6HYyCFzB9ZjKuG4av1wlLw8pTSMngH7Vlsy+OiItQhUSB14AUAD9+d4mq5P2uPm0aqw8qbU8Z4tZ6Xyjc0CgYEA4ULRfdTFrcytSHgzVR1GUKAt73mPreFzxsXaIPxiTiY4zKsu1Bwkyic+wHt2x8cCvqj8zssVjnZrSzqX0ath2iuWI3bYD5rccM7zs5VFbiemjFV9qAbbRS2jSZXGd9YSEtMoxaNx5C+uK9qVd1cib4OSkit1L2HjleveloNsIyECgYEA25APR9yC8C43bveC1HB3nm6MvjII02TlQRvQrjIN+wTTefatYVAMAWDBQTBPqvxMQGqwDjJ0Xw7lbIWE2iV9dfTfMdy7XlmQx+68Ryv4IPnA48wxSZcPdBDhHzu4J/jkdIb/arHWCVHqWZj3MBWERCn/jGcOvVkMFWbzFqehaQECgYEAl9saSHtsYYbhEX/PMLbecJtJU2WEOkML0QpyZyzF3Y0FnWpjlY4HV5RUsEOksAjbaAxbF7Xk8NZCjmqdR6+WdHt+3CQl+964vkvBIGWYXyo5/zso5HxzTpZTN8I03Xk09nMfn72lPKq6dWRD1EVBPX0TfOzg1xL7ftng7BR+bx0= mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons2.yml b/etc/configs/cons2.yml index 0ea4662c..e1aad499 100755 --- a/etc/configs/cons2.yml +++ b/etc/configs/cons2.yml @@ -3,9 +3,9 @@ grpcServer: - 127.0.0.1:4531 tls: false account: - peerId: 12D3KooWGVroVVTuhc7GcnYZ3T9RmvuB4LWwqQRgvEMWQWPQqTy8 - signingKey: FGi5NwOrRlQAwGuwwi6rwAqAGD4FRGJExr0y+kc2LJpjRCYyLSau5CL2DiFYB+0Qx8+Qq+y2jxkvEjivGEqpzw== - encryptionKey: MIIEpAIBAAKCAQEAzn1d/3riBKfsBbp7zswhj5kHqsFP8ipq614bGdXrB8TyckbCVyfGe7Cgn9443drOr2SpIGgU/HCnxV3IcYYb8jLTfEh8Rfmo0BNhDAgnfGCjsOWxc/h7WRvWCTaQiOqEaN3A2ohA0eE/6lhXSGVJ0YAtOdyuwGFRKxoP4K/DGR4D9Bus04dCzi4bUhQsa02vxvsR35qAtNxJ2gEMGtAnKOeiQBpPt7+uWmNs7eu9CoxvodCQdAwJo66nmorXKYlzFcdDuMdiczJgizXPUMuYB++HBCSjzqFeTSa61IQtwPL3Is0mGhl81sDaN4HE3Q5E5C3zxeJ6vtMnLlddPmBJ4QIDAQABAoIBADLLAelLV/efOt653aSj8Al7sjgdr0W5i210S6RSS6swlhboMvvva9KXQxuwNTrVjQv17ehr0eW67HoPNLRAMfWk7QLgbblkzVLJwZCNHPFqcDmedsU5NVZZE5BWnL0hOwr0qXDYHWHDT86chnPnfn4LUpSuJUprZeT9VzSE56/wkhkm02uB1Nm0MDgQqIToryqWOlgFDtT4vgA4W6apASZRoPb6eT714SdyEggZ/L8Vozw/wiUkZT9EIOrMXMjU/4Laa6Z4SNL27tW5fCxMVOLpapHzc0/2KpnWWEsfB5VIxAyNpce+iTBbzWQQEi8f4NPKkEpsYMmxHWPnk3D+HPUCgYEA5yDhIQT9JJROgCo4G3OqpEqpaC6if1HBWSC5eEL+G9ZHajvGVBBLhRE1fcTtnb77mUVY3UrFkxTlfMnzhloX4xqLPUURN+eyx1UxbJkEt3NI62FH3YhhwnR3JPzA4POks5tmlEwXGQXIojFxCinzFkXaSV1pxnv03d/bTzXQNCsCgYEA5LW9rF8G3W1zZs++dPRAUXreHyq6wku4jIGZVE6nwlFTxLgY+D+5ZVaobJvR6j1Aetzrlc0FMMVb7SuQCI28ajSYAm+luc8657oJoKs5RfAxlM1PHx2u/1WAuL1NRPPLBuT0OpoXx/0JV2N+0h6QhP6ZufyKgI4b3gmZHAvfeCMCgYAtl87RNKq7DIZvweRPhgGjZxcD9i8X7oi1jD8J+i0mUJ7F1gTJkG1VUo+6v54gAAyhr4xYGufem8CpXS0s05jis9nDvFwpKwuZRrT5NzY2+gboZ8hFayHduhvGsBVcSrOyunUBzADCbuGlHRuvZZcOTblBv6ud+9XR7tbUSUlJAQKBgQCwf9CwhWU23JCCdy/z8crxFnD0fHVEHEt/o0RA27J7M2gCGFCsxAC/Q/EWX+nPaxWnu3XTVTT8PlKC5WtyLm+JRq1ItAChNFuxGND1PS4l2wdoXkkBKlcylTmRWAWZgMrdtzMDRoezvoLG/fGRFiVRfWoFLe905jZ7U8zk6AS9IQKBgQC4MjddDxyPulCHigqz4jexS5Rt8yhMxuG+4dZEOdlBmeq1OceGzJVmQNlermuKABXPdvilZmr8FxkvhtKQUy4cXf4ZNZzasLeoSdJ5jputkqZRG8AoH3HJSqNUwH7ckIZESLuHWLoppCw+dNloPxqhecHTkStor2mfFk+/GD9hJA== + peerId: 12D3KooWHSSHxDymTrGQjTHSATFxWnnz4incxYazKukgBia3xPAm + signingKey: uN55hCvFWVBlFcptEca/PlCJBVvMPmCvB9WnWHHGMftxP2GGPEVntjpeS2aRrcHvfvf0WfjAP47CQdr+V8yD5g== + encryptionKey: MIIEowIBAAKCAQEAuQvwreiIbcoASka0Be0nvdQfU/ZGzIjONzfHCaGWqIfxjqsIG2I55X+3j8kIZZBl+oMIGzk3amZq1KWNGKsRhuDdsHKSaSAnFqPIYYfiAkp5evsBCFzWkMaB2xelDkNzYGAyTemvsnjyp3wlJjrdoJrwW5kNojz84B0NQZjn81O8BH1HOibzXIoO65oBduWGwj5zaqboEe33VFowxRJxXG+RHnOCY4XRoZ40wx32t4LefsDcMbfaNaYEt7av5uzkh/+X9AWNw6VmYKimVv2KAyYwJ5Q+ZkCyASPO9ShBdMfaiR1hETQExVPtBQB3876e0IzW/+j5o1WGu1KPk1t2kwIDAQABAoIBAHvnHM61hrRMr4kMcnoNY7DdmeR0YM+PQtUCSgmO4vwRmpK2voTnbnDW5agnKbInz8C/f+wKkapyzVF5UFKWKPQxGP+Ol65AUyv7mq6Dd7ek+lZ4PybEUv85i7WRzXkRfO2pO8WjlXthNMkkfRNuEvv5AruybciWIZRGn5uusJDh+rMI382z6b00/U7r0igj4g5o1KqT1wYxba2VT4CaSeqNEMbdOcGWDjHx7zIanHvMrRtRG4DgYIY11ohnARU8UUI/wL5WG9iVaeuepq8T1G3vLt+096UwE/GYIhwQ0UUf+HS4HviACcMWJeXbKas64twtUA0Pf0JFCxPnM/QTBtECgYEA0Zpurv8M2P/atqODGG2teKseJqz4nB9vYLbAQfpziv0OyvRQ26r72pjtBwIDxv67fVSL3/HlViBGElMGycrA/XZ1cTiXY2LAcfpnu2P/Q7vUE/n5NBg4C1Cqjgb7D4dFXOTOM182HFL5SSQiUv5jMRvqxZTX5NcxBj3wbuHt0v0CgYEA4gH1755EWtS6q8+UUdLNAM+TL1SKaMcfiGAMdMWL5uSJBQ28fFPZIZv14gTzaU+Zji3AsGXiBpgtwor4rEugmX+nL7FATIaS0rh15hjXEvczg0SyZBkiXygo9WSQFQ/1AuHmQ8dNgNHXuSv9VbQeu52xhr74saii2tCzTOfyDM8CgYBQHA4hpCls5pzZITWBqKmcbQphDcsXIIyZEj/495ghjwaQW0BsNLV9nuU4wHRhIgrWo/Gx7eoRONSPPFxj07JfLV9FnrN9sMiMx3/OBzIQ2UD9QZUVbAw/ht0o21IpZTIFhw2oZMNxn+TXJ5BW2BNhOaJJUdISDI0YLaQvPPqAoQKBgQCBXY/xtYz41PV47NvALkKL6UUdfW2wZfIltJzMplrbMgtAKkmufKw3sbb/xceyiw6hNI0sK1VCYw8mYTfQH4Xw9wGyqendI9ac6VsK90L8pyUESWk3JK/o+erf880JUVX0bWvJdiZlyzeI1aYvzWceCziXoW5m+tklGPrY1ZdWPwKBgEYm3cThyIi1MScjR7lBKPKUKfkmN88ZoNnzfcn1Mgzwpo9alTycyT9otC/wBGIf4WhRmDoCYE7htIA0C0j8YlmYhd8+gEuRnWFn8Gx8ecpSmUIIpZINeV/t9YFSbod6OnYJosxwLJGzHpb6FN4ojpO5lq7iPWN4v/dtd/p/Bfoi mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/cons3.yml b/etc/configs/cons3.yml index 1cf1613d..e750b653 100755 --- a/etc/configs/cons3.yml +++ b/etc/configs/cons3.yml @@ -3,9 +3,9 @@ grpcServer: - 127.0.0.1:4532 tls: false account: - peerId: 12D3KooWDLvgBnuUnuLea8QZBEA8MSffmWoNj8JFto3N5AqUDV44 - signingKey: AiP/yP1JWKJvZrxLMA9nnOwvRS8fF3x4ULqipTr6QXI0Zz3Vy90Mqrh05XKzMvN0tf1da7p2NsJHnPSFSpBUcQ== - encryptionKey: MIIEogIBAAKCAQEApCTKugLFti+G1B0hEARjyJPzq/tBe92EJVsY1zCgejBf8AGYu63hfirerSRaHXHbwicuDiQguBE3JiDHsaw213H2TfYNh0QVogVSHaOT8v9Gsd+rjrN24IQT496FUb2g+EEM6/1OgmxjCbmJMUKQgEBIMeciKXr7TIMhKXL6927smOBB39dKqiMxjT3FgKkw+mZFbFgXtTKdjEHQlFF7NC+ht3enN8aesb2O1RDfjf9bVWywrqzITk/fC8OS5k7Is0UZUcKpK7VUasDe6/1jqTfWW0nL+NK14w5GUtAV0j2PY44gdmhAMMdrn0ejR+r2uO8ARpsjyssqd56VKN2c1QIDAQABAoIBABCs9DOFiJSDq4ztEKjR6Vk9PqogMnzk+kHZSWLDO+pt87EsWFnoxlnM/SZV5RnMsWi+Fj21ieVpSlMDTYZNWpz0pPMyphkx34jARaFhNuye5o23jXRH4zHX+TVTK/Qr8aiG40suRsWVQVKBmOB6RLfiz/LR6nSQW+tf/wR4++obHxyikuT4BltgxRHJBS7jSElZ8e2ZAvV7UyWe+72+EF7UPxh5mOe2oE2IhUWFZFHxkf15Z1adfidfGM6PK6GjvaIVLOt4NuQmI/uqDLakz5by8DBhPiSWbQlE4eJ+b7YAyCfv1hG3oZ/M1k0yZYmWlCD5ukn//+cgBvqaVHvFDpkCgYEA1IZ6zw18Wy+TrJizTydnoLya8WCLp+UrwNQSQPC7tIIRtoB/BYs9gh5ecG7C6tPAdmnRGeJFWaLzyCDkGMlXtM9qnA0KFl3fmmXhsYtPqlBRtLR/emrXIEZrylj8WEmFOEbpkHC42LttD06lpe6OUnWvQydoIG09zFYFOzbySlMCgYEAxbiqhdVlV8cvwv3/AWMohprB5bZTmwLsdhk6gWJ1Ue1iDhl97EsfEOF4Y0zm6oZ/CAYB/RMeu3WO/Y2/erJ7mrPWOKYcEXG+9YwPiGaKkl5C+5y8/qm4xdcBQfC9ldY3X3dilQmyC0b27M8Hi9hla0wFZmOhD4yeIL2n1/rvJzcCgYA0Dcw+sprm6rxM5gnlNU2YfRmmTXNnaCZTUJ438b7H86PLA6YZAYXLPQz8lOSBB+R4HGru4BEEZ3k2Z3f26jnlO3htSHRUDiIaeyHQjsKwgIPCswMWRNz0NstoAGuuZDORGS1UB4f+7clEmorQHaIWaGTJGfnTF26vgdI+MrMdqQKBgBjBzKhBVhUtna9eumVkExj3m7u1nrZUIWOQOSEmQOZnQNXfH0NNDLDCap6UbH2FJbbNecZEdJ6oU6Uv8H/ehVeTmQky02TjxzNbvD4qCMPXBbAXqhqBCd/L0h59lF+EmR5dBnz+38pFsnloWtuJ1vkeZbayVuJpiwsydCe5BeT1AoGASfF5izXCmHYXkVwk+8qzJ70cWmtslBwgbvamK9xegRYuIMzIyLFJWsvJwRTCz/IJ2faOcyHQKRVIkQ6RAzOnT+JqalrBe36zAGS+ozWtTLXOXc5iAyEVPHdRUUmWFLLfijH4lmdxpOHR1IGNX474kvThatgiyHSJHtgHuiPLIz4= + peerId: 12D3KooWCm6fXRReUtpD4bQyy3EnzEe7htRGCAvzHw5yewb1SbRS + signingKey: 31nl1dejInkuEbwBf7NyEp7t6adkMOyCMMzq9ub+XQgrvMnFxeIOso/c38RWo08lSMpZLltC2yS88/EkNIWveQ== + encryptionKey: MIIEowIBAAKCAQEA3dSgJsWNz3zusneGYIjufkXe4byl+RGZNE2dUWEwPqlsjyFXLFmBQwU6UMAOvgEGLuNY2HWVLKzWsqccLqkMjEo3ZQSTft1kf3x3TFlFpPFtGI0lL59b37K3zJ6sdY65PPskhXqy4ru/oTjJh4F13qE40x9bVSrmVnllrEzlyG2kR7KOiHWmufChtvTHA6Nv4x8sevsKzwIXOMMdbKb67aw6jWic94gI8lf+KN7UHYAMKA5MvwwvvH4hadUubMH810jtpiD720dkKRYkgLviLuxhOhRn+s2UY+Dl9vDplBO5tfn0ZnU77q0OrF1qAhwPiuy0yq08ykhL4NrKiLjGdwIDAQABAoIBAHQjxlWGSODBABfgDDKufm8OFcsKAbuNQzDnEd5xi9jCy1uEkSdfFRYJvqZYZ1+DGcGitfleVmO1ehK++zpSt4cbtDTnWHGrZ9p3R95pPtVEsWGRRE7SmD9eSmyPBqvltYX/1vcrbkzXD1VRbfHMDfIpZp7iY+cLNt0/YcP73rI3+4U+4DXsPmaf4jtCBpUH0ru59aCJTJWvYFiVsapWdJY+BcAerpV7QH74dVQ3XNIWRCxsG4+S9cfi5uuenHqM3MmCz8jOpTQeepg64aSNmFsTVEeoNXfQ+78ELUIXEWBpDoWWNVTQxoy3edPThuDgEbw0KHP+z6C63ztP552kB0ECgYEA9pKCvigZyrbn/gmFha0FVEfGWkv8SGHkm3LctnOHj3fyfezKmp1bq44bBFhw+p12qN6NmpZIpMh91X/vDcmNJTAQz9ty14pB0Dlq/egV/AffjtUjYb4UzxiV3EmH97BB9rK9B4VkSdPY1FbOtAEyt6cWoYTUwwrHKzTbhOhAn2sCgYEA5k/wU0uN57BwXrcDNP10zkjxbpsoNEINBj+eGpKjZaKXU7XkgoezgzeGa04Ym6crLxmhlXtSojXFkqeLdhn5hJSKPJ+JsAZD9gM0iZ9Hb8l9/opzlSEJzMFLyCdCeu+9Hipq3OuGkJgRemn9h9UMih1zUTo2RwRdfpLvUEUANCUCgYB90AQmQw/l/64gUXtv2fj+KCFtsZfo1wpuxw0Xi5t/+RQibNB0VBaSUtA2R2pedjo1sFlQp54pdqO+bKjtwAnlD8GETdUrZcBvHt0Y8XNGRj4sA1UqanLzuPe+j0Zxe94soscRL18czJu2vRR7hKD8VKWXhM+LNdSqly3rgxZ2QQKBgFJ6okhSMHmeuD9TLzTU5/XQLZY8voMofF2WftppVVbaiXMTGsicLG97fQoEp89maJKvjSxpQ8iPlTfWBJ3A45jVUUQwpjCBrej2cOQwRHcGI7b6gjYP5OCNAMSnOqmoHYQmEKsZNdGmg+vg9UilxZ3YuimGvVVlfM4NdOK8Mzx5AoGBAKKtLvw/rpL+ZLSlO5CTycjBlY8Uy0/SkTI9T/gvwPm7zMdZW0AN7HShsus6SKATba7ZXIySY+tBWfuq9oEACzvC20Qw9tQUTS90g8mwHwTcj4H58cnvmbtOFg75RYMUYvcOjpbPLvcGKsYrobjzqv9MrrL41fgMXw8DVIomqQbP mongo: connect: mongodb://localhost:27017/?w=majority database: consensus diff --git a/etc/configs/node1.yml b/etc/configs/node1.yml index e9a88618..2d15529c 100755 --- a/etc/configs/node1.yml +++ b/etc/configs/node1.yml @@ -5,26 +5,38 @@ grpcServer: - 127.0.0.1:4430 tls: false account: - peerId: 12D3KooWFVGSu8MfoUnPmUGPpJKNpxaM7mezZ98V1ERGEQbTWjnE - signingKey: b3+g3PNCtwX4YCLd+hTmqjub8R4yxCJJ9J7DJHgCw2hUQZ3tjkCDiuSfsdf2O//9jk81gVQ5ky8AHUpIxpGmzw== - encryptionKey: MIIEpAIBAAKCAQEAwDr0KIpH00tfbebj7FDGNbBWIBWxXdwD6M+P3DeAnHUkgK3kgOzkPGvI6gG7h+VzuqcSY566kgvykNd4WdBD0AUmijFi9sKbgw/TplXj2as5V84hwsAcx/DADMQqD14F/GFw54IALhaQhItYJO4eaxKspuxdrVRhJI91b3hRqlLBYgA15M4fYcoHaLSkoHTXuht2vC0qzFniXmJnR7sy2Z4qinTjGwsIo7bR42SjsBnvxx/50sowOAKQ2xjr3G7rBA3YHPxgTG6rWa4+QZabQelaKZaiMIow4ytEggRgFI/ooyvFDPy75XAQooAJCT4CfU3xv3cs3GteYrYlqyhzRwIDAQABAoIBAQCdqDxTe4YI/4pW4sUQLfdCVUttqRz889Oo/4LnhAXRTCoR94yvSJqwC16OvbkGbeOKtDfayHYQDgh1TqMAVlUnqPHA6VxXMajFxxc5Frx2631uTDtYNKPmP8fjMIembuDN60TkOrTXF96TNo2mTD1aZ8h+ZuE1pTy+9YHFWJLx8tvaQ4XcHNDHPuGT/HxeXqD7/COmmoxUMFccasfwlmPtb4uSHDmPl0bzFbhWholf138L/M27Nu8PMCFN6Et73gTdQar2YkAR3NTLDsXtMAEEgmOTI1cjg5nw5E8M3luloR7UoBfDybhnYpN2FEG9nrpSiJyglkF2PBKbvlvfvaLRAoGBAPR5c4NORx5aXCjOj2b15T/S2yFvFejciCHqljvFfe3W7ys5s1oMQlidIAIlQlEYBigjZQMQ3BRegGorlv/DI6B7cdw3JWIiqrfxls3K5guY8SRA7nYJnTozKnwdcJYldE96yG34yL1w6mKEgNDHhu5Xm+dBssO71Jg5LaDOQTD9AoGBAMlK+Iuv8DqXgVX92+RoULVkQAomeSNT3QOrtpVSaOnQOqWnHasaYdF6VM1NkOy05cRdf7nD4TNIMKNsQkGUojpG48lpd9IRldC3CDjmrqojgm0mYNpmQfj2NwWPgJyBrw1VPVc7XX76g41J9XdnAW0XU5H8qa5/8Tcn0tbjIDqTAoGBAJ0AglaJJtMvZJAwV5ffwuJCH8hQ9tkdB7AAX4rzQfREXER+QdhKlzEhdzTpiLVboFiWooBdi3jpV77XT5nhUDf4Dx9FqxRi/xAybo6rByHbjsGhkYLsmbSOt3IN1ggW9aM1TxKQ+xnuMhgi0DdEbDsUuGLDpnJdZiJ8Vfk3fFZhAoGAPMik0Rmpwyeo6Jyl4A0YAg5pwCbqAZ77aHZbxi+CeshkTU1vihGHZEg6f1xi3PerQmaxgRkDUgcEmPTB9Se67Tom4tU0V3zz7ni2xOfz6nCam/cw3AJw/YrsBoPU5G3MvIv23/aPPx7KxsmElC/IoHagx76yRn1gC7W81yLywn0CgYBiHYiEIS0DHXkjTNHV7oAyxdQN2SJ22Zu/6N1cP2sXVirss6JEKEHTzvVT1+qtTHxGyliyJaTiP4+ujNAJS0g6/U0F3v9Nba0/uGPLCI9FaYRxyMgNZAKTtImauMuSmaS93kgsz1Xm8CJhTJwvQaD5EHP4UqVe70G4UwwH10tS9w== + peerId: 12D3KooWBZFSp1MrqdQgL2uWSZpybgskz7mjrJnmhkDjudSpTUAN + signingKey: JR142BFc9/KJIy0f0BCnfMeO4Yv9InErltCuGyhvs+4Z2A9c9cGi20ECMzthOvtr90N6bq4iyfLbmhNkVMxgiw== + encryptionKey: MIIEpAIBAAKCAQEAt9WEjnITHiG0IhGdn5sGBR32Bo8qwAEZSsPhutQZnvBfTegqQwvb5LxxpfYP4C2+Wy1335fzMGtjtWyv4r2bJHX++fTh0h8xWbuMuqDlbZI79IkAhu4HFfAl6a0Ay/po4DkaBBwqHFu1oPbzKceJpb1fXXXDNO4SIMBo1CYrrI9ipJrVb0NOIbmuDUUvS6c7W8xiIudLH+lrcClpsE4f6+rVaEK188cWESmFvTFwWd0LV+1B+qP28pVRGZDcqMEeV2CoICY0daKdI9P1efPD1XbQGmafU0LlJZyww1pXT5q0yKBSdKMjspZoRbScnUmTJuhZY29cBPfqPjRiEvznjQIDAQABAoIBAQCQlI4PVepxPUKltMMKHutKJPk0yW5u2a5hndMvk9aeqR/bbuemGXKU4Bxl0TNFNdTLcuQfZystfphJvLRMGKEmuOKTBaSBFGVE1Htm4Fnwph0fQoy2kgfimh/HO3gv9L588ovihaAc84fSk8ZEqpk4T8rr/01KmJ6LQahwiaC5sig3uZgQuCGIz11xjNgavHdpytzL3qGhUPLiQAJtCEKaiFuUAEmw+dg/KH0ZHw3+/yCJ/GESwR/8yP6rfuyuLyaR1n4vr/+eH56x4922ua2XtJuz6gdqzcbPjbf2y01Q2XnwEkf6cHO6rYs+ba8BWzM8NZUeTmvLH+qY4CAMWIvBAoGBAPHuResocGdoZEDNvjUpuZlWCCRKO7goTAjFH00z6DEG0Kv37pi53/4AHshaScHLd7kQUBSH8o6Fdtf+fyZaVKdQzfSKqNVt6NglPtVTd7JhI2ddJuU6iOMBKowRk+PYnjfxjETmXMNb6FpF9ZgMc/QC6YiWZwEjooFKrhgfZWvxAoGBAMKGVY1LAoLUFwdL7DsBSf+VndN0l/ApxVjCLhT4l73HrfOEqbts0GAGRTtOA6JO2xhAvtJkcUYbStQiKyz4iPC+zG9CwMm9XNaGRAflFfcxgy1VqMQ/2TnlrwXdCLi1y+oEGcJs69O8IQACBC1m6MfEMrOOsAa3YExkxG7VBMFdAoGAIAgBH9pxz28l3uKerWFB3ohieZOOhppnPr4Cn/Ega+VQGYSxBW2Ot42ChdpWa58p0cnUIHPDbJVFH+HlKcnJ7YEoU5lMMz3jF0MPJ6VucqKj0lql/LGcUBnmbTcikocqo5OKk9DANWlkwRcEJkZ3z7XW/6uSJbd3G5EsraryfbECgYEAnaa1i09xd4pgJ3+2spN233bodEmYIgIYeLjXFBPtFtfP+P5ZeRbVQh2S2l99vnteQaenf2f8Da9s08Plbgr3IPXhRYK6MEYSCaLDXAqj5LTx9TnpDzQX3z5wvLXIrbpYyw4LunEAJ5fevtzjedBfdBdkZ/WKX8caeo9oS9LEidkCgYA9Lf6XK52LDO3uidnX7CZB9piWIV5bzrdJB6ppbJ2ywAD60NF8yecRp7fnyFRg7VCQxGkbIbv5sR9Ua/PAsBo9UFlZQGanUXpAUJi8qnDIDG2Ly6uNTwjF7s3IHC6OIn1aOSvUcgY658sXF1KfDguXv0CUs75JZ5+1djdMQAtRiQ== apiServer: port: "8080" nodes: - - peerId: 12D3KooWFVGSu8MfoUnPmUGPpJKNpxaM7mezZ98V1ERGEQbTWjnE + - peerId: 12D3KooWBZFSp1MrqdQgL2uWSZpybgskz7mjrJnmhkDjudSpTUAN address: 127.0.0.1:4430 - - peerId: 12D3KooWMPgKGCLtNkmANzwHAnymEMCggS6csXuDroUFqb63FizD + signingKey: JR142BFc9/KJIy0f0BCnfMeO4Yv9InErltCuGyhvs+4Z2A9c9cGi20ECMzthOvtr90N6bq4iyfLbmhNkVMxgiw== + encryptionKey: MIIEpAIBAAKCAQEAt9WEjnITHiG0IhGdn5sGBR32Bo8qwAEZSsPhutQZnvBfTegqQwvb5LxxpfYP4C2+Wy1335fzMGtjtWyv4r2bJHX++fTh0h8xWbuMuqDlbZI79IkAhu4HFfAl6a0Ay/po4DkaBBwqHFu1oPbzKceJpb1fXXXDNO4SIMBo1CYrrI9ipJrVb0NOIbmuDUUvS6c7W8xiIudLH+lrcClpsE4f6+rVaEK188cWESmFvTFwWd0LV+1B+qP28pVRGZDcqMEeV2CoICY0daKdI9P1efPD1XbQGmafU0LlJZyww1pXT5q0yKBSdKMjspZoRbScnUmTJuhZY29cBPfqPjRiEvznjQIDAQABAoIBAQCQlI4PVepxPUKltMMKHutKJPk0yW5u2a5hndMvk9aeqR/bbuemGXKU4Bxl0TNFNdTLcuQfZystfphJvLRMGKEmuOKTBaSBFGVE1Htm4Fnwph0fQoy2kgfimh/HO3gv9L588ovihaAc84fSk8ZEqpk4T8rr/01KmJ6LQahwiaC5sig3uZgQuCGIz11xjNgavHdpytzL3qGhUPLiQAJtCEKaiFuUAEmw+dg/KH0ZHw3+/yCJ/GESwR/8yP6rfuyuLyaR1n4vr/+eH56x4922ua2XtJuz6gdqzcbPjbf2y01Q2XnwEkf6cHO6rYs+ba8BWzM8NZUeTmvLH+qY4CAMWIvBAoGBAPHuResocGdoZEDNvjUpuZlWCCRKO7goTAjFH00z6DEG0Kv37pi53/4AHshaScHLd7kQUBSH8o6Fdtf+fyZaVKdQzfSKqNVt6NglPtVTd7JhI2ddJuU6iOMBKowRk+PYnjfxjETmXMNb6FpF9ZgMc/QC6YiWZwEjooFKrhgfZWvxAoGBAMKGVY1LAoLUFwdL7DsBSf+VndN0l/ApxVjCLhT4l73HrfOEqbts0GAGRTtOA6JO2xhAvtJkcUYbStQiKyz4iPC+zG9CwMm9XNaGRAflFfcxgy1VqMQ/2TnlrwXdCLi1y+oEGcJs69O8IQACBC1m6MfEMrOOsAa3YExkxG7VBMFdAoGAIAgBH9pxz28l3uKerWFB3ohieZOOhppnPr4Cn/Ega+VQGYSxBW2Ot42ChdpWa58p0cnUIHPDbJVFH+HlKcnJ7YEoU5lMMz3jF0MPJ6VucqKj0lql/LGcUBnmbTcikocqo5OKk9DANWlkwRcEJkZ3z7XW/6uSJbd3G5EsraryfbECgYEAnaa1i09xd4pgJ3+2spN233bodEmYIgIYeLjXFBPtFtfP+P5ZeRbVQh2S2l99vnteQaenf2f8Da9s08Plbgr3IPXhRYK6MEYSCaLDXAqj5LTx9TnpDzQX3z5wvLXIrbpYyw4LunEAJ5fevtzjedBfdBdkZ/WKX8caeo9oS9LEidkCgYA9Lf6XK52LDO3uidnX7CZB9piWIV5bzrdJB6ppbJ2ywAD60NF8yecRp7fnyFRg7VCQxGkbIbv5sR9Ua/PAsBo9UFlZQGanUXpAUJi8qnDIDG2Ly6uNTwjF7s3IHC6OIn1aOSvUcgY658sXF1KfDguXv0CUs75JZ5+1djdMQAtRiQ== + - peerId: 12D3KooWHTnHZgeyDdZJwrXweFHMrSF7YBXSuuAH9GsxhbzTvfcT address: 127.0.0.1:4431 - - peerId: 12D3KooWG7bXBK1NdyyWT4bnGUQjbe9kpVzsZSm97MQVR13zRx4M + signingKey: EVlWc7+UbqSKAvjSdBq5iZt2dpcCYhDJiWkSn2+9IrJxl5F5dTHw+eIKNV3MV/tL8ext3YPRkIue/8TvUUfpaA== + encryptionKey: MIIEpAIBAAKCAQEAwLhwWK4vZQooUjulblf4I2+f5/K9yES7/HW+1bz93ZOeeiMuKb5wmw1tVt+vrY2j5cFC/krhSWUdfRwqDvv6Z0q19v9mD7zIfad54KgVSyMcVGxWLt7haGVCr78VckO5JD+aktlEM8/12crzHOWRh+j3jgELmwSwA/LiXo2ZNH9x1Vftw5MHKksWTpvaAprFTkYUrPHvrjpiuSGzT5abGUYOgWUIzTtqZYra+zOMPzVqDAlMykmUYjVO/d/l01L3xgLZQogZ9B3NRgXpTpTJ5iF7UtUejjZSJ6fYGVNwM/TEMrIhKHD54I6FYkLmp+7Rsw2MmxVXHkQPQJ7khYY8ywIDAQABAoIBAQCv97idQG6GE4A9lbi3yBsKQCIB5+LhueDr45ccEjS63M8XNogwFXM8IEZ1zEjcbzf30T8accTC/1Ctq8m7ZNh+9/iuTwUh2X43PXRLbS4ELUrwyvrmURv/9nWtgwxSCQRD1M+OxlM/++K/uk/BUtxO/KkNQGcYZG9TK7MGIsSA6Ua0fNEo+hcTzqBsED3nGYXwmn7nX4zMjPqr6TtQfpxWdwtKYbBsDcvIoigwNPajnsdSbx2M4pZh3cwBuROKs9/HpUNOtSZvPc8BbRenJQOqXG2R+O6SMBGnYf5ycHpk7Wya+1TtGObOAcrgC7RV6y3KGzq0Thu7imWC1B7GvRQBAoGBAM9yA4EBjHSQ0sP5DTT4yD3H7ytQtR3oVZYcKiWg4lPETaFhwucFzbbhmh5gB6Xng71KiIuYuvJZi2XQeL2LcBBaZwoj9cpclJ53KuQ8LL5TPZ1zOn+xU/Iy2mumzVpaSyWcDq7ArlhuGq7JWubAEcrehBia7i26Ss9ro1HqbR+ZAoGBAO3UHnZz8gmkQrUyk6rTPJHivnow2O8nh2dWuK+o+wAN+WCF10VQVaRcUS2bC/khHeomTRNZh+kzs0woLdfEtLlxECA2+MHiIJmXkLat7/Bm8gByd9iWHRZ6d9ZRvb+DPwmbZV0mZoy+8SF5DJno0uFdq6g6tTGQKmQwu1xHeI4DAoGAOQubVxB79VoV+3ozXYvEVOj0Ji8tfynyzzKzjGFvm6Vxy508oZcA+PeVECFMOR0vJxCl9+1qC1cAdGEdstHzYSvbBfjZkGphHCqdCuJZU4VEflW/knnLIeFGGzBlbCFEZPVDPF8UEpFEmSgZ7TaILgd+v91q/fwqslthMBeNJpECgYEAzzNTyu1e/IlwWL8UqepZRdxfCMPP7CPrMtv6EYhODZEfJ7nTgB7qTkTjsLD5MHZqwpnV4rrIzyJs3jfPIMHOlhVr8DUUao5gyo+i05UciryVsFAKG9dExlWyXDVg9B4baHpLSGlxRMQB/qCgmuKd/xyFtg5X2DN6y0ktosrdvBMCgYABqwzMnDF2SPx1mZjXIOCsj/03Oya75E8ZTWGorkROhyarE1wWvES472IGsZSM7qchABmVVGxr09mL0nyNA5KIIEoIWtl59yplXKrunYYoodoXtaS0whTDraf62am98IQ1LAUdf4p1dGfkrAsf8stKuxbzYtEeXQH3EHzzLOzmNg== + - peerId: 12D3KooWE5VmEXLSksS31fWjwydNgoH9c1hMWdMdohKk1mHVVgwC address: 127.0.0.1:4432 - - peerId: 12D3KooWKZcPNMmMqi6PZFjUkZqrFXXUYLpzoHBjbHLPojkuj4xp + signingKey: BI+SqqwurrTaNCHtc9+DeItlNPh6/6gH9CrJwNXS6Ug/TwwRHloM7siXqOWvJVRUiJ8UCraYjuAnB4huLdby4w== + encryptionKey: MIIEowIBAAKCAQEAtyliO0Y/M1RHRNCRl5D+x337CVbv/Yhn5bF0+Ib5h72JDtewRLKWcqCxmNa0RhmSbUHIlO7itf9a9k8FBlQOg6SlVgRk5xET1FpGioS+yHsaiwx+KbCgP6QeDSMNLVKW/+WPXItvvZxoQV9m9TywGJzzMBF9QY3rWhMGV1s58S0PvIjficyORbMTZL2aKlcPjf8Mh/Yzo0eiPTR8+sKvguxonhUdEGfpts1Wn0rIr+BQhk9hto8okOeQkEy1LO8cHyVpk0Zm2jIq643CRd0qcfpOYGm+xz9nzEjCWZJdc/Bq5Vok03mi5050fv6nA/HcopBUnk5Jk5jLQEa/0rEXuwIDAQABAoIBADZuYfbjhVynqxZUNTApss1uLvAzmdZqdxXXir9gvT8NoHF8v7FqsTMXdi/JfoFmkBFP/1/jLhSP8mRIT2H2EOomP8w0OhhBBveQbG41zMyfaN/xsnyJNNY024lj5UKWzLD3c4c5GNfsZz8mLt6qTlrCKbMbP3H/zvVRugyz26BEFzXnXVsRo57MXwGPHzhMS2bdYsixuNz6Hwlu3brJkIgzQA740ABVzVG75DRwvdJ1w+kIskrlCa7tFnHl/mVaBQ0plFaY4Urjk3fOI6JzHA8I92FBWYinKPlBXBBeXp/vjsfsp60d5zi1/bdNqvMFL7HbwQO7yJd37UR0bV+1lIECgYEA1XhV18EICpxHQwm0svmvnE8MVUHEzzSlpXYZujQis6x0tXOdXEVqfh8EzSmBlJLj64ndIG13gVVeBIJszXTBLCgoUxrH1JXtECu47jIB2X9QPEaicfpnUlXcbNFS7RQIbyS1yvbKKmK9lJOA6TMtjMVmQ8zpAtivqhsc4LDI6RECgYEA26c4t/CHiqYb31CYsUDNQeL6yor1K6pfyshJ7xO2fvFj3+7H5Q5sVk4bN0btS2pird/WDlfgH7AroCbyxtCEcsnXr3gOywA5I27Jy2UAFmajC9CUvIBINdhKuEAG4Pckn0aDBamBuU/DG145NA2mXBMQQ9MsObNioGC2LVA91AsCgYAIjbPS21c5JZ3tX7wv17Vjq/8wg1wheViR0rOhNGmXjXd3tdQ+WEG2IAQPPHSGwYQEche8Lua09fi4cYluihkbbdh/y/jp2cAP/9B/Kt3MGz/ZynLD4ma1c99LNO//s+fKnEv0gAMFw8MY6vglX/mZRGeem91SUeBoDoIPtsW2IQKBgQCPAk/GSn8lAUNSYNoZRbSduhdIubIoTNPzZfXlB3OhMK6zBHb3Ji3Y/x9vHOmwWUKILBzk18ffOccdjV4xnV8ukUWxQ7x15N5OuHn/x/GHpClxrsq389mP3RPA5EbWP3KDlNgHXrZMHadM8UrTHjP67JqBXkMECkwjWPQjioPGwwKBgGBWi7axhF2Sk+SPSWKVQTTOwbpRhyDj/qzLDB836u9fCo5xYmlbXp/YtiHlk37FbRNfw90qN35tqD10dOKDmGbvm+tJxoRZpmH0w1ExGVr1KBXIp4D2jTyjHPaHEdvJEsWG5wNJcOd8gFuki/m4bafFh7iJMizvYkM8bVNV2Ctm + - peerId: 12D3KooWB2Xvsa8RrmdhcBTJMoogqPu43tWZ3XUwXMowcCuMjHjo address: 127.0.0.1:4530 + signingKey: zsY2jhPHbfMKIKfXGh+PsNBhCLD//dmJtBNMhG3m1OIR+bF4a7B5Wid8eBRm6vtCbOJzoxhJZjRYk1vEHuhmgg== + encryptionKey: MIIEpQIBAAKCAQEA4mbDvFUlpfiRkfnW22C0XvpAfB0m1G7vGcDWfNfgMmf8xD1rknWAGNZi2Ek3rjt9uVuL3DnlLEjGf0HrhsNm/VUI3nId72zgqTZd8fHbA+6h2ba9wP1t+IUf456k41bgljD09HxpvEKtHO1OWQGnVFMc5gqMeM7uovZS+NbXvG5RJoVgG/Ugw6BgEmj0e0LDmvvn2FRvmzst77EPQKlp43J4Vl0n7OtvBypLd/KA0dtB3Nl5rjcewFpSbUadhzJMnw38mtj/jwJsvvwUnzKuv6O6ZK1uqW8bFXKN5OmP8gw+EkZo/GX5IuyHdQwjYWKTAuWn/bYXbwsXAqYEtEW+XQIDAQABAoIBADCbC27FgP2u7eG/F6eljVPOukVrJMj6wA5xXhsTZaistpGS9iNNYqDydeolXfTkBMvkoZQ4QcFOJn9vsZcPIG9G8E6BhXe/kkQBzg2BdRnVA55wIzDpt9BhFEWT66Z7ImBcRlqu0yx9zBinwehN+JSb+1pP7XSKSKVn6MxPo6VqSlP4xRN8rQrq8sVvIt1eVH01rxhGBRM/gpoPtIXlf9cYRoa/49c1/Hk3YmE+oYG+oWzoBIsIDS8qEKfEzIrHTB8d0DmLW38xInTqwNgcp6GpoK9mDBhPcb6vZpd0uWx8pwqJ4cYQTJ/ksOrq67T6yyMaJn8WRJflg1taFD9ONoECgYEA9B7LsEXHRMzEAM1YKqxoiOm8UVfv+qdsLUBoeJb81fdgb8YjXq0KhD7+hGhfCogIWuCygXOYCd8srzZxlkSCK3S2F6R5xlsZY7TwSd2LvH4821T8dX/h+mYoe7dbrE2PjWuZL9PwSOLGfEYS7BS7vwl3Qd58sF5/hVX2Rg9V4tECgYEA7Ws7CEt3ic3i7YuzAdaw22WOHGETwb9cV5cwKRnvbhpIcU9fQa291+kIhgV6TaJuAmUJbnB3jwRYG3wEurRodlh8g6HYyCFzB9ZjKuG4av1wlLw8pTSMngH7Vlsy+OiItQhUSB14AUAD9+d4mq5P2uPm0aqw8qbU8Z4tZ6Xyjc0CgYEA4ULRfdTFrcytSHgzVR1GUKAt73mPreFzxsXaIPxiTiY4zKsu1Bwkyic+wHt2x8cCvqj8zssVjnZrSzqX0ath2iuWI3bYD5rccM7zs5VFbiemjFV9qAbbRS2jSZXGd9YSEtMoxaNx5C+uK9qVd1cib4OSkit1L2HjleveloNsIyECgYEA25APR9yC8C43bveC1HB3nm6MvjII02TlQRvQrjIN+wTTefatYVAMAWDBQTBPqvxMQGqwDjJ0Xw7lbIWE2iV9dfTfMdy7XlmQx+68Ryv4IPnA48wxSZcPdBDhHzu4J/jkdIb/arHWCVHqWZj3MBWERCn/jGcOvVkMFWbzFqehaQECgYEAl9saSHtsYYbhEX/PMLbecJtJU2WEOkML0QpyZyzF3Y0FnWpjlY4HV5RUsEOksAjbaAxbF7Xk8NZCjmqdR6+WdHt+3CQl+964vkvBIGWYXyo5/zso5HxzTpZTN8I03Xk09nMfn72lPKq6dWRD1EVBPX0TfOzg1xL7ftng7BR+bx0= isConsensus: true - - peerId: 12D3KooWGVroVVTuhc7GcnYZ3T9RmvuB4LWwqQRgvEMWQWPQqTy8 + - peerId: 12D3KooWHSSHxDymTrGQjTHSATFxWnnz4incxYazKukgBia3xPAm address: 127.0.0.1:4531 + signingKey: uN55hCvFWVBlFcptEca/PlCJBVvMPmCvB9WnWHHGMftxP2GGPEVntjpeS2aRrcHvfvf0WfjAP47CQdr+V8yD5g== + encryptionKey: MIIEowIBAAKCAQEAuQvwreiIbcoASka0Be0nvdQfU/ZGzIjONzfHCaGWqIfxjqsIG2I55X+3j8kIZZBl+oMIGzk3amZq1KWNGKsRhuDdsHKSaSAnFqPIYYfiAkp5evsBCFzWkMaB2xelDkNzYGAyTemvsnjyp3wlJjrdoJrwW5kNojz84B0NQZjn81O8BH1HOibzXIoO65oBduWGwj5zaqboEe33VFowxRJxXG+RHnOCY4XRoZ40wx32t4LefsDcMbfaNaYEt7av5uzkh/+X9AWNw6VmYKimVv2KAyYwJ5Q+ZkCyASPO9ShBdMfaiR1hETQExVPtBQB3876e0IzW/+j5o1WGu1KPk1t2kwIDAQABAoIBAHvnHM61hrRMr4kMcnoNY7DdmeR0YM+PQtUCSgmO4vwRmpK2voTnbnDW5agnKbInz8C/f+wKkapyzVF5UFKWKPQxGP+Ol65AUyv7mq6Dd7ek+lZ4PybEUv85i7WRzXkRfO2pO8WjlXthNMkkfRNuEvv5AruybciWIZRGn5uusJDh+rMI382z6b00/U7r0igj4g5o1KqT1wYxba2VT4CaSeqNEMbdOcGWDjHx7zIanHvMrRtRG4DgYIY11ohnARU8UUI/wL5WG9iVaeuepq8T1G3vLt+096UwE/GYIhwQ0UUf+HS4HviACcMWJeXbKas64twtUA0Pf0JFCxPnM/QTBtECgYEA0Zpurv8M2P/atqODGG2teKseJqz4nB9vYLbAQfpziv0OyvRQ26r72pjtBwIDxv67fVSL3/HlViBGElMGycrA/XZ1cTiXY2LAcfpnu2P/Q7vUE/n5NBg4C1Cqjgb7D4dFXOTOM182HFL5SSQiUv5jMRvqxZTX5NcxBj3wbuHt0v0CgYEA4gH1755EWtS6q8+UUdLNAM+TL1SKaMcfiGAMdMWL5uSJBQ28fFPZIZv14gTzaU+Zji3AsGXiBpgtwor4rEugmX+nL7FATIaS0rh15hjXEvczg0SyZBkiXygo9WSQFQ/1AuHmQ8dNgNHXuSv9VbQeu52xhr74saii2tCzTOfyDM8CgYBQHA4hpCls5pzZITWBqKmcbQphDcsXIIyZEj/495ghjwaQW0BsNLV9nuU4wHRhIgrWo/Gx7eoRONSPPFxj07JfLV9FnrN9sMiMx3/OBzIQ2UD9QZUVbAw/ht0o21IpZTIFhw2oZMNxn+TXJ5BW2BNhOaJJUdISDI0YLaQvPPqAoQKBgQCBXY/xtYz41PV47NvALkKL6UUdfW2wZfIltJzMplrbMgtAKkmufKw3sbb/xceyiw6hNI0sK1VCYw8mYTfQH4Xw9wGyqendI9ac6VsK90L8pyUESWk3JK/o+erf880JUVX0bWvJdiZlyzeI1aYvzWceCziXoW5m+tklGPrY1ZdWPwKBgEYm3cThyIi1MScjR7lBKPKUKfkmN88ZoNnzfcn1Mgzwpo9alTycyT9otC/wBGIf4WhRmDoCYE7htIA0C0j8YlmYhd8+gEuRnWFn8Gx8ecpSmUIIpZINeV/t9YFSbod6OnYJosxwLJGzHpb6FN4ojpO5lq7iPWN4v/dtd/p/Bfoi isConsensus: true - - peerId: 12D3KooWDLvgBnuUnuLea8QZBEA8MSffmWoNj8JFto3N5AqUDV44 + - peerId: 12D3KooWCm6fXRReUtpD4bQyy3EnzEe7htRGCAvzHw5yewb1SbRS address: 127.0.0.1:4532 + signingKey: 31nl1dejInkuEbwBf7NyEp7t6adkMOyCMMzq9ub+XQgrvMnFxeIOso/c38RWo08lSMpZLltC2yS88/EkNIWveQ== + encryptionKey: MIIEowIBAAKCAQEA3dSgJsWNz3zusneGYIjufkXe4byl+RGZNE2dUWEwPqlsjyFXLFmBQwU6UMAOvgEGLuNY2HWVLKzWsqccLqkMjEo3ZQSTft1kf3x3TFlFpPFtGI0lL59b37K3zJ6sdY65PPskhXqy4ru/oTjJh4F13qE40x9bVSrmVnllrEzlyG2kR7KOiHWmufChtvTHA6Nv4x8sevsKzwIXOMMdbKb67aw6jWic94gI8lf+KN7UHYAMKA5MvwwvvH4hadUubMH810jtpiD720dkKRYkgLviLuxhOhRn+s2UY+Dl9vDplBO5tfn0ZnU77q0OrF1qAhwPiuy0yq08ykhL4NrKiLjGdwIDAQABAoIBAHQjxlWGSODBABfgDDKufm8OFcsKAbuNQzDnEd5xi9jCy1uEkSdfFRYJvqZYZ1+DGcGitfleVmO1ehK++zpSt4cbtDTnWHGrZ9p3R95pPtVEsWGRRE7SmD9eSmyPBqvltYX/1vcrbkzXD1VRbfHMDfIpZp7iY+cLNt0/YcP73rI3+4U+4DXsPmaf4jtCBpUH0ru59aCJTJWvYFiVsapWdJY+BcAerpV7QH74dVQ3XNIWRCxsG4+S9cfi5uuenHqM3MmCz8jOpTQeepg64aSNmFsTVEeoNXfQ+78ELUIXEWBpDoWWNVTQxoy3edPThuDgEbw0KHP+z6C63ztP552kB0ECgYEA9pKCvigZyrbn/gmFha0FVEfGWkv8SGHkm3LctnOHj3fyfezKmp1bq44bBFhw+p12qN6NmpZIpMh91X/vDcmNJTAQz9ty14pB0Dlq/egV/AffjtUjYb4UzxiV3EmH97BB9rK9B4VkSdPY1FbOtAEyt6cWoYTUwwrHKzTbhOhAn2sCgYEA5k/wU0uN57BwXrcDNP10zkjxbpsoNEINBj+eGpKjZaKXU7XkgoezgzeGa04Ym6crLxmhlXtSojXFkqeLdhn5hJSKPJ+JsAZD9gM0iZ9Hb8l9/opzlSEJzMFLyCdCeu+9Hipq3OuGkJgRemn9h9UMih1zUTo2RwRdfpLvUEUANCUCgYB90AQmQw/l/64gUXtv2fj+KCFtsZfo1wpuxw0Xi5t/+RQibNB0VBaSUtA2R2pedjo1sFlQp54pdqO+bKjtwAnlD8GETdUrZcBvHt0Y8XNGRj4sA1UqanLzuPe+j0Zxe94soscRL18czJu2vRR7hKD8VKWXhM+LNdSqly3rgxZ2QQKBgFJ6okhSMHmeuD9TLzTU5/XQLZY8voMofF2WftppVVbaiXMTGsicLG97fQoEp89maJKvjSxpQ8iPlTfWBJ3A45jVUUQwpjCBrej2cOQwRHcGI7b6gjYP5OCNAMSnOqmoHYQmEKsZNdGmg+vg9UilxZ3YuimGvVVlfM4NdOK8Mzx5AoGBAKKtLvw/rpL+ZLSlO5CTycjBlY8Uy0/SkTI9T/gvwPm7zMdZW0AN7HShsus6SKATba7ZXIySY+tBWfuq9oEACzvC20Qw9tQUTS90g8mwHwTcj4H58cnvmbtOFg75RYMUYvcOjpbPLvcGKsYrobjzqv9MrrL41fgMXw8DVIomqQbP isConsensus: true space: gcTTL: 60 diff --git a/etc/configs/node2.yml b/etc/configs/node2.yml index e7d634c7..57318da5 100755 --- a/etc/configs/node2.yml +++ b/etc/configs/node2.yml @@ -5,26 +5,38 @@ grpcServer: - 127.0.0.1:4431 tls: false account: - peerId: 12D3KooWMPgKGCLtNkmANzwHAnymEMCggS6csXuDroUFqb63FizD - signingKey: TBi1TxcOr6kB5Wp+MQMH2m2jgNu1Un120H5aKw5Gybmr+T3auW8EL/4T5nsO0priJYMg5oki18E3AwCdOpjUqg== - encryptionKey: MIIEpQIBAAKCAQEA40ciap1GvcPsgBo/IAVcpR9KK2fTEKwUs/KCB1Y3nIKTeJSDRKOtQD8TyegiB9VEzWscRPz4sxCCuIfwuuErSl4fchMdClsFC8GYGoCN8KvGcwUoFODdWaUh3garg+TqGPARe40Re6+thR4wpAFQbLeYkaM5MUWxcWf6XgMv0RD04IMwkDvZkDDR8BEP5T6aGC0FLzrqtH8YGSoAoA/IsofjIhB27QO60p6ygY0W9fHWojha6Rxi031HhnVud9wDXiBIk41RHUFxzHJF9bANF1uwJQbAVOF3PBLN4sCwrTtMt+WF832F4UBMKvxqWL5YX49iC3QqOM8N8NXvThkoHQIDAQABAoIBAQDOnMpC1buLo+MKCdI9D+LLEYjhsL8FtwoTFHD0roJbu7DIu2oiKhHECBO7R1Y4fL7RZ4AJj1efoXDUxHAp060BLFO15n5N/bS2nUXjQd7HXcFIqvVnFYzkg+Qn7TRa8O2HwiaChRnRsUEzdOCPF8q/KqB+NT429r569CV89bSwft0B0AfDs0mEjGUH9NxBI9YliA7NsjTVAi8wCIU5HDfGwJddcM7NwAeftXQlguwPm4IAFh+7rMBsUAJiIyXSRGWjknF4OcxN0qYwBdPlHCqr2ty2uN9cUnkelxtmQqK5pywUEoCL0JTqSdNRtTI8qcmSlm6Vk9VFAPnHiEeMvgnZAoGBAOqPAqlz4FRj8OFba+5dsOKkUR7xzgv4tkcyDbWT2qZeWy8aUbrTp+DQjr8X7QNIVMPPagi/Hdpdu8b/Nj2BL0jDJuECDsa0/P1QVCjbqdy9aneUrocX7+O2O6HGmtg/376bWVXH60VsPI3ZX0KtgyQQqPO+JViD6IDn0Do3Jf+bAoGBAPgNvoif2t27f/Kxdd915s2BxXxBA1yri+Kjr1yUoKfWaWaMcwxfAf05+jWOA+4GzTexR/VB8WskXMNIvNu1DTzItb/4Ojn4nx6LT7VuT8lzCcD1G8HmVhdqX7Ogv+kQQMuWBtgvjdBzXro4uV5aB1BognIigCBp12wpcBFh5d6nAoGBAM51ruwk2PKvPZm/dNNNmKMF63mHccxL0XX9ct+/ExiZuT1Ot13xa7WRHfTKRI89HY91hGnKf6Z0FxLkFYQxr8MmM5Se0Q7KxFzcVhfYsj1gZNR5BN5YjYksIHUXcbijEHigGRROcqKa0PoyuYzhWatnFq/lUM4G3aKJaVm0rTe9AoGBANcIqyyrT0O64E8WkfV2su9iWT2+6lgyimCdv06FtcPptpNkm/OUhRftY797bmKw2MQ31gaB9PQJoLTV4IqiKGiSIiTZ3jgVFHOZFy9UAqzDIih5E2gC8oz39SC18MftBA647xQIHWsgKHVM6T0m1IJbJwIkcGgo+MvWHEWlVW2vAoGAOF95zv96d2HseG/TtHdPjmNSpLAL+42cGIl/xlzJdF/VVx8kO6T+Bf4YW9PReLq8pErVFqMHPjumY5+vuFs+GX+eR0cJbQI+dQ9DyFk8fVL1QkHvvnhiS06GRK4MD6waEX7KkeD5N1RM6t2d4fWowxcbQYqt6IV4kVNTK2x06Qo= + peerId: 12D3KooWHTnHZgeyDdZJwrXweFHMrSF7YBXSuuAH9GsxhbzTvfcT + signingKey: EVlWc7+UbqSKAvjSdBq5iZt2dpcCYhDJiWkSn2+9IrJxl5F5dTHw+eIKNV3MV/tL8ext3YPRkIue/8TvUUfpaA== + encryptionKey: MIIEpAIBAAKCAQEAwLhwWK4vZQooUjulblf4I2+f5/K9yES7/HW+1bz93ZOeeiMuKb5wmw1tVt+vrY2j5cFC/krhSWUdfRwqDvv6Z0q19v9mD7zIfad54KgVSyMcVGxWLt7haGVCr78VckO5JD+aktlEM8/12crzHOWRh+j3jgELmwSwA/LiXo2ZNH9x1Vftw5MHKksWTpvaAprFTkYUrPHvrjpiuSGzT5abGUYOgWUIzTtqZYra+zOMPzVqDAlMykmUYjVO/d/l01L3xgLZQogZ9B3NRgXpTpTJ5iF7UtUejjZSJ6fYGVNwM/TEMrIhKHD54I6FYkLmp+7Rsw2MmxVXHkQPQJ7khYY8ywIDAQABAoIBAQCv97idQG6GE4A9lbi3yBsKQCIB5+LhueDr45ccEjS63M8XNogwFXM8IEZ1zEjcbzf30T8accTC/1Ctq8m7ZNh+9/iuTwUh2X43PXRLbS4ELUrwyvrmURv/9nWtgwxSCQRD1M+OxlM/++K/uk/BUtxO/KkNQGcYZG9TK7MGIsSA6Ua0fNEo+hcTzqBsED3nGYXwmn7nX4zMjPqr6TtQfpxWdwtKYbBsDcvIoigwNPajnsdSbx2M4pZh3cwBuROKs9/HpUNOtSZvPc8BbRenJQOqXG2R+O6SMBGnYf5ycHpk7Wya+1TtGObOAcrgC7RV6y3KGzq0Thu7imWC1B7GvRQBAoGBAM9yA4EBjHSQ0sP5DTT4yD3H7ytQtR3oVZYcKiWg4lPETaFhwucFzbbhmh5gB6Xng71KiIuYuvJZi2XQeL2LcBBaZwoj9cpclJ53KuQ8LL5TPZ1zOn+xU/Iy2mumzVpaSyWcDq7ArlhuGq7JWubAEcrehBia7i26Ss9ro1HqbR+ZAoGBAO3UHnZz8gmkQrUyk6rTPJHivnow2O8nh2dWuK+o+wAN+WCF10VQVaRcUS2bC/khHeomTRNZh+kzs0woLdfEtLlxECA2+MHiIJmXkLat7/Bm8gByd9iWHRZ6d9ZRvb+DPwmbZV0mZoy+8SF5DJno0uFdq6g6tTGQKmQwu1xHeI4DAoGAOQubVxB79VoV+3ozXYvEVOj0Ji8tfynyzzKzjGFvm6Vxy508oZcA+PeVECFMOR0vJxCl9+1qC1cAdGEdstHzYSvbBfjZkGphHCqdCuJZU4VEflW/knnLIeFGGzBlbCFEZPVDPF8UEpFEmSgZ7TaILgd+v91q/fwqslthMBeNJpECgYEAzzNTyu1e/IlwWL8UqepZRdxfCMPP7CPrMtv6EYhODZEfJ7nTgB7qTkTjsLD5MHZqwpnV4rrIzyJs3jfPIMHOlhVr8DUUao5gyo+i05UciryVsFAKG9dExlWyXDVg9B4baHpLSGlxRMQB/qCgmuKd/xyFtg5X2DN6y0ktosrdvBMCgYABqwzMnDF2SPx1mZjXIOCsj/03Oya75E8ZTWGorkROhyarE1wWvES472IGsZSM7qchABmVVGxr09mL0nyNA5KIIEoIWtl59yplXKrunYYoodoXtaS0whTDraf62am98IQ1LAUdf4p1dGfkrAsf8stKuxbzYtEeXQH3EHzzLOzmNg== apiServer: port: "8081" nodes: - - peerId: 12D3KooWFVGSu8MfoUnPmUGPpJKNpxaM7mezZ98V1ERGEQbTWjnE + - peerId: 12D3KooWBZFSp1MrqdQgL2uWSZpybgskz7mjrJnmhkDjudSpTUAN address: 127.0.0.1:4430 - - peerId: 12D3KooWMPgKGCLtNkmANzwHAnymEMCggS6csXuDroUFqb63FizD + signingKey: JR142BFc9/KJIy0f0BCnfMeO4Yv9InErltCuGyhvs+4Z2A9c9cGi20ECMzthOvtr90N6bq4iyfLbmhNkVMxgiw== + encryptionKey: MIIEpAIBAAKCAQEAt9WEjnITHiG0IhGdn5sGBR32Bo8qwAEZSsPhutQZnvBfTegqQwvb5LxxpfYP4C2+Wy1335fzMGtjtWyv4r2bJHX++fTh0h8xWbuMuqDlbZI79IkAhu4HFfAl6a0Ay/po4DkaBBwqHFu1oPbzKceJpb1fXXXDNO4SIMBo1CYrrI9ipJrVb0NOIbmuDUUvS6c7W8xiIudLH+lrcClpsE4f6+rVaEK188cWESmFvTFwWd0LV+1B+qP28pVRGZDcqMEeV2CoICY0daKdI9P1efPD1XbQGmafU0LlJZyww1pXT5q0yKBSdKMjspZoRbScnUmTJuhZY29cBPfqPjRiEvznjQIDAQABAoIBAQCQlI4PVepxPUKltMMKHutKJPk0yW5u2a5hndMvk9aeqR/bbuemGXKU4Bxl0TNFNdTLcuQfZystfphJvLRMGKEmuOKTBaSBFGVE1Htm4Fnwph0fQoy2kgfimh/HO3gv9L588ovihaAc84fSk8ZEqpk4T8rr/01KmJ6LQahwiaC5sig3uZgQuCGIz11xjNgavHdpytzL3qGhUPLiQAJtCEKaiFuUAEmw+dg/KH0ZHw3+/yCJ/GESwR/8yP6rfuyuLyaR1n4vr/+eH56x4922ua2XtJuz6gdqzcbPjbf2y01Q2XnwEkf6cHO6rYs+ba8BWzM8NZUeTmvLH+qY4CAMWIvBAoGBAPHuResocGdoZEDNvjUpuZlWCCRKO7goTAjFH00z6DEG0Kv37pi53/4AHshaScHLd7kQUBSH8o6Fdtf+fyZaVKdQzfSKqNVt6NglPtVTd7JhI2ddJuU6iOMBKowRk+PYnjfxjETmXMNb6FpF9ZgMc/QC6YiWZwEjooFKrhgfZWvxAoGBAMKGVY1LAoLUFwdL7DsBSf+VndN0l/ApxVjCLhT4l73HrfOEqbts0GAGRTtOA6JO2xhAvtJkcUYbStQiKyz4iPC+zG9CwMm9XNaGRAflFfcxgy1VqMQ/2TnlrwXdCLi1y+oEGcJs69O8IQACBC1m6MfEMrOOsAa3YExkxG7VBMFdAoGAIAgBH9pxz28l3uKerWFB3ohieZOOhppnPr4Cn/Ega+VQGYSxBW2Ot42ChdpWa58p0cnUIHPDbJVFH+HlKcnJ7YEoU5lMMz3jF0MPJ6VucqKj0lql/LGcUBnmbTcikocqo5OKk9DANWlkwRcEJkZ3z7XW/6uSJbd3G5EsraryfbECgYEAnaa1i09xd4pgJ3+2spN233bodEmYIgIYeLjXFBPtFtfP+P5ZeRbVQh2S2l99vnteQaenf2f8Da9s08Plbgr3IPXhRYK6MEYSCaLDXAqj5LTx9TnpDzQX3z5wvLXIrbpYyw4LunEAJ5fevtzjedBfdBdkZ/WKX8caeo9oS9LEidkCgYA9Lf6XK52LDO3uidnX7CZB9piWIV5bzrdJB6ppbJ2ywAD60NF8yecRp7fnyFRg7VCQxGkbIbv5sR9Ua/PAsBo9UFlZQGanUXpAUJi8qnDIDG2Ly6uNTwjF7s3IHC6OIn1aOSvUcgY658sXF1KfDguXv0CUs75JZ5+1djdMQAtRiQ== + - peerId: 12D3KooWHTnHZgeyDdZJwrXweFHMrSF7YBXSuuAH9GsxhbzTvfcT address: 127.0.0.1:4431 - - peerId: 12D3KooWG7bXBK1NdyyWT4bnGUQjbe9kpVzsZSm97MQVR13zRx4M + signingKey: EVlWc7+UbqSKAvjSdBq5iZt2dpcCYhDJiWkSn2+9IrJxl5F5dTHw+eIKNV3MV/tL8ext3YPRkIue/8TvUUfpaA== + encryptionKey: MIIEpAIBAAKCAQEAwLhwWK4vZQooUjulblf4I2+f5/K9yES7/HW+1bz93ZOeeiMuKb5wmw1tVt+vrY2j5cFC/krhSWUdfRwqDvv6Z0q19v9mD7zIfad54KgVSyMcVGxWLt7haGVCr78VckO5JD+aktlEM8/12crzHOWRh+j3jgELmwSwA/LiXo2ZNH9x1Vftw5MHKksWTpvaAprFTkYUrPHvrjpiuSGzT5abGUYOgWUIzTtqZYra+zOMPzVqDAlMykmUYjVO/d/l01L3xgLZQogZ9B3NRgXpTpTJ5iF7UtUejjZSJ6fYGVNwM/TEMrIhKHD54I6FYkLmp+7Rsw2MmxVXHkQPQJ7khYY8ywIDAQABAoIBAQCv97idQG6GE4A9lbi3yBsKQCIB5+LhueDr45ccEjS63M8XNogwFXM8IEZ1zEjcbzf30T8accTC/1Ctq8m7ZNh+9/iuTwUh2X43PXRLbS4ELUrwyvrmURv/9nWtgwxSCQRD1M+OxlM/++K/uk/BUtxO/KkNQGcYZG9TK7MGIsSA6Ua0fNEo+hcTzqBsED3nGYXwmn7nX4zMjPqr6TtQfpxWdwtKYbBsDcvIoigwNPajnsdSbx2M4pZh3cwBuROKs9/HpUNOtSZvPc8BbRenJQOqXG2R+O6SMBGnYf5ycHpk7Wya+1TtGObOAcrgC7RV6y3KGzq0Thu7imWC1B7GvRQBAoGBAM9yA4EBjHSQ0sP5DTT4yD3H7ytQtR3oVZYcKiWg4lPETaFhwucFzbbhmh5gB6Xng71KiIuYuvJZi2XQeL2LcBBaZwoj9cpclJ53KuQ8LL5TPZ1zOn+xU/Iy2mumzVpaSyWcDq7ArlhuGq7JWubAEcrehBia7i26Ss9ro1HqbR+ZAoGBAO3UHnZz8gmkQrUyk6rTPJHivnow2O8nh2dWuK+o+wAN+WCF10VQVaRcUS2bC/khHeomTRNZh+kzs0woLdfEtLlxECA2+MHiIJmXkLat7/Bm8gByd9iWHRZ6d9ZRvb+DPwmbZV0mZoy+8SF5DJno0uFdq6g6tTGQKmQwu1xHeI4DAoGAOQubVxB79VoV+3ozXYvEVOj0Ji8tfynyzzKzjGFvm6Vxy508oZcA+PeVECFMOR0vJxCl9+1qC1cAdGEdstHzYSvbBfjZkGphHCqdCuJZU4VEflW/knnLIeFGGzBlbCFEZPVDPF8UEpFEmSgZ7TaILgd+v91q/fwqslthMBeNJpECgYEAzzNTyu1e/IlwWL8UqepZRdxfCMPP7CPrMtv6EYhODZEfJ7nTgB7qTkTjsLD5MHZqwpnV4rrIzyJs3jfPIMHOlhVr8DUUao5gyo+i05UciryVsFAKG9dExlWyXDVg9B4baHpLSGlxRMQB/qCgmuKd/xyFtg5X2DN6y0ktosrdvBMCgYABqwzMnDF2SPx1mZjXIOCsj/03Oya75E8ZTWGorkROhyarE1wWvES472IGsZSM7qchABmVVGxr09mL0nyNA5KIIEoIWtl59yplXKrunYYoodoXtaS0whTDraf62am98IQ1LAUdf4p1dGfkrAsf8stKuxbzYtEeXQH3EHzzLOzmNg== + - peerId: 12D3KooWE5VmEXLSksS31fWjwydNgoH9c1hMWdMdohKk1mHVVgwC address: 127.0.0.1:4432 - - peerId: 12D3KooWKZcPNMmMqi6PZFjUkZqrFXXUYLpzoHBjbHLPojkuj4xp + signingKey: BI+SqqwurrTaNCHtc9+DeItlNPh6/6gH9CrJwNXS6Ug/TwwRHloM7siXqOWvJVRUiJ8UCraYjuAnB4huLdby4w== + encryptionKey: MIIEowIBAAKCAQEAtyliO0Y/M1RHRNCRl5D+x337CVbv/Yhn5bF0+Ib5h72JDtewRLKWcqCxmNa0RhmSbUHIlO7itf9a9k8FBlQOg6SlVgRk5xET1FpGioS+yHsaiwx+KbCgP6QeDSMNLVKW/+WPXItvvZxoQV9m9TywGJzzMBF9QY3rWhMGV1s58S0PvIjficyORbMTZL2aKlcPjf8Mh/Yzo0eiPTR8+sKvguxonhUdEGfpts1Wn0rIr+BQhk9hto8okOeQkEy1LO8cHyVpk0Zm2jIq643CRd0qcfpOYGm+xz9nzEjCWZJdc/Bq5Vok03mi5050fv6nA/HcopBUnk5Jk5jLQEa/0rEXuwIDAQABAoIBADZuYfbjhVynqxZUNTApss1uLvAzmdZqdxXXir9gvT8NoHF8v7FqsTMXdi/JfoFmkBFP/1/jLhSP8mRIT2H2EOomP8w0OhhBBveQbG41zMyfaN/xsnyJNNY024lj5UKWzLD3c4c5GNfsZz8mLt6qTlrCKbMbP3H/zvVRugyz26BEFzXnXVsRo57MXwGPHzhMS2bdYsixuNz6Hwlu3brJkIgzQA740ABVzVG75DRwvdJ1w+kIskrlCa7tFnHl/mVaBQ0plFaY4Urjk3fOI6JzHA8I92FBWYinKPlBXBBeXp/vjsfsp60d5zi1/bdNqvMFL7HbwQO7yJd37UR0bV+1lIECgYEA1XhV18EICpxHQwm0svmvnE8MVUHEzzSlpXYZujQis6x0tXOdXEVqfh8EzSmBlJLj64ndIG13gVVeBIJszXTBLCgoUxrH1JXtECu47jIB2X9QPEaicfpnUlXcbNFS7RQIbyS1yvbKKmK9lJOA6TMtjMVmQ8zpAtivqhsc4LDI6RECgYEA26c4t/CHiqYb31CYsUDNQeL6yor1K6pfyshJ7xO2fvFj3+7H5Q5sVk4bN0btS2pird/WDlfgH7AroCbyxtCEcsnXr3gOywA5I27Jy2UAFmajC9CUvIBINdhKuEAG4Pckn0aDBamBuU/DG145NA2mXBMQQ9MsObNioGC2LVA91AsCgYAIjbPS21c5JZ3tX7wv17Vjq/8wg1wheViR0rOhNGmXjXd3tdQ+WEG2IAQPPHSGwYQEche8Lua09fi4cYluihkbbdh/y/jp2cAP/9B/Kt3MGz/ZynLD4ma1c99LNO//s+fKnEv0gAMFw8MY6vglX/mZRGeem91SUeBoDoIPtsW2IQKBgQCPAk/GSn8lAUNSYNoZRbSduhdIubIoTNPzZfXlB3OhMK6zBHb3Ji3Y/x9vHOmwWUKILBzk18ffOccdjV4xnV8ukUWxQ7x15N5OuHn/x/GHpClxrsq389mP3RPA5EbWP3KDlNgHXrZMHadM8UrTHjP67JqBXkMECkwjWPQjioPGwwKBgGBWi7axhF2Sk+SPSWKVQTTOwbpRhyDj/qzLDB836u9fCo5xYmlbXp/YtiHlk37FbRNfw90qN35tqD10dOKDmGbvm+tJxoRZpmH0w1ExGVr1KBXIp4D2jTyjHPaHEdvJEsWG5wNJcOd8gFuki/m4bafFh7iJMizvYkM8bVNV2Ctm + - peerId: 12D3KooWB2Xvsa8RrmdhcBTJMoogqPu43tWZ3XUwXMowcCuMjHjo address: 127.0.0.1:4530 + signingKey: zsY2jhPHbfMKIKfXGh+PsNBhCLD//dmJtBNMhG3m1OIR+bF4a7B5Wid8eBRm6vtCbOJzoxhJZjRYk1vEHuhmgg== + encryptionKey: MIIEpQIBAAKCAQEA4mbDvFUlpfiRkfnW22C0XvpAfB0m1G7vGcDWfNfgMmf8xD1rknWAGNZi2Ek3rjt9uVuL3DnlLEjGf0HrhsNm/VUI3nId72zgqTZd8fHbA+6h2ba9wP1t+IUf456k41bgljD09HxpvEKtHO1OWQGnVFMc5gqMeM7uovZS+NbXvG5RJoVgG/Ugw6BgEmj0e0LDmvvn2FRvmzst77EPQKlp43J4Vl0n7OtvBypLd/KA0dtB3Nl5rjcewFpSbUadhzJMnw38mtj/jwJsvvwUnzKuv6O6ZK1uqW8bFXKN5OmP8gw+EkZo/GX5IuyHdQwjYWKTAuWn/bYXbwsXAqYEtEW+XQIDAQABAoIBADCbC27FgP2u7eG/F6eljVPOukVrJMj6wA5xXhsTZaistpGS9iNNYqDydeolXfTkBMvkoZQ4QcFOJn9vsZcPIG9G8E6BhXe/kkQBzg2BdRnVA55wIzDpt9BhFEWT66Z7ImBcRlqu0yx9zBinwehN+JSb+1pP7XSKSKVn6MxPo6VqSlP4xRN8rQrq8sVvIt1eVH01rxhGBRM/gpoPtIXlf9cYRoa/49c1/Hk3YmE+oYG+oWzoBIsIDS8qEKfEzIrHTB8d0DmLW38xInTqwNgcp6GpoK9mDBhPcb6vZpd0uWx8pwqJ4cYQTJ/ksOrq67T6yyMaJn8WRJflg1taFD9ONoECgYEA9B7LsEXHRMzEAM1YKqxoiOm8UVfv+qdsLUBoeJb81fdgb8YjXq0KhD7+hGhfCogIWuCygXOYCd8srzZxlkSCK3S2F6R5xlsZY7TwSd2LvH4821T8dX/h+mYoe7dbrE2PjWuZL9PwSOLGfEYS7BS7vwl3Qd58sF5/hVX2Rg9V4tECgYEA7Ws7CEt3ic3i7YuzAdaw22WOHGETwb9cV5cwKRnvbhpIcU9fQa291+kIhgV6TaJuAmUJbnB3jwRYG3wEurRodlh8g6HYyCFzB9ZjKuG4av1wlLw8pTSMngH7Vlsy+OiItQhUSB14AUAD9+d4mq5P2uPm0aqw8qbU8Z4tZ6Xyjc0CgYEA4ULRfdTFrcytSHgzVR1GUKAt73mPreFzxsXaIPxiTiY4zKsu1Bwkyic+wHt2x8cCvqj8zssVjnZrSzqX0ath2iuWI3bYD5rccM7zs5VFbiemjFV9qAbbRS2jSZXGd9YSEtMoxaNx5C+uK9qVd1cib4OSkit1L2HjleveloNsIyECgYEA25APR9yC8C43bveC1HB3nm6MvjII02TlQRvQrjIN+wTTefatYVAMAWDBQTBPqvxMQGqwDjJ0Xw7lbIWE2iV9dfTfMdy7XlmQx+68Ryv4IPnA48wxSZcPdBDhHzu4J/jkdIb/arHWCVHqWZj3MBWERCn/jGcOvVkMFWbzFqehaQECgYEAl9saSHtsYYbhEX/PMLbecJtJU2WEOkML0QpyZyzF3Y0FnWpjlY4HV5RUsEOksAjbaAxbF7Xk8NZCjmqdR6+WdHt+3CQl+964vkvBIGWYXyo5/zso5HxzTpZTN8I03Xk09nMfn72lPKq6dWRD1EVBPX0TfOzg1xL7ftng7BR+bx0= isConsensus: true - - peerId: 12D3KooWGVroVVTuhc7GcnYZ3T9RmvuB4LWwqQRgvEMWQWPQqTy8 + - peerId: 12D3KooWHSSHxDymTrGQjTHSATFxWnnz4incxYazKukgBia3xPAm address: 127.0.0.1:4531 + signingKey: uN55hCvFWVBlFcptEca/PlCJBVvMPmCvB9WnWHHGMftxP2GGPEVntjpeS2aRrcHvfvf0WfjAP47CQdr+V8yD5g== + encryptionKey: MIIEowIBAAKCAQEAuQvwreiIbcoASka0Be0nvdQfU/ZGzIjONzfHCaGWqIfxjqsIG2I55X+3j8kIZZBl+oMIGzk3amZq1KWNGKsRhuDdsHKSaSAnFqPIYYfiAkp5evsBCFzWkMaB2xelDkNzYGAyTemvsnjyp3wlJjrdoJrwW5kNojz84B0NQZjn81O8BH1HOibzXIoO65oBduWGwj5zaqboEe33VFowxRJxXG+RHnOCY4XRoZ40wx32t4LefsDcMbfaNaYEt7av5uzkh/+X9AWNw6VmYKimVv2KAyYwJ5Q+ZkCyASPO9ShBdMfaiR1hETQExVPtBQB3876e0IzW/+j5o1WGu1KPk1t2kwIDAQABAoIBAHvnHM61hrRMr4kMcnoNY7DdmeR0YM+PQtUCSgmO4vwRmpK2voTnbnDW5agnKbInz8C/f+wKkapyzVF5UFKWKPQxGP+Ol65AUyv7mq6Dd7ek+lZ4PybEUv85i7WRzXkRfO2pO8WjlXthNMkkfRNuEvv5AruybciWIZRGn5uusJDh+rMI382z6b00/U7r0igj4g5o1KqT1wYxba2VT4CaSeqNEMbdOcGWDjHx7zIanHvMrRtRG4DgYIY11ohnARU8UUI/wL5WG9iVaeuepq8T1G3vLt+096UwE/GYIhwQ0UUf+HS4HviACcMWJeXbKas64twtUA0Pf0JFCxPnM/QTBtECgYEA0Zpurv8M2P/atqODGG2teKseJqz4nB9vYLbAQfpziv0OyvRQ26r72pjtBwIDxv67fVSL3/HlViBGElMGycrA/XZ1cTiXY2LAcfpnu2P/Q7vUE/n5NBg4C1Cqjgb7D4dFXOTOM182HFL5SSQiUv5jMRvqxZTX5NcxBj3wbuHt0v0CgYEA4gH1755EWtS6q8+UUdLNAM+TL1SKaMcfiGAMdMWL5uSJBQ28fFPZIZv14gTzaU+Zji3AsGXiBpgtwor4rEugmX+nL7FATIaS0rh15hjXEvczg0SyZBkiXygo9WSQFQ/1AuHmQ8dNgNHXuSv9VbQeu52xhr74saii2tCzTOfyDM8CgYBQHA4hpCls5pzZITWBqKmcbQphDcsXIIyZEj/495ghjwaQW0BsNLV9nuU4wHRhIgrWo/Gx7eoRONSPPFxj07JfLV9FnrN9sMiMx3/OBzIQ2UD9QZUVbAw/ht0o21IpZTIFhw2oZMNxn+TXJ5BW2BNhOaJJUdISDI0YLaQvPPqAoQKBgQCBXY/xtYz41PV47NvALkKL6UUdfW2wZfIltJzMplrbMgtAKkmufKw3sbb/xceyiw6hNI0sK1VCYw8mYTfQH4Xw9wGyqendI9ac6VsK90L8pyUESWk3JK/o+erf880JUVX0bWvJdiZlyzeI1aYvzWceCziXoW5m+tklGPrY1ZdWPwKBgEYm3cThyIi1MScjR7lBKPKUKfkmN88ZoNnzfcn1Mgzwpo9alTycyT9otC/wBGIf4WhRmDoCYE7htIA0C0j8YlmYhd8+gEuRnWFn8Gx8ecpSmUIIpZINeV/t9YFSbod6OnYJosxwLJGzHpb6FN4ojpO5lq7iPWN4v/dtd/p/Bfoi isConsensus: true - - peerId: 12D3KooWDLvgBnuUnuLea8QZBEA8MSffmWoNj8JFto3N5AqUDV44 + - peerId: 12D3KooWCm6fXRReUtpD4bQyy3EnzEe7htRGCAvzHw5yewb1SbRS address: 127.0.0.1:4532 + signingKey: 31nl1dejInkuEbwBf7NyEp7t6adkMOyCMMzq9ub+XQgrvMnFxeIOso/c38RWo08lSMpZLltC2yS88/EkNIWveQ== + encryptionKey: MIIEowIBAAKCAQEA3dSgJsWNz3zusneGYIjufkXe4byl+RGZNE2dUWEwPqlsjyFXLFmBQwU6UMAOvgEGLuNY2HWVLKzWsqccLqkMjEo3ZQSTft1kf3x3TFlFpPFtGI0lL59b37K3zJ6sdY65PPskhXqy4ru/oTjJh4F13qE40x9bVSrmVnllrEzlyG2kR7KOiHWmufChtvTHA6Nv4x8sevsKzwIXOMMdbKb67aw6jWic94gI8lf+KN7UHYAMKA5MvwwvvH4hadUubMH810jtpiD720dkKRYkgLviLuxhOhRn+s2UY+Dl9vDplBO5tfn0ZnU77q0OrF1qAhwPiuy0yq08ykhL4NrKiLjGdwIDAQABAoIBAHQjxlWGSODBABfgDDKufm8OFcsKAbuNQzDnEd5xi9jCy1uEkSdfFRYJvqZYZ1+DGcGitfleVmO1ehK++zpSt4cbtDTnWHGrZ9p3R95pPtVEsWGRRE7SmD9eSmyPBqvltYX/1vcrbkzXD1VRbfHMDfIpZp7iY+cLNt0/YcP73rI3+4U+4DXsPmaf4jtCBpUH0ru59aCJTJWvYFiVsapWdJY+BcAerpV7QH74dVQ3XNIWRCxsG4+S9cfi5uuenHqM3MmCz8jOpTQeepg64aSNmFsTVEeoNXfQ+78ELUIXEWBpDoWWNVTQxoy3edPThuDgEbw0KHP+z6C63ztP552kB0ECgYEA9pKCvigZyrbn/gmFha0FVEfGWkv8SGHkm3LctnOHj3fyfezKmp1bq44bBFhw+p12qN6NmpZIpMh91X/vDcmNJTAQz9ty14pB0Dlq/egV/AffjtUjYb4UzxiV3EmH97BB9rK9B4VkSdPY1FbOtAEyt6cWoYTUwwrHKzTbhOhAn2sCgYEA5k/wU0uN57BwXrcDNP10zkjxbpsoNEINBj+eGpKjZaKXU7XkgoezgzeGa04Ym6crLxmhlXtSojXFkqeLdhn5hJSKPJ+JsAZD9gM0iZ9Hb8l9/opzlSEJzMFLyCdCeu+9Hipq3OuGkJgRemn9h9UMih1zUTo2RwRdfpLvUEUANCUCgYB90AQmQw/l/64gUXtv2fj+KCFtsZfo1wpuxw0Xi5t/+RQibNB0VBaSUtA2R2pedjo1sFlQp54pdqO+bKjtwAnlD8GETdUrZcBvHt0Y8XNGRj4sA1UqanLzuPe+j0Zxe94soscRL18czJu2vRR7hKD8VKWXhM+LNdSqly3rgxZ2QQKBgFJ6okhSMHmeuD9TLzTU5/XQLZY8voMofF2WftppVVbaiXMTGsicLG97fQoEp89maJKvjSxpQ8iPlTfWBJ3A45jVUUQwpjCBrej2cOQwRHcGI7b6gjYP5OCNAMSnOqmoHYQmEKsZNdGmg+vg9UilxZ3YuimGvVVlfM4NdOK8Mzx5AoGBAKKtLvw/rpL+ZLSlO5CTycjBlY8Uy0/SkTI9T/gvwPm7zMdZW0AN7HShsus6SKATba7ZXIySY+tBWfuq9oEACzvC20Qw9tQUTS90g8mwHwTcj4H58cnvmbtOFg75RYMUYvcOjpbPLvcGKsYrobjzqv9MrrL41fgMXw8DVIomqQbP isConsensus: true space: gcTTL: 60 diff --git a/etc/configs/node3.yml b/etc/configs/node3.yml index 975cf31a..3b77fd1d 100755 --- a/etc/configs/node3.yml +++ b/etc/configs/node3.yml @@ -5,26 +5,38 @@ grpcServer: - 127.0.0.1:4432 tls: false account: - peerId: 12D3KooWG7bXBK1NdyyWT4bnGUQjbe9kpVzsZSm97MQVR13zRx4M - signingKey: dm6xzcZCMOEs7h8dOJgMqcFB+EyZMXBjjOFzAqg7GeldkBfDFG75NB1gVc25MhokEeScnh8WAWEvy4YUikPJDg== - encryptionKey: MIIEpQIBAAKCAQEA7habKY4w6fYFTneChju1kFG999EeZG1bXQlNbeV9Wbsg4Hy1FDlZUNf7QxQDxCKGnSHLySt/FOdQvp007WcLIefwgaIr3vJQn1/QBKiYiKytE4qURMwum52FHAtw0Xnd8TjKPynei9boEx5nQ8wRA786sh1BLd9oWg/WZgZZ8fwMZDQTWSdn7bQh5fQcuvnd4MQD4A63JQ+0JitF8g9tLzH5n2IvbicXjkvY31rhf4lo8XeHtkKEkerxhBUm4Q3G0hiCD0xmQqBSNeaRa5dqxplFJmWxyvJM87ugsRFlntHEVpHjnhI8ZLRf/4wDlXqYCQ3pI0V5dSdI2vL2Lynx6QIDAQABAoIBAQC1XylChdyDTnSKawZWxcOxtmOWFosljB0uibifgFR2d9Q6zyWOy4VbzbzOQ7/+uSJ9L1Kz5FvCC9j57H52X6oeYTdZObZb95ItZurrsZfJfmm22jnLExRqXZwaWijOmxzU9yMy7O1o8AUJE38tKZbImPPY3epaTLeM7EWyoSIB8T0G4J99oZBGmjsuUtAVUDzpfuvAmqs8/tSzzOW47HgxCZJJLdmQeiCEwBmKyeMcI5iUfxDFZcTB2yReDNPPWzrkn6HybwtN8f114TvV1sEZpozcnJrhB8bxF34HKEC15j/iXlobH90YvKIdVAOJDGjMJZcQc5B8UkfHeSqf6b+BAoGBAP/4K8ZzwVKU80pbN54ExpoUD5k8L6SREUIjUSpecJ76bdDtbZij2rJ6D9pPKLr5PVEMVtbpcIOY4FBpsWhzkcZ2LW9w7p27DMXAm9jcf15w/WZJAIr5D46qBMAP4hvBm5adsii6HJLBauGz7sLz2uRnQCHQaknLo24mltZ3nP6RAoGBAO4d42ENPusmatInr0oA52jlC/h6yUFLCBoziU2JYm0kNcwVzmeIIIxH5yZtL9viwuNUoZQzWIM6dgxVFyb5qO3QHTqYAL9xgVkxMpyrSHBCwuJxcH8oDu8UH2UDVmna4PUdSc8tpQtAKPGKWdWTOG5G9Fu4BbcwCT7dcCWjmhnZAoGBAOtk4XTuTNHSEu7Fdh9GixF082dbFwFDO1jUO7c4BF/fM5BYWFpwDRXm9J8x/uX7gW0AaPfY09ThiR/KIxFIfr3BPkVm2LmLI9LULz4+gI9sX0xqRCqJosnzBs1NjgUyhg/707Rqew5m+xC3NRJpyVoUrcCq9qQItrH8oOh4NZNRAoGBAN7rKDVxmxe17Yc1E8tqMTpoQ96pxMPVpI4y9TWbioO2xI59U7BlJmNt5R56VbW7AsykLGh78T9Zea5t8rDQRa/th4+VQg34Cyoe/szhJX3DYoNvw+um6uQzqHh+uWV8PeH7O2Az0TFJLYuDBDsICmpjDtzW2LL4y48I67axBNFxAoGAHIn7/XyHYzkCilSDa1BG9TMYErdCehhVjlqFJ2rvQNnQN6NOfFvln3YN0dHxrKNmUzMsn9ZcV/36AIOgEmHeLVD0KUB50MCwBPtcbGN053rXbqx8AQUkPA7/+ERXiLcEELftFn37NXDv4Wj51w92tnUwke80J4lDos87Nx91w70= + peerId: 12D3KooWE5VmEXLSksS31fWjwydNgoH9c1hMWdMdohKk1mHVVgwC + signingKey: BI+SqqwurrTaNCHtc9+DeItlNPh6/6gH9CrJwNXS6Ug/TwwRHloM7siXqOWvJVRUiJ8UCraYjuAnB4huLdby4w== + encryptionKey: MIIEowIBAAKCAQEAtyliO0Y/M1RHRNCRl5D+x337CVbv/Yhn5bF0+Ib5h72JDtewRLKWcqCxmNa0RhmSbUHIlO7itf9a9k8FBlQOg6SlVgRk5xET1FpGioS+yHsaiwx+KbCgP6QeDSMNLVKW/+WPXItvvZxoQV9m9TywGJzzMBF9QY3rWhMGV1s58S0PvIjficyORbMTZL2aKlcPjf8Mh/Yzo0eiPTR8+sKvguxonhUdEGfpts1Wn0rIr+BQhk9hto8okOeQkEy1LO8cHyVpk0Zm2jIq643CRd0qcfpOYGm+xz9nzEjCWZJdc/Bq5Vok03mi5050fv6nA/HcopBUnk5Jk5jLQEa/0rEXuwIDAQABAoIBADZuYfbjhVynqxZUNTApss1uLvAzmdZqdxXXir9gvT8NoHF8v7FqsTMXdi/JfoFmkBFP/1/jLhSP8mRIT2H2EOomP8w0OhhBBveQbG41zMyfaN/xsnyJNNY024lj5UKWzLD3c4c5GNfsZz8mLt6qTlrCKbMbP3H/zvVRugyz26BEFzXnXVsRo57MXwGPHzhMS2bdYsixuNz6Hwlu3brJkIgzQA740ABVzVG75DRwvdJ1w+kIskrlCa7tFnHl/mVaBQ0plFaY4Urjk3fOI6JzHA8I92FBWYinKPlBXBBeXp/vjsfsp60d5zi1/bdNqvMFL7HbwQO7yJd37UR0bV+1lIECgYEA1XhV18EICpxHQwm0svmvnE8MVUHEzzSlpXYZujQis6x0tXOdXEVqfh8EzSmBlJLj64ndIG13gVVeBIJszXTBLCgoUxrH1JXtECu47jIB2X9QPEaicfpnUlXcbNFS7RQIbyS1yvbKKmK9lJOA6TMtjMVmQ8zpAtivqhsc4LDI6RECgYEA26c4t/CHiqYb31CYsUDNQeL6yor1K6pfyshJ7xO2fvFj3+7H5Q5sVk4bN0btS2pird/WDlfgH7AroCbyxtCEcsnXr3gOywA5I27Jy2UAFmajC9CUvIBINdhKuEAG4Pckn0aDBamBuU/DG145NA2mXBMQQ9MsObNioGC2LVA91AsCgYAIjbPS21c5JZ3tX7wv17Vjq/8wg1wheViR0rOhNGmXjXd3tdQ+WEG2IAQPPHSGwYQEche8Lua09fi4cYluihkbbdh/y/jp2cAP/9B/Kt3MGz/ZynLD4ma1c99LNO//s+fKnEv0gAMFw8MY6vglX/mZRGeem91SUeBoDoIPtsW2IQKBgQCPAk/GSn8lAUNSYNoZRbSduhdIubIoTNPzZfXlB3OhMK6zBHb3Ji3Y/x9vHOmwWUKILBzk18ffOccdjV4xnV8ukUWxQ7x15N5OuHn/x/GHpClxrsq389mP3RPA5EbWP3KDlNgHXrZMHadM8UrTHjP67JqBXkMECkwjWPQjioPGwwKBgGBWi7axhF2Sk+SPSWKVQTTOwbpRhyDj/qzLDB836u9fCo5xYmlbXp/YtiHlk37FbRNfw90qN35tqD10dOKDmGbvm+tJxoRZpmH0w1ExGVr1KBXIp4D2jTyjHPaHEdvJEsWG5wNJcOd8gFuki/m4bafFh7iJMizvYkM8bVNV2Ctm apiServer: port: "8082" nodes: - - peerId: 12D3KooWFVGSu8MfoUnPmUGPpJKNpxaM7mezZ98V1ERGEQbTWjnE + - peerId: 12D3KooWBZFSp1MrqdQgL2uWSZpybgskz7mjrJnmhkDjudSpTUAN address: 127.0.0.1:4430 - - peerId: 12D3KooWMPgKGCLtNkmANzwHAnymEMCggS6csXuDroUFqb63FizD + signingKey: JR142BFc9/KJIy0f0BCnfMeO4Yv9InErltCuGyhvs+4Z2A9c9cGi20ECMzthOvtr90N6bq4iyfLbmhNkVMxgiw== + encryptionKey: MIIEpAIBAAKCAQEAt9WEjnITHiG0IhGdn5sGBR32Bo8qwAEZSsPhutQZnvBfTegqQwvb5LxxpfYP4C2+Wy1335fzMGtjtWyv4r2bJHX++fTh0h8xWbuMuqDlbZI79IkAhu4HFfAl6a0Ay/po4DkaBBwqHFu1oPbzKceJpb1fXXXDNO4SIMBo1CYrrI9ipJrVb0NOIbmuDUUvS6c7W8xiIudLH+lrcClpsE4f6+rVaEK188cWESmFvTFwWd0LV+1B+qP28pVRGZDcqMEeV2CoICY0daKdI9P1efPD1XbQGmafU0LlJZyww1pXT5q0yKBSdKMjspZoRbScnUmTJuhZY29cBPfqPjRiEvznjQIDAQABAoIBAQCQlI4PVepxPUKltMMKHutKJPk0yW5u2a5hndMvk9aeqR/bbuemGXKU4Bxl0TNFNdTLcuQfZystfphJvLRMGKEmuOKTBaSBFGVE1Htm4Fnwph0fQoy2kgfimh/HO3gv9L588ovihaAc84fSk8ZEqpk4T8rr/01KmJ6LQahwiaC5sig3uZgQuCGIz11xjNgavHdpytzL3qGhUPLiQAJtCEKaiFuUAEmw+dg/KH0ZHw3+/yCJ/GESwR/8yP6rfuyuLyaR1n4vr/+eH56x4922ua2XtJuz6gdqzcbPjbf2y01Q2XnwEkf6cHO6rYs+ba8BWzM8NZUeTmvLH+qY4CAMWIvBAoGBAPHuResocGdoZEDNvjUpuZlWCCRKO7goTAjFH00z6DEG0Kv37pi53/4AHshaScHLd7kQUBSH8o6Fdtf+fyZaVKdQzfSKqNVt6NglPtVTd7JhI2ddJuU6iOMBKowRk+PYnjfxjETmXMNb6FpF9ZgMc/QC6YiWZwEjooFKrhgfZWvxAoGBAMKGVY1LAoLUFwdL7DsBSf+VndN0l/ApxVjCLhT4l73HrfOEqbts0GAGRTtOA6JO2xhAvtJkcUYbStQiKyz4iPC+zG9CwMm9XNaGRAflFfcxgy1VqMQ/2TnlrwXdCLi1y+oEGcJs69O8IQACBC1m6MfEMrOOsAa3YExkxG7VBMFdAoGAIAgBH9pxz28l3uKerWFB3ohieZOOhppnPr4Cn/Ega+VQGYSxBW2Ot42ChdpWa58p0cnUIHPDbJVFH+HlKcnJ7YEoU5lMMz3jF0MPJ6VucqKj0lql/LGcUBnmbTcikocqo5OKk9DANWlkwRcEJkZ3z7XW/6uSJbd3G5EsraryfbECgYEAnaa1i09xd4pgJ3+2spN233bodEmYIgIYeLjXFBPtFtfP+P5ZeRbVQh2S2l99vnteQaenf2f8Da9s08Plbgr3IPXhRYK6MEYSCaLDXAqj5LTx9TnpDzQX3z5wvLXIrbpYyw4LunEAJ5fevtzjedBfdBdkZ/WKX8caeo9oS9LEidkCgYA9Lf6XK52LDO3uidnX7CZB9piWIV5bzrdJB6ppbJ2ywAD60NF8yecRp7fnyFRg7VCQxGkbIbv5sR9Ua/PAsBo9UFlZQGanUXpAUJi8qnDIDG2Ly6uNTwjF7s3IHC6OIn1aOSvUcgY658sXF1KfDguXv0CUs75JZ5+1djdMQAtRiQ== + - peerId: 12D3KooWHTnHZgeyDdZJwrXweFHMrSF7YBXSuuAH9GsxhbzTvfcT address: 127.0.0.1:4431 - - peerId: 12D3KooWG7bXBK1NdyyWT4bnGUQjbe9kpVzsZSm97MQVR13zRx4M + signingKey: EVlWc7+UbqSKAvjSdBq5iZt2dpcCYhDJiWkSn2+9IrJxl5F5dTHw+eIKNV3MV/tL8ext3YPRkIue/8TvUUfpaA== + encryptionKey: MIIEpAIBAAKCAQEAwLhwWK4vZQooUjulblf4I2+f5/K9yES7/HW+1bz93ZOeeiMuKb5wmw1tVt+vrY2j5cFC/krhSWUdfRwqDvv6Z0q19v9mD7zIfad54KgVSyMcVGxWLt7haGVCr78VckO5JD+aktlEM8/12crzHOWRh+j3jgELmwSwA/LiXo2ZNH9x1Vftw5MHKksWTpvaAprFTkYUrPHvrjpiuSGzT5abGUYOgWUIzTtqZYra+zOMPzVqDAlMykmUYjVO/d/l01L3xgLZQogZ9B3NRgXpTpTJ5iF7UtUejjZSJ6fYGVNwM/TEMrIhKHD54I6FYkLmp+7Rsw2MmxVXHkQPQJ7khYY8ywIDAQABAoIBAQCv97idQG6GE4A9lbi3yBsKQCIB5+LhueDr45ccEjS63M8XNogwFXM8IEZ1zEjcbzf30T8accTC/1Ctq8m7ZNh+9/iuTwUh2X43PXRLbS4ELUrwyvrmURv/9nWtgwxSCQRD1M+OxlM/++K/uk/BUtxO/KkNQGcYZG9TK7MGIsSA6Ua0fNEo+hcTzqBsED3nGYXwmn7nX4zMjPqr6TtQfpxWdwtKYbBsDcvIoigwNPajnsdSbx2M4pZh3cwBuROKs9/HpUNOtSZvPc8BbRenJQOqXG2R+O6SMBGnYf5ycHpk7Wya+1TtGObOAcrgC7RV6y3KGzq0Thu7imWC1B7GvRQBAoGBAM9yA4EBjHSQ0sP5DTT4yD3H7ytQtR3oVZYcKiWg4lPETaFhwucFzbbhmh5gB6Xng71KiIuYuvJZi2XQeL2LcBBaZwoj9cpclJ53KuQ8LL5TPZ1zOn+xU/Iy2mumzVpaSyWcDq7ArlhuGq7JWubAEcrehBia7i26Ss9ro1HqbR+ZAoGBAO3UHnZz8gmkQrUyk6rTPJHivnow2O8nh2dWuK+o+wAN+WCF10VQVaRcUS2bC/khHeomTRNZh+kzs0woLdfEtLlxECA2+MHiIJmXkLat7/Bm8gByd9iWHRZ6d9ZRvb+DPwmbZV0mZoy+8SF5DJno0uFdq6g6tTGQKmQwu1xHeI4DAoGAOQubVxB79VoV+3ozXYvEVOj0Ji8tfynyzzKzjGFvm6Vxy508oZcA+PeVECFMOR0vJxCl9+1qC1cAdGEdstHzYSvbBfjZkGphHCqdCuJZU4VEflW/knnLIeFGGzBlbCFEZPVDPF8UEpFEmSgZ7TaILgd+v91q/fwqslthMBeNJpECgYEAzzNTyu1e/IlwWL8UqepZRdxfCMPP7CPrMtv6EYhODZEfJ7nTgB7qTkTjsLD5MHZqwpnV4rrIzyJs3jfPIMHOlhVr8DUUao5gyo+i05UciryVsFAKG9dExlWyXDVg9B4baHpLSGlxRMQB/qCgmuKd/xyFtg5X2DN6y0ktosrdvBMCgYABqwzMnDF2SPx1mZjXIOCsj/03Oya75E8ZTWGorkROhyarE1wWvES472IGsZSM7qchABmVVGxr09mL0nyNA5KIIEoIWtl59yplXKrunYYoodoXtaS0whTDraf62am98IQ1LAUdf4p1dGfkrAsf8stKuxbzYtEeXQH3EHzzLOzmNg== + - peerId: 12D3KooWE5VmEXLSksS31fWjwydNgoH9c1hMWdMdohKk1mHVVgwC address: 127.0.0.1:4432 - - peerId: 12D3KooWKZcPNMmMqi6PZFjUkZqrFXXUYLpzoHBjbHLPojkuj4xp + signingKey: BI+SqqwurrTaNCHtc9+DeItlNPh6/6gH9CrJwNXS6Ug/TwwRHloM7siXqOWvJVRUiJ8UCraYjuAnB4huLdby4w== + encryptionKey: MIIEowIBAAKCAQEAtyliO0Y/M1RHRNCRl5D+x337CVbv/Yhn5bF0+Ib5h72JDtewRLKWcqCxmNa0RhmSbUHIlO7itf9a9k8FBlQOg6SlVgRk5xET1FpGioS+yHsaiwx+KbCgP6QeDSMNLVKW/+WPXItvvZxoQV9m9TywGJzzMBF9QY3rWhMGV1s58S0PvIjficyORbMTZL2aKlcPjf8Mh/Yzo0eiPTR8+sKvguxonhUdEGfpts1Wn0rIr+BQhk9hto8okOeQkEy1LO8cHyVpk0Zm2jIq643CRd0qcfpOYGm+xz9nzEjCWZJdc/Bq5Vok03mi5050fv6nA/HcopBUnk5Jk5jLQEa/0rEXuwIDAQABAoIBADZuYfbjhVynqxZUNTApss1uLvAzmdZqdxXXir9gvT8NoHF8v7FqsTMXdi/JfoFmkBFP/1/jLhSP8mRIT2H2EOomP8w0OhhBBveQbG41zMyfaN/xsnyJNNY024lj5UKWzLD3c4c5GNfsZz8mLt6qTlrCKbMbP3H/zvVRugyz26BEFzXnXVsRo57MXwGPHzhMS2bdYsixuNz6Hwlu3brJkIgzQA740ABVzVG75DRwvdJ1w+kIskrlCa7tFnHl/mVaBQ0plFaY4Urjk3fOI6JzHA8I92FBWYinKPlBXBBeXp/vjsfsp60d5zi1/bdNqvMFL7HbwQO7yJd37UR0bV+1lIECgYEA1XhV18EICpxHQwm0svmvnE8MVUHEzzSlpXYZujQis6x0tXOdXEVqfh8EzSmBlJLj64ndIG13gVVeBIJszXTBLCgoUxrH1JXtECu47jIB2X9QPEaicfpnUlXcbNFS7RQIbyS1yvbKKmK9lJOA6TMtjMVmQ8zpAtivqhsc4LDI6RECgYEA26c4t/CHiqYb31CYsUDNQeL6yor1K6pfyshJ7xO2fvFj3+7H5Q5sVk4bN0btS2pird/WDlfgH7AroCbyxtCEcsnXr3gOywA5I27Jy2UAFmajC9CUvIBINdhKuEAG4Pckn0aDBamBuU/DG145NA2mXBMQQ9MsObNioGC2LVA91AsCgYAIjbPS21c5JZ3tX7wv17Vjq/8wg1wheViR0rOhNGmXjXd3tdQ+WEG2IAQPPHSGwYQEche8Lua09fi4cYluihkbbdh/y/jp2cAP/9B/Kt3MGz/ZynLD4ma1c99LNO//s+fKnEv0gAMFw8MY6vglX/mZRGeem91SUeBoDoIPtsW2IQKBgQCPAk/GSn8lAUNSYNoZRbSduhdIubIoTNPzZfXlB3OhMK6zBHb3Ji3Y/x9vHOmwWUKILBzk18ffOccdjV4xnV8ukUWxQ7x15N5OuHn/x/GHpClxrsq389mP3RPA5EbWP3KDlNgHXrZMHadM8UrTHjP67JqBXkMECkwjWPQjioPGwwKBgGBWi7axhF2Sk+SPSWKVQTTOwbpRhyDj/qzLDB836u9fCo5xYmlbXp/YtiHlk37FbRNfw90qN35tqD10dOKDmGbvm+tJxoRZpmH0w1ExGVr1KBXIp4D2jTyjHPaHEdvJEsWG5wNJcOd8gFuki/m4bafFh7iJMizvYkM8bVNV2Ctm + - peerId: 12D3KooWB2Xvsa8RrmdhcBTJMoogqPu43tWZ3XUwXMowcCuMjHjo address: 127.0.0.1:4530 + signingKey: zsY2jhPHbfMKIKfXGh+PsNBhCLD//dmJtBNMhG3m1OIR+bF4a7B5Wid8eBRm6vtCbOJzoxhJZjRYk1vEHuhmgg== + encryptionKey: MIIEpQIBAAKCAQEA4mbDvFUlpfiRkfnW22C0XvpAfB0m1G7vGcDWfNfgMmf8xD1rknWAGNZi2Ek3rjt9uVuL3DnlLEjGf0HrhsNm/VUI3nId72zgqTZd8fHbA+6h2ba9wP1t+IUf456k41bgljD09HxpvEKtHO1OWQGnVFMc5gqMeM7uovZS+NbXvG5RJoVgG/Ugw6BgEmj0e0LDmvvn2FRvmzst77EPQKlp43J4Vl0n7OtvBypLd/KA0dtB3Nl5rjcewFpSbUadhzJMnw38mtj/jwJsvvwUnzKuv6O6ZK1uqW8bFXKN5OmP8gw+EkZo/GX5IuyHdQwjYWKTAuWn/bYXbwsXAqYEtEW+XQIDAQABAoIBADCbC27FgP2u7eG/F6eljVPOukVrJMj6wA5xXhsTZaistpGS9iNNYqDydeolXfTkBMvkoZQ4QcFOJn9vsZcPIG9G8E6BhXe/kkQBzg2BdRnVA55wIzDpt9BhFEWT66Z7ImBcRlqu0yx9zBinwehN+JSb+1pP7XSKSKVn6MxPo6VqSlP4xRN8rQrq8sVvIt1eVH01rxhGBRM/gpoPtIXlf9cYRoa/49c1/Hk3YmE+oYG+oWzoBIsIDS8qEKfEzIrHTB8d0DmLW38xInTqwNgcp6GpoK9mDBhPcb6vZpd0uWx8pwqJ4cYQTJ/ksOrq67T6yyMaJn8WRJflg1taFD9ONoECgYEA9B7LsEXHRMzEAM1YKqxoiOm8UVfv+qdsLUBoeJb81fdgb8YjXq0KhD7+hGhfCogIWuCygXOYCd8srzZxlkSCK3S2F6R5xlsZY7TwSd2LvH4821T8dX/h+mYoe7dbrE2PjWuZL9PwSOLGfEYS7BS7vwl3Qd58sF5/hVX2Rg9V4tECgYEA7Ws7CEt3ic3i7YuzAdaw22WOHGETwb9cV5cwKRnvbhpIcU9fQa291+kIhgV6TaJuAmUJbnB3jwRYG3wEurRodlh8g6HYyCFzB9ZjKuG4av1wlLw8pTSMngH7Vlsy+OiItQhUSB14AUAD9+d4mq5P2uPm0aqw8qbU8Z4tZ6Xyjc0CgYEA4ULRfdTFrcytSHgzVR1GUKAt73mPreFzxsXaIPxiTiY4zKsu1Bwkyic+wHt2x8cCvqj8zssVjnZrSzqX0ath2iuWI3bYD5rccM7zs5VFbiemjFV9qAbbRS2jSZXGd9YSEtMoxaNx5C+uK9qVd1cib4OSkit1L2HjleveloNsIyECgYEA25APR9yC8C43bveC1HB3nm6MvjII02TlQRvQrjIN+wTTefatYVAMAWDBQTBPqvxMQGqwDjJ0Xw7lbIWE2iV9dfTfMdy7XlmQx+68Ryv4IPnA48wxSZcPdBDhHzu4J/jkdIb/arHWCVHqWZj3MBWERCn/jGcOvVkMFWbzFqehaQECgYEAl9saSHtsYYbhEX/PMLbecJtJU2WEOkML0QpyZyzF3Y0FnWpjlY4HV5RUsEOksAjbaAxbF7Xk8NZCjmqdR6+WdHt+3CQl+964vkvBIGWYXyo5/zso5HxzTpZTN8I03Xk09nMfn72lPKq6dWRD1EVBPX0TfOzg1xL7ftng7BR+bx0= isConsensus: true - - peerId: 12D3KooWGVroVVTuhc7GcnYZ3T9RmvuB4LWwqQRgvEMWQWPQqTy8 + - peerId: 12D3KooWHSSHxDymTrGQjTHSATFxWnnz4incxYazKukgBia3xPAm address: 127.0.0.1:4531 + signingKey: uN55hCvFWVBlFcptEca/PlCJBVvMPmCvB9WnWHHGMftxP2GGPEVntjpeS2aRrcHvfvf0WfjAP47CQdr+V8yD5g== + encryptionKey: MIIEowIBAAKCAQEAuQvwreiIbcoASka0Be0nvdQfU/ZGzIjONzfHCaGWqIfxjqsIG2I55X+3j8kIZZBl+oMIGzk3amZq1KWNGKsRhuDdsHKSaSAnFqPIYYfiAkp5evsBCFzWkMaB2xelDkNzYGAyTemvsnjyp3wlJjrdoJrwW5kNojz84B0NQZjn81O8BH1HOibzXIoO65oBduWGwj5zaqboEe33VFowxRJxXG+RHnOCY4XRoZ40wx32t4LefsDcMbfaNaYEt7av5uzkh/+X9AWNw6VmYKimVv2KAyYwJ5Q+ZkCyASPO9ShBdMfaiR1hETQExVPtBQB3876e0IzW/+j5o1WGu1KPk1t2kwIDAQABAoIBAHvnHM61hrRMr4kMcnoNY7DdmeR0YM+PQtUCSgmO4vwRmpK2voTnbnDW5agnKbInz8C/f+wKkapyzVF5UFKWKPQxGP+Ol65AUyv7mq6Dd7ek+lZ4PybEUv85i7WRzXkRfO2pO8WjlXthNMkkfRNuEvv5AruybciWIZRGn5uusJDh+rMI382z6b00/U7r0igj4g5o1KqT1wYxba2VT4CaSeqNEMbdOcGWDjHx7zIanHvMrRtRG4DgYIY11ohnARU8UUI/wL5WG9iVaeuepq8T1G3vLt+096UwE/GYIhwQ0UUf+HS4HviACcMWJeXbKas64twtUA0Pf0JFCxPnM/QTBtECgYEA0Zpurv8M2P/atqODGG2teKseJqz4nB9vYLbAQfpziv0OyvRQ26r72pjtBwIDxv67fVSL3/HlViBGElMGycrA/XZ1cTiXY2LAcfpnu2P/Q7vUE/n5NBg4C1Cqjgb7D4dFXOTOM182HFL5SSQiUv5jMRvqxZTX5NcxBj3wbuHt0v0CgYEA4gH1755EWtS6q8+UUdLNAM+TL1SKaMcfiGAMdMWL5uSJBQ28fFPZIZv14gTzaU+Zji3AsGXiBpgtwor4rEugmX+nL7FATIaS0rh15hjXEvczg0SyZBkiXygo9WSQFQ/1AuHmQ8dNgNHXuSv9VbQeu52xhr74saii2tCzTOfyDM8CgYBQHA4hpCls5pzZITWBqKmcbQphDcsXIIyZEj/495ghjwaQW0BsNLV9nuU4wHRhIgrWo/Gx7eoRONSPPFxj07JfLV9FnrN9sMiMx3/OBzIQ2UD9QZUVbAw/ht0o21IpZTIFhw2oZMNxn+TXJ5BW2BNhOaJJUdISDI0YLaQvPPqAoQKBgQCBXY/xtYz41PV47NvALkKL6UUdfW2wZfIltJzMplrbMgtAKkmufKw3sbb/xceyiw6hNI0sK1VCYw8mYTfQH4Xw9wGyqendI9ac6VsK90L8pyUESWk3JK/o+erf880JUVX0bWvJdiZlyzeI1aYvzWceCziXoW5m+tklGPrY1ZdWPwKBgEYm3cThyIi1MScjR7lBKPKUKfkmN88ZoNnzfcn1Mgzwpo9alTycyT9otC/wBGIf4WhRmDoCYE7htIA0C0j8YlmYhd8+gEuRnWFn8Gx8ecpSmUIIpZINeV/t9YFSbod6OnYJosxwLJGzHpb6FN4ojpO5lq7iPWN4v/dtd/p/Bfoi isConsensus: true - - peerId: 12D3KooWDLvgBnuUnuLea8QZBEA8MSffmWoNj8JFto3N5AqUDV44 + - peerId: 12D3KooWCm6fXRReUtpD4bQyy3EnzEe7htRGCAvzHw5yewb1SbRS address: 127.0.0.1:4532 + signingKey: 31nl1dejInkuEbwBf7NyEp7t6adkMOyCMMzq9ub+XQgrvMnFxeIOso/c38RWo08lSMpZLltC2yS88/EkNIWveQ== + encryptionKey: MIIEowIBAAKCAQEA3dSgJsWNz3zusneGYIjufkXe4byl+RGZNE2dUWEwPqlsjyFXLFmBQwU6UMAOvgEGLuNY2HWVLKzWsqccLqkMjEo3ZQSTft1kf3x3TFlFpPFtGI0lL59b37K3zJ6sdY65PPskhXqy4ru/oTjJh4F13qE40x9bVSrmVnllrEzlyG2kR7KOiHWmufChtvTHA6Nv4x8sevsKzwIXOMMdbKb67aw6jWic94gI8lf+KN7UHYAMKA5MvwwvvH4hadUubMH810jtpiD720dkKRYkgLviLuxhOhRn+s2UY+Dl9vDplBO5tfn0ZnU77q0OrF1qAhwPiuy0yq08ykhL4NrKiLjGdwIDAQABAoIBAHQjxlWGSODBABfgDDKufm8OFcsKAbuNQzDnEd5xi9jCy1uEkSdfFRYJvqZYZ1+DGcGitfleVmO1ehK++zpSt4cbtDTnWHGrZ9p3R95pPtVEsWGRRE7SmD9eSmyPBqvltYX/1vcrbkzXD1VRbfHMDfIpZp7iY+cLNt0/YcP73rI3+4U+4DXsPmaf4jtCBpUH0ru59aCJTJWvYFiVsapWdJY+BcAerpV7QH74dVQ3XNIWRCxsG4+S9cfi5uuenHqM3MmCz8jOpTQeepg64aSNmFsTVEeoNXfQ+78ELUIXEWBpDoWWNVTQxoy3edPThuDgEbw0KHP+z6C63ztP552kB0ECgYEA9pKCvigZyrbn/gmFha0FVEfGWkv8SGHkm3LctnOHj3fyfezKmp1bq44bBFhw+p12qN6NmpZIpMh91X/vDcmNJTAQz9ty14pB0Dlq/egV/AffjtUjYb4UzxiV3EmH97BB9rK9B4VkSdPY1FbOtAEyt6cWoYTUwwrHKzTbhOhAn2sCgYEA5k/wU0uN57BwXrcDNP10zkjxbpsoNEINBj+eGpKjZaKXU7XkgoezgzeGa04Ym6crLxmhlXtSojXFkqeLdhn5hJSKPJ+JsAZD9gM0iZ9Hb8l9/opzlSEJzMFLyCdCeu+9Hipq3OuGkJgRemn9h9UMih1zUTo2RwRdfpLvUEUANCUCgYB90AQmQw/l/64gUXtv2fj+KCFtsZfo1wpuxw0Xi5t/+RQibNB0VBaSUtA2R2pedjo1sFlQp54pdqO+bKjtwAnlD8GETdUrZcBvHt0Y8XNGRj4sA1UqanLzuPe+j0Zxe94soscRL18czJu2vRR7hKD8VKWXhM+LNdSqly3rgxZ2QQKBgFJ6okhSMHmeuD9TLzTU5/XQLZY8voMofF2WftppVVbaiXMTGsicLG97fQoEp89maJKvjSxpQ8iPlTfWBJ3A45jVUUQwpjCBrej2cOQwRHcGI7b6gjYP5OCNAMSnOqmoHYQmEKsZNdGmg+vg9UilxZ3YuimGvVVlfM4NdOK8Mzx5AoGBAKKtLvw/rpL+ZLSlO5CTycjBlY8Uy0/SkTI9T/gvwPm7zMdZW0AN7HShsus6SKATba7ZXIySY+tBWfuq9oEACzvC20Qw9tQUTS90g8mwHwTcj4H58cnvmbtOFg75RYMUYvcOjpbPLvcGKsYrobjzqv9MrrL41fgMXw8DVIomqQbP isConsensus: true space: gcTTL: 60