lnwallet: only set funding TX witness if we publish
During the final part of the channel funding negotiation we only need to assemble the full funding TX with the witness if we are going to publish the transaction ourselves. If the final funding TX is published externally we don't need this information. This will make it possible to skip the verify process for fully externally funded PSBT channels.
This commit is contained in:
2 files changed
+38
-21
No files matched your search
+22
-17
@@ -1454,9 +1454,11 @@ func (l *LightningWallet) handleChanPointReady(req *continueContributionMsg) {
|
||||
// is needed to construct and publish the full funding transaction.
|
||||
intent := pendingReservation.fundingIntent
|
||||
if psbtIntent, ok := intent.(*chanfunding.PsbtIntent); ok {
|
||||
// With our keys bound, we can now construct+sign the final
|
||||
// funding transaction and also obtain the chanPoint that
|
||||
// creates the channel.
|
||||
// With our keys bound, we can now construct and possibly sign
|
||||
// the final funding transaction and also obtain the chanPoint
|
||||
// that creates the channel. We _have_ to call CompileFundingTx
|
||||
// even if we don't publish ourselves as that sets the actual
|
||||
// funding outpoint in stone for this channel.
|
||||
fundingTx, err := psbtIntent.CompileFundingTx()
|
||||
if err != nil {
|
||||
req.err <- fmt.Errorf("unable to construct funding "+
|
||||
@@ -1470,23 +1472,26 @@ func (l *LightningWallet) handleChanPointReady(req *continueContributionMsg) {
|
||||
return
|
||||
}
|
||||
|
||||
// Finally, we'll populate the relevant information in our
|
||||
// pendingReservation so the rest of the funding flow can
|
||||
// continue as normal.
|
||||
pendingReservation.fundingTx = fundingTx
|
||||
pendingReservation.partialState.FundingOutpoint = *chanPointPtr
|
||||
chanPoint = *chanPointPtr
|
||||
pendingReservation.ourFundingInputScripts = make(
|
||||
[]*input.Script, 0, len(ourContribution.Inputs),
|
||||
)
|
||||
for _, txIn := range fundingTx.TxIn {
|
||||
pendingReservation.ourFundingInputScripts = append(
|
||||
pendingReservation.ourFundingInputScripts,
|
||||
&input.Script{
|
||||
Witness: txIn.Witness,
|
||||
SigScript: txIn.SignatureScript,
|
||||
},
|
||||
|
||||
// Finally, we'll populate the relevant information in our
|
||||
// pendingReservation so the rest of the funding flow can
|
||||
// continue as normal in case we are going to publish ourselves.
|
||||
if psbtIntent.ShouldPublishFundingTX() {
|
||||
pendingReservation.fundingTx = fundingTx
|
||||
pendingReservation.ourFundingInputScripts = make(
|
||||
[]*input.Script, 0, len(ourContribution.Inputs),
|
||||
)
|
||||
for _, txIn := range fundingTx.TxIn {
|
||||
pendingReservation.ourFundingInputScripts = append(
|
||||
pendingReservation.ourFundingInputScripts,
|
||||
&input.Script{
|
||||
Witness: txIn.Witness,
|
||||
SigScript: txIn.SignatureScript,
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user