mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-03 23:57:26 +00:00 
			
		
		
		
	v1.4.0 (#86)
This commit is contained in:
		
							parent
							
								
									ae7c14fc2a
								
							
						
					
					
						commit
						7ad553fd62
					
				@ -868,29 +868,30 @@ func logoVersion(width int) string {
 | 
				
			|||||||
		out += " ###########                     ##############                      ##########&\n"
 | 
							out += " ###########                     ##############                      ##########&\n"
 | 
				
			||||||
		out += " ##########                      ##############                       ##########\n"
 | 
							out += " ##########                      ##############                       ##########\n"
 | 
				
			||||||
		out += "%##########                        ##########                         ##########\n"
 | 
							out += "%##########                        ##########                         ##########\n"
 | 
				
			||||||
		out += "##########&                                                           ##########\n"
 | 
							out += "##########                                                            ##########\n"
 | 
				
			||||||
		out += "##########                                                            &#########\n"
 | 
							out += "##########                                                            &#########\n"
 | 
				
			||||||
		out += "##########&                   #######      #######                    ##########\n"
 | 
							out += "##########                    #######      #######                    ##########\n"
 | 
				
			||||||
		out += " ##########                &#########################                 ##########\n"
 | 
							out += "%#########                 &#########################                 ##########\n"
 | 
				
			||||||
		out += " ##########              ##############% ##############              &##########\n"
 | 
							out += " ##########              ##############% ##############              &##########\n"
 | 
				
			||||||
		out += " %##########          &##############      ###############           ##########\n"
 | 
							out += " '         '          &##############      ###############           ##########\n"
 | 
				
			||||||
		out += "  ###########       ###############           ##############%       ###########\n"
 | 
							out += "  '         '       ###############           ##############%       ###########\n"
 | 
				
			||||||
		out += "   ###########&       ##########                ###############       ########\n"
 | 
							out += "   '         '.       ##########                ###############       ########\n"
 | 
				
			||||||
		out += "    ############         #####                     ##############%       ####\n"
 | 
							out += "    '.         .         #####                     ##############%       ####\n"
 | 
				
			||||||
		out += "      ############                                   ###############\n"
 | 
							out += "      '         '.                                   ###############\n"
 | 
				
			||||||
		out += "       ##############                                   ##############%\n"
 | 
							out += "       '.         '..                                   ##############%\n"
 | 
				
			||||||
		out += "         ###############                                  ###############\n"
 | 
							out += "         '.          '-.                                  ###############\n"
 | 
				
			||||||
		out += "           #################&                                ##############%\n"
 | 
							out += "           '-.          ''-..                      ..        ##############%\n"
 | 
				
			||||||
		out += "              #########################&&&#############        ###############\n"
 | 
							out += "              '-.            ''---............----'  '.        ###############\n"
 | 
				
			||||||
		out += "                 ########################################%        ############\n"
 | 
							out += "                 '-..                                  '.        ############\n"
 | 
				
			||||||
		out += "                     #######################################        ########\n"
 | 
							out += "                     ''-..                             ..'         ########\n"
 | 
				
			||||||
		out += "                          #############################                ##\n"
 | 
							out += "                          ''---..              ...---''               ##\n"
 | 
				
			||||||
 | 
							out += "                                 ''----------''\n"
 | 
				
			||||||
		out += " \n"
 | 
							out += " \n"
 | 
				
			||||||
		out += "                         Quilibrium Node - v1.3.0 – Dawn\n"
 | 
							out += "                        Quilibrium Node - v1.4.0 – Sunset\n"
 | 
				
			||||||
		out += " \n"
 | 
							out += " \n"
 | 
				
			||||||
		out += "                                   DB Console\n"
 | 
							out += "                                   DB Console\n"
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		out = "Quilibrium Node - v1.3.0 – Dawn - DB Console\n"
 | 
							out = "Quilibrium Node - v1.4.0 – Sunset - DB Console\n"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return out
 | 
						return out
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ import (
 | 
				
			|||||||
	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/keys"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/keys"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
				
			||||||
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -72,7 +73,7 @@ var consensusSet = wire.NewSet(
 | 
				
			|||||||
	),
 | 
						),
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewNode(*config.Config) (*Node, error) {
 | 
					func NewNode(*config.Config, *protobufs.SelfTestReport) (*Node, error) {
 | 
				
			||||||
	panic(wire.Build(
 | 
						panic(wire.Build(
 | 
				
			||||||
		loggerSet,
 | 
							loggerSet,
 | 
				
			||||||
		keyManagerSet,
 | 
							keyManagerSet,
 | 
				
			||||||
 | 
				
			|||||||
@ -17,12 +17,13 @@ import (
 | 
				
			|||||||
	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/keys"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/keys"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
				
			||||||
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Injectors from wire.go:
 | 
					// Injectors from wire.go:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewNode(configConfig *config.Config) (*Node, error) {
 | 
					func NewNode(configConfig *config.Config, selfTestReport *protobufs.SelfTestReport) (*Node, error) {
 | 
				
			||||||
	zapLogger := logger()
 | 
						zapLogger := logger()
 | 
				
			||||||
	dbConfig := configConfig.DB
 | 
						dbConfig := configConfig.DB
 | 
				
			||||||
	pebbleDB := store.NewPebbleDB(dbConfig)
 | 
						pebbleDB := store.NewPebbleDB(dbConfig)
 | 
				
			||||||
@ -37,7 +38,7 @@ func NewNode(configConfig *config.Config) (*Node, error) {
 | 
				
			|||||||
	masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
 | 
						masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
 | 
				
			||||||
	pebbleKeyStore := store.NewPebbleKeyStore(pebbleDB, zapLogger)
 | 
						pebbleKeyStore := store.NewPebbleKeyStore(pebbleDB, zapLogger)
 | 
				
			||||||
	ceremonyExecutionEngine := ceremony.NewCeremonyExecutionEngine(zapLogger, engineConfig, fileKeyManager, blossomSub, wesolowskiFrameProver, kzgInclusionProver, pebbleClockStore, masterTimeReel, pebbleKeyStore)
 | 
						ceremonyExecutionEngine := ceremony.NewCeremonyExecutionEngine(zapLogger, engineConfig, fileKeyManager, blossomSub, wesolowskiFrameProver, kzgInclusionProver, pebbleClockStore, masterTimeReel, pebbleKeyStore)
 | 
				
			||||||
	masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel)
 | 
						masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, selfTestReport)
 | 
				
			||||||
	node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine)
 | 
						node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 | 
				
			|||||||
@ -282,6 +282,7 @@ func (e *CeremonyDataClockConsensusEngine) Start() <-chan error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if err := e.pubSub.StartDirectChannelListener(
 | 
							if err := e.pubSub.StartDirectChannelListener(
 | 
				
			||||||
			e.pubSub.GetPeerID(),
 | 
								e.pubSub.GetPeerID(),
 | 
				
			||||||
 | 
								"",
 | 
				
			||||||
			server,
 | 
								server,
 | 
				
			||||||
		); err != nil {
 | 
							); err != nil {
 | 
				
			||||||
			panic(err)
 | 
								panic(err)
 | 
				
			||||||
 | 
				
			|||||||
@ -185,7 +185,7 @@ func (e *CeremonyDataClockConsensusEngine) sync(
 | 
				
			|||||||
) (*protobufs.ClockFrame, error) {
 | 
					) (*protobufs.ClockFrame, error) {
 | 
				
			||||||
	latest := currentLatest
 | 
						latest := currentLatest
 | 
				
			||||||
	e.logger.Info("polling peer for new frames", zap.Binary("peer_id", peerId))
 | 
						e.logger.Info("polling peer for new frames", zap.Binary("peer_id", peerId))
 | 
				
			||||||
	cc, err := e.pubSub.GetDirectChannel(peerId)
 | 
						cc, err := e.pubSub.GetDirectChannel(peerId, "")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		e.logger.Error(
 | 
							e.logger.Error(
 | 
				
			||||||
			"could not establish direct channel",
 | 
								"could not establish direct channel",
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/mr-tron/base58"
 | 
				
			||||||
	"github.com/pkg/errors"
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
	"go.uber.org/zap"
 | 
						"go.uber.org/zap"
 | 
				
			||||||
	"google.golang.org/grpc"
 | 
						"google.golang.org/grpc"
 | 
				
			||||||
@ -645,6 +646,7 @@ func (e *svr) GetPublicChannel(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey(
 | 
					func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey(
 | 
				
			||||||
	initiator bool,
 | 
						initiator bool,
 | 
				
			||||||
 | 
						peerID []byte,
 | 
				
			||||||
	provingKey []byte,
 | 
						provingKey []byte,
 | 
				
			||||||
) (p2p.PublicChannelClient, error) {
 | 
					) (p2p.PublicChannelClient, error) {
 | 
				
			||||||
	if initiator {
 | 
						if initiator {
 | 
				
			||||||
@ -664,7 +666,8 @@ func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey(
 | 
				
			|||||||
			protobufs.RegisterCeremonyServiceServer(server, s)
 | 
								protobufs.RegisterCeremonyServiceServer(server, s)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err := e.pubSub.StartDirectChannelListener(
 | 
								if err := e.pubSub.StartDirectChannelListener(
 | 
				
			||||||
				provingKey,
 | 
									peerID,
 | 
				
			||||||
 | 
									base58.Encode(provingKey),
 | 
				
			||||||
				server,
 | 
									server,
 | 
				
			||||||
			); err != nil {
 | 
								); err != nil {
 | 
				
			||||||
				e.logger.Error(
 | 
									e.logger.Error(
 | 
				
			||||||
@ -684,7 +687,7 @@ func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey(
 | 
				
			|||||||
			)
 | 
								)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		cc, err := e.pubSub.GetDirectChannel(provingKey)
 | 
							cc, err := e.pubSub.GetDirectChannel(peerID, base58.Encode(provingKey))
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			e.logger.Error(
 | 
								e.logger.Error(
 | 
				
			||||||
				"could not get public channel for proving key",
 | 
									"could not get public channel for proving key",
 | 
				
			||||||
 | 
				
			|||||||
@ -51,13 +51,13 @@ type DataConsensusEngine interface {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetMinimumVersionCutoff() time.Time {
 | 
					func GetMinimumVersionCutoff() time.Time {
 | 
				
			||||||
	return time.Date(2024, time.February, 28, 7, 0, 0, 0, time.UTC)
 | 
						return time.Date(2024, time.March, 1, 7, 0, 0, 0, time.UTC)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetMinimumVersion() []byte {
 | 
					func GetMinimumVersion() []byte {
 | 
				
			||||||
	return []byte{0x01, 0x03, 0x00}
 | 
						return []byte{0x01, 0x04, 0x00}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetVersion() []byte {
 | 
					func GetVersion() []byte {
 | 
				
			||||||
	return []byte{0x01, 0x03, 0x00}
 | 
						return []byte{0x01, 0x04, 0x00}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,15 @@
 | 
				
			|||||||
package master
 | 
					package master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"crypto/rand"
 | 
				
			||||||
 | 
						"encoding/binary"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/iden3/go-iden3-crypto/poseidon"
 | 
						"github.com/iden3/go-iden3-crypto/poseidon"
 | 
				
			||||||
 | 
						"github.com/mr-tron/base58"
 | 
				
			||||||
	"github.com/pkg/errors"
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
	"go.uber.org/zap"
 | 
						"go.uber.org/zap"
 | 
				
			||||||
	"golang.org/x/sync/errgroup"
 | 
						"golang.org/x/sync/errgroup"
 | 
				
			||||||
@ -76,6 +82,13 @@ func (e *MasterClockConsensusEngine) handleMessage(message *pb.Message) error {
 | 
				
			|||||||
		); err != nil {
 | 
							); err != nil {
 | 
				
			||||||
			return errors.Wrap(err, "handle message")
 | 
								return errors.Wrap(err, "handle message")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						case protobufs.SelfTestReportType:
 | 
				
			||||||
 | 
							if err := e.handleSelfTestReport(
 | 
				
			||||||
 | 
								message.From,
 | 
				
			||||||
 | 
								any,
 | 
				
			||||||
 | 
							); err != nil {
 | 
				
			||||||
 | 
								return errors.Wrap(err, "handle message")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
@ -119,6 +132,154 @@ func (e *MasterClockConsensusEngine) handleClockFrameData(
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *MasterClockConsensusEngine) handleSelfTestReport(
 | 
				
			||||||
 | 
						peerID []byte,
 | 
				
			||||||
 | 
						any *anypb.Any,
 | 
				
			||||||
 | 
					) error {
 | 
				
			||||||
 | 
						if bytes.Equal(peerID, e.pubSub.GetPeerID()) {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						report := &protobufs.SelfTestReport{}
 | 
				
			||||||
 | 
						if err := any.UnmarshalTo(report); err != nil {
 | 
				
			||||||
 | 
							return errors.Wrap(err, "handle self test report")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						e.peerMapMx.Lock()
 | 
				
			||||||
 | 
						if _, ok := e.peerMap[string(peerID)]; !ok {
 | 
				
			||||||
 | 
							e.peerMapMx.Unlock()
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						e.peerMap[string(peerID)] = report
 | 
				
			||||||
 | 
						e.peerMapMx.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						memory := binary.BigEndian.Uint64(report.Memory)
 | 
				
			||||||
 | 
						e.logger.Info(
 | 
				
			||||||
 | 
							"received self test report",
 | 
				
			||||||
 | 
							zap.String("peer_id", base58.Encode(peerID)),
 | 
				
			||||||
 | 
							zap.Uint32("difficulty", report.Difficulty),
 | 
				
			||||||
 | 
							zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
				
			||||||
 | 
							zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
				
			||||||
 | 
							zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
				
			||||||
 | 
							zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
				
			||||||
 | 
							zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
				
			||||||
 | 
							zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
				
			||||||
 | 
							zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
				
			||||||
 | 
							zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
				
			||||||
 | 
							zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
				
			||||||
 | 
							zap.Uint32("cores", report.Cores),
 | 
				
			||||||
 | 
							zap.Uint64("memory", memory),
 | 
				
			||||||
 | 
							zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if report.Cores < 3 || memory < 16000000000 {
 | 
				
			||||||
 | 
							e.logger.Info(
 | 
				
			||||||
 | 
								"peer reported invalid configuration",
 | 
				
			||||||
 | 
								zap.String("peer_id", base58.Encode(peerID)),
 | 
				
			||||||
 | 
								zap.Uint32("difficulty", report.Difficulty),
 | 
				
			||||||
 | 
								zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
				
			||||||
 | 
								zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
				
			||||||
 | 
								zap.Uint32("cores", report.Cores),
 | 
				
			||||||
 | 
								zap.Uint64("memory", memory),
 | 
				
			||||||
 | 
								zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// tag: dusk – nuke this peer for now
 | 
				
			||||||
 | 
							e.pubSub.SetPeerScore(peerID, -1000)
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cc, err := e.pubSub.GetDirectChannel(peerID, "validation")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							e.logger.Error(
 | 
				
			||||||
 | 
								"could not connect for validation",
 | 
				
			||||||
 | 
								zap.String("peer_id", base58.Encode(peerID)),
 | 
				
			||||||
 | 
								zap.Uint32("difficulty", report.Difficulty),
 | 
				
			||||||
 | 
								zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
				
			||||||
 | 
								zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
				
			||||||
 | 
								zap.Uint32("cores", report.Cores),
 | 
				
			||||||
 | 
								zap.Uint64("memory", memory),
 | 
				
			||||||
 | 
								zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							return errors.Wrap(err, "handle self test report")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						client := protobufs.NewValidationServiceClient(cc)
 | 
				
			||||||
 | 
						verification := make([]byte, 1048576)
 | 
				
			||||||
 | 
						rand.Read(verification)
 | 
				
			||||||
 | 
						start := time.Now().UnixMilli()
 | 
				
			||||||
 | 
						validation, err := client.PerformValidation(
 | 
				
			||||||
 | 
							context.Background(),
 | 
				
			||||||
 | 
							&protobufs.ValidationMessage{
 | 
				
			||||||
 | 
								Validation: verification,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						end := time.Now().UnixMilli()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							cc.Close()
 | 
				
			||||||
 | 
							return errors.Wrap(err, "handle self test report")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						cc.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !bytes.Equal(verification, validation.Validation) {
 | 
				
			||||||
 | 
							e.logger.Error(
 | 
				
			||||||
 | 
								"provided invalid verification",
 | 
				
			||||||
 | 
								zap.String("peer_id", base58.Encode(peerID)),
 | 
				
			||||||
 | 
								zap.Uint32("difficulty", report.Difficulty),
 | 
				
			||||||
 | 
								zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
				
			||||||
 | 
								zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
				
			||||||
 | 
								zap.Uint32("cores", report.Cores),
 | 
				
			||||||
 | 
								zap.Uint64("memory", memory),
 | 
				
			||||||
 | 
								zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if end-start > 2000 {
 | 
				
			||||||
 | 
							e.logger.Error(
 | 
				
			||||||
 | 
								"slow bandwidth, scoring out",
 | 
				
			||||||
 | 
								zap.String("peer_id", base58.Encode(peerID)),
 | 
				
			||||||
 | 
								zap.Uint32("difficulty", report.Difficulty),
 | 
				
			||||||
 | 
								zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
				
			||||||
 | 
								zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
				
			||||||
 | 
								zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
				
			||||||
 | 
								zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
				
			||||||
 | 
								zap.Uint32("cores", report.Cores),
 | 
				
			||||||
 | 
								zap.Uint64("memory", memory),
 | 
				
			||||||
 | 
								zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							// tag: dusk – nuke this peer for now
 | 
				
			||||||
 | 
							e.pubSub.SetPeerScore(peerID, -1000)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (e *MasterClockConsensusEngine) publishProof(
 | 
					func (e *MasterClockConsensusEngine) publishProof(
 | 
				
			||||||
	frame *protobufs.ClockFrame,
 | 
						frame *protobufs.ClockFrame,
 | 
				
			||||||
) error {
 | 
					) error {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,12 +1,14 @@
 | 
				
			|||||||
package master
 | 
					package master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/hex"
 | 
						"encoding/hex"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/pkg/errors"
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
	"go.uber.org/zap"
 | 
						"go.uber.org/zap"
 | 
				
			||||||
 | 
						"google.golang.org/grpc"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/config"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/config"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/consensus"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/consensus"
 | 
				
			||||||
	qtime "source.quilibrium.com/quilibrium/monorepo/node/consensus/time"
 | 
						qtime "source.quilibrium.com/quilibrium/monorepo/node/consensus/time"
 | 
				
			||||||
@ -27,6 +29,8 @@ const (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type MasterClockConsensusEngine struct {
 | 
					type MasterClockConsensusEngine struct {
 | 
				
			||||||
 | 
						*protobufs.UnimplementedValidationServiceServer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	difficulty          uint32
 | 
						difficulty          uint32
 | 
				
			||||||
	logger              *zap.Logger
 | 
						logger              *zap.Logger
 | 
				
			||||||
	state               consensus.EngineState
 | 
						state               consensus.EngineState
 | 
				
			||||||
@ -48,6 +52,9 @@ type MasterClockConsensusEngine struct {
 | 
				
			|||||||
	historicFrames   []*protobufs.ClockFrame
 | 
						historicFrames   []*protobufs.ClockFrame
 | 
				
			||||||
	clockStore       store.ClockStore
 | 
						clockStore       store.ClockStore
 | 
				
			||||||
	masterTimeReel   *qtime.MasterTimeReel
 | 
						masterTimeReel   *qtime.MasterTimeReel
 | 
				
			||||||
 | 
						report           *protobufs.SelfTestReport
 | 
				
			||||||
 | 
						peerMapMx        sync.Mutex
 | 
				
			||||||
 | 
						peerMap          map[string]*protobufs.SelfTestReport
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ consensus.ConsensusEngine = (*MasterClockConsensusEngine)(nil)
 | 
					var _ consensus.ConsensusEngine = (*MasterClockConsensusEngine)(nil)
 | 
				
			||||||
@ -60,6 +67,7 @@ func NewMasterClockConsensusEngine(
 | 
				
			|||||||
	pubSub p2p.PubSub,
 | 
						pubSub p2p.PubSub,
 | 
				
			||||||
	frameProver crypto.FrameProver,
 | 
						frameProver crypto.FrameProver,
 | 
				
			||||||
	masterTimeReel *qtime.MasterTimeReel,
 | 
						masterTimeReel *qtime.MasterTimeReel,
 | 
				
			||||||
 | 
						report *protobufs.SelfTestReport,
 | 
				
			||||||
) *MasterClockConsensusEngine {
 | 
					) *MasterClockConsensusEngine {
 | 
				
			||||||
	if logger == nil {
 | 
						if logger == nil {
 | 
				
			||||||
		panic(errors.New("logger is nil"))
 | 
							panic(errors.New("logger is nil"))
 | 
				
			||||||
@ -104,8 +112,12 @@ func NewMasterClockConsensusEngine(
 | 
				
			|||||||
		clockStore:          clockStore,
 | 
							clockStore:          clockStore,
 | 
				
			||||||
		frameProver:         frameProver,
 | 
							frameProver:         frameProver,
 | 
				
			||||||
		masterTimeReel:      masterTimeReel,
 | 
							masterTimeReel:      masterTimeReel,
 | 
				
			||||||
 | 
							report:              report,
 | 
				
			||||||
 | 
							peerMap:             map[string]*protobufs.SelfTestReport{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						e.peerMap[string(e.pubSub.GetPeerID())] = report
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if e.filter, err = hex.DecodeString(engineConfig.Filter); err != nil {
 | 
						if e.filter, err = hex.DecodeString(engineConfig.Filter); err != nil {
 | 
				
			||||||
		panic(errors.Wrap(err, "could not parse filter value"))
 | 
							panic(errors.Wrap(err, "could not parse filter value"))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -141,6 +153,22 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	e.state = consensus.EngineStateCollecting
 | 
						e.state = consensus.EngineStateCollecting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							server := grpc.NewServer(
 | 
				
			||||||
 | 
								grpc.MaxSendMsgSize(600*1024*1024),
 | 
				
			||||||
 | 
								grpc.MaxRecvMsgSize(600*1024*1024),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							protobufs.RegisterValidationServiceServer(server, e)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err := e.pubSub.StartDirectChannelListener(
 | 
				
			||||||
 | 
								e.pubSub.GetPeerID(),
 | 
				
			||||||
 | 
								"validation",
 | 
				
			||||||
 | 
								server,
 | 
				
			||||||
 | 
							); err != nil {
 | 
				
			||||||
 | 
								panic(err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	go func() {
 | 
						go func() {
 | 
				
			||||||
		for {
 | 
							for {
 | 
				
			||||||
			e.logger.Info(
 | 
								e.logger.Info(
 | 
				
			||||||
@ -152,6 +180,18 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							for {
 | 
				
			||||||
 | 
								time.Sleep(30 * time.Second)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								e.logger.Info("broadcasting self-test info")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if err := e.publishMessage(e.filter, e.report); err != nil {
 | 
				
			||||||
 | 
									e.logger.Debug("error publishing message", zap.Error(err))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	go func() {
 | 
						go func() {
 | 
				
			||||||
		newFrameCh := e.masterTimeReel.NewFrameCh()
 | 
							newFrameCh := e.masterTimeReel.NewFrameCh()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -197,6 +237,13 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
 | 
				
			|||||||
	return errChan
 | 
						return errChan
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *MasterClockConsensusEngine) PerformValidation(
 | 
				
			||||||
 | 
						ctx context.Context,
 | 
				
			||||||
 | 
						msg *protobufs.ValidationMessage,
 | 
				
			||||||
 | 
					) (*protobufs.ValidationMessage, error) {
 | 
				
			||||||
 | 
						return msg, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (e *MasterClockConsensusEngine) Stop(force bool) <-chan error {
 | 
					func (e *MasterClockConsensusEngine) Stop(force bool) <-chan error {
 | 
				
			||||||
	e.logger.Info("stopping consensus engine")
 | 
						e.logger.Info("stopping consensus engine")
 | 
				
			||||||
	e.state = consensus.EngineStateStopping
 | 
						e.state = consensus.EngineStateStopping
 | 
				
			||||||
 | 
				
			|||||||
@ -88,6 +88,7 @@ func TestCeremonyTransitions(t *testing.T) {
 | 
				
			|||||||
		SignedPreKey: &protobufs.X448PublicKey{
 | 
							SignedPreKey: &protobufs.X448PublicKey{
 | 
				
			||||||
			KeyValue: spkPub,
 | 
								KeyValue: spkPub,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							PeerId: []byte{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sig, err := join.SignWithProverKey(proverKey)
 | 
						sig, err := join.SignWithProverKey(proverKey)
 | 
				
			||||||
	require.NoError(t, err)
 | 
						require.NoError(t, err)
 | 
				
			||||||
 | 
				
			|||||||
@ -893,6 +893,7 @@ func (e *CeremonyExecutionEngine) announceJoin(
 | 
				
			|||||||
		SignedPreKey: &protobufs.X448PublicKey{
 | 
							SignedPreKey: &protobufs.X448PublicKey{
 | 
				
			||||||
			KeyValue: g.Mul(spk).ToAffineCompressed(),
 | 
								KeyValue: g.Mul(spk).ToAffineCompressed(),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							PeerId: e.pubSub.GetPeerID(),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sig, err := join.SignWithProverKey(e.provingKey)
 | 
						sig, err := join.SignWithProverKey(e.provingKey)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -949,6 +950,7 @@ func (e *CeremonyExecutionEngine) connectToActivePeers(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			client, err := e.clock.GetPublicChannelForProvingKey(
 | 
								client, err := e.clock.GetPublicChannelForProvingKey(
 | 
				
			||||||
				i > position,
 | 
									i > position,
 | 
				
			||||||
 | 
									p.PeerId,
 | 
				
			||||||
				p.PublicKeySignatureEd448.PublicKey.KeyValue,
 | 
									p.PublicKeySignatureEd448.PublicKey.KeyValue,
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
@ -1052,6 +1054,7 @@ func (e *CeremonyExecutionEngine) participateRound(
 | 
				
			|||||||
			)]; !ok {
 | 
								)]; !ok {
 | 
				
			||||||
				client, err := e.clock.GetPublicChannelForProvingKey(
 | 
									client, err := e.clock.GetPublicChannelForProvingKey(
 | 
				
			||||||
					initiator,
 | 
										initiator,
 | 
				
			||||||
 | 
										p.PeerId,
 | 
				
			||||||
					p.PublicKeySignatureEd448.PublicKey.KeyValue,
 | 
										p.PublicKeySignatureEd448.PublicKey.KeyValue,
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										221
									
								
								node/main.go
									
									
									
									
									
								
							
							
						
						
									
										221
									
								
								node/main.go
									
									
									
									
									
								
							@ -3,6 +3,8 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"crypto/rand"
 | 
				
			||||||
 | 
						"encoding/binary"
 | 
				
			||||||
	"encoding/hex"
 | 
						"encoding/hex"
 | 
				
			||||||
	"flag"
 | 
						"flag"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
@ -11,17 +13,23 @@ import (
 | 
				
			|||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"os/signal"
 | 
						"os/signal"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
 | 
						"runtime"
 | 
				
			||||||
	"runtime/pprof"
 | 
						"runtime/pprof"
 | 
				
			||||||
	"syscall"
 | 
						"syscall"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"go.uber.org/zap"
 | 
				
			||||||
 | 
						"google.golang.org/protobuf/proto"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
				
			||||||
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/utils"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/libp2p/go-libp2p/core/crypto"
 | 
						"github.com/libp2p/go-libp2p/core/crypto"
 | 
				
			||||||
	"github.com/libp2p/go-libp2p/core/peer"
 | 
						"github.com/libp2p/go-libp2p/core/peer"
 | 
				
			||||||
 | 
						"github.com/pbnjay/memory"
 | 
				
			||||||
	"github.com/pkg/errors"
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/app"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/app"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/config"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/config"
 | 
				
			||||||
 | 
						qcrypto "source.quilibrium.com/quilibrium/monorepo/node/crypto"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/crypto/kzg"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/crypto/kzg"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/rpc"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/rpc"
 | 
				
			||||||
@ -157,7 +165,9 @@ func main() {
 | 
				
			|||||||
	fmt.Println("Loading ceremony state and starting node...")
 | 
						fmt.Println("Loading ceremony state and starting node...")
 | 
				
			||||||
	kzg.Init()
 | 
						kzg.Init()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	node, err := app.NewNode(nodeConfig)
 | 
						report := RunSelfTestIfNeeded(*configDirectory, nodeConfig)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						node, err := app.NewNode(nodeConfig, report)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -190,6 +200,182 @@ func main() {
 | 
				
			|||||||
	node.Stop()
 | 
						node.Stop()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func RunSelfTestIfNeeded(
 | 
				
			||||||
 | 
						configDir string,
 | 
				
			||||||
 | 
						nodeConfig *config.Config,
 | 
				
			||||||
 | 
					) *protobufs.SelfTestReport {
 | 
				
			||||||
 | 
						logger, _ := zap.NewProduction()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cores := runtime.GOMAXPROCS(0)
 | 
				
			||||||
 | 
						memory := memory.TotalMemory()
 | 
				
			||||||
 | 
						f, err := os.Stat(filepath.Join(configDir, "SELF_TEST"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if f != nil {
 | 
				
			||||||
 | 
							if f.Size() != 0 {
 | 
				
			||||||
 | 
								report := &protobufs.SelfTestReport{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								selfTestBytes, err := os.ReadFile(filepath.Join(configDir, "SELF_TEST"))
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									panic(err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								err = proto.Unmarshal(selfTestBytes, report)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									panic(err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if report.Cores == uint32(cores) &&
 | 
				
			||||||
 | 
									binary.BigEndian.Uint64(report.Memory) == memory {
 | 
				
			||||||
 | 
									return report
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							logger.Info("no self-test report found, generating")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						report := &protobufs.SelfTestReport{}
 | 
				
			||||||
 | 
						difficulty := nodeConfig.Engine.Difficulty
 | 
				
			||||||
 | 
						if difficulty == 0 {
 | 
				
			||||||
 | 
							difficulty = 10000
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						report.Difficulty = difficulty
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						frameProver := qcrypto.NewWesolowskiFrameProver(logger)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating difficulty metric")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						start := time.Now().UnixMilli()
 | 
				
			||||||
 | 
						_, err = frameProver.ProveMasterClockFrame(
 | 
				
			||||||
 | 
							&protobufs.ClockFrame{
 | 
				
			||||||
 | 
								Filter:         []byte{0x00},
 | 
				
			||||||
 | 
								FrameNumber:    0,
 | 
				
			||||||
 | 
								Timestamp:      0,
 | 
				
			||||||
 | 
								Difficulty:     difficulty,
 | 
				
			||||||
 | 
								ParentSelector: []byte{0x00},
 | 
				
			||||||
 | 
								Input:          make([]byte, 516),
 | 
				
			||||||
 | 
								Output:         make([]byte, 516),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							0,
 | 
				
			||||||
 | 
							difficulty,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						end := time.Now().UnixMilli()
 | 
				
			||||||
 | 
						report.DifficultyMetric = end - start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating entropy for commit/proof sizes")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						p16bytes := make([]byte, 1024)
 | 
				
			||||||
 | 
						p128bytes := make([]byte, 8192)
 | 
				
			||||||
 | 
						p1024bytes := make([]byte, 65536)
 | 
				
			||||||
 | 
						p65536bytes := make([]byte, 4194304)
 | 
				
			||||||
 | 
						rand.Read(p16bytes)
 | 
				
			||||||
 | 
						rand.Read(p128bytes)
 | 
				
			||||||
 | 
						rand.Read(p1024bytes)
 | 
				
			||||||
 | 
						rand.Read(p65536bytes)
 | 
				
			||||||
 | 
						kzgProver := kzg.DefaultKZGProver()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						p16, _ := kzgProver.BytesToPolynomial(p16bytes)
 | 
				
			||||||
 | 
						p128, _ := kzgProver.BytesToPolynomial(p128bytes)
 | 
				
			||||||
 | 
						p1024, _ := kzgProver.BytesToPolynomial(p1024bytes)
 | 
				
			||||||
 | 
						p65536, _ := kzgProver.BytesToPolynomial(p65536bytes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating 16 degree commitment metric")
 | 
				
			||||||
 | 
						start = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						c16, err := kzgProver.Commit(p16)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						end = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						report.Commit_16Metric = end - start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating 128 degree commitment metric")
 | 
				
			||||||
 | 
						start = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						c128, err := kzgProver.Commit(p128)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						end = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						report.Commit_128Metric = end - start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating 1024 degree commitment metric")
 | 
				
			||||||
 | 
						start = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						c1024, err := kzgProver.Commit(p1024)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						end = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						report.Commit_1024Metric = end - start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating 65536 degree commitment metric")
 | 
				
			||||||
 | 
						start = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						c65536, err := kzgProver.Commit(p65536)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						end = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						report.Commit_65536Metric = end - start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating 16 degree proof metric")
 | 
				
			||||||
 | 
						start = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						_, err = kzgProver.Prove(p16, c16, p16[0])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						end = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						report.Proof_16Metric = end - start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating 128 degree proof metric")
 | 
				
			||||||
 | 
						start = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						_, err = kzgProver.Prove(p128, c128, p128[0])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						end = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						report.Proof_128Metric = end - start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating 1024 degree proof metric")
 | 
				
			||||||
 | 
						start = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						_, err = kzgProver.Prove(p1024, c1024, p1024[0])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						end = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						report.Proof_1024Metric = end - start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logger.Info("generating 65536 degree proof metric")
 | 
				
			||||||
 | 
						start = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						_, err = kzgProver.Prove(p65536, c65536, p65536[0])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						end = time.Now().UnixMilli()
 | 
				
			||||||
 | 
						report.Proof_65536Metric = end - start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						report.Cores = uint32(cores)
 | 
				
			||||||
 | 
						report.Memory = binary.BigEndian.AppendUint64([]byte{}, memory)
 | 
				
			||||||
 | 
						disk := utils.GetDiskSpace(nodeConfig.DB.Path)
 | 
				
			||||||
 | 
						report.Storage = binary.BigEndian.AppendUint64([]byte{}, disk)
 | 
				
			||||||
 | 
						logger.Info("writing report")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// tag: dusk – capabilities report in v1.5
 | 
				
			||||||
 | 
						reportBytes, err := proto.Marshal(report)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = os.WriteFile(
 | 
				
			||||||
 | 
							filepath.Join(configDir, "SELF_TEST"),
 | 
				
			||||||
 | 
							reportBytes,
 | 
				
			||||||
 | 
							fs.FileMode(0600),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return report
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func clearIfTestData(configDir string, nodeConfig *config.Config) {
 | 
					func clearIfTestData(configDir string, nodeConfig *config.Config) {
 | 
				
			||||||
	_, err := os.Stat(filepath.Join(configDir, "RELEASE_VERSION"))
 | 
						_, err := os.Stat(filepath.Join(configDir, "RELEASE_VERSION"))
 | 
				
			||||||
	if os.IsNotExist(err) {
 | 
						if os.IsNotExist(err) {
 | 
				
			||||||
@ -286,26 +472,27 @@ func printLogo() {
 | 
				
			|||||||
	fmt.Println(" ###########                     ##############                      ##########&")
 | 
						fmt.Println(" ###########                     ##############                      ##########&")
 | 
				
			||||||
	fmt.Println(" ##########                      ##############                       ##########")
 | 
						fmt.Println(" ##########                      ##############                       ##########")
 | 
				
			||||||
	fmt.Println("%##########                        ##########                         ##########")
 | 
						fmt.Println("%##########                        ##########                         ##########")
 | 
				
			||||||
	fmt.Println("##########&                                                           ##########")
 | 
						fmt.Println("##########                                                            ##########")
 | 
				
			||||||
	fmt.Println("##########                                                            &#########")
 | 
						fmt.Println("##########                                                            &#########")
 | 
				
			||||||
	fmt.Println("##########&                   #######      #######                    ##########")
 | 
						fmt.Println("##########                    #######      #######                    ##########")
 | 
				
			||||||
	fmt.Println(" ##########                &#########################                 ##########")
 | 
						fmt.Println("%#########                 &#########################                 ##########")
 | 
				
			||||||
	fmt.Println(" ##########              ##############% ##############              &##########")
 | 
						fmt.Println(" ##########              ##############% ##############              &##########")
 | 
				
			||||||
	fmt.Println(" %##########          &##############      ###############           ##########")
 | 
						fmt.Println(" '         '          &##############      ###############           ##########")
 | 
				
			||||||
	fmt.Println("  ###########       ###############           ##############%       ###########")
 | 
						fmt.Println("  '         '       ###############           ##############%       ###########")
 | 
				
			||||||
	fmt.Println("   ###########&       ##########                ###############       ########")
 | 
						fmt.Println("   '         '.       ##########                ###############       ########")
 | 
				
			||||||
	fmt.Println("    ############         #####                     ##############%       ####")
 | 
						fmt.Println("    '.         .         #####                     ##############%       ####")
 | 
				
			||||||
	fmt.Println("      ############                                   ###############")
 | 
						fmt.Println("      '         '.                                   ###############")
 | 
				
			||||||
	fmt.Println("       ##############                                   ##############%")
 | 
						fmt.Println("       '.         '..                                   ##############%")
 | 
				
			||||||
	fmt.Println("         ###############                                  ###############")
 | 
						fmt.Println("         '.          '-.                                  ###############")
 | 
				
			||||||
	fmt.Println("           #################&                                ##############%")
 | 
						fmt.Println("           '-.          ''-..                      ..        ##############%")
 | 
				
			||||||
	fmt.Println("              #########################&&&#############        ###############")
 | 
						fmt.Println("              '-.            ''---............----'  '.        ###############")
 | 
				
			||||||
	fmt.Println("                 ########################################%        ############")
 | 
						fmt.Println("                 '-..                                  '.        ############")
 | 
				
			||||||
	fmt.Println("                     #######################################        ########")
 | 
						fmt.Println("                     ''-..                             ..'         ########")
 | 
				
			||||||
	fmt.Println("                          #############################                ##")
 | 
						fmt.Println("                          ''---..              ...---''               ##")
 | 
				
			||||||
 | 
						fmt.Println("                                 ''----------''")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func printVersion() {
 | 
					func printVersion() {
 | 
				
			||||||
	fmt.Println(" ")
 | 
						fmt.Println(" ")
 | 
				
			||||||
	fmt.Println("                         Quilibrium Node - v1.3.0 – Dawn")
 | 
						fmt.Println("                       Quilibrium Node - v1.4.0 – Sunset")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -297,7 +297,7 @@ func initDHT(
 | 
				
			|||||||
	logger.Info("establishing dht")
 | 
						logger.Info("establishing dht")
 | 
				
			||||||
	var kademliaDHT *dht.IpfsDHT
 | 
						var kademliaDHT *dht.IpfsDHT
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	if isBootstrapPeer {
 | 
						if !isBootstrapPeer {
 | 
				
			||||||
		kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeServer))
 | 
							kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeServer))
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeAuto))
 | 
							kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeAuto))
 | 
				
			||||||
@ -328,12 +328,13 @@ func initDHT(
 | 
				
			|||||||
			go func() {
 | 
								go func() {
 | 
				
			||||||
				defer wg.Done()
 | 
									defer wg.Done()
 | 
				
			||||||
				if err := h.Connect(ctx, *peerinfo); err != nil {
 | 
									if err := h.Connect(ctx, *peerinfo); err != nil {
 | 
				
			||||||
					logger.Debug("error while connecting to dht peer", zap.Error(err))
 | 
										logger.Info("error while connecting to dht peer", zap.Error(err))
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										logger.Info(
 | 
				
			||||||
 | 
											"connected to peer",
 | 
				
			||||||
 | 
											zap.String("peer_id", peerinfo.ID.String()),
 | 
				
			||||||
 | 
										)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				logger.Info(
 | 
					 | 
				
			||||||
					"connected to peer",
 | 
					 | 
				
			||||||
					zap.String("peer_id", peerinfo.ID.String()),
 | 
					 | 
				
			||||||
				)
 | 
					 | 
				
			||||||
			}()
 | 
								}()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		wg.Wait()
 | 
							wg.Wait()
 | 
				
			||||||
@ -422,12 +423,13 @@ func (b *BlossomSub) GetMultiaddrOfPeer(peerId []byte) string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (b *BlossomSub) StartDirectChannelListener(
 | 
					func (b *BlossomSub) StartDirectChannelListener(
 | 
				
			||||||
	key []byte,
 | 
						key []byte,
 | 
				
			||||||
 | 
						purpose string,
 | 
				
			||||||
	server *grpc.Server,
 | 
						server *grpc.Server,
 | 
				
			||||||
) error {
 | 
					) error {
 | 
				
			||||||
	bind, err := gostream.Listen(
 | 
						bind, err := gostream.Listen(
 | 
				
			||||||
		b.h,
 | 
							b.h,
 | 
				
			||||||
		protocol.ID(
 | 
							protocol.ID(
 | 
				
			||||||
			"/p2p/direct-channel/"+base58.Encode(key),
 | 
								"/p2p/direct-channel/"+base58.Encode(key)+purpose,
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -437,7 +439,7 @@ func (b *BlossomSub) StartDirectChannelListener(
 | 
				
			|||||||
	return errors.Wrap(server.Serve(bind), "start direct channel listener")
 | 
						return errors.Wrap(server.Serve(bind), "start direct channel listener")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (b *BlossomSub) GetDirectChannel(key []byte) (
 | 
					func (b *BlossomSub) GetDirectChannel(key []byte, purpose string) (
 | 
				
			||||||
	dialCtx *grpc.ClientConn,
 | 
						dialCtx *grpc.ClientConn,
 | 
				
			||||||
	err error,
 | 
						err error,
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
@ -468,7 +470,7 @@ func (b *BlossomSub) GetDirectChannel(key []byte) (
 | 
				
			|||||||
					b.h,
 | 
										b.h,
 | 
				
			||||||
					peer.ID(key),
 | 
										peer.ID(key),
 | 
				
			||||||
					protocol.ID(
 | 
										protocol.ID(
 | 
				
			||||||
						"/p2p/direct-channel/"+peer.ID(id).String(),
 | 
											"/p2p/direct-channel/"+peer.ID(id).String()+purpose,
 | 
				
			||||||
					),
 | 
										),
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -19,9 +19,10 @@ type PubSub interface {
 | 
				
			|||||||
	GetMultiaddrOfPeer(peerId []byte) string
 | 
						GetMultiaddrOfPeer(peerId []byte) string
 | 
				
			||||||
	StartDirectChannelListener(
 | 
						StartDirectChannelListener(
 | 
				
			||||||
		key []byte,
 | 
							key []byte,
 | 
				
			||||||
 | 
							purpose string,
 | 
				
			||||||
		server *grpc.Server,
 | 
							server *grpc.Server,
 | 
				
			||||||
	) error
 | 
						) error
 | 
				
			||||||
	GetDirectChannel(peerId []byte) (*grpc.ClientConn, error)
 | 
						GetDirectChannel(peerId []byte, purpose string) (*grpc.ClientConn, error)
 | 
				
			||||||
	GetNetworkInfo() *protobufs.NetworkInfoResponse
 | 
						GetNetworkInfo() *protobufs.NetworkInfoResponse
 | 
				
			||||||
	SignMessage(msg []byte) ([]byte, error)
 | 
						SignMessage(msg []byte) ([]byte, error)
 | 
				
			||||||
	GetPublicKey() []byte
 | 
						GetPublicKey() []byte
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ func (j *CeremonyLobbyJoin) VerifySignature() error {
 | 
				
			|||||||
	b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber)
 | 
						b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber)
 | 
				
			||||||
	b = append(b, j.IdentityKey.KeyValue...)
 | 
						b = append(b, j.IdentityKey.KeyValue...)
 | 
				
			||||||
	b = append(b, j.SignedPreKey.KeyValue...)
 | 
						b = append(b, j.SignedPreKey.KeyValue...)
 | 
				
			||||||
 | 
						b = append(b, j.PeerId...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !ed448.Verify(
 | 
						if !ed448.Verify(
 | 
				
			||||||
		j.PublicKeySignatureEd448.PublicKey.KeyValue,
 | 
							j.PublicKeySignatureEd448.PublicKey.KeyValue,
 | 
				
			||||||
@ -33,6 +34,7 @@ func (j *CeremonyLobbyJoin) SignWithProverKey(
 | 
				
			|||||||
	b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber)
 | 
						b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber)
 | 
				
			||||||
	b = append(b, j.IdentityKey.KeyValue...)
 | 
						b = append(b, j.IdentityKey.KeyValue...)
 | 
				
			||||||
	b = append(b, j.SignedPreKey.KeyValue...)
 | 
						b = append(b, j.SignedPreKey.KeyValue...)
 | 
				
			||||||
 | 
						b = append(b, j.PeerId...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Non edwards signing variants need support to specify hash, edwards variants
 | 
						// Non edwards signing variants need support to specify hash, edwards variants
 | 
				
			||||||
	// demand Hash(0) because it does SHA512 under the hood.
 | 
						// demand Hash(0) because it does SHA512 under the hood.
 | 
				
			||||||
 | 
				
			|||||||
@ -571,6 +571,7 @@ type CeremonyLobbyJoin struct {
 | 
				
			|||||||
	IdentityKey             *X448PublicKey  `protobuf:"bytes,2,opt,name=identity_key,json=identityKey,proto3" json:"identity_key,omitempty"`
 | 
						IdentityKey             *X448PublicKey  `protobuf:"bytes,2,opt,name=identity_key,json=identityKey,proto3" json:"identity_key,omitempty"`
 | 
				
			||||||
	SignedPreKey            *X448PublicKey  `protobuf:"bytes,3,opt,name=signed_pre_key,json=signedPreKey,proto3" json:"signed_pre_key,omitempty"`
 | 
						SignedPreKey            *X448PublicKey  `protobuf:"bytes,3,opt,name=signed_pre_key,json=signedPreKey,proto3" json:"signed_pre_key,omitempty"`
 | 
				
			||||||
	PublicKeySignatureEd448 *Ed448Signature `protobuf:"bytes,4,opt,name=public_key_signature_ed448,json=publicKeySignatureEd448,proto3" json:"public_key_signature_ed448,omitempty"`
 | 
						PublicKeySignatureEd448 *Ed448Signature `protobuf:"bytes,4,opt,name=public_key_signature_ed448,json=publicKeySignatureEd448,proto3" json:"public_key_signature_ed448,omitempty"`
 | 
				
			||||||
 | 
						PeerId                  []byte          `protobuf:"bytes,5,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *CeremonyLobbyJoin) Reset() {
 | 
					func (x *CeremonyLobbyJoin) Reset() {
 | 
				
			||||||
@ -633,6 +634,13 @@ func (x *CeremonyLobbyJoin) GetPublicKeySignatureEd448() *Ed448Signature {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *CeremonyLobbyJoin) GetPeerId() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.PeerId
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type CeremonyLobbyStateTransition struct {
 | 
					type CeremonyLobbyStateTransition struct {
 | 
				
			||||||
	state         protoimpl.MessageState
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
	sizeCache     protoimpl.SizeCache
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
@ -1701,7 +1709,7 @@ var file_ceremony_proto_rawDesc = []byte{
 | 
				
			|||||||
	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d,
 | 
						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, 0x54,
 | 
						0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54,
 | 
				
			||||||
	0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52,
 | 
						0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52,
 | 
				
			||||||
	0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xb5, 0x02, 0x0a, 0x11, 0x43, 0x65, 0x72,
 | 
						0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x11, 0x43, 0x65, 0x72,
 | 
				
			||||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x21,
 | 
						0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x21,
 | 
				
			||||||
	0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01,
 | 
						0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01,
 | 
				
			||||||
	0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65,
 | 
						0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65,
 | 
				
			||||||
@ -1721,250 +1729,252 @@ var file_ceremony_proto_rawDesc = []byte{
 | 
				
			|||||||
	0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x53, 0x69,
 | 
						0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x53, 0x69,
 | 
				
			||||||
	0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x17, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
 | 
						0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x17, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
 | 
				
			||||||
	0x65, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x45, 0x64, 0x34, 0x34, 0x38,
 | 
						0x65, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x45, 0x64, 0x34, 0x34, 0x38,
 | 
				
			||||||
	0x22, 0x68, 0x0a, 0x1c, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62,
 | 
						0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
 | 
				
			||||||
	0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
 | 
						0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x1c, 0x43, 0x65, 0x72,
 | 
				
			||||||
	0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20,
 | 
						0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x54,
 | 
				
			||||||
	0x03, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x2b, 0x0a,
 | 
						0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70,
 | 
				
			||||||
	0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70, 0x75,
 | 
						0x65, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79,
 | 
				
			||||||
	0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69,
 | 
						0x70, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69,
 | 
				
			||||||
	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x11, 0x43,
 | 
						0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
 | 
				
			||||||
	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65,
 | 
						0x0c, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70,
 | 
				
			||||||
	0x12, 0x5f, 0x0a, 0x13, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69,
 | 
						0x75, 0x74, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x11, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
 | 
				
			||||||
	0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e,
 | 
						0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x6a, 0x6f, 0x69,
 | 
				
			||||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
						0x6e, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73,
 | 
				
			||||||
	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65,
 | 
						0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
				
			||||||
	0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x6a,
 | 
					 | 
				
			||||||
	0x6f, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
 | 
					 | 
				
			||||||
	0x73, 0x12, 0x5e, 0x0a, 0x16, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x70,
 | 
					 | 
				
			||||||
	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
 | 
					 | 
				
			||||||
	0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
					 | 
				
			||||||
	0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34,
 | 
					 | 
				
			||||||
	0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x70, 0x72, 0x65, 0x66,
 | 
					 | 
				
			||||||
	0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
 | 
					 | 
				
			||||||
	0x73, 0x22, 0xe5, 0x04, 0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x49, 0x6e,
 | 
					 | 
				
			||||||
	0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a,
 | 
					 | 
				
			||||||
	0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
 | 
					 | 
				
			||||||
	0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 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, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, 0x69,
 | 
					 | 
				
			||||||
	0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x81,
 | 
					 | 
				
			||||||
	0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x70,
 | 
					 | 
				
			||||||
	0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f,
 | 
					 | 
				
			||||||
	0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 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, 0x53,
 | 
					 | 
				
			||||||
	0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61,
 | 
					 | 
				
			||||||
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e,
 | 
					 | 
				
			||||||
	0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f,
 | 
					 | 
				
			||||||
	0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x70,
 | 
					 | 
				
			||||||
	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73,
 | 
					 | 
				
			||||||
	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 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, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x65,
 | 
					 | 
				
			||||||
	0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, 0x72,
 | 
					 | 
				
			||||||
	0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
 | 
					 | 
				
			||||||
	0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7a, 0x0a, 0x20,
 | 
					 | 
				
			||||||
	0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64,
 | 
					 | 
				
			||||||
	0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73,
 | 
					 | 
				
			||||||
	0x18, 0x04, 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,
 | 
						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, 0x41, 0x64, 0x76,
 | 
						0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62,
 | 
				
			||||||
	0x61, 0x6e, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x1d, 0x74, 0x72, 0x61, 0x6e, 0x73,
 | 
						0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x61,
 | 
				
			||||||
	0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63,
 | 
						0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x16, 0x70, 0x72,
 | 
				
			||||||
	0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74,
 | 
						0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
 | 
				
			||||||
	0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
 | 
						0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69,
 | 
				
			||||||
	0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
						0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79,
 | 
				
			||||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73,
 | 
						0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
 | 
				
			||||||
	0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
 | 
						0x4b, 0x65, 0x79, 0x52, 0x15, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x61,
 | 
				
			||||||
	0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72,
 | 
						0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xe5, 0x04, 0x0a, 0x17, 0x43,
 | 
				
			||||||
	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x88, 0x05, 0x0a, 0x17, 0x43, 0x65,
 | 
						0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73,
 | 
				
			||||||
	0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67,
 | 
						0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65,
 | 
				
			||||||
	0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f,
 | 
						0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20,
 | 
				
			||||||
	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
 | 
						0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
 | 
				
			||||||
	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
						0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70,
 | 
				
			||||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62,
 | 
						0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a,
 | 
				
			||||||
	0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f,
 | 
						0x6f, 0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69,
 | 
				
			||||||
	0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63,
 | 
						0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65,
 | 
				
			||||||
	0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, 0x73,
 | 
						0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61,
 | 
				
			||||||
	0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x74,
 | 
						0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
 | 
				
			||||||
	0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
 | 
						0x0b, 0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
				
			||||||
	0x32, 0x3a, 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, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65,
 | 
					 | 
				
			||||||
	0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, 0x61,
 | 
					 | 
				
			||||||
	0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74,
 | 
					 | 
				
			||||||
	0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x64,
 | 
					 | 
				
			||||||
	0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
 | 
					 | 
				
			||||||
	0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
 | 
					 | 
				
			||||||
	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 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, 0x44, 0x72, 0x6f, 0x70,
 | 
					 | 
				
			||||||
	0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61,
 | 
					 | 
				
			||||||
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72,
 | 
					 | 
				
			||||||
	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74,
 | 
					 | 
				
			||||||
	0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18,
 | 
					 | 
				
			||||||
	0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 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, 0x54, 0x72, 0x61, 0x6e,
 | 
					 | 
				
			||||||
	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f,
 | 
					 | 
				
			||||||
	0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18,
 | 
					 | 
				
			||||||
	0x05, 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, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e,
 | 
					 | 
				
			||||||
	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x06, 0x73, 0x68, 0x61,
 | 
					 | 
				
			||||||
	0x72, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e,
 | 
					 | 
				
			||||||
	0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x06,
 | 
					 | 
				
			||||||
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
					 | 
				
			||||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45,
 | 
					 | 
				
			||||||
	0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e,
 | 
					 | 
				
			||||||
	0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
 | 
					 | 
				
			||||||
	0x61, 0x6e, 0x74, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
					 | 
				
			||||||
	0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65,
 | 
					 | 
				
			||||||
	0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
 | 
					 | 
				
			||||||
	0x0b, 0x32, 0x35, 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,
 | 
						0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e,
 | 
				
			||||||
	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69,
 | 
						0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76,
 | 
				
			||||||
	0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
 | 
						0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c,
 | 
				
			||||||
	0x73, 0x12, 0x5e, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61,
 | 
						0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41,
 | 
				
			||||||
	0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e,
 | 
						0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20,
 | 
				
			||||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
						0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
 | 
				
			||||||
	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65,
 | 
						0x61, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
 | 
				
			||||||
	0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x11,
 | 
						0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
				
			||||||
	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70,
 | 
						0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
				
			||||||
	0x74, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f,
 | 
						0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f,
 | 
				
			||||||
	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03,
 | 
						0x70, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74,
 | 
				
			||||||
 | 
						0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61,
 | 
				
			||||||
 | 
						0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61,
 | 
				
			||||||
 | 
						0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7a, 0x0a, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72,
 | 
				
			||||||
 | 
						0x69, 0x70, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63,
 | 
				
			||||||
 | 
						0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x04, 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, 0x43, 0x65,
 | 
				
			||||||
 | 
						0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x6f, 0x75,
 | 
				
			||||||
 | 
						0x6e, 0x64, 0x52, 0x1d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x6f,
 | 
				
			||||||
 | 
						0x75, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
 | 
				
			||||||
 | 
						0x73, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f,
 | 
				
			||||||
 | 
						0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03,
 | 
				
			||||||
	0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
						0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
				
			||||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34,
 | 
						0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34,
 | 
				
			||||||
	0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78,
 | 
						0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78,
 | 
				
			||||||
	0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e,
 | 
						0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e,
 | 
				
			||||||
	0x74, 0x73, 0x22, 0x62, 0x0a, 0x18, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65,
 | 
						0x74, 0x73, 0x22, 0x88, 0x05, 0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x46,
 | 
				
			||||||
	0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x12, 0x46,
 | 
						0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f,
 | 
				
			||||||
	0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28,
 | 
						0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
 | 
				
			||||||
	0x0b, 0x32, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
						0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75,
 | 
				
			||||||
	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e,
 | 
						0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65,
 | 
				
			||||||
	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x52, 0x08, 0x70, 0x65,
 | 
						0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f,
 | 
				
			||||||
	0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xfe, 0x01, 0x0a, 0x0c, 0x43, 0x65, 0x72, 0x65, 0x6d,
 | 
						0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74,
 | 
				
			||||||
	0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f,
 | 
						0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12,
 | 
				
			||||||
	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64,
 | 
						0x81, 0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f,
 | 
				
			||||||
	0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20,
 | 
						0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69,
 | 
				
			||||||
	0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1b,
 | 
						0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
				
			||||||
	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,
 | 
					 | 
				
			||||||
	0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e,
 | 
					 | 
				
			||||||
	0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44,
 | 
					 | 
				
			||||||
	0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 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, 0xd0, 0x01, 0x0a, 0x24, 0x43,
 | 
					 | 
				
			||||||
	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65,
 | 
					 | 
				
			||||||
	0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73,
 | 
					 | 
				
			||||||
	0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74,
 | 
					 | 
				
			||||||
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 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, 0x50, 0x72, 0x65,
 | 
					 | 
				
			||||||
	0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69,
 | 
					 | 
				
			||||||
	0x67, 0x68, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02,
 | 
					 | 
				
			||||||
	0x20, 0x01, 0x28, 0x0b, 0x32, 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, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a,
 | 
					 | 
				
			||||||
	0x0c, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xda, 0x01,
 | 
					 | 
				
			||||||
	0x0a, 0x25, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65,
 | 
					 | 
				
			||||||
	0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
 | 
					 | 
				
			||||||
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c,
 | 
					 | 
				
			||||||
	0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 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, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72,
 | 
					 | 
				
			||||||
	0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f,
 | 
					 | 
				
			||||||
	0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
					 | 
				
			||||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65,
 | 
						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,
 | 
						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, 0x48, 0x00,
 | 
						0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74,
 | 
				
			||||||
	0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x79,
 | 
						0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65,
 | 
				
			||||||
	0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x49,
 | 
						0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69,
 | 
				
			||||||
	0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61,
 | 
						0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f,
 | 
				
			||||||
	0x70, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
 | 
						0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65,
 | 
				
			||||||
	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x43, 0x6f,
 | 
						0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d,
 | 
				
			||||||
	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,
 | 
					 | 
				
			||||||
	0xb6, 0x03, 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, 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,
 | 
						0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72,
 | 
				
			||||||
	0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x71,
 | 
						0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76,
 | 
				
			||||||
	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63,
 | 
						0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64,
 | 
				
			||||||
	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d,
 | 
						0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e,
 | 
				
			||||||
 | 
						0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a,
 | 
				
			||||||
 | 
						0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35,
 | 
				
			||||||
 | 
						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, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43,
 | 
				
			||||||
 | 
						0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x4c,
 | 
				
			||||||
 | 
						0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x05, 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, 0x43, 0x65, 0x72,
 | 
				
			||||||
 | 
						0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53,
 | 
				
			||||||
 | 
						0x68, 0x61, 0x72, 0x65, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x17,
 | 
				
			||||||
 | 
						0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69,
 | 
				
			||||||
 | 
						0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e,
 | 
				
			||||||
 | 
						0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
				
			||||||
 | 
						0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62,
 | 
				
			||||||
 | 
						0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e,
 | 
				
			||||||
 | 
						0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xab, 0x02,
 | 
				
			||||||
 | 
						0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
 | 
				
			||||||
 | 
						0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, 0x6d,
 | 
				
			||||||
 | 
						0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 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, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69,
 | 
				
			||||||
 | 
						0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x12, 0x75, 0x70,
 | 
				
			||||||
 | 
						0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
 | 
				
			||||||
 | 
						0x18, 0x02, 0x20, 0x01, 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, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61,
 | 
				
			||||||
 | 
						0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
 | 
				
			||||||
 | 
						0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65,
 | 
				
			||||||
 | 
						0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
 | 
				
			||||||
 | 
						0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75,
 | 
				
			||||||
 | 
						0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65,
 | 
				
			||||||
 | 
						0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69,
 | 
				
			||||||
 | 
						0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50,
 | 
				
			||||||
 | 
						0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x62, 0x0a, 0x18, 0x43,
 | 
				
			||||||
 | 
						0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x41,
 | 
				
			||||||
 | 
						0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f,
 | 
				
			||||||
 | 
						0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 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,
 | 
				
			||||||
 | 
						0xfe, 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, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x75,
 | 
				
			||||||
 | 
						0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 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, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74,
 | 
				
			||||||
 | 
						0x61, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28,
 | 
				
			||||||
 | 
						0x0c, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
 | 
				
			||||||
 | 
						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, 0xd0, 0x01, 0x0a, 0x24, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
 | 
				
			||||||
 | 
						0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65,
 | 
				
			||||||
 | 
						0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09,
 | 
				
			||||||
 | 
						0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
 | 
				
			||||||
 | 
						0x2e, 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, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48,
 | 
				
			||||||
 | 
						0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x48, 0x0a, 0x07,
 | 
				
			||||||
 | 
						0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 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, 0x48, 0x00, 0x52, 0x07, 0x72,
 | 
				
			||||||
 | 
						0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d,
 | 
				
			||||||
 | 
						0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xda, 0x01, 0x0a, 0x25, 0x43, 0x65, 0x72, 0x65, 0x6d,
 | 
				
			||||||
	0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e,
 | 
						0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e,
 | 
				
			||||||
	0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a, 0x1d, 0x4e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74,
 | 
						0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
 | 
				
			||||||
	0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46,
 | 
						0x12, 0x4e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20,
 | 
				
			||||||
	0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
 | 
						0x01, 0x28, 0x0b, 0x32, 0x2e, 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, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69,
 | 
				
			||||||
 | 
						0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74,
 | 
				
			||||||
 | 
						0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01,
 | 
				
			||||||
 | 
						0x28, 0x0b, 0x32, 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, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f,
 | 
				
			||||||
 | 
						0x6e, 0x73, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73,
 | 
				
			||||||
 | 
						0x61, 0x67, 0x65, 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, 0xb6, 0x03, 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,
 | 
						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,
 | 
						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, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 | 
						0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a,
 | 
				
			||||||
	0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
 | 
						0x1d, 0x4e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65,
 | 
				
			||||||
	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d,
 | 
						0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41,
 | 
				
			||||||
	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43,
 | 
						0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
				
			||||||
	0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73,
 | 
						0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72,
 | 
				
			||||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30, 0x01,
 | 
						0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53,
 | 
				
			||||||
	0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x68, 0x61,
 | 
						0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
 | 
				
			||||||
	0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
						0x65, 0x1a, 0x42, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
				
			||||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70,
 | 
						0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e,
 | 
				
			||||||
	0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65,
 | 
						0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73,
 | 
				
			||||||
	0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
						0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65,
 | 
				
			||||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70,
 | 
						0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74,
 | 
				
			||||||
	0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65,
 | 
						0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e,
 | 
				
			||||||
	0x6c, 0x6f, 0x70, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72,
 | 
						0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
				
			||||||
	0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f,
 | 
						0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68,
 | 
				
			||||||
	0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e,
 | 
						0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e,
 | 
				
			||||||
	0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 | 
						0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
				
			||||||
	0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
						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 (
 | 
					var (
 | 
				
			||||||
 | 
				
			|||||||
@ -92,6 +92,7 @@ message CeremonyLobbyJoin {
 | 
				
			|||||||
  quilibrium.node.keys.pb.X448PublicKey identity_key = 2;
 | 
					  quilibrium.node.keys.pb.X448PublicKey identity_key = 2;
 | 
				
			||||||
  quilibrium.node.keys.pb.X448PublicKey signed_pre_key = 3;
 | 
					  quilibrium.node.keys.pb.X448PublicKey signed_pre_key = 3;
 | 
				
			||||||
  quilibrium.node.keys.pb.Ed448Signature public_key_signature_ed448 = 4;
 | 
					  quilibrium.node.keys.pb.Ed448Signature public_key_signature_ed448 = 4;
 | 
				
			||||||
 | 
					  bytes peer_id = 5;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
message CeremonyLobbyStateTransition {
 | 
					message CeremonyLobbyStateTransition {
 | 
				
			||||||
 | 
				
			|||||||
@ -974,6 +974,295 @@ func (x *TokenInfoResponse) GetUnconfirmedOwnedTokens() []byte {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Capability struct {
 | 
				
			||||||
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
 | 
						unknownFields protoimpl.UnknownFields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// A general protocol identifier as a uint32 – this is expected to rarely
 | 
				
			||||||
 | 
						// iterate, and should be uniquely identifying both protocol and version.
 | 
				
			||||||
 | 
						// Pragmatically speaking, this implies that the least significant byte
 | 
				
			||||||
 | 
						// specifies version (which should iterate most minimally), and the three most
 | 
				
			||||||
 | 
						// significant bytes should specify protocol. Recipients SHOULD ignore
 | 
				
			||||||
 | 
						// messages with incompatible protocol identifiers, but also SHOULD warn on
 | 
				
			||||||
 | 
						// identifiers with versions higher than the supported protocol. A large
 | 
				
			||||||
 | 
						// number of unsupported protocol messages may indicate spam/some other
 | 
				
			||||||
 | 
						// attack, whereas a large number of unsupported protocol versions may
 | 
				
			||||||
 | 
						// indicate an out of date client, respective to which side is the maximum of
 | 
				
			||||||
 | 
						// the version number.
 | 
				
			||||||
 | 
						ProtocolIdentifier uint32 `protobuf:"varint,1,opt,name=protocol_identifier,json=protocolIdentifier,proto3" json:"protocol_identifier,omitempty"`
 | 
				
			||||||
 | 
						// An optional bundle of information specific to the capability – used for
 | 
				
			||||||
 | 
						// extensibility in negotiating variations of a protocol – e.g. Triple-Ratchet
 | 
				
			||||||
 | 
						// but only for certain curve types.
 | 
				
			||||||
 | 
						AdditionalMetadata []byte `protobuf:"bytes,2,opt,name=additional_metadata,json=additionalMetadata,proto3" json:"additional_metadata,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *Capability) Reset() {
 | 
				
			||||||
 | 
						*x = Capability{}
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
 | 
							mi := &file_node_proto_msgTypes[17]
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *Capability) String() string {
 | 
				
			||||||
 | 
						return protoimpl.X.MessageStringOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (*Capability) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *Capability) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
 | 
						mi := &file_node_proto_msgTypes[17]
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
 | 
								ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return ms
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return mi.MessageOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: Use Capability.ProtoReflect.Descriptor instead.
 | 
				
			||||||
 | 
					func (*Capability) Descriptor() ([]byte, []int) {
 | 
				
			||||||
 | 
						return file_node_proto_rawDescGZIP(), []int{17}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *Capability) GetProtocolIdentifier() uint32 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.ProtocolIdentifier
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *Capability) GetAdditionalMetadata() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.AdditionalMetadata
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type SelfTestReport struct {
 | 
				
			||||||
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
 | 
						unknownFields protoimpl.UnknownFields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// The difficulty the self test was conducted under
 | 
				
			||||||
 | 
						Difficulty uint32 `protobuf:"varint,1,opt,name=difficulty,proto3" json:"difficulty,omitempty"`
 | 
				
			||||||
 | 
						// The resulting local time of computing the VDF test under the difficulty
 | 
				
			||||||
 | 
						DifficultyMetric int64 `protobuf:"varint,2,opt,name=difficulty_metric,json=difficultyMetric,proto3" json:"difficulty_metric,omitempty"`
 | 
				
			||||||
 | 
						// The resulting local time of computing a KZG commitment for a 16 degree
 | 
				
			||||||
 | 
						// polynomial
 | 
				
			||||||
 | 
						Commit_16Metric int64 `protobuf:"varint,3,opt,name=commit_16_metric,json=commit16Metric,proto3" json:"commit_16_metric,omitempty"`
 | 
				
			||||||
 | 
						// The resulting local time of computing a KZG commitment for a 128 degree
 | 
				
			||||||
 | 
						// polynomial
 | 
				
			||||||
 | 
						Commit_128Metric int64 `protobuf:"varint,4,opt,name=commit_128_metric,json=commit128Metric,proto3" json:"commit_128_metric,omitempty"`
 | 
				
			||||||
 | 
						// The resulting local time of computing a KZG commitment for a 1024 degree
 | 
				
			||||||
 | 
						// polynomial
 | 
				
			||||||
 | 
						Commit_1024Metric int64 `protobuf:"varint,5,opt,name=commit_1024_metric,json=commit1024Metric,proto3" json:"commit_1024_metric,omitempty"`
 | 
				
			||||||
 | 
						// The resulting local time of computing a KZG commitment for a 65536 degree
 | 
				
			||||||
 | 
						// polynomial
 | 
				
			||||||
 | 
						Commit_65536Metric int64 `protobuf:"varint,6,opt,name=commit_65536_metric,json=commit65536Metric,proto3" json:"commit_65536_metric,omitempty"`
 | 
				
			||||||
 | 
						// The resulting local time of computing a KZG proof for a 16 degree
 | 
				
			||||||
 | 
						// polynomial
 | 
				
			||||||
 | 
						Proof_16Metric int64 `protobuf:"varint,7,opt,name=proof_16_metric,json=proof16Metric,proto3" json:"proof_16_metric,omitempty"`
 | 
				
			||||||
 | 
						// The resulting local time of computing a KZG proof for a 128 degree
 | 
				
			||||||
 | 
						// polynomial
 | 
				
			||||||
 | 
						Proof_128Metric int64 `protobuf:"varint,8,opt,name=proof_128_metric,json=proof128Metric,proto3" json:"proof_128_metric,omitempty"`
 | 
				
			||||||
 | 
						// The resulting local time of computing a KZG proof for a 1024 degree
 | 
				
			||||||
 | 
						// polynomial
 | 
				
			||||||
 | 
						Proof_1024Metric int64 `protobuf:"varint,9,opt,name=proof_1024_metric,json=proof1024Metric,proto3" json:"proof_1024_metric,omitempty"`
 | 
				
			||||||
 | 
						// The resulting local time of computing a KZG proof for a 65536 degree
 | 
				
			||||||
 | 
						// polynomial
 | 
				
			||||||
 | 
						Proof_65536Metric int64 `protobuf:"varint,10,opt,name=proof_65536_metric,json=proof65536Metric,proto3" json:"proof_65536_metric,omitempty"`
 | 
				
			||||||
 | 
						// The number of reported accessible cores
 | 
				
			||||||
 | 
						Cores uint32 `protobuf:"varint,11,opt,name=cores,proto3" json:"cores,omitempty"`
 | 
				
			||||||
 | 
						// The total available memory
 | 
				
			||||||
 | 
						Memory []byte `protobuf:"bytes,12,opt,name=memory,proto3" json:"memory,omitempty"`
 | 
				
			||||||
 | 
						// The total available storage
 | 
				
			||||||
 | 
						Storage []byte `protobuf:"bytes,13,opt,name=storage,proto3" json:"storage,omitempty"`
 | 
				
			||||||
 | 
						// The list of supported capabilities
 | 
				
			||||||
 | 
						Capabilities []*Capability `protobuf:"bytes,14,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) Reset() {
 | 
				
			||||||
 | 
						*x = SelfTestReport{}
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
 | 
							mi := &file_node_proto_msgTypes[18]
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) String() string {
 | 
				
			||||||
 | 
						return protoimpl.X.MessageStringOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (*SelfTestReport) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
 | 
						mi := &file_node_proto_msgTypes[18]
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
 | 
								ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return ms
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return mi.MessageOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: Use SelfTestReport.ProtoReflect.Descriptor instead.
 | 
				
			||||||
 | 
					func (*SelfTestReport) Descriptor() ([]byte, []int) {
 | 
				
			||||||
 | 
						return file_node_proto_rawDescGZIP(), []int{18}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetDifficulty() uint32 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Difficulty
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetDifficultyMetric() int64 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.DifficultyMetric
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetCommit_16Metric() int64 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Commit_16Metric
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetCommit_128Metric() int64 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Commit_128Metric
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetCommit_1024Metric() int64 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Commit_1024Metric
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetCommit_65536Metric() int64 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Commit_65536Metric
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetProof_16Metric() int64 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Proof_16Metric
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetProof_128Metric() int64 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Proof_128Metric
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetProof_1024Metric() int64 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Proof_1024Metric
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetProof_65536Metric() int64 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Proof_65536Metric
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetCores() uint32 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Cores
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetMemory() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Memory
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetStorage() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Storage
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SelfTestReport) GetCapabilities() []*Capability {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Capabilities
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ValidationMessage struct {
 | 
				
			||||||
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
 | 
						unknownFields protoimpl.UnknownFields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Validation []byte `protobuf:"bytes,1,opt,name=validation,proto3" json:"validation,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *ValidationMessage) Reset() {
 | 
				
			||||||
 | 
						*x = ValidationMessage{}
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
 | 
							mi := &file_node_proto_msgTypes[19]
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *ValidationMessage) String() string {
 | 
				
			||||||
 | 
						return protoimpl.X.MessageStringOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (*ValidationMessage) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *ValidationMessage) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
 | 
						mi := &file_node_proto_msgTypes[19]
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
 | 
								ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return ms
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return mi.MessageOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: Use ValidationMessage.ProtoReflect.Descriptor instead.
 | 
				
			||||||
 | 
					func (*ValidationMessage) Descriptor() ([]byte, []int) {
 | 
				
			||||||
 | 
						return file_node_proto_rawDescGZIP(), []int{19}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *ValidationMessage) GetValidation() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Validation
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var File_node_proto protoreflect.FileDescriptor
 | 
					var File_node_proto protoreflect.FileDescriptor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var file_node_proto_rawDesc = []byte{
 | 
					var file_node_proto_rawDesc = []byte{
 | 
				
			||||||
@ -1097,64 +1386,120 @@ var file_node_proto_rawDesc = []byte{
 | 
				
			|||||||
	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x74,
 | 
						0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x74,
 | 
				
			||||||
	0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x75, 0x6e, 0x63,
 | 
						0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x75, 0x6e, 0x63,
 | 
				
			||||||
	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x6b,
 | 
						0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x6b,
 | 
				
			||||||
	0x65, 0x6e, 0x73, 0x32, 0x80, 0x05, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76,
 | 
						0x65, 0x6e, 0x73, 0x22, 0x6e, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
 | 
				
			||||||
	0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73,
 | 
						0x79, 0x12, 0x2f, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x69, 0x64,
 | 
				
			||||||
	0x12, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
 | 
						0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12,
 | 
				
			||||||
	0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72,
 | 
						0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
 | 
				
			||||||
	0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75,
 | 
						0x65, 0x72, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
 | 
				
			||||||
	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f,
 | 
						0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
 | 
				
			||||||
	0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
 | 
						0x12, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64,
 | 
				
			||||||
	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65,
 | 
						0x61, 0x74, 0x61, 0x22, 0xce, 0x04, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74,
 | 
				
			||||||
	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
						0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63,
 | 
				
			||||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47,
 | 
						0x75, 0x6c, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66,
 | 
				
			||||||
	0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
						0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63,
 | 
				
			||||||
	0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
						0x75, 0x6c, 0x74, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28,
 | 
				
			||||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61,
 | 
						0x03, 0x52, 0x10, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x4d, 0x65, 0x74,
 | 
				
			||||||
	0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65,
 | 
						0x72, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x36,
 | 
				
			||||||
	0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e,
 | 
						0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63,
 | 
				
			||||||
 | 
						0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a,
 | 
				
			||||||
 | 
						0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74, 0x72,
 | 
				
			||||||
 | 
						0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
 | 
				
			||||||
 | 
						0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6d,
 | 
				
			||||||
 | 
						0x6d, 0x69, 0x74, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18,
 | 
				
			||||||
 | 
						0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x30, 0x32,
 | 
				
			||||||
 | 
						0x34, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
 | 
				
			||||||
 | 
						0x74, 0x5f, 0x36, 0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x06,
 | 
				
			||||||
 | 
						0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x36, 0x35, 0x35, 0x33,
 | 
				
			||||||
 | 
						0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66,
 | 
				
			||||||
 | 
						0x5f, 0x31, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
 | 
				
			||||||
 | 
						0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12,
 | 
				
			||||||
 | 
						0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74,
 | 
				
			||||||
 | 
						0x72, 0x69, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66,
 | 
				
			||||||
 | 
						0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x6f,
 | 
				
			||||||
 | 
						0x6f, 0x66, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x09,
 | 
				
			||||||
 | 
						0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x30, 0x32, 0x34, 0x4d,
 | 
				
			||||||
 | 
						0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x36,
 | 
				
			||||||
 | 
						0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28,
 | 
				
			||||||
 | 
						0x03, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x36, 0x35, 0x35, 0x33, 0x36, 0x4d, 0x65, 0x74,
 | 
				
			||||||
 | 
						0x72, 0x69, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01,
 | 
				
			||||||
 | 
						0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d,
 | 
				
			||||||
 | 
						0x6f, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72,
 | 
				
			||||||
 | 
						0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01,
 | 
				
			||||||
 | 
						0x28, 0x0c, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x63,
 | 
				
			||||||
 | 
						0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28,
 | 
				
			||||||
 | 
						0x0b, 0x32, 0x23, 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, 0x43, 0x61, 0x70, 0x61,
 | 
				
			||||||
 | 
						0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
 | 
				
			||||||
 | 
						0x74, 0x69, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
 | 
				
			||||||
 | 
						0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x61, 0x6c,
 | 
				
			||||||
 | 
						0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x76,
 | 
				
			||||||
 | 
						0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x80, 0x01, 0x0a, 0x11, 0x56, 0x61,
 | 
				
			||||||
 | 
						0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
 | 
				
			||||||
 | 
						0x6b, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
 | 
				
			||||||
 | 
						0x74, 0x69, 0x6f, 0x6e, 0x12, 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, 0x56,
 | 
				
			||||||
 | 
						0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
 | 
				
			||||||
 | 
						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, 0x56, 0x61, 0x6c, 0x69, 0x64,
 | 
				
			||||||
 | 
						0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x80, 0x05, 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,
 | 
						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, 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, 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, 0x65,
 | 
				
			||||||
 | 
						0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 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, 0x4e, 0x6f, 0x64, 0x65, 0x49,
 | 
				
			||||||
	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69,
 | 
						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,
 | 
						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,
 | 
						0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
 | 
				
			||||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65,
 | 
						0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77,
 | 
				
			||||||
	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
						0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
 | 
				
			||||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47,
 | 
						0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
 | 
				
			||||||
	0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 | 
						0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f,
 | 
				
			||||||
	0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
						0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
 | 
				
			||||||
	0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65,
 | 
						0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
 | 
				
			||||||
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e,
 | 
						0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
 | 
				
			||||||
	0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e,
 | 
						0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65,
 | 
				
			||||||
	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
						0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
 | 
				
			||||||
	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, 0x32, 0xcf, 0x01, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53,
 | 
					 | 
				
			||||||
	0x74, 0x61, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 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, 0x50, 0x75,
 | 
					 | 
				
			||||||
	0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
					 | 
				
			||||||
	0x1a, 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, 0x50, 0x75, 0x74, 0x52, 0x65,
 | 
					 | 
				
			||||||
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 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,
 | 
						0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e,
 | 
				
			||||||
	0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
						0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75,
 | 
				
			||||||
	0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
						0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
 | 
				
			||||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74,
 | 
						0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x6f,
 | 
				
			||||||
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72,
 | 
						0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32,
 | 
				
			||||||
	0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f,
 | 
						0xcf, 0x01, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x60, 0x0a,
 | 
				
			||||||
	0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e,
 | 
						0x0b, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71,
 | 
				
			||||||
	0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 | 
						0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e,
 | 
				
			||||||
	0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
						0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e,
 | 
				
			||||||
 | 
						0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 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, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
 | 
				
			||||||
 | 
						0x60, 0x0a, 0x0b, 0x50, 0x75, 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, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72,
 | 
				
			||||||
 | 
						0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 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, 0x50, 0x75, 0x74, 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 (
 | 
					var (
 | 
				
			||||||
@ -1169,7 +1514,7 @@ func file_node_proto_rawDescGZIP() []byte {
 | 
				
			|||||||
	return file_node_proto_rawDescData
 | 
						return file_node_proto_rawDescData
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var file_node_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
 | 
					var file_node_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
 | 
				
			||||||
var file_node_proto_goTypes = []interface{}{
 | 
					var file_node_proto_goTypes = []interface{}{
 | 
				
			||||||
	(*GetFramesRequest)(nil),      // 0: quilibrium.node.node.pb.GetFramesRequest
 | 
						(*GetFramesRequest)(nil),      // 0: quilibrium.node.node.pb.GetFramesRequest
 | 
				
			||||||
	(*GetFrameInfoRequest)(nil),   // 1: quilibrium.node.node.pb.GetFrameInfoRequest
 | 
						(*GetFrameInfoRequest)(nil),   // 1: quilibrium.node.node.pb.GetFrameInfoRequest
 | 
				
			||||||
@ -1188,37 +1533,43 @@ var file_node_proto_goTypes = []interface{}{
 | 
				
			|||||||
	(*NetworkInfoResponse)(nil),   // 14: quilibrium.node.node.pb.NetworkInfoResponse
 | 
						(*NetworkInfoResponse)(nil),   // 14: quilibrium.node.node.pb.NetworkInfoResponse
 | 
				
			||||||
	(*GetTokenInfoRequest)(nil),   // 15: quilibrium.node.node.pb.GetTokenInfoRequest
 | 
						(*GetTokenInfoRequest)(nil),   // 15: quilibrium.node.node.pb.GetTokenInfoRequest
 | 
				
			||||||
	(*TokenInfoResponse)(nil),     // 16: quilibrium.node.node.pb.TokenInfoResponse
 | 
						(*TokenInfoResponse)(nil),     // 16: quilibrium.node.node.pb.TokenInfoResponse
 | 
				
			||||||
	(*ClockFrame)(nil),            // 17: quilibrium.node.clock.pb.ClockFrame
 | 
						(*Capability)(nil),            // 17: quilibrium.node.node.pb.Capability
 | 
				
			||||||
 | 
						(*SelfTestReport)(nil),        // 18: quilibrium.node.node.pb.SelfTestReport
 | 
				
			||||||
 | 
						(*ValidationMessage)(nil),     // 19: quilibrium.node.node.pb.ValidationMessage
 | 
				
			||||||
 | 
						(*ClockFrame)(nil),            // 20: quilibrium.node.clock.pb.ClockFrame
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
var file_node_proto_depIdxs = []int32{
 | 
					var file_node_proto_depIdxs = []int32{
 | 
				
			||||||
	17, // 0: quilibrium.node.node.pb.FramesResponse.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
						20, // 0: quilibrium.node.node.pb.FramesResponse.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
				
			||||||
	17, // 1: quilibrium.node.node.pb.FrameInfoResponse.clock_frame:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
						20, // 1: quilibrium.node.node.pb.FrameInfoResponse.clock_frame:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
				
			||||||
	7,  // 2: quilibrium.node.node.pb.PeerInfoResponse.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
						7,  // 2: quilibrium.node.node.pb.PeerInfoResponse.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
				
			||||||
	7,  // 3: quilibrium.node.node.pb.PeerInfoResponse.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
						7,  // 3: quilibrium.node.node.pb.PeerInfoResponse.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
				
			||||||
	7,  // 4: quilibrium.node.node.pb.PutPeerInfoRequest.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
						7,  // 4: quilibrium.node.node.pb.PutPeerInfoRequest.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
				
			||||||
	7,  // 5: quilibrium.node.node.pb.PutPeerInfoRequest.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
						7,  // 5: quilibrium.node.node.pb.PutPeerInfoRequest.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
				
			||||||
	9,  // 6: quilibrium.node.node.pb.NetworkInfoResponse.network_info:type_name -> quilibrium.node.node.pb.NetworkInfo
 | 
						9,  // 6: quilibrium.node.node.pb.NetworkInfoResponse.network_info:type_name -> quilibrium.node.node.pb.NetworkInfo
 | 
				
			||||||
	0,  // 7: quilibrium.node.node.pb.NodeService.GetFrames:input_type -> quilibrium.node.node.pb.GetFramesRequest
 | 
						17, // 7: quilibrium.node.node.pb.SelfTestReport.capabilities:type_name -> quilibrium.node.node.pb.Capability
 | 
				
			||||||
	1,  // 8: quilibrium.node.node.pb.NodeService.GetFrameInfo:input_type -> quilibrium.node.node.pb.GetFrameInfoRequest
 | 
						19, // 8: quilibrium.node.node.pb.ValidationService.PerformValidation:input_type -> quilibrium.node.node.pb.ValidationMessage
 | 
				
			||||||
	2,  // 9: quilibrium.node.node.pb.NodeService.GetPeerInfo:input_type -> quilibrium.node.node.pb.GetPeerInfoRequest
 | 
						0,  // 9: quilibrium.node.node.pb.NodeService.GetFrames:input_type -> quilibrium.node.node.pb.GetFramesRequest
 | 
				
			||||||
	3,  // 10: quilibrium.node.node.pb.NodeService.GetNodeInfo:input_type -> quilibrium.node.node.pb.GetNodeInfoRequest
 | 
						1,  // 10: quilibrium.node.node.pb.NodeService.GetFrameInfo:input_type -> quilibrium.node.node.pb.GetFrameInfoRequest
 | 
				
			||||||
	4,  // 11: quilibrium.node.node.pb.NodeService.GetNetworkInfo:input_type -> quilibrium.node.node.pb.GetNetworkInfoRequest
 | 
						2,  // 11: quilibrium.node.node.pb.NodeService.GetPeerInfo:input_type -> quilibrium.node.node.pb.GetPeerInfoRequest
 | 
				
			||||||
	15, // 12: quilibrium.node.node.pb.NodeService.GetTokenInfo:input_type -> quilibrium.node.node.pb.GetTokenInfoRequest
 | 
						3,  // 12: quilibrium.node.node.pb.NodeService.GetNodeInfo:input_type -> quilibrium.node.node.pb.GetNodeInfoRequest
 | 
				
			||||||
	12, // 13: quilibrium.node.node.pb.NodeStats.PutNodeInfo:input_type -> quilibrium.node.node.pb.PutNodeInfoRequest
 | 
						4,  // 13: quilibrium.node.node.pb.NodeService.GetNetworkInfo:input_type -> quilibrium.node.node.pb.GetNetworkInfoRequest
 | 
				
			||||||
	11, // 14: quilibrium.node.node.pb.NodeStats.PutPeerInfo:input_type -> quilibrium.node.node.pb.PutPeerInfoRequest
 | 
						15, // 14: quilibrium.node.node.pb.NodeService.GetTokenInfo:input_type -> quilibrium.node.node.pb.GetTokenInfoRequest
 | 
				
			||||||
	5,  // 15: quilibrium.node.node.pb.NodeService.GetFrames:output_type -> quilibrium.node.node.pb.FramesResponse
 | 
						12, // 15: quilibrium.node.node.pb.NodeStats.PutNodeInfo:input_type -> quilibrium.node.node.pb.PutNodeInfoRequest
 | 
				
			||||||
	6,  // 16: quilibrium.node.node.pb.NodeService.GetFrameInfo:output_type -> quilibrium.node.node.pb.FrameInfoResponse
 | 
						11, // 16: quilibrium.node.node.pb.NodeStats.PutPeerInfo:input_type -> quilibrium.node.node.pb.PutPeerInfoRequest
 | 
				
			||||||
	8,  // 17: quilibrium.node.node.pb.NodeService.GetPeerInfo:output_type -> quilibrium.node.node.pb.PeerInfoResponse
 | 
						19, // 17: quilibrium.node.node.pb.ValidationService.PerformValidation:output_type -> quilibrium.node.node.pb.ValidationMessage
 | 
				
			||||||
	10, // 18: quilibrium.node.node.pb.NodeService.GetNodeInfo:output_type -> quilibrium.node.node.pb.NodeInfoResponse
 | 
						5,  // 18: quilibrium.node.node.pb.NodeService.GetFrames:output_type -> quilibrium.node.node.pb.FramesResponse
 | 
				
			||||||
	14, // 19: quilibrium.node.node.pb.NodeService.GetNetworkInfo:output_type -> quilibrium.node.node.pb.NetworkInfoResponse
 | 
						6,  // 19: quilibrium.node.node.pb.NodeService.GetFrameInfo:output_type -> quilibrium.node.node.pb.FrameInfoResponse
 | 
				
			||||||
	16, // 20: quilibrium.node.node.pb.NodeService.GetTokenInfo:output_type -> quilibrium.node.node.pb.TokenInfoResponse
 | 
						8,  // 20: quilibrium.node.node.pb.NodeService.GetPeerInfo:output_type -> quilibrium.node.node.pb.PeerInfoResponse
 | 
				
			||||||
	13, // 21: quilibrium.node.node.pb.NodeStats.PutNodeInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 
						10, // 21: quilibrium.node.node.pb.NodeService.GetNodeInfo:output_type -> quilibrium.node.node.pb.NodeInfoResponse
 | 
				
			||||||
	13, // 22: quilibrium.node.node.pb.NodeStats.PutPeerInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 
						14, // 22: quilibrium.node.node.pb.NodeService.GetNetworkInfo:output_type -> quilibrium.node.node.pb.NetworkInfoResponse
 | 
				
			||||||
	15, // [15:23] is the sub-list for method output_type
 | 
						16, // 23: quilibrium.node.node.pb.NodeService.GetTokenInfo:output_type -> quilibrium.node.node.pb.TokenInfoResponse
 | 
				
			||||||
	7,  // [7:15] is the sub-list for method input_type
 | 
						13, // 24: quilibrium.node.node.pb.NodeStats.PutNodeInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 
				
			||||||
	7,  // [7:7] is the sub-list for extension type_name
 | 
						13, // 25: quilibrium.node.node.pb.NodeStats.PutPeerInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 
				
			||||||
	7,  // [7:7] is the sub-list for extension extendee
 | 
						17, // [17:26] is the sub-list for method output_type
 | 
				
			||||||
	0,  // [0:7] is the sub-list for field type_name
 | 
						8,  // [8:17] is the sub-list for method input_type
 | 
				
			||||||
 | 
						8,  // [8:8] is the sub-list for extension type_name
 | 
				
			||||||
 | 
						8,  // [8:8] is the sub-list for extension extendee
 | 
				
			||||||
 | 
						0,  // [0:8] is the sub-list for field type_name
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() { file_node_proto_init() }
 | 
					func init() { file_node_proto_init() }
 | 
				
			||||||
@ -1432,6 +1783,42 @@ func file_node_proto_init() {
 | 
				
			|||||||
				return nil
 | 
									return nil
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							file_node_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
 | 
								switch v := v.(*Capability); i {
 | 
				
			||||||
 | 
								case 0:
 | 
				
			||||||
 | 
									return &v.state
 | 
				
			||||||
 | 
								case 1:
 | 
				
			||||||
 | 
									return &v.sizeCache
 | 
				
			||||||
 | 
								case 2:
 | 
				
			||||||
 | 
									return &v.unknownFields
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							file_node_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
 | 
								switch v := v.(*SelfTestReport); i {
 | 
				
			||||||
 | 
								case 0:
 | 
				
			||||||
 | 
									return &v.state
 | 
				
			||||||
 | 
								case 1:
 | 
				
			||||||
 | 
									return &v.sizeCache
 | 
				
			||||||
 | 
								case 2:
 | 
				
			||||||
 | 
									return &v.unknownFields
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							file_node_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
 | 
								switch v := v.(*ValidationMessage); i {
 | 
				
			||||||
 | 
								case 0:
 | 
				
			||||||
 | 
									return &v.state
 | 
				
			||||||
 | 
								case 1:
 | 
				
			||||||
 | 
									return &v.sizeCache
 | 
				
			||||||
 | 
								case 2:
 | 
				
			||||||
 | 
									return &v.unknownFields
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	type x struct{}
 | 
						type x struct{}
 | 
				
			||||||
	out := protoimpl.TypeBuilder{
 | 
						out := protoimpl.TypeBuilder{
 | 
				
			||||||
@ -1439,9 +1826,9 @@ func file_node_proto_init() {
 | 
				
			|||||||
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 | 
								GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 | 
				
			||||||
			RawDescriptor: file_node_proto_rawDesc,
 | 
								RawDescriptor: file_node_proto_rawDesc,
 | 
				
			||||||
			NumEnums:      0,
 | 
								NumEnums:      0,
 | 
				
			||||||
			NumMessages:   17,
 | 
								NumMessages:   20,
 | 
				
			||||||
			NumExtensions: 0,
 | 
								NumExtensions: 0,
 | 
				
			||||||
			NumServices:   2,
 | 
								NumServices:   3,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		GoTypes:           file_node_proto_goTypes,
 | 
							GoTypes:           file_node_proto_goTypes,
 | 
				
			||||||
		DependencyIndexes: file_node_proto_depIdxs,
 | 
							DependencyIndexes: file_node_proto_depIdxs,
 | 
				
			||||||
 | 
				
			|||||||
@ -31,6 +31,40 @@ var _ = runtime.String
 | 
				
			|||||||
var _ = utilities.NewDoubleArray
 | 
					var _ = utilities.NewDoubleArray
 | 
				
			||||||
var _ = metadata.Join
 | 
					var _ = metadata.Join
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func request_ValidationService_PerformValidation_0(ctx context.Context, marshaler runtime.Marshaler, client ValidationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 | 
				
			||||||
 | 
						var protoReq ValidationMessage
 | 
				
			||||||
 | 
						var metadata runtime.ServerMetadata
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						newReader, berr := utilities.IOReaderFactory(req.Body)
 | 
				
			||||||
 | 
						if berr != nil {
 | 
				
			||||||
 | 
							return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
 | 
				
			||||||
 | 
							return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						msg, err := client.PerformValidation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
 | 
				
			||||||
 | 
						return msg, metadata, err
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func local_request_ValidationService_PerformValidation_0(ctx context.Context, marshaler runtime.Marshaler, server ValidationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 | 
				
			||||||
 | 
						var protoReq ValidationMessage
 | 
				
			||||||
 | 
						var metadata runtime.ServerMetadata
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						newReader, berr := utilities.IOReaderFactory(req.Body)
 | 
				
			||||||
 | 
						if berr != nil {
 | 
				
			||||||
 | 
							return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
 | 
				
			||||||
 | 
							return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						msg, err := server.PerformValidation(ctx, &protoReq)
 | 
				
			||||||
 | 
						return msg, metadata, err
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func request_NodeService_GetFrames_0(ctx context.Context, marshaler runtime.Marshaler, client NodeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 | 
					func request_NodeService_GetFrames_0(ctx context.Context, marshaler runtime.Marshaler, client NodeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 | 
				
			||||||
	var protoReq GetFramesRequest
 | 
						var protoReq GetFramesRequest
 | 
				
			||||||
	var metadata runtime.ServerMetadata
 | 
						var metadata runtime.ServerMetadata
 | 
				
			||||||
@ -303,6 +337,40 @@ func local_request_NodeStats_PutPeerInfo_0(ctx context.Context, marshaler runtim
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RegisterValidationServiceHandlerServer registers the http handlers for service ValidationService to "mux".
 | 
				
			||||||
 | 
					// UnaryRPC     :call ValidationServiceServer directly.
 | 
				
			||||||
 | 
					// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | 
				
			||||||
 | 
					// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterValidationServiceHandlerFromEndpoint instead.
 | 
				
			||||||
 | 
					func RegisterValidationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ValidationServiceServer) error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mux.Handle("POST", pattern_ValidationService_PerformValidation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 | 
				
			||||||
 | 
							ctx, cancel := context.WithCancel(req.Context())
 | 
				
			||||||
 | 
							defer cancel()
 | 
				
			||||||
 | 
							var stream runtime.ServerTransportStream
 | 
				
			||||||
 | 
							ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
 | 
				
			||||||
 | 
							inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
 | 
				
			||||||
 | 
							var err error
 | 
				
			||||||
 | 
							var annotatedContext context.Context
 | 
				
			||||||
 | 
							annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/quilibrium.node.node.pb.ValidationService/PerformValidation", runtime.WithHTTPPathPattern("/quilibrium.node.node.pb.ValidationService/PerformValidation"))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							resp, md, err := local_request_ValidationService_PerformValidation_0(annotatedContext, inboundMarshaler, server, req, pathParams)
 | 
				
			||||||
 | 
							md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
 | 
				
			||||||
 | 
							annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							forward_ValidationService_PerformValidation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RegisterNodeServiceHandlerServer registers the http handlers for service NodeService to "mux".
 | 
					// RegisterNodeServiceHandlerServer registers the http handlers for service NodeService to "mux".
 | 
				
			||||||
// UnaryRPC     :call NodeServiceServer directly.
 | 
					// UnaryRPC     :call NodeServiceServer directly.
 | 
				
			||||||
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | 
					// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | 
				
			||||||
@ -521,6 +589,77 @@ func RegisterNodeStatsHandlerServer(ctx context.Context, mux *runtime.ServeMux,
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RegisterValidationServiceHandlerFromEndpoint is same as RegisterValidationServiceHandler but
 | 
				
			||||||
 | 
					// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
 | 
				
			||||||
 | 
					func RegisterValidationServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
 | 
				
			||||||
 | 
						conn, err := grpc.DialContext(ctx, endpoint, opts...)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer func() {
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if cerr := conn.Close(); cerr != nil {
 | 
				
			||||||
 | 
									grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							go func() {
 | 
				
			||||||
 | 
								<-ctx.Done()
 | 
				
			||||||
 | 
								if cerr := conn.Close(); cerr != nil {
 | 
				
			||||||
 | 
									grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}()
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return RegisterValidationServiceHandler(ctx, mux, conn)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RegisterValidationServiceHandler registers the http handlers for service ValidationService to "mux".
 | 
				
			||||||
 | 
					// The handlers forward requests to the grpc endpoint over "conn".
 | 
				
			||||||
 | 
					func RegisterValidationServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
 | 
				
			||||||
 | 
						return RegisterValidationServiceHandlerClient(ctx, mux, NewValidationServiceClient(conn))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RegisterValidationServiceHandlerClient registers the http handlers for service ValidationService
 | 
				
			||||||
 | 
					// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ValidationServiceClient".
 | 
				
			||||||
 | 
					// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ValidationServiceClient"
 | 
				
			||||||
 | 
					// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
 | 
				
			||||||
 | 
					// "ValidationServiceClient" to call the correct interceptors.
 | 
				
			||||||
 | 
					func RegisterValidationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ValidationServiceClient) error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mux.Handle("POST", pattern_ValidationService_PerformValidation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 | 
				
			||||||
 | 
							ctx, cancel := context.WithCancel(req.Context())
 | 
				
			||||||
 | 
							defer cancel()
 | 
				
			||||||
 | 
							inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
 | 
				
			||||||
 | 
							var err error
 | 
				
			||||||
 | 
							var annotatedContext context.Context
 | 
				
			||||||
 | 
							annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/quilibrium.node.node.pb.ValidationService/PerformValidation", runtime.WithHTTPPathPattern("/quilibrium.node.node.pb.ValidationService/PerformValidation"))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							resp, md, err := request_ValidationService_PerformValidation_0(annotatedContext, inboundMarshaler, client, req, pathParams)
 | 
				
			||||||
 | 
							annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							forward_ValidationService_PerformValidation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						pattern_ValidationService_PerformValidation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.node.pb.ValidationService", "PerformValidation"}, ""))
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						forward_ValidationService_PerformValidation_0 = runtime.ForwardResponseMessage
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RegisterNodeServiceHandlerFromEndpoint is same as RegisterNodeServiceHandler but
 | 
					// RegisterNodeServiceHandlerFromEndpoint is same as RegisterNodeServiceHandler but
 | 
				
			||||||
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
 | 
					// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
 | 
				
			||||||
func RegisterNodeServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
 | 
					func RegisterNodeServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
 | 
				
			||||||
 | 
				
			|||||||
@ -96,6 +96,72 @@ message TokenInfoResponse {
 | 
				
			|||||||
  bytes unconfirmed_owned_tokens = 4;
 | 
					  bytes unconfirmed_owned_tokens = 4;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message Capability {
 | 
				
			||||||
 | 
					  // A general protocol identifier as a uint32 – this is expected to rarely
 | 
				
			||||||
 | 
					  // iterate, and should be uniquely identifying both protocol and version.
 | 
				
			||||||
 | 
					  // Pragmatically speaking, this implies that the least significant byte
 | 
				
			||||||
 | 
					  // specifies version (which should iterate most minimally), and the three most
 | 
				
			||||||
 | 
					  // significant bytes should specify protocol. Recipients SHOULD ignore
 | 
				
			||||||
 | 
					  // messages with incompatible protocol identifiers, but also SHOULD warn on
 | 
				
			||||||
 | 
					  // identifiers with versions higher than the supported protocol. A large
 | 
				
			||||||
 | 
					  // number of unsupported protocol messages may indicate spam/some other
 | 
				
			||||||
 | 
					  // attack, whereas a large number of unsupported protocol versions may
 | 
				
			||||||
 | 
					  // indicate an out of date client, respective to which side is the maximum of
 | 
				
			||||||
 | 
					  // the version number.
 | 
				
			||||||
 | 
					  uint32 protocol_identifier = 1;
 | 
				
			||||||
 | 
					  // An optional bundle of information specific to the capability – used for
 | 
				
			||||||
 | 
					  // extensibility in negotiating variations of a protocol – e.g. Triple-Ratchet
 | 
				
			||||||
 | 
					  // but only for certain curve types.
 | 
				
			||||||
 | 
					  bytes additional_metadata = 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message SelfTestReport {
 | 
				
			||||||
 | 
					  // The difficulty the self test was conducted under
 | 
				
			||||||
 | 
					  uint32 difficulty = 1;
 | 
				
			||||||
 | 
					  // The resulting local time of computing the VDF test under the difficulty
 | 
				
			||||||
 | 
					  int64 difficulty_metric = 2;
 | 
				
			||||||
 | 
					  // The resulting local time of computing a KZG commitment for a 16 degree
 | 
				
			||||||
 | 
					  // polynomial
 | 
				
			||||||
 | 
					  int64 commit_16_metric = 3;
 | 
				
			||||||
 | 
					  // The resulting local time of computing a KZG commitment for a 128 degree
 | 
				
			||||||
 | 
					  // polynomial
 | 
				
			||||||
 | 
					  int64 commit_128_metric = 4;
 | 
				
			||||||
 | 
					  // The resulting local time of computing a KZG commitment for a 1024 degree
 | 
				
			||||||
 | 
					  // polynomial
 | 
				
			||||||
 | 
					  int64 commit_1024_metric = 5;
 | 
				
			||||||
 | 
					  // The resulting local time of computing a KZG commitment for a 65536 degree
 | 
				
			||||||
 | 
					  // polynomial
 | 
				
			||||||
 | 
					  int64 commit_65536_metric = 6;
 | 
				
			||||||
 | 
					  // The resulting local time of computing a KZG proof for a 16 degree
 | 
				
			||||||
 | 
					  // polynomial
 | 
				
			||||||
 | 
					  int64 proof_16_metric = 7;
 | 
				
			||||||
 | 
					  // The resulting local time of computing a KZG proof for a 128 degree
 | 
				
			||||||
 | 
					  // polynomial
 | 
				
			||||||
 | 
					  int64 proof_128_metric = 8;
 | 
				
			||||||
 | 
					  // The resulting local time of computing a KZG proof for a 1024 degree
 | 
				
			||||||
 | 
					  // polynomial
 | 
				
			||||||
 | 
					  int64 proof_1024_metric = 9;
 | 
				
			||||||
 | 
					  // The resulting local time of computing a KZG proof for a 65536 degree
 | 
				
			||||||
 | 
					  // polynomial
 | 
				
			||||||
 | 
					  int64 proof_65536_metric = 10;
 | 
				
			||||||
 | 
					  // The number of reported accessible cores
 | 
				
			||||||
 | 
					  uint32 cores = 11;
 | 
				
			||||||
 | 
					  // The total available memory
 | 
				
			||||||
 | 
					  bytes memory = 12;
 | 
				
			||||||
 | 
					  // The total available storage
 | 
				
			||||||
 | 
					  bytes storage = 13;
 | 
				
			||||||
 | 
					  // The list of supported capabilities
 | 
				
			||||||
 | 
					  repeated Capability capabilities = 14;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message ValidationMessage {
 | 
				
			||||||
 | 
					  bytes validation = 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					service ValidationService {
 | 
				
			||||||
 | 
					  rpc PerformValidation(ValidationMessage) returns (ValidationMessage);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
service NodeService {
 | 
					service NodeService {
 | 
				
			||||||
  rpc GetFrames(GetFramesRequest) returns (FramesResponse);
 | 
					  rpc GetFrames(GetFramesRequest) returns (FramesResponse);
 | 
				
			||||||
  rpc GetFrameInfo(GetFrameInfoRequest) returns (FrameInfoResponse);
 | 
					  rpc GetFrameInfo(GetFrameInfoRequest) returns (FrameInfoResponse);
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,96 @@ import (
 | 
				
			|||||||
// Requires gRPC-Go v1.32.0 or later.
 | 
					// Requires gRPC-Go v1.32.0 or later.
 | 
				
			||||||
const _ = grpc.SupportPackageIsVersion7
 | 
					const _ = grpc.SupportPackageIsVersion7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						ValidationService_PerformValidation_FullMethodName = "/quilibrium.node.node.pb.ValidationService/PerformValidation"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidationServiceClient is the client API for ValidationService service.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 | 
				
			||||||
 | 
					type ValidationServiceClient interface {
 | 
				
			||||||
 | 
						PerformValidation(ctx context.Context, in *ValidationMessage, opts ...grpc.CallOption) (*ValidationMessage, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type validationServiceClient struct {
 | 
				
			||||||
 | 
						cc grpc.ClientConnInterface
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewValidationServiceClient(cc grpc.ClientConnInterface) ValidationServiceClient {
 | 
				
			||||||
 | 
						return &validationServiceClient{cc}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *validationServiceClient) PerformValidation(ctx context.Context, in *ValidationMessage, opts ...grpc.CallOption) (*ValidationMessage, error) {
 | 
				
			||||||
 | 
						out := new(ValidationMessage)
 | 
				
			||||||
 | 
						err := c.cc.Invoke(ctx, ValidationService_PerformValidation_FullMethodName, in, out, opts...)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return out, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidationServiceServer is the server API for ValidationService service.
 | 
				
			||||||
 | 
					// All implementations must embed UnimplementedValidationServiceServer
 | 
				
			||||||
 | 
					// for forward compatibility
 | 
				
			||||||
 | 
					type ValidationServiceServer interface {
 | 
				
			||||||
 | 
						PerformValidation(context.Context, *ValidationMessage) (*ValidationMessage, error)
 | 
				
			||||||
 | 
						mustEmbedUnimplementedValidationServiceServer()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UnimplementedValidationServiceServer must be embedded to have forward compatible implementations.
 | 
				
			||||||
 | 
					type UnimplementedValidationServiceServer struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (UnimplementedValidationServiceServer) PerformValidation(context.Context, *ValidationMessage) (*ValidationMessage, error) {
 | 
				
			||||||
 | 
						return nil, status.Errorf(codes.Unimplemented, "method PerformValidation not implemented")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (UnimplementedValidationServiceServer) mustEmbedUnimplementedValidationServiceServer() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UnsafeValidationServiceServer may be embedded to opt out of forward compatibility for this service.
 | 
				
			||||||
 | 
					// Use of this interface is not recommended, as added methods to ValidationServiceServer will
 | 
				
			||||||
 | 
					// result in compilation errors.
 | 
				
			||||||
 | 
					type UnsafeValidationServiceServer interface {
 | 
				
			||||||
 | 
						mustEmbedUnimplementedValidationServiceServer()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func RegisterValidationServiceServer(s grpc.ServiceRegistrar, srv ValidationServiceServer) {
 | 
				
			||||||
 | 
						s.RegisterService(&ValidationService_ServiceDesc, srv)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func _ValidationService_PerformValidation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
				
			||||||
 | 
						in := new(ValidationMessage)
 | 
				
			||||||
 | 
						if err := dec(in); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if interceptor == nil {
 | 
				
			||||||
 | 
							return srv.(ValidationServiceServer).PerformValidation(ctx, in)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						info := &grpc.UnaryServerInfo{
 | 
				
			||||||
 | 
							Server:     srv,
 | 
				
			||||||
 | 
							FullMethod: ValidationService_PerformValidation_FullMethodName,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
				
			||||||
 | 
							return srv.(ValidationServiceServer).PerformValidation(ctx, req.(*ValidationMessage))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return interceptor(ctx, in, info, handler)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidationService_ServiceDesc is the grpc.ServiceDesc for ValidationService service.
 | 
				
			||||||
 | 
					// It's only intended for direct use with grpc.RegisterService,
 | 
				
			||||||
 | 
					// and not to be introspected or modified (even as a copy)
 | 
				
			||||||
 | 
					var ValidationService_ServiceDesc = grpc.ServiceDesc{
 | 
				
			||||||
 | 
						ServiceName: "quilibrium.node.node.pb.ValidationService",
 | 
				
			||||||
 | 
						HandlerType: (*ValidationServiceServer)(nil),
 | 
				
			||||||
 | 
						Methods: []grpc.MethodDesc{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								MethodName: "PerformValidation",
 | 
				
			||||||
 | 
								Handler:    _ValidationService_PerformValidation_Handler,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						Streams:  []grpc.StreamDesc{},
 | 
				
			||||||
 | 
						Metadata: "node.proto",
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	NodeService_GetFrames_FullMethodName      = "/quilibrium.node.node.pb.NodeService/GetFrames"
 | 
						NodeService_GetFrames_FullMethodName      = "/quilibrium.node.node.pb.NodeService/GetFrames"
 | 
				
			||||||
	NodeService_GetFrameInfo_FullMethodName   = "/quilibrium.node.node.pb.NodeService/GetFrameInfo"
 | 
						NodeService_GetFrameInfo_FullMethodName   = "/quilibrium.node.node.pb.NodeService/GetFrameInfo"
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,7 @@ const (
 | 
				
			|||||||
	ClockPrefix                          = NamespacePrefix + "clock.pb."
 | 
						ClockPrefix                          = NamespacePrefix + "clock.pb."
 | 
				
			||||||
	KeysPrefix                           = NamespacePrefix + "keys.pb."
 | 
						KeysPrefix                           = NamespacePrefix + "keys.pb."
 | 
				
			||||||
	CeremonyPrefix                       = NamespacePrefix + "ceremony.pb."
 | 
						CeremonyPrefix                       = NamespacePrefix + "ceremony.pb."
 | 
				
			||||||
 | 
						NodePrefix                           = NamespacePrefix + "node.pb"
 | 
				
			||||||
	CeremonyTranscriptType               = CeremonyPrefix + "CeremonyTranscript"
 | 
						CeremonyTranscriptType               = CeremonyPrefix + "CeremonyTranscript"
 | 
				
			||||||
	CeremonyLobbyStateType               = CeremonyPrefix + "CeremonyLobbyState"
 | 
						CeremonyLobbyStateType               = CeremonyPrefix + "CeremonyLobbyState"
 | 
				
			||||||
	CeremonySeenProverAttestationType    = CeremonyPrefix + "CeremonySeenProverAttestation"
 | 
						CeremonySeenProverAttestationType    = CeremonyPrefix + "CeremonySeenProverAttestation"
 | 
				
			||||||
@ -54,4 +55,5 @@ const (
 | 
				
			|||||||
	BLS48581G1PrivateKeyType             = KeysPrefix + "BLS48581G1PrivateKey"
 | 
						BLS48581G1PrivateKeyType             = KeysPrefix + "BLS48581G1PrivateKey"
 | 
				
			||||||
	BLS48581G2PublicKeyType              = KeysPrefix + "BLS48581G2PublicKey"
 | 
						BLS48581G2PublicKeyType              = KeysPrefix + "BLS48581G2PublicKey"
 | 
				
			||||||
	BLS48581G2PrivateKeyType             = KeysPrefix + "BLS48581G2PrivateKey"
 | 
						BLS48581G2PrivateKeyType             = KeysPrefix + "BLS48581G2PrivateKey"
 | 
				
			||||||
 | 
						SelfTestReportType                   = NodePrefix + "SelfTestReport"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,6 @@ type DataProofStore interface {
 | 
				
			|||||||
		filter []byte,
 | 
							filter []byte,
 | 
				
			||||||
		commitment []byte,
 | 
							commitment []byte,
 | 
				
			||||||
		frameNumber uint64,
 | 
							frameNumber uint64,
 | 
				
			||||||
		inclusionReassembler func(typeUrl string, data [][]byte) ([]byte, error),
 | 
					 | 
				
			||||||
	) (
 | 
						) (
 | 
				
			||||||
		*protobufs.InclusionAggregateProof,
 | 
							*protobufs.InclusionAggregateProof,
 | 
				
			||||||
		error,
 | 
							error,
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										17
									
								
								node/utils/selftest_intrinsics_unix.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								node/utils/selftest_intrinsics_unix.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					//go:build !windows
 | 
				
			||||||
 | 
					// +build !windows
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package utils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "golang.org/x/sys/unix"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetDiskSpace(dir string) uint64 {
 | 
				
			||||||
 | 
						var stat unix.Statfs_t
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err := unix.Statfs(dir, &stat)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return stat.Bavail * uint64(stat.Bsize)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										20
									
								
								node/utils/selftest_intrinsics_windows.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								node/utils/selftest_intrinsics_windows.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					//go:build windows
 | 
				
			||||||
 | 
					// +build windows
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package utils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "golang.org/x/sys/windows"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetDiskSpace(dir string) uint64 {
 | 
				
			||||||
 | 
						var freeBytesAvailable uint64
 | 
				
			||||||
 | 
						var totalNumberOfBytes uint64
 | 
				
			||||||
 | 
						var totalNumberOfFreeBytes uint64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err := windows.GetDiskFreeSpaceEx(windows.StringToUTF16Ptr(dir),
 | 
				
			||||||
 | 
							&freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return totalNumberOfBytes
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user