@@ -100,6 +100,7 @@ func (d *executionPayloadsExporter) maintainTable() (err error) {
100100 blockChan := make (chan * types.Eth1BlockIndexed , 1000 )
101101 type Result struct {
102102 BlockHash []byte
103+ BlockNumber uint64
103104 FeeRecipientReward decimal.Decimal
104105 }
105106 resData := make ([]Result , 0 , maxBlock - minBlock + 1 )
@@ -138,7 +139,7 @@ func (d *executionPayloadsExporter) maintainTable() (err error) {
138139 if err != nil {
139140 return fmt .Errorf ("error converting tx reward to decimal for block %v: %w" , block .Number , err )
140141 }
141- resData = append (resData , Result {BlockHash : hash , FeeRecipientReward : dec })
142+ resData = append (resData , Result {BlockHash : hash , FeeRecipientReward : dec , BlockNumber : block . Number })
142143 }
143144 })
144145
@@ -156,23 +157,40 @@ func (d *executionPayloadsExporter) maintainTable() (err error) {
156157 return fmt .Errorf ("error processing blocks: %w" , err )
157158 }
158159 // sanity checks: check if any block hashes are 0x0000000000000000000000000000000000000000000000000000000000000000 or duplicate, check if count matches expected
159- if uint64 (len (resData )) != maxBlock - minBlock + 1 {
160- return fmt .Errorf ("error processing blocks: expected %v blocks, got %v" , maxBlock - minBlock + 1 , len (resData ))
161- }
162160 seen := make (map [string ]bool )
163161 emptyBlockHash := bytes .Repeat ([]byte {0 }, 32 )
162+ err = error (nil )
163+ counter := 0
164164 for _ , r := range resData {
165+ if counter > 25 {
166+ err = fmt .Errorf ("too many errors, aborting" )
167+ log .Error (err , "error processing blocks" , 0 )
168+ break
169+ }
165170 if len (r .BlockHash ) == 0 {
166- return fmt .Errorf ("error processing blocks: block hash is empty" )
171+ err = fmt .Errorf ("error processing blocks: block hash is empty, block number: %v" , r .BlockNumber )
172+ log .Error (err , "error processing blocks" , 0 )
173+ counter ++
167174 }
168175 if bytes .Equal (r .BlockHash , emptyBlockHash ) {
169- return fmt .Errorf ("error processing blocks: block hash is all zeros" )
176+ err = fmt .Errorf ("error processing blocks: block hash is all zeros, block number: %v" , r .BlockNumber )
177+ log .Error (err , "error processing blocks" , 0 )
178+ counter ++
170179 }
171180 if _ , ok := seen [string (r .BlockHash )]; ok {
172- return fmt .Errorf ("error processing blocks: duplicate block hash" )
181+ err = fmt .Errorf ("error processing blocks: duplicate block hash, block number: %v" , r .BlockNumber )
182+ log .Error (err , "error processing blocks" , 0 )
183+ counter ++
173184 }
174185 seen [string (r .BlockHash )] = true
175186 }
187+ if err != nil {
188+ return err
189+ }
190+
191+ if uint64 (len (resData )) != maxBlock - minBlock + 1 {
192+ return fmt .Errorf ("error processing blocks: expected %v blocks, got %v" , maxBlock - minBlock + 1 , len (resData ))
193+ }
176194
177195 // update the execution_payloads table
178196 log .Infof ("preparing copy update to temp table" )
0 commit comments