diff --git a/pkg/chains/evm/evm.pb.go b/pkg/chains/evm/evm.pb.go index ad2ce9704..93c371d7a 100644 --- a/pkg/chains/evm/evm.pb.go +++ b/pkg/chains/evm/evm.pb.go @@ -2579,11 +2579,12 @@ func (x *SubmitTransactionRequest) GetGasConfig() *GasConfig { } type SubmitTransactionReply struct { - state protoimpl.MessageState `protogen:"open.v1"` - TxHash []byte `protobuf:"bytes,1,opt,name=txHash,proto3" json:"txHash,omitempty"` - TxStatus TxStatus `protobuf:"varint,2,opt,name=txStatus,proto3,enum=loop.evm.TxStatus" json:"txStatus,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TxHash []byte `protobuf:"bytes,1,opt,name=txHash,proto3" json:"txHash,omitempty"` + TxStatus TxStatus `protobuf:"varint,2,opt,name=txStatus,proto3,enum=loop.evm.TxStatus" json:"txStatus,omitempty"` + TxIdempotencyKey string `protobuf:"bytes,3,opt,name=tx_idempotency_key,json=txIdempotencyKey,proto3" json:"tx_idempotency_key,omitempty"` // idempotency key generated for this transaction + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubmitTransactionReply) Reset() { @@ -2630,6 +2631,13 @@ func (x *SubmitTransactionReply) GetTxStatus() TxStatus { return TxStatus_TX_FATAL } +func (x *SubmitTransactionReply) GetTxIdempotencyKey() string { + if x != nil { + return x.TxIdempotencyKey + } + return "" +} + type GetTransactionStatusRequest struct { state protoimpl.MessageState `protogen:"open.v1"` TransactionId string `protobuf:"bytes,1,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` @@ -3038,10 +3046,11 @@ const file_evm_proto_rawDesc = "" + "\x04data\x18\x02 \x01(\fR\x04data\x127\n" + "\n" + "gas_config\x18\x03 \x01(\v2\x13.loop.evm.GasConfigH\x00R\tgasConfig\x88\x01\x01B\r\n" + - "\v_gas_config\"`\n" + + "\v_gas_config\"\x8e\x01\n" + "\x16SubmitTransactionReply\x12\x16\n" + "\x06txHash\x18\x01 \x01(\fR\x06txHash\x12.\n" + - "\btxStatus\x18\x02 \x01(\x0e2\x12.loop.evm.TxStatusR\btxStatus\"D\n" + + "\btxStatus\x18\x02 \x01(\x0e2\x12.loop.evm.TxStatusR\btxStatus\x12,\n" + + "\x12tx_idempotency_key\x18\x03 \x01(\tR\x10txIdempotencyKey\"D\n" + "\x1bGetTransactionStatusRequest\x12%\n" + "\x0etransaction_id\x18\x01 \x01(\tR\rtransactionId\"g\n" + "\x19GetTransactionStatusReply\x12J\n" + diff --git a/pkg/chains/evm/evm.proto b/pkg/chains/evm/evm.proto index 068a579d7..df5371957 100644 --- a/pkg/chains/evm/evm.proto +++ b/pkg/chains/evm/evm.proto @@ -322,6 +322,7 @@ message SubmitTransactionRequest { message SubmitTransactionReply { bytes txHash = 1; TxStatus txStatus = 2; + string tx_idempotency_key = 3; // idempotency key generated for this transaction } // TransactionStatus is an enum for the status of a transaction. diff --git a/pkg/loop/internal/relayer/evm.go b/pkg/loop/internal/relayer/evm.go index afc17a6ba..680a5ab15 100644 --- a/pkg/loop/internal/relayer/evm.go +++ b/pkg/loop/internal/relayer/evm.go @@ -56,8 +56,9 @@ func (e *EVMClient) SubmitTransaction(ctx context.Context, txRequest evmtypes.Su } return &evmtypes.TransactionResult{ - TxStatus: evmpb.ConvertTxStatusFromProto(reply.TxStatus), - TxHash: evmtypes.Hash(reply.TxHash), + TxStatus: evmpb.ConvertTxStatusFromProto(reply.TxStatus), + TxHash: evmtypes.Hash(reply.TxHash), + TxIdempotencyKey: reply.TxIdempotencyKey, }, nil } @@ -514,8 +515,9 @@ func (e *evmServer) SubmitTransaction(ctx context.Context, request *evmpb.Submit return nil, err } return &evmpb.SubmitTransactionReply{ - TxHash: txResult.TxHash[:], - TxStatus: evmpb.ConvertTxStatusToProto(txResult.TxStatus), + TxHash: txResult.TxHash[:], + TxStatus: evmpb.ConvertTxStatusToProto(txResult.TxStatus), + TxIdempotencyKey: txResult.TxIdempotencyKey, }, nil } diff --git a/pkg/loop/internal/relayerset/evm.go b/pkg/loop/internal/relayerset/evm.go index bf599eca3..9ce5a73cb 100644 --- a/pkg/loop/internal/relayerset/evm.go +++ b/pkg/loop/internal/relayerset/evm.go @@ -411,8 +411,9 @@ func (s *Server) SubmitTransaction(ctx context.Context, request *evmpb.SubmitTra } return &evmpb.SubmitTransactionReply{ - TxHash: txResult.TxHash[:], - TxStatus: evmpb.ConvertTxStatusToProto(txResult.TxStatus), + TxHash: txResult.TxHash[:], + TxStatus: evmpb.ConvertTxStatusToProto(txResult.TxStatus), + TxIdempotencyKey: txResult.TxIdempotencyKey, }, nil } diff --git a/pkg/types/chains/evm/evm.go b/pkg/types/chains/evm/evm.go index d7b4f8739..bd1429d69 100644 --- a/pkg/types/chains/evm/evm.go +++ b/pkg/types/chains/evm/evm.go @@ -147,8 +147,9 @@ func (e *TxError) Error() string { // PLEX-1524 - Refactor this to return the Tx Hash in a Transaction type and a second return value for the TxStatus. We may even be able to return the whole transaction object instead of just the hash. type TransactionResult struct { - TxStatus TransactionStatus - TxHash Hash + TxStatus TransactionStatus + TxHash Hash + TxIdempotencyKey string // Idempotency key used for tracking purposes of transactions. } type GasConfig struct {