mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 15:27:27 +00:00 
			
		
		
		
	v1.4.11 (#139)
This commit is contained in:
		
							parent
							
								
									cc374d4448
								
							
						
					
					
						commit
						1c93ea9f73
					
				@ -18,9 +18,8 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	// BlossomSubID_v11 is the protocol ID for version 1.1.0 of the BlossomSub protocol.
 | 
						// BlossomSubID_v12 is the protocol ID for version 1.2.0 of the BlossomSub protocol.
 | 
				
			||||||
	// It retains versioning matching to GossipSub 1.1.0 to indicate point of fork
 | 
						BlossomSubID_v12 = protocol.ID("/blossomsub/1.2.0")
 | 
				
			||||||
	BlossomSubID_v11 = protocol.ID("/blossomsub/1.1.0")
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Defines the default BlossomSub parameters.
 | 
					// Defines the default BlossomSub parameters.
 | 
				
			||||||
 | 
				
			|||||||
@ -86,7 +86,7 @@ func TestBlossomSubConnTagMessageDeliveries(t *testing.T) {
 | 
				
			|||||||
	sybilHosts := getNetHosts(t, ctx, nSquatter)
 | 
						sybilHosts := getNetHosts(t, ctx, nSquatter)
 | 
				
			||||||
	for _, h := range sybilHosts {
 | 
						for _, h := range sybilHosts {
 | 
				
			||||||
		squatter := &sybilSquatter{h: h}
 | 
							squatter := &sybilSquatter{h: h}
 | 
				
			||||||
		h.SetStreamHandler(BlossomSubID_v11, squatter.handleStream)
 | 
							h.SetStreamHandler(BlossomSubID_v12, squatter.handleStream)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// connect the honest hosts
 | 
						// connect the honest hosts
 | 
				
			||||||
 | 
				
			|||||||
@ -14,22 +14,22 @@ type BlossomSubFeatureTest = func(BlossomSubFeature, protocol.ID) bool
 | 
				
			|||||||
type BlossomSubFeature int
 | 
					type BlossomSubFeature int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	// Protocol supports basic BlossomSub Mesh -- BlossomSub-v1.1 compatible
 | 
						// Protocol supports basic BlossomSub Mesh -- BlossomSub-v1.2 compatible
 | 
				
			||||||
	BlossomSubFeatureMesh = iota
 | 
						BlossomSubFeatureMesh = iota
 | 
				
			||||||
	// Protocol supports Peer eXchange on prune -- BlossomSub-v1.1 compatible
 | 
						// Protocol supports Peer eXchange on prune -- BlossomSub-v1.2 compatible
 | 
				
			||||||
	BlossomSubFeaturePX
 | 
						BlossomSubFeaturePX
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// BlossomSubDefaultProtocols is the default BlossomSub router protocol list
 | 
					// BlossomSubDefaultProtocols is the default BlossomSub router protocol list
 | 
				
			||||||
var BlossomSubDefaultProtocols = []protocol.ID{BlossomSubID_v11, FloodSubID}
 | 
					var BlossomSubDefaultProtocols = []protocol.ID{BlossomSubID_v12, FloodSubID}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// BlossomSubDefaultFeatures is the feature test function for the default BlossomSub protocols
 | 
					// BlossomSubDefaultFeatures is the feature test function for the default BlossomSub protocols
 | 
				
			||||||
func BlossomSubDefaultFeatures(feat BlossomSubFeature, proto protocol.ID) bool {
 | 
					func BlossomSubDefaultFeatures(feat BlossomSubFeature, proto protocol.ID) bool {
 | 
				
			||||||
	switch feat {
 | 
						switch feat {
 | 
				
			||||||
	case BlossomSubFeatureMesh:
 | 
						case BlossomSubFeatureMesh:
 | 
				
			||||||
		return proto == BlossomSubID_v11
 | 
							return proto == BlossomSubID_v12
 | 
				
			||||||
	case BlossomSubFeaturePX:
 | 
						case BlossomSubFeaturePX:
 | 
				
			||||||
		return proto == BlossomSubID_v11
 | 
							return proto == BlossomSubID_v12
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		return false
 | 
							return false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -15,15 +15,15 @@ func TestDefaultBlossomSubFeatures(t *testing.T) {
 | 
				
			|||||||
	if BlossomSubDefaultFeatures(BlossomSubFeatureMesh, FloodSubID) {
 | 
						if BlossomSubDefaultFeatures(BlossomSubFeatureMesh, FloodSubID) {
 | 
				
			||||||
		t.Fatal("floodsub should not support Mesh")
 | 
							t.Fatal("floodsub should not support Mesh")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !BlossomSubDefaultFeatures(BlossomSubFeatureMesh, BlossomSubID_v11) {
 | 
						if !BlossomSubDefaultFeatures(BlossomSubFeatureMesh, BlossomSubID_v12) {
 | 
				
			||||||
		t.Fatal("BlossomSub-v1.1 should support Mesh")
 | 
							t.Fatal("BlossomSub-v1.2 should support Mesh")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if BlossomSubDefaultFeatures(BlossomSubFeaturePX, FloodSubID) {
 | 
						if BlossomSubDefaultFeatures(BlossomSubFeaturePX, FloodSubID) {
 | 
				
			||||||
		t.Fatal("floodsub should not support PX")
 | 
							t.Fatal("floodsub should not support PX")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !BlossomSubDefaultFeatures(BlossomSubFeatureMesh, BlossomSubID_v11) {
 | 
						if !BlossomSubDefaultFeatures(BlossomSubFeatureMesh, BlossomSubID_v12) {
 | 
				
			||||||
		t.Fatal("BlossomSub-v1.1 should support PX")
 | 
							t.Fatal("BlossomSub-v1.2 should support PX")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -19,9 +19,9 @@ func TestBlossomSubMatchingFn(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	h := getNetHosts(t, ctx, 4)
 | 
						h := getNetHosts(t, ctx, 4)
 | 
				
			||||||
	psubs := []*PubSub{
 | 
						psubs := []*PubSub{
 | 
				
			||||||
		getBlossomSub(ctx, h[0], WithProtocolMatchFn(protocolNameMatch), WithBlossomSubProtocols([]protocol.ID{customsubA100, BlossomSubID_v11}, BlossomSubDefaultFeatures)),
 | 
							getBlossomSub(ctx, h[0], WithProtocolMatchFn(protocolNameMatch), WithBlossomSubProtocols([]protocol.ID{customsubA100, BlossomSubID_v12}, BlossomSubDefaultFeatures)),
 | 
				
			||||||
		getBlossomSub(ctx, h[1], WithProtocolMatchFn(protocolNameMatch), WithBlossomSubProtocols([]protocol.ID{customsubA101Beta}, BlossomSubDefaultFeatures)),
 | 
							getBlossomSub(ctx, h[1], WithProtocolMatchFn(protocolNameMatch), WithBlossomSubProtocols([]protocol.ID{customsubA101Beta}, BlossomSubDefaultFeatures)),
 | 
				
			||||||
		getBlossomSub(ctx, h[2], WithProtocolMatchFn(protocolNameMatch), WithBlossomSubProtocols([]protocol.ID{BlossomSubID_v11}, BlossomSubDefaultFeatures)),
 | 
							getBlossomSub(ctx, h[2], WithProtocolMatchFn(protocolNameMatch), WithBlossomSubProtocols([]protocol.ID{BlossomSubID_v12}, BlossomSubDefaultFeatures)),
 | 
				
			||||||
		getBlossomSub(ctx, h[3], WithProtocolMatchFn(protocolNameMatch), WithBlossomSubProtocols([]protocol.ID{customsubB100}, BlossomSubDefaultFeatures)),
 | 
							getBlossomSub(ctx, h[3], WithProtocolMatchFn(protocolNameMatch), WithBlossomSubProtocols([]protocol.ID{customsubB100}, BlossomSubDefaultFeatures)),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1039,7 +1039,7 @@ func TestBlossomSubTreeTopology(t *testing.T) {
 | 
				
			|||||||
	checkMessageRouting(t, []byte{0xf1, 0x22, 0xb0, 0x22}, []*PubSub{psubs[9], psubs[3]}, chs)
 | 
						checkMessageRouting(t, []byte{0xf1, 0x22, 0xb0, 0x22}, []*PubSub{psubs[9], psubs[3]}, chs)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// this tests overlay bootstrapping through px in BlossomSub v1.1
 | 
					// this tests overlay bootstrapping through px in BlossomSub v1.2
 | 
				
			||||||
// we start with a star topology and rely on px through prune to build the mesh
 | 
					// we start with a star topology and rely on px through prune to build the mesh
 | 
				
			||||||
func TestBlossomSubStarTopology(t *testing.T) {
 | 
					func TestBlossomSubStarTopology(t *testing.T) {
 | 
				
			||||||
	originalBlossomSubD := BlossomSubD
 | 
						originalBlossomSubD := BlossomSubD
 | 
				
			||||||
@ -1122,7 +1122,7 @@ func TestBlossomSubStarTopology(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// this tests overlay bootstrapping through px in BlossomSub v1.1, with addresses
 | 
					// this tests overlay bootstrapping through px in BlossomSub v1.2, with addresses
 | 
				
			||||||
// exchanged in signed peer records.
 | 
					// exchanged in signed peer records.
 | 
				
			||||||
// we start with a star topology and rely on px through prune to build the mesh
 | 
					// we start with a star topology and rely on px through prune to build the mesh
 | 
				
			||||||
func TestBlossomSubStarTopologyWithSignedPeerRecords(t *testing.T) {
 | 
					func TestBlossomSubStarTopologyWithSignedPeerRecords(t *testing.T) {
 | 
				
			||||||
@ -1853,7 +1853,7 @@ func TestBlossomSubOpportunisticGrafting(t *testing.T) {
 | 
				
			|||||||
	// sybil squatters for the remaining 40 hosts
 | 
						// sybil squatters for the remaining 40 hosts
 | 
				
			||||||
	for _, h := range hosts[10:] {
 | 
						for _, h := range hosts[10:] {
 | 
				
			||||||
		squatter := &sybilSquatter{h: h}
 | 
							squatter := &sybilSquatter{h: h}
 | 
				
			||||||
		h.SetStreamHandler(BlossomSubID_v11, squatter.handleStream)
 | 
							h.SetStreamHandler(BlossomSubID_v12, squatter.handleStream)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// connect all squatters to every real host
 | 
						// connect all squatters to every real host
 | 
				
			||||||
@ -2037,7 +2037,7 @@ type sybilSquatter struct {
 | 
				
			|||||||
func (sq *sybilSquatter) handleStream(s network.Stream) {
 | 
					func (sq *sybilSquatter) handleStream(s network.Stream) {
 | 
				
			||||||
	defer s.Close()
 | 
						defer s.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	os, err := sq.h.NewStream(context.Background(), s.Conn().RemotePeer(), BlossomSubID_v11)
 | 
						os, err := sq.h.NewStream(context.Background(), s.Conn().RemotePeer(), BlossomSubID_v12)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -2203,7 +2203,7 @@ func TestBlossomSubRPCFragmentation(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// make a fake peer that requests everything through IWANT gossip
 | 
						// make a fake peer that requests everything through IWANT gossip
 | 
				
			||||||
	iwe := iwantEverything{h: hosts[1]}
 | 
						iwe := iwantEverything{h: hosts[1]}
 | 
				
			||||||
	iwe.h.SetStreamHandler(BlossomSubID_v11, iwe.handleStream)
 | 
						iwe.h.SetStreamHandler(BlossomSubID_v12, iwe.handleStream)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	connect(t, hosts[0], hosts[1])
 | 
						connect(t, hosts[0], hosts[1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2265,7 +2265,7 @@ type iwantEverything struct {
 | 
				
			|||||||
func (iwe *iwantEverything) handleStream(s network.Stream) {
 | 
					func (iwe *iwantEverything) handleStream(s network.Stream) {
 | 
				
			||||||
	defer s.Close()
 | 
						defer s.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	os, err := iwe.h.NewStream(context.Background(), s.Conn().RemotePeer(), BlossomSubID_v11)
 | 
						os, err := iwe.h.NewStream(context.Background(), s.Conn().RemotePeer(), BlossomSubID_v12)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -51,8 +51,10 @@ var storeSet = wire.NewSet(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
var pubSubSet = wire.NewSet(
 | 
					var pubSubSet = wire.NewSet(
 | 
				
			||||||
	wire.FieldsOf(new(*config.Config), "P2P"),
 | 
						wire.FieldsOf(new(*config.Config), "P2P"),
 | 
				
			||||||
 | 
						p2p.NewInMemoryPeerInfoManager,
 | 
				
			||||||
	p2p.NewBlossomSub,
 | 
						p2p.NewBlossomSub,
 | 
				
			||||||
	wire.Bind(new(p2p.PubSub), new(*p2p.BlossomSub)),
 | 
						wire.Bind(new(p2p.PubSub), new(*p2p.BlossomSub)),
 | 
				
			||||||
 | 
						wire.Bind(new(p2p.PeerInfoManager), new(*p2p.InMemoryPeerInfoManager)),
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var engineSet = wire.NewSet(
 | 
					var engineSet = wire.NewSet(
 | 
				
			||||||
 | 
				
			|||||||
@ -36,9 +36,10 @@ func NewNode(configConfig *config.Config, selfTestReport *protobufs.SelfTestRepo
 | 
				
			|||||||
	wesolowskiFrameProver := crypto.NewWesolowskiFrameProver(zapLogger)
 | 
						wesolowskiFrameProver := crypto.NewWesolowskiFrameProver(zapLogger)
 | 
				
			||||||
	kzgInclusionProver := crypto.NewKZGInclusionProver(zapLogger)
 | 
						kzgInclusionProver := crypto.NewKZGInclusionProver(zapLogger)
 | 
				
			||||||
	masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
 | 
						masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
 | 
				
			||||||
 | 
						inMemoryPeerInfoManager := p2p.NewInMemoryPeerInfoManager(zapLogger)
 | 
				
			||||||
	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, inMemoryPeerInfoManager, pebbleKeyStore)
 | 
				
			||||||
	masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, selfTestReport)
 | 
						masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, inMemoryPeerInfoManager, 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
 | 
				
			||||||
@ -81,7 +82,7 @@ var keyManagerSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "Key"), keys.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
var storeSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "DB"), store.NewPebbleDB, wire.Bind(new(store.KVDB), new(*store.PebbleDB)), store.NewPebbleClockStore, store.NewPebbleKeyStore, store.NewPebbleDataProofStore, wire.Bind(new(store.ClockStore), new(*store.PebbleClockStore)), wire.Bind(new(store.KeyStore), new(*store.PebbleKeyStore)), wire.Bind(new(store.DataProofStore), new(*store.PebbleDataProofStore)))
 | 
					var storeSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "DB"), store.NewPebbleDB, wire.Bind(new(store.KVDB), new(*store.PebbleDB)), store.NewPebbleClockStore, store.NewPebbleKeyStore, store.NewPebbleDataProofStore, wire.Bind(new(store.ClockStore), new(*store.PebbleClockStore)), wire.Bind(new(store.KeyStore), new(*store.PebbleKeyStore)), wire.Bind(new(store.DataProofStore), new(*store.PebbleDataProofStore)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var pubSubSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "P2P"), p2p.NewBlossomSub, wire.Bind(new(p2p.PubSub), new(*p2p.BlossomSub)))
 | 
					var pubSubSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "P2P"), p2p.NewInMemoryPeerInfoManager, p2p.NewBlossomSub, wire.Bind(new(p2p.PubSub), new(*p2p.BlossomSub)), wire.Bind(new(p2p.PeerInfoManager), new(*p2p.InMemoryPeerInfoManager)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var engineSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "Engine"), crypto.NewWesolowskiFrameProver, wire.Bind(new(crypto.FrameProver), new(*crypto.WesolowskiFrameProver)), crypto.NewKZGInclusionProver, wire.Bind(new(crypto.InclusionProver), new(*crypto.KZGInclusionProver)), time.NewMasterTimeReel, ceremony.NewCeremonyExecutionEngine)
 | 
					var engineSet = wire.NewSet(wire.FieldsOf(new(*config.Config), "Engine"), crypto.NewWesolowskiFrameProver, wire.Bind(new(crypto.FrameProver), new(*crypto.WesolowskiFrameProver)), crypto.NewKZGInclusionProver, wire.Bind(new(crypto.InclusionProver), new(*crypto.KZGInclusionProver)), time.NewMasterTimeReel, ceremony.NewCeremonyExecutionEngine)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,15 +6,15 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetMinimumVersionCutoff() time.Time {
 | 
					func GetMinimumVersionCutoff() time.Time {
 | 
				
			||||||
	return time.Date(2024, time.March, 15, 4, 20, 0, 0, time.UTC)
 | 
						return time.Date(2024, time.March, 21, 5, 00, 0, 0, time.UTC)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetMinimumVersion() []byte {
 | 
					func GetMinimumVersion() []byte {
 | 
				
			||||||
	return []byte{0x01, 0x04, 0x08}
 | 
						return []byte{0x01, 0x04, 0x0B}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetVersion() []byte {
 | 
					func GetVersion() []byte {
 | 
				
			||||||
	return []byte{0x01, 0x04, 0x0A}
 | 
						return []byte{0x01, 0x04, 0x0B}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetVersionString() string {
 | 
					func GetVersionString() string {
 | 
				
			||||||
 | 
				
			|||||||
@ -70,6 +70,7 @@ type CeremonyDataClockConsensusEngine struct {
 | 
				
			|||||||
	keyManager                  keys.KeyManager
 | 
						keyManager                  keys.KeyManager
 | 
				
			||||||
	masterTimeReel              *qtime.MasterTimeReel
 | 
						masterTimeReel              *qtime.MasterTimeReel
 | 
				
			||||||
	dataTimeReel                *qtime.DataTimeReel
 | 
						dataTimeReel                *qtime.DataTimeReel
 | 
				
			||||||
 | 
						peerInfoManager             p2p.PeerInfoManager
 | 
				
			||||||
	provingKey                  crypto.Signer
 | 
						provingKey                  crypto.Signer
 | 
				
			||||||
	provingKeyBytes             []byte
 | 
						provingKeyBytes             []byte
 | 
				
			||||||
	provingKeyType              keys.KeyType
 | 
						provingKeyType              keys.KeyType
 | 
				
			||||||
@ -124,6 +125,7 @@ func NewCeremonyDataClockConsensusEngine(
 | 
				
			|||||||
	inclusionProver qcrypto.InclusionProver,
 | 
						inclusionProver qcrypto.InclusionProver,
 | 
				
			||||||
	masterTimeReel *qtime.MasterTimeReel,
 | 
						masterTimeReel *qtime.MasterTimeReel,
 | 
				
			||||||
	dataTimeReel *qtime.DataTimeReel,
 | 
						dataTimeReel *qtime.DataTimeReel,
 | 
				
			||||||
 | 
						peerInfoManager p2p.PeerInfoManager,
 | 
				
			||||||
	filter []byte,
 | 
						filter []byte,
 | 
				
			||||||
	seed []byte,
 | 
						seed []byte,
 | 
				
			||||||
) *CeremonyDataClockConsensusEngine {
 | 
					) *CeremonyDataClockConsensusEngine {
 | 
				
			||||||
@ -167,6 +169,10 @@ func NewCeremonyDataClockConsensusEngine(
 | 
				
			|||||||
		panic(errors.New("data time reel is nil"))
 | 
							panic(errors.New("data time reel is nil"))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if peerInfoManager == nil {
 | 
				
			||||||
 | 
							panic(errors.New("peer info manager is nil"))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minimumPeersRequired := engineConfig.MinimumPeersRequired
 | 
						minimumPeersRequired := engineConfig.MinimumPeersRequired
 | 
				
			||||||
	if minimumPeersRequired == 0 {
 | 
						if minimumPeersRequired == 0 {
 | 
				
			||||||
		minimumPeersRequired = 3
 | 
							minimumPeersRequired = 3
 | 
				
			||||||
@ -234,6 +240,7 @@ func NewCeremonyDataClockConsensusEngine(
 | 
				
			|||||||
		frameProver:               frameProver,
 | 
							frameProver:               frameProver,
 | 
				
			||||||
		masterTimeReel:            masterTimeReel,
 | 
							masterTimeReel:            masterTimeReel,
 | 
				
			||||||
		dataTimeReel:              dataTimeReel,
 | 
							dataTimeReel:              dataTimeReel,
 | 
				
			||||||
 | 
							peerInfoManager:           peerInfoManager,
 | 
				
			||||||
		statsClient:               statsClient,
 | 
							statsClient:               statsClient,
 | 
				
			||||||
		messageProcessorCh:        make(chan *pb.Message, 128),
 | 
							messageProcessorCh:        make(chan *pb.Message, 128),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package ceremony
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"encoding/binary"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -263,6 +264,40 @@ func (e *CeremonyDataClockConsensusEngine) sync(
 | 
				
			|||||||
		return latest, errors.Wrap(err, "sync")
 | 
							return latest, errors.Wrap(err, "sync")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						challenge := binary.BigEndian.AppendUint64(
 | 
				
			||||||
 | 
							append([]byte{}, peerId...),
 | 
				
			||||||
 | 
							uint64(time.Now().UnixMilli()),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						signature, err := e.pubSub.SignMessage(challenge)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = s.Send(&protobufs.CeremonyCompressedSyncRequestMessage{
 | 
				
			||||||
 | 
							SyncMessage: &protobufs.CeremonyCompressedSyncRequestMessage_Authentication{
 | 
				
			||||||
 | 
								Authentication: &protobufs.SyncRequestAuthentication{
 | 
				
			||||||
 | 
									PeerId:    e.pubSub.GetPeerID(),
 | 
				
			||||||
 | 
									Challenge: challenge,
 | 
				
			||||||
 | 
									Response: &protobufs.Ed448Signature{
 | 
				
			||||||
 | 
										Signature: signature,
 | 
				
			||||||
 | 
										PublicKey: &protobufs.Ed448PublicKey{
 | 
				
			||||||
 | 
											KeyValue: e.pubSub.GetPublicKey(),
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							e.peerMapMx.Lock()
 | 
				
			||||||
 | 
							if _, ok := e.peerMap[string(peerId)]; ok {
 | 
				
			||||||
 | 
								e.uncooperativePeersMap[string(peerId)] = e.peerMap[string(peerId)]
 | 
				
			||||||
 | 
								e.uncooperativePeersMap[string(peerId)].timestamp = time.Now().UnixMilli()
 | 
				
			||||||
 | 
								delete(e.peerMap, string(peerId))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							e.peerMapMx.Unlock()
 | 
				
			||||||
 | 
							return latest, errors.Wrap(err, "sync")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = s.Send(&protobufs.CeremonyCompressedSyncRequestMessage{
 | 
						err = s.Send(&protobufs.CeremonyCompressedSyncRequestMessage{
 | 
				
			||||||
		SyncMessage: &protobufs.CeremonyCompressedSyncRequestMessage_Preflight{
 | 
							SyncMessage: &protobufs.CeremonyCompressedSyncRequestMessage_Preflight{
 | 
				
			||||||
			Preflight: &protobufs.ClockFramesPreflight{
 | 
								Preflight: &protobufs.ClockFramesPreflight{
 | 
				
			||||||
 | 
				
			|||||||
@ -3,9 +3,12 @@ package ceremony
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"encoding/binary"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pcrypto "github.com/libp2p/go-libp2p/core/crypto"
 | 
				
			||||||
 | 
						"github.com/libp2p/go-libp2p/core/peer"
 | 
				
			||||||
	"github.com/mr-tron/base58"
 | 
						"github.com/mr-tron/base58"
 | 
				
			||||||
	"github.com/pbnjay/memory"
 | 
						"github.com/pbnjay/memory"
 | 
				
			||||||
	"github.com/pkg/errors"
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
@ -60,6 +63,128 @@ func (e *CeremonyDataClockConsensusEngine) NegotiateCompressedSyncFrames(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						request, err := server.Recv()
 | 
				
			||||||
 | 
						if err == io.EOF {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return errors.Wrap(err, "negotiate compressed sync frames")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						authentication, ok := request.
 | 
				
			||||||
 | 
							SyncMessage.(*protobufs.CeremonyCompressedSyncRequestMessage_Authentication)
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if authentication.Authentication == nil ||
 | 
				
			||||||
 | 
							authentication.Authentication.Challenge == nil ||
 | 
				
			||||||
 | 
							authentication.Authentication.PeerId == nil ||
 | 
				
			||||||
 | 
							authentication.Authentication.Response == nil ||
 | 
				
			||||||
 | 
							authentication.Authentication.Response.PublicKey == nil ||
 | 
				
			||||||
 | 
							authentication.Authentication.Response.PublicKey.KeyValue == nil ||
 | 
				
			||||||
 | 
							authentication.Authentication.Response.Signature == nil ||
 | 
				
			||||||
 | 
							len(authentication.Authentication.Challenge) < 8 {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !bytes.Equal(
 | 
				
			||||||
 | 
							authentication.Authentication.Challenge[:len(
 | 
				
			||||||
 | 
								authentication.Authentication.Challenge,
 | 
				
			||||||
 | 
							)-8],
 | 
				
			||||||
 | 
							e.pubSub.GetPeerID(),
 | 
				
			||||||
 | 
						) {
 | 
				
			||||||
 | 
							e.logger.Warn(
 | 
				
			||||||
 | 
								"peer provided invalid challenge",
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// probably some remark to make about chronometers here, whether one or three
 | 
				
			||||||
 | 
						challenge := int64(
 | 
				
			||||||
 | 
							binary.BigEndian.Uint64(
 | 
				
			||||||
 | 
								authentication.Authentication.Challenge[len(
 | 
				
			||||||
 | 
									authentication.Authentication.Challenge,
 | 
				
			||||||
 | 
								)-8:],
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						dist := time.Now().UnixMilli() - challenge
 | 
				
			||||||
 | 
						if dist < 0 {
 | 
				
			||||||
 | 
							dist *= -1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// account for skew
 | 
				
			||||||
 | 
						if dist > 30000 {
 | 
				
			||||||
 | 
							e.logger.Warn(
 | 
				
			||||||
 | 
								"peer provided challenge with too great of a distance",
 | 
				
			||||||
 | 
								zap.Int64("distance", dist),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						key, err := pcrypto.UnmarshalEd448PublicKey(
 | 
				
			||||||
 | 
							authentication.Authentication.Response.PublicKey.KeyValue,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							e.logger.Warn(
 | 
				
			||||||
 | 
								"peer provided invalid pubkey",
 | 
				
			||||||
 | 
								zap.Binary(
 | 
				
			||||||
 | 
									"public_key",
 | 
				
			||||||
 | 
									authentication.Authentication.Response.PublicKey.KeyValue,
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							return errors.Wrap(err, "negotiate compressed sync frames")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !(peer.ID(authentication.Authentication.PeerId)).MatchesPublicKey(key) {
 | 
				
			||||||
 | 
							e.logger.Warn(
 | 
				
			||||||
 | 
								"peer id does not match pubkey",
 | 
				
			||||||
 | 
								zap.Binary("peer_id", authentication.Authentication.PeerId),
 | 
				
			||||||
 | 
								zap.Binary(
 | 
				
			||||||
 | 
									"public_key",
 | 
				
			||||||
 | 
									authentication.Authentication.Response.PublicKey.KeyValue,
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						b, err := key.Verify(
 | 
				
			||||||
 | 
							authentication.Authentication.Challenge,
 | 
				
			||||||
 | 
							authentication.Authentication.Response.Signature,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil || !b {
 | 
				
			||||||
 | 
							e.logger.Warn(
 | 
				
			||||||
 | 
								"peer provided invalid signature",
 | 
				
			||||||
 | 
								zap.Binary("peer_id", authentication.Authentication.PeerId),
 | 
				
			||||||
 | 
								zap.Binary(
 | 
				
			||||||
 | 
									"public_key",
 | 
				
			||||||
 | 
									authentication.Authentication.Response.PublicKey.KeyValue,
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
								zap.Binary(
 | 
				
			||||||
 | 
									"signature",
 | 
				
			||||||
 | 
									authentication.Authentication.Response.Signature,
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						manifest := e.peerInfoManager.GetPeerInfo(
 | 
				
			||||||
 | 
							authentication.Authentication.PeerId,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if manifest == nil || manifest.Bandwidth <= 1048576 {
 | 
				
			||||||
 | 
							e.logger.Warn(
 | 
				
			||||||
 | 
								"peer manifest was null or bandwidth was low",
 | 
				
			||||||
 | 
								zap.Binary("peer_id", authentication.Authentication.PeerId),
 | 
				
			||||||
 | 
								zap.Uint64("bandwidth", manifest.Bandwidth),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// TODO: should give this more tlc, but should remap into blossomsub
 | 
				
			||||||
 | 
						// heuristics
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	e.currentReceivingSyncPeers++
 | 
						e.currentReceivingSyncPeers++
 | 
				
			||||||
	e.currentReceivingSyncPeersMx.Unlock()
 | 
						e.currentReceivingSyncPeersMx.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,10 @@ package master
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
	"encoding/binary"
 | 
						"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/mr-tron/base58"
 | 
				
			||||||
@ -122,14 +124,13 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
 | 
				
			|||||||
		return errors.Wrap(err, "handle self test report")
 | 
							return errors.Wrap(err, "handle self test report")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	e.peerMapMx.Lock()
 | 
						info := e.peerInfoManager.GetPeerInfo(peerID)
 | 
				
			||||||
	if _, ok := e.peerMap[string(peerID)]; ok {
 | 
						if info != nil {
 | 
				
			||||||
		e.peerMap[string(peerID)].MasterHeadFrame = report.MasterHeadFrame
 | 
							info.MasterHeadFrame = report.MasterHeadFrame
 | 
				
			||||||
		e.peerMapMx.Unlock()
 | 
					 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	e.peerMap[string(peerID)] = report
 | 
					
 | 
				
			||||||
	e.peerMapMx.Unlock()
 | 
						e.addPeerManifestReport(peerID, report)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memory := binary.BigEndian.Uint64(report.Memory)
 | 
						memory := binary.BigEndian.Uint64(report.Memory)
 | 
				
			||||||
	e.logger.Debug(
 | 
						e.logger.Debug(
 | 
				
			||||||
@ -174,9 +175,18 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							ctx, cancel := context.WithTimeout(context.TODO(), 5*time.Minute)
 | 
				
			||||||
 | 
							defer cancel()
 | 
				
			||||||
 | 
							ch := e.pubSub.GetMultiaddrOfPeerStream(ctx, peerID)
 | 
				
			||||||
 | 
							select {
 | 
				
			||||||
 | 
							case <-ch:
 | 
				
			||||||
			go func() {
 | 
								go func() {
 | 
				
			||||||
				e.bandwidthTestCh <- peerID
 | 
									e.bandwidthTestCh <- peerID
 | 
				
			||||||
			}()
 | 
								}()
 | 
				
			||||||
 | 
							case <-ctx.Done():
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -44,8 +44,8 @@ func (e *MasterClockConsensusEngine) GetMostAheadPeers() (
 | 
				
			|||||||
	max := frame.FrameNumber + 10
 | 
						max := frame.FrameNumber + 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var peers [][]byte = [][]byte{}
 | 
						var peers [][]byte = [][]byte{}
 | 
				
			||||||
	e.peerMapMx.Lock()
 | 
						peerMap := e.peerInfoManager.GetPeerMap()
 | 
				
			||||||
	for peerId, v := range e.peerMap {
 | 
						for peerId, v := range peerMap {
 | 
				
			||||||
		if v.MasterHeadFrame > max {
 | 
							if v.MasterHeadFrame > max {
 | 
				
			||||||
			peers = append(peers, []byte(peerId))
 | 
								peers = append(peers, []byte(peerId))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -54,7 +54,6 @@ func (e *MasterClockConsensusEngine) GetMostAheadPeers() (
 | 
				
			|||||||
			break
 | 
								break
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	e.peerMapMx.Unlock()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(peers) == 0 {
 | 
						if len(peers) == 0 {
 | 
				
			||||||
		return nil, p2p.ErrNoPeersAvailable
 | 
							return nil, p2p.ErrNoPeersAvailable
 | 
				
			||||||
 | 
				
			|||||||
@ -57,9 +57,8 @@ type MasterClockConsensusEngine struct {
 | 
				
			|||||||
	historicFrames              []*protobufs.ClockFrame
 | 
						historicFrames              []*protobufs.ClockFrame
 | 
				
			||||||
	clockStore                  store.ClockStore
 | 
						clockStore                  store.ClockStore
 | 
				
			||||||
	masterTimeReel              *qtime.MasterTimeReel
 | 
						masterTimeReel              *qtime.MasterTimeReel
 | 
				
			||||||
 | 
						peerInfoManager             p2p.PeerInfoManager
 | 
				
			||||||
	report                      *protobufs.SelfTestReport
 | 
						report                      *protobufs.SelfTestReport
 | 
				
			||||||
	peerMapMx                   sync.RWMutex
 | 
					 | 
				
			||||||
	peerMap                     map[string]*protobufs.SelfTestReport
 | 
					 | 
				
			||||||
	frameValidationCh           chan *protobufs.ClockFrame
 | 
						frameValidationCh           chan *protobufs.ClockFrame
 | 
				
			||||||
	bandwidthTestCh             chan []byte
 | 
						bandwidthTestCh             chan []byte
 | 
				
			||||||
	currentReceivingSyncPeers   int
 | 
						currentReceivingSyncPeers   int
 | 
				
			||||||
@ -76,6 +75,7 @@ func NewMasterClockConsensusEngine(
 | 
				
			|||||||
	pubSub p2p.PubSub,
 | 
						pubSub p2p.PubSub,
 | 
				
			||||||
	frameProver crypto.FrameProver,
 | 
						frameProver crypto.FrameProver,
 | 
				
			||||||
	masterTimeReel *qtime.MasterTimeReel,
 | 
						masterTimeReel *qtime.MasterTimeReel,
 | 
				
			||||||
 | 
						peerInfoManager p2p.PeerInfoManager,
 | 
				
			||||||
	report *protobufs.SelfTestReport,
 | 
						report *protobufs.SelfTestReport,
 | 
				
			||||||
) *MasterClockConsensusEngine {
 | 
					) *MasterClockConsensusEngine {
 | 
				
			||||||
	if logger == nil {
 | 
						if logger == nil {
 | 
				
			||||||
@ -121,13 +121,13 @@ func NewMasterClockConsensusEngine(
 | 
				
			|||||||
		clockStore:          clockStore,
 | 
							clockStore:          clockStore,
 | 
				
			||||||
		frameProver:         frameProver,
 | 
							frameProver:         frameProver,
 | 
				
			||||||
		masterTimeReel:      masterTimeReel,
 | 
							masterTimeReel:      masterTimeReel,
 | 
				
			||||||
 | 
							peerInfoManager:     peerInfoManager,
 | 
				
			||||||
		report:              report,
 | 
							report:              report,
 | 
				
			||||||
		peerMap:             map[string]*protobufs.SelfTestReport{},
 | 
					 | 
				
			||||||
		frameValidationCh:   make(chan *protobufs.ClockFrame, 10),
 | 
							frameValidationCh:   make(chan *protobufs.ClockFrame, 10),
 | 
				
			||||||
		bandwidthTestCh:     make(chan []byte),
 | 
							bandwidthTestCh:     make(chan []byte),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	e.peerMap[string(e.pubSub.GetPeerID())] = report
 | 
						e.addPeerManifestReport(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"))
 | 
				
			||||||
@ -143,6 +143,8 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
 | 
				
			|||||||
	e.state = consensus.EngineStateStarting
 | 
						e.state = consensus.EngineStateStarting
 | 
				
			||||||
	errChan := make(chan error)
 | 
						errChan := make(chan error)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						e.peerInfoManager.Start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	e.state = consensus.EngineStateLoading
 | 
						e.state = consensus.EngineStateLoading
 | 
				
			||||||
	e.logger.Info("syncing last seen state")
 | 
						e.logger.Info("syncing last seen state")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -222,7 +224,7 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
 | 
				
			|||||||
			if err := e.publishMessage(e.filter, e.report); err != nil {
 | 
								if err := e.publishMessage(e.filter, e.report); err != nil {
 | 
				
			||||||
				e.logger.Debug("error publishing message", zap.Error(err))
 | 
									e.logger.Debug("error publishing message", zap.Error(err))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			time.Sleep(30 * time.Minute)
 | 
								time.Sleep(5 * time.Minute)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -306,6 +308,7 @@ func (e *MasterClockConsensusEngine) Stop(force bool) <-chan error {
 | 
				
			|||||||
	wg.Wait()
 | 
						wg.Wait()
 | 
				
			||||||
	e.logger.Info("execution engines stopped")
 | 
						e.logger.Info("execution engines stopped")
 | 
				
			||||||
	e.masterTimeReel.Stop()
 | 
						e.masterTimeReel.Stop()
 | 
				
			||||||
 | 
						e.peerInfoManager.Stop()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	e.state = consensus.EngineStateStopped
 | 
						e.state = consensus.EngineStateStopped
 | 
				
			||||||
	go func() {
 | 
						go func() {
 | 
				
			||||||
@ -317,9 +320,6 @@ func (e *MasterClockConsensusEngine) Stop(force bool) <-chan error {
 | 
				
			|||||||
func (e *MasterClockConsensusEngine) performBandwidthTest(peerID []byte) {
 | 
					func (e *MasterClockConsensusEngine) performBandwidthTest(peerID []byte) {
 | 
				
			||||||
	result := e.pubSub.GetMultiaddrOfPeer(peerID)
 | 
						result := e.pubSub.GetMultiaddrOfPeer(peerID)
 | 
				
			||||||
	if result == "" {
 | 
						if result == "" {
 | 
				
			||||||
		go func() {
 | 
					 | 
				
			||||||
			e.bandwidthTestCh <- peerID
 | 
					 | 
				
			||||||
		}()
 | 
					 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -377,6 +377,47 @@ func (e *MasterClockConsensusEngine) performBandwidthTest(peerID []byte) {
 | 
				
			|||||||
		e.pubSub.SetPeerScore(peerID, -1000)
 | 
							e.pubSub.SetPeerScore(peerID, -1000)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						duration := end - start
 | 
				
			||||||
 | 
						bandwidth := uint64(1048576*1000) / uint64(duration)
 | 
				
			||||||
 | 
						manifest := e.peerInfoManager.GetPeerInfo(peerID)
 | 
				
			||||||
 | 
						if manifest == nil {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						peerManifest := &p2p.PeerManifest{
 | 
				
			||||||
 | 
							PeerId:             peerID,
 | 
				
			||||||
 | 
							Difficulty:         manifest.Difficulty,
 | 
				
			||||||
 | 
							DifficultyMetric:   manifest.DifficultyMetric,
 | 
				
			||||||
 | 
							Commit_16Metric:    manifest.Commit_16Metric,
 | 
				
			||||||
 | 
							Commit_128Metric:   manifest.Commit_128Metric,
 | 
				
			||||||
 | 
							Commit_1024Metric:  manifest.Commit_1024Metric,
 | 
				
			||||||
 | 
							Commit_65536Metric: manifest.Commit_65536Metric,
 | 
				
			||||||
 | 
							Proof_16Metric:     manifest.Proof_16Metric,
 | 
				
			||||||
 | 
							Proof_128Metric:    manifest.Proof_128Metric,
 | 
				
			||||||
 | 
							Proof_1024Metric:   manifest.Proof_1024Metric,
 | 
				
			||||||
 | 
							Proof_65536Metric:  manifest.Proof_65536Metric,
 | 
				
			||||||
 | 
							Cores:              manifest.Cores,
 | 
				
			||||||
 | 
							Memory:             manifest.Memory,
 | 
				
			||||||
 | 
							Storage:            manifest.Storage,
 | 
				
			||||||
 | 
							Capabilities:       []p2p.Capability{},
 | 
				
			||||||
 | 
							MasterHeadFrame:    manifest.MasterHeadFrame,
 | 
				
			||||||
 | 
							Bandwidth:          bandwidth,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, capability := range manifest.Capabilities {
 | 
				
			||||||
 | 
							metadata := make([]byte, len(capability.AdditionalMetadata))
 | 
				
			||||||
 | 
							copy(metadata[:], capability.AdditionalMetadata[:])
 | 
				
			||||||
 | 
							peerManifest.Capabilities = append(
 | 
				
			||||||
 | 
								peerManifest.Capabilities,
 | 
				
			||||||
 | 
								p2p.Capability{
 | 
				
			||||||
 | 
									ProtocolIdentifier: capability.ProtocolIdentifier,
 | 
				
			||||||
 | 
									AdditionalMetadata: metadata,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						e.peerInfoManager.AddPeerInfo(manifest)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (
 | 
					func (
 | 
				
			||||||
@ -385,8 +426,8 @@ func (
 | 
				
			|||||||
	response := &protobufs.PeerManifestsResponse{
 | 
						response := &protobufs.PeerManifestsResponse{
 | 
				
			||||||
		PeerManifests: []*protobufs.PeerManifest{},
 | 
							PeerManifests: []*protobufs.PeerManifest{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	e.peerMapMx.Lock()
 | 
						peerMap := e.peerInfoManager.GetPeerMap()
 | 
				
			||||||
	for peerId, peerManifest := range e.peerMap {
 | 
						for peerId, peerManifest := range peerMap {
 | 
				
			||||||
		peerId := peerId
 | 
							peerId := peerId
 | 
				
			||||||
		peerManifest := peerManifest
 | 
							peerManifest := peerManifest
 | 
				
			||||||
		manifest := &protobufs.PeerManifest{
 | 
							manifest := &protobufs.PeerManifest{
 | 
				
			||||||
@ -424,7 +465,6 @@ func (
 | 
				
			|||||||
			manifest,
 | 
								manifest,
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	e.peerMapMx.Unlock()
 | 
					 | 
				
			||||||
	return response
 | 
						return response
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -487,3 +527,41 @@ func (e *MasterClockConsensusEngine) buildHistoricFrameCache(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	e.historicFrames = append(e.historicFrames, latestFrame)
 | 
						e.historicFrames = append(e.historicFrames, latestFrame)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *MasterClockConsensusEngine) addPeerManifestReport(
 | 
				
			||||||
 | 
						peerId []byte,
 | 
				
			||||||
 | 
						report *protobufs.SelfTestReport,
 | 
				
			||||||
 | 
					) {
 | 
				
			||||||
 | 
						manifest := &p2p.PeerManifest{
 | 
				
			||||||
 | 
							PeerId:             peerId,
 | 
				
			||||||
 | 
							Difficulty:         report.Difficulty,
 | 
				
			||||||
 | 
							DifficultyMetric:   report.DifficultyMetric,
 | 
				
			||||||
 | 
							Commit_16Metric:    report.Commit_16Metric,
 | 
				
			||||||
 | 
							Commit_128Metric:   report.Commit_128Metric,
 | 
				
			||||||
 | 
							Commit_1024Metric:  report.Commit_1024Metric,
 | 
				
			||||||
 | 
							Commit_65536Metric: report.Commit_65536Metric,
 | 
				
			||||||
 | 
							Proof_16Metric:     report.Proof_16Metric,
 | 
				
			||||||
 | 
							Proof_128Metric:    report.Proof_128Metric,
 | 
				
			||||||
 | 
							Proof_1024Metric:   report.Proof_1024Metric,
 | 
				
			||||||
 | 
							Proof_65536Metric:  report.Proof_65536Metric,
 | 
				
			||||||
 | 
							Cores:              report.Cores,
 | 
				
			||||||
 | 
							Memory:             report.Memory,
 | 
				
			||||||
 | 
							Storage:            report.Storage,
 | 
				
			||||||
 | 
							Capabilities:       []p2p.Capability{},
 | 
				
			||||||
 | 
							MasterHeadFrame:    report.MasterHeadFrame,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, capability := range manifest.Capabilities {
 | 
				
			||||||
 | 
							metadata := make([]byte, len(capability.AdditionalMetadata))
 | 
				
			||||||
 | 
							copy(metadata[:], capability.AdditionalMetadata[:])
 | 
				
			||||||
 | 
							manifest.Capabilities = append(
 | 
				
			||||||
 | 
								manifest.Capabilities,
 | 
				
			||||||
 | 
								p2p.Capability{
 | 
				
			||||||
 | 
									ProtocolIdentifier: capability.ProtocolIdentifier,
 | 
				
			||||||
 | 
									AdditionalMetadata: metadata,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						e.peerInfoManager.AddPeerInfo(manifest)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -73,6 +73,7 @@ func NewCeremonyExecutionEngine(
 | 
				
			|||||||
	inclusionProver qcrypto.InclusionProver,
 | 
						inclusionProver qcrypto.InclusionProver,
 | 
				
			||||||
	clockStore store.ClockStore,
 | 
						clockStore store.ClockStore,
 | 
				
			||||||
	masterTimeReel *time.MasterTimeReel,
 | 
						masterTimeReel *time.MasterTimeReel,
 | 
				
			||||||
 | 
						peerInfoManager p2p.PeerInfoManager,
 | 
				
			||||||
	keyStore store.KeyStore,
 | 
						keyStore store.KeyStore,
 | 
				
			||||||
) *CeremonyExecutionEngine {
 | 
					) *CeremonyExecutionEngine {
 | 
				
			||||||
	if logger == nil {
 | 
						if logger == nil {
 | 
				
			||||||
@ -144,6 +145,7 @@ func NewCeremonyExecutionEngine(
 | 
				
			|||||||
		inclusionProver,
 | 
							inclusionProver,
 | 
				
			||||||
		masterTimeReel,
 | 
							masterTimeReel,
 | 
				
			||||||
		dataTimeReel,
 | 
							dataTimeReel,
 | 
				
			||||||
 | 
							peerInfoManager,
 | 
				
			||||||
		intrinsicFilter,
 | 
							intrinsicFilter,
 | 
				
			||||||
		seed,
 | 
							seed,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
				
			|||||||
@ -23,6 +23,7 @@ import (
 | 
				
			|||||||
	"github.com/libp2p/go-libp2p/p2p/discovery/routing"
 | 
						"github.com/libp2p/go-libp2p/p2p/discovery/routing"
 | 
				
			||||||
	"github.com/libp2p/go-libp2p/p2p/discovery/util"
 | 
						"github.com/libp2p/go-libp2p/p2p/discovery/util"
 | 
				
			||||||
	"github.com/mr-tron/base58"
 | 
						"github.com/mr-tron/base58"
 | 
				
			||||||
 | 
						"github.com/multiformats/go-multiaddr"
 | 
				
			||||||
	"github.com/pkg/errors"
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
	"go.uber.org/zap"
 | 
						"go.uber.org/zap"
 | 
				
			||||||
	"google.golang.org/grpc"
 | 
						"google.golang.org/grpc"
 | 
				
			||||||
@ -451,6 +452,13 @@ func (b *BlossomSub) GetNetworkPeersCount() int {
 | 
				
			|||||||
	return len(b.h.Network().Peers())
 | 
						return len(b.h.Network().Peers())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (b *BlossomSub) GetMultiaddrOfPeerStream(
 | 
				
			||||||
 | 
						ctx context.Context,
 | 
				
			||||||
 | 
						peerId []byte,
 | 
				
			||||||
 | 
					) <-chan multiaddr.Multiaddr {
 | 
				
			||||||
 | 
						return b.h.Peerstore().AddrStream(ctx, peer.ID(peerId))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (b *BlossomSub) GetMultiaddrOfPeer(peerId []byte) string {
 | 
					func (b *BlossomSub) GetMultiaddrOfPeer(peerId []byte) string {
 | 
				
			||||||
	addrs := b.h.Peerstore().Addrs(peer.ID(peerId))
 | 
						addrs := b.h.Peerstore().Addrs(peer.ID(peerId))
 | 
				
			||||||
	if len(addrs) == 0 {
 | 
						if len(addrs) == 0 {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										146
									
								
								node/p2p/peer_info_manager.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								node/p2p/peer_info_manager.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,146 @@
 | 
				
			|||||||
 | 
					package p2p
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"go.uber.org/zap"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PeerInfoManager interface {
 | 
				
			||||||
 | 
						Start()
 | 
				
			||||||
 | 
						Stop()
 | 
				
			||||||
 | 
						AddPeerInfo(manifest *PeerManifest)
 | 
				
			||||||
 | 
						GetPeerInfo(peerId []byte) *PeerManifest
 | 
				
			||||||
 | 
						GetPeerMap() map[string]*PeerManifest
 | 
				
			||||||
 | 
						GetPeersBySpeed() [][]byte
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Capability struct {
 | 
				
			||||||
 | 
						ProtocolIdentifier uint32
 | 
				
			||||||
 | 
						AdditionalMetadata []byte
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type PeerManifest struct {
 | 
				
			||||||
 | 
						PeerId             []byte
 | 
				
			||||||
 | 
						Difficulty         uint32
 | 
				
			||||||
 | 
						DifficultyMetric   int64
 | 
				
			||||||
 | 
						Commit_16Metric    int64
 | 
				
			||||||
 | 
						Commit_128Metric   int64
 | 
				
			||||||
 | 
						Commit_1024Metric  int64
 | 
				
			||||||
 | 
						Commit_65536Metric int64
 | 
				
			||||||
 | 
						Proof_16Metric     int64
 | 
				
			||||||
 | 
						Proof_128Metric    int64
 | 
				
			||||||
 | 
						Proof_1024Metric   int64
 | 
				
			||||||
 | 
						Proof_65536Metric  int64
 | 
				
			||||||
 | 
						Cores              uint32
 | 
				
			||||||
 | 
						Memory             []byte
 | 
				
			||||||
 | 
						Storage            []byte
 | 
				
			||||||
 | 
						Capabilities       []Capability
 | 
				
			||||||
 | 
						MasterHeadFrame    uint64
 | 
				
			||||||
 | 
						Bandwidth          uint64
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type InMemoryPeerInfoManager struct {
 | 
				
			||||||
 | 
						logger     *zap.Logger
 | 
				
			||||||
 | 
						peerInfoCh chan *PeerManifest
 | 
				
			||||||
 | 
						quitCh     chan struct{}
 | 
				
			||||||
 | 
						peerInfoMx sync.RWMutex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						peerMap      map[string]*PeerManifest
 | 
				
			||||||
 | 
						fastestPeers []*PeerManifest
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var _ PeerInfoManager = (*InMemoryPeerInfoManager)(nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewInMemoryPeerInfoManager(logger *zap.Logger) *InMemoryPeerInfoManager {
 | 
				
			||||||
 | 
						return &InMemoryPeerInfoManager{
 | 
				
			||||||
 | 
							logger:       logger,
 | 
				
			||||||
 | 
							peerInfoCh:   make(chan *PeerManifest),
 | 
				
			||||||
 | 
							fastestPeers: []*PeerManifest{},
 | 
				
			||||||
 | 
							peerMap:      make(map[string]*PeerManifest),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *InMemoryPeerInfoManager) Start() {
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							for {
 | 
				
			||||||
 | 
								select {
 | 
				
			||||||
 | 
								case manifest := <-m.peerInfoCh:
 | 
				
			||||||
 | 
									m.peerInfoMx.Lock()
 | 
				
			||||||
 | 
									m.peerMap[string(manifest.PeerId)] = manifest
 | 
				
			||||||
 | 
									m.searchAndInsertPeer(manifest)
 | 
				
			||||||
 | 
									m.peerInfoMx.Unlock()
 | 
				
			||||||
 | 
								case <-m.quitCh:
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *InMemoryPeerInfoManager) Stop() {
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							m.quitCh <- struct{}{}
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *InMemoryPeerInfoManager) AddPeerInfo(manifest *PeerManifest) {
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							m.peerInfoCh <- manifest
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *InMemoryPeerInfoManager) GetPeerInfo(peerId []byte) *PeerManifest {
 | 
				
			||||||
 | 
						m.peerInfoMx.RLock()
 | 
				
			||||||
 | 
						manifest, ok := m.peerMap[string(peerId)]
 | 
				
			||||||
 | 
						m.peerInfoMx.RUnlock()
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return manifest
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *InMemoryPeerInfoManager) GetPeerMap() map[string]*PeerManifest {
 | 
				
			||||||
 | 
						data := make(map[string]*PeerManifest)
 | 
				
			||||||
 | 
						m.peerInfoMx.RLock()
 | 
				
			||||||
 | 
						for k, v := range m.peerMap {
 | 
				
			||||||
 | 
							data[k] = v
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						m.peerInfoMx.RUnlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return data
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *InMemoryPeerInfoManager) GetPeersBySpeed() [][]byte {
 | 
				
			||||||
 | 
						result := [][]byte{}
 | 
				
			||||||
 | 
						m.peerInfoMx.RLock()
 | 
				
			||||||
 | 
						for _, info := range m.fastestPeers {
 | 
				
			||||||
 | 
							result = append(result, info.PeerId)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						m.peerInfoMx.RUnlock()
 | 
				
			||||||
 | 
						return result
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// blatantly lifted from slices.BinarySearchFunc, optimized for direct insertion
 | 
				
			||||||
 | 
					// and uint64 comparison without overflow
 | 
				
			||||||
 | 
					func (m *InMemoryPeerInfoManager) searchAndInsertPeer(manifest *PeerManifest) {
 | 
				
			||||||
 | 
						n := len(m.fastestPeers)
 | 
				
			||||||
 | 
						i, j := 0, n
 | 
				
			||||||
 | 
						for i < j {
 | 
				
			||||||
 | 
							h := int(uint(i+j) >> 1)
 | 
				
			||||||
 | 
							if m.fastestPeers[h].Bandwidth > manifest.Bandwidth {
 | 
				
			||||||
 | 
								i = h + 1
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								j = h
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if i < n && m.fastestPeers[i].Bandwidth == manifest.Bandwidth &&
 | 
				
			||||||
 | 
							bytes.Equal(m.fastestPeers[i].PeerId, manifest.PeerId) {
 | 
				
			||||||
 | 
							m.fastestPeers[i] = manifest
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							m.fastestPeers = append(m.fastestPeers, new(PeerManifest))
 | 
				
			||||||
 | 
							copy(m.fastestPeers[i+1:], m.fastestPeers[i:])
 | 
				
			||||||
 | 
							m.fastestPeers[i] = manifest
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,6 +1,9 @@
 | 
				
			|||||||
package p2p
 | 
					package p2p
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/multiformats/go-multiaddr"
 | 
				
			||||||
	"google.golang.org/grpc"
 | 
						"google.golang.org/grpc"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/go-libp2p-blossomsub/pb"
 | 
						"source.quilibrium.com/quilibrium/monorepo/go-libp2p-blossomsub/pb"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
				
			||||||
@ -16,6 +19,10 @@ type PubSub interface {
 | 
				
			|||||||
	GetPeerstoreCount() int
 | 
						GetPeerstoreCount() int
 | 
				
			||||||
	GetNetworkPeersCount() int
 | 
						GetNetworkPeersCount() int
 | 
				
			||||||
	GetRandomPeer(bitmask []byte) ([]byte, error)
 | 
						GetRandomPeer(bitmask []byte) ([]byte, error)
 | 
				
			||||||
 | 
						GetMultiaddrOfPeerStream(
 | 
				
			||||||
 | 
							ctx context.Context,
 | 
				
			||||||
 | 
							peerId []byte,
 | 
				
			||||||
 | 
						) <-chan multiaddr.Multiaddr
 | 
				
			||||||
	GetMultiaddrOfPeer(peerId []byte) string
 | 
						GetMultiaddrOfPeer(peerId []byte) string
 | 
				
			||||||
	StartDirectChannelListener(
 | 
						StartDirectChannelListener(
 | 
				
			||||||
		key []byte,
 | 
							key []byte,
 | 
				
			||||||
 | 
				
			|||||||
@ -1209,6 +1209,69 @@ func (x *CeremonyCompressedSync) GetSegments() []*InclusionSegmentsMap {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type SyncRequestAuthentication struct {
 | 
				
			||||||
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
 | 
						unknownFields protoimpl.UnknownFields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						PeerId    []byte          `protobuf:"bytes,1,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"`
 | 
				
			||||||
 | 
						Challenge []byte          `protobuf:"bytes,2,opt,name=challenge,proto3" json:"challenge,omitempty"`
 | 
				
			||||||
 | 
						Response  *Ed448Signature `protobuf:"bytes,3,opt,name=response,proto3" json:"response,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SyncRequestAuthentication) Reset() {
 | 
				
			||||||
 | 
						*x = SyncRequestAuthentication{}
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
 | 
							mi := &file_ceremony_proto_msgTypes[16]
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SyncRequestAuthentication) String() string {
 | 
				
			||||||
 | 
						return protoimpl.X.MessageStringOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (*SyncRequestAuthentication) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SyncRequestAuthentication) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
 | 
						mi := &file_ceremony_proto_msgTypes[16]
 | 
				
			||||||
 | 
						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 SyncRequestAuthentication.ProtoReflect.Descriptor instead.
 | 
				
			||||||
 | 
					func (*SyncRequestAuthentication) Descriptor() ([]byte, []int) {
 | 
				
			||||||
 | 
						return file_ceremony_proto_rawDescGZIP(), []int{16}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SyncRequestAuthentication) GetPeerId() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.PeerId
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SyncRequestAuthentication) GetChallenge() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Challenge
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *SyncRequestAuthentication) GetResponse() *Ed448Signature {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.Response
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type CeremonyCompressedSyncRequestMessage struct {
 | 
					type CeremonyCompressedSyncRequestMessage struct {
 | 
				
			||||||
	state         protoimpl.MessageState
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
	sizeCache     protoimpl.SizeCache
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
@ -1218,13 +1281,14 @@ type CeremonyCompressedSyncRequestMessage struct {
 | 
				
			|||||||
	//
 | 
						//
 | 
				
			||||||
	//	*CeremonyCompressedSyncRequestMessage_Preflight
 | 
						//	*CeremonyCompressedSyncRequestMessage_Preflight
 | 
				
			||||||
	//	*CeremonyCompressedSyncRequestMessage_Request
 | 
						//	*CeremonyCompressedSyncRequestMessage_Request
 | 
				
			||||||
 | 
						//	*CeremonyCompressedSyncRequestMessage_Authentication
 | 
				
			||||||
	SyncMessage isCeremonyCompressedSyncRequestMessage_SyncMessage `protobuf_oneof:"sync_message"`
 | 
						SyncMessage isCeremonyCompressedSyncRequestMessage_SyncMessage `protobuf_oneof:"sync_message"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *CeremonyCompressedSyncRequestMessage) Reset() {
 | 
					func (x *CeremonyCompressedSyncRequestMessage) Reset() {
 | 
				
			||||||
	*x = CeremonyCompressedSyncRequestMessage{}
 | 
						*x = CeremonyCompressedSyncRequestMessage{}
 | 
				
			||||||
	if protoimpl.UnsafeEnabled {
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
		mi := &file_ceremony_proto_msgTypes[16]
 | 
							mi := &file_ceremony_proto_msgTypes[17]
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		ms.StoreMessageInfo(mi)
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -1237,7 +1301,7 @@ func (x *CeremonyCompressedSyncRequestMessage) String() string {
 | 
				
			|||||||
func (*CeremonyCompressedSyncRequestMessage) ProtoMessage() {}
 | 
					func (*CeremonyCompressedSyncRequestMessage) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *CeremonyCompressedSyncRequestMessage) ProtoReflect() protoreflect.Message {
 | 
					func (x *CeremonyCompressedSyncRequestMessage) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
	mi := &file_ceremony_proto_msgTypes[16]
 | 
						mi := &file_ceremony_proto_msgTypes[17]
 | 
				
			||||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		if ms.LoadMessageInfo() == nil {
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
@ -1250,7 +1314,7 @@ func (x *CeremonyCompressedSyncRequestMessage) ProtoReflect() protoreflect.Messa
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Deprecated: Use CeremonyCompressedSyncRequestMessage.ProtoReflect.Descriptor instead.
 | 
					// Deprecated: Use CeremonyCompressedSyncRequestMessage.ProtoReflect.Descriptor instead.
 | 
				
			||||||
func (*CeremonyCompressedSyncRequestMessage) Descriptor() ([]byte, []int) {
 | 
					func (*CeremonyCompressedSyncRequestMessage) Descriptor() ([]byte, []int) {
 | 
				
			||||||
	return file_ceremony_proto_rawDescGZIP(), []int{16}
 | 
						return file_ceremony_proto_rawDescGZIP(), []int{17}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *CeremonyCompressedSyncRequestMessage) GetSyncMessage() isCeremonyCompressedSyncRequestMessage_SyncMessage {
 | 
					func (m *CeremonyCompressedSyncRequestMessage) GetSyncMessage() isCeremonyCompressedSyncRequestMessage_SyncMessage {
 | 
				
			||||||
@ -1274,6 +1338,13 @@ func (x *CeremonyCompressedSyncRequestMessage) GetRequest() *ClockFramesRequest
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *CeremonyCompressedSyncRequestMessage) GetAuthentication() *SyncRequestAuthentication {
 | 
				
			||||||
 | 
						if x, ok := x.GetSyncMessage().(*CeremonyCompressedSyncRequestMessage_Authentication); ok {
 | 
				
			||||||
 | 
							return x.Authentication
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type isCeremonyCompressedSyncRequestMessage_SyncMessage interface {
 | 
					type isCeremonyCompressedSyncRequestMessage_SyncMessage interface {
 | 
				
			||||||
	isCeremonyCompressedSyncRequestMessage_SyncMessage()
 | 
						isCeremonyCompressedSyncRequestMessage_SyncMessage()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1286,12 +1357,19 @@ type CeremonyCompressedSyncRequestMessage_Request struct {
 | 
				
			|||||||
	Request *ClockFramesRequest `protobuf:"bytes,2,opt,name=request,proto3,oneof"`
 | 
						Request *ClockFramesRequest `protobuf:"bytes,2,opt,name=request,proto3,oneof"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type CeremonyCompressedSyncRequestMessage_Authentication struct {
 | 
				
			||||||
 | 
						Authentication *SyncRequestAuthentication `protobuf:"bytes,3,opt,name=authentication,proto3,oneof"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (*CeremonyCompressedSyncRequestMessage_Preflight) isCeremonyCompressedSyncRequestMessage_SyncMessage() {
 | 
					func (*CeremonyCompressedSyncRequestMessage_Preflight) isCeremonyCompressedSyncRequestMessage_SyncMessage() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (*CeremonyCompressedSyncRequestMessage_Request) isCeremonyCompressedSyncRequestMessage_SyncMessage() {
 | 
					func (*CeremonyCompressedSyncRequestMessage_Request) isCeremonyCompressedSyncRequestMessage_SyncMessage() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (*CeremonyCompressedSyncRequestMessage_Authentication) isCeremonyCompressedSyncRequestMessage_SyncMessage() {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type CeremonyCompressedSyncResponseMessage struct {
 | 
					type CeremonyCompressedSyncResponseMessage struct {
 | 
				
			||||||
	state         protoimpl.MessageState
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
	sizeCache     protoimpl.SizeCache
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
@ -1307,7 +1385,7 @@ type CeremonyCompressedSyncResponseMessage struct {
 | 
				
			|||||||
func (x *CeremonyCompressedSyncResponseMessage) Reset() {
 | 
					func (x *CeremonyCompressedSyncResponseMessage) Reset() {
 | 
				
			||||||
	*x = CeremonyCompressedSyncResponseMessage{}
 | 
						*x = CeremonyCompressedSyncResponseMessage{}
 | 
				
			||||||
	if protoimpl.UnsafeEnabled {
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
		mi := &file_ceremony_proto_msgTypes[17]
 | 
							mi := &file_ceremony_proto_msgTypes[18]
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		ms.StoreMessageInfo(mi)
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -1320,7 +1398,7 @@ func (x *CeremonyCompressedSyncResponseMessage) String() string {
 | 
				
			|||||||
func (*CeremonyCompressedSyncResponseMessage) ProtoMessage() {}
 | 
					func (*CeremonyCompressedSyncResponseMessage) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *CeremonyCompressedSyncResponseMessage) ProtoReflect() protoreflect.Message {
 | 
					func (x *CeremonyCompressedSyncResponseMessage) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
	mi := &file_ceremony_proto_msgTypes[17]
 | 
						mi := &file_ceremony_proto_msgTypes[18]
 | 
				
			||||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		if ms.LoadMessageInfo() == nil {
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
@ -1333,7 +1411,7 @@ func (x *CeremonyCompressedSyncResponseMessage) ProtoReflect() protoreflect.Mess
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Deprecated: Use CeremonyCompressedSyncResponseMessage.ProtoReflect.Descriptor instead.
 | 
					// Deprecated: Use CeremonyCompressedSyncResponseMessage.ProtoReflect.Descriptor instead.
 | 
				
			||||||
func (*CeremonyCompressedSyncResponseMessage) Descriptor() ([]byte, []int) {
 | 
					func (*CeremonyCompressedSyncResponseMessage) Descriptor() ([]byte, []int) {
 | 
				
			||||||
	return file_ceremony_proto_rawDescGZIP(), []int{17}
 | 
						return file_ceremony_proto_rawDescGZIP(), []int{18}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *CeremonyCompressedSyncResponseMessage) GetSyncMessage() isCeremonyCompressedSyncResponseMessage_SyncMessage {
 | 
					func (m *CeremonyCompressedSyncResponseMessage) GetSyncMessage() isCeremonyCompressedSyncResponseMessage_SyncMessage {
 | 
				
			||||||
@ -1388,7 +1466,7 @@ type InclusionProofsMap struct {
 | 
				
			|||||||
func (x *InclusionProofsMap) Reset() {
 | 
					func (x *InclusionProofsMap) Reset() {
 | 
				
			||||||
	*x = InclusionProofsMap{}
 | 
						*x = InclusionProofsMap{}
 | 
				
			||||||
	if protoimpl.UnsafeEnabled {
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
		mi := &file_ceremony_proto_msgTypes[18]
 | 
							mi := &file_ceremony_proto_msgTypes[19]
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		ms.StoreMessageInfo(mi)
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -1401,7 +1479,7 @@ func (x *InclusionProofsMap) String() string {
 | 
				
			|||||||
func (*InclusionProofsMap) ProtoMessage() {}
 | 
					func (*InclusionProofsMap) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *InclusionProofsMap) ProtoReflect() protoreflect.Message {
 | 
					func (x *InclusionProofsMap) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
	mi := &file_ceremony_proto_msgTypes[18]
 | 
						mi := &file_ceremony_proto_msgTypes[19]
 | 
				
			||||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		if ms.LoadMessageInfo() == nil {
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
@ -1414,7 +1492,7 @@ func (x *InclusionProofsMap) ProtoReflect() protoreflect.Message {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Deprecated: Use InclusionProofsMap.ProtoReflect.Descriptor instead.
 | 
					// Deprecated: Use InclusionProofsMap.ProtoReflect.Descriptor instead.
 | 
				
			||||||
func (*InclusionProofsMap) Descriptor() ([]byte, []int) {
 | 
					func (*InclusionProofsMap) Descriptor() ([]byte, []int) {
 | 
				
			||||||
	return file_ceremony_proto_rawDescGZIP(), []int{18}
 | 
						return file_ceremony_proto_rawDescGZIP(), []int{19}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *InclusionProofsMap) GetFrameCommit() []byte {
 | 
					func (x *InclusionProofsMap) GetFrameCommit() []byte {
 | 
				
			||||||
@ -1450,7 +1528,7 @@ type InclusionSegmentsMap struct {
 | 
				
			|||||||
func (x *InclusionSegmentsMap) Reset() {
 | 
					func (x *InclusionSegmentsMap) Reset() {
 | 
				
			||||||
	*x = InclusionSegmentsMap{}
 | 
						*x = InclusionSegmentsMap{}
 | 
				
			||||||
	if protoimpl.UnsafeEnabled {
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
		mi := &file_ceremony_proto_msgTypes[19]
 | 
							mi := &file_ceremony_proto_msgTypes[20]
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		ms.StoreMessageInfo(mi)
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -1463,7 +1541,7 @@ func (x *InclusionSegmentsMap) String() string {
 | 
				
			|||||||
func (*InclusionSegmentsMap) ProtoMessage() {}
 | 
					func (*InclusionSegmentsMap) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *InclusionSegmentsMap) ProtoReflect() protoreflect.Message {
 | 
					func (x *InclusionSegmentsMap) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
	mi := &file_ceremony_proto_msgTypes[19]
 | 
						mi := &file_ceremony_proto_msgTypes[20]
 | 
				
			||||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		if ms.LoadMessageInfo() == nil {
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
@ -1476,7 +1554,7 @@ func (x *InclusionSegmentsMap) ProtoReflect() protoreflect.Message {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Deprecated: Use InclusionSegmentsMap.ProtoReflect.Descriptor instead.
 | 
					// Deprecated: Use InclusionSegmentsMap.ProtoReflect.Descriptor instead.
 | 
				
			||||||
func (*InclusionSegmentsMap) Descriptor() ([]byte, []int) {
 | 
					func (*InclusionSegmentsMap) Descriptor() ([]byte, []int) {
 | 
				
			||||||
	return file_ceremony_proto_rawDescGZIP(), []int{19}
 | 
						return file_ceremony_proto_rawDescGZIP(), []int{20}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *InclusionSegmentsMap) GetHash() []byte {
 | 
					func (x *InclusionSegmentsMap) GetHash() []byte {
 | 
				
			||||||
@ -1506,7 +1584,7 @@ type InclusionCommitmentsMap struct {
 | 
				
			|||||||
func (x *InclusionCommitmentsMap) Reset() {
 | 
					func (x *InclusionCommitmentsMap) Reset() {
 | 
				
			||||||
	*x = InclusionCommitmentsMap{}
 | 
						*x = InclusionCommitmentsMap{}
 | 
				
			||||||
	if protoimpl.UnsafeEnabled {
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
		mi := &file_ceremony_proto_msgTypes[20]
 | 
							mi := &file_ceremony_proto_msgTypes[21]
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		ms.StoreMessageInfo(mi)
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -1519,7 +1597,7 @@ func (x *InclusionCommitmentsMap) String() string {
 | 
				
			|||||||
func (*InclusionCommitmentsMap) ProtoMessage() {}
 | 
					func (*InclusionCommitmentsMap) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *InclusionCommitmentsMap) ProtoReflect() protoreflect.Message {
 | 
					func (x *InclusionCommitmentsMap) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
	mi := &file_ceremony_proto_msgTypes[20]
 | 
						mi := &file_ceremony_proto_msgTypes[21]
 | 
				
			||||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
		if ms.LoadMessageInfo() == nil {
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
@ -1532,7 +1610,7 @@ func (x *InclusionCommitmentsMap) ProtoReflect() protoreflect.Message {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Deprecated: Use InclusionCommitmentsMap.ProtoReflect.Descriptor instead.
 | 
					// Deprecated: Use InclusionCommitmentsMap.ProtoReflect.Descriptor instead.
 | 
				
			||||||
func (*InclusionCommitmentsMap) Descriptor() ([]byte, []int) {
 | 
					func (*InclusionCommitmentsMap) Descriptor() ([]byte, []int) {
 | 
				
			||||||
	return file_ceremony_proto_rawDescGZIP(), []int{20}
 | 
						return file_ceremony_proto_rawDescGZIP(), []int{21}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *InclusionCommitmentsMap) GetCommitment() []byte {
 | 
					func (x *InclusionCommitmentsMap) GetCommitment() []byte {
 | 
				
			||||||
@ -1893,88 +1971,104 @@ var file_ceremony_proto_rawDesc = []byte{
 | 
				
			|||||||
	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, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65,
 | 
						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,
 | 
						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,
 | 
						0x6e, 0x74, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x19, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75,
 | 
				
			||||||
	0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65,
 | 
						0x65, 0x73, 0x74, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
 | 
				
			||||||
	0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09,
 | 
						0x6e, 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, 0x63, 0x68,
 | 
				
			||||||
 | 
						0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63,
 | 
				
			||||||
 | 
						0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70,
 | 
				
			||||||
 | 
						0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 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, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74,
 | 
				
			||||||
 | 
						0x75, 0x72, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb2, 0x02,
 | 
				
			||||||
 | 
						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,
 | 
				
			||||||
 | 
						0x12, 0x60, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69,
 | 
				
			||||||
 | 
						0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 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, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
				
			||||||
 | 
						0x73, 0x74, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
 | 
				
			||||||
 | 
						0x48, 0x00, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69,
 | 
				
			||||||
 | 
						0x6f, 0x6e, 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,
 | 
						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,
 | 
						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,
 | 
						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,
 | 
						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,
 | 
						0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x51, 0x0a, 0x08,
 | 
				
			||||||
	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e,
 | 
						0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33,
 | 
				
			||||||
	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, 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,
 | 
					 | 
				
			||||||
	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70,
 | 
					 | 
				
			||||||
	0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a,
 | 
					 | 
				
			||||||
	0x1d, 0x4e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65,
 | 
					 | 
				
			||||||
	0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41,
 | 
					 | 
				
			||||||
	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, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72,
 | 
						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,
 | 
						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,
 | 
						0x79, 0x6e, 0x63, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42,
 | 
				
			||||||
	0x65, 0x1a, 0x42, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
						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, 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, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73,
 | 
						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,
 | 
						0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a, 0x1d, 0x4e, 0x65, 0x67,
 | 
				
			||||||
	0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74,
 | 
						0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64,
 | 
				
			||||||
	0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e,
 | 
						0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41, 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, 0x52,
 | 
				
			||||||
 | 
						0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 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, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68,
 | 
						0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65,
 | 
				
			||||||
	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e,
 | 
						0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79,
 | 
				
			||||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
						0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
 | 
				
			||||||
	0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68,
 | 
						0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c,
 | 
				
			||||||
	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x28, 0x01, 0x30,
 | 
						0x69, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
				
			||||||
	0x01, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
						0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e,
 | 
				
			||||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69,
 | 
						0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65,
 | 
				
			||||||
	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e,
 | 
						0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
				
			||||||
	0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70,
 | 
						0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e,
 | 
				
			||||||
	0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
						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 (
 | 
				
			||||||
@ -1989,7 +2083,7 @@ func file_ceremony_proto_rawDescGZIP() []byte {
 | 
				
			|||||||
	return file_ceremony_proto_rawDescData
 | 
						return file_ceremony_proto_rawDescData
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var file_ceremony_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
 | 
					var file_ceremony_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
 | 
				
			||||||
var file_ceremony_proto_goTypes = []interface{}{
 | 
					var file_ceremony_proto_goTypes = []interface{}{
 | 
				
			||||||
	(*CeremonyTranscript)(nil),                    // 0: quilibrium.node.ceremony.pb.CeremonyTranscript
 | 
						(*CeremonyTranscript)(nil),                    // 0: quilibrium.node.ceremony.pb.CeremonyTranscript
 | 
				
			||||||
	(*CeremonyLobbyState)(nil),                    // 1: quilibrium.node.ceremony.pb.CeremonyLobbyState
 | 
						(*CeremonyLobbyState)(nil),                    // 1: quilibrium.node.ceremony.pb.CeremonyLobbyState
 | 
				
			||||||
@ -2007,83 +2101,86 @@ var file_ceremony_proto_goTypes = []interface{}{
 | 
				
			|||||||
	(*CeremonyPeerListAnnounce)(nil),              // 13: quilibrium.node.ceremony.pb.CeremonyPeerListAnnounce
 | 
						(*CeremonyPeerListAnnounce)(nil),              // 13: quilibrium.node.ceremony.pb.CeremonyPeerListAnnounce
 | 
				
			||||||
	(*CeremonyPeer)(nil),                          // 14: quilibrium.node.ceremony.pb.CeremonyPeer
 | 
						(*CeremonyPeer)(nil),                          // 14: quilibrium.node.ceremony.pb.CeremonyPeer
 | 
				
			||||||
	(*CeremonyCompressedSync)(nil),                // 15: quilibrium.node.ceremony.pb.CeremonyCompressedSync
 | 
						(*CeremonyCompressedSync)(nil),                // 15: quilibrium.node.ceremony.pb.CeremonyCompressedSync
 | 
				
			||||||
	(*CeremonyCompressedSyncRequestMessage)(nil),  // 16: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage
 | 
						(*SyncRequestAuthentication)(nil),             // 16: quilibrium.node.ceremony.pb.SyncRequestAuthentication
 | 
				
			||||||
	(*CeremonyCompressedSyncResponseMessage)(nil), // 17: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage
 | 
						(*CeremonyCompressedSyncRequestMessage)(nil),  // 17: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage
 | 
				
			||||||
	(*InclusionProofsMap)(nil),                    // 18: quilibrium.node.ceremony.pb.InclusionProofsMap
 | 
						(*CeremonyCompressedSyncResponseMessage)(nil), // 18: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage
 | 
				
			||||||
	(*InclusionSegmentsMap)(nil),                  // 19: quilibrium.node.ceremony.pb.InclusionSegmentsMap
 | 
						(*InclusionProofsMap)(nil),                    // 19: quilibrium.node.ceremony.pb.InclusionProofsMap
 | 
				
			||||||
	(*InclusionCommitmentsMap)(nil),               // 20: quilibrium.node.ceremony.pb.InclusionCommitmentsMap
 | 
						(*InclusionSegmentsMap)(nil),                  // 20: quilibrium.node.ceremony.pb.InclusionSegmentsMap
 | 
				
			||||||
	(*BLS48581G1PublicKey)(nil),                   // 21: quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
						(*InclusionCommitmentsMap)(nil),               // 21: quilibrium.node.ceremony.pb.InclusionCommitmentsMap
 | 
				
			||||||
	(*BLS48581G2PublicKey)(nil),                   // 22: quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
						(*BLS48581G1PublicKey)(nil),                   // 22: quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
				
			||||||
	(*Ed448PublicKey)(nil),                        // 23: quilibrium.node.keys.pb.Ed448PublicKey
 | 
						(*BLS48581G2PublicKey)(nil),                   // 23: quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
				
			||||||
	(*Ed448Signature)(nil),                        // 24: quilibrium.node.keys.pb.Ed448Signature
 | 
						(*Ed448PublicKey)(nil),                        // 24: quilibrium.node.keys.pb.Ed448PublicKey
 | 
				
			||||||
	(*BLS48581Signature)(nil),                     // 25: quilibrium.node.keys.pb.BLS48581Signature
 | 
						(*Ed448Signature)(nil),                        // 25: quilibrium.node.keys.pb.Ed448Signature
 | 
				
			||||||
	(*X448PublicKey)(nil),                         // 26: quilibrium.node.keys.pb.X448PublicKey
 | 
						(*BLS48581Signature)(nil),                     // 26: quilibrium.node.keys.pb.BLS48581Signature
 | 
				
			||||||
	(*ClockFrame)(nil),                            // 27: quilibrium.node.clock.pb.ClockFrame
 | 
						(*X448PublicKey)(nil),                         // 27: quilibrium.node.keys.pb.X448PublicKey
 | 
				
			||||||
	(*ClockFramesPreflight)(nil),                  // 28: quilibrium.node.clock.pb.ClockFramesPreflight
 | 
						(*ClockFrame)(nil),                            // 28: quilibrium.node.clock.pb.ClockFrame
 | 
				
			||||||
	(*ClockFramesRequest)(nil),                    // 29: quilibrium.node.clock.pb.ClockFramesRequest
 | 
						(*ClockFramesPreflight)(nil),                  // 29: quilibrium.node.clock.pb.ClockFramesPreflight
 | 
				
			||||||
	(*P2PChannelEnvelope)(nil),                    // 30: quilibrium.node.channel.pb.P2PChannelEnvelope
 | 
						(*ClockFramesRequest)(nil),                    // 30: quilibrium.node.clock.pb.ClockFramesRequest
 | 
				
			||||||
 | 
						(*P2PChannelEnvelope)(nil),                    // 31: quilibrium.node.channel.pb.P2PChannelEnvelope
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
var file_ceremony_proto_depIdxs = []int32{
 | 
					var file_ceremony_proto_depIdxs = []int32{
 | 
				
			||||||
	21, // 0: quilibrium.node.ceremony.pb.CeremonyTranscript.g1_powers:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
						22, // 0: quilibrium.node.ceremony.pb.CeremonyTranscript.g1_powers:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
				
			||||||
	22, // 1: quilibrium.node.ceremony.pb.CeremonyTranscript.g2_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
						23, // 1: quilibrium.node.ceremony.pb.CeremonyTranscript.g2_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
				
			||||||
	21, // 2: quilibrium.node.ceremony.pb.CeremonyTranscript.running_g1_256_witnesses:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
						22, // 2: quilibrium.node.ceremony.pb.CeremonyTranscript.running_g1_256_witnesses:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
				
			||||||
	22, // 3: quilibrium.node.ceremony.pb.CeremonyTranscript.running_g2_256_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
						23, // 3: quilibrium.node.ceremony.pb.CeremonyTranscript.running_g2_256_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
				
			||||||
	9,  // 4: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_open_state:type_name -> quilibrium.node.ceremony.pb.CeremonyOpenState
 | 
						9,  // 4: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_open_state:type_name -> quilibrium.node.ceremony.pb.CeremonyOpenState
 | 
				
			||||||
	10, // 5: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_in_progress_state:type_name -> quilibrium.node.ceremony.pb.CeremonyInProgressState
 | 
						10, // 5: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_in_progress_state:type_name -> quilibrium.node.ceremony.pb.CeremonyInProgressState
 | 
				
			||||||
	11, // 6: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_finalizing_state:type_name -> quilibrium.node.ceremony.pb.CeremonyFinalizingState
 | 
						11, // 6: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_finalizing_state:type_name -> quilibrium.node.ceremony.pb.CeremonyFinalizingState
 | 
				
			||||||
	12, // 7: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_validating_state:type_name -> quilibrium.node.ceremony.pb.CeremonyValidatingState
 | 
						12, // 7: quilibrium.node.ceremony.pb.CeremonyLobbyState.ceremony_validating_state:type_name -> quilibrium.node.ceremony.pb.CeremonyValidatingState
 | 
				
			||||||
	0,  // 8: quilibrium.node.ceremony.pb.CeremonyLobbyState.latest_transcript:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscript
 | 
						0,  // 8: quilibrium.node.ceremony.pb.CeremonyLobbyState.latest_transcript:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscript
 | 
				
			||||||
	23, // 9: quilibrium.node.ceremony.pb.CeremonySeenProverAttestation.seen_prover_key:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
						24, // 9: quilibrium.node.ceremony.pb.CeremonySeenProverAttestation.seen_prover_key:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
				
			||||||
	24, // 10: quilibrium.node.ceremony.pb.CeremonySeenProverAttestation.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
						25, // 10: quilibrium.node.ceremony.pb.CeremonySeenProverAttestation.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
				
			||||||
	23, // 11: quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation.dropped_prover_key:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
						24, // 11: quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation.dropped_prover_key:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
				
			||||||
	24, // 12: quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
						25, // 12: quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
				
			||||||
	21, // 13: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g1_powers:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
						22, // 13: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g1_powers:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
				
			||||||
	22, // 14: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g2_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
						23, // 14: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g2_powers:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
				
			||||||
	21, // 15: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g1_256_witness:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
						22, // 15: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g1_256_witness:type_name -> quilibrium.node.keys.pb.BLS48581G1PublicKey
 | 
				
			||||||
	22, // 16: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g2_256_witness:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
						23, // 16: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.additive_g2_256_witness:type_name -> quilibrium.node.keys.pb.BLS48581G2PublicKey
 | 
				
			||||||
	24, // 17: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
						25, // 17: quilibrium.node.ceremony.pb.CeremonyTranscriptShare.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
				
			||||||
	24, // 18: quilibrium.node.ceremony.pb.CeremonyTranscriptCommit.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
						25, // 18: quilibrium.node.ceremony.pb.CeremonyTranscriptCommit.prover_signature:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
				
			||||||
	25, // 19: quilibrium.node.ceremony.pb.CeremonyTranscriptCommit.contribution_signature:type_name -> quilibrium.node.keys.pb.BLS48581Signature
 | 
						26, // 19: quilibrium.node.ceremony.pb.CeremonyTranscriptCommit.contribution_signature:type_name -> quilibrium.node.keys.pb.BLS48581Signature
 | 
				
			||||||
	5,  // 20: quilibrium.node.ceremony.pb.CeremonyAdvanceRound.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
 | 
						5,  // 20: quilibrium.node.ceremony.pb.CeremonyAdvanceRound.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
 | 
				
			||||||
	26, // 21: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.identity_key:type_name -> quilibrium.node.keys.pb.X448PublicKey
 | 
						27, // 21: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.identity_key:type_name -> quilibrium.node.keys.pb.X448PublicKey
 | 
				
			||||||
	26, // 22: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.signed_pre_key:type_name -> quilibrium.node.keys.pb.X448PublicKey
 | 
						27, // 22: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.signed_pre_key:type_name -> quilibrium.node.keys.pb.X448PublicKey
 | 
				
			||||||
	24, // 23: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.public_key_signature_ed448:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
						25, // 23: quilibrium.node.ceremony.pb.CeremonyLobbyJoin.public_key_signature_ed448:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
				
			||||||
	7,  // 24: quilibrium.node.ceremony.pb.CeremonyOpenState.joined_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
 | 
						7,  // 24: quilibrium.node.ceremony.pb.CeremonyOpenState.joined_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
 | 
				
			||||||
	23, // 25: quilibrium.node.ceremony.pb.CeremonyOpenState.preferred_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
						24, // 25: quilibrium.node.ceremony.pb.CeremonyOpenState.preferred_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
				
			||||||
	7,  // 26: quilibrium.node.ceremony.pb.CeremonyInProgressState.active_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
 | 
						7,  // 26: quilibrium.node.ceremony.pb.CeremonyInProgressState.active_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
 | 
				
			||||||
	2,  // 27: quilibrium.node.ceremony.pb.CeremonyInProgressState.latest_seen_prover_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonySeenProverAttestation
 | 
						2,  // 27: quilibrium.node.ceremony.pb.CeremonyInProgressState.latest_seen_prover_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonySeenProverAttestation
 | 
				
			||||||
	3,  // 28: quilibrium.node.ceremony.pb.CeremonyInProgressState.dropped_participant_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation
 | 
						3,  // 28: quilibrium.node.ceremony.pb.CeremonyInProgressState.dropped_participant_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation
 | 
				
			||||||
	6,  // 29: quilibrium.node.ceremony.pb.CeremonyInProgressState.transcript_round_advance_commits:type_name -> quilibrium.node.ceremony.pb.CeremonyAdvanceRound
 | 
						6,  // 29: quilibrium.node.ceremony.pb.CeremonyInProgressState.transcript_round_advance_commits:type_name -> quilibrium.node.ceremony.pb.CeremonyAdvanceRound
 | 
				
			||||||
	23, // 30: quilibrium.node.ceremony.pb.CeremonyInProgressState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
						24, // 30: quilibrium.node.ceremony.pb.CeremonyInProgressState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
				
			||||||
	7,  // 31: quilibrium.node.ceremony.pb.CeremonyFinalizingState.active_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
 | 
						7,  // 31: quilibrium.node.ceremony.pb.CeremonyFinalizingState.active_participants:type_name -> quilibrium.node.ceremony.pb.CeremonyLobbyJoin
 | 
				
			||||||
	2,  // 32: quilibrium.node.ceremony.pb.CeremonyFinalizingState.latest_seen_prover_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonySeenProverAttestation
 | 
						2,  // 32: quilibrium.node.ceremony.pb.CeremonyFinalizingState.latest_seen_prover_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonySeenProverAttestation
 | 
				
			||||||
	3,  // 33: quilibrium.node.ceremony.pb.CeremonyFinalizingState.dropped_participant_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation
 | 
						3,  // 33: quilibrium.node.ceremony.pb.CeremonyFinalizingState.dropped_participant_attestations:type_name -> quilibrium.node.ceremony.pb.CeremonyDroppedProverAttestation
 | 
				
			||||||
	5,  // 34: quilibrium.node.ceremony.pb.CeremonyFinalizingState.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
 | 
						5,  // 34: quilibrium.node.ceremony.pb.CeremonyFinalizingState.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
 | 
				
			||||||
	4,  // 35: quilibrium.node.ceremony.pb.CeremonyFinalizingState.shares:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptShare
 | 
						4,  // 35: quilibrium.node.ceremony.pb.CeremonyFinalizingState.shares:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptShare
 | 
				
			||||||
	23, // 36: quilibrium.node.ceremony.pb.CeremonyFinalizingState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
						24, // 36: quilibrium.node.ceremony.pb.CeremonyFinalizingState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
				
			||||||
	5,  // 37: quilibrium.node.ceremony.pb.CeremonyValidatingState.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
 | 
						5,  // 37: quilibrium.node.ceremony.pb.CeremonyValidatingState.commits:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscriptCommit
 | 
				
			||||||
	0,  // 38: quilibrium.node.ceremony.pb.CeremonyValidatingState.updated_transcript:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscript
 | 
						0,  // 38: quilibrium.node.ceremony.pb.CeremonyValidatingState.updated_transcript:type_name -> quilibrium.node.ceremony.pb.CeremonyTranscript
 | 
				
			||||||
	23, // 39: quilibrium.node.ceremony.pb.CeremonyValidatingState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
						24, // 39: quilibrium.node.ceremony.pb.CeremonyValidatingState.next_round_participants:type_name -> quilibrium.node.keys.pb.Ed448PublicKey
 | 
				
			||||||
	14, // 40: quilibrium.node.ceremony.pb.CeremonyPeerListAnnounce.peer_list:type_name -> quilibrium.node.ceremony.pb.CeremonyPeer
 | 
						14, // 40: quilibrium.node.ceremony.pb.CeremonyPeerListAnnounce.peer_list:type_name -> quilibrium.node.ceremony.pb.CeremonyPeer
 | 
				
			||||||
	27, // 41: quilibrium.node.ceremony.pb.CeremonyCompressedSync.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
						28, // 41: quilibrium.node.ceremony.pb.CeremonyCompressedSync.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
				
			||||||
	18, // 42: quilibrium.node.ceremony.pb.CeremonyCompressedSync.proofs:type_name -> quilibrium.node.ceremony.pb.InclusionProofsMap
 | 
						19, // 42: quilibrium.node.ceremony.pb.CeremonyCompressedSync.proofs:type_name -> quilibrium.node.ceremony.pb.InclusionProofsMap
 | 
				
			||||||
	19, // 43: quilibrium.node.ceremony.pb.CeremonyCompressedSync.segments:type_name -> quilibrium.node.ceremony.pb.InclusionSegmentsMap
 | 
						20, // 43: quilibrium.node.ceremony.pb.CeremonyCompressedSync.segments:type_name -> quilibrium.node.ceremony.pb.InclusionSegmentsMap
 | 
				
			||||||
	28, // 44: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.preflight:type_name -> quilibrium.node.clock.pb.ClockFramesPreflight
 | 
						25, // 44: quilibrium.node.ceremony.pb.SyncRequestAuthentication.response:type_name -> quilibrium.node.keys.pb.Ed448Signature
 | 
				
			||||||
	29, // 45: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.request:type_name -> quilibrium.node.clock.pb.ClockFramesRequest
 | 
						29, // 45: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.preflight:type_name -> quilibrium.node.clock.pb.ClockFramesPreflight
 | 
				
			||||||
	28, // 46: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage.preflight:type_name -> quilibrium.node.clock.pb.ClockFramesPreflight
 | 
						30, // 46: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.request:type_name -> quilibrium.node.clock.pb.ClockFramesRequest
 | 
				
			||||||
	15, // 47: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage.response:type_name -> quilibrium.node.ceremony.pb.CeremonyCompressedSync
 | 
						16, // 47: quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage.authentication:type_name -> quilibrium.node.ceremony.pb.SyncRequestAuthentication
 | 
				
			||||||
	20, // 48: quilibrium.node.ceremony.pb.InclusionProofsMap.commitments:type_name -> quilibrium.node.ceremony.pb.InclusionCommitmentsMap
 | 
						29, // 48: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage.preflight:type_name -> quilibrium.node.clock.pb.ClockFramesPreflight
 | 
				
			||||||
	29, // 49: quilibrium.node.ceremony.pb.CeremonyService.GetCompressedSyncFrames:input_type -> quilibrium.node.clock.pb.ClockFramesRequest
 | 
						15, // 49: quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage.response:type_name -> quilibrium.node.ceremony.pb.CeremonyCompressedSync
 | 
				
			||||||
	16, // 50: quilibrium.node.ceremony.pb.CeremonyService.NegotiateCompressedSyncFrames:input_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage
 | 
						21, // 50: quilibrium.node.ceremony.pb.InclusionProofsMap.commitments:type_name -> quilibrium.node.ceremony.pb.InclusionCommitmentsMap
 | 
				
			||||||
	30, // 51: quilibrium.node.ceremony.pb.CeremonyService.GetPublicChannel:input_type -> quilibrium.node.channel.pb.P2PChannelEnvelope
 | 
						30, // 51: quilibrium.node.ceremony.pb.CeremonyService.GetCompressedSyncFrames:input_type -> quilibrium.node.clock.pb.ClockFramesRequest
 | 
				
			||||||
	15, // 52: quilibrium.node.ceremony.pb.CeremonyService.GetCompressedSyncFrames:output_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSync
 | 
						17, // 52: quilibrium.node.ceremony.pb.CeremonyService.NegotiateCompressedSyncFrames:input_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSyncRequestMessage
 | 
				
			||||||
	17, // 53: quilibrium.node.ceremony.pb.CeremonyService.NegotiateCompressedSyncFrames:output_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage
 | 
						31, // 53: quilibrium.node.ceremony.pb.CeremonyService.GetPublicChannel:input_type -> quilibrium.node.channel.pb.P2PChannelEnvelope
 | 
				
			||||||
	30, // 54: quilibrium.node.ceremony.pb.CeremonyService.GetPublicChannel:output_type -> quilibrium.node.channel.pb.P2PChannelEnvelope
 | 
						15, // 54: quilibrium.node.ceremony.pb.CeremonyService.GetCompressedSyncFrames:output_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSync
 | 
				
			||||||
	52, // [52:55] is the sub-list for method output_type
 | 
						18, // 55: quilibrium.node.ceremony.pb.CeremonyService.NegotiateCompressedSyncFrames:output_type -> quilibrium.node.ceremony.pb.CeremonyCompressedSyncResponseMessage
 | 
				
			||||||
	49, // [49:52] is the sub-list for method input_type
 | 
						31, // 56: quilibrium.node.ceremony.pb.CeremonyService.GetPublicChannel:output_type -> quilibrium.node.channel.pb.P2PChannelEnvelope
 | 
				
			||||||
	49, // [49:49] is the sub-list for extension type_name
 | 
						54, // [54:57] is the sub-list for method output_type
 | 
				
			||||||
	49, // [49:49] is the sub-list for extension extendee
 | 
						51, // [51:54] is the sub-list for method input_type
 | 
				
			||||||
	0,  // [0:49] is the sub-list for field type_name
 | 
						51, // [51:51] is the sub-list for extension type_name
 | 
				
			||||||
 | 
						51, // [51:51] is the sub-list for extension extendee
 | 
				
			||||||
 | 
						0,  // [0:51] is the sub-list for field type_name
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() { file_ceremony_proto_init() }
 | 
					func init() { file_ceremony_proto_init() }
 | 
				
			||||||
@ -2288,7 +2385,7 @@ func file_ceremony_proto_init() {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		file_ceremony_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
 | 
							file_ceremony_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
			switch v := v.(*CeremonyCompressedSyncRequestMessage); i {
 | 
								switch v := v.(*SyncRequestAuthentication); i {
 | 
				
			||||||
			case 0:
 | 
								case 0:
 | 
				
			||||||
				return &v.state
 | 
									return &v.state
 | 
				
			||||||
			case 1:
 | 
								case 1:
 | 
				
			||||||
@ -2300,7 +2397,7 @@ func file_ceremony_proto_init() {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		file_ceremony_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
 | 
							file_ceremony_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
			switch v := v.(*CeremonyCompressedSyncResponseMessage); i {
 | 
								switch v := v.(*CeremonyCompressedSyncRequestMessage); i {
 | 
				
			||||||
			case 0:
 | 
								case 0:
 | 
				
			||||||
				return &v.state
 | 
									return &v.state
 | 
				
			||||||
			case 1:
 | 
								case 1:
 | 
				
			||||||
@ -2312,7 +2409,7 @@ func file_ceremony_proto_init() {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		file_ceremony_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
 | 
							file_ceremony_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
			switch v := v.(*InclusionProofsMap); i {
 | 
								switch v := v.(*CeremonyCompressedSyncResponseMessage); i {
 | 
				
			||||||
			case 0:
 | 
								case 0:
 | 
				
			||||||
				return &v.state
 | 
									return &v.state
 | 
				
			||||||
			case 1:
 | 
								case 1:
 | 
				
			||||||
@ -2324,7 +2421,7 @@ func file_ceremony_proto_init() {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		file_ceremony_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
 | 
							file_ceremony_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
			switch v := v.(*InclusionSegmentsMap); i {
 | 
								switch v := v.(*InclusionProofsMap); i {
 | 
				
			||||||
			case 0:
 | 
								case 0:
 | 
				
			||||||
				return &v.state
 | 
									return &v.state
 | 
				
			||||||
			case 1:
 | 
								case 1:
 | 
				
			||||||
@ -2336,6 +2433,18 @@ func file_ceremony_proto_init() {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		file_ceremony_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
 | 
							file_ceremony_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
 | 
								switch v := v.(*InclusionSegmentsMap); i {
 | 
				
			||||||
 | 
								case 0:
 | 
				
			||||||
 | 
									return &v.state
 | 
				
			||||||
 | 
								case 1:
 | 
				
			||||||
 | 
									return &v.sizeCache
 | 
				
			||||||
 | 
								case 2:
 | 
				
			||||||
 | 
									return &v.unknownFields
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							file_ceremony_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
			switch v := v.(*InclusionCommitmentsMap); i {
 | 
								switch v := v.(*InclusionCommitmentsMap); i {
 | 
				
			||||||
			case 0:
 | 
								case 0:
 | 
				
			||||||
				return &v.state
 | 
									return &v.state
 | 
				
			||||||
@ -2354,11 +2463,12 @@ func file_ceremony_proto_init() {
 | 
				
			|||||||
		(*CeremonyLobbyState_CeremonyFinalizingState)(nil),
 | 
							(*CeremonyLobbyState_CeremonyFinalizingState)(nil),
 | 
				
			||||||
		(*CeremonyLobbyState_CeremonyValidatingState)(nil),
 | 
							(*CeremonyLobbyState_CeremonyValidatingState)(nil),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	file_ceremony_proto_msgTypes[16].OneofWrappers = []interface{}{
 | 
						file_ceremony_proto_msgTypes[17].OneofWrappers = []interface{}{
 | 
				
			||||||
		(*CeremonyCompressedSyncRequestMessage_Preflight)(nil),
 | 
							(*CeremonyCompressedSyncRequestMessage_Preflight)(nil),
 | 
				
			||||||
		(*CeremonyCompressedSyncRequestMessage_Request)(nil),
 | 
							(*CeremonyCompressedSyncRequestMessage_Request)(nil),
 | 
				
			||||||
 | 
							(*CeremonyCompressedSyncRequestMessage_Authentication)(nil),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	file_ceremony_proto_msgTypes[17].OneofWrappers = []interface{}{
 | 
						file_ceremony_proto_msgTypes[18].OneofWrappers = []interface{}{
 | 
				
			||||||
		(*CeremonyCompressedSyncResponseMessage_Preflight)(nil),
 | 
							(*CeremonyCompressedSyncResponseMessage_Preflight)(nil),
 | 
				
			||||||
		(*CeremonyCompressedSyncResponseMessage_Response)(nil),
 | 
							(*CeremonyCompressedSyncResponseMessage_Response)(nil),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -2368,7 +2478,7 @@ func file_ceremony_proto_init() {
 | 
				
			|||||||
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 | 
								GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 | 
				
			||||||
			RawDescriptor: file_ceremony_proto_rawDesc,
 | 
								RawDescriptor: file_ceremony_proto_rawDesc,
 | 
				
			||||||
			NumEnums:      0,
 | 
								NumEnums:      0,
 | 
				
			||||||
			NumMessages:   21,
 | 
								NumMessages:   22,
 | 
				
			||||||
			NumExtensions: 0,
 | 
								NumExtensions: 0,
 | 
				
			||||||
			NumServices:   1,
 | 
								NumServices:   1,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
				
			|||||||
@ -151,10 +151,17 @@ message CeremonyCompressedSync {
 | 
				
			|||||||
  repeated InclusionSegmentsMap segments = 5;
 | 
					  repeated InclusionSegmentsMap segments = 5;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message SyncRequestAuthentication {
 | 
				
			||||||
 | 
					  bytes peer_id = 1;
 | 
				
			||||||
 | 
					  bytes challenge = 2;
 | 
				
			||||||
 | 
					  quilibrium.node.keys.pb.Ed448Signature response = 3;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
message CeremonyCompressedSyncRequestMessage {
 | 
					message CeremonyCompressedSyncRequestMessage {
 | 
				
			||||||
  oneof sync_message {
 | 
					  oneof sync_message {
 | 
				
			||||||
    quilibrium.node.clock.pb.ClockFramesPreflight preflight = 1;
 | 
					    quilibrium.node.clock.pb.ClockFramesPreflight preflight = 1;
 | 
				
			||||||
    quilibrium.node.clock.pb.ClockFramesRequest request = 2;
 | 
					    quilibrium.node.clock.pb.ClockFramesRequest request = 2;
 | 
				
			||||||
 | 
					    SyncRequestAuthentication authentication = 3; 
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1250,6 +1250,36 @@ func (p *PebbleClockStore) Compact(
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if dataFilter != nil {
 | 
						if dataFilter != nil {
 | 
				
			||||||
 | 
							if err := p.db.Compact(
 | 
				
			||||||
 | 
								dataProofMetadataKey(
 | 
				
			||||||
 | 
									dataFilter,
 | 
				
			||||||
 | 
									make([]byte, 74),
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
								dataProofMetadataKey(
 | 
				
			||||||
 | 
									dataFilter,
 | 
				
			||||||
 | 
									bytes.Repeat([]byte{0xff}, 74),
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
								true,
 | 
				
			||||||
 | 
							); err != nil {
 | 
				
			||||||
 | 
								return errors.Wrap(err, "compact")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err := p.db.Compact(
 | 
				
			||||||
 | 
								dataProofInclusionKey(
 | 
				
			||||||
 | 
									dataFilter,
 | 
				
			||||||
 | 
									make([]byte, 74),
 | 
				
			||||||
 | 
									0,
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
								dataProofInclusionKey(
 | 
				
			||||||
 | 
									dataFilter,
 | 
				
			||||||
 | 
									bytes.Repeat([]byte{0xff}, 74),
 | 
				
			||||||
 | 
									20000,
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
								true,
 | 
				
			||||||
 | 
							); err != nil {
 | 
				
			||||||
 | 
								return errors.Wrap(err, "compact")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := p.db.DeleteRange(
 | 
							if err := p.db.DeleteRange(
 | 
				
			||||||
			clockDataCandidateFrameKey(
 | 
								clockDataCandidateFrameKey(
 | 
				
			||||||
				dataFilter,
 | 
									dataFilter,
 | 
				
			||||||
 | 
				
			|||||||
@ -25,10 +25,11 @@ type DataProofStore interface {
 | 
				
			|||||||
		txn Transaction,
 | 
							txn Transaction,
 | 
				
			||||||
		aggregateProof *protobufs.InclusionAggregateProof,
 | 
							aggregateProof *protobufs.InclusionAggregateProof,
 | 
				
			||||||
		commitment []byte,
 | 
							commitment []byte,
 | 
				
			||||||
		inclusionSplitter func(typeUrl string, data []byte) ([][]byte, error),
 | 
					 | 
				
			||||||
	) error
 | 
						) error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var _ DataProofStore = (*PebbleDataProofStore)(nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type PebbleDataProofStore struct {
 | 
					type PebbleDataProofStore struct {
 | 
				
			||||||
	db     KVDB
 | 
						db     KVDB
 | 
				
			||||||
	logger *zap.Logger
 | 
						logger *zap.Logger
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user