Skip to content

Commit 8771d06

Browse files
authored
Merge pull request #155 from wpaulino/signer-compute-input-script
lndclient: expose ComputeInputScript in SignerClient
2 parents 4d2018e + 0b053e6 commit 8771d06

File tree

2 files changed

+66
-7
lines changed

2 files changed

+66
-7
lines changed

lndclient/signer_client.go

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
125177
func (s *signerClient) SignMessage(ctx context.Context, msg []byte,

test/signer_mock.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package test
33
import (
44
"bytes"
55
"context"
6+
"fmt"
67

78
"github.com/btcsuite/btcd/btcec"
89
"github.com/btcsuite/btcd/wire"
@@ -27,6 +28,12 @@ func (s *mockSigner) SignOutputRaw(ctx context.Context, tx *wire.MsgTx,
2728
return rawSigs, nil
2829
}
2930

31+
func (s *mockSigner) ComputeInputScript(ctx context.Context, tx *wire.MsgTx,
32+
signDescriptors []*input.SignDescriptor) ([]*input.Script, error) {
33+
34+
return nil, fmt.Errorf("unimplemented")
35+
}
36+
3037
func (s *mockSigner) SignMessage(ctx context.Context, msg []byte,
3138
locator keychain.KeyLocator) ([]byte, error) {
3239

0 commit comments

Comments
 (0)