Skip to content

Commit 9c1c138

Browse files
committed
minor change
1 parent 53e49f6 commit 9c1c138

File tree

2 files changed

+45
-23
lines changed

2 files changed

+45
-23
lines changed

internal/committer/reorg.go

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66

77
"github.com/rs/zerolog/log"
88
config "github.com/thirdweb-dev/indexer/configs"
9-
"github.com/thirdweb-dev/indexer/internal/common"
109
"github.com/thirdweb-dev/indexer/internal/libs"
1110
"github.com/thirdweb-dev/indexer/internal/libs/libblockdata"
1211
"github.com/thirdweb-dev/indexer/internal/metrics"
@@ -76,48 +75,48 @@ func detectAndHandleReorgs(startBlock int64, endBlock int64) error {
7675
log.Debug().Msgf("Checking for reorgs from block %d to %d", startBlock, endBlock)
7776

7877
// Fetch block headers for the range
79-
blockData, err := libs.GetBlockDataFromClickHouseV2(libs.ChainId.Uint64(), uint64(startBlock), uint64(endBlock))
78+
blockHeaders, err := libs.GetBlockHeadersForReorgCheck(libs.ChainId.Uint64(), uint64(startBlock), uint64(endBlock))
8079
if err != nil {
81-
return fmt.Errorf("detectAndHandleReorgs: failed to get block data: %w", err)
80+
return fmt.Errorf("detectAndHandleReorgs: failed to get block headers: %w", err)
8281
}
8382

84-
if len(blockData) == 0 {
85-
log.Debug().Msg("detectAndHandleReorgs: No block data found in range")
83+
if len(blockHeaders) == 0 {
84+
log.Debug().Msg("detectAndHandleReorgs: No block headers found in range")
8685
return nil
8786
}
8887

8988
// finding the reorg start and end block
9089
reorgStartBlock := int64(-1)
9190
reorgEndBlock := int64(-1)
92-
for i := 1; i < len(blockData); i++ {
93-
if blockData[i].Block.Number.Int64() != blockData[i-1].Block.Number.Int64()+1 {
91+
for i := 1; i < len(blockHeaders); i++ {
92+
if blockHeaders[i].Number.Int64() != blockHeaders[i-1].Number.Int64()+1 {
9493
// non-sequential block numbers
95-
reorgStartBlock = blockData[i-1].Block.Number.Int64()
96-
reorgEndBlock = blockData[i].Block.Number.Int64()
94+
reorgStartBlock = blockHeaders[i-1].Number.Int64()
95+
reorgEndBlock = blockHeaders[i].Number.Int64()
9796
break
9897
}
99-
if blockData[i].Block.ParentHash != blockData[i-1].Block.Hash {
98+
if blockHeaders[i].ParentHash != blockHeaders[i-1].Hash {
10099
// hash mismatch start
101100
if reorgStartBlock == -1 {
102-
reorgStartBlock = blockData[i-1].Block.Number.Int64()
101+
reorgStartBlock = blockHeaders[i-1].Number.Int64()
103102
}
104103
continue
105104
} else {
106105
// hash matches end
107106
if reorgStartBlock != -1 {
108-
reorgEndBlock = blockData[i].Block.Number.Int64()
107+
reorgEndBlock = blockHeaders[i].Number.Int64()
109108
break
110109
}
111110
}
112111
}
113112

114113
// set end to the last block if not set
115114
if reorgEndBlock == -1 {
116-
reorgEndBlock = blockData[len(blockData)-1].Block.Number.Int64()
115+
reorgEndBlock = blockHeaders[len(blockHeaders)-1].Number.Int64()
117116
}
118117

119118
if reorgStartBlock > -1 {
120-
if err := handleReorgForRange(blockData, uint64(reorgStartBlock), uint64(reorgEndBlock)); err != nil {
119+
if err := handleReorgForRange(uint64(reorgStartBlock), uint64(reorgEndBlock)); err != nil {
121120
return err
122121
}
123122
}
@@ -128,7 +127,7 @@ func detectAndHandleReorgs(startBlock int64, endBlock int64) error {
128127
return nil
129128
}
130129

131-
func handleReorgForRange(oldblockData []*common.BlockData, startBlock uint64, endBlock uint64) error {
130+
func handleReorgForRange(startBlock uint64, endBlock uint64) error {
132131
// nothing to do
133132
if startBlock == 0 {
134133
return nil
@@ -150,15 +149,10 @@ func handleReorgForRange(oldblockData []*common.BlockData, startBlock uint64, en
150149
expectedBlockNumber++
151150
}
152151

153-
oldblockDataArray := make([]*common.BlockData, 0, len(oldblockData))
154-
for _, bd := range oldblockData {
155-
if bd.Block.Number.Uint64() < startBlock || bd.Block.Number.Uint64() > endBlock {
156-
continue
157-
}
158-
oldblockDataArray = append(oldblockDataArray, bd)
152+
oldblockDataArray, err := libs.GetBlockDataFromClickHouseV2(libs.ChainId.Uint64(), startBlock, endBlock)
153+
if err != nil {
154+
return fmt.Errorf("handleReorgForRange: failed to get old block data: %w", err)
159155
}
160-
// order of deletion is important
161-
// need to first delete then add so list should contain old data first
162156

163157
if err := libs.KafkaPublisherV2.PublishBlockDataReorg(newblockDataArray, oldblockDataArray); err != nil {
164158
log.Error().

internal/libs/clickhouse.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,34 @@ func GetBlockReorgDataFromClickHouseV2(chainId *big.Int, startBlockNumber int64,
162162
return blocks, nil
163163
}
164164

165+
func GetBlockHeadersForReorgCheck(chainId uint64, startBlockNumber uint64, endBlockNumber uint64) ([]*common.Block, error) {
166+
sb := startBlockNumber
167+
length := endBlockNumber - startBlockNumber + 1
168+
blocksRaw := make([]*common.Block, length)
169+
170+
query := fmt.Sprintf("SELECT block_number, hash, parent_hash FROM %s.blocks FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number",
171+
config.Cfg.CommitterClickhouseDatabase,
172+
chainId,
173+
startBlockNumber,
174+
endBlockNumber,
175+
)
176+
blocks, err := execQueryV2[common.Block](query)
177+
if err != nil {
178+
return blocksRaw, err
179+
}
180+
181+
// just to make sure the blocks are in the correct order
182+
for _, block := range blocks {
183+
idx := block.Number.Uint64() - sb
184+
if idx >= length {
185+
log.Error().Msgf("Block number %s is out of range", block.Number.String())
186+
continue
187+
}
188+
blocksRaw[idx] = &block
189+
}
190+
return blocksRaw, nil
191+
}
192+
165193
func GetBlockDataFromClickHouseV2(chainId uint64, startBlockNumber uint64, endBlockNumber uint64) ([]*common.BlockData, error) {
166194
length := endBlockNumber - startBlockNumber + 1
167195

0 commit comments

Comments
 (0)