fix: eth: log on unexpected events

We can remove these later as we add more event types, but this will aid
in debugging.
This commit is contained in:
Steven Allen 2023-02-10 07:59:47 -08:00
parent ece8f25511
commit cc302dd68b

View File

@ -1365,6 +1365,11 @@ func ethLogFromEvent(entries []types.EventEntry) (data []byte, topics []ethtypes
dataFound bool dataFound bool
) )
for _, entry := range entries { for _, entry := range entries {
// Drop events with non-raw topics to avoid mistakes.
if entry.Codec != cid.Raw {
log.Warnw("did not expect an event entry with a non-raw codec", "codec", entry.Codec, "key", entry.Key)
return nil, nil, false
}
// Check if the key is t1..t4 // Check if the key is t1..t4
if len(entry.Key) == 2 && "t1" <= entry.Key && entry.Key <= "t4" { if len(entry.Key) == 2 && "t1" <= entry.Key && entry.Key <= "t4" {
// '1' - '1' == 0, etc. // '1' - '1' == 0, etc.
@ -1372,16 +1377,13 @@ func ethLogFromEvent(entries []types.EventEntry) (data []byte, topics []ethtypes
// Drop events with mis-sized topics. // Drop events with mis-sized topics.
if len(entry.Value) != 32 { if len(entry.Value) != 32 {
return nil, nil, false log.Warnw("got an EVM event topic with an invalid size", "key", entry.Key, "size", len(entry.Value))
}
// Drop events with non-raw topics to avoid mistakes.
if entry.Codec != cid.Raw {
return nil, nil, false return nil, nil, false
} }
// Drop events with duplicate topics. // Drop events with duplicate topics.
if topicsFound[idx] { if topicsFound[idx] {
log.Warnw("got a duplicate EVM event topic", "key", entry.Key)
return nil, nil, false return nil, nil, false
} }
topicsFound[idx] = true topicsFound[idx] = true
@ -1393,25 +1395,25 @@ func ethLogFromEvent(entries []types.EventEntry) (data []byte, topics []ethtypes
} }
copy(topics[idx][:], entry.Value) copy(topics[idx][:], entry.Value)
} else if entry.Key == "d" { } else if entry.Key == "d" {
// Drop events with non-raw data to avoid mistakes.
if entry.Codec != cid.Raw {
return nil, nil, false
}
// Drop events with duplicate data fields. // Drop events with duplicate data fields.
if dataFound { if dataFound {
log.Warnw("got duplicate EVM event data")
return nil, nil, false return nil, nil, false
} }
dataFound = true dataFound = true
data = entry.Value data = entry.Value
} else {
// Skip entries we don't understand (makes it easier to extend things).
// But we warn for now because we don't expect them.
log.Warnw("unexpected event entry", "key", entry.Key)
} }
// Skip entries we don't understand (makes it easier to extend things).
} }
// Drop events with skipped topics. // Drop events with skipped topics.
if len(topics) != topicsFoundCount { if len(topics) != topicsFoundCount {
log.Warnw("EVM event topic length mismatch", "expected", len(topics), "actual", topicsFoundCount)
return nil, nil, false return nil, nil, false
} }
return data, topics, true return data, topics, true