lnwallet: add support for taproot chans to createHtlcRetribution

As these are revoked HTLCs, we need to set the taptweak since the
revocation case is just a keyspend.
This commit is contained in:
Olaoluwa Osuntokun 2023-03-01 21:44:47 -08:00
parent 52b122a8bb
commit 1f887a1b14
No known key found for this signature in database
GPG Key ID: 3BBD59E99B280306

View File

@ -2583,18 +2583,30 @@ func createHtlcRetribution(chanState *channeldb.OpenChannel,
return emptyRetribution, err return emptyRetribution, err
} }
return HtlcRetribution{ signDesc := input.SignDescriptor{
SignDesc: input.SignDescriptor{ KeyDesc: chanState.LocalChanCfg.
KeyDesc: chanState.LocalChanCfg. RevocationBasePoint,
RevocationBasePoint, DoubleTweak: commitmentSecret,
DoubleTweak: commitmentSecret, WitnessScript: scriptInfo.WitnessScript,
WitnessScript: scriptInfo.WitnessScript, Output: &wire.TxOut{
Output: &wire.TxOut{ PkScript: scriptInfo.PkScript,
PkScript: scriptInfo.PkScript, Value: int64(htlc.Amt),
Value: int64(htlc.Amt),
},
HashType: txscript.SigHashAll,
}, },
HashType: txscript.SigHashAll,
}
// For taproot HTLC outputs, we need to set the sign method to key
// spend, and also set the tap tweak root needed to derive the proper
// private key.
if chanState.ChanType.IsTaproot() {
signDesc.SignMethod = input.TaprootKeySpendSignMethod
tapscriptRoot := scriptInfo.ScriptTree.RootNode.TapHash()
signDesc.TapTweak = tapscriptRoot[:]
}
return HtlcRetribution{
SignDesc: signDesc,
OutPoint: wire.OutPoint{ OutPoint: wire.OutPoint{
Hash: commitHash, Hash: commitHash,
Index: uint32(htlc.OutputIndex), Index: uint32(htlc.OutputIndex),