@@ -17,6 +17,13 @@ type SignerClient interface {
17
17
SignOutputRaw (ctx context.Context , tx * wire.MsgTx ,
18
18
signDescriptors []* input.SignDescriptor ) ([][]byte , error )
19
19
20
+ // ComputeInputScript generates the proper input script for P2WPKH
21
+ // output and NP2WPKH outputs. This method only requires that the
22
+ // `Output`, `HashType`, `SigHashes` and `InputIndex` fields are
23
+ // populated within the sign descriptors.
24
+ ComputeInputScript (ctx context.Context , tx * wire.MsgTx ,
25
+ signDescriptors []* input.SignDescriptor ) ([]* input.Script , error )
26
+
20
27
// SignMessage signs a message with the key specified in the key
21
28
// locator. The returned signature is fixed-size LN wire format encoded.
22
29
SignMessage (ctx context.Context , msg []byte ,
@@ -56,13 +63,8 @@ func newSignerClient(conn *grpc.ClientConn,
56
63
}
57
64
}
58
65
59
- func (s * signerClient ) SignOutputRaw (ctx context.Context , tx * wire.MsgTx ,
60
- signDescriptors []* input.SignDescriptor ) ([][]byte , error ) {
61
-
62
- txRaw , err := swap .EncodeTx (tx )
63
- if err != nil {
64
- return nil , err
65
- }
66
+ func marshallSignDescriptors (signDescriptors []* input.SignDescriptor ,
67
+ ) []* signrpc.SignDescriptor {
66
68
67
69
rpcSignDescs := make ([]* signrpc.SignDescriptor , len (signDescriptors ))
68
70
for i , signDesc := range signDescriptors {
@@ -103,6 +105,18 @@ func (s *signerClient) SignOutputRaw(ctx context.Context, tx *wire.MsgTx,
103
105
}
104
106
}
105
107
108
+ return rpcSignDescs
109
+ }
110
+
111
+ func (s * signerClient ) SignOutputRaw (ctx context.Context , tx * wire.MsgTx ,
112
+ signDescriptors []* input.SignDescriptor ) ([][]byte , error ) {
113
+
114
+ txRaw , err := swap .EncodeTx (tx )
115
+ if err != nil {
116
+ return nil , err
117
+ }
118
+ rpcSignDescs := marshallSignDescriptors (signDescriptors )
119
+
106
120
rpcCtx , cancel := context .WithTimeout (ctx , rpcTimeout )
107
121
defer cancel ()
108
122
@@ -120,6 +134,44 @@ func (s *signerClient) SignOutputRaw(ctx context.Context, tx *wire.MsgTx,
120
134
return resp .RawSigs , nil
121
135
}
122
136
137
+ // ComputeInputScript generates the proper input script for P2WPKH output and
138
+ // NP2WPKH outputs. This method only requires that the `Output`, `HashType`,
139
+ // `SigHashes` and `InputIndex` fields are populated within the sign
140
+ // descriptors.
141
+ func (s * signerClient ) ComputeInputScript (ctx context.Context , tx * wire.MsgTx ,
142
+ signDescriptors []* input.SignDescriptor ) ([]* input.Script , error ) {
143
+
144
+ txRaw , err := swap .EncodeTx (tx )
145
+ if err != nil {
146
+ return nil , err
147
+ }
148
+ rpcSignDescs := marshallSignDescriptors (signDescriptors )
149
+
150
+ rpcCtx , cancel := context .WithTimeout (ctx , rpcTimeout )
151
+ defer cancel ()
152
+
153
+ rpcCtx = s .signerMac .WithMacaroonAuth (rpcCtx )
154
+ resp , err := s .client .ComputeInputScript (
155
+ rpcCtx , & signrpc.SignReq {
156
+ RawTxBytes : txRaw ,
157
+ SignDescs : rpcSignDescs ,
158
+ },
159
+ )
160
+ if err != nil {
161
+ return nil , err
162
+ }
163
+
164
+ inputScripts := make ([]* input.Script , 0 , len (resp .InputScripts ))
165
+ for _ , inputScript := range resp .InputScripts {
166
+ inputScripts = append (inputScripts , & input.Script {
167
+ SigScript : inputScript .SigScript ,
168
+ Witness : inputScript .Witness ,
169
+ })
170
+ }
171
+
172
+ return inputScripts , nil
173
+ }
174
+
123
175
// SignMessage signs a message with the key specified in the key locator. The
124
176
// returned signature is fixed-size LN wire format encoded.
125
177
func (s * signerClient ) SignMessage (ctx context.Context , msg []byte ,
0 commit comments