From cc79e0793db91a7fb8d435e0836e8e0b7a21e72b Mon Sep 17 00:00:00 2001 From: Jeffery Walsh Date: Fri, 23 Jun 2023 16:37:42 -0700 Subject: [PATCH 1/3] fix scanning blocks twice --- packages/relayer/indexer/detect_and_handle_reorg.go | 1 - packages/relayer/indexer/filter_then_subscribe.go | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/relayer/indexer/detect_and_handle_reorg.go b/packages/relayer/indexer/detect_and_handle_reorg.go index 55cfac8b7e..b50cb07f5c 100644 --- a/packages/relayer/indexer/detect_and_handle_reorg.go +++ b/packages/relayer/indexer/detect_and_handle_reorg.go @@ -19,7 +19,6 @@ func (svc *Service) detectAndHandleReorg(ctx context.Context, eventType string, } // reorg detected - log.Infof("reorg detected for msgHash %v and eventType %v", msgHash, eventType) err = svc.eventRepo.Delete(ctx, e.ID) diff --git a/packages/relayer/indexer/filter_then_subscribe.go b/packages/relayer/indexer/filter_then_subscribe.go index 86cdbd7747..0d6e5daf55 100644 --- a/packages/relayer/indexer/filter_then_subscribe.go +++ b/packages/relayer/indexer/filter_then_subscribe.go @@ -2,6 +2,7 @@ package indexer import ( "context" + "fmt" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/pkg/errors" @@ -57,6 +58,8 @@ func (svc *Service) FilterThenSubscribe( for i := svc.processingBlockHeight; i < header.Number.Uint64(); i += svc.blockBatchSize { end := svc.processingBlockHeight + svc.blockBatchSize + fmt.Printf("block batch from %v to %v", i, end) + fmt.Println() // if the end of the batch is greater than the latest block number, set end // to the latest block number if end > header.Number.Uint64() { @@ -64,7 +67,7 @@ func (svc *Service) FilterThenSubscribe( } filterOpts := &bind.FilterOpts{ - Start: svc.processingBlockHeight, + Start: svc.processingBlockHeight + 1, End: &end, Context: ctx, } From e1a30325cac79383da19a5b338787ac052045cb8 Mon Sep 17 00:00:00 2001 From: Jeffery Walsh Date: Fri, 23 Jun 2023 16:46:22 -0700 Subject: [PATCH 2/3] handle batch size, batch was always 1 more than provided --- packages/relayer/indexer/filter_then_subscribe.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/relayer/indexer/filter_then_subscribe.go b/packages/relayer/indexer/filter_then_subscribe.go index 0d6e5daf55..9d1f8be12b 100644 --- a/packages/relayer/indexer/filter_then_subscribe.go +++ b/packages/relayer/indexer/filter_then_subscribe.go @@ -58,17 +58,21 @@ func (svc *Service) FilterThenSubscribe( for i := svc.processingBlockHeight; i < header.Number.Uint64(); i += svc.blockBatchSize { end := svc.processingBlockHeight + svc.blockBatchSize - fmt.Printf("block batch from %v to %v", i, end) - fmt.Println() // if the end of the batch is greater than the latest block number, set end // to the latest block number if end > header.Number.Uint64() { end = header.Number.Uint64() } + // filter exclusive of the end block + filterEnd := end - 1 + + fmt.Printf("block batch from %v to %v", i, filterEnd) + fmt.Println() + filterOpts := &bind.FilterOpts{ - Start: svc.processingBlockHeight + 1, - End: &end, + Start: svc.processingBlockHeight, + End: &filterEnd, Context: ctx, } From c212e357bc3fb5ead8b51093df2b950245955a42 Mon Sep 17 00:00:00 2001 From: Jeffery Walsh Date: Fri, 23 Jun 2023 16:47:11 -0700 Subject: [PATCH 3/3] scan fix --- packages/relayer/indexer/filter_then_subscribe.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/relayer/indexer/filter_then_subscribe.go b/packages/relayer/indexer/filter_then_subscribe.go index 9d1f8be12b..98988962e4 100644 --- a/packages/relayer/indexer/filter_then_subscribe.go +++ b/packages/relayer/indexer/filter_then_subscribe.go @@ -64,7 +64,9 @@ func (svc *Service) FilterThenSubscribe( end = header.Number.Uint64() } - // filter exclusive of the end block + // filter exclusive of the end block. + // we use "end" as the next starting point of the batch, and + // process up to end - 1 for this batch. filterEnd := end - 1 fmt.Printf("block batch from %v to %v", i, filterEnd) @@ -95,6 +97,8 @@ func (svc *Service) FilterThenSubscribe( } if !messageSentEvents.Next() || messageSentEvents.Event == nil { + // use "end" not "filterEnd" here, because it will be used as the start + // of the next batch. if err := svc.handleNoEventsInBatch(ctx, chainID, int64(end)); err != nil { return errors.Wrap(err, "svc.handleNoEventsInBatch") }