Skip to content

Commit d841cfe

Browse files
authored
ethcoder: fix event decode byte16 (#152)
1 parent 5f0bd1e commit d841cfe

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

ethcoder/events.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,14 @@ func (d *EventDecoder) DecodeLogAsHex(log types.Log) (ABISignature, []string, bo
270270
return eventDef, nil, false, fmt.Errorf("indexed argument out of range: %d > %d", idx+1, len(log.Topics)-1)
271271
}
272272
data := log.Topics[idx+1].Bytes()
273-
arg := data[32-byteSize:]
274-
eventValues = append(eventValues, HexEncode(arg))
273+
274+
var argVal []byte
275+
if arg.Type.T == abi.BytesTy || arg.Type.T == abi.FixedBytesTy {
276+
argVal = data[:byteSize]
277+
} else {
278+
argVal = data[32-byteSize:]
279+
}
280+
eventValues = append(eventValues, HexEncode(argVal))
275281
idx++
276282
} else {
277283
byteSize := abi.GetTypeSize(arg.Type)

ethcoder/events_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,54 @@ func TestDecodeTransactionLogByEventSig6(t *testing.T) {
433433
require.Equal(t, "0x00000000000000000000000000000000000000000000000000000000003fab53", eventHexValues[3])
434434
}
435435

436+
func TestDecodeTransactionLogByEventSig7(t *testing.T) {
437+
logTopics := []string{
438+
"0x7732a1c54f54c543d17e9603255b42e04ad87aa8024a0a3637f532f2e2b6d22a",
439+
"0x98442bdf09d14ed3859c77b17990a0fc00000000000000000000000000000000",
440+
}
441+
logData := "0x"
442+
443+
txnLog := types.Log{}
444+
txnLog.Topics = []common.Hash{}
445+
446+
for _, topic := range logTopics {
447+
txnLog.Topics = append(txnLog.Topics, common.HexToHash(topic))
448+
}
449+
txnLog.Data, _ = hexutil.Decode(logData)
450+
451+
var eventSig = "JobExecuted(bytes16 indexed)"
452+
453+
eventDef, eventValues, ok, err := ethcoder.DecodeTransactionLogByEventSig(txnLog, eventSig)
454+
require.NoError(t, err)
455+
require.True(t, ok)
456+
457+
require.Equal(t, "0x7732a1c54f54c543d17e9603255b42e04ad87aa8024a0a3637f532f2e2b6d22a", eventDef.Hash)
458+
require.Equal(t, "JobExecuted", eventDef.Name)
459+
require.Equal(t, "JobExecuted(bytes16)", eventDef.Signature)
460+
require.Equal(t, []string{"bytes16"}, eventDef.ArgTypes)
461+
require.Equal(t, []bool{true}, eventDef.ArgIndexed)
462+
463+
src := eventValues[0].([16]uint8)
464+
dst := make([]byte, 16)
465+
copy(dst[:], src[:])
466+
467+
require.Equal(t, 1, len(eventValues))
468+
require.Equal(t, "0x98442bdf09d14ed3859c77b17990a0fc", ethcoder.HexEncode(dst))
469+
470+
eventDef, eventValuesHex, ok, err := ethcoder.DecodeTransactionLogByEventSigAsHex(txnLog, eventSig)
471+
require.NoError(t, err)
472+
require.True(t, ok)
473+
474+
require.Equal(t, "0x7732a1c54f54c543d17e9603255b42e04ad87aa8024a0a3637f532f2e2b6d22a", eventDef.Hash)
475+
require.Equal(t, "JobExecuted", eventDef.Name)
476+
require.Equal(t, "JobExecuted(bytes16)", eventDef.Signature)
477+
require.Equal(t, []string{"bytes16"}, eventDef.ArgTypes)
478+
require.Equal(t, []bool{true}, eventDef.ArgIndexed)
479+
480+
require.Equal(t, 1, len(eventValuesHex))
481+
require.Equal(t, "0x98442bdf09d14ed3859c77b17990a0fc", eventValuesHex[0])
482+
}
483+
436484
func TestEventDecoder(t *testing.T) {
437485
ed := ethcoder.NewEventDecoder()
438486

0 commit comments

Comments
 (0)