This repository has been archived by the owner on May 10, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathcommands.go
177 lines (166 loc) · 7.24 KB
/
commands.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
package commands
import (
"errors"
"fmt"
"code.vegaprotocol.io/protos/commands"
commandspb "code.vegaprotocol.io/protos/vega/commands/v1"
walletpb "code.vegaprotocol.io/protos/vega/wallet/v1"
"github.com/golang/protobuf/proto"
)
func CheckSubmitTransactionRequest(req *walletpb.SubmitTransactionRequest) commands.Errors {
errs := commands.NewErrors()
if len(req.PubKey) == 0 {
errs.AddForProperty("submit_transaction_request.pub_key", commands.ErrIsRequired)
}
if req.Command == nil {
return errs.FinalAddForProperty("submit_transaction_request.command", commands.ErrIsRequired)
}
var cmdErr error
switch cmd := req.Command.(type) {
case *walletpb.SubmitTransactionRequest_OrderSubmission:
cmdErr = commands.CheckOrderSubmission(cmd.OrderSubmission)
case *walletpb.SubmitTransactionRequest_OrderCancellation:
cmdErr = commands.NewErrors()
case *walletpb.SubmitTransactionRequest_OrderAmendment:
cmdErr = commands.CheckOrderAmendment(cmd.OrderAmendment)
case *walletpb.SubmitTransactionRequest_VoteSubmission:
cmdErr = commands.CheckVoteSubmission(cmd.VoteSubmission)
case *walletpb.SubmitTransactionRequest_WithdrawSubmission:
cmdErr = commands.CheckWithdrawSubmission(cmd.WithdrawSubmission)
case *walletpb.SubmitTransactionRequest_LiquidityProvisionSubmission:
cmdErr = commands.CheckLiquidityProvisionSubmission(cmd.LiquidityProvisionSubmission)
case *walletpb.SubmitTransactionRequest_ProposalSubmission:
cmdErr = commands.CheckProposalSubmission(cmd.ProposalSubmission)
case *walletpb.SubmitTransactionRequest_AnnounceNode:
cmdErr = commands.CheckAnnounceNode(cmd.AnnounceNode)
case *walletpb.SubmitTransactionRequest_NodeVote:
cmdErr = commands.CheckNodeVote(cmd.NodeVote)
case *walletpb.SubmitTransactionRequest_NodeSignature:
cmdErr = commands.CheckNodeSignature(cmd.NodeSignature)
case *walletpb.SubmitTransactionRequest_ChainEvent:
cmdErr = commands.CheckChainEvent(cmd.ChainEvent)
case *walletpb.SubmitTransactionRequest_OracleDataSubmission:
cmdErr = commands.CheckOracleDataSubmission(cmd.OracleDataSubmission)
case *walletpb.SubmitTransactionRequest_UndelegateSubmission:
cmdErr = commands.CheckUndelegateSubmission(cmd.UndelegateSubmission)
case *walletpb.SubmitTransactionRequest_DelegateSubmission:
cmdErr = commands.CheckDelegateSubmission(cmd.DelegateSubmission)
case *walletpb.SubmitTransactionRequest_LiquidityProvisionCancellation:
cmdErr = commands.CheckLiquidityProvisionCancellation(cmd.LiquidityProvisionCancellation)
case *walletpb.SubmitTransactionRequest_LiquidityProvisionAmendment:
cmdErr = commands.CheckLiquidityProvisionAmendment(cmd.LiquidityProvisionAmendment)
case *walletpb.SubmitTransactionRequest_Transfer:
cmdErr = commands.CheckTransfer(cmd.Transfer)
case *walletpb.SubmitTransactionRequest_CancelTransfer:
cmdErr = commands.CheckCancelTransfer(cmd.CancelTransfer)
case *walletpb.SubmitTransactionRequest_KeyRotateSubmission:
cmdErr = commands.CheckKeyRotateSubmission(cmd.KeyRotateSubmission)
case *walletpb.SubmitTransactionRequest_EthereumKeyRotateSubmission:
cmdErr = commands.CheckEthereumKeyRotateSubmission(cmd.EthereumKeyRotateSubmission)
default:
errs.AddForProperty("input_data.command", commands.ErrIsNotSupported)
}
if cmdErr != nil {
errs.Merge(toErrors(cmdErr))
}
return errs
}
func ToMarshaledInputData(req *walletpb.SubmitTransactionRequest, height uint64) ([]byte, error) {
data := commands.NewInputData(height)
wrapRequestCommandIntoInputData(data, req)
return proto.Marshal(data)
}
func wrapRequestCommandIntoInputData(data *commandspb.InputData, req *walletpb.SubmitTransactionRequest) {
switch cmd := req.Command.(type) {
case *walletpb.SubmitTransactionRequest_OrderSubmission:
data.Command = &commandspb.InputData_OrderSubmission{
OrderSubmission: req.GetOrderSubmission(),
}
case *walletpb.SubmitTransactionRequest_OrderCancellation:
data.Command = &commandspb.InputData_OrderCancellation{
OrderCancellation: req.GetOrderCancellation(),
}
case *walletpb.SubmitTransactionRequest_OrderAmendment:
data.Command = &commandspb.InputData_OrderAmendment{
OrderAmendment: req.GetOrderAmendment(),
}
case *walletpb.SubmitTransactionRequest_VoteSubmission:
data.Command = &commandspb.InputData_VoteSubmission{
VoteSubmission: req.GetVoteSubmission(),
}
case *walletpb.SubmitTransactionRequest_WithdrawSubmission:
data.Command = &commandspb.InputData_WithdrawSubmission{
WithdrawSubmission: req.GetWithdrawSubmission(),
}
case *walletpb.SubmitTransactionRequest_LiquidityProvisionSubmission:
data.Command = &commandspb.InputData_LiquidityProvisionSubmission{
LiquidityProvisionSubmission: req.GetLiquidityProvisionSubmission(),
}
case *walletpb.SubmitTransactionRequest_ProposalSubmission:
data.Command = &commandspb.InputData_ProposalSubmission{
ProposalSubmission: req.GetProposalSubmission(),
}
case *walletpb.SubmitTransactionRequest_AnnounceNode:
data.Command = &commandspb.InputData_AnnounceNode{
AnnounceNode: req.GetAnnounceNode(),
}
case *walletpb.SubmitTransactionRequest_NodeVote:
data.Command = &commandspb.InputData_NodeVote{
NodeVote: req.GetNodeVote(),
}
case *walletpb.SubmitTransactionRequest_NodeSignature:
data.Command = &commandspb.InputData_NodeSignature{
NodeSignature: req.GetNodeSignature(),
}
case *walletpb.SubmitTransactionRequest_ChainEvent:
data.Command = &commandspb.InputData_ChainEvent{
ChainEvent: req.GetChainEvent(),
}
case *walletpb.SubmitTransactionRequest_OracleDataSubmission:
data.Command = &commandspb.InputData_OracleDataSubmission{
OracleDataSubmission: req.GetOracleDataSubmission(),
}
case *walletpb.SubmitTransactionRequest_DelegateSubmission:
data.Command = &commandspb.InputData_DelegateSubmission{
DelegateSubmission: req.GetDelegateSubmission(),
}
case *walletpb.SubmitTransactionRequest_UndelegateSubmission:
data.Command = &commandspb.InputData_UndelegateSubmission{
UndelegateSubmission: req.GetUndelegateSubmission(),
}
case *walletpb.SubmitTransactionRequest_LiquidityProvisionCancellation:
data.Command = &commandspb.InputData_LiquidityProvisionCancellation{
LiquidityProvisionCancellation: req.GetLiquidityProvisionCancellation(),
}
case *walletpb.SubmitTransactionRequest_LiquidityProvisionAmendment:
data.Command = &commandspb.InputData_LiquidityProvisionAmendment{
LiquidityProvisionAmendment: req.GetLiquidityProvisionAmendment(),
}
case *walletpb.SubmitTransactionRequest_Transfer:
data.Command = &commandspb.InputData_Transfer{
Transfer: req.GetTransfer(),
}
case *walletpb.SubmitTransactionRequest_CancelTransfer:
data.Command = &commandspb.InputData_CancelTransfer{
CancelTransfer: req.GetCancelTransfer(),
}
case *walletpb.SubmitTransactionRequest_KeyRotateSubmission:
data.Command = &commandspb.InputData_KeyRotateSubmission{
KeyRotateSubmission: req.GetKeyRotateSubmission(),
}
case *walletpb.SubmitTransactionRequest_EthereumKeyRotateSubmission:
data.Command = &commandspb.InputData_EthereumKeyRotateSubmission{
EthereumKeyRotateSubmission: req.GetEthereumKeyRotateSubmission(),
}
default:
panic(fmt.Sprintf("command %v is not supported", cmd))
}
}
func toErrors(err error) commands.Errors {
errs := &commands.Errors{}
if !errors.As(err, errs) {
errs := commands.NewErrors()
return errs.FinalAdd(err)
}
return *errs
}