@@ -243,16 +243,26 @@ func (eIndexer *EventsIndexer) SyncEvent(ctx context.Context, selector *client.E
243243 }
244244
245245 if dbOffsetCursor != nil {
246- txDigestBytes , err := hex .DecodeString (strings .TrimPrefix (dbOffsetCursor .TxDigest , "0x" ))
247- if err != nil {
248- eIndexer .cursorMutex .RUnlock ()
249- eIndexer .logger .Errorw ("syncEvent: failed to decode tx digest" , "error" , err , "txDigest" , dbOffsetCursor .TxDigest )
250- return err
251- }
252- // convert the db offset cursor digest from hex (the format stored in the DB) to base58 (the format expected by the client)
253- cursor = & models.EventId {
254- TxDigest : base58 .Encode (txDigestBytes ),
255- EventSeq : dbOffsetCursor .EventSeq ,
246+ // Some DB records have hex formatted txDigest while newer entries have base58 formatted txDigest.
247+ // We check if the txDigest is hex formatted and decode it if needed for backwards compatibility.
248+ if strings .ToLower (dbOffsetCursor .TxDigest [:2 ]) == "0x" {
249+ txDigestBytes , err := hex .DecodeString (dbOffsetCursor .TxDigest [2 :])
250+ if err != nil {
251+ eIndexer .cursorMutex .RUnlock ()
252+ eIndexer .logger .Errorw ("syncEvent: failed to decode tx digest" , "error" , err , "txDigest" , dbOffsetCursor .TxDigest )
253+ return fmt .Errorf ("syncEvent: failed to decode tx digest: %w" , err )
254+ }
255+ // convert the db offset cursor digest from hex (the format stored in the DB) to base58 (the format expected by the client)
256+ cursor = & models.EventId {
257+ TxDigest : base58 .Encode (txDigestBytes ),
258+ EventSeq : dbOffsetCursor .EventSeq ,
259+ }
260+ } else {
261+ // DB already has base58
262+ cursor = & models.EventId {
263+ TxDigest : dbOffsetCursor .TxDigest ,
264+ EventSeq : dbOffsetCursor .EventSeq ,
265+ }
256266 }
257267
258268 totalCount = dbTotalCount
0 commit comments