@@ -30,9 +30,9 @@ import (
30
30
31
31
const multisigNameMaxLen = 30
32
32
33
- // queryBTC is like query , but nested one level deeper.
34
- func (device * Device ) queryBTC (request * messages.BTCRequest ) (* messages.BTCResponse , error ) {
35
- response , err := device .query (& messages.Request {
33
+ // nonAtomicQueryBTC is like nonAtomicQuery , but nested one level deeper.
34
+ func (device * Device ) nonAtomicQueryBTC (request * messages.BTCRequest ) (* messages.BTCResponse , error ) {
35
+ response , err := device .nonAtomicQuery (& messages.Request {
36
36
Request : & messages.Request_Btc {
37
37
Btc : request ,
38
38
},
@@ -47,6 +47,13 @@ func (device *Device) queryBTC(request *messages.BTCRequest) (*messages.BTCRespo
47
47
return btcResponse .Btc , nil
48
48
}
49
49
50
+ // queryBTC is like query, but nested one level deeper.
51
+ func (device * Device ) queryBTC (request * messages.BTCRequest ) (* messages.BTCResponse , error ) {
52
+ return atomicQueriesValue (device , func () (* messages.BTCResponse , error ) {
53
+ return device .nonAtomicQueryBTC (request )
54
+ })
55
+ }
56
+
50
57
// NewBTCScriptConfigSimple is a helper to construct the correct script config for simple script
51
58
// types.
52
59
func NewBTCScriptConfigSimple (typ messages.BTCScriptConfig_SimpleType ) * messages.BTCScriptConfig {
@@ -172,9 +179,9 @@ func (device *Device) BTCAddress(
172
179
return pubResponse .Pub .Pub , nil
173
180
}
174
181
175
- func (device * Device ) queryBtcSign (request proto.Message ) (
182
+ func (device * Device ) nonAtomicQueryBtcSign (request proto.Message ) (
176
183
* messages.BTCSignNextResponse , error ) {
177
- response , err := device .query (request )
184
+ response , err := device .nonAtomicQuery (request )
178
185
if err != nil {
179
186
return nil , err
180
187
}
@@ -185,9 +192,9 @@ func (device *Device) queryBtcSign(request proto.Message) (
185
192
return next .BtcSignNext , nil
186
193
}
187
194
188
- func (device * Device ) nestedQueryBtcSign (request * messages.BTCRequest ) (
195
+ func (device * Device ) nonAtomicNestedQueryBtcSign (request * messages.BTCRequest ) (
189
196
* messages.BTCSignNextResponse , error ) {
190
- response , err := device .queryBTC (request )
197
+ response , err := device .nonAtomicQueryBTC (request )
191
198
if err != nil {
192
199
return nil , err
193
200
}
@@ -286,9 +293,7 @@ type BTCSignResult struct {
286
293
GeneratedOutputs map [int ][]byte
287
294
}
288
295
289
- // BTCSign signs a bitcoin or bitcoin-like transaction. The previous transactions of the inputs
290
- // need to be provided if `BTCSignNeedsPrevTxs()` returns true.
291
- func (device * Device ) BTCSign (
296
+ func (device * Device ) nonAtomicBTCSign (
292
297
coin messages.BTCCoin ,
293
298
scriptConfigs []* messages.BTCScriptConfigWithKeypath ,
294
299
outputScriptConfigs []* messages.BTCScriptConfigWithKeypath ,
@@ -323,7 +328,7 @@ func (device *Device) BTCSign(
323
328
}
324
329
325
330
signatures := make ([][]byte , len (tx .Inputs ))
326
- next , err := device .queryBtcSign (& messages.Request {
331
+ next , err := device .nonAtomicQueryBtcSign (& messages.Request {
327
332
Request : & messages.Request_BtcSignInit {
328
333
BtcSignInit : & messages.BTCSignInitRequest {
329
334
Coin : coin ,
@@ -363,7 +368,7 @@ func (device *Device) BTCSign(
363
368
Commitment : antikleptoHostCommit (hostNonce ),
364
369
}
365
370
}
366
- next , err = device .queryBtcSign (& messages.Request {
371
+ next , err = device .nonAtomicQueryBtcSign (& messages.Request {
367
372
Request : & messages.Request_BtcSignInput {
368
373
BtcSignInput : input ,
369
374
}})
@@ -376,7 +381,7 @@ func (device *Device) BTCSign(
376
381
return nil , errp .New ("unexpected response; expected signer nonce commitment" )
377
382
}
378
383
signerCommitment := next .AntiKleptoSignerCommitment .Commitment
379
- next , err = device .nestedQueryBtcSign (
384
+ next , err = device .nonAtomicNestedQueryBtcSign (
380
385
& messages.BTCRequest {
381
386
Request : & messages.BTCRequest_AntikleptoSignature {
382
387
AntikleptoSignature : & messages.AntiKleptoSignatureRequest {
@@ -408,7 +413,7 @@ func (device *Device) BTCSign(
408
413
}
409
414
case messages .BTCSignNextResponse_PREVTX_INIT :
410
415
prevtx := tx .Inputs [next .Index ].PrevTx
411
- next , err = device .nestedQueryBtcSign (
416
+ next , err = device .nonAtomicNestedQueryBtcSign (
412
417
& messages.BTCRequest {
413
418
Request : & messages.BTCRequest_PrevtxInit {
414
419
PrevtxInit : & messages.BTCPrevTxInitRequest {
@@ -424,7 +429,7 @@ func (device *Device) BTCSign(
424
429
}
425
430
case messages .BTCSignNextResponse_PREVTX_INPUT :
426
431
prevtxInput := tx .Inputs [next .Index ].PrevTx .Inputs [next .PrevIndex ]
427
- next , err = device .nestedQueryBtcSign (
432
+ next , err = device .nonAtomicNestedQueryBtcSign (
428
433
& messages.BTCRequest {
429
434
Request : & messages.BTCRequest_PrevtxInput {
430
435
PrevtxInput : prevtxInput ,
@@ -435,7 +440,7 @@ func (device *Device) BTCSign(
435
440
}
436
441
case messages .BTCSignNextResponse_PREVTX_OUTPUT :
437
442
prevtxOutput := tx .Inputs [next .Index ].PrevTx .Outputs [next .PrevIndex ]
438
- next , err = device .nestedQueryBtcSign (
443
+ next , err = device .nonAtomicNestedQueryBtcSign (
439
444
& messages.BTCRequest {
440
445
Request : & messages.BTCRequest_PrevtxOutput {
441
446
PrevtxOutput : prevtxOutput ,
@@ -446,7 +451,7 @@ func (device *Device) BTCSign(
446
451
}
447
452
case messages .BTCSignNextResponse_OUTPUT :
448
453
outputIndex := next .Index
449
- next , err = device .queryBtcSign (& messages.Request {
454
+ next , err = device .nonAtomicQueryBtcSign (& messages.Request {
450
455
Request : & messages.Request_BtcSignOutput {
451
456
BtcSignOutput : tx .Outputs [outputIndex ],
452
457
}})
@@ -471,7 +476,7 @@ func (device *Device) BTCSign(
471
476
return nil , errp .New ("payment request index out of bounds" )
472
477
}
473
478
paymentRequest := tx .PaymentRequests [paymentRequestIndex ]
474
- next , err = device .nestedQueryBtcSign (
479
+ next , err = device .nonAtomicNestedQueryBtcSign (
475
480
& messages.BTCRequest {
476
481
Request : & messages.BTCRequest_PaymentRequest {
477
482
PaymentRequest : paymentRequest ,
@@ -490,6 +495,26 @@ func (device *Device) BTCSign(
490
495
}
491
496
}
492
497
498
+ // BTCSign signs a bitcoin or bitcoin-like transaction. The previous transactions of the inputs
499
+ // need to be provided if `BTCSignNeedsPrevTxs()` returns true.
500
+ func (device * Device ) BTCSign (
501
+ coin messages.BTCCoin ,
502
+ scriptConfigs []* messages.BTCScriptConfigWithKeypath ,
503
+ outputScriptConfigs []* messages.BTCScriptConfigWithKeypath ,
504
+ tx * BTCTx ,
505
+ formatUnit messages.BTCSignInitRequest_FormatUnit ,
506
+ ) (* BTCSignResult , error ) {
507
+ return atomicQueriesValue (device , func () (* BTCSignResult , error ) {
508
+ return device .nonAtomicBTCSign (
509
+ coin ,
510
+ scriptConfigs ,
511
+ outputScriptConfigs ,
512
+ tx ,
513
+ formatUnit ,
514
+ )
515
+ })
516
+ }
517
+
493
518
// BTCIsScriptConfigRegistered returns true if the script config / account is already registered.
494
519
func (device * Device ) BTCIsScriptConfigRegistered (
495
520
coin messages.BTCCoin ,
@@ -562,9 +587,7 @@ type BTCSignMessageResult struct {
562
587
ElectrumSig65 []byte
563
588
}
564
589
565
- // BTCSignMessage signs a Bitcoin message. The 64 byte raw signature, the recoverable ID and the 65
566
- // byte signature in Electrum format are returned.
567
- func (device * Device ) BTCSignMessage (
590
+ func (device * Device ) nonAtomicBTCSignMessage (
568
591
coin messages.BTCCoin ,
569
592
scriptConfig * messages.BTCScriptConfigWithKeypath ,
570
593
message []byte ,
@@ -601,7 +624,7 @@ func (device *Device) BTCSignMessage(
601
624
},
602
625
},
603
626
}
604
- response , err := device .queryBTC (request )
627
+ response , err := device .nonAtomicQueryBTC (request )
605
628
if err != nil {
606
629
return nil , err
607
630
}
@@ -612,7 +635,7 @@ func (device *Device) BTCSignMessage(
612
635
if ! ok {
613
636
return nil , errp .New ("unexpected response" )
614
637
}
615
- response , err := device .queryBTC (& messages.BTCRequest {
638
+ response , err := device .nonAtomicQueryBTC (& messages.BTCRequest {
616
639
Request : & messages.BTCRequest_AntikleptoSignature {
617
640
AntikleptoSignature : & messages.AntiKleptoSignatureRequest {
618
641
HostNonce : hostNonce ,
@@ -654,3 +677,14 @@ func (device *Device) BTCSignMessage(
654
677
ElectrumSig65 : electrumSig65 ,
655
678
}, nil
656
679
}
680
+
681
+ // BTCSignMessage signs a Bitcoin message.
682
+ func (device * Device ) BTCSignMessage (
683
+ coin messages.BTCCoin ,
684
+ scriptConfig * messages.BTCScriptConfigWithKeypath ,
685
+ message []byte ,
686
+ ) (* BTCSignMessageResult , error ) {
687
+ return atomicQueriesValue (device , func () (* BTCSignMessageResult , error ) {
688
+ return device .nonAtomicBTCSignMessage (coin , scriptConfig , message )
689
+ })
690
+ }
0 commit comments