From ae6f3f11a96720f5a70dc01261680bdc6c749fa2 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 5 May 2023 07:29:37 +0200 Subject: [PATCH 1/5] api/message/types.go: Adding Blocknum and Timestamp to ActionTrace struct --- api/message/msgpack/codec_test.go | 126 +++---- api/message/msgpack/msgpack.go | 541 ++++++++++++++++++++++++++++-- api/message/types.go | 9 +- 3 files changed, 596 insertions(+), 80 deletions(-) diff --git a/api/message/msgpack/codec_test.go b/api/message/msgpack/codec_test.go index 787c1e3..a2da221 100644 --- a/api/message/msgpack/codec_test.go +++ b/api/message/msgpack/codec_test.go @@ -4,6 +4,7 @@ import ( "encoding/hex" "encoding/json" "testing" + "time" "github.com/eosswedenorg/thalos/api/message" "github.com/shamaton/msgpack/v2" @@ -30,12 +31,14 @@ func TestMsgpack_EncodeActionTrace(t *testing.T) { assert.NoError(t, err) msg := message.ActionTrace{ - TxID: "edc06dce6320459fd644756972048da453b2816b0a434c37ddffde36778dcab3", - Name: "sellitem", - Contract: "mygame", - Receiver: "eosio", - Data: dataJson, - HexData: "d0fa1b2ab8a6fd0d1b0173df91aa9ffd277642d05780cf750", + TxID: "edc06dce6320459fd644756972048da453b2816b0a434c37ddffde36778dcab3", + BlockNum: 12345, + Timestamp: time.Unix(1699617279, int64(time.Millisecond)*500), + Name: "sellitem", + Contract: "mygame", + Receiver: "eosio", + Data: dataJson, + HexData: "d0fa1b2ab8a6fd0d1b0173df91aa9ffd277642d05780cf750", Authorization: []message.PermissionLevel{ {Actor: "mygame", Permission: "active"}, }, @@ -48,7 +51,7 @@ func TestMsgpack_EncodeActionTrace(t *testing.T) { assert.NoError(t, err) expected := []byte{ - 0x8a, 0xa5, 0x74, 0x78, 0x5f, 0x69, 0x64, 0xd9, + 0x8c, 0xa5, 0x74, 0x78, 0x5f, 0x69, 0x64, 0xd9, 0x40, 0x65, 0x64, 0x63, 0x30, 0x36, 0x64, 0x63, 0x65, 0x36, 0x33, 0x32, 0x30, 0x34, 0x35, 0x39, 0x66, 0x64, 0x36, 0x34, 0x34, 0x37, 0x35, 0x36, @@ -57,50 +60,55 @@ func TestMsgpack_EncodeActionTrace(t *testing.T) { 0x62, 0x30, 0x61, 0x34, 0x33, 0x34, 0x63, 0x33, 0x37, 0x64, 0x64, 0x66, 0x66, 0x64, 0x65, 0x33, 0x36, 0x37, 0x37, 0x38, 0x64, 0x63, 0x61, 0x62, - 0x33, 0xa4, 0x6e, 0x61, 0x6d, 0x65, 0xa8, 0x73, - 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x6d, 0xa8, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, - 0xa6, 0x6d, 0x79, 0x67, 0x61, 0x6d, 0x65, 0xa8, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, - 0xa5, 0x65, 0x6f, 0x73, 0x69, 0x6f, 0xa4, 0x64, - 0x61, 0x74, 0x61, 0xc4, 0x9b, 0x7b, 0x22, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x22, - 0x31, 0x30, 0x30, 0x30, 0x2e, 0x30, 0x30, 0x30, - 0x30, 0x20, 0x53, 0x43, 0x41, 0x4d, 0x22, 0x2c, - 0x22, 0x66, 0x72, 0x6f, 0x6d, 0x22, 0x3a, 0x22, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x31, - 0x22, 0x2c, 0x22, 0x69, 0x74, 0x65, 0x6d, 0x22, - 0x3a, 0x7b, 0x22, 0x61, 0x67, 0x69, 0x22, 0x3a, - 0x22, 0x32, 0x30, 0x22, 0x2c, 0x22, 0x64, 0x75, - 0x72, 0x22, 0x3a, 0x22, 0x31, 0x30, 0x30, 0x22, - 0x2c, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x22, 0x32, - 0x31, 0x33, 0x31, 0x32, 0x34, 0x32, 0x22, 0x2c, - 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x22, - 0x47, 0x72, 0x65, 0x61, 0x74, 0x20, 0x53, 0x77, - 0x6f, 0x72, 0x64, 0x22, 0x2c, 0x22, 0x71, 0x75, - 0x61, 0x6c, 0x22, 0x3a, 0x22, 0x65, 0x70, 0x69, - 0x63, 0x22, 0x2c, 0x22, 0x73, 0x74, 0x72, 0x22, - 0x3a, 0x22, 0x31, 0x30, 0x30, 0x22, 0x7d, 0x2c, - 0x22, 0x74, 0x6f, 0x22, 0x3a, 0x22, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x22, 0x7d, - 0xa8, 0x68, 0x65, 0x78, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0xd9, 0x31, 0x64, 0x30, 0x66, 0x61, 0x31, - 0x62, 0x32, 0x61, 0x62, 0x38, 0x61, 0x36, 0x66, - 0x64, 0x30, 0x64, 0x31, 0x62, 0x30, 0x31, 0x37, - 0x33, 0x64, 0x66, 0x39, 0x31, 0x61, 0x61, 0x39, - 0x66, 0x66, 0x64, 0x32, 0x37, 0x37, 0x36, 0x34, - 0x32, 0x64, 0x30, 0x35, 0x37, 0x38, 0x30, 0x63, - 0x66, 0x37, 0x35, 0x30, 0xad, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x91, 0x82, 0xa5, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0xa6, 0x6d, 0x79, 0x67, 0x61, 0x6d, - 0x65, 0xaa, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0xa6, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0xa6, 0x65, 0x78, 0x63, 0x65, - 0x70, 0x74, 0xa6, 0x65, 0x72, 0x72, 0x73, 0x74, - 0x72, 0xa5, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x02, - 0xa6, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0xc4, - 0x4, 0xde, 0xad, 0xbe, 0xef, + 0x33, 0xa8, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x6e, + 0x75, 0x6d, 0xcd, 0x30, 0x39, 0xae, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0xd7, 0xff, 0x77, 0x35, + 0x94, 0x00, 0x65, 0x4e, 0x19, 0xff, 0xa4, 0x6e, + 0x61, 0x6d, 0x65, 0xa8, 0x73, 0x65, 0x6c, 0x6c, + 0x69, 0x74, 0x65, 0x6d, 0xa8, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x63, 0x74, 0xa6, 0x6d, 0x79, + 0x67, 0x61, 0x6d, 0x65, 0xa8, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0xa5, 0x65, 0x6f, + 0x73, 0x69, 0x6f, 0xa4, 0x64, 0x61, 0x74, 0x61, + 0xc4, 0x9b, 0x7b, 0x22, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0x3a, 0x22, 0x31, 0x30, 0x30, + 0x30, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, + 0x43, 0x41, 0x4d, 0x22, 0x2c, 0x22, 0x66, 0x72, + 0x6f, 0x6d, 0x22, 0x3a, 0x22, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x31, 0x22, 0x2c, 0x22, + 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3a, 0x7b, 0x22, + 0x61, 0x67, 0x69, 0x22, 0x3a, 0x22, 0x32, 0x30, + 0x22, 0x2c, 0x22, 0x64, 0x75, 0x72, 0x22, 0x3a, + 0x22, 0x31, 0x30, 0x30, 0x22, 0x2c, 0x22, 0x69, + 0x64, 0x22, 0x3a, 0x22, 0x32, 0x31, 0x33, 0x31, + 0x32, 0x34, 0x32, 0x22, 0x2c, 0x22, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x3a, 0x22, 0x47, 0x72, 0x65, + 0x61, 0x74, 0x20, 0x53, 0x77, 0x6f, 0x72, 0x64, + 0x22, 0x2c, 0x22, 0x71, 0x75, 0x61, 0x6c, 0x22, + 0x3a, 0x22, 0x65, 0x70, 0x69, 0x63, 0x22, 0x2c, + 0x22, 0x73, 0x74, 0x72, 0x22, 0x3a, 0x22, 0x31, + 0x30, 0x30, 0x22, 0x7d, 0x2c, 0x22, 0x74, 0x6f, + 0x22, 0x3a, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x32, 0x22, 0x7d, 0xa8, 0x68, 0x65, + 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0xd9, 0x31, + 0x64, 0x30, 0x66, 0x61, 0x31, 0x62, 0x32, 0x61, + 0x62, 0x38, 0x61, 0x36, 0x66, 0x64, 0x30, 0x64, + 0x31, 0x62, 0x30, 0x31, 0x37, 0x33, 0x64, 0x66, + 0x39, 0x31, 0x61, 0x61, 0x39, 0x66, 0x66, 0x64, + 0x32, 0x37, 0x37, 0x36, 0x34, 0x32, 0x64, 0x30, + 0x35, 0x37, 0x38, 0x30, 0x63, 0x66, 0x37, 0x35, + 0x30, 0xad, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x91, + 0x82, 0xa5, 0x61, 0x63, 0x74, 0x6f, 0x72, 0xa6, + 0x6d, 0x79, 0x67, 0x61, 0x6d, 0x65, 0xaa, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0xa6, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, + 0xa6, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0xa6, + 0x65, 0x72, 0x72, 0x73, 0x74, 0x72, 0xa5, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x02, 0xa6, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0xc4, 0x04, 0xde, 0xad, + 0xbe, 0xef, } assert.Equal(t, expected, data) @@ -109,7 +117,7 @@ func TestMsgpack_EncodeActionTrace(t *testing.T) { func TestMsgpack_Decode(t *testing.T) { RegisterGeneratedResolver() - data := []byte("\x8a\xa5tx_id\xd9@edc06dce6320459fd644756972048da453b2816b0a434c37ddffde36778dcab3\xa4name\xa4drop\xa8contract\xa6mygame\xa8receiver\xa8account1\xa4dataċ{\"dropped_from_id\":674562,\"item\":{\"dur\":145,\"id\":49623,\"name\":\"Shadowmourne\",\"qual\":\"legendary\",\"sta\":198,\"str\":223},\"receiver\":\"account1\"}\xa8hex_data\xda\x01\x167b2264726f707065645f66726f6d5f6964223a3637343536322c226974656d223a7b22647572223a3134352c226964223a34393632332c226e616d65223a22536861646f776d6f75726e65222c227175616c223a226c6567656e64617279222c22737461223a3139382c22737472223a3232337d2c227265636569766572223a226163636f756e7431227d\xadauthorization\x91\x82\xa5actor\xa6mygame\xaapermission\xa6active\xa6except\xa6errstr\xa5error\x02\xa6return\xc4\x04ޭ\xbe\xef") + data := []byte("\x8c\xa5tx_id\xd9@edc06dce6320459fd644756972048da453b2816b0a434c37ddffde36778dcab3\xa8blocknum\xce\x00\x85F7\xaeblocktimestamp\xd6\xffH\xf1U\x1f\xa4name\xa4drop\xa8contract\xa6mygame\xa8receiver\xa8account1\xa4dataċ{\"dropped_from_id\":674562,\"item\":{\"dur\":145,\"id\":49623,\"name\":\"Shadowmourne\",\"qual\":\"legendary\",\"sta\":198,\"str\":223},\"receiver\":\"account1\"}\xa8hex_data\xda\x01\x167b2264726f707065645f66726f6d5f6964223a3637343536322c226974656d223a7b22647572223a3134352c226964223a34393632332c226e616d65223a22536861646f776d6f75726e65222c227175616c223a226c6567656e64617279222c22737461223a3139382c22737472223a3232337d2c227265636569766572223a226163636f756e7431227d\xadauthorization\x91\x82\xa5actor\xa6mygame\xaapermission\xa6active\xa6except\xa6errstr\xa5error\x02\xa6return\xc4\x04ޭ\xbe\xef") dataJson, err := json.Marshal(map[string]interface{}{ "item": map[string]interface{}{ @@ -127,12 +135,14 @@ func TestMsgpack_Decode(t *testing.T) { assert.NoError(t, err) expected := message.ActionTrace{ - TxID: "edc06dce6320459fd644756972048da453b2816b0a434c37ddffde36778dcab3", - Name: "drop", - Contract: "mygame", - Receiver: "account1", - Data: dataJson, - HexData: hex.EncodeToString(dataJson), + TxID: "edc06dce6320459fd644756972048da453b2816b0a434c37ddffde36778dcab3", + BlockNum: 8734263, + Timestamp: time.Unix(1223775519, 0), + Name: "drop", + Contract: "mygame", + Receiver: "account1", + Data: dataJson, + HexData: hex.EncodeToString(dataJson), Authorization: []message.PermissionLevel{ {Actor: "mygame", Permission: "active"}, }, diff --git a/api/message/msgpack/msgpack.go b/api/message/msgpack/msgpack.go index 7c9eeec..b80248b 100644 --- a/api/message/msgpack/msgpack.go +++ b/api/message/msgpack/msgpack.go @@ -8,6 +8,7 @@ import ( msgpack "github.com/shamaton/msgpackgen/msgpack" dec "github.com/shamaton/msgpackgen/msgpack/dec" enc "github.com/shamaton/msgpackgen/msgpack/enc" + "time" ) // RegisterGeneratedResolver registers generated resolver. @@ -57,6 +58,36 @@ func ___encodeAsArray(i interface{}) ([]byte, error) { return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.HeartBeat", size, offset) } return b, err + case message.PermissionLevel: + encoder := enc.NewEncoder() + size, err := ___calcArraySizePermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder) + if err != nil { + return nil, err + } + encoder.MakeBytes(size) + b, offset, err := ___encodeArrayPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder, 0) + if err != nil { + return nil, err + } + if size != offset { + return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.PermissionLevel", size, offset) + } + return b, err + case *message.PermissionLevel: + encoder := enc.NewEncoder() + size, err := ___calcArraySizePermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, encoder) + if err != nil { + return nil, err + } + encoder.MakeBytes(size) + b, offset, err := ___encodeArrayPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, encoder, 0) + if err != nil { + return nil, err + } + if size != offset { + return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.PermissionLevel", size, offset) + } + return b, err case message.ActionTrace: encoder := enc.NewEncoder() size, err := ___calcArraySizeActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder) @@ -124,6 +155,36 @@ func ___encodeAsMap(i interface{}) ([]byte, error) { return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.HeartBeat", size, offset) } return b, err + case message.PermissionLevel: + encoder := enc.NewEncoder() + size, err := ___calcMapSizePermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder) + if err != nil { + return nil, err + } + encoder.MakeBytes(size) + b, offset, err := ___encodeMapPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder, 0) + if err != nil { + return nil, err + } + if size != offset { + return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.PermissionLevel", size, offset) + } + return b, err + case *message.PermissionLevel: + encoder := enc.NewEncoder() + size, err := ___calcMapSizePermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, encoder) + if err != nil { + return nil, err + } + encoder.MakeBytes(size) + b, offset, err := ___encodeMapPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, encoder, 0) + if err != nil { + return nil, err + } + if size != offset { + return nil, fmt.Errorf("%s size / offset different %d : %d", "github.com/eosswedenorg/thalos/api/message.PermissionLevel", size, offset) + } + return b, err case message.ActionTrace: encoder := enc.NewEncoder() size, err := ___calcMapSizeActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, encoder) @@ -184,6 +245,20 @@ func ___decodeAsArray(data []byte, i interface{}) (bool, error) { return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len()) } return true, err + case *message.PermissionLevel: + decoder := dec.NewDecoder(data) + offset, err := ___decodeArrayPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, decoder, 0) + if err == nil && offset != decoder.Len() { + return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len()) + } + return true, err + case **message.PermissionLevel: + decoder := dec.NewDecoder(data) + offset, err := ___decodeArrayPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, decoder, 0) + if err == nil && offset != decoder.Len() { + return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len()) + } + return true, err case *message.ActionTrace: decoder := dec.NewDecoder(data) offset, err := ___decodeArrayActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, decoder, 0) @@ -219,6 +294,20 @@ func ___decodeAsMap(data []byte, i interface{}) (bool, error) { return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len()) } return true, err + case *message.PermissionLevel: + decoder := dec.NewDecoder(data) + offset, err := ___decodeMapPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, decoder, 0) + if err == nil && offset != decoder.Len() { + return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len()) + } + return true, err + case **message.PermissionLevel: + decoder := dec.NewDecoder(data) + offset, err := ___decodeMapPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(*v, decoder, 0) + if err == nil && offset != decoder.Len() { + return true, fmt.Errorf("read length is different [%d] [%d] ", offset, decoder.Len()) + } + return true, err case *message.ActionTrace: decoder := dec.NewDecoder(data) offset, err := ___decodeMapActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v, decoder, 0) @@ -388,11 +477,139 @@ func ___decodeMapHeartBeat_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d return offset, err } +// calculate size from github.com/eosswedenorg/thalos/api/message.PermissionLevel +func ___calcArraySizePermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.PermissionLevel, encoder *enc.Encoder) (int, error) { + size := 0 + size += encoder.CalcStructHeaderFix(2) + size += encoder.CalcString(v.Actor) + size += encoder.CalcString(v.Permission) + return size, nil +} + +// calculate size from github.com/eosswedenorg/thalos/api/message.PermissionLevel +func ___calcMapSizePermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.PermissionLevel, encoder *enc.Encoder) (int, error) { + size := 0 + size += encoder.CalcStructHeaderFix(2) + size += encoder.CalcStringFix(5) + size += encoder.CalcString(v.Actor) + size += encoder.CalcStringFix(10) + size += encoder.CalcString(v.Permission) + return size, nil +} + +// encode from github.com/eosswedenorg/thalos/api/message.PermissionLevel +func ___encodeArrayPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.PermissionLevel, encoder *enc.Encoder, offset int) ([]byte, int, error) { + var err error + offset = encoder.WriteStructHeaderFixAsArray(2, offset) + offset = encoder.WriteString(v.Actor, offset) + offset = encoder.WriteString(v.Permission, offset) + return encoder.EncodedBytes(), offset, err +} + +// encode from github.com/eosswedenorg/thalos/api/message.PermissionLevel +func ___encodeMapPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.PermissionLevel, encoder *enc.Encoder, offset int) ([]byte, int, error) { + var err error + offset = encoder.WriteStructHeaderFixAsMap(2, offset) + offset = encoder.WriteStringFix("actor", 5, offset) + offset = encoder.WriteString(v.Actor, offset) + offset = encoder.WriteStringFix("permission", 10, offset) + offset = encoder.WriteString(v.Permission, offset) + return encoder.EncodedBytes(), offset, err +} + +// decode to github.com/eosswedenorg/thalos/api/message.PermissionLevel +func ___decodeArrayPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v *message.PermissionLevel, decoder *dec.Decoder, offset int) (int, error) { + offset, err := decoder.CheckStructHeader(2, offset) + if err != nil { + return 0, err + } + { + var vv string + vv, offset, err = decoder.AsString(offset) + if err != nil { + return 0, err + } + v.Actor = vv + } + { + var vv string + vv, offset, err = decoder.AsString(offset) + if err != nil { + return 0, err + } + v.Permission = vv + } + return offset, err +} + +// decode to github.com/eosswedenorg/thalos/api/message.PermissionLevel +func ___decodeMapPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v *message.PermissionLevel, decoder *dec.Decoder, offset int) (int, error) { + keys := [][]byte{ + {uint8(0x61), uint8(0x63), uint8(0x74), uint8(0x6f), uint8(0x72)}, // actor + {uint8(0x70), uint8(0x65), uint8(0x72), uint8(0x6d), uint8(0x69), uint8(0x73), uint8(0x73), uint8(0x69), uint8(0x6f), uint8(0x6e)}, // permission + } + offset, err := decoder.CheckStructHeader(2, offset) + if err != nil { + return 0, err + } + count := 0 + for count < 2 { + var dataKey []byte + dataKey, offset, err = decoder.AsStringBytes(offset) + if err != nil { + return 0, err + } + fieldIndex := -1 + for i, key := range keys { + if len(dataKey) != len(key) { + continue + } + fieldIndex = i + for dataKeyIndex := range dataKey { + if dataKey[dataKeyIndex] != key[dataKeyIndex] { + fieldIndex = -1 + break + } + } + if fieldIndex >= 0 { + break + } + } + switch fieldIndex { + case 0: + { + var vv string + vv, offset, err = decoder.AsString(offset) + if err != nil { + return 0, err + } + v.Actor = vv + } + count++ + case 1: + { + var vv string + vv, offset, err = decoder.AsString(offset) + if err != nil { + return 0, err + } + v.Permission = vv + } + count++ + default: + return 0, fmt.Errorf("unknown key[%s] found", string(dataKey)) + } + } + return offset, err +} + // calculate size from github.com/eosswedenorg/thalos/api/message.ActionTrace func ___calcArraySizeActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.ActionTrace, encoder *enc.Encoder) (int, error) { size := 0 - size += encoder.CalcStructHeaderFix(6) + size += encoder.CalcStructHeaderFix(12) size += encoder.CalcString(v.TxID) + size += encoder.CalcUint32(v.BlockNum) + size += encoder.CalcTime(v.Timestamp) size += encoder.CalcString(v.Name) size += encoder.CalcString(v.Contract) size += encoder.CalcString(v.Receiver) @@ -409,15 +626,49 @@ func ___calcArraySizeActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988b size += encoder.CalcNil() } size += encoder.CalcString(v.HexData) + if v.Authorization != nil { + s, err := encoder.CalcSliceLength(len(v.Authorization), false) + if err != nil { + return 0, err + } + size += s + for _, vv := range v.Authorization { + size_vv, err := ___calcArraySizePermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(vv, encoder) + if err != nil { + return 0, err + } + size += size_vv + } + } else { + size += encoder.CalcNil() + } + size += encoder.CalcString(v.Except) + size += encoder.CalcUint64(v.Error) + if v.Return != nil { + s, err := encoder.CalcSliceLength(len(v.Return), true) + if err != nil { + return 0, err + } + size += s + for _, vv := range v.Return { + size += encoder.CalcByte(vv) + } + } else { + size += encoder.CalcNil() + } return size, nil } // calculate size from github.com/eosswedenorg/thalos/api/message.ActionTrace func ___calcMapSizeActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.ActionTrace, encoder *enc.Encoder) (int, error) { size := 0 - size += encoder.CalcStructHeaderFix(6) + size += encoder.CalcStructHeaderFix(12) size += encoder.CalcStringFix(5) size += encoder.CalcString(v.TxID) + size += encoder.CalcStringFix(8) + size += encoder.CalcUint32(v.BlockNum) + size += encoder.CalcStringFix(14) + size += encoder.CalcTime(v.Timestamp) size += encoder.CalcStringFix(4) size += encoder.CalcString(v.Name) size += encoder.CalcStringFix(8) @@ -439,14 +690,50 @@ func ___calcMapSizeActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc6 } size += encoder.CalcStringFix(8) size += encoder.CalcString(v.HexData) + size += encoder.CalcStringFix(13) + if v.Authorization != nil { + s, err := encoder.CalcSliceLength(len(v.Authorization), false) + if err != nil { + return 0, err + } + size += s + for _, vv := range v.Authorization { + size_vv, err := ___calcMapSizePermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(vv, encoder) + if err != nil { + return 0, err + } + size += size_vv + } + } else { + size += encoder.CalcNil() + } + size += encoder.CalcStringFix(6) + size += encoder.CalcString(v.Except) + size += encoder.CalcStringFix(5) + size += encoder.CalcUint64(v.Error) + size += encoder.CalcStringFix(6) + if v.Return != nil { + s, err := encoder.CalcSliceLength(len(v.Return), true) + if err != nil { + return 0, err + } + size += s + for _, vv := range v.Return { + size += encoder.CalcByte(vv) + } + } else { + size += encoder.CalcNil() + } return size, nil } // encode from github.com/eosswedenorg/thalos/api/message.ActionTrace func ___encodeArrayActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.ActionTrace, encoder *enc.Encoder, offset int) ([]byte, int, error) { var err error - offset = encoder.WriteStructHeaderFixAsArray(6, offset) + offset = encoder.WriteStructHeaderFixAsArray(12, offset) offset = encoder.WriteString(v.TxID, offset) + offset = encoder.WriteUint32(v.BlockNum, offset) + offset = encoder.WriteTime(v.Timestamp, offset) offset = encoder.WriteString(v.Name, offset) offset = encoder.WriteString(v.Contract, offset) offset = encoder.WriteString(v.Receiver, offset) @@ -459,15 +746,40 @@ func ___encodeArrayActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc6 offset = encoder.WriteNil(offset) } offset = encoder.WriteString(v.HexData, offset) + if v.Authorization != nil { + offset = encoder.WriteSliceLength(len(v.Authorization), offset, false) + for _, vv := range v.Authorization { + _, offset, err = ___encodeArrayPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(vv, encoder, offset) + if err != nil { + return nil, 0, err + } + } + } else { + offset = encoder.WriteNil(offset) + } + offset = encoder.WriteString(v.Except, offset) + offset = encoder.WriteUint64(v.Error, offset) + if v.Return != nil { + offset = encoder.WriteSliceLength(len(v.Return), offset, true) + for _, vv := range v.Return { + offset = encoder.WriteByte(vv, offset) + } + } else { + offset = encoder.WriteNil(offset) + } return encoder.EncodedBytes(), offset, err } // encode from github.com/eosswedenorg/thalos/api/message.ActionTrace func ___encodeMapActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v message.ActionTrace, encoder *enc.Encoder, offset int) ([]byte, int, error) { var err error - offset = encoder.WriteStructHeaderFixAsMap(6, offset) + offset = encoder.WriteStructHeaderFixAsMap(12, offset) offset = encoder.WriteStringFix("tx_id", 5, offset) offset = encoder.WriteString(v.TxID, offset) + offset = encoder.WriteStringFix("blocknum", 8, offset) + offset = encoder.WriteUint32(v.BlockNum, offset) + offset = encoder.WriteStringFix("blocktimestamp", 14, offset) + offset = encoder.WriteTime(v.Timestamp, offset) offset = encoder.WriteStringFix("name", 4, offset) offset = encoder.WriteString(v.Name, offset) offset = encoder.WriteStringFix("contract", 8, offset) @@ -485,12 +797,37 @@ func ___encodeMapActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f } offset = encoder.WriteStringFix("hex_data", 8, offset) offset = encoder.WriteString(v.HexData, offset) + offset = encoder.WriteStringFix("authorization", 13, offset) + if v.Authorization != nil { + offset = encoder.WriteSliceLength(len(v.Authorization), offset, false) + for _, vv := range v.Authorization { + _, offset, err = ___encodeMapPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(vv, encoder, offset) + if err != nil { + return nil, 0, err + } + } + } else { + offset = encoder.WriteNil(offset) + } + offset = encoder.WriteStringFix("except", 6, offset) + offset = encoder.WriteString(v.Except, offset) + offset = encoder.WriteStringFix("error", 5, offset) + offset = encoder.WriteUint64(v.Error, offset) + offset = encoder.WriteStringFix("return", 6, offset) + if v.Return != nil { + offset = encoder.WriteSliceLength(len(v.Return), offset, true) + for _, vv := range v.Return { + offset = encoder.WriteByte(vv, offset) + } + } else { + offset = encoder.WriteNil(offset) + } return encoder.EncodedBytes(), offset, err } // decode to github.com/eosswedenorg/thalos/api/message.ActionTrace func ___decodeArrayActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v *message.ActionTrace, decoder *dec.Decoder, offset int) (int, error) { - offset, err := decoder.CheckStructHeader(6, offset) + offset, err := decoder.CheckStructHeader(12, offset) if err != nil { return 0, err } @@ -502,6 +839,22 @@ func ___decodeArrayActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc6 } v.TxID = vv } + { + var vv uint32 + vv, offset, err = decoder.AsUint32(offset) + if err != nil { + return 0, err + } + v.BlockNum = vv + } + { + var vv time.Time + vv, offset, err = decoder.AsDateTime(offset) + if err != nil { + return 0, err + } + v.Timestamp = vv + } { var vv string vv, offset, err = decoder.AsString(offset) @@ -554,25 +907,87 @@ func ___decodeArrayActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc6 } v.HexData = vv } + if !decoder.IsCodeNil(offset) { + var vv []message.PermissionLevel + var vvl int + vvl, offset, err = decoder.SliceLength(offset) + if err != nil { + return 0, err + } + vv = make([]message.PermissionLevel, vvl) + for vvi := range vv { + var vvv message.PermissionLevel + offset, err = ___decodeArrayPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(&vvv, decoder, offset) + if err != nil { + return 0, err + } + vv[vvi] = vvv + } + v.Authorization = vv + } else { + offset++ + } + { + var vv string + vv, offset, err = decoder.AsString(offset) + if err != nil { + return 0, err + } + v.Except = vv + } + { + var vv uint64 + vv, offset, err = decoder.AsUint64(offset) + if err != nil { + return 0, err + } + v.Error = vv + } + if !decoder.IsCodeNil(offset) { + var vv []byte + var vvl int + vvl, offset, err = decoder.SliceLength(offset) + if err != nil { + return 0, err + } + vv = make([]byte, vvl) + for vvi := range vv { + var vvv byte + vvv, offset, err = decoder.AsByte(offset) + if err != nil { + return 0, err + } + vv[vvi] = vvv + } + v.Return = vv + } else { + offset++ + } return offset, err } // decode to github.com/eosswedenorg/thalos/api/message.ActionTrace func ___decodeMapActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(v *message.ActionTrace, decoder *dec.Decoder, offset int) (int, error) { keys := [][]byte{ - {uint8(0x74), uint8(0x78), uint8(0x5f), uint8(0x69), uint8(0x64)}, // tx_id - {uint8(0x6e), uint8(0x61), uint8(0x6d), uint8(0x65)}, // name - {uint8(0x63), uint8(0x6f), uint8(0x6e), uint8(0x74), uint8(0x72), uint8(0x61), uint8(0x63), uint8(0x74)}, // contract - {uint8(0x72), uint8(0x65), uint8(0x63), uint8(0x65), uint8(0x69), uint8(0x76), uint8(0x65), uint8(0x72)}, // receiver - {uint8(0x64), uint8(0x61), uint8(0x74), uint8(0x61)}, // data - {uint8(0x68), uint8(0x65), uint8(0x78), uint8(0x5f), uint8(0x64), uint8(0x61), uint8(0x74), uint8(0x61)}, // hex_data + {uint8(0x74), uint8(0x78), uint8(0x5f), uint8(0x69), uint8(0x64)}, // tx_id + {uint8(0x62), uint8(0x6c), uint8(0x6f), uint8(0x63), uint8(0x6b), uint8(0x6e), uint8(0x75), uint8(0x6d)}, // blocknum + {uint8(0x62), uint8(0x6c), uint8(0x6f), uint8(0x63), uint8(0x6b), uint8(0x74), uint8(0x69), uint8(0x6d), uint8(0x65), uint8(0x73), uint8(0x74), uint8(0x61), uint8(0x6d), uint8(0x70)}, // blocktimestamp + {uint8(0x6e), uint8(0x61), uint8(0x6d), uint8(0x65)}, // name + {uint8(0x63), uint8(0x6f), uint8(0x6e), uint8(0x74), uint8(0x72), uint8(0x61), uint8(0x63), uint8(0x74)}, // contract + {uint8(0x72), uint8(0x65), uint8(0x63), uint8(0x65), uint8(0x69), uint8(0x76), uint8(0x65), uint8(0x72)}, // receiver + {uint8(0x64), uint8(0x61), uint8(0x74), uint8(0x61)}, // data + {uint8(0x68), uint8(0x65), uint8(0x78), uint8(0x5f), uint8(0x64), uint8(0x61), uint8(0x74), uint8(0x61)}, // hex_data + {uint8(0x61), uint8(0x75), uint8(0x74), uint8(0x68), uint8(0x6f), uint8(0x72), uint8(0x69), uint8(0x7a), uint8(0x61), uint8(0x74), uint8(0x69), uint8(0x6f), uint8(0x6e)}, // authorization + {uint8(0x65), uint8(0x78), uint8(0x63), uint8(0x65), uint8(0x70), uint8(0x74)}, // except + {uint8(0x65), uint8(0x72), uint8(0x72), uint8(0x6f), uint8(0x72)}, // error + {uint8(0x72), uint8(0x65), uint8(0x74), uint8(0x75), uint8(0x72), uint8(0x6e)}, // return } - offset, err := decoder.CheckStructHeader(6, offset) + offset, err := decoder.CheckStructHeader(12, offset) if err != nil { return 0, err } count := 0 - for count < 6 { + for count < 12 { var dataKey []byte dataKey, offset, err = decoder.AsStringBytes(offset) if err != nil { @@ -607,22 +1022,22 @@ func ___decodeMapActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f count++ case 1: { - var vv string - vv, offset, err = decoder.AsString(offset) + var vv uint32 + vv, offset, err = decoder.AsUint32(offset) if err != nil { return 0, err } - v.Name = vv + v.BlockNum = vv } count++ case 2: { - var vv string - vv, offset, err = decoder.AsString(offset) + var vv time.Time + vv, offset, err = decoder.AsDateTime(offset) if err != nil { return 0, err } - v.Contract = vv + v.Timestamp = vv } count++ case 3: @@ -632,10 +1047,30 @@ func ___decodeMapActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f if err != nil { return 0, err } - v.Receiver = vv + v.Name = vv } count++ case 4: + { + var vv string + vv, offset, err = decoder.AsString(offset) + if err != nil { + return 0, err + } + v.Contract = vv + } + count++ + case 5: + { + var vv string + vv, offset, err = decoder.AsString(offset) + if err != nil { + return 0, err + } + v.Receiver = vv + } + count++ + case 6: if !decoder.IsCodeNil(offset) { var vv []byte var vvl int @@ -657,7 +1092,7 @@ func ___decodeMapActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f offset++ } count++ - case 5: + case 7: { var vv string vv, offset, err = decoder.AsString(offset) @@ -667,6 +1102,70 @@ func ___decodeMapActionTrace_27424f445a2085e7723342fb0df638c626b43c59240988bc64f v.HexData = vv } count++ + case 8: + if !decoder.IsCodeNil(offset) { + var vv []message.PermissionLevel + var vvl int + vvl, offset, err = decoder.SliceLength(offset) + if err != nil { + return 0, err + } + vv = make([]message.PermissionLevel, vvl) + for vvi := range vv { + var vvv message.PermissionLevel + offset, err = ___decodeMapPermissionLevel_27424f445a2085e7723342fb0df638c626b43c59240988bc64f2d60167ee4080(&vvv, decoder, offset) + if err != nil { + return 0, err + } + vv[vvi] = vvv + } + v.Authorization = vv + } else { + offset++ + } + count++ + case 9: + { + var vv string + vv, offset, err = decoder.AsString(offset) + if err != nil { + return 0, err + } + v.Except = vv + } + count++ + case 10: + { + var vv uint64 + vv, offset, err = decoder.AsUint64(offset) + if err != nil { + return 0, err + } + v.Error = vv + } + count++ + case 11: + if !decoder.IsCodeNil(offset) { + var vv []byte + var vvl int + vvl, offset, err = decoder.SliceLength(offset) + if err != nil { + return 0, err + } + vv = make([]byte, vvl) + for vvi := range vv { + var vvv byte + vvv, offset, err = decoder.AsByte(offset) + if err != nil { + return 0, err + } + vv[vvi] = vvv + } + v.Return = vv + } else { + offset++ + } + count++ default: return 0, fmt.Errorf("unknown key[%s] found", string(dataKey)) } diff --git a/api/message/types.go b/api/message/types.go index a0b480c..dae9a04 100644 --- a/api/message/types.go +++ b/api/message/types.go @@ -1,6 +1,9 @@ package message -import "encoding/json" +import ( + "encoding/json" + "time" +) type HeartBeat struct { BlockNum uint32 `json:"blocknum" msgpack:"blocknum"` @@ -16,6 +19,10 @@ type PermissionLevel struct { type ActionTrace struct { TxID string `json:"tx_id" msgpack:"tx_id"` + BlockNum uint32 `json:"blocknum" msgpack:"blocknum"` + + Timestamp time.Time `json:"blocktimestamp" msgpack:"blocktimestamp"` + // Action name Name string `json:"name" msgpack:"name"` From 4ec78c38dfb377cbe61e25ef8bd9eb20b7a09956 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 5 May 2023 07:32:39 +0200 Subject: [PATCH 2/5] app/ship_processor.go: Include Blocknum and Timestamp in ActionTrace messages. --- app/ship_processor.go | 133 +++++++++++++++++++++--------------------- 1 file changed, 68 insertions(+), 65 deletions(-) diff --git a/app/ship_processor.go b/app/ship_processor.go index c7cb9f0..2ad4cef 100644 --- a/app/ship_processor.go +++ b/app/ship_processor.go @@ -43,7 +43,9 @@ func SpawnProccessor(shipStream *shipclient.Stream, writer api.Writer, abi *abi. // Attach handlers shipStream.BlockHandler = processor.processBlock - shipStream.TraceHandler = processor.processTraces + + // Needed because if nil, traces will not be included in the response from ship. + shipStream.TraceHandler = func([]*ship.TransactionTraceV0) {} return processor } @@ -77,83 +79,81 @@ func (processor *ShipProcessor) processBlock(block *ship.GetBlocksResultV0) { } processor.encodeQueue(api.HeartbeatChannel, hb) - - err := processor.writer.Flush() - if err != nil { - log.WithError(err).Error("Failed to send messages") - } } -} -func (processor *ShipProcessor) processTraces(traces []*ship.TransactionTraceV0) { - for _, trace := range traces { + // Process traces + if block.Traces != nil && len(block.Traces.Elem) > 0 { + for _, trace := range block.Traces.AsTransactionTracesV0() { - processor.encodeQueue(api.TransactionChannel, trace) + processor.encodeQueue(api.TransactionChannel, trace) - // Actions - for _, actionTraceVar := range trace.ActionTraces { - var act_trace *ship.ActionTraceV1 + // Actions + for _, actionTraceVar := range trace.ActionTraces { + var act_trace *ship.ActionTraceV1 - if trace_v0, ok := actionTraceVar.Impl.(*ship.ActionTraceV0); ok { - // convert to v1 - act_trace = &ship.ActionTraceV1{ - ActionOrdinal: trace_v0.ActionOrdinal, - CreatorActionOrdinal: trace_v0.CreatorActionOrdinal, - Receipt: trace_v0.Receipt, - Receiver: trace_v0.Receiver, - Act: trace_v0.Act, - ContextFree: trace_v0.ContextFree, - Elapsed: trace_v0.Elapsed, - Console: trace_v0.Console, - AccountRamDeltas: trace_v0.AccountRamDeltas, - Except: trace_v0.Except, - ErrorCode: trace_v0.ErrorCode, - ReturnValue: []byte{}, + if trace_v0, ok := actionTraceVar.Impl.(*ship.ActionTraceV0); ok { + // convert to v1 + act_trace = &ship.ActionTraceV1{ + ActionOrdinal: trace_v0.ActionOrdinal, + CreatorActionOrdinal: trace_v0.CreatorActionOrdinal, + Receipt: trace_v0.Receipt, + Receiver: trace_v0.Receiver, + Act: trace_v0.Act, + ContextFree: trace_v0.ContextFree, + Elapsed: trace_v0.Elapsed, + Console: trace_v0.Console, + AccountRamDeltas: trace_v0.AccountRamDeltas, + Except: trace_v0.Except, + ErrorCode: trace_v0.ErrorCode, + ReturnValue: []byte{}, + } + } else { + act_trace = actionTraceVar.Impl.(*ship.ActionTraceV1) } - } else { - act_trace = actionTraceVar.Impl.(*ship.ActionTraceV1) - } - act := message.ActionTrace{ - TxID: trace.ID.String(), - Name: act_trace.Act.Name.String(), - Contract: act_trace.Act.Account.String(), - Receiver: act_trace.Receiver.String(), - HexData: hex.EncodeToString(act_trace.Act.Data), - } + act := message.ActionTrace{ + TxID: trace.ID.String(), + BlockNum: block.Block.BlockNumber(), + Timestamp: block.Block.Timestamp.Time.UTC(), + Name: act_trace.Act.Name.String(), + Contract: act_trace.Act.Account.String(), + Receiver: act_trace.Receiver.String(), + HexData: hex.EncodeToString(act_trace.Act.Data), + } - for _, auth := range act_trace.Act.Authorization { - act.Authorization = append(act.Authorization, message.PermissionLevel{ - Actor: auth.Actor.String(), - Permission: auth.Permission.String(), - }) - } + for _, auth := range act_trace.Act.Authorization { + act.Authorization = append(act.Authorization, message.PermissionLevel{ + Actor: auth.Actor.String(), + Permission: auth.Permission.String(), + }) + } - ABI, err := processor.abi.GetAbi(act_trace.Act.Account) - if err == nil { - data, err := ABI.DecodeAction(act_trace.Act.Data, act_trace.Act.Name) + ABI, err := processor.abi.GetAbi(act_trace.Act.Account) + if err == nil { + data, err := ABI.DecodeAction(act_trace.Act.Data, act_trace.Act.Name) + if err != nil { + log.WithError(err).Warn("Failed to decode action") + } + act.Data = data + } else { + log.WithError(err).Errorf("Failed to get abi for contract %s", act_trace.Act.Account) + } + + payload, err := processor.encode(act) if err != nil { - log.WithError(err).Warn("Failed to decode action") + continue } - act.Data = data - } else { - log.WithError(err).Errorf("Failed to get abi for contract %s", act_trace.Act.Account) - } - payload, err := processor.encode(act) - if err != nil { - continue - } + channels := []api.Channel{ + api.ActionChannel{}.Channel(), + api.ActionChannel{Name: act.Name}.Channel(), + api.ActionChannel{Contract: act.Contract}.Channel(), + api.ActionChannel{Name: act.Name, Contract: act.Contract}.Channel(), + } - channels := []api.Channel{ - api.ActionChannel{}.Channel(), - api.ActionChannel{Name: act.Name}.Channel(), - api.ActionChannel{Contract: act.Contract}.Channel(), - api.ActionChannel{Name: act.Name, Contract: act.Contract}.Channel(), - } - - for _, channel := range channels { - processor.queueMessage(channel, payload) + for _, channel := range channels { + processor.queueMessage(channel, payload) + } } } } @@ -164,6 +164,9 @@ func (processor *ShipProcessor) processTraces(traces []*ship.TransactionTraceV0) } } +func (processor *ShipProcessor) processTraces([]*ship.TransactionTraceV0) { +} + func (processor *ShipProcessor) Close() error { return processor.writer.Close() } From 1a75286240802767e2e1bb472f01d857c7faaaa1 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 5 May 2023 09:16:29 +0200 Subject: [PATCH 3/5] Adding api/message/json/codec_test.go --- api/message/json/codec_test.go | 78 ++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 api/message/json/codec_test.go diff --git a/api/message/json/codec_test.go b/api/message/json/codec_test.go new file mode 100644 index 0000000..6f846ce --- /dev/null +++ b/api/message/json/codec_test.go @@ -0,0 +1,78 @@ +package json + +import ( + "encoding/hex" + "encoding/json" + "testing" + "time" + + "github.com/eosswedenorg/thalos/api/message" + "github.com/stretchr/testify/assert" +) + +func TestJson_EncodeActionTrace(t *testing.T) { + dataJson, err := json.Marshal(map[string]string{ + "from": "account1", + "to": "account2", + "quantity": "1000.0000 WAX", + }) + + assert.NoError(t, err) + + msg := message.ActionTrace{ + TxID: "ed3b8e853647971cf8296f004c3a1aeac255f082b2cb3c12cc3222e2d7c174ab", + BlockNum: 267372365, + Timestamp: time.Unix(1048267389, int64(time.Millisecond)*500).UTC(), + Name: "transfer", + Contract: "eosio", + Receiver: "account2", + Data: dataJson, + HexData: hex.EncodeToString(dataJson), + Authorization: []message.PermissionLevel{ + {Actor: "account1", Permission: "active"}, + }, + Except: "errstr", + Error: 2, + Return: []byte{0xde, 0xad, 0xbe, 0xef}, + } + + expected := `{"tx_id":"ed3b8e853647971cf8296f004c3a1aeac255f082b2cb3c12cc3222e2d7c174ab","blocknum":267372365,"blocktimestamp":"2003-03-21T17:23:09.5Z","name":"transfer","contract":"eosio","receiver":"account2","data":"eyJmcm9tIjoiYWNjb3VudDEiLCJxdWFudGl0eSI6IjEwMDAuMDAwMCBXQVgiLCJ0byI6ImFjY291bnQyIn0=","hex_data":"7b2266726f6d223a226163636f756e7431222c227175616e74697479223a22313030302e3030303020574158222c22746f223a226163636f756e7432227d","authorization":[{"actor":"account1","permission":"active"}],"except":"errstr","error":2,"return":"3q2+7w=="}` + + data, err := json.Marshal(msg) + assert.NoError(t, err) + assert.Equal(t, expected, string(data)) +} + +func TestJson_DecodeActionTrace(t *testing.T) { + dataJson, err := json.Marshal(map[string]string{ + "from": "account1", + "to": "account2", + "quantity": "1000.0000 WAX", + }) + + assert.NoError(t, err) + + expected := message.ActionTrace{ + TxID: "952989f7464237b6cf9926e533ecd331df6794ed07564bd052bc368cbd65b4bc", + BlockNum: 8723971, + Timestamp: time.Unix(1718957306, int64(time.Millisecond)*500).UTC(), + Name: "transfer", + Contract: "eosio", + Receiver: "account2", + Data: dataJson, + HexData: hex.EncodeToString(dataJson), + Authorization: []message.PermissionLevel{ + {Actor: "account1", Permission: "active"}, + }, + Except: "errstr", + Error: 2, + Return: []byte{0xde, 0xad, 0xbe, 0xef}, + } + + input := `{"tx_id":"952989f7464237b6cf9926e533ecd331df6794ed07564bd052bc368cbd65b4bc","blocknum":8723971,"blocktimestamp":"2024-06-21T08:08:26.5Z","name":"transfer","contract":"eosio","receiver":"account2","data":"eyJmcm9tIjoiYWNjb3VudDEiLCJxdWFudGl0eSI6IjEwMDAuMDAwMCBXQVgiLCJ0byI6ImFjY291bnQyIn0=","hex_data":"7b2266726f6d223a226163636f756e7431222c227175616e74697479223a22313030302e3030303020574158222c22746f223a226163636f756e7432227d","authorization":[{"actor":"account1","permission":"active"}],"except":"errstr","error":2,"return":"3q2+7w=="}` + + msg := message.ActionTrace{} + err = json.Unmarshal([]byte(input), &msg) + assert.NoError(t, err) + assert.Equal(t, expected, msg) +} From 213daa1e4653539527e42b8766deb403ac642bcb Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 5 May 2023 09:20:35 +0200 Subject: [PATCH 4/5] api/message/json/codec.go: fix timestamps, skip "Z" (always UTC) and use 3 decimals for milliseconds. --- api/go.mod | 4 ++++ api/go.sum | 12 ++++++++++++ api/message/json/codec.go | 11 ++++++++--- api/message/json/codec_test.go | 8 ++++---- go.mod | 4 ++++ go.sum | 13 +++++++++++++ 6 files changed, 45 insertions(+), 7 deletions(-) diff --git a/api/go.mod b/api/go.mod index 9637124..80e82b7 100644 --- a/api/go.mod +++ b/api/go.mod @@ -6,6 +6,7 @@ require ( github.com/alicebob/miniredis/v2 v2.30.2 github.com/go-redis/redis/v8 v8.11.5 github.com/go-redis/redismock/v8 v8.11.5 + github.com/liamylian/jsontime/v2 v2.0.0 github.com/shamaton/msgpack/v2 v2.1.0 github.com/shamaton/msgpackgen v0.3.0 github.com/stretchr/testify v1.8.2 @@ -16,6 +17,9 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/json-iterator/go v1.1.9 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/yuin/gopher-lua v1.1.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/api/go.sum b/api/go.sum index bac83be..850d379 100644 --- a/api/go.sum +++ b/api/go.sum @@ -34,9 +34,20 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/liamylian/jsontime/v2 v2.0.0 h1:3if2kDW/boymUdO+4Qj/m4uaXMBSF6np9KEgg90cwH0= +github.com/liamylian/jsontime/v2 v2.0.0/go.mod h1:UHp1oAPqCBfspokvGmaGe0IAl2IgOpgOgDaKPcvcGGY= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -60,6 +71,7 @@ github.com/shamaton/msgpackgen v0.3.0/go.mod h1:fd99fDDuxuTiWzkHC59uEGzrt/WDu+lt github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= diff --git a/api/message/json/codec.go b/api/message/json/codec.go index e7fd629..8d18b03 100644 --- a/api/message/json/codec.go +++ b/api/message/json/codec.go @@ -1,14 +1,19 @@ package json import ( - "encoding/json" + "time" "github.com/eosswedenorg/thalos/api/message" + jsontime "github.com/liamylian/jsontime/v2/v2" ) +var json_codec = jsontime.ConfigWithCustomTimeFormat + func init() { + jsontime.SetDefaultTimeFormat("2006-01-02T15:04:05.000", time.UTC) + message.RegisterCodec("json", message.Codec{ - Encoder: json.Marshal, - Decoder: json.Unmarshal, + Encoder: json_codec.Marshal, + Decoder: json_codec.Unmarshal, }) } diff --git a/api/message/json/codec_test.go b/api/message/json/codec_test.go index 6f846ce..f775667 100644 --- a/api/message/json/codec_test.go +++ b/api/message/json/codec_test.go @@ -36,9 +36,9 @@ func TestJson_EncodeActionTrace(t *testing.T) { Return: []byte{0xde, 0xad, 0xbe, 0xef}, } - expected := `{"tx_id":"ed3b8e853647971cf8296f004c3a1aeac255f082b2cb3c12cc3222e2d7c174ab","blocknum":267372365,"blocktimestamp":"2003-03-21T17:23:09.5Z","name":"transfer","contract":"eosio","receiver":"account2","data":"eyJmcm9tIjoiYWNjb3VudDEiLCJxdWFudGl0eSI6IjEwMDAuMDAwMCBXQVgiLCJ0byI6ImFjY291bnQyIn0=","hex_data":"7b2266726f6d223a226163636f756e7431222c227175616e74697479223a22313030302e3030303020574158222c22746f223a226163636f756e7432227d","authorization":[{"actor":"account1","permission":"active"}],"except":"errstr","error":2,"return":"3q2+7w=="}` + expected := `{"tx_id":"ed3b8e853647971cf8296f004c3a1aeac255f082b2cb3c12cc3222e2d7c174ab","blocknum":267372365,"blocktimestamp":"2003-03-21T17:23:09.500","name":"transfer","contract":"eosio","receiver":"account2","data":"eyJmcm9tIjoiYWNjb3VudDEiLCJxdWFudGl0eSI6IjEwMDAuMDAwMCBXQVgiLCJ0byI6ImFjY291bnQyIn0=","hex_data":"7b2266726f6d223a226163636f756e7431222c227175616e74697479223a22313030302e3030303020574158222c22746f223a226163636f756e7432227d","authorization":[{"actor":"account1","permission":"active"}],"except":"errstr","error":2,"return":"3q2+7w=="}` - data, err := json.Marshal(msg) + data, err := json_codec.Marshal(msg) assert.NoError(t, err) assert.Equal(t, expected, string(data)) } @@ -69,10 +69,10 @@ func TestJson_DecodeActionTrace(t *testing.T) { Return: []byte{0xde, 0xad, 0xbe, 0xef}, } - input := `{"tx_id":"952989f7464237b6cf9926e533ecd331df6794ed07564bd052bc368cbd65b4bc","blocknum":8723971,"blocktimestamp":"2024-06-21T08:08:26.5Z","name":"transfer","contract":"eosio","receiver":"account2","data":"eyJmcm9tIjoiYWNjb3VudDEiLCJxdWFudGl0eSI6IjEwMDAuMDAwMCBXQVgiLCJ0byI6ImFjY291bnQyIn0=","hex_data":"7b2266726f6d223a226163636f756e7431222c227175616e74697479223a22313030302e3030303020574158222c22746f223a226163636f756e7432227d","authorization":[{"actor":"account1","permission":"active"}],"except":"errstr","error":2,"return":"3q2+7w=="}` + input := `{"tx_id":"952989f7464237b6cf9926e533ecd331df6794ed07564bd052bc368cbd65b4bc","blocknum":8723971,"blocktimestamp":"2024-06-21T08:08:26.500","name":"transfer","contract":"eosio","receiver":"account2","data":"eyJmcm9tIjoiYWNjb3VudDEiLCJxdWFudGl0eSI6IjEwMDAuMDAwMCBXQVgiLCJ0byI6ImFjY291bnQyIn0=","hex_data":"7b2266726f6d223a226163636f756e7431222c227175616e74697479223a22313030302e3030303020574158222c22746f223a226163636f756e7432227d","authorization":[{"actor":"account1","permission":"active"}],"except":"errstr","error":2,"return":"3q2+7w=="}` msg := message.ActionTrace{} - err = json.Unmarshal([]byte(input), &msg) + err = json_codec.Unmarshal([]byte(input), &msg) assert.NoError(t, err) assert.Equal(t, expected, msg) } diff --git a/go.mod b/go.mod index 63a5aa4..7a42eaa 100644 --- a/go.mod +++ b/go.mod @@ -26,9 +26,13 @@ require ( github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible // indirect github.com/gorilla/websocket v1.5.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.16.5 // indirect + github.com/liamylian/jsontime/v2 v2.0.0 // indirect github.com/logrusorgru/aurora v2.0.3+incompatible // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect github.com/onsi/gomega v1.27.6 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/go.sum b/go.sum index a7828ee..35b85e5 100644 --- a/go.sum +++ b/go.sum @@ -56,6 +56,7 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -63,6 +64,9 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jarcoal/httpmock v1.2.0 h1:gSvTxxFR/MEMfsGrvRbdfpRUMBStovlSRLw0Ep1bwwc= github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible h1:jdpOPRN1zP63Td1hDQbZW73xKmzDvZHzVdNYxhnTMDA= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= @@ -74,10 +78,19 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/liamylian/jsontime/v2 v2.0.0 h1:3if2kDW/boymUdO+4Qj/m4uaXMBSF6np9KEgg90cwH0= +github.com/liamylian/jsontime/v2 v2.0.0/go.mod h1:UHp1oAPqCBfspokvGmaGe0IAl2IgOpgOgDaKPcvcGGY= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/nikoksr/notify v0.38.1 h1:+WjA3nUMMhfxKuFFYmTIgDOykdI7GPP3ZWWg3SLuQyo= github.com/nikoksr/notify v0.38.1/go.mod h1:BA0LnpzG+iBlnxtPnSmV/Ei57wqEtyv9V9IJ+rDlo58= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= From ef3a0159c0b1b35db50fc78ac24a29895ece71f8 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 5 May 2023 18:57:55 +0200 Subject: [PATCH 5/5] app/ship_processor.go: remove processTraces(). not used. --- app/ship_processor.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/ship_processor.go b/app/ship_processor.go index 2ad4cef..63422be 100644 --- a/app/ship_processor.go +++ b/app/ship_processor.go @@ -164,9 +164,6 @@ func (processor *ShipProcessor) processBlock(block *ship.GetBlocksResultV0) { } } -func (processor *ShipProcessor) processTraces([]*ship.TransactionTraceV0) { -} - func (processor *ShipProcessor) Close() error { return processor.writer.Close() }