@@ -17,6 +17,13 @@ type SignerClient interface {
1717 SignOutputRaw (ctx context.Context , tx * wire.MsgTx ,
1818 signDescriptors []* input.SignDescriptor ) ([][]byte , error )
1919
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+
2027 // SignMessage signs a message with the key specified in the key
2128 // locator. The returned signature is fixed-size LN wire format encoded.
2229 SignMessage (ctx context.Context , msg []byte ,
@@ -56,13 +63,8 @@ func newSignerClient(conn *grpc.ClientConn,
5663 }
5764}
5865
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 {
6668
6769 rpcSignDescs := make ([]* signrpc.SignDescriptor , len (signDescriptors ))
6870 for i , signDesc := range signDescriptors {
@@ -103,6 +105,18 @@ func (s *signerClient) SignOutputRaw(ctx context.Context, tx *wire.MsgTx,
103105 }
104106 }
105107
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+
106120 rpcCtx , cancel := context .WithTimeout (ctx , rpcTimeout )
107121 defer cancel ()
108122
@@ -120,6 +134,44 @@ func (s *signerClient) SignOutputRaw(ctx context.Context, tx *wire.MsgTx,
120134 return resp .RawSigs , nil
121135}
122136
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+
123175// SignMessage signs a message with the key specified in the key locator. The
124176// returned signature is fixed-size LN wire format encoded.
125177func (s * signerClient ) SignMessage (ctx context.Context , msg []byte ,
0 commit comments