code.vegaprotocol.io/vega@v0.79.0/wallet/commands/commands.go (about)

     1  // Copyright (C) 2023 Gobalsky Labs Limited
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15  
    16  package commands
    17  
    18  import (
    19  	"errors"
    20  	"fmt"
    21  
    22  	"code.vegaprotocol.io/vega/commands"
    23  	commandspb "code.vegaprotocol.io/vega/protos/vega/commands/v1"
    24  	walletpb "code.vegaprotocol.io/vega/protos/vega/wallet/v1"
    25  )
    26  
    27  func CheckSubmitTransactionRequest(req *walletpb.SubmitTransactionRequest) commands.Errors {
    28  	errs := commands.NewErrors()
    29  
    30  	if len(req.PubKey) == 0 {
    31  		errs.AddForProperty("submit_transaction_request.pub_key", commands.ErrIsRequired)
    32  	}
    33  
    34  	if req.Command == nil {
    35  		return errs.FinalAddForProperty("submit_transaction_request.command", commands.ErrIsRequired)
    36  	}
    37  
    38  	var cmdErr error
    39  	switch cmd := req.Command.(type) {
    40  	case *walletpb.SubmitTransactionRequest_OrderSubmission:
    41  		cmdErr = commands.CheckOrderSubmission(cmd.OrderSubmission)
    42  	case *walletpb.SubmitTransactionRequest_OrderCancellation:
    43  		cmdErr = commands.CheckOrderCancellation(cmd.OrderCancellation)
    44  	case *walletpb.SubmitTransactionRequest_OrderAmendment:
    45  		cmdErr = commands.CheckOrderAmendment(cmd.OrderAmendment)
    46  	case *walletpb.SubmitTransactionRequest_VoteSubmission:
    47  		cmdErr = commands.CheckVoteSubmission(cmd.VoteSubmission)
    48  	case *walletpb.SubmitTransactionRequest_WithdrawSubmission:
    49  		cmdErr = commands.CheckWithdrawSubmission(cmd.WithdrawSubmission)
    50  	case *walletpb.SubmitTransactionRequest_LiquidityProvisionSubmission:
    51  		cmdErr = commands.CheckLiquidityProvisionSubmission(cmd.LiquidityProvisionSubmission)
    52  	case *walletpb.SubmitTransactionRequest_ProposalSubmission:
    53  		cmdErr = commands.CheckProposalSubmission(cmd.ProposalSubmission)
    54  	case *walletpb.SubmitTransactionRequest_BatchProposalSubmission:
    55  		cmdErr = commands.CheckBatchProposalSubmission(cmd.BatchProposalSubmission)
    56  	case *walletpb.SubmitTransactionRequest_AnnounceNode:
    57  		cmdErr = commands.CheckAnnounceNode(cmd.AnnounceNode)
    58  	case *walletpb.SubmitTransactionRequest_NodeVote:
    59  		cmdErr = commands.CheckNodeVote(cmd.NodeVote)
    60  	case *walletpb.SubmitTransactionRequest_NodeSignature:
    61  		cmdErr = commands.CheckNodeSignature(cmd.NodeSignature)
    62  	case *walletpb.SubmitTransactionRequest_ChainEvent:
    63  		cmdErr = commands.CheckChainEvent(cmd.ChainEvent)
    64  	case *walletpb.SubmitTransactionRequest_OracleDataSubmission:
    65  		cmdErr = commands.CheckOracleDataSubmission(cmd.OracleDataSubmission)
    66  	case *walletpb.SubmitTransactionRequest_UndelegateSubmission:
    67  		cmdErr = commands.CheckUndelegateSubmission(cmd.UndelegateSubmission)
    68  	case *walletpb.SubmitTransactionRequest_DelegateSubmission:
    69  		cmdErr = commands.CheckDelegateSubmission(cmd.DelegateSubmission)
    70  	case *walletpb.SubmitTransactionRequest_LiquidityProvisionCancellation:
    71  		cmdErr = commands.CheckLiquidityProvisionCancellation(cmd.LiquidityProvisionCancellation)
    72  	case *walletpb.SubmitTransactionRequest_LiquidityProvisionAmendment:
    73  		cmdErr = commands.CheckLiquidityProvisionAmendment(cmd.LiquidityProvisionAmendment)
    74  	case *walletpb.SubmitTransactionRequest_Transfer:
    75  		cmdErr = commands.CheckTransfer(cmd.Transfer)
    76  	case *walletpb.SubmitTransactionRequest_CancelTransfer:
    77  		cmdErr = commands.CheckCancelTransfer(cmd.CancelTransfer)
    78  	case *walletpb.SubmitTransactionRequest_KeyRotateSubmission:
    79  		cmdErr = commands.CheckKeyRotateSubmission(cmd.KeyRotateSubmission)
    80  	case *walletpb.SubmitTransactionRequest_EthereumKeyRotateSubmission:
    81  		cmdErr = commands.CheckEthereumKeyRotateSubmission(cmd.EthereumKeyRotateSubmission)
    82  	case *walletpb.SubmitTransactionRequest_ProtocolUpgradeProposal:
    83  		cmdErr = commands.CheckProtocolUpgradeProposal(cmd.ProtocolUpgradeProposal)
    84  	case *walletpb.SubmitTransactionRequest_IssueSignatures:
    85  		cmdErr = commands.CheckIssueSignatures(cmd.IssueSignatures)
    86  	case *walletpb.SubmitTransactionRequest_BatchMarketInstructions:
    87  		cmdErr = commands.CheckBatchMarketInstructions(cmd.BatchMarketInstructions)
    88  	case *walletpb.SubmitTransactionRequest_StopOrdersSubmission:
    89  		cmdErr = commands.CheckStopOrdersSubmission(cmd.StopOrdersSubmission)
    90  	case *walletpb.SubmitTransactionRequest_StopOrdersCancellation:
    91  		cmdErr = commands.CheckStopOrdersCancellation(cmd.StopOrdersCancellation)
    92  	case *walletpb.SubmitTransactionRequest_CreateReferralSet:
    93  		cmdErr = commands.CheckCreateReferralSet(cmd.CreateReferralSet)
    94  	case *walletpb.SubmitTransactionRequest_UpdateReferralSet:
    95  		cmdErr = commands.CheckUpdateReferralSet(cmd.UpdateReferralSet)
    96  	case *walletpb.SubmitTransactionRequest_ApplyReferralCode:
    97  		cmdErr = commands.CheckApplyReferralCode(cmd.ApplyReferralCode)
    98  	case *walletpb.SubmitTransactionRequest_UpdateMarginMode:
    99  		cmdErr = commands.CheckUpdateMarginMode(cmd.UpdateMarginMode)
   100  	case *walletpb.SubmitTransactionRequest_JoinTeam:
   101  		cmdErr = commands.CheckJoinTeam(cmd.JoinTeam)
   102  	case *walletpb.SubmitTransactionRequest_UpdatePartyProfile:
   103  		cmdErr = commands.CheckUpdatePartyProfile(cmd.UpdatePartyProfile)
   104  	case *walletpb.SubmitTransactionRequest_SubmitAmm:
   105  		cmdErr = commands.CheckSubmitAMM(cmd.SubmitAmm)
   106  	case *walletpb.SubmitTransactionRequest_AmendAmm:
   107  		cmdErr = commands.CheckAmendAMM(cmd.AmendAmm)
   108  	case *walletpb.SubmitTransactionRequest_CancelAmm:
   109  		cmdErr = commands.CheckCancelAMM(cmd.CancelAmm)
   110  	default:
   111  		errs.AddForProperty("input_data.command", commands.ErrIsNotSupported)
   112  	}
   113  
   114  	if cmdErr != nil {
   115  		errs.Merge(toErrors(cmdErr))
   116  	}
   117  
   118  	return errs
   119  }
   120  
   121  func ToInputData(req *walletpb.SubmitTransactionRequest, height uint64) *commandspb.InputData {
   122  	inputData := commands.NewInputData(height)
   123  	WrapRequestCommandIntoInputData(inputData, req)
   124  	return inputData
   125  }
   126  
   127  func ToMarshaledInputData(req *walletpb.SubmitTransactionRequest, height uint64) ([]byte, error) {
   128  	return commands.MarshalInputData(ToInputData(req, height))
   129  }
   130  
   131  func WrapRequestCommandIntoInputData(data *commandspb.InputData, req *walletpb.SubmitTransactionRequest) {
   132  	switch cmd := req.Command.(type) {
   133  	case *walletpb.SubmitTransactionRequest_OrderSubmission:
   134  		data.Command = &commandspb.InputData_OrderSubmission{
   135  			OrderSubmission: req.GetOrderSubmission(),
   136  		}
   137  	case *walletpb.SubmitTransactionRequest_OrderCancellation:
   138  		data.Command = &commandspb.InputData_OrderCancellation{
   139  			OrderCancellation: req.GetOrderCancellation(),
   140  		}
   141  	case *walletpb.SubmitTransactionRequest_OrderAmendment:
   142  		data.Command = &commandspb.InputData_OrderAmendment{
   143  			OrderAmendment: req.GetOrderAmendment(),
   144  		}
   145  	case *walletpb.SubmitTransactionRequest_VoteSubmission:
   146  		data.Command = &commandspb.InputData_VoteSubmission{
   147  			VoteSubmission: req.GetVoteSubmission(),
   148  		}
   149  	case *walletpb.SubmitTransactionRequest_WithdrawSubmission:
   150  		data.Command = &commandspb.InputData_WithdrawSubmission{
   151  			WithdrawSubmission: req.GetWithdrawSubmission(),
   152  		}
   153  	case *walletpb.SubmitTransactionRequest_LiquidityProvisionSubmission:
   154  		data.Command = &commandspb.InputData_LiquidityProvisionSubmission{
   155  			LiquidityProvisionSubmission: req.GetLiquidityProvisionSubmission(),
   156  		}
   157  	case *walletpb.SubmitTransactionRequest_ProposalSubmission:
   158  		data.Command = &commandspb.InputData_ProposalSubmission{
   159  			ProposalSubmission: req.GetProposalSubmission(),
   160  		}
   161  	case *walletpb.SubmitTransactionRequest_AnnounceNode:
   162  		data.Command = &commandspb.InputData_AnnounceNode{
   163  			AnnounceNode: req.GetAnnounceNode(),
   164  		}
   165  	case *walletpb.SubmitTransactionRequest_NodeVote:
   166  		data.Command = &commandspb.InputData_NodeVote{
   167  			NodeVote: req.GetNodeVote(),
   168  		}
   169  	case *walletpb.SubmitTransactionRequest_NodeSignature:
   170  		data.Command = &commandspb.InputData_NodeSignature{
   171  			NodeSignature: req.GetNodeSignature(),
   172  		}
   173  	case *walletpb.SubmitTransactionRequest_ChainEvent:
   174  		data.Command = &commandspb.InputData_ChainEvent{
   175  			ChainEvent: req.GetChainEvent(),
   176  		}
   177  	case *walletpb.SubmitTransactionRequest_OracleDataSubmission:
   178  		data.Command = &commandspb.InputData_OracleDataSubmission{
   179  			OracleDataSubmission: req.GetOracleDataSubmission(),
   180  		}
   181  	case *walletpb.SubmitTransactionRequest_DelegateSubmission:
   182  		data.Command = &commandspb.InputData_DelegateSubmission{
   183  			DelegateSubmission: req.GetDelegateSubmission(),
   184  		}
   185  	case *walletpb.SubmitTransactionRequest_UndelegateSubmission:
   186  		data.Command = &commandspb.InputData_UndelegateSubmission{
   187  			UndelegateSubmission: req.GetUndelegateSubmission(),
   188  		}
   189  	case *walletpb.SubmitTransactionRequest_LiquidityProvisionCancellation:
   190  		data.Command = &commandspb.InputData_LiquidityProvisionCancellation{
   191  			LiquidityProvisionCancellation: req.GetLiquidityProvisionCancellation(),
   192  		}
   193  	case *walletpb.SubmitTransactionRequest_LiquidityProvisionAmendment:
   194  		data.Command = &commandspb.InputData_LiquidityProvisionAmendment{
   195  			LiquidityProvisionAmendment: req.GetLiquidityProvisionAmendment(),
   196  		}
   197  	case *walletpb.SubmitTransactionRequest_Transfer:
   198  		data.Command = &commandspb.InputData_Transfer{
   199  			Transfer: req.GetTransfer(),
   200  		}
   201  	case *walletpb.SubmitTransactionRequest_CancelTransfer:
   202  		data.Command = &commandspb.InputData_CancelTransfer{
   203  			CancelTransfer: req.GetCancelTransfer(),
   204  		}
   205  	case *walletpb.SubmitTransactionRequest_KeyRotateSubmission:
   206  		data.Command = &commandspb.InputData_KeyRotateSubmission{
   207  			KeyRotateSubmission: req.GetKeyRotateSubmission(),
   208  		}
   209  	case *walletpb.SubmitTransactionRequest_EthereumKeyRotateSubmission:
   210  		data.Command = &commandspb.InputData_EthereumKeyRotateSubmission{
   211  			EthereumKeyRotateSubmission: req.GetEthereumKeyRotateSubmission(),
   212  		}
   213  	case *walletpb.SubmitTransactionRequest_ProtocolUpgradeProposal:
   214  		data.Command = &commandspb.InputData_ProtocolUpgradeProposal{
   215  			ProtocolUpgradeProposal: req.GetProtocolUpgradeProposal(),
   216  		}
   217  	case *walletpb.SubmitTransactionRequest_IssueSignatures:
   218  		data.Command = &commandspb.InputData_IssueSignatures{
   219  			IssueSignatures: req.GetIssueSignatures(),
   220  		}
   221  	case *walletpb.SubmitTransactionRequest_BatchMarketInstructions:
   222  		data.Command = &commandspb.InputData_BatchMarketInstructions{
   223  			BatchMarketInstructions: req.GetBatchMarketInstructions(),
   224  		}
   225  	case *walletpb.SubmitTransactionRequest_StopOrdersSubmission:
   226  		data.Command = &commandspb.InputData_StopOrdersSubmission{
   227  			StopOrdersSubmission: req.GetStopOrdersSubmission(),
   228  		}
   229  	case *walletpb.SubmitTransactionRequest_StopOrdersCancellation:
   230  		data.Command = &commandspb.InputData_StopOrdersCancellation{
   231  			StopOrdersCancellation: req.GetStopOrdersCancellation(),
   232  		}
   233  	case *walletpb.SubmitTransactionRequest_CreateReferralSet:
   234  		data.Command = &commandspb.InputData_CreateReferralSet{
   235  			CreateReferralSet: req.GetCreateReferralSet(),
   236  		}
   237  	case *walletpb.SubmitTransactionRequest_UpdateReferralSet:
   238  		data.Command = &commandspb.InputData_UpdateReferralSet{
   239  			UpdateReferralSet: req.GetUpdateReferralSet(),
   240  		}
   241  	case *walletpb.SubmitTransactionRequest_ApplyReferralCode:
   242  		data.Command = &commandspb.InputData_ApplyReferralCode{
   243  			ApplyReferralCode: req.GetApplyReferralCode(),
   244  		}
   245  	case *walletpb.SubmitTransactionRequest_UpdateMarginMode:
   246  		data.Command = &commandspb.InputData_UpdateMarginMode{
   247  			UpdateMarginMode: req.GetUpdateMarginMode(),
   248  		}
   249  	case *walletpb.SubmitTransactionRequest_JoinTeam:
   250  		data.Command = &commandspb.InputData_JoinTeam{
   251  			JoinTeam: req.GetJoinTeam(),
   252  		}
   253  	case *walletpb.SubmitTransactionRequest_BatchProposalSubmission:
   254  		data.Command = &commandspb.InputData_BatchProposalSubmission{
   255  			BatchProposalSubmission: req.GetBatchProposalSubmission(),
   256  		}
   257  	case *walletpb.SubmitTransactionRequest_UpdatePartyProfile:
   258  		data.Command = &commandspb.InputData_UpdatePartyProfile{
   259  			UpdatePartyProfile: req.GetUpdatePartyProfile(),
   260  		}
   261  	case *walletpb.SubmitTransactionRequest_SubmitAmm:
   262  		data.Command = &commandspb.InputData_SubmitAmm{
   263  			SubmitAmm: req.GetSubmitAmm(),
   264  		}
   265  	case *walletpb.SubmitTransactionRequest_AmendAmm:
   266  		data.Command = &commandspb.InputData_AmendAmm{
   267  			AmendAmm: req.GetAmendAmm(),
   268  		}
   269  	case *walletpb.SubmitTransactionRequest_CancelAmm:
   270  		data.Command = &commandspb.InputData_CancelAmm{
   271  			CancelAmm: req.GetCancelAmm(),
   272  		}
   273  	default:
   274  		panic(fmt.Sprintf("command %T is not supported", cmd))
   275  	}
   276  }
   277  
   278  func toErrors(err error) commands.Errors {
   279  	errs := &commands.Errors{}
   280  	if !errors.As(err, errs) {
   281  		errs := commands.NewErrors()
   282  		return errs.FinalAdd(err)
   283  	}
   284  	return *errs
   285  }