Skip to content

Commit fedc27f

Browse files
mmsqealjo242
andauthored
feat: don't emit EVM logs into cosmos-sdk events (#576)
* feat: don't emit EVM logs into cosmos-sdk events * add doc * no need parse for old event * less diff * cleanup * test * test * Update CHANGELOG.md * Apply suggestions from code review * Apply suggestions from code review --------- Co-authored-by: Alex | Interchain Labs <[email protected]>
1 parent bd607f7 commit fedc27f

File tree

13 files changed

+290
-685
lines changed

13 files changed

+290
-685
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
- [\#496](https://github.com/cosmos/evm/pull/496) Simplify mempool instantiation by using configs instead of objects.
2323
- [\#568](https://github.com/cosmos/evm/pull/568) Avoid unnecessary block notifications when the event bus is already set up.
2424
- [\#511](https://github.com/cosmos/evm/pull/511) Minor code cleanup for `AddPrecompileFn`.
25+
- [\#544](https://github.com/cosmos/evm/pull/544) Parse logs from the txResult.Data and avoid emitting EVM events to cosmos-sdk events.
2526

2627
### FEATURES
2728

rpc/backend/blocks.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,10 +610,18 @@ func (b *Backend) formatTxReceipt(
610610
if err != nil {
611611
return nil, err
612612
}
613+
height, err := cosmosevmtypes.SafeUint64(blockRes.Height)
614+
if err != nil {
615+
return nil, err
616+
}
613617

614618
// parse tx logs from events
615619
msgIndex := int(txResult.MsgIndex) // #nosec G115 -- checked for int overflow already
616-
logs, err := evmtypes.TxLogsFromEvents(blockRes.TxsResults[txResult.TxIndex].Events, msgIndex)
620+
logs, err := evmtypes.DecodeMsgLogs(
621+
blockRes.TxsResults[txResult.TxIndex].Data,
622+
msgIndex,
623+
height,
624+
)
617625
if err != nil {
618626
b.Logger.Debug("failed to parse logs", "hash", ethMsg.Hash().String(), "error", err.Error())
619627
}

rpc/backend/tx_info.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,22 @@ func (b *Backend) GetTransactionLogs(hash common.Hash) ([]*ethtypes.Log, error)
214214
b.Logger.Debug("block result not found", "number", res.Height, "error", err.Error())
215215
return nil, nil
216216
}
217-
217+
height, err := types.SafeUint64(resBlockResult.Height)
218+
if err != nil {
219+
return nil, err
220+
}
218221
// parse tx logs from events
219222
index := int(res.MsgIndex) // #nosec G701
220-
return evmtypes.TxLogsFromEvents(resBlockResult.TxsResults[res.TxIndex].Events, index)
223+
logs, err := evmtypes.DecodeMsgLogs(
224+
resBlockResult.TxsResults[res.TxIndex].Data,
225+
index,
226+
height,
227+
)
228+
if err != nil {
229+
b.Logger.Debug("failed to parse tx logs", "error", err.Error())
230+
}
231+
232+
return logs, nil
221233
}
222234

223235
// GetTransactionByBlockHashAndIndex returns the transaction identified by hash and index.

rpc/backend/utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ func GetLogsFromBlockResults(blockRes *cmtrpctypes.ResultBlockResults) ([][]*eth
266266
}
267267
blockLogs := [][]*ethtypes.Log{}
268268
for _, txResult := range blockRes.TxsResults {
269-
logs, err := evmtypes.DecodeTxLogsFromEvents(txResult.Data, txResult.Events, height)
269+
logs, err := evmtypes.DecodeTxLogs(txResult.Data, height)
270270
if err != nil {
271271
return nil, err
272272
}

rpc/stream/rpc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ func (s *RPCStream) start(
187187
if err != nil {
188188
continue
189189
}
190-
txLogs, err := evmtypes.DecodeTxLogsFromEvents(dataTx.Result.Data, dataTx.Result.Events, height)
190+
txLogs, err := evmtypes.DecodeTxLogs(dataTx.Result.Data, height)
191191
if err != nil {
192192
s.logger.Error("fail to decode evm tx response", "error", err.Error())
193193
continue

rpc/types/events_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ func TestParseTxResult(t *testing.T) {
5858
{Key: "recipient", Value: "0x775b87ef5D82ca211811C1a02CE0fE0CA3a455d7"},
5959
{Key: "ethereumTxFailed", Value: "contract everted"},
6060
}},
61-
{Type: evmtypes.EventTypeTxLog, Attributes: []abci.EventAttribute{}},
6261
},
6362
},
6463
[]*ParsedTx{
@@ -143,7 +142,6 @@ func TestParseTxResult(t *testing.T) {
143142
{Key: "recipient", Value: "0x775b87ef5D82ca211811C1a02CE0fE0CA3a455d7"},
144143
{Key: "ethereumTxFailed", Value: "contract everted"},
145144
}},
146-
{Type: evmtypes.EventTypeTxLog, Attributes: []abci.EventAttribute{}},
147145
},
148146
},
149147
nil,

tests/integration/rpc/backend/test_client.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"testing"
66

77
"github.com/ethereum/go-ethereum/common"
8+
"github.com/gogo/protobuf/proto"
89
"github.com/stretchr/testify/mock"
910
"github.com/stretchr/testify/require"
1011

@@ -23,6 +24,7 @@ import (
2324

2425
"github.com/cosmos/cosmos-sdk/client"
2526
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
27+
sdk "github.com/cosmos/cosmos-sdk/types"
2628
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
2729
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
2830
)
@@ -199,19 +201,23 @@ func TestRegisterConsensusParams(t *testing.T) {
199201
}
200202

201203
// BlockResults
202-
203204
func RegisterBlockResultsWithEventLog(client *mocks.Client, height int64) (*cmtrpctypes.ResultBlockResults, error) {
205+
anyValue, err := codectypes.NewAnyWithValue(&evmtypes.MsgEthereumTxResponse{
206+
Logs: []*evmtypes.Log{
207+
{Data: []byte("data")},
208+
},
209+
})
210+
if err != nil {
211+
return nil, err
212+
}
213+
data, err := proto.Marshal(&sdk.TxMsgData{MsgResponses: []*codectypes.Any{anyValue}})
214+
if err != nil {
215+
return nil, err
216+
}
204217
res := &cmtrpctypes.ResultBlockResults{
205218
Height: height,
206219
TxsResults: []*abci.ExecTxResult{
207-
{Code: 0, GasUsed: 0, Events: []abci.Event{{
208-
Type: evmtypes.EventTypeTxLog,
209-
Attributes: []abci.EventAttribute{{
210-
Key: evmtypes.AttributeKeyTxLog,
211-
Value: "{\"test\": \"hello\"}", // TODO refactor the value to unmarshall to a evmtypes.Log struct successfully
212-
Index: true,
213-
}},
214-
}}},
220+
{Code: 0, GasUsed: 0, Data: data},
215221
},
216222
}
217223
client.On("BlockResults", rpc.ContextWithHeight(height), mock.AnythingOfType("*int64")).

tests/integration/rpc/backend/test_filters.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package backend
22

33
import (
4-
"encoding/json"
5-
64
"github.com/ethereum/go-ethereum/common"
75
ethtypes "github.com/ethereum/go-ethereum/core/types"
86

@@ -16,12 +14,12 @@ import (
1614
func (s *TestSuite) TestGetLogs() {
1715
_, bz := s.buildEthereumTx()
1816
block := cmttypes.MakeBlock(1, []cmttypes.Tx{bz}, nil, nil)
19-
logs := make([]*evmtypes.Log, 0, 1)
20-
var log evmtypes.Log
21-
err := json.Unmarshal([]byte("{\"test\": \"hello\"}"), &log) // TODO refactor this to unmarshall to a log struct successfully
22-
s.Require().NoError(err)
23-
24-
logs = append(logs, &log)
17+
logs := []*evmtypes.Log{
18+
{
19+
Data: []byte("data"),
20+
BlockNumber: 1,
21+
},
22+
}
2523

2624
testCases := []struct {
2725
name string

tests/integration/x/vm/test_msg_server.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ func (s *KeeperTestSuite) TestEthereumTx() {
6363
// check expected events were emitted
6464
s.Require().NotEmpty(events)
6565
s.Require().True(utils.ContainsEventType(events.ToABCIEvents(), types.EventTypeEthereumTx))
66-
s.Require().True(utils.ContainsEventType(events.ToABCIEvents(), types.EventTypeTxLog))
6766
s.Require().True(utils.ContainsEventType(events.ToABCIEvents(), sdktypes.EventTypeMessage))
6867
}
6968

x/vm/keeper/msg_server.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package keeper
33
import (
44
"context"
55
"encoding/hex"
6-
"encoding/json"
76
"fmt"
87
"strconv"
98

@@ -99,25 +98,12 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t
9998
attrs = append(attrs, sdk.NewAttribute(types.AttributeKeyEthereumTxFailed, response.VmError))
10099
}
101100

102-
txLogAttrs := make([]sdk.Attribute, len(response.Logs))
103-
for i, log := range response.Logs {
104-
value, err := json.Marshal(log)
105-
if err != nil {
106-
return nil, errorsmod.Wrap(err, "failed to encode log")
107-
}
108-
txLogAttrs[i] = sdk.NewAttribute(types.AttributeKeyTxLog, string(value))
109-
}
110-
111101
// emit events
112102
ctx.EventManager().EmitEvents(sdk.Events{
113103
sdk.NewEvent(
114104
types.EventTypeEthereumTx,
115105
attrs...,
116106
),
117-
sdk.NewEvent(
118-
types.EventTypeTxLog,
119-
txLogAttrs...,
120-
),
121107
sdk.NewEvent(
122108
sdk.EventTypeMessage,
123109
sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory),

0 commit comments

Comments
 (0)