mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-04 09:48:19 +01:00
lnwallet: uniformly use sighash default everywhere for taproot chans
We use a helper function to ensure that anytime we're about to make a normal sighash, we consult the channel type to check if we should use the default value or sighash all explicitly.
This commit is contained in:
parent
dd05dd55d4
commit
ff055ce0a4
2 changed files with 23 additions and 22 deletions
|
@ -2530,7 +2530,7 @@ func NewBreachRetribution(chanState *channeldb.OpenChannel, stateNum uint64,
|
|||
PkScript: ourScript.PkScript(),
|
||||
Value: ourAmt,
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanState.ChanType),
|
||||
}
|
||||
|
||||
// For taproot channels, we'll make sure to set the script path
|
||||
|
@ -2577,7 +2577,7 @@ func NewBreachRetribution(chanState *channeldb.OpenChannel, stateNum uint64,
|
|||
PkScript: theirScript.PkScript(),
|
||||
Value: theirAmt,
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanState.ChanType),
|
||||
}
|
||||
|
||||
// For taproot channels, the remote output (the revoked output)
|
||||
|
@ -2659,7 +2659,7 @@ func createHtlcRetribution(chanState *channeldb.OpenChannel,
|
|||
PkScript: scriptInfo.PkScript(),
|
||||
Value: int64(htlc.Amt),
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanState.ChanType),
|
||||
}
|
||||
|
||||
// For taproot HTLC outputs, we need to set the sign method to key
|
||||
|
@ -6477,7 +6477,7 @@ func NewUnilateralCloseSummary(chanState *channeldb.OpenChannel, signer input.Si
|
|||
Value: localBalance,
|
||||
PkScript: selfScript.PkScript(),
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanState.ChanType),
|
||||
},
|
||||
MaturityDelay: maturityDelay,
|
||||
}
|
||||
|
@ -6501,8 +6501,6 @@ func NewUnilateralCloseSummary(chanState *channeldb.OpenChannel, signer input.Si
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// TODO(roasbeef): put ctrl block in resolution?
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6712,7 +6710,7 @@ func newOutgoingHtlcResolution(signer input.Signer,
|
|||
PkScript: htlcPkScript,
|
||||
Value: int64(htlc.Amt.ToSatoshis()),
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanType),
|
||||
}
|
||||
|
||||
scriptTree, ok := htlcScriptInfo.(input.TapscriptDescriptor)
|
||||
|
@ -6772,7 +6770,7 @@ func newOutgoingHtlcResolution(signer input.Signer,
|
|||
SingleTweak: keyRing.LocalHtlcKeyTweak,
|
||||
WitnessScript: htlcWitnessScript,
|
||||
Output: txOut,
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanType),
|
||||
PrevOutputFetcher: prevFetcher,
|
||||
SigHashes: hashCache,
|
||||
InputIndex: 0,
|
||||
|
@ -6788,9 +6786,7 @@ func newOutgoingHtlcResolution(signer input.Signer,
|
|||
sigHashType := HtlcSigHashType(chanType)
|
||||
var timeoutWitness wire.TxWitness
|
||||
if scriptTree, ok := htlcScriptInfo.(input.TapscriptDescriptor); ok {
|
||||
// TODO(roasbeef): make sure default elsewhere
|
||||
timeoutSignDesc.SignMethod = input.TaprootScriptSpendSignMethod
|
||||
timeoutSignDesc.HashType = txscript.SigHashDefault
|
||||
|
||||
timeoutWitness, err = input.SenderHTLCScriptTaprootTimeout(
|
||||
htlcSig, sigHashType, signer, &timeoutSignDesc,
|
||||
|
@ -6896,7 +6892,7 @@ func newOutgoingHtlcResolution(signer input.Signer,
|
|||
PkScript: htlcSweepScript.PkScript(),
|
||||
Value: int64(secondLevelOutputAmt),
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanType),
|
||||
SignMethod: signMethod,
|
||||
ControlBlock: ctrlBlock,
|
||||
},
|
||||
|
@ -6957,7 +6953,7 @@ func newIncomingHtlcResolution(signer input.Signer,
|
|||
PkScript: htlcPkScript,
|
||||
Value: int64(htlc.Amt.ToSatoshis()),
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanType),
|
||||
}
|
||||
|
||||
//nolint:lll
|
||||
|
@ -7009,7 +7005,7 @@ func newIncomingHtlcResolution(signer input.Signer,
|
|||
SingleTweak: keyRing.LocalHtlcKeyTweak,
|
||||
WitnessScript: htlcWitnessScript,
|
||||
Output: txOut,
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanType),
|
||||
PrevOutputFetcher: prevFetcher,
|
||||
SigHashes: hashCache,
|
||||
InputIndex: 0,
|
||||
|
@ -7027,7 +7023,6 @@ func newIncomingHtlcResolution(signer input.Signer,
|
|||
var successWitness wire.TxWitness
|
||||
sigHashType := HtlcSigHashType(chanType)
|
||||
if scriptTree, ok := scriptInfo.(input.TapscriptDescriptor); ok {
|
||||
successSignDesc.HashType = txscript.SigHashDefault
|
||||
successSignDesc.SignMethod = input.TaprootScriptSpendSignMethod
|
||||
|
||||
successWitness, err = input.ReceiverHTLCScriptTaprootRedeem(
|
||||
|
@ -7101,8 +7096,6 @@ func newIncomingHtlcResolution(signer input.Signer,
|
|||
return nil, err
|
||||
}
|
||||
|
||||
// TODO(roasbeef): conslidate logic to reduce vertical noise
|
||||
|
||||
htlcSweepScript = secondLevelScriptTree
|
||||
}
|
||||
|
||||
|
@ -7134,7 +7127,7 @@ func newIncomingHtlcResolution(signer input.Signer,
|
|||
PkScript: htlcSweepScript.PkScript(),
|
||||
Value: int64(secondLevelOutputAmt),
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanType),
|
||||
SignMethod: signMethod,
|
||||
ControlBlock: ctrlBlock,
|
||||
},
|
||||
|
@ -7422,15 +7415,13 @@ func NewLocalForceCloseSummary(chanState *channeldb.OpenChannel,
|
|||
PkScript: delayOut.PkScript,
|
||||
Value: localBalance,
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanState.ChanType),
|
||||
},
|
||||
MaturityDelay: csvTimeout,
|
||||
}
|
||||
|
||||
// For taproot channels, we'll need to set some additional
|
||||
// fields to ensure the output can be swept.
|
||||
//
|
||||
// TODO(roasbef): abstract into new func
|
||||
scriptTree, ok := toLocalScript.(input.TapscriptDescriptor)
|
||||
if ok {
|
||||
commitResolution.SelfOutputSignDesc.SignMethod =
|
||||
|
@ -7874,14 +7865,13 @@ func NewAnchorResolution(chanState *channeldb.OpenChannel,
|
|||
PkScript: localAnchor.PkScript(),
|
||||
Value: int64(anchorSize),
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
HashType: sweepSigHash(chanState.ChanType),
|
||||
}
|
||||
|
||||
// For taproot outputs, we'll need to ensure that the proper sign
|
||||
// method is used, and the tweak as well.
|
||||
if scriptTree, ok := localAnchor.(input.TapscriptDescriptor); ok {
|
||||
signDesc.SignMethod = input.TaprootKeySpendSignMethod
|
||||
signDesc.HashType = txscript.SigHashDefault
|
||||
|
||||
//nolint:lll
|
||||
signDesc.PrevOutputFetcher = txscript.NewCannedPrevOutputFetcher(
|
||||
|
|
|
@ -400,6 +400,17 @@ func HtlcSecondLevelInputSequence(chanType channeldb.ChannelType) uint32 {
|
|||
return 0
|
||||
}
|
||||
|
||||
// sweepSigHash returns the sign descriptor to use when signing a sweep
|
||||
// transaction. For taproot channels, we'll use this to always sweep with
|
||||
// sighash default.
|
||||
func sweepSigHash(chanType channeldb.ChannelType) txscript.SigHashType {
|
||||
if chanType.IsTaproot() {
|
||||
return txscript.SigHashDefault
|
||||
}
|
||||
|
||||
return txscript.SigHashAll
|
||||
}
|
||||
|
||||
// SecondLevelHtlcScript derives the appropriate second level HTLC script based
|
||||
// on the channel's commitment type. It is the uniform script that's used as the
|
||||
// output for the second-level HTLC transactions. The second level transaction
|
||||
|
|
Loading…
Add table
Reference in a new issue