@@ -258,7 +258,7 @@ async fn batch_opt_reveal_pk_and_submit<N: Namada>(
258
258
namada : & N ,
259
259
args : & args:: Tx ,
260
260
owners : & [ & Address ] ,
261
- tx_data : ( Tx , SigningTxData ) ,
261
+ mut tx_data : ( Tx , SigningTxData ) ,
262
262
) -> Result < ProcessTxResponse , error:: Error >
263
263
where
264
264
<N :: Client as namada_sdk:: io:: Client >:: Error : std:: fmt:: Display ,
@@ -272,15 +272,33 @@ where
272
272
batched_tx_data. push ( reveal_pk_tx_data) ;
273
273
}
274
274
}
275
- batched_tx_data. push ( tx_data) ;
276
275
277
- let ( mut batched_tx, batched_signing_data) =
278
- namada_sdk:: tx:: build_batch ( batched_tx_data) ?;
279
- for sig_data in batched_signing_data {
280
- sign ( namada, & mut batched_tx, args, sig_data) . await ?;
276
+ // Since hardware wallets do not yet support batched transactions, use a
277
+ // different logic in order to achieve compatibility
278
+ if args. use_device {
279
+ // Sign each transaction separately
280
+ for ( tx, sig_data) in & mut batched_tx_data {
281
+ sign ( namada, tx, args, sig_data. clone ( ) ) . await ?;
282
+ }
283
+ sign ( namada, & mut tx_data. 0 , args, tx_data. 1 ) . await ?;
284
+ // Then submit each transaction separately
285
+ for ( tx, _sig_data) in batched_tx_data {
286
+ namada. submit ( tx, args) . await ?;
287
+ }
288
+ // The result of submitting this function's argument is what is returned
289
+ namada. submit ( tx_data. 0 , args) . await
290
+ } else {
291
+ // Otherwise complete the batch with this function's argument
292
+ batched_tx_data. push ( tx_data) ;
293
+ let ( mut batched_tx, batched_signing_data) =
294
+ namada_sdk:: tx:: build_batch ( batched_tx_data) ?;
295
+ // Sign the batch with the union of the signers required for each part
296
+ for sig_data in batched_signing_data {
297
+ sign ( namada, & mut batched_tx, args, sig_data) . await ?;
298
+ }
299
+ // Then finally submit everything in one go
300
+ namada. submit ( batched_tx, args) . await
281
301
}
282
-
283
- namada. submit ( batched_tx, args) . await
284
302
}
285
303
286
304
pub async fn submit_bridge_pool_tx < N : Namada > (
@@ -1202,7 +1220,7 @@ pub async fn submit_shielded_transfer(
1202
1220
MAX_HW_OUTPUT ,
1203
1221
& args. tx ,
1204
1222
)
1205
- . await ?;
1223
+ . await ?;
1206
1224
let ( mut tx, signing_data) =
1207
1225
args. clone ( ) . build ( namada, & mut bparams) . await ?;
1208
1226
masp_sign ( & mut tx, & args. tx , & signing_data, shielded_hw_keys) . await ?;
@@ -1378,7 +1396,7 @@ where
1378
1396
MAX_HW_OUTPUT ,
1379
1397
& args. tx ,
1380
1398
)
1381
- . await ?;
1399
+ . await ?;
1382
1400
let ( mut tx, signing_data, _) = args. build ( namada, & mut bparams) . await ?;
1383
1401
masp_sign ( & mut tx, & args. tx , & signing_data, shielded_hw_keys) . await ?;
1384
1402
@@ -1396,7 +1414,7 @@ where
1396
1414
& [ & args. source . effective_address ( ) ] ,
1397
1415
( tx, signing_data) ,
1398
1416
)
1399
- . await ?;
1417
+ . await ?;
1400
1418
1401
1419
if let Some ( masp_section) = opt_masp_section {
1402
1420
pre_cache_masp_data_on_tx_result ( namada, & res, & masp_section) . await ;
0 commit comments