Skip to content

Commit 8fd3a49

Browse files
authored
Improve address conversion handling in evm relayerset (#1592)
* Improve address conversion handling in evm relayerset * lint
1 parent a98b034 commit 8fd3a49

2 files changed

Lines changed: 80 additions & 4 deletions

File tree

pkg/loop/internal/relayerset/evm.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,13 @@ func (s *Server) BalanceAt(ctx context.Context, request *evmpb.BalanceAtRequest)
188188
return nil, err
189189
}
190190

191+
address, err := evmpb.ConvertOptionalAddressFromProto(request.GetAccount())
192+
if err != nil {
193+
return nil, err
194+
}
195+
191196
reply, err := evmService.BalanceAt(ctx, evm.BalanceAtRequest{
192-
Address: evm.Address(request.GetAccount()),
197+
Address: address,
193198
BlockNumber: valuespb.NewIntFromBigInt(request.BlockNumber),
194199
ConfidenceLevel: conf,
195200
})
@@ -405,9 +410,14 @@ func (s *Server) SubmitTransaction(ctx context.Context, request *evmpb.SubmitTra
405410
return nil, err
406411
}
407412

413+
address, err := evmpb.ConvertOptionalAddressFromProto(request.To)
414+
if err != nil {
415+
return nil, err
416+
}
417+
408418
reply, err := evmService.SubmitTransaction(ctx, evm.SubmitTransactionRequest{
409-
To: evm.Address(request.To),
410-
Data: evm.ABIPayload(request.Data),
419+
To: address,
420+
Data: request.Data,
411421
GasConfig: evmpb.ConvertGasConfigFromProto(request.GetGasConfig()),
412422
})
413423
if err != nil {
@@ -452,7 +462,17 @@ func (s *Server) GetForwarderForEOA(ctx context.Context, request *evmpb.GetForwa
452462
return nil, err
453463
}
454464

455-
forwarder, err := evmService.GetForwarderForEOA(ctx, evm.Address(request.GetAddr()), evm.Address(request.GetAggr()), request.PluginType)
465+
eoa, err := evmpb.ConvertAddressFromProto(request.GetAddr())
466+
if err != nil {
467+
return nil, fmt.Errorf("invalid EOA address: %w", err)
468+
}
469+
470+
ocr2AggregatorID, err := evmpb.ConvertAddressFromProto(request.GetAggr())
471+
if err != nil {
472+
return nil, fmt.Errorf("invalid OCR2 Aggregator address: %w", err)
473+
}
474+
475+
forwarder, err := evmService.GetForwarderForEOA(ctx, eoa, ocr2AggregatorID, request.PluginType)
456476
if err != nil {
457477
return nil, err
458478
}

pkg/loop/internal/relayerset/relayerset_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ func Test_RelayerSet_EVMService(t *testing.T) {
270270
retrievedRelayer, err := rc.Get(ctx, types.RelayID{Network: "N1", ChainID: "C1"})
271271
require.NoError(t, err)
272272

273+
zero := evmtypes.Address{}
273274
tests := []struct {
274275
name string
275276
run func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService)
@@ -338,6 +339,25 @@ func Test_RelayerSet_EVMService(t *testing.T) {
338339
require.Equal(t, big.NewInt(999), reply.Balance)
339340
},
340341
},
342+
{
343+
name: "BalanceAt_ZeroAddress_NoError",
344+
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
345+
conf := primitives.Finalized
346+
mockEVM.EXPECT().BalanceAt(mock.Anything, evmtypes.BalanceAtRequest{
347+
Address: zero,
348+
BlockNumber: big.NewInt(0),
349+
ConfidenceLevel: conf,
350+
}).Return(&evmtypes.BalanceAtReply{Balance: big.NewInt(0)}, nil)
351+
352+
reply, err := evm.BalanceAt(ctx, evmtypes.BalanceAtRequest{
353+
Address: zero,
354+
BlockNumber: big.NewInt(0),
355+
ConfidenceLevel: conf,
356+
})
357+
require.NoError(t, err)
358+
require.Equal(t, big.NewInt(0), reply.Balance)
359+
},
360+
},
341361
{
342362
name: "EstimateGas",
343363
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
@@ -488,6 +508,24 @@ func Test_RelayerSet_EVMService(t *testing.T) {
488508
require.Equal(t, &expectedTxResult, txResult)
489509
},
490510
},
511+
{
512+
name: "SubmitTransaction_ZeroTo_NoError",
513+
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
514+
txRequest := evmtypes.SubmitTransactionRequest{
515+
To: zero,
516+
Data: []byte("data"),
517+
}
518+
expectedTxResult := evmtypes.TransactionResult{
519+
TxStatus: evmtypes.TxSuccess,
520+
TxHash: evmtypes.Hash{9, 9, 9},
521+
}
522+
// Should not error even when To is zero address.
523+
mockEVM.EXPECT().SubmitTransaction(mock.Anything, txRequest).Return(&expectedTxResult, nil)
524+
txResult, err := evm.SubmitTransaction(ctx, txRequest)
525+
require.NoError(t, err)
526+
require.Equal(t, &expectedTxResult, txResult)
527+
},
528+
},
491529
{
492530
name: "CalculateTransactionFee",
493531
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
@@ -504,6 +542,24 @@ func Test_RelayerSet_EVMService(t *testing.T) {
504542
require.Equal(t, expectedFee, fee)
505543
},
506544
},
545+
{
546+
name: "GetForwarderForEOA_ErrorsOnZeroEoa",
547+
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
548+
mockEVM.EXPECT().GetForwarderForEOA(mock.Anything, zero, address, "str").Return(address1, nil)
549+
res, err := evm.GetForwarderForEOA(ctx, zero, address, "str")
550+
require.NoError(t, err)
551+
require.Equal(t, address1, res)
552+
},
553+
},
554+
{
555+
name: "GetForwarderForEOA_ErrorsOnZeroOCRID",
556+
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
557+
mockEVM.EXPECT().GetForwarderForEOA(mock.Anything, address, zero, "str").Return(address1, nil)
558+
res, err := evm.GetForwarderForEOA(ctx, address, zero, "str")
559+
require.NoError(t, err)
560+
require.Equal(t, address1, res)
561+
},
562+
},
507563
}
508564

509565
for _, tc := range tests {

0 commit comments

Comments
 (0)