diff --git a/integrationTests/websocket/testNotifierWithWebsockets_test.go b/integrationTests/websocket/testNotifierWithWebsockets_test.go index a546161..eb72105 100644 --- a/integrationTests/websocket/testNotifierWithWebsockets_test.go +++ b/integrationTests/websocket/testNotifierWithWebsockets_test.go @@ -49,6 +49,8 @@ func TestNotifierWithWebsockets_PushEvents(t *testing.T) { { Address: hex.EncodeToString(addr), TxHash: "txHash1", + Data: make([]byte, 0), + Topics: make([][]byte, 0), }, } @@ -135,6 +137,8 @@ func TestNotifierWithWebsockets_BlockEvents(t *testing.T) { { Address: hex.EncodeToString(addr), TxHash: "txHash1", + Data: make([]byte, 0), + Topics: make([][]byte, 0), }, } expBlockEvents := &data.BlockEventsWithOrder{ @@ -559,6 +563,8 @@ func testNotifierWithWebsockets_AllEvents(t *testing.T, observerType string) { events := []data.Event{ { Address: hex.EncodeToString(addr), + Data: make([]byte, 0), + Topics: make([][]byte, 0), }, } diff --git a/process/eventsInterceptor.go b/process/eventsInterceptor.go index 6d91fa4..d85f55d 100644 --- a/process/eventsInterceptor.go +++ b/process/eventsInterceptor.go @@ -101,7 +101,7 @@ func (ei *eventsInterceptor) getLogEventsFromTransactionsPool(logs []*outport.Lo } if len(logEvents) == 0 { - return nil + return make([]data.Event, 0) } events := make([]data.Event, 0, len(logEvents)) @@ -122,11 +122,21 @@ func (ei *eventsInterceptor) getLogEventsFromTransactionsPool(logs []*outport.Lo "identifier", eventIdentifier, ) + topics := event.EventHandler.GetTopics() + if topics == nil { + topics = make([][]byte, 0) + } + + eventData := event.EventHandler.GetData() + if eventData == nil { + eventData = make([]byte, 0) + } + events = append(events, data.Event{ Address: bech32Address, Identifier: eventIdentifier, - Topics: event.EventHandler.GetTopics(), - Data: event.EventHandler.GetData(), + Topics: topics, + Data: eventData, TxHash: event.TxHash, }) } diff --git a/process/eventsInterceptor_test.go b/process/eventsInterceptor_test.go index c09f1f0..61bb504 100644 --- a/process/eventsInterceptor_test.go +++ b/process/eventsInterceptor_test.go @@ -196,7 +196,10 @@ func TestProcessBlockEvents(t *testing.T) { ScrsWithOrder: expScrsWithOrder, LogEvents: []data.Event{ { - Address: hex.EncodeToString(addr), + Address: hex.EncodeToString(addr), + Identifier: "", + Data: make([]byte, 0), + Topics: make([][]byte, 0), }, }, } @@ -205,6 +208,71 @@ func TestProcessBlockEvents(t *testing.T) { require.Nil(t, err) require.Equal(t, expEvents, events) }) + + t.Run("nil event fields should be returned as empty", func(t *testing.T) { + t.Parallel() + + eventsInterceptor, _ := process.NewEventsInterceptor(createMockEventsInterceptorArgs()) + + addr := []byte("addr1") + + blockBody := &block.Body{ + MiniBlocks: make([]*block.MiniBlock, 1), + } + blockHeader := &block.HeaderV2{ + Header: &block.Header{ + ShardID: 1, + TimeStamp: 1234, + }, + } + + logs := []*outport.LogData{ + { + Log: &transaction.Log{ + Address: addr, + Events: []*transaction.Event{ + { + Address: addr, + Topics: nil, + Data: nil, + Identifier: nil, + }, + }, + }, + }, + } + + blockHash := []byte("blockHash") + blockEvents := data.ArgsSaveBlockData{ + HeaderHash: blockHash, + Body: blockBody, + Header: blockHeader, + TransactionsPool: &outport.TransactionPool{ + Logs: logs, + }, + } + + expEvents := &data.InterceptorBlockData{ + Hash: hex.EncodeToString(blockHash), + Body: blockBody, + Header: blockHeader, + Txs: make(map[string]*transaction.Transaction), + Scrs: make(map[string]*smartContractResult.SmartContractResult), + LogEvents: []data.Event{ + { + Address: hex.EncodeToString(addr), + Identifier: "", + Data: make([]byte, 0), + Topics: make([][]byte, 0), + }, + }, + } + + events, err := eventsInterceptor.ProcessBlockEvents(&blockEvents) + require.Nil(t, err) + require.Equal(t, expEvents, events) + }) + } func TestGetLogEventsFromTransactionsPool(t *testing.T) {