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 }