Skip to content

Commit e90b4a0

Browse files
2.31.1 edits (#309)
* handle mixed txDigest * update error log in coin manager * disable hexToArray length check * edits
1 parent 26b1d50 commit e90b4a0

File tree

3 files changed

+26
-14
lines changed

3 files changed

+26
-14
lines changed

relayer/chainreader/indexer/events_indexer.go

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

relayer/codec/type_converters.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,9 +376,11 @@ func (tc *TypeConverter) hexToArray(from, to reflect.Type, data any) (any, error
376376
byteSlice := bytes.([]byte)
377377
out := make([]uint8, to.Len())
378378

379-
if len(byteSlice) != to.Len() {
380-
return nil, fmt.Errorf("hex to array: byte slice length %d is not equal to output array length %d", len(byteSlice), to.Len())
381-
}
379+
// Re-enable this check once we can guarantee that responses are always the same length as the target array length.
380+
// Disabling for now to avoid breaking changes to core.
381+
// if len(byteSlice) != to.Len() {
382+
// return nil, fmt.Errorf("hex to array: byte slice length %d is not equal to output array length %d", len(byteSlice), to.Len())
383+
// }
382384

383385
copy(out, byteSlice)
384386

relayer/txm/gas_coin_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (m *SuiGasCoinManager) TryReserveCoins(
5050
) error {
5151
for _, coin := range coinIDs {
5252
if m.IsCoinReserved(coin.ObjectId) {
53-
return fmt.Errorf("coin %s is already reserved", coin.ObjectId)
53+
return fmt.Errorf("coin %s is already reserved", hex.EncodeToString(coin.ObjectId[:]))
5454
}
5555

5656
coinID := hex.EncodeToString(coin.ObjectId[:])

0 commit comments

Comments
 (0)