lnwallet: add ListUnspentWitness for funding tx coin selection
This commit is contained in:
parent
0e74672797
commit
4b4c0f73b0
@ -463,10 +463,10 @@ func (l *LightningWallet) handleFundingReserveRequest(req *initFundingReserveMsg
|
|||||||
// insuffcient funds, the other is a notification that the balance has
|
// insuffcient funds, the other is a notification that the balance has
|
||||||
// been updated make(chan struct{}, 1).
|
// been updated make(chan struct{}, 1).
|
||||||
|
|
||||||
// Find all unlocked unspent outputs with greater than 6 confirmations.
|
// Find all unlocked unspent witness outputs with greater than 6
|
||||||
maxConfs := int32(math.MaxInt32)
|
// confirmations.
|
||||||
// TODO(roasbeef): make 6 a config paramter?
|
// TODO(roasbeef): make 6 a config paramter?
|
||||||
unspentOutputs, err := l.ListUnspent(6, maxConfs, nil)
|
unspentOutputs, err := l.ListUnspentWitness(6)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.coinSelectMtx.Unlock()
|
l.coinSelectMtx.Unlock()
|
||||||
req.err <- err
|
req.err <- err
|
||||||
@ -1035,6 +1035,37 @@ func (l *LightningWallet) getNextRawKey() (*btcec.PrivateKey, error) {
|
|||||||
return pkAddr.PrivKey()
|
return pkAddr.PrivKey()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListUnspentWitness returns a slice of all the unspent outputs the wallet
|
||||||
|
// controls which pay to witness programs either directly or indirectly.
|
||||||
|
func (l *LightningWallet) ListUnspentWitness(minConfs int32) ([]*btcjson.ListUnspentResult, error) {
|
||||||
|
// First, grab all the unfiltered currently unspent outputs.
|
||||||
|
maxConfs := int32(math.MaxInt32)
|
||||||
|
unspentOutputs, err := l.ListUnspent(minConfs, maxConfs, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next, we'll run through all the regular outputs, only saving those
|
||||||
|
// which are p2wkh outputs or a p2wsh output nested within a p2sh output.
|
||||||
|
witnessOutputs := make([]*btcjson.ListUnspentResult, 0, len(unspentOutputs))
|
||||||
|
for _, output := range unspentOutputs {
|
||||||
|
pkScript, err := hex.DecodeString(output.ScriptPubKey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(roasbeef): this assumes all p2sh outputs returned by
|
||||||
|
// the wallet are nested p2sh...
|
||||||
|
if txscript.IsPayToWitnessPubKeyHash(pkScript) ||
|
||||||
|
txscript.IsPayToScriptHash(pkScript) {
|
||||||
|
witnessOutputs = append(witnessOutputs, output)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return witnessOutputs, nil
|
||||||
|
}
|
||||||
|
|
||||||
type WaddrmgrEncryptorDecryptor struct {
|
type WaddrmgrEncryptorDecryptor struct {
|
||||||
M *waddrmgr.Manager
|
M *waddrmgr.Manager
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user