mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 00:17:27 +00:00 
			
		
		
		
	v1.4.6 (#115)
* v1.4.6 * adjust connection manager for bootstrappers, go back to autoscale for resource
This commit is contained in:
		
							parent
							
								
									1fc27018b5
								
							
						
					
					
						commit
						644500bc42
					
				@ -887,11 +887,11 @@ func logoVersion(width int) string {
 | 
				
			|||||||
		out += "                          ''---..              ...---''               ##\n"
 | 
							out += "                          ''---..              ...---''               ##\n"
 | 
				
			||||||
		out += "                                 ''----------''\n"
 | 
							out += "                                 ''----------''\n"
 | 
				
			||||||
		out += " \n"
 | 
							out += " \n"
 | 
				
			||||||
		out += "                        Quilibrium Node - v1.4.5 – Sunset\n"
 | 
							out += "                        Quilibrium Node - v1.4.6 – Sunset\n"
 | 
				
			||||||
		out += " \n"
 | 
							out += " \n"
 | 
				
			||||||
		out += "                                   DB Console\n"
 | 
							out += "                                   DB Console\n"
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		out = "Quilibrium Node - v1.4.5 – Sunset - DB Console\n"
 | 
							out = "Quilibrium Node - v1.4.6 – Sunset - DB Console\n"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return out
 | 
						return out
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -77,7 +77,7 @@ func (n *Node) RunRepair() {
 | 
				
			|||||||
	if err == nil && head != nil {
 | 
						if err == nil && head != nil {
 | 
				
			||||||
		for head != nil && head.FrameNumber != 0 {
 | 
							for head != nil && head.FrameNumber != 0 {
 | 
				
			||||||
			prev := head
 | 
								prev := head
 | 
				
			||||||
			head, err = n.clockStore.GetParentDataClockFrame(
 | 
								head, err = n.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
				intrinsicFilter,
 | 
									intrinsicFilter,
 | 
				
			||||||
				head.FrameNumber-1,
 | 
									head.FrameNumber-1,
 | 
				
			||||||
				head.ParentSelector,
 | 
									head.ParentSelector,
 | 
				
			||||||
@ -99,11 +99,11 @@ func (n *Node) RunRepair() {
 | 
				
			|||||||
					"repairing frame",
 | 
										"repairing frame",
 | 
				
			||||||
					zap.Uint64("frame_number", head.FrameNumber),
 | 
										zap.Uint64("frame_number", head.FrameNumber),
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
				head, err = n.clockStore.GetParentDataClockFrame(
 | 
									head, err = n.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
					intrinsicFilter,
 | 
										intrinsicFilter,
 | 
				
			||||||
					prev.FrameNumber-1,
 | 
										prev.FrameNumber-1,
 | 
				
			||||||
					prev.ParentSelector,
 | 
										prev.ParentSelector,
 | 
				
			||||||
					false,
 | 
										true,
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					panic(err)
 | 
										panic(err)
 | 
				
			||||||
@ -114,7 +114,19 @@ func (n *Node) RunRepair() {
 | 
				
			|||||||
					panic(err)
 | 
										panic(err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				err = n.clockStore.PutDataClockFrame(head, proverTrie, txn, true)
 | 
									selector, err := head.GetSelector()
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										panic(err)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									err = n.clockStore.CommitDataClockFrame(
 | 
				
			||||||
 | 
										intrinsicFilter,
 | 
				
			||||||
 | 
										head.FrameNumber,
 | 
				
			||||||
 | 
										selector.FillBytes(make([]byte, 32)),
 | 
				
			||||||
 | 
										proverTrie,
 | 
				
			||||||
 | 
										txn,
 | 
				
			||||||
 | 
										true,
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					panic(err)
 | 
										panic(err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
				
			|||||||
@ -145,6 +145,10 @@ func (e *CeremonyDataClockConsensusEngine) handleCeremonyPeerListAnnounce(
 | 
				
			|||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if !bytes.Equal(p.PeerId, peerID) {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if p.PublicKey == nil || p.Signature == nil || p.Version == nil {
 | 
							if p.PublicKey == nil || p.Signature == nil || p.Version == nil {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -188,7 +192,7 @@ func (e *CeremonyDataClockConsensusEngine) handleCeremonyPeerListAnnounce(
 | 
				
			|||||||
					"peer provided outdated version, penalizing app score",
 | 
										"peer provided outdated version, penalizing app score",
 | 
				
			||||||
					zap.Binary("peer_id", p.PeerId),
 | 
										zap.Binary("peer_id", p.PeerId),
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
				e.pubSub.SetPeerScore(p.PeerId, -100)
 | 
									e.pubSub.SetPeerScore(p.PeerId, -10000)
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -306,6 +306,11 @@ func (e *CeremonyDataClockConsensusEngine) Start() <-chan error {
 | 
				
			|||||||
				panic(err)
 | 
									panic(err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								e.logger.Info(
 | 
				
			||||||
 | 
									"preparing peer announce",
 | 
				
			||||||
 | 
									zap.Uint64("frame_number", frame.FrameNumber),
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			timestamp := time.Now().UnixMilli()
 | 
								timestamp := time.Now().UnixMilli()
 | 
				
			||||||
			msg := binary.BigEndian.AppendUint64([]byte{}, frame.FrameNumber)
 | 
								msg := binary.BigEndian.AppendUint64([]byte{}, frame.FrameNumber)
 | 
				
			||||||
			msg = append(msg, consensus.GetVersion()...)
 | 
								msg = append(msg, consensus.GetVersion()...)
 | 
				
			||||||
 | 
				
			|||||||
@ -292,7 +292,7 @@ func (e *CeremonyDataClockConsensusEngine) sync(
 | 
				
			|||||||
	parentSelector := make([]byte, 32)
 | 
						parentSelector := make([]byte, 32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, selector := range preflight.Preflight.RangeParentSelectors {
 | 
						for _, selector := range preflight.Preflight.RangeParentSelectors {
 | 
				
			||||||
		match, err := e.clockStore.GetParentDataClockFrame(
 | 
							match, err := e.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
			e.filter,
 | 
								e.filter,
 | 
				
			||||||
			selector.FrameNumber,
 | 
								selector.FrameNumber,
 | 
				
			||||||
			selector.ParentSelector,
 | 
								selector.ParentSelector,
 | 
				
			||||||
@ -309,11 +309,38 @@ func (e *CeremonyDataClockConsensusEngine) sync(
 | 
				
			|||||||
		if match != nil && found == 0 {
 | 
							if match != nil && found == 0 {
 | 
				
			||||||
			found = match.FrameNumber
 | 
								found = match.FrameNumber
 | 
				
			||||||
			parentSelector = match.ParentSelector
 | 
								parentSelector = match.ParentSelector
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if found != 0 && !bytes.Equal(parentSelector, make([]byte, 32)) {
 | 
				
			||||||
 | 
							check, err := e.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
 | 
								e.filter,
 | 
				
			||||||
 | 
								found,
 | 
				
			||||||
 | 
								parentSelector,
 | 
				
			||||||
 | 
								true,
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								from = 1
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								e.logger.Info("checking interstitial continuity")
 | 
				
			||||||
 | 
								for check.FrameNumber > 1 {
 | 
				
			||||||
 | 
									check, err = e.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
 | 
										e.filter,
 | 
				
			||||||
 | 
										check.FrameNumber-1,
 | 
				
			||||||
 | 
										check.ParentSelector,
 | 
				
			||||||
 | 
										true,
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										from = 1
 | 
				
			||||||
 | 
										e.logger.Info(
 | 
				
			||||||
 | 
											"could not confirm interstitial continuity, setting search to 1",
 | 
				
			||||||
 | 
										)
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
	if found != 0 {
 | 
					 | 
				
			||||||
			from = found
 | 
								from = found
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = s.Send(&protobufs.CeremonyCompressedSyncRequestMessage{
 | 
						err = s.Send(&protobufs.CeremonyCompressedSyncRequestMessage{
 | 
				
			||||||
		SyncMessage: &protobufs.CeremonyCompressedSyncRequestMessage_Request{
 | 
							SyncMessage: &protobufs.CeremonyCompressedSyncRequestMessage_Request{
 | 
				
			||||||
 | 
				
			|||||||
@ -300,8 +300,6 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			return errors.Wrap(err, "get compressed sync frames")
 | 
								return errors.Wrap(err, "get compressed sync frames")
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			frames, err := e.clockStore.GetCandidateDataClockFrames(e.filter, from)
 | 
					 | 
				
			||||||
			if err != nil || len(frames) == 0 {
 | 
					 | 
				
			||||||
			e.logger.Debug(
 | 
								e.logger.Debug(
 | 
				
			||||||
				"peer asked for undiscovered frame",
 | 
									"peer asked for undiscovered frame",
 | 
				
			||||||
				zap.Uint64("frame_number", request.FromFrameNumber),
 | 
									zap.Uint64("frame_number", request.FromFrameNumber),
 | 
				
			||||||
@ -320,9 +318,6 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			return nil
 | 
								return nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			parent = nil
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if parent != nil {
 | 
						if parent != nil {
 | 
				
			||||||
@ -333,7 +328,7 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames(
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for !bytes.Equal(frame.ParentSelector, parent) {
 | 
							for !bytes.Equal(frame.ParentSelector, parent) {
 | 
				
			||||||
			ours, err := e.clockStore.GetParentDataClockFrame(
 | 
								ours, err := e.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
				e.filter,
 | 
									e.filter,
 | 
				
			||||||
				frame.FrameNumber-1,
 | 
									frame.FrameNumber-1,
 | 
				
			||||||
				frame.ParentSelector,
 | 
									frame.ParentSelector,
 | 
				
			||||||
@ -345,7 +340,7 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames(
 | 
				
			|||||||
				break
 | 
									break
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			theirs, err := e.clockStore.GetParentDataClockFrame(
 | 
								theirs, err := e.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
				e.filter,
 | 
									e.filter,
 | 
				
			||||||
				frame.FrameNumber-1,
 | 
									frame.FrameNumber-1,
 | 
				
			||||||
				parent,
 | 
									parent,
 | 
				
			||||||
@ -365,7 +360,7 @@ func (e *CeremonyDataClockConsensusEngine) GetCompressedSyncFrames(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if request.RangeParentSelectors != nil {
 | 
						if request.RangeParentSelectors != nil {
 | 
				
			||||||
		for _, selector := range request.RangeParentSelectors {
 | 
							for _, selector := range request.RangeParentSelectors {
 | 
				
			||||||
			frame, err := e.clockStore.GetParentDataClockFrame(
 | 
								frame, err := e.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
				e.filter,
 | 
									e.filter,
 | 
				
			||||||
				selector.FrameNumber,
 | 
									selector.FrameNumber,
 | 
				
			||||||
				selector.ParentSelector,
 | 
									selector.ParentSelector,
 | 
				
			||||||
 | 
				
			|||||||
@ -59,5 +59,5 @@ func GetMinimumVersion() []byte {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetVersion() []byte {
 | 
					func GetVersion() []byte {
 | 
				
			||||||
	return []byte{0x01, 0x04, 0x05}
 | 
						return []byte{0x01, 0x04, 0x06}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -183,7 +183,7 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if report.Cores < 3 || memory < 16000000000 {
 | 
						if report.Cores < 3 || memory < 16000000000 {
 | 
				
			||||||
		e.logger.Info(
 | 
							e.logger.Debug(
 | 
				
			||||||
			"peer reported invalid configuration",
 | 
								"peer reported invalid configuration",
 | 
				
			||||||
			zap.String("peer_id", base58.Encode(peerID)),
 | 
								zap.String("peer_id", base58.Encode(peerID)),
 | 
				
			||||||
			zap.Uint32("difficulty", report.Difficulty),
 | 
								zap.Uint32("difficulty", report.Difficulty),
 | 
				
			||||||
@ -208,7 +208,7 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	cc, err := e.pubSub.GetDirectChannel(peerID, "validation")
 | 
						cc, err := e.pubSub.GetDirectChannel(peerID, "validation")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		e.logger.Error(
 | 
							e.logger.Debug(
 | 
				
			||||||
			"could not connect for validation",
 | 
								"could not connect for validation",
 | 
				
			||||||
			zap.String("peer_id", base58.Encode(peerID)),
 | 
								zap.String("peer_id", base58.Encode(peerID)),
 | 
				
			||||||
			zap.Uint32("difficulty", report.Difficulty),
 | 
								zap.Uint32("difficulty", report.Difficulty),
 | 
				
			||||||
@ -245,7 +245,7 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
 | 
				
			|||||||
	cc.Close()
 | 
						cc.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !bytes.Equal(verification, validation.Validation) {
 | 
						if !bytes.Equal(verification, validation.Validation) {
 | 
				
			||||||
		e.logger.Error(
 | 
							e.logger.Debug(
 | 
				
			||||||
			"provided invalid verification",
 | 
								"provided invalid verification",
 | 
				
			||||||
			zap.String("peer_id", base58.Encode(peerID)),
 | 
								zap.String("peer_id", base58.Encode(peerID)),
 | 
				
			||||||
			zap.Uint32("difficulty", report.Difficulty),
 | 
								zap.Uint32("difficulty", report.Difficulty),
 | 
				
			||||||
@ -266,7 +266,7 @@ func (e *MasterClockConsensusEngine) handleSelfTestReport(
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if end-start > 2000 {
 | 
						if end-start > 2000 {
 | 
				
			||||||
		e.logger.Error(
 | 
							e.logger.Debug(
 | 
				
			||||||
			"slow bandwidth, scoring out",
 | 
								"slow bandwidth, scoring out",
 | 
				
			||||||
			zap.String("peer_id", base58.Encode(peerID)),
 | 
								zap.String("peer_id", base58.Encode(peerID)),
 | 
				
			||||||
			zap.Uint32("difficulty", report.Difficulty),
 | 
								zap.Uint32("difficulty", report.Difficulty),
 | 
				
			||||||
 | 
				
			|||||||
@ -56,6 +56,8 @@ type MasterClockConsensusEngine struct {
 | 
				
			|||||||
	report                      *protobufs.SelfTestReport
 | 
						report                      *protobufs.SelfTestReport
 | 
				
			||||||
	peerMapMx                   sync.Mutex
 | 
						peerMapMx                   sync.Mutex
 | 
				
			||||||
	peerMap                     map[string]*protobufs.SelfTestReport
 | 
						peerMap                     map[string]*protobufs.SelfTestReport
 | 
				
			||||||
 | 
						currentReceivingSyncPeers   int
 | 
				
			||||||
 | 
						currentReceivingSyncPeersMx sync.Mutex
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ consensus.ConsensusEngine = (*MasterClockConsensusEngine)(nil)
 | 
					var _ consensus.ConsensusEngine = (*MasterClockConsensusEngine)(nil)
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,22 @@ func (e *MasterClockConsensusEngine) Sync(
 | 
				
			|||||||
	request *protobufs.SyncRequest,
 | 
						request *protobufs.SyncRequest,
 | 
				
			||||||
	server protobufs.ValidationService_SyncServer,
 | 
						server protobufs.ValidationService_SyncServer,
 | 
				
			||||||
) error {
 | 
					) error {
 | 
				
			||||||
 | 
						e.currentReceivingSyncPeersMx.Lock()
 | 
				
			||||||
 | 
						if e.currentReceivingSyncPeers > 4 {
 | 
				
			||||||
 | 
							e.currentReceivingSyncPeersMx.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							e.logger.Debug("currently processing maximum sync requests, returning")
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						e.currentReceivingSyncPeers++
 | 
				
			||||||
 | 
						e.currentReceivingSyncPeersMx.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						defer func() {
 | 
				
			||||||
 | 
							e.currentReceivingSyncPeersMx.Lock()
 | 
				
			||||||
 | 
							e.currentReceivingSyncPeers--
 | 
				
			||||||
 | 
							e.currentReceivingSyncPeersMx.Unlock()
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	from := request.FramesRequest.FromFrameNumber
 | 
						from := request.FramesRequest.FromFrameNumber
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	masterFrame, err := e.masterTimeReel.Head()
 | 
						masterFrame, err := e.masterTimeReel.Head()
 | 
				
			||||||
 | 
				
			|||||||
@ -127,6 +127,7 @@ func (d *DataTimeReel) Start() error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if frame == nil {
 | 
						if frame == nil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		d.head, d.proverTrie = d.createGenesisFrame()
 | 
							d.head, d.proverTrie = d.createGenesisFrame()
 | 
				
			||||||
		d.totalDistance = big.NewInt(0)
 | 
							d.totalDistance = big.NewInt(0)
 | 
				
			||||||
		d.headDistance = big.NewInt(0)
 | 
							d.headDistance = big.NewInt(0)
 | 
				
			||||||
@ -239,13 +240,30 @@ func (d *DataTimeReel) createGenesisFrame() (
 | 
				
			|||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						selector, err := frame.GetSelector()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	txn, err := d.clockStore.NewTransaction()
 | 
						txn, err := d.clockStore.NewTransaction()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := d.clockStore.PutDataClockFrame(
 | 
						err = d.clockStore.StageDataClockFrame(
 | 
				
			||||||
 | 
							selector.FillBytes(make([]byte, 32)),
 | 
				
			||||||
		frame,
 | 
							frame,
 | 
				
			||||||
 | 
							txn,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							txn.Abort()
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := d.clockStore.CommitDataClockFrame(
 | 
				
			||||||
 | 
							d.filter,
 | 
				
			||||||
 | 
							0,
 | 
				
			||||||
 | 
							selector.FillBytes(make([]byte, 32)),
 | 
				
			||||||
		trie,
 | 
							trie,
 | 
				
			||||||
		txn,
 | 
							txn,
 | 
				
			||||||
		false,
 | 
							false,
 | 
				
			||||||
@ -294,7 +312,7 @@ func (d *DataTimeReel) runLoop() {
 | 
				
			|||||||
					panic(err)
 | 
										panic(err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				rawFrame, err := d.clockStore.GetParentDataClockFrame(
 | 
									rawFrame, err := d.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
					d.filter,
 | 
										d.filter,
 | 
				
			||||||
					frame.frameNumber,
 | 
										frame.frameNumber,
 | 
				
			||||||
					frame.selector.FillBytes(make([]byte, 32)),
 | 
										frame.selector.FillBytes(make([]byte, 32)),
 | 
				
			||||||
@ -341,7 +359,7 @@ func (d *DataTimeReel) runLoop() {
 | 
				
			|||||||
					continue
 | 
										continue
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				rawFrame, err := d.clockStore.GetParentDataClockFrame(
 | 
									rawFrame, err := d.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
					d.filter,
 | 
										d.filter,
 | 
				
			||||||
					frame.frameNumber,
 | 
										frame.frameNumber,
 | 
				
			||||||
					frame.selector.FillBytes(make([]byte, 32)),
 | 
										frame.selector.FillBytes(make([]byte, 32)),
 | 
				
			||||||
@ -460,7 +478,7 @@ func (d *DataTimeReel) storePending(
 | 
				
			|||||||
	frame *protobufs.ClockFrame,
 | 
						frame *protobufs.ClockFrame,
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
	// avoid db thrashing
 | 
						// avoid db thrashing
 | 
				
			||||||
	if existing, err := d.clockStore.GetParentDataClockFrame(
 | 
						if existing, err := d.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
		frame.Filter,
 | 
							frame.Filter,
 | 
				
			||||||
		frame.FrameNumber,
 | 
							frame.FrameNumber,
 | 
				
			||||||
		selector.FillBytes(make([]byte, 32)),
 | 
							selector.FillBytes(make([]byte, 32)),
 | 
				
			||||||
@ -478,9 +496,7 @@ func (d *DataTimeReel) storePending(
 | 
				
			|||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			panic(err)
 | 
								panic(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		err = d.clockStore.PutCandidateDataClockFrame(
 | 
							err = d.clockStore.StageDataClockFrame(
 | 
				
			||||||
			parent.FillBytes(make([]byte, 32)),
 | 
					 | 
				
			||||||
			distance.FillBytes(make([]byte, 32)),
 | 
					 | 
				
			||||||
			selector.FillBytes(make([]byte, 32)),
 | 
								selector.FillBytes(make([]byte, 32)),
 | 
				
			||||||
			frame,
 | 
								frame,
 | 
				
			||||||
			txn,
 | 
								txn,
 | 
				
			||||||
@ -578,8 +594,15 @@ func (d *DataTimeReel) setHead(frame *protobufs.ClockFrame, distance *big.Int) {
 | 
				
			|||||||
		zap.String("distance", distance.Text(16)),
 | 
							zap.String("distance", distance.Text(16)),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := d.clockStore.PutDataClockFrame(
 | 
						selector, err := frame.GetSelector()
 | 
				
			||||||
		frame,
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := d.clockStore.CommitDataClockFrame(
 | 
				
			||||||
 | 
							d.filter,
 | 
				
			||||||
 | 
							frame.FrameNumber,
 | 
				
			||||||
 | 
							selector.FillBytes(make([]byte, 32)),
 | 
				
			||||||
		d.proverTrie,
 | 
							d.proverTrie,
 | 
				
			||||||
		txn,
 | 
							txn,
 | 
				
			||||||
		false,
 | 
							false,
 | 
				
			||||||
@ -607,7 +630,7 @@ func (d *DataTimeReel) getTotalDistance(frame *protobufs.ClockFrame) *big.Int {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for index := frame; err == nil &&
 | 
						for index := frame; err == nil &&
 | 
				
			||||||
		index.FrameNumber > 0; index, err = d.clockStore.GetParentDataClockFrame(
 | 
							index.FrameNumber > 0; index, err = d.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
		d.filter,
 | 
							d.filter,
 | 
				
			||||||
		index.FrameNumber-1,
 | 
							index.FrameNumber-1,
 | 
				
			||||||
		index.ParentSelector,
 | 
							index.ParentSelector,
 | 
				
			||||||
@ -692,7 +715,7 @@ func (d *DataTimeReel) forkChoice(
 | 
				
			|||||||
			rightReplaySelectors...,
 | 
								rightReplaySelectors...,
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rightIndex, err = d.clockStore.GetParentDataClockFrame(
 | 
							rightIndex, err = d.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
			d.filter,
 | 
								d.filter,
 | 
				
			||||||
			rightIndex.FrameNumber-1,
 | 
								rightIndex.FrameNumber-1,
 | 
				
			||||||
			rightIndex.ParentSelector,
 | 
								rightIndex.ParentSelector,
 | 
				
			||||||
@ -737,7 +760,7 @@ func (d *DataTimeReel) forkChoice(
 | 
				
			|||||||
			),
 | 
								),
 | 
				
			||||||
			rightReplaySelectors...,
 | 
								rightReplaySelectors...,
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		leftIndex, err = d.clockStore.GetParentDataClockFrame(
 | 
							leftIndex, err = d.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
			d.filter,
 | 
								d.filter,
 | 
				
			||||||
			leftIndex.FrameNumber-1,
 | 
								leftIndex.FrameNumber-1,
 | 
				
			||||||
			leftIndex.ParentSelector,
 | 
								leftIndex.ParentSelector,
 | 
				
			||||||
@ -755,7 +778,7 @@ func (d *DataTimeReel) forkChoice(
 | 
				
			|||||||
			panic(err)
 | 
								panic(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rightIndex, err = d.clockStore.GetParentDataClockFrame(
 | 
							rightIndex, err = d.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
			d.filter,
 | 
								d.filter,
 | 
				
			||||||
			rightIndex.FrameNumber-1,
 | 
								rightIndex.FrameNumber-1,
 | 
				
			||||||
			rightIndex.ParentSelector,
 | 
								rightIndex.ParentSelector,
 | 
				
			||||||
@ -810,23 +833,15 @@ func (d *DataTimeReel) forkChoice(
 | 
				
			|||||||
		rightReplaySelectors =
 | 
							rightReplaySelectors =
 | 
				
			||||||
			rightReplaySelectors[1:]
 | 
								rightReplaySelectors[1:]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rightIndex, err = d.clockStore.GetParentDataClockFrame(
 | 
					 | 
				
			||||||
			d.filter,
 | 
					 | 
				
			||||||
			frameNumber,
 | 
					 | 
				
			||||||
			next,
 | 
					 | 
				
			||||||
			false,
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			panic(err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		txn, err := d.clockStore.NewTransaction()
 | 
							txn, err := d.clockStore.NewTransaction()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			panic(err)
 | 
								panic(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := d.clockStore.PutDataClockFrame(
 | 
							if err := d.clockStore.CommitDataClockFrame(
 | 
				
			||||||
			rightIndex,
 | 
								d.filter,
 | 
				
			||||||
 | 
								frameNumber,
 | 
				
			||||||
 | 
								next,
 | 
				
			||||||
			d.proverTrie,
 | 
								d.proverTrie,
 | 
				
			||||||
			txn,
 | 
								txn,
 | 
				
			||||||
			rightIndex.FrameNumber < d.head.FrameNumber,
 | 
								rightIndex.FrameNumber < d.head.FrameNumber,
 | 
				
			||||||
@ -846,8 +861,10 @@ func (d *DataTimeReel) forkChoice(
 | 
				
			|||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := d.clockStore.PutDataClockFrame(
 | 
						if err := d.clockStore.CommitDataClockFrame(
 | 
				
			||||||
		frame,
 | 
							d.filter,
 | 
				
			||||||
 | 
							frame.FrameNumber,
 | 
				
			||||||
 | 
							selector.FillBytes(make([]byte, 32)),
 | 
				
			||||||
		d.proverTrie,
 | 
							d.proverTrie,
 | 
				
			||||||
		txn,
 | 
							txn,
 | 
				
			||||||
		false,
 | 
							false,
 | 
				
			||||||
 | 
				
			|||||||
@ -1386,7 +1386,7 @@ func (e *CeremonyExecutionEngine) VerifyExecution(
 | 
				
			|||||||
						return errors.Wrap(err, "verify execution")
 | 
											return errors.Wrap(err, "verify execution")
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					parent, err := e.clockStore.GetParentDataClockFrame(
 | 
										parent, err := e.clockStore.GetStagedDataClockFrame(
 | 
				
			||||||
						append(
 | 
											append(
 | 
				
			||||||
							p2p.GetBloomFilter(application.CEREMONY_ADDRESS, 256, 3),
 | 
												p2p.GetBloomFilter(application.CEREMONY_ADDRESS, 256, 3),
 | 
				
			||||||
							p2p.GetBloomFilterIndices(
 | 
												p2p.GetBloomFilterIndices(
 | 
				
			||||||
 | 
				
			|||||||
@ -523,5 +523,5 @@ func printLogo() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func printVersion() {
 | 
					func printVersion() {
 | 
				
			||||||
	fmt.Println(" ")
 | 
						fmt.Println(" ")
 | 
				
			||||||
	fmt.Println("                       Quilibrium Node - v1.4.5 – Sunset")
 | 
						fmt.Println("                       Quilibrium Node - v1.4.6 – Sunset")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -22,7 +22,6 @@ import (
 | 
				
			|||||||
	"github.com/libp2p/go-libp2p/core/protocol"
 | 
						"github.com/libp2p/go-libp2p/core/protocol"
 | 
				
			||||||
	"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"
 | 
				
			||||||
	rcmgr "github.com/libp2p/go-libp2p/p2p/host/resource-manager"
 | 
					 | 
				
			||||||
	"github.com/libp2p/go-libp2p/p2p/net/connmgr"
 | 
						"github.com/libp2p/go-libp2p/p2p/net/connmgr"
 | 
				
			||||||
	"github.com/mr-tron/base58"
 | 
						"github.com/mr-tron/base58"
 | 
				
			||||||
	"github.com/pkg/errors"
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
@ -108,24 +107,12 @@ func NewBlossomSub(
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if isBootstrapPeer {
 | 
						if isBootstrapPeer {
 | 
				
			||||||
		limits := rcmgr.DefaultLimits
 | 
							mgr, err := connmgr.NewConnManager(512, 8192)
 | 
				
			||||||
		libp2p.SetDefaultServiceLimits(&limits)
 | 
					 | 
				
			||||||
		limits.SystemBaseLimit.ConnsInbound = 2048
 | 
					 | 
				
			||||||
		limits.SystemBaseLimit.StreamsInbound = 2048
 | 
					 | 
				
			||||||
		rmgr, err := rcmgr.NewResourceManager(
 | 
					 | 
				
			||||||
			rcmgr.NewFixedLimiter(limits.AutoScale()),
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			panic(err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		mgr, err := connmgr.NewConnManager(512, 2048)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			panic(err)
 | 
								panic(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		opts = append(opts,
 | 
							opts = append(opts,
 | 
				
			||||||
			libp2p.ResourceManager(rmgr),
 | 
					 | 
				
			||||||
			libp2p.ConnectionManager(mgr),
 | 
								libp2p.ConnectionManager(mgr),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -576,7 +563,7 @@ func discoverPeers(
 | 
				
			|||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			logger.Info("found peer", zap.String("peer_id", peer.ID.Pretty()))
 | 
								logger.Debug("found peer", zap.String("peer_id", peer.ID.Pretty()))
 | 
				
			||||||
			err := h.Connect(ctx, peer)
 | 
								err := h.Connect(ctx, peer)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				logger.Debug(
 | 
									logger.Debug(
 | 
				
			||||||
@ -585,7 +572,7 @@ func discoverPeers(
 | 
				
			|||||||
					zap.Error(err),
 | 
										zap.Error(err),
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				logger.Info(
 | 
									logger.Debug(
 | 
				
			||||||
					"connected to peer",
 | 
										"connected to peer",
 | 
				
			||||||
					zap.String("peer_id", peer.ID.Pretty()),
 | 
										zap.String("peer_id", peer.ID.Pretty()),
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
 | 
				
			|||||||
@ -70,27 +70,6 @@ func (r *RPCServer) GetFrameInfo(
 | 
				
			|||||||
			ClockFrame: frame,
 | 
								ClockFrame: frame,
 | 
				
			||||||
		}, nil
 | 
							}, nil
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		frames, err := r.clockStore.GetCandidateDataClockFrames(
 | 
					 | 
				
			||||||
			req.Filter,
 | 
					 | 
				
			||||||
			req.FrameNumber,
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, errors.Wrap(err, "get frame info")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		for _, frame := range frames {
 | 
					 | 
				
			||||||
			selector, err := frame.GetSelector()
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				return nil, errors.Wrap(err, "get frame info")
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if bytes.Equal(selector.Bytes(), req.Selector) {
 | 
					 | 
				
			||||||
				return &protobufs.FrameInfoResponse{
 | 
					 | 
				
			||||||
					ClockFrame: frame,
 | 
					 | 
				
			||||||
				}, nil
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(errors.New("not found"), "get frame info")
 | 
							return nil, errors.Wrap(errors.New("not found"), "get frame info")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -151,44 +130,6 @@ func (r *RPCServer) GetFrames(
 | 
				
			|||||||
			return nil, errors.Wrap(err, "get frames")
 | 
								return nil, errors.Wrap(err, "get frames")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if req.IncludeCandidates {
 | 
					 | 
				
			||||||
			from := req.FromFrameNumber
 | 
					 | 
				
			||||||
			if len(frames) > 0 {
 | 
					 | 
				
			||||||
				from = frames[len(frames)-1].FrameNumber + 1
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			for from < req.ToFrameNumber {
 | 
					 | 
				
			||||||
				iter, err := r.clockStore.RangeCandidateDataClockFrames(
 | 
					 | 
				
			||||||
					req.Filter,
 | 
					 | 
				
			||||||
					[]byte{
 | 
					 | 
				
			||||||
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
						0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					from,
 | 
					 | 
				
			||||||
				)
 | 
					 | 
				
			||||||
				if err != nil {
 | 
					 | 
				
			||||||
					return nil, errors.Wrap(err, "get frames")
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				for iter.First(); iter.Valid(); iter.Next() {
 | 
					 | 
				
			||||||
					frame, err := iter.TruncatedValue()
 | 
					 | 
				
			||||||
					if err != nil {
 | 
					 | 
				
			||||||
						iter.Close()
 | 
					 | 
				
			||||||
						return nil, errors.Wrap(err, "get frames")
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					frames = append(frames, frame)
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				if err := iter.Close(); err != nil {
 | 
					 | 
				
			||||||
					return nil, errors.Wrap(err, "get frames")
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				from++
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return &protobufs.FramesResponse{
 | 
							return &protobufs.FramesResponse{
 | 
				
			||||||
			TruncatedClockFrames: frames,
 | 
								TruncatedClockFrames: frames,
 | 
				
			||||||
		}, nil
 | 
							}, nil
 | 
				
			||||||
@ -289,17 +230,15 @@ func (r *RPCServer) GetTokenInfo(
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	confirmedTotal := new(big.Int)
 | 
						confirmedTotal := new(big.Int)
 | 
				
			||||||
	unconfirmedTotal := new(big.Int)
 | 
					 | 
				
			||||||
	ownedTotal := new(big.Int)
 | 
						ownedTotal := new(big.Int)
 | 
				
			||||||
	unconfirmedOwnedTotal := new(big.Int)
 | 
					 | 
				
			||||||
	if confirmed.RewardTrie.Root == nil ||
 | 
						if confirmed.RewardTrie.Root == nil ||
 | 
				
			||||||
		(confirmed.RewardTrie.Root.External == nil &&
 | 
							(confirmed.RewardTrie.Root.External == nil &&
 | 
				
			||||||
			confirmed.RewardTrie.Root.Internal == nil) {
 | 
								confirmed.RewardTrie.Root.Internal == nil) {
 | 
				
			||||||
		return &protobufs.TokenInfoResponse{
 | 
							return &protobufs.TokenInfoResponse{
 | 
				
			||||||
			ConfirmedTokenSupply:   confirmedTotal.FillBytes(make([]byte, 32)),
 | 
								ConfirmedTokenSupply:   confirmedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
			UnconfirmedTokenSupply: unconfirmedTotal.FillBytes(make([]byte, 32)),
 | 
								UnconfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
			OwnedTokens:            ownedTotal.FillBytes(make([]byte, 32)),
 | 
								OwnedTokens:            ownedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
			UnconfirmedOwnedTokens: unconfirmedOwnedTotal.FillBytes(make([]byte, 32)),
 | 
								UnconfirmedOwnedTokens: ownedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
		}, nil
 | 
							}, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -358,78 +297,10 @@ func (r *RPCServer) GetTokenInfo(
 | 
				
			|||||||
		limbs = nextLimbs
 | 
							limbs = nextLimbs
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	candidateFrame, err := r.clockStore.GetHighestCandidateDataClockFrame(
 | 
					 | 
				
			||||||
		append(
 | 
					 | 
				
			||||||
			p2p.GetBloomFilter(application.CEREMONY_ADDRESS, 256, 3),
 | 
					 | 
				
			||||||
			p2p.GetBloomFilterIndices(application.CEREMONY_ADDRESS, 65536, 24)...,
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, errors.Wrap(err, "get token info")
 | 
							return nil, errors.Wrap(err, "get token info")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unconfirmed, err := application.MaterializeApplicationFromFrame(
 | 
					 | 
				
			||||||
		candidateFrame,
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "get token info")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	limbs = []*tries.RewardInternalNode{}
 | 
					 | 
				
			||||||
	if unconfirmed.RewardTrie.Root.Internal != nil {
 | 
					 | 
				
			||||||
		limbs = append(limbs, unconfirmed.RewardTrie.Root.Internal)
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		unconfirmedTotal = unconfirmedTotal.Add(
 | 
					 | 
				
			||||||
			unconfirmedTotal,
 | 
					 | 
				
			||||||
			new(big.Int).SetUint64(unconfirmed.RewardTrie.Root.External.Total),
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
		if bytes.Equal(
 | 
					 | 
				
			||||||
			unconfirmed.RewardTrie.Root.External.Key,
 | 
					 | 
				
			||||||
			addrBytes,
 | 
					 | 
				
			||||||
		) {
 | 
					 | 
				
			||||||
			unconfirmedOwnedTotal = unconfirmedOwnedTotal.Add(
 | 
					 | 
				
			||||||
				unconfirmedOwnedTotal,
 | 
					 | 
				
			||||||
				new(big.Int).SetUint64(unconfirmed.RewardTrie.Root.External.Total),
 | 
					 | 
				
			||||||
			)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for len(limbs) != 0 {
 | 
					 | 
				
			||||||
		nextLimbs := []*tries.RewardInternalNode{}
 | 
					 | 
				
			||||||
		for _, limb := range limbs {
 | 
					 | 
				
			||||||
			for _, child := range limb.Child {
 | 
					 | 
				
			||||||
				child := child
 | 
					 | 
				
			||||||
				if child.Internal != nil {
 | 
					 | 
				
			||||||
					nextLimbs = append(nextLimbs, child.Internal)
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					unconfirmedTotal = unconfirmedTotal.Add(
 | 
					 | 
				
			||||||
						unconfirmedTotal,
 | 
					 | 
				
			||||||
						new(big.Int).SetUint64(child.External.Total),
 | 
					 | 
				
			||||||
					)
 | 
					 | 
				
			||||||
					if bytes.Equal(
 | 
					 | 
				
			||||||
						child.External.Key,
 | 
					 | 
				
			||||||
						addrBytes,
 | 
					 | 
				
			||||||
					) {
 | 
					 | 
				
			||||||
						unconfirmedOwnedTotal = unconfirmedOwnedTotal.Add(
 | 
					 | 
				
			||||||
							unconfirmedOwnedTotal,
 | 
					 | 
				
			||||||
							new(big.Int).SetUint64(child.External.Total),
 | 
					 | 
				
			||||||
						)
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					if bytes.Equal(
 | 
					 | 
				
			||||||
						child.External.Key,
 | 
					 | 
				
			||||||
						peerAddrBytes,
 | 
					 | 
				
			||||||
					) {
 | 
					 | 
				
			||||||
						unconfirmedOwnedTotal = unconfirmedOwnedTotal.Add(
 | 
					 | 
				
			||||||
							unconfirmedOwnedTotal,
 | 
					 | 
				
			||||||
							new(big.Int).SetUint64(child.External.Total),
 | 
					 | 
				
			||||||
						)
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		limbs = nextLimbs
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// 1 QUIL = 0x1DCD65000 units
 | 
						// 1 QUIL = 0x1DCD65000 units
 | 
				
			||||||
	conversionFactor, ok := new(big.Int).SetString("1DCD65000", 16)
 | 
						conversionFactor, ok := new(big.Int).SetString("1DCD65000", 16)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
@ -437,18 +308,13 @@ func (r *RPCServer) GetTokenInfo(
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	confirmedTotal = confirmedTotal.Mul(confirmedTotal, conversionFactor)
 | 
						confirmedTotal = confirmedTotal.Mul(confirmedTotal, conversionFactor)
 | 
				
			||||||
	unconfirmedTotal = unconfirmedTotal.Mul(unconfirmedTotal, conversionFactor)
 | 
					 | 
				
			||||||
	ownedTotal = ownedTotal.Mul(ownedTotal, conversionFactor)
 | 
						ownedTotal = ownedTotal.Mul(ownedTotal, conversionFactor)
 | 
				
			||||||
	unconfirmedOwnedTotal = unconfirmedOwnedTotal.Mul(
 | 
					 | 
				
			||||||
		unconfirmedOwnedTotal,
 | 
					 | 
				
			||||||
		conversionFactor,
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &protobufs.TokenInfoResponse{
 | 
						return &protobufs.TokenInfoResponse{
 | 
				
			||||||
		ConfirmedTokenSupply:   confirmedTotal.FillBytes(make([]byte, 32)),
 | 
							ConfirmedTokenSupply:   confirmedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
		UnconfirmedTokenSupply: unconfirmedTotal.FillBytes(make([]byte, 32)),
 | 
							UnconfirmedTokenSupply: confirmedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
		OwnedTokens:            ownedTotal.FillBytes(make([]byte, 32)),
 | 
							OwnedTokens:            ownedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
		UnconfirmedOwnedTokens: unconfirmedOwnedTotal.FillBytes(make([]byte, 32)),
 | 
							UnconfirmedOwnedTokens: ownedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -32,9 +32,6 @@ type ClockStore interface {
 | 
				
			|||||||
		filter []byte,
 | 
							filter []byte,
 | 
				
			||||||
		proverTrie *tries.RollingFrecencyCritbitTrie,
 | 
							proverTrie *tries.RollingFrecencyCritbitTrie,
 | 
				
			||||||
	) (*protobufs.ClockFrame, error)
 | 
						) (*protobufs.ClockFrame, error)
 | 
				
			||||||
	GetLatestCandidateDataClockFrame(
 | 
					 | 
				
			||||||
		filter []byte,
 | 
					 | 
				
			||||||
	) (*protobufs.ClockFrame, error)
 | 
					 | 
				
			||||||
	GetEarliestDataClockFrame(filter []byte) (*protobufs.ClockFrame, error)
 | 
						GetEarliestDataClockFrame(filter []byte) (*protobufs.ClockFrame, error)
 | 
				
			||||||
	GetDataClockFrame(
 | 
						GetDataClockFrame(
 | 
				
			||||||
		filter []byte,
 | 
							filter []byte,
 | 
				
			||||||
@ -46,45 +43,25 @@ type ClockStore interface {
 | 
				
			|||||||
		startFrameNumber uint64,
 | 
							startFrameNumber uint64,
 | 
				
			||||||
		endFrameNumber uint64,
 | 
							endFrameNumber uint64,
 | 
				
			||||||
	) (*PebbleClockIterator, error)
 | 
						) (*PebbleClockIterator, error)
 | 
				
			||||||
	PutDataClockFrame(
 | 
						CommitDataClockFrame(
 | 
				
			||||||
		frame *protobufs.ClockFrame,
 | 
							filter []byte,
 | 
				
			||||||
 | 
							frameNumber uint64,
 | 
				
			||||||
 | 
							selector []byte,
 | 
				
			||||||
		proverTrie *tries.RollingFrecencyCritbitTrie,
 | 
							proverTrie *tries.RollingFrecencyCritbitTrie,
 | 
				
			||||||
		txn Transaction,
 | 
							txn Transaction,
 | 
				
			||||||
		backfill bool,
 | 
							backfill bool,
 | 
				
			||||||
	) error
 | 
						) error
 | 
				
			||||||
	PutCandidateDataClockFrame(
 | 
						StageDataClockFrame(
 | 
				
			||||||
		parentSelector []byte,
 | 
					 | 
				
			||||||
		distance []byte,
 | 
					 | 
				
			||||||
		selector []byte,
 | 
							selector []byte,
 | 
				
			||||||
		frame *protobufs.ClockFrame,
 | 
							frame *protobufs.ClockFrame,
 | 
				
			||||||
		txn Transaction,
 | 
							txn Transaction,
 | 
				
			||||||
	) error
 | 
						) error
 | 
				
			||||||
	GetCandidateDataClockFrame(
 | 
						GetStagedDataClockFrame(
 | 
				
			||||||
		filter []byte,
 | 
					 | 
				
			||||||
		frameNumber uint64,
 | 
					 | 
				
			||||||
		parentSelector []byte,
 | 
					 | 
				
			||||||
		distance []byte,
 | 
					 | 
				
			||||||
	) (*protobufs.ClockFrame, error)
 | 
					 | 
				
			||||||
	GetCandidateDataClockFrames(
 | 
					 | 
				
			||||||
		filter []byte,
 | 
					 | 
				
			||||||
		frameNumber uint64,
 | 
					 | 
				
			||||||
	) ([]*protobufs.ClockFrame, error)
 | 
					 | 
				
			||||||
	GetParentDataClockFrame(
 | 
					 | 
				
			||||||
		filter []byte,
 | 
							filter []byte,
 | 
				
			||||||
		frameNumber uint64,
 | 
							frameNumber uint64,
 | 
				
			||||||
		parentSelector []byte,
 | 
							parentSelector []byte,
 | 
				
			||||||
		truncate bool,
 | 
							truncate bool,
 | 
				
			||||||
	) (*protobufs.ClockFrame, error)
 | 
						) (*protobufs.ClockFrame, error)
 | 
				
			||||||
	RangeCandidateDataClockFrames(
 | 
					 | 
				
			||||||
		filter []byte,
 | 
					 | 
				
			||||||
		parent []byte,
 | 
					 | 
				
			||||||
		frameNumber uint64,
 | 
					 | 
				
			||||||
	) (*PebbleCandidateClockIterator, error)
 | 
					 | 
				
			||||||
	GetLeadingCandidateDataClockFrame(
 | 
					 | 
				
			||||||
		filter []byte,
 | 
					 | 
				
			||||||
		parent []byte,
 | 
					 | 
				
			||||||
		frameNumber uint64,
 | 
					 | 
				
			||||||
	) (*protobufs.ClockFrame, error)
 | 
					 | 
				
			||||||
	Deduplicate(filter []byte) error
 | 
						Deduplicate(filter []byte) error
 | 
				
			||||||
	GetCompressedDataClockFrames(
 | 
						GetCompressedDataClockFrames(
 | 
				
			||||||
		filter []byte,
 | 
							filter []byte,
 | 
				
			||||||
@ -95,14 +72,6 @@ type ClockStore interface {
 | 
				
			|||||||
		filter []byte,
 | 
							filter []byte,
 | 
				
			||||||
		frameNumber uint64,
 | 
							frameNumber uint64,
 | 
				
			||||||
	) error
 | 
						) error
 | 
				
			||||||
	DeleteCandidateDataClockFrameRange(
 | 
					 | 
				
			||||||
		filter []byte,
 | 
					 | 
				
			||||||
		fromFrameNumber uint64,
 | 
					 | 
				
			||||||
		toFrameNumber uint64,
 | 
					 | 
				
			||||||
	) error
 | 
					 | 
				
			||||||
	GetHighestCandidateDataClockFrame(
 | 
					 | 
				
			||||||
		filter []byte,
 | 
					 | 
				
			||||||
	) (*protobufs.ClockFrame, error)
 | 
					 | 
				
			||||||
	ResetMasterClockFrames(filter []byte) error
 | 
						ResetMasterClockFrames(filter []byte) error
 | 
				
			||||||
	ResetDataClockFrames(filter []byte) error
 | 
						ResetDataClockFrames(filter []byte) error
 | 
				
			||||||
	Compact(
 | 
						Compact(
 | 
				
			||||||
@ -127,14 +96,8 @@ type PebbleClockIterator struct {
 | 
				
			|||||||
	db *PebbleClockStore
 | 
						db *PebbleClockStore
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type PebbleCandidateClockIterator struct {
 | 
					 | 
				
			||||||
	i  Iterator
 | 
					 | 
				
			||||||
	db *PebbleClockStore
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var _ TypedIterator[*protobufs.ClockFrame] = (*PebbleMasterClockIterator)(nil)
 | 
					var _ TypedIterator[*protobufs.ClockFrame] = (*PebbleMasterClockIterator)(nil)
 | 
				
			||||||
var _ TypedIterator[*protobufs.ClockFrame] = (*PebbleClockIterator)(nil)
 | 
					var _ TypedIterator[*protobufs.ClockFrame] = (*PebbleClockIterator)(nil)
 | 
				
			||||||
var _ TypedIterator[*protobufs.ClockFrame] = (*PebbleCandidateClockIterator)(nil)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *PebbleMasterClockIterator) First() bool {
 | 
					func (p *PebbleMasterClockIterator) First() bool {
 | 
				
			||||||
	return p.i.First()
 | 
						return p.i.First()
 | 
				
			||||||
@ -247,7 +210,7 @@ func (p *PebbleClockIterator) Value() (*protobufs.ClockFrame, error) {
 | 
				
			|||||||
		)
 | 
							)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := p.db.fillAggregateProofs(frame); err != nil {
 | 
						if err := p.db.fillAggregateProofs(frame, false); err != nil {
 | 
				
			||||||
		return nil, errors.Wrap(
 | 
							return nil, errors.Wrap(
 | 
				
			||||||
			errors.Wrap(err, ErrInvalidData.Error()),
 | 
								errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
			"get clock frame iterator value",
 | 
								"get clock frame iterator value",
 | 
				
			||||||
@ -261,66 +224,6 @@ func (p *PebbleClockIterator) Close() error {
 | 
				
			|||||||
	return errors.Wrap(p.i.Close(), "closing clock frame iterator")
 | 
						return errors.Wrap(p.i.Close(), "closing clock frame iterator")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *PebbleCandidateClockIterator) First() bool {
 | 
					 | 
				
			||||||
	return p.i.First()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (p *PebbleCandidateClockIterator) Next() bool {
 | 
					 | 
				
			||||||
	return p.i.Next()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (p *PebbleCandidateClockIterator) Valid() bool {
 | 
					 | 
				
			||||||
	return p.i.Valid()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (p *PebbleCandidateClockIterator) TruncatedValue() (
 | 
					 | 
				
			||||||
	*protobufs.ClockFrame,
 | 
					 | 
				
			||||||
	error,
 | 
					 | 
				
			||||||
) {
 | 
					 | 
				
			||||||
	if !p.i.Valid() {
 | 
					 | 
				
			||||||
		return nil, ErrNotFound
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	value := p.i.Value()
 | 
					 | 
				
			||||||
	frame := &protobufs.ClockFrame{}
 | 
					 | 
				
			||||||
	if err := proto.Unmarshal(value, frame); err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(
 | 
					 | 
				
			||||||
			errors.Wrap(err, ErrInvalidData.Error()),
 | 
					 | 
				
			||||||
			"get candidate clock frame iterator value",
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return frame, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (p *PebbleCandidateClockIterator) Value() (*protobufs.ClockFrame, error) {
 | 
					 | 
				
			||||||
	if !p.i.Valid() {
 | 
					 | 
				
			||||||
		return nil, ErrNotFound
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	value := p.i.Value()
 | 
					 | 
				
			||||||
	frame := &protobufs.ClockFrame{}
 | 
					 | 
				
			||||||
	if err := proto.Unmarshal(value, frame); err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(
 | 
					 | 
				
			||||||
			errors.Wrap(err, ErrInvalidData.Error()),
 | 
					 | 
				
			||||||
			"get candidate clock frame iterator value",
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := p.db.fillAggregateProofs(frame); err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(
 | 
					 | 
				
			||||||
			errors.Wrap(err, ErrInvalidData.Error()),
 | 
					 | 
				
			||||||
			"get clock frame iterator value",
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return frame, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (p *PebbleCandidateClockIterator) Close() error {
 | 
					 | 
				
			||||||
	return errors.Wrap(p.i.Close(), "closing candidate clock frame iterator")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func NewPebbleClockStore(db KVDB, logger *zap.Logger) *PebbleClockStore {
 | 
					func NewPebbleClockStore(db KVDB, logger *zap.Logger) *PebbleClockStore {
 | 
				
			||||||
	return &PebbleClockStore{
 | 
						return &PebbleClockStore{
 | 
				
			||||||
		db,
 | 
							db,
 | 
				
			||||||
@ -419,6 +322,7 @@ func clockDataEarliestIndex(filter []byte) []byte {
 | 
				
			|||||||
	return clockEarliestIndex(filter, CLOCK_DATA_FRAME_INDEX_EARLIEST)
 | 
						return clockEarliestIndex(filter, CLOCK_DATA_FRAME_INDEX_EARLIEST)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Produces an index key of size: len(filter) + 42
 | 
				
			||||||
func clockParentIndexKey(
 | 
					func clockParentIndexKey(
 | 
				
			||||||
	filter []byte,
 | 
						filter []byte,
 | 
				
			||||||
	frameNumber uint64,
 | 
						frameNumber uint64,
 | 
				
			||||||
@ -639,17 +543,38 @@ func (p *PebbleClockStore) GetDataClockFrame(
 | 
				
			|||||||
		return nil, nil, errors.Wrap(err, "get data clock frame")
 | 
							return nil, nil, errors.Wrap(err, "get data clock frame")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	defer closer.Close()
 | 
					 | 
				
			||||||
	frame := &protobufs.ClockFrame{}
 | 
						frame := &protobufs.ClockFrame{}
 | 
				
			||||||
 | 
						genesisFramePreIndex := false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// We do a bit of a cheap trick here while things are still stuck in the old
 | 
				
			||||||
 | 
						// ways: we use the size of the parent index key to determine if it's the new
 | 
				
			||||||
 | 
						// format, or the old raw frame
 | 
				
			||||||
 | 
						if len(value) == (len(filter) + 42) {
 | 
				
			||||||
 | 
							frameValue, frameCloser, err := p.db.Get(value)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, nil, errors.Wrap(err, "get data clock frame")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if err := proto.Unmarshal(frameValue, frame); err != nil {
 | 
				
			||||||
 | 
								return nil, nil, errors.Wrap(
 | 
				
			||||||
 | 
									errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
 | 
									"get data clock frame",
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							closer.Close()
 | 
				
			||||||
 | 
							defer frameCloser.Close()
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							genesisFramePreIndex = frameNumber == 0
 | 
				
			||||||
		if err := proto.Unmarshal(value, frame); err != nil {
 | 
							if err := proto.Unmarshal(value, frame); err != nil {
 | 
				
			||||||
			return nil, nil, errors.Wrap(
 | 
								return nil, nil, errors.Wrap(
 | 
				
			||||||
				errors.Wrap(err, ErrInvalidData.Error()),
 | 
									errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
				"get data clock frame",
 | 
									"get data clock frame",
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							defer closer.Close()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !truncate {
 | 
						if !truncate {
 | 
				
			||||||
		if err = p.fillAggregateProofs(frame); err != nil {
 | 
							if err = p.fillAggregateProofs(frame, genesisFramePreIndex); err != nil {
 | 
				
			||||||
			return nil, nil, errors.Wrap(
 | 
								return nil, nil, errors.Wrap(
 | 
				
			||||||
				errors.Wrap(err, ErrInvalidData.Error()),
 | 
									errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
				"get data clock frame",
 | 
									"get data clock frame",
 | 
				
			||||||
@ -677,8 +602,9 @@ func (p *PebbleClockStore) GetDataClockFrame(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (p *PebbleClockStore) fillAggregateProofs(
 | 
					func (p *PebbleClockStore) fillAggregateProofs(
 | 
				
			||||||
	frame *protobufs.ClockFrame,
 | 
						frame *protobufs.ClockFrame,
 | 
				
			||||||
 | 
						genesisFramePreIndex bool,
 | 
				
			||||||
) error {
 | 
					) error {
 | 
				
			||||||
	if frame.FrameNumber == 0 {
 | 
						if frame.FrameNumber == 0 && genesisFramePreIndex {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -809,72 +735,21 @@ func (p *PebbleClockStore) GetLatestDataClockFrame(
 | 
				
			|||||||
	return frame, nil
 | 
						return frame, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *PebbleClockStore) GetLatestCandidateDataClockFrame(
 | 
					// GetStagedDataClockFrame implements ClockStore.
 | 
				
			||||||
	filter []byte,
 | 
					func (p *PebbleClockStore) GetStagedDataClockFrame(
 | 
				
			||||||
) (*protobufs.ClockFrame, error) {
 | 
					 | 
				
			||||||
	idxValue, closer, err := p.db.Get(clockDataCandidateLatestIndex(filter))
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		if errors.Is(err, pebble.ErrNotFound) {
 | 
					 | 
				
			||||||
			return nil, ErrNotFound
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "get latest candidate data clock frame")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	frameNumber := binary.BigEndian.Uint64(idxValue)
 | 
					 | 
				
			||||||
	frames, err := p.GetCandidateDataClockFrames(filter, frameNumber)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "get latest candidate data clock frame")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	closer.Close()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(frames) == 0 {
 | 
					 | 
				
			||||||
		return nil, ErrNotFound
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return frames[0], nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// GetLeadingCandidateDataClockFrame implements ClockStore.
 | 
					 | 
				
			||||||
func (p *PebbleClockStore) GetLeadingCandidateDataClockFrame(
 | 
					 | 
				
			||||||
	filter []byte,
 | 
					 | 
				
			||||||
	parent []byte,
 | 
					 | 
				
			||||||
	frameNumber uint64,
 | 
					 | 
				
			||||||
) (*protobufs.ClockFrame, error) {
 | 
					 | 
				
			||||||
	iter, err := p.RangeCandidateDataClockFrames(filter, parent, frameNumber)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "get leading candidate data clock frame")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if !iter.First() {
 | 
					 | 
				
			||||||
		return nil, ErrNotFound
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	defer iter.Close()
 | 
					 | 
				
			||||||
	frame, err := iter.Value()
 | 
					 | 
				
			||||||
	return frame, errors.Wrap(err, "get leading candidate data clock frame")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// GetParentDataClockFrame implements ClockStore.
 | 
					 | 
				
			||||||
func (p *PebbleClockStore) GetParentDataClockFrame(
 | 
					 | 
				
			||||||
	filter []byte,
 | 
						filter []byte,
 | 
				
			||||||
	frameNumber uint64,
 | 
						frameNumber uint64,
 | 
				
			||||||
	parentSelector []byte,
 | 
						parentSelector []byte,
 | 
				
			||||||
	truncate bool,
 | 
						truncate bool,
 | 
				
			||||||
) (*protobufs.ClockFrame, error) {
 | 
					) (*protobufs.ClockFrame, error) {
 | 
				
			||||||
	check := false
 | 
					 | 
				
			||||||
	data, closer, err := p.db.Get(
 | 
						data, closer, err := p.db.Get(
 | 
				
			||||||
		clockDataParentIndexKey(filter, frameNumber, parentSelector),
 | 
							clockDataParentIndexKey(filter, frameNumber, parentSelector),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if err != nil && !errors.Is(err, pebble.ErrNotFound) {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "get parent data clock frame")
 | 
					 | 
				
			||||||
	} else if err != nil && errors.Is(err, pebble.ErrNotFound) {
 | 
					 | 
				
			||||||
		data, closer, err = p.db.Get(clockDataFrameKey(filter, frameNumber))
 | 
					 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
							if errors.Is(err, pebble.ErrNotFound) {
 | 
				
			||||||
			return nil, errors.Wrap(ErrNotFound, "get parent data clock frame")
 | 
								return nil, errors.Wrap(ErrNotFound, "get parent data clock frame")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		check = true
 | 
							return nil, errors.Wrap(err, "get parent data clock frame")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	parent := &protobufs.ClockFrame{}
 | 
						parent := &protobufs.ClockFrame{}
 | 
				
			||||||
@ -882,18 +757,8 @@ func (p *PebbleClockStore) GetParentDataClockFrame(
 | 
				
			|||||||
		return nil, errors.Wrap(err, "get parent data clock frame")
 | 
							return nil, errors.Wrap(err, "get parent data clock frame")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if check {
 | 
					 | 
				
			||||||
		selector, err := parent.GetSelector()
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, errors.Wrap(err, "get parent data clock frame")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if !bytes.Equal(selector.FillBytes(make([]byte, 32)), parentSelector) {
 | 
					 | 
				
			||||||
			return nil, errors.Wrap(ErrNotFound, "get parent data clock frame")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if !truncate {
 | 
						if !truncate {
 | 
				
			||||||
		if err := p.fillAggregateProofs(parent); err != nil {
 | 
							if err := p.fillAggregateProofs(parent, false); err != nil {
 | 
				
			||||||
			return nil, errors.Wrap(
 | 
								return nil, errors.Wrap(
 | 
				
			||||||
				errors.Wrap(err, ErrInvalidData.Error()),
 | 
									errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
				"get clock frame iterator value",
 | 
									"get clock frame iterator value",
 | 
				
			||||||
@ -908,10 +773,8 @@ func (p *PebbleClockStore) GetParentDataClockFrame(
 | 
				
			|||||||
	return parent, nil
 | 
						return parent, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PutCandidateDataClockFrame implements ClockStore.
 | 
					// StageDataClockFrame implements ClockStore.
 | 
				
			||||||
func (p *PebbleClockStore) PutCandidateDataClockFrame(
 | 
					func (p *PebbleClockStore) StageDataClockFrame(
 | 
				
			||||||
	parentSelector []byte,
 | 
					 | 
				
			||||||
	distance []byte,
 | 
					 | 
				
			||||||
	selector []byte,
 | 
						selector []byte,
 | 
				
			||||||
	frame *protobufs.ClockFrame,
 | 
						frame *protobufs.ClockFrame,
 | 
				
			||||||
	txn Transaction,
 | 
						txn Transaction,
 | 
				
			||||||
@ -919,7 +782,7 @@ func (p *PebbleClockStore) PutCandidateDataClockFrame(
 | 
				
			|||||||
	if err := p.saveAggregateProofs(txn, frame); err != nil {
 | 
						if err := p.saveAggregateProofs(txn, frame); err != nil {
 | 
				
			||||||
		return errors.Wrap(
 | 
							return errors.Wrap(
 | 
				
			||||||
			errors.Wrap(err, ErrInvalidData.Error()),
 | 
								errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
			"put candidate data clock frame",
 | 
								"stage data clock frame",
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -933,24 +796,12 @@ func (p *PebbleClockStore) PutCandidateDataClockFrame(
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return errors.Wrap(
 | 
							return errors.Wrap(
 | 
				
			||||||
			errors.Wrap(err, ErrInvalidData.Error()),
 | 
								errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
			"put candidate data clock frame",
 | 
								"stage data clock frame",
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	frame.AggregateProofs = temp
 | 
						frame.AggregateProofs = temp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = txn.Set(
 | 
					 | 
				
			||||||
		clockDataCandidateFrameKey(
 | 
					 | 
				
			||||||
			frame.Filter,
 | 
					 | 
				
			||||||
			frame.FrameNumber,
 | 
					 | 
				
			||||||
			frame.ParentSelector,
 | 
					 | 
				
			||||||
			distance,
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
		data,
 | 
					 | 
				
			||||||
	); err != nil {
 | 
					 | 
				
			||||||
		return errors.Wrap(err, "put candidate data clock frame")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err = txn.Set(
 | 
						if err = txn.Set(
 | 
				
			||||||
		clockDataParentIndexKey(
 | 
							clockDataParentIndexKey(
 | 
				
			||||||
			frame.Filter,
 | 
								frame.Filter,
 | 
				
			||||||
@ -959,118 +810,54 @@ func (p *PebbleClockStore) PutCandidateDataClockFrame(
 | 
				
			|||||||
		),
 | 
							),
 | 
				
			||||||
		data,
 | 
							data,
 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
		return errors.Wrap(err, "put candidate data clock frame")
 | 
							return errors.Wrap(err, "stage data clock frame")
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	numberBytes, closer, err := p.db.Get(clockDataCandidateLatestIndex(frame.Filter))
 | 
					 | 
				
			||||||
	if err != nil && !errors.Is(err, pebble.ErrNotFound) {
 | 
					 | 
				
			||||||
		return errors.Wrap(err, "put candidate data clock frame")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	existingNumber := uint64(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if numberBytes != nil {
 | 
					 | 
				
			||||||
		existingNumber = binary.BigEndian.Uint64(numberBytes)
 | 
					 | 
				
			||||||
		closer.Close()
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if frame.FrameNumber > existingNumber {
 | 
					 | 
				
			||||||
		frameNumberBytes := make([]byte, 8)
 | 
					 | 
				
			||||||
		binary.BigEndian.PutUint64(frameNumberBytes, frame.FrameNumber)
 | 
					 | 
				
			||||||
		if err = txn.Set(
 | 
					 | 
				
			||||||
			clockDataCandidateLatestIndex(frame.Filter),
 | 
					 | 
				
			||||||
			frameNumberBytes,
 | 
					 | 
				
			||||||
		); err != nil {
 | 
					 | 
				
			||||||
			return errors.Wrap(err, "put candidate data clock frame")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PutDataClockFrame implements ClockStore.
 | 
					// CommitDataClockFrame implements ClockStore.
 | 
				
			||||||
func (p *PebbleClockStore) PutDataClockFrame(
 | 
					func (p *PebbleClockStore) CommitDataClockFrame(
 | 
				
			||||||
	frame *protobufs.ClockFrame,
 | 
						filter []byte,
 | 
				
			||||||
 | 
						frameNumber uint64,
 | 
				
			||||||
 | 
						selector []byte,
 | 
				
			||||||
	proverTrie *tries.RollingFrecencyCritbitTrie,
 | 
						proverTrie *tries.RollingFrecencyCritbitTrie,
 | 
				
			||||||
	txn Transaction,
 | 
						txn Transaction,
 | 
				
			||||||
	backfill bool,
 | 
						backfill bool,
 | 
				
			||||||
) error {
 | 
					) error {
 | 
				
			||||||
	if frame.FrameNumber != 0 {
 | 
					 | 
				
			||||||
		if err := p.saveAggregateProofs(txn, frame); err != nil {
 | 
					 | 
				
			||||||
			return errors.Wrap(
 | 
					 | 
				
			||||||
				errors.Wrap(err, ErrInvalidData.Error()),
 | 
					 | 
				
			||||||
				"put candidate data clock frame",
 | 
					 | 
				
			||||||
			)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	temp := append(
 | 
					 | 
				
			||||||
		[]*protobufs.InclusionAggregateProof{},
 | 
					 | 
				
			||||||
		frame.AggregateProofs...,
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	if frame.FrameNumber != 0 {
 | 
					 | 
				
			||||||
		frame.AggregateProofs = []*protobufs.InclusionAggregateProof{}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	data, err := proto.Marshal(frame)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return errors.Wrap(
 | 
					 | 
				
			||||||
			errors.Wrap(err, ErrInvalidData.Error()),
 | 
					 | 
				
			||||||
			"put data clock frame",
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if frame.FrameNumber != 0 {
 | 
					 | 
				
			||||||
		frame.AggregateProofs = temp
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	frameNumberBytes := make([]byte, 8)
 | 
						frameNumberBytes := make([]byte, 8)
 | 
				
			||||||
	binary.BigEndian.PutUint64(frameNumberBytes, frame.FrameNumber)
 | 
						binary.BigEndian.PutUint64(frameNumberBytes, frameNumber)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = txn.Set(
 | 
						if err := txn.Set(
 | 
				
			||||||
		clockDataFrameKey(frame.Filter, frame.FrameNumber),
 | 
							clockDataFrameKey(filter, frameNumber),
 | 
				
			||||||
		data,
 | 
							clockDataParentIndexKey(filter, frameNumber, selector),
 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
		return errors.Wrap(err, "put data clock frame")
 | 
							return errors.Wrap(err, "commit data clock frame")
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	selector, err := frame.GetSelector()
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return errors.Wrap(err, "put data clock frame")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err = txn.Set(
 | 
					 | 
				
			||||||
		clockDataParentIndexKey(
 | 
					 | 
				
			||||||
			frame.Filter,
 | 
					 | 
				
			||||||
			frame.FrameNumber,
 | 
					 | 
				
			||||||
			selector.FillBytes(make([]byte, 32)),
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
		data,
 | 
					 | 
				
			||||||
	); err != nil {
 | 
					 | 
				
			||||||
		return errors.Wrap(err, "put data clock frame")
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	proverData, err := proverTrie.Serialize()
 | 
						proverData, err := proverTrie.Serialize()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return errors.Wrap(err, "put data clock frame")
 | 
							return errors.Wrap(err, "commit data clock frame")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = txn.Set(
 | 
						if err = txn.Set(
 | 
				
			||||||
		clockProverTrieKey(frame.Filter, frame.FrameNumber),
 | 
							clockProverTrieKey(filter, frameNumber),
 | 
				
			||||||
		proverData,
 | 
							proverData,
 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
		return errors.Wrap(err, "put data clock frame")
 | 
							return errors.Wrap(err, "commit data clock frame")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, closer, err := p.db.Get(clockDataEarliestIndex(frame.Filter))
 | 
						_, closer, err := p.db.Get(clockDataEarliestIndex(filter))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		if !errors.Is(err, pebble.ErrNotFound) {
 | 
							if !errors.Is(err, pebble.ErrNotFound) {
 | 
				
			||||||
			return errors.Wrap(err, "put data clock frame")
 | 
								return errors.Wrap(err, "commit data clock frame")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err = txn.Set(
 | 
							if err = txn.Set(
 | 
				
			||||||
			clockDataEarliestIndex(frame.Filter),
 | 
								clockDataEarliestIndex(filter),
 | 
				
			||||||
			frameNumberBytes,
 | 
								frameNumberBytes,
 | 
				
			||||||
		); err != nil {
 | 
							); err != nil {
 | 
				
			||||||
			return errors.Wrap(err, "put data clock frame")
 | 
								return errors.Wrap(err, "commit data clock frame")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1080,172 +867,16 @@ func (p *PebbleClockStore) PutDataClockFrame(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if !backfill {
 | 
						if !backfill {
 | 
				
			||||||
		if err = txn.Set(
 | 
							if err = txn.Set(
 | 
				
			||||||
			clockDataLatestIndex(frame.Filter),
 | 
								clockDataLatestIndex(filter),
 | 
				
			||||||
			frameNumberBytes,
 | 
								frameNumberBytes,
 | 
				
			||||||
		); err != nil {
 | 
							); err != nil {
 | 
				
			||||||
			return errors.Wrap(err, "put data clock frame")
 | 
								return errors.Wrap(err, "commit data clock frame")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *PebbleClockStore) GetCandidateDataClockFrame(
 | 
					 | 
				
			||||||
	filter []byte,
 | 
					 | 
				
			||||||
	frameNumber uint64,
 | 
					 | 
				
			||||||
	parentSelector []byte,
 | 
					 | 
				
			||||||
	distance []byte,
 | 
					 | 
				
			||||||
) (*protobufs.ClockFrame, error) {
 | 
					 | 
				
			||||||
	value, closer, err := p.db.Get(clockDataCandidateFrameKey(
 | 
					 | 
				
			||||||
		filter,
 | 
					 | 
				
			||||||
		frameNumber,
 | 
					 | 
				
			||||||
		parentSelector,
 | 
					 | 
				
			||||||
		distance,
 | 
					 | 
				
			||||||
	))
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		if errors.Is(err, pebble.ErrNotFound) {
 | 
					 | 
				
			||||||
			return nil, ErrNotFound
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "get candidate data clock frame")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	defer closer.Close()
 | 
					 | 
				
			||||||
	frame := &protobufs.ClockFrame{}
 | 
					 | 
				
			||||||
	if err := proto.Unmarshal(value, frame); err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(
 | 
					 | 
				
			||||||
			errors.Wrap(err, ErrInvalidData.Error()),
 | 
					 | 
				
			||||||
			"get candidate data clock frame",
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err = p.fillAggregateProofs(frame); err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(
 | 
					 | 
				
			||||||
			errors.Wrap(err, ErrInvalidData.Error()),
 | 
					 | 
				
			||||||
			"get candidate data clock frame",
 | 
					 | 
				
			||||||
		)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return frame, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// GetCandidateDataClockFrames implements ClockStore.
 | 
					 | 
				
			||||||
// Distance is 32-byte aligned, so we just use a 0x00 * 32 -> 0xff * 32 range
 | 
					 | 
				
			||||||
func (p *PebbleClockStore) GetCandidateDataClockFrames(
 | 
					 | 
				
			||||||
	filter []byte,
 | 
					 | 
				
			||||||
	frameNumber uint64,
 | 
					 | 
				
			||||||
) ([]*protobufs.ClockFrame, error) {
 | 
					 | 
				
			||||||
	iter, err := p.db.NewIter(
 | 
					 | 
				
			||||||
		clockDataCandidateFrameKey(
 | 
					 | 
				
			||||||
			filter,
 | 
					 | 
				
			||||||
			frameNumber,
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
		clockDataCandidateFrameKey(
 | 
					 | 
				
			||||||
			filter,
 | 
					 | 
				
			||||||
			frameNumber,
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "get candidate data clock frames")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	frames := []*protobufs.ClockFrame{}
 | 
					 | 
				
			||||||
	i := &PebbleCandidateClockIterator{i: iter, db: p}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for i.First(); i.Valid(); i.Next() {
 | 
					 | 
				
			||||||
		value, err := i.Value()
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, errors.Wrap(err, "get candidate data clock frames")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		frames = append(frames, value)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := i.Close(); err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "get candidate data clock frames")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return frames, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// RangeCandidateDataClockFrames implements ClockStore.
 | 
					 | 
				
			||||||
// Distance is 32-byte aligned, so we just use a 0x00 * 32 -> 0xff * 32 range
 | 
					 | 
				
			||||||
func (p *PebbleClockStore) RangeCandidateDataClockFrames(
 | 
					 | 
				
			||||||
	filter []byte,
 | 
					 | 
				
			||||||
	parent []byte,
 | 
					 | 
				
			||||||
	frameNumber uint64,
 | 
					 | 
				
			||||||
) (*PebbleCandidateClockIterator, error) {
 | 
					 | 
				
			||||||
	fromParent := rightAlign(parent, 32)
 | 
					 | 
				
			||||||
	toParent := rightAlign(parent, 32)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if bytes.Equal(parent, []byte{
 | 
					 | 
				
			||||||
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
	}) {
 | 
					 | 
				
			||||||
		toParent = []byte{
 | 
					 | 
				
			||||||
			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
			0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	iter, err := p.db.NewIter(
 | 
					 | 
				
			||||||
		clockDataCandidateFrameKey(
 | 
					 | 
				
			||||||
			filter,
 | 
					 | 
				
			||||||
			frameNumber,
 | 
					 | 
				
			||||||
			fromParent,
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
		clockDataCandidateFrameKey(
 | 
					 | 
				
			||||||
			filter,
 | 
					 | 
				
			||||||
			frameNumber,
 | 
					 | 
				
			||||||
			toParent,
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "range candidate data clock frames")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return &PebbleCandidateClockIterator{i: iter, db: p}, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// RangeDataClockFrames implements ClockStore.
 | 
					// RangeDataClockFrames implements ClockStore.
 | 
				
			||||||
func (p *PebbleClockStore) RangeDataClockFrames(
 | 
					func (p *PebbleClockStore) RangeDataClockFrames(
 | 
				
			||||||
	filter []byte,
 | 
						filter []byte,
 | 
				
			||||||
@ -1469,6 +1100,33 @@ func (p *PebbleClockStore) GetCompressedDataClockFrames(
 | 
				
			|||||||
	for iter.First(); iter.Valid(); iter.Next() {
 | 
						for iter.First(); iter.Valid(); iter.Next() {
 | 
				
			||||||
		value := iter.Value()
 | 
							value := iter.Value()
 | 
				
			||||||
		frame := &protobufs.ClockFrame{}
 | 
							frame := &protobufs.ClockFrame{}
 | 
				
			||||||
 | 
							genesisFramePreIndex := false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// We do a bit of a cheap trick here while things are still stuck in the old
 | 
				
			||||||
 | 
							// ways: we use the size of the parent index key to determine if it's the new
 | 
				
			||||||
 | 
							// format, or the old raw frame
 | 
				
			||||||
 | 
							if len(value) == (len(filter) + 42) {
 | 
				
			||||||
 | 
								frameValue, frameCloser, err := p.db.Get(value)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, errors.Wrap(err, "get compressed data clock frames")
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if err := proto.Unmarshal(frameValue, frame); err != nil {
 | 
				
			||||||
 | 
									return nil, errors.Wrap(
 | 
				
			||||||
 | 
										errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
 | 
										"get compressed data clock frames",
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								frameCloser.Close()
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								if err := proto.Unmarshal(value, frame); err != nil {
 | 
				
			||||||
 | 
									return nil, errors.Wrap(
 | 
				
			||||||
 | 
										errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
 | 
										"get compressed data clock frames",
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								genesisFramePreIndex = frame.FrameNumber == 0
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := proto.Unmarshal(value, frame); err != nil {
 | 
							if err := proto.Unmarshal(value, frame); err != nil {
 | 
				
			||||||
			return nil, errors.Wrap(err, "get compressed data clock frames")
 | 
								return nil, errors.Wrap(err, "get compressed data clock frames")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -1477,7 +1135,7 @@ func (p *PebbleClockStore) GetCompressedDataClockFrames(
 | 
				
			|||||||
			syncMessage.TruncatedClockFrames,
 | 
								syncMessage.TruncatedClockFrames,
 | 
				
			||||||
			frame,
 | 
								frame,
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		if frame.FrameNumber == 0 {
 | 
							if frame.FrameNumber == 0 && genesisFramePreIndex {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		for i := 0; i < len(frame.Input[516:])/74; i++ {
 | 
							for i := 0; i < len(frame.Input[516:])/74; i++ {
 | 
				
			||||||
@ -1620,48 +1278,6 @@ func (p *PebbleClockStore) SetLatestDataClockFrameNumber(
 | 
				
			|||||||
	return errors.Wrap(err, "set latest data clock frame number")
 | 
						return errors.Wrap(err, "set latest data clock frame number")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *PebbleClockStore) DeleteCandidateDataClockFrameRange(
 | 
					 | 
				
			||||||
	filter []byte,
 | 
					 | 
				
			||||||
	fromFrameNumber uint64,
 | 
					 | 
				
			||||||
	toFrameNumber uint64,
 | 
					 | 
				
			||||||
) error {
 | 
					 | 
				
			||||||
	err := p.db.DeleteRange(
 | 
					 | 
				
			||||||
		clockDataCandidateFrameKey(
 | 
					 | 
				
			||||||
			filter,
 | 
					 | 
				
			||||||
			fromFrameNumber,
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
		clockDataCandidateFrameKey(
 | 
					 | 
				
			||||||
			filter,
 | 
					 | 
				
			||||||
			toFrameNumber,
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			[]byte{
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		),
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	return errors.Wrap(err, "delete candidate data clock frame range")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (p *PebbleClockStore) DeleteDataClockFrameRange(
 | 
					func (p *PebbleClockStore) DeleteDataClockFrameRange(
 | 
				
			||||||
	filter []byte,
 | 
						filter []byte,
 | 
				
			||||||
	fromFrameNumber uint64,
 | 
						fromFrameNumber uint64,
 | 
				
			||||||
@ -1680,16 +1296,6 @@ func (p *PebbleClockStore) DeleteDataClockFrameRange(
 | 
				
			|||||||
	return errors.Wrap(err, "delete data clock frame range")
 | 
						return errors.Wrap(err, "delete data clock frame range")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *PebbleClockStore) GetHighestCandidateDataClockFrame(
 | 
					 | 
				
			||||||
	filter []byte,
 | 
					 | 
				
			||||||
) (*protobufs.ClockFrame, error) {
 | 
					 | 
				
			||||||
	frame, err := p.GetLatestCandidateDataClockFrame(filter)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, errors.Wrap(err, "get highest candidate data clock frame")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return frame, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
func (p *PebbleClockStore) ResetMasterClockFrames(filter []byte) error {
 | 
					func (p *PebbleClockStore) ResetMasterClockFrames(filter []byte) error {
 | 
				
			||||||
	if err := p.db.DeleteRange(
 | 
						if err := p.db.DeleteRange(
 | 
				
			||||||
		clockMasterFrameKey(filter, 0),
 | 
							clockMasterFrameKey(filter, 0),
 | 
				
			||||||
@ -1741,7 +1347,60 @@ func (p *PebbleClockStore) Compact(
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// If this node has been around since the early days, this is going to free
 | 
				
			||||||
 | 
						// up a lot of cruft.
 | 
				
			||||||
 | 
						if err := p.db.DeleteRange(
 | 
				
			||||||
 | 
							clockDataCandidateFrameKey(
 | 
				
			||||||
 | 
								make([]byte, 32),
 | 
				
			||||||
 | 
								0,
 | 
				
			||||||
 | 
								make([]byte, 32),
 | 
				
			||||||
 | 
								make([]byte, 32),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
							clockDataCandidateFrameKey(
 | 
				
			||||||
 | 
								bytes.Repeat([]byte{0xff}, 32),
 | 
				
			||||||
 | 
								1000000,
 | 
				
			||||||
 | 
								bytes.Repeat([]byte{0xff}, 32),
 | 
				
			||||||
 | 
								bytes.Repeat([]byte{0xff}, 32),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
						); err != nil {
 | 
				
			||||||
 | 
							return errors.Wrap(err, "compact")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := p.db.Compact(
 | 
				
			||||||
 | 
							clockDataCandidateFrameKey(
 | 
				
			||||||
 | 
								make([]byte, 32),
 | 
				
			||||||
 | 
								0,
 | 
				
			||||||
 | 
								make([]byte, 32),
 | 
				
			||||||
 | 
								make([]byte, 32),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
							clockDataCandidateFrameKey(
 | 
				
			||||||
 | 
								bytes.Repeat([]byte{0xff}, 32),
 | 
				
			||||||
 | 
								1000000,
 | 
				
			||||||
 | 
								bytes.Repeat([]byte{0xff}, 32),
 | 
				
			||||||
 | 
								bytes.Repeat([]byte{0xff}, 32),
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
							true,
 | 
				
			||||||
 | 
						); err != nil {
 | 
				
			||||||
 | 
							return errors.Wrap(err, "compact")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if dataFilter != nil {
 | 
						if dataFilter != nil {
 | 
				
			||||||
 | 
							if err := p.db.DeleteRange(
 | 
				
			||||||
 | 
								clockDataCandidateFrameKey(
 | 
				
			||||||
 | 
									dataFilter,
 | 
				
			||||||
 | 
									0,
 | 
				
			||||||
 | 
									make([]byte, 32),
 | 
				
			||||||
 | 
									make([]byte, 32),
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
								clockDataCandidateFrameKey(
 | 
				
			||||||
 | 
									dataFilter,
 | 
				
			||||||
 | 
									1000000,
 | 
				
			||||||
 | 
									bytes.Repeat([]byte{0xff}, 32),
 | 
				
			||||||
 | 
									bytes.Repeat([]byte{0xff}, 32),
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
							); err != nil {
 | 
				
			||||||
 | 
								return errors.Wrap(err, "compact")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := p.db.Compact(
 | 
							if err := p.db.Compact(
 | 
				
			||||||
			clockDataFrameKey(dataFilter, 0),
 | 
								clockDataFrameKey(dataFilter, 0),
 | 
				
			||||||
			clockDataFrameKey(dataFilter, 1000000),
 | 
								clockDataFrameKey(dataFilter, 1000000),
 | 
				
			||||||
@ -1767,6 +1426,22 @@ func (p *PebbleClockStore) Compact(
 | 
				
			|||||||
		); err != nil {
 | 
							); err != nil {
 | 
				
			||||||
			return errors.Wrap(err, "compact")
 | 
								return errors.Wrap(err, "compact")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err := p.db.Compact(
 | 
				
			||||||
 | 
								clockDataParentIndexKey(
 | 
				
			||||||
 | 
									dataFilter,
 | 
				
			||||||
 | 
									0,
 | 
				
			||||||
 | 
									make([]byte, 32),
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
								clockDataParentIndexKey(
 | 
				
			||||||
 | 
									dataFilter,
 | 
				
			||||||
 | 
									1000000,
 | 
				
			||||||
 | 
									bytes.Repeat([]byte{0xff}, 32),
 | 
				
			||||||
 | 
								),
 | 
				
			||||||
 | 
								true,
 | 
				
			||||||
 | 
							); err != nil {
 | 
				
			||||||
 | 
								return errors.Wrap(err, "compact")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user