From 5a6e9a2929e4c0969a6358334600b1f06facaaf3 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Tue, 13 Feb 2024 15:36:39 +0200 Subject: [PATCH 1/4] Add tests to assert that Flow EVM events can be properly CCF encoded/decoded --- fvm/evm/types/events_test.go | 101 +++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 fvm/evm/types/events_test.go diff --git a/fvm/evm/types/events_test.go b/fvm/evm/types/events_test.go new file mode 100644 index 00000000000..b960331e862 --- /dev/null +++ b/fvm/evm/types/events_test.go @@ -0,0 +1,101 @@ +package types_test + +import ( + "encoding/hex" + "math/big" + "testing" + + gethCommon "github.com/ethereum/go-ethereum/common" + gethTypes "github.com/ethereum/go-ethereum/core/types" + "github.com/onflow/cadence/encoding/ccf" + cdcCommon "github.com/onflow/cadence/runtime/common" + "github.com/onflow/flow-go/fvm/evm/types" + "github.com/stretchr/testify/require" + "gotest.tools/assert" +) + +func TestEVMEventsCCFEncodingDecoding(t *testing.T) { + + t.Run("evm.BlockExecuted", func(t *testing.T) { + block := &types.Block{ + Height: 2, + TotalSupply: big.NewInt(1500), + ParentBlockHash: gethCommon.HexToHash("0x2813452cff514c3054ac9f40cd7ce1b016cc78ab7f99f1c6d49708837f6e06d1"), + ReceiptRoot: gethCommon.Hash{}, + TransactionHashes: []gethCommon.Hash{ + gethCommon.HexToHash("0x70b67ce6710355acf8d69b2ea013d34e212bc4824926c5d26f189c1ca9667246"), + }, + } + + event := types.NewBlockExecutedEvent(block) + ev, err := event.Payload.CadenceEvent() + require.NoError(t, err) + + v, err := ccf.Encode(ev) + require.NoError(t, err) + assert.Equal(t, ccf.HasMsgPrefix(v), true) + + evt, err := ccf.Decode(nil, v) + require.NoError(t, err) + + assert.Equal(t, evt.Type().ID(), "evm.BlockExecuted") + + location, qualifiedIdentifier, err := cdcCommon.DecodeTypeID(nil, "evm.BlockExecuted") + require.NoError(t, err) + + assert.Equal(t, types.EVMLocation{}, location) + assert.Equal(t, "BlockExecuted", qualifiedIdentifier) + }) + + t.Run("evm.TransactionExecuted", func(t *testing.T) { + txEncoded, err := hex.DecodeString("fff83b81ff0194000000000000000000000000000000000000000094000000000000000000000000000000000000000180895150ae84a8cdf00000825208") + require.NoError(t, err) + txHash := gethCommon.HexToHash("0xf3593c3eb9ac1125f31acfa5520877f223279f6238a670936e65a710ccd44641") + data, err := hex.DecodeString("000000000000000000000000000000000000000000000000000000000000002a") + require.NoError(t, err) + log := &gethTypes.Log{ + Index: 0, + BlockNumber: 2, + BlockHash: gethCommon.HexToHash("0xf3593c3eb9ac1125f31acfa5520877f223279f6238a670936e65a710ccd44641"), + TxHash: txHash, + TxIndex: 0, + Address: gethCommon.HexToAddress("0x99466ed2e37b892a2ee3e9cd55a98b68f5735db2"), + Data: data, + Topics: []gethCommon.Hash{ + gethCommon.HexToHash("0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"), + }, + } + txResult := &types.Result{ + Failed: false, + TxType: 255, + GasConsumed: 23200, + DeployedContractAddress: types.EmptyAddress, + ReturnedValue: data, + Logs: []*gethTypes.Log{log}, + } + + event := types.NewTransactionExecutedEvent( + 2, + txEncoded, + txHash, + txResult, + ) + ev, err := event.Payload.CadenceEvent() + require.NoError(t, err) + + v, err := ccf.Encode(ev) + require.NoError(t, err) + assert.Equal(t, ccf.HasMsgPrefix(v), true) + + evt, err := ccf.Decode(nil, v) + require.NoError(t, err) + + assert.Equal(t, evt.Type().ID(), "evm.TransactionExecuted") + + location, qualifiedIdentifier, err := cdcCommon.DecodeTypeID(nil, "evm.TransactionExecuted") + require.NoError(t, err) + + assert.Equal(t, types.EVMLocation{}, location) + assert.Equal(t, "TransactionExecuted", qualifiedIdentifier) + }) +} From cfed6536901432bfa742ab1b367f6f8c9a630386 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Thu, 15 Feb 2024 16:53:09 +0200 Subject: [PATCH 2/4] Fix linting error --- fvm/evm/types/events_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fvm/evm/types/events_test.go b/fvm/evm/types/events_test.go index b960331e862..bfde2222dfc 100644 --- a/fvm/evm/types/events_test.go +++ b/fvm/evm/types/events_test.go @@ -9,9 +9,10 @@ import ( gethTypes "github.com/ethereum/go-ethereum/core/types" "github.com/onflow/cadence/encoding/ccf" cdcCommon "github.com/onflow/cadence/runtime/common" - "github.com/onflow/flow-go/fvm/evm/types" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gotest.tools/assert" + + "github.com/onflow/flow-go/fvm/evm/types" ) func TestEVMEventsCCFEncodingDecoding(t *testing.T) { From 7f016771e3a8d02ff70e945f66561f496c34b638 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Fri, 16 Feb 2024 17:33:30 +0200 Subject: [PATCH 3/4] Parallelize tests and sub-tests --- fvm/evm/types/events_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fvm/evm/types/events_test.go b/fvm/evm/types/events_test.go index bfde2222dfc..bae240ffe87 100644 --- a/fvm/evm/types/events_test.go +++ b/fvm/evm/types/events_test.go @@ -16,8 +16,11 @@ import ( ) func TestEVMEventsCCFEncodingDecoding(t *testing.T) { + t.Parallel() t.Run("evm.BlockExecuted", func(t *testing.T) { + t.Parallel() + block := &types.Block{ Height: 2, TotalSupply: big.NewInt(1500), @@ -49,6 +52,8 @@ func TestEVMEventsCCFEncodingDecoding(t *testing.T) { }) t.Run("evm.TransactionExecuted", func(t *testing.T) { + t.Parallel() + txEncoded, err := hex.DecodeString("fff83b81ff0194000000000000000000000000000000000000000094000000000000000000000000000000000000000180895150ae84a8cdf00000825208") require.NoError(t, err) txHash := gethCommon.HexToHash("0xf3593c3eb9ac1125f31acfa5520877f223279f6238a670936e65a710ccd44641") From f5d65d1f86eca9340794c87e4dbd6ccc34bec1d8 Mon Sep 17 00:00:00 2001 From: Ardit Marku Date: Sat, 17 Feb 2024 17:54:16 +0200 Subject: [PATCH 4/4] Update Result type used in EVM events tests --- fvm/evm/types/events_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fvm/evm/types/events_test.go b/fvm/evm/types/events_test.go index bae240ffe87..4abe71a6cd1 100644 --- a/fvm/evm/types/events_test.go +++ b/fvm/evm/types/events_test.go @@ -72,7 +72,7 @@ func TestEVMEventsCCFEncodingDecoding(t *testing.T) { }, } txResult := &types.Result{ - Failed: false, + VMError: nil, TxType: 255, GasConsumed: 23200, DeployedContractAddress: types.EmptyAddress,