@@ -27,11 +27,11 @@ const (
27
27
// GetSignBatchCommand returns the transaction sign-batch command.
28
28
func GetSignBatchCommand () * cobra.Command {
29
29
cmd := & cobra.Command {
30
- Use : "sign-batch [file]" ,
30
+ Use : "sign-batch [file] ([file2]...) " ,
31
31
Short : "Sign transaction batch files" ,
32
32
Long : `Sign batch files of transactions generated with --generate-only.
33
- The command processes list of transactions from file (one StdTx each line), generate
34
- signed transactions or signatures and print their JSON encoding, delimited by '\n'.
33
+ The command processes list of transactions from a file (one StdTx each line), or multiple files.
34
+ Then generates signed transactions or signatures and print their JSON encoding, delimited by '\n'.
35
35
As the signatures are generated, the command updates the account and sequence number accordingly.
36
36
37
37
If the --signature-only flag is set, it will output the signature parts only.
@@ -50,7 +50,7 @@ account key. It implies --signature-only.
50
50
` ,
51
51
PreRun : preSignCmd ,
52
52
RunE : makeSignBatchCmd (),
53
- Args : cobra .ExactArgs (1 ),
53
+ Args : cobra .MinimumNArgs (1 ),
54
54
}
55
55
56
56
cmd .Flags ().String (flagMultisig , "" , "Address or key name of the multisig account on behalf of which the transaction shall be signed" )
@@ -74,7 +74,6 @@ func makeSignBatchCmd() func(cmd *cobra.Command, args []string) error {
74
74
txFactory := tx .NewFactoryCLI (clientCtx , cmd .Flags ())
75
75
txCfg := clientCtx .TxConfig
76
76
printSignatureOnly , _ := cmd .Flags ().GetBool (flagSigOnly )
77
- infile := os .Stdin
78
77
79
78
ms , err := cmd .Flags ().GetString (flagMultisig )
80
79
if err != nil {
@@ -86,17 +85,14 @@ func makeSignBatchCmd() func(cmd *cobra.Command, args []string) error {
86
85
if err != nil {
87
86
return err
88
87
}
89
-
90
88
defer closeFunc ()
91
89
clientCtx .WithOutput (cmd .OutOrStdout ())
92
90
93
- if args [0 ] != "-" {
94
- infile , err = os .Open (args [0 ])
95
- if err != nil {
96
- return err
97
- }
91
+ // reads tx from args
92
+ scanner , err := authclient .ReadTxsFromInput (txCfg , args ... )
93
+ if err != nil {
94
+ return err
98
95
}
99
- scanner := authclient .NewBatchScanner (txCfg , infile )
100
96
101
97
if ! clientCtx .Offline {
102
98
if ms == "" {
@@ -121,9 +117,9 @@ func makeSignBatchCmd() func(cmd *cobra.Command, args []string) error {
121
117
}
122
118
}
123
119
124
- appendMessagesToSingleMsg , _ := cmd .Flags ().GetBool (flagAppend )
125
- if appendMessagesToSingleMsg {
126
- // It will combine all tx msgs and create single signed transaction
120
+ appendMessagesToSingleTx , _ := cmd .Flags ().GetBool (flagAppend )
121
+ // Combines all tx msgs and create single signed transaction
122
+ if appendMessagesToSingleTx {
127
123
txBuilder := clientCtx .TxConfig .NewTxBuilder ()
128
124
msgs := make ([]sdk.Msg , 0 )
129
125
newGasLimit := uint64 (0 )
@@ -151,39 +147,24 @@ func makeSignBatchCmd() func(cmd *cobra.Command, args []string) error {
151
147
// set the gasLimit
152
148
txBuilder .SetGasLimit (newGasLimit )
153
149
150
+ // sign the txs
154
151
if ms == "" {
155
152
from , _ := cmd .Flags ().GetString (flags .FlagFrom )
156
- _ , fromName , _ , err := client .GetFromFields (clientCtx , txFactory .Keybase (), from )
157
- if err != nil {
158
- return fmt .Errorf ("error getting account from keybase: %w" , err )
159
- }
160
- err = authclient .SignTx (txFactory , clientCtx , fromName , txBuilder , true , true )
161
- if err != nil {
153
+ if err := sign (clientCtx , txBuilder , txFactory , from ); err != nil {
162
154
return err
163
155
}
164
156
} else {
165
- multisigAddr , _ , _ , err := client .GetFromFields (clientCtx , txFactory .Keybase (), ms )
166
- if err != nil {
167
- return fmt .Errorf ("error getting account from keybase: %w" , err )
168
- }
169
- err = authclient .SignTxWithSignerAddress (
170
- txFactory , clientCtx , multisigAddr , clientCtx .GetFromName (), txBuilder , clientCtx .Offline , true )
171
- if err != nil {
157
+ if err := multisigSign (clientCtx , txBuilder , txFactory , ms ); err != nil {
172
158
return err
173
159
}
174
160
}
175
161
176
- if err != nil {
177
- return err
178
- }
179
-
180
162
json , err := marshalSignatureJSON (txCfg , txBuilder , printSignatureOnly )
181
163
if err != nil {
182
164
return err
183
165
}
184
166
185
167
cmd .Printf ("%s\n " , json )
186
-
187
168
} else {
188
169
// It will generate signed tx for each tx
189
170
for sequence := txFactory .Sequence (); scanner .Scan (); sequence ++ {
@@ -193,37 +174,23 @@ func makeSignBatchCmd() func(cmd *cobra.Command, args []string) error {
193
174
if err != nil {
194
175
return err
195
176
}
177
+
178
+ // sign the txs
196
179
if ms == "" {
197
180
from , _ := cmd .Flags ().GetString (flags .FlagFrom )
198
- _ , fromName , _ , err := client .GetFromFields (clientCtx , txFactory .Keybase (), from )
199
- if err != nil {
200
- return fmt .Errorf ("error getting account from keybase: %w" , err )
201
- }
202
- err = authclient .SignTx (txFactory , clientCtx , fromName , txBuilder , true , true )
203
- if err != nil {
181
+ if err := sign (clientCtx , txBuilder , txFactory , from ); err != nil {
204
182
return err
205
183
}
206
184
} else {
207
- multisigAddr , _ , _ , err := client .GetFromFields (clientCtx , txFactory .Keybase (), ms )
208
- if err != nil {
209
- return fmt .Errorf ("error getting account from keybase: %w" , err )
210
- }
211
- err = authclient .SignTxWithSignerAddress (
212
- txFactory , clientCtx , multisigAddr , clientCtx .GetFromName (), txBuilder , clientCtx .Offline , true )
213
- if err != nil {
185
+ if err := multisigSign (clientCtx , txBuilder , txFactory , ms ); err != nil {
214
186
return err
215
187
}
216
188
}
217
189
218
- if err != nil {
219
- return err
220
- }
221
-
222
190
json , err := marshalSignatureJSON (txCfg , txBuilder , printSignatureOnly )
223
191
if err != nil {
224
192
return err
225
193
}
226
-
227
194
cmd .Printf ("%s\n " , json )
228
195
}
229
196
}
@@ -236,6 +203,40 @@ func makeSignBatchCmd() func(cmd *cobra.Command, args []string) error {
236
203
}
237
204
}
238
205
206
+ func sign (clientCtx client.Context , txBuilder client.TxBuilder , txFactory tx.Factory , from string ) error {
207
+ _ , fromName , _ , err := client .GetFromFields (clientCtx , txFactory .Keybase (), from )
208
+ if err != nil {
209
+ return fmt .Errorf ("error getting account from keybase: %w" , err )
210
+ }
211
+
212
+ if err = authclient .SignTx (txFactory , clientCtx , fromName , txBuilder , true , true ); err != nil {
213
+ return err
214
+ }
215
+
216
+ return nil
217
+ }
218
+
219
+ func multisigSign (clientCtx client.Context , txBuilder client.TxBuilder , txFactory tx.Factory , multisig string ) error {
220
+ multisigAddr , _ , _ , err := client .GetFromFields (clientCtx , txFactory .Keybase (), multisig )
221
+ if err != nil {
222
+ return fmt .Errorf ("error getting account from keybase: %w" , err )
223
+ }
224
+
225
+ if err = authclient .SignTxWithSignerAddress (
226
+ txFactory ,
227
+ clientCtx ,
228
+ multisigAddr ,
229
+ clientCtx .GetFromName (),
230
+ txBuilder ,
231
+ clientCtx .Offline ,
232
+ true ,
233
+ ); err != nil {
234
+ return err
235
+ }
236
+
237
+ return nil
238
+ }
239
+
239
240
func setOutputFile (cmd * cobra.Command ) (func (), error ) {
240
241
outputDoc , _ := cmd .Flags ().GetString (flags .FlagOutputDocument )
241
242
if outputDoc == "" {
0 commit comments