lnwallet/chanvalidate: update ValidateChannel to recognize taproot chans
This commit is contained in:
2 files changed
+39
-21
No files matched your search
@@ -186,10 +186,14 @@ func Validate(ctx *Context) (*wire.OutPoint, error) {
|
|||||||
// If we reach this point, then all other checks have succeeded, so
|
// If we reach this point, then all other checks have succeeded, so
|
||||||
// we'll now attempt a full Script VM execution to ensure that we're
|
// we'll now attempt a full Script VM execution to ensure that we're
|
||||||
// able to close the channel using this initial state.
|
// able to close the channel using this initial state.
|
||||||
|
prevFetcher := txscript.NewCannedPrevOutputFetcher(
|
||||||
|
ctx.MultiSigPkScript, fundingValue,
|
||||||
|
)
|
||||||
|
commitTx := ctx.CommitCtx.FullySignedCommitTx
|
||||||
|
hashCache := txscript.NewTxSigHashes(commitTx, prevFetcher)
|
||||||
vm, err := txscript.NewEngine(
|
vm, err := txscript.NewEngine(
|
||||||
ctx.MultiSigPkScript, ctx.CommitCtx.FullySignedCommitTx,
|
ctx.MultiSigPkScript, commitTx, 0, txscript.StandardVerifyFlags,
|
||||||
0, txscript.StandardVerifyFlags, nil, nil, fundingValue,
|
nil, hashCache, fundingValue, prevFetcher,
|
||||||
txscript.NewCannedPrevOutputFetcher(ctx.MultiSigPkScript, 0),
|
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
+32
-18
@@ -2433,26 +2433,43 @@ func (l *LightningWallet) ValidateChannel(channelState *channeldb.OpenChannel,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
signedCommitTx, err := channel.getSignedCommitTx()
|
|
||||||
if err != nil {
|
localKey := channelState.LocalChanCfg.MultiSigKey.PubKey
|
||||||
return err
|
remoteKey := channelState.RemoteChanCfg.MultiSigKey.PubKey
|
||||||
}
|
|
||||||
|
|
||||||
// We'll also need the multi-sig witness script itself so the
|
// We'll also need the multi-sig witness script itself so the
|
||||||
// chanvalidate package can check it for correctness against the
|
// chanvalidate package can check it for correctness against the
|
||||||
// funding transaction, and also commitment validity.
|
// funding transaction, and also commitment validity.
|
||||||
localKey := channelState.LocalChanCfg.MultiSigKey.PubKey
|
var fundingScript []byte
|
||||||
remoteKey := channelState.RemoteChanCfg.MultiSigKey.PubKey
|
if channelState.ChanType.IsTaproot() {
|
||||||
witnessScript, err := input.GenMultiSigScript(
|
fundingScript, _, err = input.GenTaprootFundingScript(
|
||||||
localKey.SerializeCompressed(),
|
localKey, remoteKey, int64(channel.Capacity),
|
||||||
remoteKey.SerializeCompressed(),
|
)
|
||||||
)
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
witnessScript, err := input.GenMultiSigScript(
|
||||||
|
localKey.SerializeCompressed(),
|
||||||
|
remoteKey.SerializeCompressed(),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fundingScript, err = input.WitnessScriptHash(witnessScript)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
signedCommitTx, err := channel.getSignedCommitTx()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
pkScript, err := input.WitnessScriptHash(witnessScript)
|
commitCtx := &chanvalidate.CommitmentContext{
|
||||||
if err != nil {
|
Value: channel.Capacity,
|
||||||
return err
|
FullySignedCommitTx: signedCommitTx,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finally, we'll pass in all the necessary context needed to fully
|
// Finally, we'll pass in all the necessary context needed to fully
|
||||||
@@ -2462,12 +2479,9 @@ func (l *LightningWallet) ValidateChannel(channelState *channeldb.OpenChannel,
|
|||||||
Locator: &chanvalidate.OutPointChanLocator{
|
Locator: &chanvalidate.OutPointChanLocator{
|
||||||
ChanPoint: channelState.FundingOutpoint,
|
ChanPoint: channelState.FundingOutpoint,
|
||||||
},
|
},
|
||||||
MultiSigPkScript: pkScript,
|
MultiSigPkScript: fundingScript,
|
||||||
FundingTx: fundingTx,
|
FundingTx: fundingTx,
|
||||||
CommitCtx: &chanvalidate.CommitmentContext{
|
CommitCtx: commitCtx,
|
||||||
Value: channel.Capacity,
|
|
||||||
FullySignedCommitTx: signedCommitTx,
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in new issue
Block a user