Skip to content

Commit 2140924

Browse files
committed
all tests passing
1 parent d9bbe8b commit 2140924

File tree

5 files changed

+153
-26
lines changed

5 files changed

+153
-26
lines changed

pkg/chains/evm/proto_helpers.go

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ func ConvertTransactionFromProto(protoTx *Transaction) (*evmtypes.Transaction, e
163163

164164
var errEmptyMsg = errors.New("call msg can't be nil")
165165

166-
167166
func ConvertCallMsgToProto(msg *evmtypes.CallMsg) (*CallMsg, error) {
168167
if msg == nil {
169168
return nil, errEmptyMsg
@@ -493,3 +492,51 @@ func putGeneralPrimitive(exp *Expression, p *chaincommonpb.Primitive) {
493492
func putEVMPrimitive(exp *Expression, p *Primitive) {
494493
exp.Evaluator = &Expression_Primitive{Primitive: &Primitive{Primitive: p.Primitive}}
495494
}
495+
496+
func ConvertGasConfigToProto(gasConfig *evmtypes.GasConfig) *GasConfig {
497+
if gasConfig == nil {
498+
return nil
499+
}
500+
return &GasConfig{
501+
GasLimit: *gasConfig.GasLimit,
502+
}
503+
}
504+
505+
func ConvertGasConfigFromProto(gasConfig *GasConfig) *evmtypes.GasConfig {
506+
if gasConfig == nil {
507+
return nil
508+
}
509+
return &evmtypes.GasConfig{
510+
GasLimit: &gasConfig.GasLimit,
511+
}
512+
}
513+
514+
func ConvertTxStatusFromProto(txStatus TxStatus) evmtypes.TransactionStatus {
515+
switch txStatus {
516+
case TxStatus_TX_SUCCESS:
517+
return evmtypes.TxSuccess
518+
case TxStatus_TX_REVERTED:
519+
return evmtypes.TxReverted
520+
default:
521+
return evmtypes.TxFatal
522+
}
523+
}
524+
525+
func ConvertTxStatusToProto(txStatus evmtypes.TransactionStatus) TxStatus {
526+
switch txStatus {
527+
case evmtypes.TxSuccess:
528+
return TxStatus_TX_SUCCESS
529+
case evmtypes.TxReverted:
530+
return TxStatus_TX_REVERTED
531+
default:
532+
return TxStatus_TX_FATAL
533+
}
534+
}
535+
536+
func ConvertSubmitTransactionRequestFromProto(txRequest *SubmitTransactionRequest) evmtypes.SubmitTransactionRequest {
537+
return evmtypes.SubmitTransactionRequest{
538+
To: evmtypes.Address(txRequest.To),
539+
Data: evmtypes.ABIPayload(txRequest.Data),
540+
GasConfig: ConvertGasConfigFromProto(txRequest.GasConfig),
541+
}
542+
}

pkg/loop/internal/relayer/evm.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func (e *EVMClient) SubmitTransaction(ctx context.Context, txRequest evmtypes.Su
3838
reply, err := e.grpcClient.SubmitTransaction(ctx, &evmpb.SubmitTransactionRequest{
3939
To: txRequest.To[:],
4040
Data: txRequest.Data,
41-
GasConfig: toCapGasConfig(txRequest.GasConfig),
41+
GasConfig: evmpb.ConvertGasConfigToProto(txRequest.GasConfig),
4242
})
4343
if err != nil {
4444
return nil, net.WrapRPCErr(err)
@@ -362,11 +362,26 @@ func (e *evmServer) GetTransactionStatus(ctx context.Context, request *evmpb.Get
362362
return &evmpb.GetTransactionStatusReply{TransactionStatus: evmpb.TransactionStatus(txStatus)}, nil
363363
}
364364

365-
func toCapGasConfig(gasConfig *evmtypes.GasConfig) *evmpb.GasConfig {
366-
if gasConfig == nil {
367-
return nil
365+
func (e *evmServer) SubmitTransaction(ctx context.Context, request *evmpb.SubmitTransactionRequest) (*evmpb.SubmitTransactionReply, error) {
366+
txResult, err := e.impl.SubmitTransaction(ctx, evmpb.ConvertSubmitTransactionRequestFromProto(request))
367+
if err != nil {
368+
return nil, err
368369
}
369-
return &evmpb.GasConfig{
370-
GasLimit: *gasConfig.GasLimit,
370+
return &evmpb.SubmitTransactionReply{
371+
TxHash: txResult.TxHash[:],
372+
TxStatus: evmpb.ConvertTxStatusToProto(txResult.TxStatus),
373+
}, nil
374+
}
375+
376+
func (e *evmServer) CalculateTransactionFee(ctx context.Context, request *evmpb.CalculateTransactionFeeRequest) (*evmpb.CalculateTransactionFeeReply, error) {
377+
txFee, err := e.impl.CalculateTransactionFee(ctx, evmtypes.ReceiptGasInfo{
378+
GasUsed: request.GasInfo.GasUsed,
379+
EffectiveGasPrice: valuespb.NewIntFromBigInt(request.GasInfo.EffectiveGasPrice),
380+
})
381+
if err != nil {
382+
return nil, err
371383
}
384+
return &evmpb.CalculateTransactionFeeReply{
385+
TransactionFee: valuespb.NewBigIntFromInt(txFee.TransactionFee),
386+
}, nil
372387
}

pkg/loop/internal/relayerset/evm.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,46 @@ func (s *Server) UnregisterLogTracking(ctx context.Context, request *relayerset.
367367
return &emptypb.Empty{}, nil
368368
}
369369

370+
func (s *Server) SubmitTransaction(ctx context.Context, request *relayerset.SubmitTransactionRequest) (*evmpb.SubmitTransactionReply, error) {
371+
evmService, err := s.getEVMService(ctx, request.GetRelayerId())
372+
if err != nil {
373+
return nil, err
374+
}
375+
376+
txResult, err := evmService.SubmitTransaction(ctx, evm.SubmitTransactionRequest{
377+
To: evm.Address(request.GetRequest().To),
378+
Data: evm.ABIPayload(request.GetRequest().Data),
379+
GasConfig: evmpb.ConvertGasConfigFromProto(request.GetRequest().GetGasConfig()),
380+
})
381+
if err != nil {
382+
return nil, err
383+
}
384+
385+
return &evmpb.SubmitTransactionReply{
386+
TxHash: txResult.TxHash[:],
387+
TxStatus: evmpb.ConvertTxStatusToProto(txResult.TxStatus),
388+
}, nil
389+
}
390+
391+
func (s *Server) CalculateTransactionFee(ctx context.Context, request *relayerset.CalculateTransactionFeeRequest) (*evmpb.CalculateTransactionFeeReply, error) {
392+
evmService, err := s.getEVMService(ctx, request.GetRelayerId())
393+
if err != nil {
394+
return nil, err
395+
}
396+
397+
fee, err := evmService.CalculateTransactionFee(ctx, evm.ReceiptGasInfo{
398+
GasUsed: request.GetRequest().GasInfo.GasUsed,
399+
EffectiveGasPrice: valuespb.NewIntFromBigInt(request.GetRequest().GasInfo.EffectiveGasPrice),
400+
})
401+
if err != nil {
402+
return nil, err
403+
}
404+
405+
return &evmpb.CalculateTransactionFeeReply{
406+
TransactionFee: valuespb.NewBigIntFromInt(fee.TransactionFee),
407+
}, nil
408+
}
409+
370410
func (s *Server) getEVMService(ctx context.Context, id *relayerset.RelayerId) (types.EVMService, error) {
371411
r, err := s.getRelayer(ctx, id)
372412
if err != nil {

pkg/loop/internal/relayerset/relayerset_test.go

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -403,16 +403,6 @@ func Test_RelayerSet_EVMService(t *testing.T) {
403403
require.Equal(t, fee, out)
404404
},
405405
},
406-
{
407-
name: "GetTransactionStatus",
408-
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
409-
id := types.IdempotencyKey("status-tx")
410-
mockEVM.EXPECT().GetTransactionStatus(mock.Anything, id).Return(types.Unconfirmed, nil)
411-
out, err := evm.GetTransactionStatus(ctx, id)
412-
require.NoError(t, err)
413-
require.Equal(t, types.Unconfirmed, out)
414-
},
415-
},
416406
{
417407
name: "QueryTrackedLogs",
418408
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
@@ -425,13 +415,46 @@ func Test_RelayerSet_EVMService(t *testing.T) {
425415
require.Equal(t, &evmLog, out[0])
426416
},
427417
},
418+
{
419+
name: "SubmitTransaction",
420+
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
421+
txRequest := evmtypes.SubmitTransactionRequest{
422+
To: address1,
423+
Data: []byte("data"),
424+
}
425+
expectedTxResult := evmtypes.TransactionResult{
426+
TxStatus: evmtypes.TxSuccess,
427+
TxHash: evmtypes.Hash{1, 2, 3},
428+
}
429+
mockEVM.EXPECT().SubmitTransaction(mock.Anything, txRequest).Return(&expectedTxResult, nil)
430+
txResult, err := evm.SubmitTransaction(ctx, txRequest)
431+
require.NoError(t, err)
432+
require.Equal(t, &expectedTxResult, txResult)
433+
},
434+
},
435+
{
436+
name: "CalculateTransactionFee",
437+
run: func(t *testing.T, evm types.EVMService, mockEVM *mocks2.EVMService) {
438+
gasInfo := evmtypes.ReceiptGasInfo{
439+
GasUsed: 1000,
440+
EffectiveGasPrice: big.NewInt(2000),
441+
}
442+
expectedFee := &evmtypes.TransactionFee{
443+
TransactionFee: big.NewInt(2000000),
444+
}
445+
mockEVM.EXPECT().CalculateTransactionFee(mock.Anything, gasInfo).Return(expectedFee, nil)
446+
fee, err := evm.CalculateTransactionFee(ctx, gasInfo)
447+
require.NoError(t, err)
448+
require.Equal(t, expectedFee, fee)
449+
},
450+
},
428451
}
429452

430453
for _, tc := range tests {
431454
t.Run(tc.name, func(t *testing.T) {
432455
mockEVM := mocks2.NewEVMService(t)
433-
evm := TestEVM{mockedContractReader: mockEVM}
434-
relayer1.On("EVM", mock.Anything, mock.Anything).Return(evm, nil).Once()
456+
// evm := TestEVM{mockedContractReader: mockEVM}
457+
relayer1.On("EVM", mock.Anything, mock.Anything).Return(mockEVM, nil).Once()
435458

436459
fetchedEVM, err := retrievedRelayer.EVM()
437460
require.NoError(t, err)
@@ -497,8 +520,8 @@ type TestEVM struct {
497520
mockedContractReader *mocks2.EVMService
498521
}
499522

500-
func (t *TestEVM) CalculateTransactionFee(ctx context.Context, receiptGasInfo evmtypes.ReceiptGasInfo) (*evmtypes.TransactionFee, error) {
501-
return t.mockedContractReader.CalculateTransactionFee(ctx, receiptGasInfo)
523+
func (t *TestEVM) CalculateTransactionFee(ctx context.Context, receipt evmtypes.ReceiptGasInfo) (*evmtypes.TransactionFee, error) {
524+
return t.mockedContractReader.CalculateTransactionFee(ctx, receipt)
502525
}
503526

504527
func (t *TestEVM) SubmitTransaction(ctx context.Context, txRequest evmtypes.SubmitTransactionRequest) (*evmtypes.TransactionResult, error) {

pkg/types/chains/evm/evm.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,23 +122,25 @@ type SignedReport struct {
122122
ID []byte
123123
}
124124

125-
// TransactionStatus are the status we expect every TXM to support and that can be returned by StatusForUUID.
125+
// TransactionStatus is the result of the transaction sent to the chain
126126
type TransactionStatus int
127127

128128
const (
129+
//Transaction was sent successfully to the chain and successfully executed
129130
TxSuccess TransactionStatus = iota
131+
//Transaction was sent successfully to the chain but the smart contract execution reverted
130132
TxReverted
133+
//Transaction was not sent successfully to the chain
131134
TxFatal
132135
)
133136

134-
135137
type TxError struct {
136138
// Internal ID used for tracking purposes of transactions.
137-
TxID string
139+
TxID string
138140
}
139141

140142
func (e *TxError) Error() string {
141-
return fmt.Sprintf("Fail processing Transaction with internal TxID: %s", e.TxID)
143+
return fmt.Sprintf("Fail processing Transaction with internal TxID: %s", e.TxID)
142144
}
143145

144146
type TransactionResult struct {
@@ -158,4 +160,4 @@ type SubmitTransactionRequest struct {
158160
Data ABIPayload
159161
// Default to nil. If not specified the configured gas estimator config will be used
160162
GasConfig *GasConfig
161-
}
163+
}

0 commit comments

Comments
 (0)