From 4c9231c764b9dfbce1ac4e2f99e2b26fd4b8ad0f Mon Sep 17 00:00:00 2001 From: David Date: Wed, 15 Jan 2025 14:53:14 +0800 Subject: [PATCH 1/4] chore(taiko-client): ensure event block IDs are continuous --- .../event_iterator/block_proposed_iterator.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go b/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go index 5441623c03d..1c90f1e594b 100644 --- a/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go +++ b/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go @@ -3,6 +3,7 @@ package eventiterator import ( "context" "errors" + "fmt" "math/big" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -110,7 +111,10 @@ func assembleBlockProposedIteratorCallback( updateCurrentFunc chainIterator.UpdateCurrentFunc, endFunc chainIterator.EndIterFunc, ) error { - endHeight := end.Number.Uint64() + var ( + endHeight = end.Number.Uint64() + lastBlockID uint64 + ) log.Debug("Iterating BlockProposed events", "start", start.Number, "end", endHeight) @@ -127,6 +131,13 @@ func assembleBlockProposedIteratorCallback( event := iterOntake.Event log.Debug("Processing BlockProposedV2 event", "block", event.BlockId, "l1BlockHeight", event.Raw.BlockNumber) + if lastBlockID != 0 && event.BlockId.Uint64() != lastBlockID+1 { + return fmt.Errorf( + "BlockProposedV2 event is not continuous, lastScannedBlockID: %d, currentScannedBlockID: %d", + lastBlockID, event.BlockId.Uint64(), + ) + } + if err := callback(ctx, metadata.NewTaikoDataBlockMetadataOntake(event), eventIter.end); err != nil { log.Warn("Error while processing BlockProposedV2 events, keep retrying", "error", err) return err From 91ce1c7aa01e4935985593a34fe12924ef7932c6 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 15 Jan 2025 14:54:41 +0800 Subject: [PATCH 2/4] chore(taiko-client): ensure event block IDs are continuous --- .../event_iterator/block_proposed_iterator.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go b/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go index 1c90f1e594b..d5120420fab 100644 --- a/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go +++ b/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go @@ -132,6 +132,13 @@ func assembleBlockProposedIteratorCallback( log.Debug("Processing BlockProposedV2 event", "block", event.BlockId, "l1BlockHeight", event.Raw.BlockNumber) if lastBlockID != 0 && event.BlockId.Uint64() != lastBlockID+1 { + log.Warn( + "BlockProposedV2 event is not continuous, rescan the L1 chain", + "fromL1Block", start.Number, + "toL1Block", endHeight, + "lastScannedBlockID", lastBlockID, + "currentScannedBlockID", event.BlockId.Uint64(), + ) return fmt.Errorf( "BlockProposedV2 event is not continuous, lastScannedBlockID: %d, currentScannedBlockID: %d", lastBlockID, event.BlockId.Uint64(), From b417fdbf3fb9631884afa88c8b18d3a1e1140b57 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 15 Jan 2025 14:59:43 +0800 Subject: [PATCH 3/4] feat: use WithMaxRetries for BlockBatchIterator --- .../pkg/chain_iterator/block_batch_iterator.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/taiko-client/pkg/chain_iterator/block_batch_iterator.go b/packages/taiko-client/pkg/chain_iterator/block_batch_iterator.go index b79debd7a5e..994574c2adb 100644 --- a/packages/taiko-client/pkg/chain_iterator/block_batch_iterator.go +++ b/packages/taiko-client/pkg/chain_iterator/block_batch_iterator.go @@ -20,6 +20,7 @@ const ( DefaultBlocksReadPerEpoch = 1000 DefaultRetryInterval = 12 * time.Second DefaultBlockConfirmations = 0 + BackOffMaxRetries = 5 ) var ( @@ -163,7 +164,13 @@ func (i *BlockBatchIterator) Iter() error { return nil } - if err := backoff.Retry(iterOp, backoff.WithContext(backoff.NewConstantBackOff(i.retryInterval), i.ctx)); err != nil { + if err := backoff.Retry( + iterOp, + backoff.WithMaxRetries( + backoff.WithContext(backoff.NewConstantBackOff(i.retryInterval), i.ctx), + BackOffMaxRetries, + ), + ); err != nil { return err } From 12360e5d9366ddda382e927e05675123be75d9f0 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 15 Jan 2025 15:00:47 +0800 Subject: [PATCH 4/4] chore(taiko-client): ensure event block IDs are continuous --- .../chain_iterator/event_iterator/block_proposed_iterator.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go b/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go index d5120420fab..4d051780fc8 100644 --- a/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go +++ b/packages/taiko-client/pkg/chain_iterator/event_iterator/block_proposed_iterator.go @@ -163,6 +163,8 @@ func assembleBlockProposedIteratorCallback( log.Debug("Updating current block cursor for processing BlockProposedV2 events", "block", current.Number) + lastBlockID = event.BlockId.Uint64() + updateCurrentFunc(current) }