mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-10-31 21:47:27 +00:00 
			
		
		
		
	Merge pull request #24 from QuilibriumNetwork/PROTO-57
PROTO-57 - Peer Version Enforcement
This commit is contained in:
		
						commit
						76089a1157
					
				| @ -4,10 +4,13 @@ import ( | ||||
| 	"bytes" | ||||
| 	"crypto" | ||||
| 	"crypto/rand" | ||||
| 	"encoding/binary" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/iden3/go-iden3-crypto/poseidon" | ||||
| 	pcrypto "github.com/libp2p/go-libp2p/core/crypto" | ||||
| 	"github.com/libp2p/go-libp2p/core/peer" | ||||
| 	"github.com/pkg/errors" | ||||
| 	"go.uber.org/zap" | ||||
| 	"golang.org/x/crypto/sha3" | ||||
| @ -157,10 +160,6 @@ func (e *CeremonyDataClockConsensusEngine) handleCeremonyPeerListAnnounce( | ||||
| 
 | ||||
| 	e.peerMapMx.Lock() | ||||
| 	for _, p := range announce.PeerList { | ||||
| 		if p.Timestamp < time.Now().UnixMilli()-PEER_INFO_TTL { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if _, ok := e.uncooperativePeersMap[string(p.PeerId)]; ok { | ||||
| 			continue | ||||
| 		} | ||||
| @ -169,12 +168,71 @@ func (e *CeremonyDataClockConsensusEngine) handleCeremonyPeerListAnnounce( | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if p.PublicKey == nil || p.Signature == nil || p.Version == nil { | ||||
| 			if time.Now().After(consensus.GetMinimumVersionCutoff()) { | ||||
| 				if bytes.Equal(p.PeerId, peerID) { | ||||
| 					e.logger.Warn( | ||||
| 						"peer provided outdated version, penalizing app score", | ||||
| 						zap.Binary("peer_id", p.PeerId), | ||||
| 					) | ||||
| 					e.pubSub.SetPeerScore(p.PeerId, -100) | ||||
| 				} | ||||
| 				continue | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if p.PublicKey != nil && p.Signature != nil && p.Version != nil { | ||||
| 			key, err := pcrypto.UnmarshalEd448PublicKey(p.PublicKey) | ||||
| 			if err != nil { | ||||
| 				e.logger.Error( | ||||
| 					"peer announcement contained invalid pubkey", | ||||
| 					zap.Binary("public_key", p.PublicKey), | ||||
| 				) | ||||
| 				continue | ||||
| 			} | ||||
| 
 | ||||
| 			if !(peer.ID(p.PeerId)).MatchesPublicKey(key) { | ||||
| 				e.logger.Error( | ||||
| 					"peer announcement peer id does not match pubkey", | ||||
| 					zap.Binary("peer_id", p.PeerId), | ||||
| 					zap.Binary("public_key", p.PublicKey), | ||||
| 				) | ||||
| 				continue | ||||
| 			} | ||||
| 
 | ||||
| 			msg := binary.BigEndian.AppendUint64([]byte{}, p.MaxFrame) | ||||
| 			msg = append(msg, p.Version...) | ||||
| 			msg = binary.BigEndian.AppendUint64(msg, uint64(p.Timestamp)) | ||||
| 			b, err := key.Verify(msg, p.Signature) | ||||
| 			if err != nil || !b { | ||||
| 				e.logger.Error( | ||||
| 					"peer provided invalid signature", | ||||
| 					zap.Binary("msg", msg), | ||||
| 					zap.Binary("public_key", p.PublicKey), | ||||
| 					zap.Binary("signature", p.Signature), | ||||
| 				) | ||||
| 				continue | ||||
| 			} | ||||
| 
 | ||||
| 			if bytes.Compare(p.Version, consensus.GetMinimumVersion()) < 0 && | ||||
| 				time.Now().After(consensus.GetMinimumVersionCutoff()) { | ||||
| 				e.logger.Warn( | ||||
| 					"peer provided outdated version, penalizing app score", | ||||
| 					zap.Binary("peer_id", p.PeerId), | ||||
| 				) | ||||
| 				e.pubSub.SetPeerScore(p.PeerId, -100) | ||||
| 				continue | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		multiaddr := p.Multiaddr | ||||
| 		if bytes.Equal(p.PeerId, peerID) || p.Multiaddr == "" { | ||||
| 			// we have to fetch self-reported peer info
 | ||||
| 			multiaddr = e.pubSub.GetMultiaddrOfPeer(peerID) | ||||
| 		} | ||||
| 
 | ||||
| 		e.pubSub.SetPeerScore(p.PeerId, 10) | ||||
| 
 | ||||
| 		e.peerMap[string(p.PeerId)] = &peerInfo{ | ||||
| 			peerId:    p.PeerId, | ||||
| 			multiaddr: multiaddr, | ||||
| @ -182,6 +240,9 @@ func (e *CeremonyDataClockConsensusEngine) handleCeremonyPeerListAnnounce( | ||||
| 			direct:    bytes.Equal(p.PeerId, peerID), | ||||
| 			lastSeen:  time.Now().Unix(), | ||||
| 			timestamp: p.Timestamp, | ||||
| 			version:   p.Version, | ||||
| 			signature: p.Signature, | ||||
| 			publicKey: p.PublicKey, | ||||
| 		} | ||||
| 	} | ||||
| 	e.peerMapMx.Unlock() | ||||
|  | ||||
| @ -2,6 +2,7 @@ package ceremony | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"encoding/binary" | ||||
| 	"math/big" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| @ -33,6 +34,7 @@ const ( | ||||
| 	SyncStatusNotSyncing = iota | ||||
| 	SyncStatusAwaitingResponse | ||||
| 	SyncStatusSynchronizing | ||||
| 	SyncStatusFailed | ||||
| ) | ||||
| 
 | ||||
| type peerInfo struct { | ||||
| @ -41,6 +43,9 @@ type peerInfo struct { | ||||
| 	maxFrame  uint64 | ||||
| 	timestamp int64 | ||||
| 	lastSeen  int64 | ||||
| 	version   []byte | ||||
| 	signature []byte | ||||
| 	publicKey []byte | ||||
| 	direct    bool | ||||
| } | ||||
| 
 | ||||
| @ -81,6 +86,7 @@ type CeremonyDataClockConsensusEngine struct { | ||||
| 	parentSelector                 []byte | ||||
| 	syncingStatus                  SyncStatusType | ||||
| 	syncingTarget                  []byte | ||||
| 	previousHead                   *protobufs.ClockFrame | ||||
| 	currentDistance                *big.Int | ||||
| 	engineMx                       sync.Mutex | ||||
| 	dependencyMapMx                sync.Mutex | ||||
| @ -248,25 +254,36 @@ func (e *CeremonyDataClockConsensusEngine) Start( | ||||
| 				PeerList: []*protobufs.CeremonyPeer{}, | ||||
| 			} | ||||
| 
 | ||||
| 			timestamp := time.Now().UnixMilli() | ||||
| 			msg := binary.BigEndian.AppendUint64([]byte{}, e.frame) | ||||
| 			msg = append(msg, consensus.GetVersion()...) | ||||
| 			msg = binary.BigEndian.AppendUint64(msg, uint64(timestamp)) | ||||
| 			sig, err := e.pubSub.SignMessage(msg) | ||||
| 			if err != nil { | ||||
| 				panic(err) | ||||
| 			} | ||||
| 
 | ||||
| 			e.peerMapMx.Lock() | ||||
| 			e.peerMap[string(e.pubSub.GetPeerID())] = &peerInfo{ | ||||
| 				peerId:    e.pubSub.GetPeerID(), | ||||
| 				multiaddr: "", | ||||
| 				maxFrame:  e.frame, | ||||
| 				timestamp: time.Now().UnixMilli(), | ||||
| 				version:   consensus.GetVersion(), | ||||
| 				signature: sig, | ||||
| 				publicKey: e.pubSub.GetPublicKey(), | ||||
| 				timestamp: timestamp, | ||||
| 			} | ||||
| 			deletes := []*peerInfo{} | ||||
| 			for _, v := range e.peerMap { | ||||
| 				if v.timestamp > time.Now().UnixMilli()-PEER_INFO_TTL { | ||||
| 				list.PeerList = append(list.PeerList, &protobufs.CeremonyPeer{ | ||||
| 					PeerId:    v.peerId, | ||||
| 					Multiaddr: v.multiaddr, | ||||
| 					MaxFrame:  v.maxFrame, | ||||
| 					Timestamp: v.timestamp, | ||||
| 					Version:   v.version, | ||||
| 					Signature: v.signature, | ||||
| 					PublicKey: v.publicKey, | ||||
| 				}) | ||||
| 				} else { | ||||
| 					deletes = append(deletes, v) | ||||
| 				} | ||||
| 			} | ||||
| 			for _, v := range e.uncooperativePeersMap { | ||||
| 				if v.timestamp <= time.Now().UnixMilli()-UNCOOPERATIVE_PEER_INFO_TTL { | ||||
| @ -274,7 +291,6 @@ func (e *CeremonyDataClockConsensusEngine) Start( | ||||
| 				} | ||||
| 			} | ||||
| 			for _, v := range deletes { | ||||
| 				delete(e.peerMap, string(v.peerId)) | ||||
| 				delete(e.uncooperativePeersMap, string(v.peerId)) | ||||
| 			} | ||||
| 			e.peerMapMx.Unlock() | ||||
| @ -412,6 +428,9 @@ func ( | ||||
| 			Multiaddrs: []string{v.multiaddr}, | ||||
| 			MaxFrame:   v.maxFrame, | ||||
| 			Timestamp:  v.timestamp, | ||||
| 			Version:    v.version, | ||||
| 			Signature:  v.signature, | ||||
| 			PublicKey:  v.publicKey, | ||||
| 		}) | ||||
| 	} | ||||
| 	for _, v := range e.uncooperativePeersMap { | ||||
| @ -422,6 +441,9 @@ func ( | ||||
| 				Multiaddrs: []string{v.multiaddr}, | ||||
| 				MaxFrame:   v.maxFrame, | ||||
| 				Timestamp:  v.timestamp, | ||||
| 				Version:    v.version, | ||||
| 				Signature:  v.signature, | ||||
| 				PublicKey:  v.publicKey, | ||||
| 			}, | ||||
| 		) | ||||
| 	} | ||||
|  | ||||
| @ -900,8 +900,8 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 	client := protobufs.NewCeremonyServiceClient(cc) | ||||
| 
 | ||||
| 	from := latest.FrameNumber | ||||
| 	if from == 0 { | ||||
| 		from = 1 | ||||
| 	if from <= 1 { | ||||
| 		from = 2 | ||||
| 	} | ||||
| 
 | ||||
| 	if maxFrame-from > 32 { | ||||
| @ -909,7 +909,7 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 		// respond with a valid answer, optimistically continue from this
 | ||||
| 		// frame, if we hit a fault we'll mark them as uncooperative and move
 | ||||
| 		// on
 | ||||
| 		from = 1 | ||||
| 		from = 2 | ||||
| 		s, err := client.GetCompressedSyncFrames( | ||||
| 			context.Background(), | ||||
| 			&protobufs.ClockFramesRequest{ | ||||
| @ -941,6 +941,7 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 			) | ||||
| 			var next *protobufs.ClockFrame | ||||
| 			if next, err = e.decompressAndStoreCandidates( | ||||
| 				peerId, | ||||
| 				syncMsg, | ||||
| 				e.logger.Info, | ||||
| 			); err != nil && !errors.Is(err, ErrNoNewFrames) { | ||||
| @ -958,6 +959,7 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 				} | ||||
| 
 | ||||
| 				e.syncingTarget = nil | ||||
| 				e.syncingStatus = SyncStatusFailed | ||||
| 				return currentLatest, errors.Wrap(err, "reverse optimistic sync") | ||||
| 			} | ||||
| 			if next != nil { | ||||
| @ -970,6 +972,7 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 			} | ||||
| 			e.logger.Error("error while receiving sync", zap.Error(err)) | ||||
| 			e.syncingTarget = nil | ||||
| 			e.syncingStatus = SyncStatusFailed | ||||
| 			return latest, errors.Wrap(err, "reverse optimistic sync") | ||||
| 		} | ||||
| 	} | ||||
| @ -981,7 +984,7 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 			context.Background(), | ||||
| 			&protobufs.ClockFramesRequest{ | ||||
| 				Filter:          e.filter, | ||||
| 				FromFrameNumber: from, | ||||
| 				FromFrameNumber: from - 1, | ||||
| 				ToFrameNumber:   maxFrame, | ||||
| 			}, | ||||
| 			grpc.MaxCallRecvMsgSize(600*1024*1024), | ||||
| @ -995,6 +998,7 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 			e.uncooperativePeersMap[string(peerId)] = e.peerMap[string(peerId)] | ||||
| 			delete(e.peerMap, string(peerId)) | ||||
| 			e.peerMapMx.Unlock() | ||||
| 			e.syncingStatus = SyncStatusFailed | ||||
| 
 | ||||
| 			if err := cc.Close(); err != nil { | ||||
| 				e.logger.Error("error while closing connection", zap.Error(err)) | ||||
| @ -1011,6 +1015,7 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 					zap.Int("proofs", len(syncMsg.Proofs)), | ||||
| 				) | ||||
| 				if _, err = e.decompressAndStoreCandidates( | ||||
| 					peerId, | ||||
| 					syncMsg, | ||||
| 					e.logger.Debug, | ||||
| 				); err != nil && !errors.Is(err, ErrNoNewFrames) { | ||||
| @ -1018,7 +1023,8 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 						"could not decompress and store candidate", | ||||
| 						zap.Error(err), | ||||
| 					) | ||||
| 
 | ||||
| 					e.syncingTarget = nil | ||||
| 					e.syncingStatus = SyncStatusFailed | ||||
| 					if err := cc.Close(); err != nil { | ||||
| 						e.logger.Error("error while closing connection", zap.Error(err)) | ||||
| 					} | ||||
| @ -1026,6 +1032,8 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 				} | ||||
| 			} | ||||
| 			if err != nil && err != io.EOF && !errors.Is(err, ErrNoNewFrames) { | ||||
| 				e.syncingTarget = nil | ||||
| 				e.syncingStatus = SyncStatusFailed | ||||
| 				e.logger.Error("error while receiving sync", zap.Error(err)) | ||||
| 				if err := cc.Close(); err != nil { | ||||
| 					e.logger.Error("error while closing connection", zap.Error(err)) | ||||
| @ -1037,6 +1045,9 @@ func (e *CeremonyDataClockConsensusEngine) reverseOptimisticSync( | ||||
| 		if err := cc.Close(); err != nil { | ||||
| 			e.logger.Error("error while closing connection", zap.Error(err)) | ||||
| 		} | ||||
| 
 | ||||
| 		e.syncingTarget = nil | ||||
| 		e.syncingStatus = SyncStatusNotSyncing | ||||
| 	}() | ||||
| 
 | ||||
| 	return latest, nil | ||||
| @ -1070,7 +1081,6 @@ func (e *CeremonyDataClockConsensusEngine) sync( | ||||
| 	} | ||||
| 
 | ||||
| 	if maxFrame > from { | ||||
| 		from = 1 | ||||
| 		s, err := client.GetCompressedSyncFrames( | ||||
| 			context.Background(), | ||||
| 			&protobufs.ClockFramesRequest{ | ||||
| @ -1101,6 +1111,7 @@ func (e *CeremonyDataClockConsensusEngine) sync( | ||||
| 			) | ||||
| 			var next *protobufs.ClockFrame | ||||
| 			if next, err = e.decompressAndStoreCandidates( | ||||
| 				peerId, | ||||
| 				syncMsg, | ||||
| 				e.logger.Info, | ||||
| 			); err != nil && !errors.Is(err, ErrNoNewFrames) { | ||||
| @ -1147,6 +1158,10 @@ func (e *CeremonyDataClockConsensusEngine) collect( | ||||
| 		e.logger.Info("collecting vdf proofs") | ||||
| 
 | ||||
| 		latest := currentFramePublished | ||||
| 		if e.syncingStatus == SyncStatusFailed { | ||||
| 			latest = e.previousHead | ||||
| 			e.syncingStatus = SyncStatusNotSyncing | ||||
| 		} | ||||
| 		maxFrame := uint64(0) | ||||
| 		var peerId []byte | ||||
| 		peerId, maxFrame, err := e.GetMostAheadPeer() | ||||
| @ -1162,6 +1177,7 @@ func (e *CeremonyDataClockConsensusEngine) collect( | ||||
| 			) | ||||
| 
 | ||||
| 			e.syncingTarget = peerId | ||||
| 			e.previousHead = latest | ||||
| 			latest, err = e.reverseOptimisticSync(latest, maxFrame, peerId) | ||||
| 		} else if maxFrame > latest.FrameNumber { | ||||
| 			latest, err = e.sync(latest, maxFrame, peerId) | ||||
|  | ||||
| @ -78,6 +78,7 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames( | ||||
| 	) | ||||
| 
 | ||||
| 	from := request.FromFrameNumber | ||||
| 	parent := request.ParentSelector | ||||
| 
 | ||||
| 	frame, _, err := e.clockStore.GetDataClockFrame( | ||||
| 		request.Filter, | ||||
| @ -91,6 +92,8 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames( | ||||
| 			) | ||||
| 			return errors.Wrap(err, "get compressed sync frames") | ||||
| 		} else { | ||||
| 			frames, err := e.clockStore.GetCandidateDataClockFrames(e.filter, from) | ||||
| 			if err != nil || len(frames) == 0 { | ||||
| 				e.logger.Debug( | ||||
| 					"peer asked for undiscovered frame", | ||||
| 					zap.Uint64("frame_number", request.FromFrameNumber), | ||||
| @ -109,9 +112,11 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames( | ||||
| 
 | ||||
| 				return nil | ||||
| 			} | ||||
| 
 | ||||
| 			parent = nil | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	parent := request.ParentSelector | ||||
| 	if parent != nil { | ||||
| 		if !bytes.Equal(frame.ParentSelector, parent) { | ||||
| 			e.logger.Info( | ||||
| @ -151,6 +156,12 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames( | ||||
| 	max := e.frame | ||||
| 	to := request.ToFrameNumber | ||||
| 
 | ||||
| 	// We need to slightly rewind, to compensate for unconfirmed frame heads on a
 | ||||
| 	// given branch
 | ||||
| 	if from >= 2 { | ||||
| 		from-- | ||||
| 	} | ||||
| 
 | ||||
| 	for { | ||||
| 		if to == 0 || to-from > 32 { | ||||
| 			if max > from+31 { | ||||
| @ -189,6 +200,7 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames( | ||||
| } | ||||
| 
 | ||||
| func (e *CeremonyDataClockConsensusEngine) decompressAndStoreCandidates( | ||||
| 	peerId []byte, | ||||
| 	syncMsg *protobufs.CeremonyCompressedSync, | ||||
| 	loggerFunc func(msg string, fields ...zapcore.Field), | ||||
| ) (*protobufs.ClockFrame, error) { | ||||
| @ -196,9 +208,13 @@ func (e *CeremonyDataClockConsensusEngine) decompressAndStoreCandidates( | ||||
| 		return nil, ErrNoNewFrames | ||||
| 	} | ||||
| 
 | ||||
| 	if len(syncMsg.TruncatedClockFrames) != int( | ||||
| 	if len(syncMsg.TruncatedClockFrames) < int( | ||||
| 		syncMsg.ToFrameNumber-syncMsg.FromFrameNumber+1, | ||||
| 	) { | ||||
| 		e.peerMapMx.Lock() | ||||
| 		e.uncooperativePeersMap[string(peerId)] = e.peerMap[string(peerId)] | ||||
| 		delete(e.peerMap, string(peerId)) | ||||
| 		e.peerMapMx.Unlock() | ||||
| 		return nil, errors.New("invalid continuity for compressed sync response") | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -2,6 +2,7 @@ package consensus | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/config" | ||||
| 	"source.quilibrium.com/quilibrium/monorepo/node/execution" | ||||
| @ -49,3 +50,15 @@ type DataConsensusEngine interface { | ||||
| 	IsInProverTrie(key []byte) bool | ||||
| 	GetPeerInfo() *protobufs.PeerInfoResponse | ||||
| } | ||||
| 
 | ||||
| func GetMinimumVersionCutoff() time.Time { | ||||
| 	return time.Date(2023, time.November, 3, 0, 0, 0, 0, time.UTC) | ||||
| } | ||||
| 
 | ||||
| func GetMinimumVersion() []byte { | ||||
| 	return []byte{0x01, 0x01, 0x05} | ||||
| } | ||||
| 
 | ||||
| func GetVersion() []byte { | ||||
| 	return []byte{0x01, 0x01, 0x05} | ||||
| } | ||||
|  | ||||
| @ -231,5 +231,5 @@ func printLogo() { | ||||
| 
 | ||||
| func printVersion() { | ||||
| 	fmt.Println(" ") | ||||
| 	fmt.Println("                         Quilibrium Node - v1.1.4 – Dawn") | ||||
| 	fmt.Println("                         Quilibrium Node - v1.1.5 – Dawn") | ||||
| } | ||||
|  | ||||
| @ -39,6 +39,9 @@ type BlossomSub struct { | ||||
| 	peerID      peer.ID | ||||
| 	bitmaskMap  map[string]*blossomsub.Bitmask | ||||
| 	h           host.Host | ||||
| 	signKey     crypto.PrivKey | ||||
| 	peerScore   map[string]int64 | ||||
| 	peerScoreMx sync.Mutex | ||||
| } | ||||
| 
 | ||||
| var _ PubSub = (*BlossomSub)(nil) | ||||
| @ -63,13 +66,14 @@ func NewBlossomSub( | ||||
| 		libp2p.ListenAddrStrings(p2pConfig.ListenMultiaddr), | ||||
| 	} | ||||
| 
 | ||||
| 	var privKey crypto.PrivKey | ||||
| 	if p2pConfig.PeerPrivKey != "" { | ||||
| 		peerPrivKey, err := hex.DecodeString(p2pConfig.PeerPrivKey) | ||||
| 		if err != nil { | ||||
| 			panic(errors.Wrap(err, "error unmarshaling peerkey")) | ||||
| 		} | ||||
| 
 | ||||
| 		privKey, err := crypto.UnmarshalEd448PrivateKey(peerPrivKey) | ||||
| 		privKey, err = crypto.UnmarshalEd448PrivateKey(peerPrivKey) | ||||
| 		if err != nil { | ||||
| 			panic(errors.Wrap(err, "error unmarshaling peerkey")) | ||||
| 		} | ||||
| @ -77,6 +81,14 @@ func NewBlossomSub( | ||||
| 		opts = append(opts, libp2p.Identity(privKey)) | ||||
| 	} | ||||
| 
 | ||||
| 	bs := &BlossomSub{ | ||||
| 		ctx:        ctx, | ||||
| 		logger:     logger, | ||||
| 		bitmaskMap: make(map[string]*blossomsub.Bitmask), | ||||
| 		signKey:    privKey, | ||||
| 		peerScore:  make(map[string]int64), | ||||
| 	} | ||||
| 
 | ||||
| 	h, err := libp2p.New(opts...) | ||||
| 	if err != nil { | ||||
| 		panic(errors.Wrap(err, "error constructing p2p")) | ||||
| @ -109,6 +121,31 @@ func NewBlossomSub( | ||||
| 	if tracer != nil { | ||||
| 		blossomOpts = append(blossomOpts, blossomsub.WithEventTracer(tracer)) | ||||
| 	} | ||||
| 	blossomOpts = append(blossomOpts, blossomsub.WithPeerScore( | ||||
| 		&blossomsub.PeerScoreParams{ | ||||
| 			SkipAtomicValidation:        false, | ||||
| 			BitmaskScoreCap:             0, | ||||
| 			IPColocationFactorWeight:    -1, | ||||
| 			IPColocationFactorThreshold: 6, | ||||
| 			BehaviourPenaltyWeight:      -1, | ||||
| 			BehaviourPenaltyThreshold:   100, | ||||
| 			BehaviourPenaltyDecay:       .5, | ||||
| 			DecayInterval:               time.Minute, | ||||
| 			DecayToZero:                 .1, | ||||
| 			RetainScore:                 5 * time.Minute, | ||||
| 			AppSpecificScore: func(p peer.ID) float64 { | ||||
| 				return float64(bs.GetPeerScore([]byte(p))) | ||||
| 			}, | ||||
| 			AppSpecificWeight: 10.0, | ||||
| 		}, | ||||
| 		&blossomsub.PeerScoreThresholds{ | ||||
| 			SkipAtomicValidation:        false, | ||||
| 			GossipThreshold:             -100, | ||||
| 			PublishThreshold:            -100, | ||||
| 			GraylistThreshold:           -100, | ||||
| 			AcceptPXThreshold:           1, | ||||
| 			OpportunisticGraftThreshold: 2, | ||||
| 		})) | ||||
| 
 | ||||
| 	params := mergeDefaults(p2pConfig) | ||||
| 	rt := blossomsub.NewBlossomSubRouter(h, params) | ||||
| @ -118,15 +155,12 @@ func NewBlossomSub( | ||||
| 	} | ||||
| 
 | ||||
| 	peerID := h.ID() | ||||
| 	bs.ps = ps | ||||
| 	bs.peerID = peerID | ||||
| 	bs.h = h | ||||
| 	bs.signKey = privKey | ||||
| 
 | ||||
| 	return &BlossomSub{ | ||||
| 		ps, | ||||
| 		ctx, | ||||
| 		logger, | ||||
| 		peerID, | ||||
| 		make(map[string]*blossomsub.Bitmask), | ||||
| 		h, | ||||
| 	} | ||||
| 	return bs | ||||
| } | ||||
| 
 | ||||
| func (b *BlossomSub) PublishToBitmask(bitmask []byte, data []byte) error { | ||||
| @ -318,6 +352,19 @@ func initDHT( | ||||
| 	return kademliaDHT | ||||
| } | ||||
| 
 | ||||
| func (b *BlossomSub) GetPeerScore(peerId []byte) int64 { | ||||
| 	b.peerScoreMx.Lock() | ||||
| 	score := b.peerScore[string(peerId)] | ||||
| 	b.peerScoreMx.Unlock() | ||||
| 	return score | ||||
| } | ||||
| 
 | ||||
| func (b *BlossomSub) SetPeerScore(peerId []byte, score int64) { | ||||
| 	b.peerScoreMx.Lock() | ||||
| 	b.peerScore[string(peerId)] = score | ||||
| 	b.peerScoreMx.Unlock() | ||||
| } | ||||
| 
 | ||||
| func (b *BlossomSub) GetBitmaskPeers() map[string][]string { | ||||
| 	peers := map[string][]string{} | ||||
| 
 | ||||
| @ -433,6 +480,16 @@ func (b *BlossomSub) GetDirectChannel(key []byte) ( | ||||
| 	return dialCtx, nil | ||||
| } | ||||
| 
 | ||||
| func (b *BlossomSub) GetPublicKey() []byte { | ||||
| 	pub, _ := b.signKey.GetPublic().Raw() | ||||
| 	return pub | ||||
| } | ||||
| 
 | ||||
| func (b *BlossomSub) SignMessage(msg []byte) ([]byte, error) { | ||||
| 	sig, err := b.signKey.Sign(msg) | ||||
| 	return sig, errors.Wrap(err, "sign message") | ||||
| } | ||||
| 
 | ||||
| func discoverPeers( | ||||
| 	p2pConfig *config.P2PConfig, | ||||
| 	ctx context.Context, | ||||
|  | ||||
| @ -23,4 +23,8 @@ type PubSub interface { | ||||
| 	) error | ||||
| 	GetDirectChannel(peerId []byte) (*grpc.ClientConn, error) | ||||
| 	GetNetworkInfo() *protobufs.NetworkInfoResponse | ||||
| 	SignMessage(msg []byte) ([]byte, error) | ||||
| 	GetPublicKey() []byte | ||||
| 	GetPeerScore(peerId []byte) int64 | ||||
| 	SetPeerScore(peerId []byte, score int64) | ||||
| } | ||||
|  | ||||
| @ -1028,6 +1028,9 @@ type CeremonyPeer struct { | ||||
| 	Multiaddr string `protobuf:"bytes,2,opt,name=multiaddr,proto3" json:"multiaddr,omitempty"` | ||||
| 	MaxFrame  uint64 `protobuf:"varint,3,opt,name=max_frame,json=maxFrame,proto3" json:"max_frame,omitempty"` | ||||
| 	Timestamp int64  `protobuf:"varint,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` | ||||
| 	Version   []byte `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` | ||||
| 	Signature []byte `protobuf:"bytes,6,opt,name=signature,proto3" json:"signature,omitempty"` | ||||
| 	PublicKey []byte `protobuf:"bytes,7,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (x *CeremonyPeer) Reset() { | ||||
| @ -1090,6 +1093,27 @@ func (x *CeremonyPeer) GetTimestamp() int64 { | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func (x *CeremonyPeer) GetVersion() []byte { | ||||
| 	if x != nil { | ||||
| 		return x.Version | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (x *CeremonyPeer) GetSignature() []byte { | ||||
| 	if x != nil { | ||||
| 		return x.Signature | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (x *CeremonyPeer) GetPublicKey() []byte { | ||||
| 	if x != nil { | ||||
| 		return x.PublicKey | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| type CeremonyCompressedSync struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| @ -1646,7 +1670,7 @@ var file_ceremony_proto_rawDesc = []byte{ | ||||
| 	0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, | ||||
| 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, | ||||
| 	0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x52, 0x08, | ||||
| 	0x70, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x0c, 0x43, 0x65, 0x72, | ||||
| 	0x70, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xd7, 0x01, 0x0a, 0x0c, 0x43, 0x65, 0x72, | ||||
| 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, | ||||
| 	0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, | ||||
| 	0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x18, | ||||
| @ -1654,73 +1678,78 @@ var file_ceremony_proto_rawDesc = []byte{ | ||||
| 	0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, | ||||
| 	0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, | ||||
| 	0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, | ||||
| 	0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe0, 0x02, 0x0a, 0x16, | ||||
| 	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, | ||||
| 	0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x66, | ||||
| 	0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, | ||||
| 	0x04, 0x52, 0x0f, 0x66, 0x72, 0x6f, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, | ||||
| 	0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, | ||||
| 	0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f, 0x46, | ||||
| 	0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x16, 0x74, 0x72, | ||||
| 	0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x66, 0x72, | ||||
| 	0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x69, | ||||
| 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, | ||||
| 	0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, | ||||
| 	0x52, 0x14, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x6f, 0x63, 0x6b, | ||||
| 	0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, | ||||
| 	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, | ||||
| 	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, | ||||
| 	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, | ||||
| 	0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, | ||||
| 	0x4d, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, | ||||
| 	0x0b, 0x32, 0x31, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, | ||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, | ||||
| 	0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, | ||||
| 	0x73, 0x4d, 0x61, 0x70, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa5, | ||||
| 	0x01, 0x0a, 0x12, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, | ||||
| 	0x66, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x63, | ||||
| 	0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x66, 0x72, 0x61, | ||||
| 	0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, | ||||
| 	0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x56, | ||||
| 	0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, | ||||
| 	0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, | ||||
| 	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, | ||||
| 	0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, | ||||
| 	0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, | ||||
| 	0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, | ||||
| 	0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x12, | ||||
| 	0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, | ||||
| 	0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, | ||||
| 	0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7b, 0x0a, 0x17, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, | ||||
| 	0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, | ||||
| 	0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, | ||||
| 	0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, | ||||
| 	0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, | ||||
| 	0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, | ||||
| 	0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, | ||||
| 	0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, | ||||
| 	0x68, 0x65, 0x73, 0x32, 0x89, 0x02, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, | ||||
| 	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, | ||||
| 	0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, | ||||
| 	0x65, 0x73, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | ||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, | ||||
| 	0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | ||||
| 	0x1a, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, | ||||
| 	0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, | ||||
| 	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, | ||||
| 	0x64, 0x53, 0x79, 0x6e, 0x63, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x75, | ||||
| 	0x62, 0x6c, 0x69, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x71, 0x75, | ||||
| 	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, | ||||
| 	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, | ||||
| 	0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e, 0x71, 0x75, | ||||
| 	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, | ||||
| 	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, | ||||
| 	0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, | ||||
| 	0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, | ||||
| 	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, | ||||
| 	0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, | ||||
| 	0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, | ||||
| 	0x74, 0x6f, 0x33, | ||||
| 	0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, | ||||
| 	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x76, 0x65, | ||||
| 	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, | ||||
| 	0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, | ||||
| 	0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, | ||||
| 	0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, | ||||
| 	0x65, 0x79, 0x22, 0xe0, 0x02, 0x0a, 0x16, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, | ||||
| 	0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x2a, 0x0a, | ||||
| 	0x11, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, | ||||
| 	0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x66, 0x72, 0x6f, 0x6d, 0x46, 0x72, | ||||
| 	0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x5f, | ||||
| 	0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, | ||||
| 	0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, | ||||
| 	0x72, 0x12, 0x5a, 0x0a, 0x16, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, | ||||
| 	0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, | ||||
| 	0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, | ||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, | ||||
| 	0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x14, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, | ||||
| 	0x65, 0x64, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x47, 0x0a, | ||||
| 	0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, | ||||
| 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||
| 	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, | ||||
| 	0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x06, | ||||
| 	0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, 0x4d, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, | ||||
| 	0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, | ||||
| 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, | ||||
| 	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, | ||||
| 	0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x08, 0x73, 0x65, 0x67, | ||||
| 	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, | ||||
| 	0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x21, 0x0a, 0x0c, | ||||
| 	0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, | ||||
| 	0x28, 0x0c, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, | ||||
| 	0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, | ||||
| 	0x70, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x56, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, | ||||
| 	0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x71, 0x75, 0x69, | ||||
| 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, | ||||
| 	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, | ||||
| 	0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, | ||||
| 	0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x0a, | ||||
| 	0x14, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, | ||||
| 	0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, | ||||
| 	0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, | ||||
| 	0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7b, 0x0a, | ||||
| 	0x17, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, | ||||
| 	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, | ||||
| 	0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, | ||||
| 	0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, | ||||
| 	0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, | ||||
| 	0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, | ||||
| 	0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x67, | ||||
| 	0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x32, 0x89, 0x02, 0x0a, 0x0f, 0x43, | ||||
| 	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7e, | ||||
| 	0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, | ||||
| 	0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, | ||||
| 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, | ||||
| 	0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, | ||||
| 	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, | ||||
| 	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, | ||||
| 	0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, | ||||
| 	0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x30, 0x01, 0x12, 0x76, | ||||
| 	0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x6e, | ||||
| 	0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | ||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, | ||||
| 	0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, | ||||
| 	0x70, 0x65, 0x1a, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | ||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, | ||||
| 	0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, | ||||
| 	0x70, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, | ||||
| 	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, | ||||
| 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, | ||||
| 	0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, | ||||
| 	0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
|  | ||||
| @ -136,6 +136,9 @@ message CeremonyPeer { | ||||
|   string multiaddr = 2; | ||||
|   uint64 max_frame = 3; | ||||
|   int64 timestamp = 4; | ||||
|   bytes version = 5; | ||||
|   bytes signature = 6; | ||||
|   bytes public_key = 7; | ||||
| } | ||||
| 
 | ||||
| message CeremonyCompressedSync { | ||||
|  | ||||
| @ -333,6 +333,9 @@ type PeerInfo struct { | ||||
| 	Multiaddrs []string `protobuf:"bytes,2,rep,name=multiaddrs,proto3" json:"multiaddrs,omitempty"` | ||||
| 	MaxFrame   uint64   `protobuf:"varint,3,opt,name=max_frame,json=maxFrame,proto3" json:"max_frame,omitempty"` | ||||
| 	Timestamp  int64    `protobuf:"varint,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` | ||||
| 	Version    []byte   `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` | ||||
| 	Signature  []byte   `protobuf:"bytes,6,opt,name=signature,proto3" json:"signature,omitempty"` | ||||
| 	PublicKey  []byte   `protobuf:"bytes,7,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (x *PeerInfo) Reset() { | ||||
| @ -395,6 +398,27 @@ func (x *PeerInfo) GetTimestamp() int64 { | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func (x *PeerInfo) GetVersion() []byte { | ||||
| 	if x != nil { | ||||
| 		return x.Version | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (x *PeerInfo) GetSignature() []byte { | ||||
| 	if x != nil { | ||||
| 		return x.Signature | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (x *PeerInfo) GetPublicKey() []byte { | ||||
| 	if x != nil { | ||||
| 		return x.PublicKey | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| type PeerInfoResponse struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| @ -706,88 +730,94 @@ var file_node_proto_rawDesc = []byte{ | ||||
| 	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, | ||||
| 	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, | ||||
| 	0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x0a, 0x63, | ||||
| 	0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x22, 0x7e, 0x0a, 0x08, 0x50, 0x65, 0x65, | ||||
| 	0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, | ||||
| 	0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, | ||||
| 	0x0a, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, | ||||
| 	0x28, 0x09, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x73, 0x12, 0x1b, | ||||
| 	0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, | ||||
| 	0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, | ||||
| 	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, | ||||
| 	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xad, 0x01, 0x0a, 0x10, 0x50, 0x65, | ||||
| 	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, | ||||
| 	0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, | ||||
| 	0x0b, 0x32, 0x21, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, | ||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, | ||||
| 	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x59, | ||||
| 	0x0a, 0x17, 0x75, 0x6e, 0x63, 0x6f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, | ||||
| 	0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, | ||||
| 	0x21, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, | ||||
| 	0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, | ||||
| 	0x66, 0x6f, 0x52, 0x15, 0x75, 0x6e, 0x63, 0x6f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x76, | ||||
| 	0x65, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x65, 0x0a, 0x0b, 0x4e, 0x65, 0x74, | ||||
| 	0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, | ||||
| 	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, | ||||
| 	0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, | ||||
| 	0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, | ||||
| 	0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, | ||||
| 	0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x70, 0x65, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, | ||||
| 	0x22, 0x5e, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, | ||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, | ||||
| 	0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, | ||||
| 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, | ||||
| 	0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, | ||||
| 	0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, | ||||
| 	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa6, 0x01, 0x0a, 0x11, 0x54, 0x6f, 0x6b, 0x65, | ||||
| 	0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, | ||||
| 	0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, | ||||
| 	0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14, 0x63, | ||||
| 	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x53, 0x75, 0x70, | ||||
| 	0x70, 0x6c, 0x79, 0x12, 0x38, 0x0a, 0x18, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, | ||||
| 	0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, | ||||
| 	0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, | ||||
| 	0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x21, 0x0a, | ||||
| 	0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, | ||||
| 	0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, | ||||
| 	0x32, 0x99, 0x04, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, | ||||
| 	0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x2e, | ||||
| 	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, | ||||
| 	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, | ||||
| 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||
| 	0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, | ||||
| 	0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, | ||||
| 	0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, | ||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, | ||||
| 	0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, | ||||
| 	0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, | ||||
| 	0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, | ||||
| 	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, | ||||
| 	0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, | ||||
| 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, | ||||
| 	0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, | ||||
| 	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, | ||||
| 	0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x08, 0x50, 0x65, | ||||
| 	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, | ||||
| 	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, | ||||
| 	0x1e, 0x0a, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x02, 0x20, | ||||
| 	0x03, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x73, 0x12, | ||||
| 	0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, | ||||
| 	0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, | ||||
| 	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, | ||||
| 	0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, | ||||
| 	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x76, 0x65, 0x72, | ||||
| 	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, | ||||
| 	0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, | ||||
| 	0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, | ||||
| 	0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, | ||||
| 	0x79, 0x22, 0xad, 0x01, 0x0a, 0x10, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, | ||||
| 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, | ||||
| 	0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x71, 0x75, 0x69, 0x6c, | ||||
| 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | ||||
| 	0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x65, | ||||
| 	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x59, 0x0a, 0x17, 0x75, 0x6e, 0x63, 0x6f, 0x6f, 0x70, | ||||
| 	0x65, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, | ||||
| 	0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, | ||||
| 	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, | ||||
| 	0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, | ||||
| 	0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, | ||||
| 	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, | ||||
| 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, | ||||
| 	0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, | ||||
| 	0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, | ||||
| 	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, | ||||
| 	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, | ||||
| 	0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, | ||||
| 	0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | ||||
| 	0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x15, 0x75, 0x6e, 0x63, 0x6f, | ||||
| 	0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, | ||||
| 	0x6f, 0x22, 0x65, 0x0a, 0x0b, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, | ||||
| 	0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, | ||||
| 	0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x75, 0x6c, | ||||
| 	0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6d, | ||||
| 	0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x65, 0x65, | ||||
| 	0x72, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x70, | ||||
| 	0x65, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x5e, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x77, | ||||
| 	0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, | ||||
| 	0x47, 0x0a, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, | ||||
| 	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, | ||||
| 	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, | ||||
| 	0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x6e, 0x65, 0x74, | ||||
| 	0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, | ||||
| 	0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, | ||||
| 	0xa6, 0x01, 0x0a, 0x11, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, | ||||
| 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, | ||||
| 	0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, | ||||
| 	0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, | ||||
| 	0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x38, 0x0a, 0x18, 0x75, | ||||
| 	0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, | ||||
| 	0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x75, | ||||
| 	0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x53, | ||||
| 	0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x74, | ||||
| 	0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x77, 0x6e, | ||||
| 	0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x32, 0x99, 0x04, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, | ||||
| 	0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, | ||||
| 	0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, | ||||
| 	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, | ||||
| 	0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | ||||
| 	0x1a, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, | ||||
| 	0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, | ||||
| 	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, | ||||
| 	0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, | ||||
| 	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, | ||||
| 	0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, | ||||
| 	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, | ||||
| 	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, | ||||
| 	0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, | ||||
| 	0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, | ||||
| 	0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, | ||||
| 	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, | ||||
| 	0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | ||||
| 	0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, | ||||
| 	0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, | ||||
| 	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, | ||||
| 	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, | ||||
| 	0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, | ||||
| 	0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, | ||||
| 	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| 	0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, | ||||
| 	0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, | ||||
| 	0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, | ||||
| 	0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, | ||||
| 	0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x71, | ||||
| 	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, | ||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, | ||||
| 	0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, | ||||
| 	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, | ||||
| 	0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, | ||||
| 	0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, | ||||
| 	0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, | ||||
| 	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, | ||||
| 	0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, | ||||
| 	0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, | ||||
| 	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, | ||||
| 	0x70, 0x62, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, | ||||
| 	0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, | ||||
| 	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, | ||||
| 	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, | ||||
| 	0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, | ||||
| 	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
|  | ||||
| @ -36,6 +36,9 @@ message PeerInfo { | ||||
|   repeated string multiaddrs = 2; | ||||
|   uint64 max_frame = 3; | ||||
|   int64 timestamp = 4; | ||||
|   bytes version = 5; | ||||
|   bytes signature = 6; | ||||
|   bytes public_key = 7; | ||||
| } | ||||
| 
 | ||||
| message PeerInfoResponse { | ||||
|  | ||||
| @ -1329,7 +1329,6 @@ func (p *PebbleClockStore) GetCompressedDataClockFrames( | ||||
| 		if frame.FrameNumber == 0 { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		for i := 0; i < len(frame.Input[516:])/74; i++ { | ||||
| 			aggregateCommit := frame.Input[516+(i*74) : 516+((i+1)*74)] | ||||
| 
 | ||||
| @ -1399,7 +1398,6 @@ func (p *PebbleClockStore) GetCompressedDataClockFrames( | ||||
| 			if err := proto.Unmarshal(value, frame); err != nil { | ||||
| 				return nil, errors.Wrap(err, "get compressed data clock frames") | ||||
| 			} | ||||
| 
 | ||||
| 			candidates = append(candidates, frame) | ||||
| 		} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Cassandra Heart
						Cassandra Heart