diff --git a/pkg/loop/internal/relayerset/evm.go b/pkg/loop/internal/relayerset/evm.go index f85ab88b15..03608d60cd 100644 --- a/pkg/loop/internal/relayerset/evm.go +++ b/pkg/loop/internal/relayerset/evm.go @@ -188,8 +188,13 @@ func (s *Server) BalanceAt(ctx context.Context, request *evmpb.BalanceAtRequest) return nil, err } + address, err := evmpb.ConvertOptionalAddressFromProto(request.GetAccount()) + if err != nil { + return nil, err + } + reply, err := evmService.BalanceAt(ctx, evm.BalanceAtRequest{ - Address: evm.Address(request.GetAccount()), + Address: address, BlockNumber: valuespb.NewIntFromBigInt(request.BlockNumber), ConfidenceLevel: conf, }) @@ -405,9 +410,14 @@ func (s *Server) SubmitTransaction(ctx context.Context, request *evmpb.SubmitTra return nil, err } + address, err := evmpb.ConvertOptionalAddressFromProto(request.To) + if err != nil { + return nil, err + } + reply, err := evmService.SubmitTransaction(ctx, evm.SubmitTransactionRequest{ - To: evm.Address(request.To), - Data: evm.ABIPayload(request.Data), + To: address, + Data: request.Data, GasConfig: evmpb.ConvertGasConfigFromProto(request.GetGasConfig()), }) if err != nil { @@ -452,7 +462,17 @@ func (s *Server) GetForwarderForEOA(ctx context.Context, request *evmpb.GetForwa return nil, err } - forwarder, err := evmService.GetForwarderForEOA(ctx, evm.Address(request.GetAddr()), evm.Address(request.GetAggr()), request.PluginType) + eoa, err := evmpb.ConvertAddressFromProto(request.GetAddr()) + if err != nil { + return nil, fmt.Errorf("invalid EOA address: %w", err) + } + + ocr2AggregatorID, err := evmpb.ConvertAddressFromProto(request.GetAggr()) + if err != nil { + return nil, fmt.Errorf("invalid OCR2 Aggregator address: %w", err) + } + + forwarder, err := evmService.GetForwarderForEOA(ctx, eoa, ocr2AggregatorID, request.PluginType) if err != nil { return nil, err } diff --git a/pkg/loop/internal/relayerset/relayerset_test.go b/pkg/loop/internal/relayerset/relayerset_test.go index c544a5bbe8..db3db9ec42 100644 --- a/pkg/loop/internal/relayerset/relayerset_test.go +++ b/pkg/loop/internal/relayerset/relayerset_test.go @@ -270,6 +270,7 @@ func Test_RelayerSet_EVMService(t *testing.T) { retrievedRelayer, err := rc.Get(ctx, types.RelayID{Network: "N1", ChainID: "C1"}) require.NoError(t, err) + zero := evmtypes.Address{} tests := []struct { name string run func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) @@ -338,6 +339,25 @@ func Test_RelayerSet_EVMService(t *testing.T) { require.Equal(t, big.NewInt(999), reply.Balance) }, }, + { + name: "BalanceAt_ZeroAddress_NoError", + run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) { + conf := primitives.Finalized + mockEVM.EXPECT().BalanceAt(mock.Anything, evmtypes.BalanceAtRequest{ + Address: zero, + BlockNumber: big.NewInt(0), + ConfidenceLevel: conf, + }).Return(&evmtypes.BalanceAtReply{Balance: big.NewInt(0)}, nil) + + reply, err := evm.BalanceAt(ctx, evmtypes.BalanceAtRequest{ + Address: zero, + BlockNumber: big.NewInt(0), + ConfidenceLevel: conf, + }) + require.NoError(t, err) + require.Equal(t, big.NewInt(0), reply.Balance) + }, + }, { name: "EstimateGas", run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) { @@ -488,6 +508,24 @@ func Test_RelayerSet_EVMService(t *testing.T) { require.Equal(t, &expectedTxResult, txResult) }, }, + { + name: "SubmitTransaction_ZeroTo_NoError", + run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) { + txRequest := evmtypes.SubmitTransactionRequest{ + To: zero, + Data: []byte("data"), + } + expectedTxResult := evmtypes.TransactionResult{ + TxStatus: evmtypes.TxSuccess, + TxHash: evmtypes.Hash{9, 9, 9}, + } + // Should not error even when To is zero address. + mockEVM.EXPECT().SubmitTransaction(mock.Anything, txRequest).Return(&expectedTxResult, nil) + txResult, err := evm.SubmitTransaction(ctx, txRequest) + require.NoError(t, err) + require.Equal(t, &expectedTxResult, txResult) + }, + }, { name: "CalculateTransactionFee", run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) { @@ -504,6 +542,24 @@ func Test_RelayerSet_EVMService(t *testing.T) { require.Equal(t, expectedFee, fee) }, }, + { + name: "GetForwarderForEOA_ErrorsOnZeroEoa", + run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) { + mockEVM.EXPECT().GetForwarderForEOA(mock.Anything, zero, address, "str").Return(address1, nil) + res, err := evm.GetForwarderForEOA(ctx, zero, address, "str") + require.NoError(t, err) + require.Equal(t, address1, res) + }, + }, + { + name: "GetForwarderForEOA_ErrorsOnZeroOCRID", + run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) { + mockEVM.EXPECT().GetForwarderForEOA(mock.Anything, address, zero, "str").Return(address1, nil) + res, err := evm.GetForwarderForEOA(ctx, address, zero, "str") + require.NoError(t, err) + require.Equal(t, address1, res) + }, + }, } for _, tc := range tests {