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 ().
0 commit comments