From 59aec8337ef67b2c7f4be7cb89d26ab08df934d5 Mon Sep 17 00:00:00 2001 From: anjor Date: Sat, 9 Nov 2024 20:49:50 +0000 Subject: [PATCH 1/3] gsfa reader for slot range --- multiepoch-getSignaturesForAddress.go | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/multiepoch-getSignaturesForAddress.go b/multiepoch-getSignaturesForAddress.go index d51dcdb3..d97b8062 100644 --- a/multiepoch-getSignaturesForAddress.go +++ b/multiepoch-getSignaturesForAddress.go @@ -42,6 +42,38 @@ func (ser *MultiEpoch) getGsfaReadersInEpochDescendingOrder() ([]*gsfa.GsfaReade return gsfaReaders, epochNums } +// getGsfaReadersInEpochDescendingOrder returns a list of gsfa readers in epoch order (from most recent to oldest). +func (ser *MultiEpoch) getGsfaReadersInEpochDescendingOrderForSlotRange(ctx context.Context, startSlot, endSlot uint64) ([]*gsfa.GsfaReader, []uint64) { + ser.mu.RLock() + defer ser.mu.RUnlock() + + epochs := make([]*Epoch, 0, len(ser.epochs)) + for _, epoch := range ser.epochs { + + epochStartSlot, err := epoch.GetFirstAvailableBlock(ctx) + epochEndSlot, err := epoch.GetMostRecentAvailableBlock(ctx) + if epochStartSlot.Slot > int(startSlot) && epochEndSlot.Slot < int(endSlot) { + epochs = append(epochs, epoch) + } + } + + // sort epochs by epoch number (from biggest to smallest): + sort.Slice(epochs, func(i, j int) bool { + return epochs[i].epoch > epochs[j].epoch + }) + + gsfaReaders := make([]*gsfa.GsfaReader, 0, len(epochs)) + epochNums := make([]uint64, 0, len(epochs)) + for _, epoch := range epochs { + if epoch.gsfaReader != nil { + epoch.gsfaReader.SetEpoch(epoch.Epoch()) + gsfaReaders = append(gsfaReaders, epoch.gsfaReader) + epochNums = append(epochNums, epoch.Epoch()) + } + } + return gsfaReaders, epochNums +} + func countTransactions(v gsfa.EpochToTransactionObjects) int { var count int for _, txs := range v { From 6b6a10bd67d35976a86119ea9fd1df72bb96f2eb Mon Sep 17 00:00:00 2001 From: anjor Date: Sun, 10 Nov 2024 15:11:10 +0000 Subject: [PATCH 2/3] use calc epoch --- multiepoch-getSignaturesForAddress.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/multiepoch-getSignaturesForAddress.go b/multiepoch-getSignaturesForAddress.go index d97b8062..6a977157 100644 --- a/multiepoch-getSignaturesForAddress.go +++ b/multiepoch-getSignaturesForAddress.go @@ -47,12 +47,14 @@ func (ser *MultiEpoch) getGsfaReadersInEpochDescendingOrderForSlotRange(ctx cont ser.mu.RLock() defer ser.mu.RUnlock() - epochs := make([]*Epoch, 0, len(ser.epochs)) + startEpoch := CalcEpochForSlot(startSlot) + endEpoch := CalcEpochForSlot(endSlot) + numEpochs := endEpoch - startEpoch + 1 + + epochs := make([]*Epoch, 0, numEpochs) for _, epoch := range ser.epochs { - epochStartSlot, err := epoch.GetFirstAvailableBlock(ctx) - epochEndSlot, err := epoch.GetMostRecentAvailableBlock(ctx) - if epochStartSlot.Slot > int(startSlot) && epochEndSlot.Slot < int(endSlot) { + if epoch.Epoch() >= startEpoch && epoch.Epoch() <= endEpoch { epochs = append(epochs, epoch) } } From 34495a37b760fa1cda2354bcefdb7d81293d15b4 Mon Sep 17 00:00:00 2001 From: anjor Date: Sun, 10 Nov 2024 15:11:41 +0000 Subject: [PATCH 3/3] minor --- multiepoch-getSignaturesForAddress.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/multiepoch-getSignaturesForAddress.go b/multiepoch-getSignaturesForAddress.go index 6a977157..b6ad8e49 100644 --- a/multiepoch-getSignaturesForAddress.go +++ b/multiepoch-getSignaturesForAddress.go @@ -49,9 +49,8 @@ func (ser *MultiEpoch) getGsfaReadersInEpochDescendingOrderForSlotRange(ctx cont startEpoch := CalcEpochForSlot(startSlot) endEpoch := CalcEpochForSlot(endSlot) - numEpochs := endEpoch - startEpoch + 1 - epochs := make([]*Epoch, 0, numEpochs) + epochs := make([]*Epoch, 0, endEpoch-startEpoch+1) for _, epoch := range ser.epochs { if epoch.Epoch() >= startEpoch && epoch.Epoch() <= endEpoch {