mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 01:43:16 +01:00
multi: fix linter warnings
This commit is contained in:
parent
5c09d611ef
commit
7764f655e1
@ -741,7 +741,7 @@ func (l *channelLink) syncChanStates() error {
|
||||
// very same nonce that we sent above, as they should
|
||||
// take the latest verification nonce we send.
|
||||
if chanState.ChanType.IsTaproot() {
|
||||
fundingLockedMsg.NextLocalNonce = localChanSyncMsg.LocalNonce
|
||||
fundingLockedMsg.NextLocalNonce = localChanSyncMsg.LocalNonce //nolint:lll
|
||||
}
|
||||
|
||||
// For channels that negotiated the option-scid-alias
|
||||
|
@ -688,8 +688,6 @@ func (c *ChanCloser) ProcessCloseMsg(msg lnwire.Message) ([]lnwire.Message,
|
||||
"new co op close offer: %w", err)
|
||||
}
|
||||
|
||||
break
|
||||
|
||||
// Otherwise, if we are the initiator, and we just sent a
|
||||
// signature for a taproot channel, then we'll ensure that the
|
||||
// fee rate matches up exactly.
|
||||
@ -755,7 +753,7 @@ func (c *ChanCloser) ProcessCloseMsg(msg lnwire.Message) ([]lnwire.Message,
|
||||
matchingSig := c.priorFeeOffers[remoteProposedFee]
|
||||
if c.cfg.Channel.ChanType().IsTaproot() {
|
||||
muSession := c.cfg.MusigSession
|
||||
localSig, remoteSig, closeOpts, err = muSession.CombineClosingOpts( //nolint:ll
|
||||
localSig, remoteSig, closeOpts, err = muSession.CombineClosingOpts( //nolint:lll
|
||||
*matchingSig.PartialSig,
|
||||
*closeSignedMsg.PartialSig,
|
||||
)
|
||||
|
@ -211,7 +211,9 @@ func (m *mockChannel) FundingTxOut() *wire.TxOut {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *mockChannel) MultiSigKeys() (keychain.KeyDescriptor, keychain.KeyDescriptor) {
|
||||
func (m *mockChannel) MultiSigKeys() (
|
||||
keychain.KeyDescriptor, keychain.KeyDescriptor) {
|
||||
|
||||
return m.localKey, m.remoteKey
|
||||
}
|
||||
|
||||
@ -250,7 +252,9 @@ func newMockMusigSession() *mockMusigSession {
|
||||
return &mockMusigSession{}
|
||||
}
|
||||
|
||||
func (m *mockMusigSession) ProposalClosingOpts() ([]lnwallet.ChanCloseOpt, error) {
|
||||
func (m *mockMusigSession) ProposalClosingOpts() ([]lnwallet.ChanCloseOpt,
|
||||
error) {
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@ -267,7 +271,6 @@ func (m *mockMusigSession) ClosingNonce() (*musig2.Nonces, error) {
|
||||
}
|
||||
|
||||
func (m *mockMusigSession) InitRemoteNonce(nonce *musig2.Nonces) {
|
||||
return
|
||||
}
|
||||
|
||||
type mockCoopFeeEstimator struct {
|
||||
@ -565,7 +568,7 @@ func TestTaprootFastClose(t *testing.T) {
|
||||
ogOffer := bobOffer.FeeSatoshis
|
||||
bobOffer.FeeSatoshis /= 2
|
||||
|
||||
aliceMsgs, _, err = aliceCloser.ProcessCloseMsg(bobOffer)
|
||||
_, _, err = aliceCloser.ProcessCloseMsg(bobOffer)
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "was not accepted")
|
||||
|
||||
|
@ -27,7 +27,7 @@ type CoopFeeEstimator interface {
|
||||
// Channel abstracts away from the core channel state machine by exposing an
|
||||
// interface that requires only the methods we need to carry out the channel
|
||||
// closing process.
|
||||
type Channel interface {
|
||||
type Channel interface { //nolint:interfacebloat
|
||||
// ChannelPoint returns the channel point of the target channel.
|
||||
ChannelPoint() *wire.OutPoint
|
||||
|
||||
@ -70,10 +70,11 @@ type Channel interface {
|
||||
// CreateCloseProposal creates a new co-op close proposal in the form
|
||||
// of a valid signature, the chainhash of the final txid, and our final
|
||||
// balance in the created state.
|
||||
CreateCloseProposal(proposedFee btcutil.Amount, localDeliveryScript []byte,
|
||||
remoteDeliveryScript []byte,
|
||||
closeOpt ...lnwallet.ChanCloseOpt) (input.Signature, *chainhash.Hash,
|
||||
btcutil.Amount, error)
|
||||
CreateCloseProposal(proposedFee btcutil.Amount,
|
||||
localDeliveryScript []byte, remoteDeliveryScript []byte,
|
||||
closeOpt ...lnwallet.ChanCloseOpt,
|
||||
) (
|
||||
input.Signature, *chainhash.Hash, btcutil.Amount, error)
|
||||
|
||||
// CompleteCooperativeClose persistently "completes" the cooperative
|
||||
// close by producing a fully signed co-op close transaction.
|
||||
|
@ -1402,7 +1402,7 @@ func NewLightningChannel(signer input.Signer,
|
||||
state.RevocationProducer,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to derive shachain: %v", err)
|
||||
return nil, fmt.Errorf("unable to derive shachain: %w", err)
|
||||
}
|
||||
|
||||
lc := &LightningChannel{
|
||||
@ -1474,7 +1474,8 @@ func (lc *LightningChannel) createSignDesc() error {
|
||||
}
|
||||
} else {
|
||||
multiSigScript, err = input.GenMultiSigScript(
|
||||
localKey.SerializeCompressed(), remoteKey.SerializeCompressed(),
|
||||
localKey.SerializeCompressed(),
|
||||
remoteKey.SerializeCompressed(),
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -3365,7 +3366,7 @@ func genRemoteHtlcSigJobs(keyRing *CommitmentKeyRing,
|
||||
// If this is a taproot channel, then we'll need to set the
|
||||
// method type to ensure we generate a valid signature.
|
||||
if chanType.IsTaproot() {
|
||||
sigJob.SignDesc.SignMethod = input.TaprootScriptSpendSignMethod
|
||||
sigJob.SignDesc.SignMethod = input.TaprootScriptSpendSignMethod //nolint:lll
|
||||
}
|
||||
|
||||
sigBatch = append(sigBatch, sigJob)
|
||||
@ -3433,7 +3434,7 @@ func genRemoteHtlcSigJobs(keyRing *CommitmentKeyRing,
|
||||
// If this is a taproot channel, then we'll need to set the
|
||||
// method type to ensure we generate a valid signature.
|
||||
if chanType.IsTaproot() {
|
||||
sigJob.SignDesc.SignMethod = input.TaprootScriptSpendSignMethod
|
||||
sigJob.SignDesc.SignMethod = input.TaprootScriptSpendSignMethod //nolint:lll
|
||||
}
|
||||
|
||||
sigBatch = append(sigBatch, sigJob)
|
||||
@ -3879,7 +3880,6 @@ type NewCommitState struct {
|
||||
// HTLC's on the commitment transaction. Finally, the new set of pending HTLCs
|
||||
// for the remote party's commitment are also returned.
|
||||
func (lc *LightningChannel) SignNextCommitment() (*NewCommitState, error) {
|
||||
|
||||
lc.Lock()
|
||||
defer lc.Unlock()
|
||||
|
||||
@ -4572,8 +4572,9 @@ func genHtlcSigValidationJobs(localCommitmentView *commitment,
|
||||
htlcAmt := int64(htlc.Amount.ToSatoshis())
|
||||
|
||||
if chanType.IsTaproot() {
|
||||
// TODO(roasbeef): add abstraction in front
|
||||
prevFetcher := txscript.NewCannedPrevOutputFetcher(
|
||||
// TODO(roasbeef): add abstraction in
|
||||
// front
|
||||
prevFetcher := txscript.NewCannedPrevOutputFetcher( //nolint:lll
|
||||
htlc.ourPkScript, htlcAmt,
|
||||
)
|
||||
hashCache := txscript.NewTxSigHashes(
|
||||
@ -4582,9 +4583,11 @@ func genHtlcSigValidationJobs(localCommitmentView *commitment,
|
||||
tapLeaf := txscript.NewBaseTapLeaf(
|
||||
htlc.ourWitnessScript,
|
||||
)
|
||||
return txscript.CalcTapscriptSignaturehash(
|
||||
hashCache, sigHashType, successTx, 0,
|
||||
prevFetcher, tapLeaf,
|
||||
|
||||
return txscript.CalcTapscriptSignaturehash( //nolint:lll
|
||||
hashCache, sigHashType,
|
||||
successTx, 0, prevFetcher,
|
||||
tapLeaf,
|
||||
)
|
||||
}
|
||||
|
||||
@ -4643,8 +4646,9 @@ func genHtlcSigValidationJobs(localCommitmentView *commitment,
|
||||
timeoutTx, err := CreateHtlcTimeoutTx(
|
||||
chanType, isLocalInitiator, op,
|
||||
outputAmt, htlc.Timeout,
|
||||
uint32(localChanCfg.CsvDelay), leaseExpiry,
|
||||
keyRing.RevocationKey, keyRing.ToLocalKey,
|
||||
uint32(localChanCfg.CsvDelay),
|
||||
leaseExpiry, keyRing.RevocationKey,
|
||||
keyRing.ToLocalKey,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -4653,8 +4657,9 @@ func genHtlcSigValidationJobs(localCommitmentView *commitment,
|
||||
htlcAmt := int64(htlc.Amount.ToSatoshis())
|
||||
|
||||
if chanType.IsTaproot() {
|
||||
// TODO(roasbeef): add abstraction in front
|
||||
prevFetcher := txscript.NewCannedPrevOutputFetcher(
|
||||
// TODO(roasbeef): add abstraction in
|
||||
// front
|
||||
prevFetcher := txscript.NewCannedPrevOutputFetcher( //nolint:lll
|
||||
htlc.ourPkScript, htlcAmt,
|
||||
)
|
||||
hashCache := txscript.NewTxSigHashes(
|
||||
@ -4663,13 +4668,17 @@ func genHtlcSigValidationJobs(localCommitmentView *commitment,
|
||||
tapLeaf := txscript.NewBaseTapLeaf(
|
||||
htlc.ourWitnessScript,
|
||||
)
|
||||
return txscript.CalcTapscriptSignaturehash(
|
||||
hashCache, sigHashType, timeoutTx, 0,
|
||||
prevFetcher, tapLeaf,
|
||||
|
||||
return txscript.CalcTapscriptSignaturehash( //nolint:lll
|
||||
hashCache, sigHashType,
|
||||
timeoutTx, 0, prevFetcher,
|
||||
tapLeaf,
|
||||
)
|
||||
}
|
||||
|
||||
hashCache := input.NewTxSigHashesV0Only(timeoutTx)
|
||||
hashCache := input.NewTxSigHashesV0Only(
|
||||
timeoutTx,
|
||||
)
|
||||
sigHash, err := txscript.CalcWitnessSigHash(
|
||||
htlc.ourWitnessScript, hashCache,
|
||||
sigHashType, timeoutTx, 0,
|
||||
@ -4809,8 +4818,9 @@ var _ error = (*InvalidCommitSigError)(nil)
|
||||
// to our local commitment chain. Once we send a revocation for our prior
|
||||
// state, then this newly added commitment becomes our current accepted channel
|
||||
// state.
|
||||
//
|
||||
//nolint:funlen
|
||||
func (lc *LightningChannel) ReceiveNewCommitment(commitSigs *CommitSigs) error {
|
||||
|
||||
lc.Lock()
|
||||
defer lc.Unlock()
|
||||
|
||||
@ -4936,7 +4946,7 @@ func (lc *LightningChannel) ReceiveNewCommitment(commitSigs *CommitSigs) error {
|
||||
// exact signature and commitment we failed to
|
||||
// verify against in order to aide debugging.
|
||||
var txBytes bytes.Buffer
|
||||
localCommitTx.Serialize(&txBytes)
|
||||
_ = localCommitTx.Serialize(&txBytes)
|
||||
return &InvalidPartialCommitSigError{
|
||||
invalidPartialSigError: &sigErr,
|
||||
InvalidCommitSigError: InvalidCommitSigError{ //nolint:lll
|
||||
@ -4959,7 +4969,6 @@ func (lc *LightningChannel) ReceiveNewCommitment(commitSigs *CommitSigs) error {
|
||||
return err
|
||||
}
|
||||
lc.musigSessions.LocalSession = newLocalSession
|
||||
|
||||
} else {
|
||||
multiSigScript := lc.signDesc.WitnessScript
|
||||
prevFetcher := txscript.NewCannedPrevOutputFetcher(
|
||||
@ -4972,8 +4981,8 @@ func (lc *LightningChannel) ReceiveNewCommitment(commitSigs *CommitSigs) error {
|
||||
localCommitTx, 0, int64(lc.channelState.Capacity),
|
||||
)
|
||||
if err != nil {
|
||||
// TODO(roasbeef): fetchview has already mutated the HTLCs...
|
||||
// * need to either roll-back, or make pure
|
||||
// TODO(roasbeef): fetchview has already mutated the
|
||||
// HTLCs... * need to either roll-back, or make pure
|
||||
return err
|
||||
}
|
||||
|
||||
@ -4992,10 +5001,11 @@ func (lc *LightningChannel) ReceiveNewCommitment(commitSigs *CommitSigs) error {
|
||||
// commitment we failed to verify against in order to
|
||||
// aide debugging.
|
||||
var txBytes bytes.Buffer
|
||||
localCommitTx.Serialize(&txBytes)
|
||||
_ = localCommitTx.Serialize(&txBytes)
|
||||
|
||||
return &InvalidCommitSigError{
|
||||
commitHeight: nextHeight,
|
||||
commitSig: commitSigs.CommitSig.ToSignatureBytes(),
|
||||
commitSig: commitSigs.CommitSig.ToSignatureBytes(), //nolint:lll
|
||||
sigHash: sigHash,
|
||||
commitTx: txBytes.Bytes(),
|
||||
}
|
||||
@ -5047,7 +5057,7 @@ func (lc *LightningChannel) ReceiveNewCommitment(commitSigs *CommitSigs) error {
|
||||
|
||||
localCommitmentView.sig = sigBytes[:]
|
||||
} else {
|
||||
localCommitmentView.sig = commitSigs.CommitSig.ToSignatureBytes()
|
||||
localCommitmentView.sig = commitSigs.CommitSig.ToSignatureBytes() //nolint:lll
|
||||
}
|
||||
|
||||
lc.localCommitChain.addCommitment(localCommitmentView)
|
||||
@ -7284,7 +7294,6 @@ func (lc *LightningChannel) CompleteCooperativeClose(
|
||||
finalSchnorrSig.Serialize(),
|
||||
}
|
||||
} else {
|
||||
|
||||
// For regular channels, we'll need to , construct the witness
|
||||
// stack minding the order of the pubkeys+sigs on the stack.
|
||||
ourKey := lc.channelState.LocalChanCfg.MultiSigKey.PubKey.
|
||||
@ -7296,7 +7305,6 @@ func (lc *LightningChannel) CompleteCooperativeClose(
|
||||
remoteSig,
|
||||
)
|
||||
closeTx.TxIn[0].Witness = witness
|
||||
|
||||
}
|
||||
|
||||
// Validate the finalized transaction to ensure the output script is
|
||||
@ -8261,7 +8269,9 @@ func (lc *LightningChannel) FundingTxOut() *wire.TxOut {
|
||||
}
|
||||
|
||||
// MultiSigKeys returns the set of multi-sig keys for an channel.
|
||||
func (lc *LightningChannel) MultiSigKeys() (keychain.KeyDescriptor, keychain.KeyDescriptor) {
|
||||
func (lc *LightningChannel) MultiSigKeys() (keychain.KeyDescriptor,
|
||||
keychain.KeyDescriptor) {
|
||||
|
||||
lc.RLock()
|
||||
defer lc.RUnlock()
|
||||
|
||||
|
@ -61,7 +61,8 @@ func assertOutputExistsByValue(t *testing.T, commitTx *wire.MsgTx,
|
||||
// testAddSettleWorkflow tests a simple channel scenario where Alice and Bob
|
||||
// add, the settle an HTLC between themselves.
|
||||
func testAddSettleWorkflow(t *testing.T, tweakless bool,
|
||||
chanTypeModifier channeldb.ChannelType, storeFinalHtlcResolutions bool) {
|
||||
chanTypeModifier channeldb.ChannelType,
|
||||
storeFinalHtlcResolutions bool) {
|
||||
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
@ -196,23 +197,26 @@ func testAddSettleWorkflow(t *testing.T, tweakless bool,
|
||||
aliceChannel.currentHeight, 1)
|
||||
}
|
||||
|
||||
aliceChanState := aliceChannel.channelState
|
||||
bobChanState := bobChannel.channelState
|
||||
|
||||
// Both commitment transactions should have three outputs, and one of
|
||||
// them should be exactly the amount of the HTLC.
|
||||
numOutputs := 3
|
||||
if chanTypeModifier.HasAnchors() {
|
||||
// In this case we expect two extra outputs as both sides need an
|
||||
// anchor output.
|
||||
// In this case we expect two extra outputs as both sides need
|
||||
// an anchor output.
|
||||
numOutputs = 5
|
||||
}
|
||||
if len(aliceChannel.channelState.LocalCommitment.CommitTx.TxOut) != numOutputs {
|
||||
if len(aliceChanState.LocalCommitment.CommitTx.TxOut) != numOutputs {
|
||||
t.Fatalf("alice should have three commitment outputs, instead "+
|
||||
"have %v",
|
||||
len(aliceChannel.channelState.LocalCommitment.CommitTx.TxOut))
|
||||
len(aliceChanState.LocalCommitment.CommitTx.TxOut))
|
||||
}
|
||||
if len(bobChannel.channelState.LocalCommitment.CommitTx.TxOut) != numOutputs {
|
||||
if len(bobChanState.LocalCommitment.CommitTx.TxOut) != numOutputs {
|
||||
t.Fatalf("bob should have three commitment outputs, instead "+
|
||||
"have %v",
|
||||
len(bobChannel.channelState.LocalCommitment.CommitTx.TxOut))
|
||||
len(bobChanState.LocalCommitment.CommitTx.TxOut))
|
||||
}
|
||||
assertOutputExistsByValue(t,
|
||||
aliceChannel.channelState.LocalCommitment.CommitTx,
|
||||
@ -367,7 +371,7 @@ func TestSimpleAddSettleWorkflow(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
t.Run("anchors", func(t *testing.T) {
|
||||
t.Run("anchors", func(t *testing.T) { //nolint:paralleltest
|
||||
testAddSettleWorkflow(
|
||||
t, true,
|
||||
channeldb.AnchorOutputsBit|channeldb.ZeroHtlcTxFeeBit,
|
||||
@ -375,12 +379,13 @@ func TestSimpleAddSettleWorkflow(t *testing.T) {
|
||||
)
|
||||
})
|
||||
|
||||
t.Run("taproot", func(t *testing.T) {
|
||||
t.Run("taproot", func(t *testing.T) { //nolint:paralleltest
|
||||
testAddSettleWorkflow(
|
||||
t, true, channeldb.SimpleTaprootFeatureBit, false,
|
||||
)
|
||||
})
|
||||
|
||||
//nolint:paralleltest
|
||||
t.Run("storeFinalHtlcResolutions=true", func(t *testing.T) {
|
||||
testAddSettleWorkflow(t, false, 0, true)
|
||||
})
|
||||
@ -3105,8 +3110,10 @@ func TestChanSyncOweCommitment(t *testing.T) {
|
||||
spew.Sdump(aliceMsgsToSend[4]))
|
||||
}
|
||||
if commitSigMsg.CommitSig != aliceNewCommit.CommitSig {
|
||||
t.Fatalf("commit sig msgs don't match: expected %x got %x",
|
||||
aliceNewCommit.CommitSig, commitSigMsg.CommitSig)
|
||||
t.Fatalf("commit sig msgs don't match: expected "+
|
||||
"%x got %x",
|
||||
aliceNewCommit.CommitSig,
|
||||
commitSigMsg.CommitSig)
|
||||
}
|
||||
if len(commitSigMsg.HtlcSigs) != len(aliceNewCommit.HtlcSigs) {
|
||||
t.Fatalf("wrong number of htlc sigs: expected %v, got %v",
|
||||
@ -3539,10 +3546,10 @@ func testChanSyncOweRevocation(t *testing.T, chanType channeldb.ChannelType) {
|
||||
func TestChanSyncOweRevocation(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
t.Run("tweakless", func(t *testing.T) {
|
||||
t.Run("tweakless", func(t *testing.T) { //nolint:paralleltest
|
||||
testChanSyncOweRevocation(t, channeldb.SingleFunderTweaklessBit)
|
||||
})
|
||||
t.Run("taproot", func(t *testing.T) {
|
||||
t.Run("taproot", func(t *testing.T) { //nolint:paralleltest
|
||||
taprootBits := channeldb.SimpleTaprootFeatureBit |
|
||||
channeldb.AnchorOutputsBit |
|
||||
channeldb.ZeroHtlcTxFeeBit |
|
||||
@ -3631,7 +3638,9 @@ func testChanSyncOweRevocationAndCommit(t *testing.T,
|
||||
assertBobSendsRevokeAndCommit := func() {
|
||||
t.Helper()
|
||||
|
||||
bobMsgsToSend, _, _, err := bobChannel.ProcessChanSyncMsg(aliceSyncMsg)
|
||||
bobMsgsToSend, _, _, err := bobChannel.ProcessChanSyncMsg(
|
||||
aliceSyncMsg,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to process chan sync msg: %v", err)
|
||||
}
|
||||
@ -3641,26 +3650,31 @@ func testChanSyncOweRevocationAndCommit(t *testing.T,
|
||||
}
|
||||
bobReRevoke, ok := bobMsgsToSend[0].(*lnwire.RevokeAndAck)
|
||||
if !ok {
|
||||
t.Fatalf("expected bob to re-send revoke, instead sending: %v",
|
||||
spew.Sdump(bobMsgsToSend[0]))
|
||||
t.Fatalf("expected bob to re-send revoke, instead "+
|
||||
"sending: %v", spew.Sdump(bobMsgsToSend[0]))
|
||||
}
|
||||
if !reflect.DeepEqual(bobReRevoke, bobRevocation) {
|
||||
t.Fatalf("revocation msgs don't match: expected %v, got %v",
|
||||
bobRevocation, bobReRevoke)
|
||||
t.Fatalf("revocation msgs don't match: expected %v, "+
|
||||
"got %v", bobRevocation, bobReRevoke)
|
||||
}
|
||||
|
||||
bobReCommitSigMsg, ok := bobMsgsToSend[1].(*lnwire.CommitSig)
|
||||
if !ok {
|
||||
t.Fatalf("expected bob to re-send commit sig, instead sending: %v",
|
||||
t.Fatalf("expected bob to re-send commit sig, "+
|
||||
"instead sending: %v",
|
||||
spew.Sdump(bobMsgsToSend[1]))
|
||||
}
|
||||
if bobReCommitSigMsg.CommitSig != bobNewCommit.CommitSig {
|
||||
t.Fatalf("commit sig msgs don't match: expected %x got %x",
|
||||
t.Fatalf("commit sig msgs don't match: expected %x "+
|
||||
"got %x",
|
||||
bobNewCommit.CommitSigs.CommitSig,
|
||||
bobReCommitSigMsg.CommitSig)
|
||||
}
|
||||
if len(bobReCommitSigMsg.HtlcSigs) != len(bobNewCommit.HtlcSigs) {
|
||||
t.Fatalf("wrong number of htlc sigs: expected %v, got %v",
|
||||
if len(bobReCommitSigMsg.HtlcSigs) !=
|
||||
len(bobNewCommit.HtlcSigs) {
|
||||
|
||||
t.Fatalf("wrong number of htlc sigs: expected %v, "+
|
||||
"got %v",
|
||||
len(bobNewCommit.HtlcSigs),
|
||||
len(bobReCommitSigMsg.HtlcSigs))
|
||||
}
|
||||
@ -3715,12 +3729,12 @@ func testChanSyncOweRevocationAndCommit(t *testing.T,
|
||||
func TestChanSyncOweRevocationAndCommit(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
t.Run("tweakless", func(t *testing.T) {
|
||||
t.Run("tweakless", func(t *testing.T) { //nolint:paralleltest
|
||||
testChanSyncOweRevocationAndCommit(
|
||||
t, channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
})
|
||||
t.Run("taproot", func(t *testing.T) {
|
||||
t.Run("taproot", func(t *testing.T) { //nolint:paralleltest
|
||||
taprootBits := channeldb.SimpleTaprootFeatureBit |
|
||||
channeldb.AnchorOutputsBit |
|
||||
channeldb.ZeroHtlcTxFeeBit |
|
||||
@ -3944,12 +3958,12 @@ func testChanSyncOweRevocationAndCommitForceTransition(t *testing.T,
|
||||
func TestChanSyncOweRevocationAndCommitForceTransition(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
t.Run("tweakless", func(t *testing.T) {
|
||||
t.Run("tweakless", func(t *testing.T) { //nolint:paralleltest
|
||||
testChanSyncOweRevocationAndCommitForceTransition(
|
||||
t, channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
})
|
||||
t.Run("taproot", func(t *testing.T) {
|
||||
t.Run("taproot", func(t *testing.T) { //nolint:paralleltest
|
||||
taprootBits := channeldb.SimpleTaprootFeatureBit |
|
||||
channeldb.AnchorOutputsBit |
|
||||
channeldb.ZeroHtlcTxFeeBit |
|
||||
|
@ -534,10 +534,12 @@ func ForceStateTransition(chanA, chanB *LightningChannel) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, _, _, _, err := chanA.ReceiveRevocation(bobRevocation); err != nil {
|
||||
_, _, _, _, err = chanA.ReceiveRevocation(bobRevocation)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := chanA.ReceiveNewCommitment(bobNewCommit.CommitSigs); err != nil {
|
||||
err = chanA.ReceiveNewCommitment(bobNewCommit.CommitSigs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -545,7 +547,8 @@ func ForceStateTransition(chanA, chanB *LightningChannel) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if _, _, _, _, err := chanB.ReceiveRevocation(aliceRevocation); err != nil {
|
||||
_, _, _, _, err = chanB.ReceiveRevocation(aliceRevocation)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,6 @@ import (
|
||||
"github.com/btcsuite/btcd/btcutil"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/lightningnetwork/lnd/channeldb"
|
||||
"github.com/lightningnetwork/lnd/input"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -48,7 +47,7 @@ var (
|
||||
//
|
||||
// In order to spend the segwit v1 (taproot) HTLC output, the witness for the
|
||||
// passed transaction should be:
|
||||
// - <sender sig> <receiver sig> <preimage> <sucess_script> <control_block>
|
||||
// - <sender sig> <receiver sig> <preimage> <success_script> <control_block>
|
||||
func CreateHtlcSuccessTx(chanType channeldb.ChannelType, initiator bool,
|
||||
htlcOutput wire.OutPoint, htlcAmt btcutil.Amount, csvDelay,
|
||||
leaseExpiry uint32, revocationKey, delayKey *btcec.PublicKey) (
|
||||
@ -136,36 +135,19 @@ func CreateHtlcTimeoutTx(chanType channeldb.ChannelType, initiator bool,
|
||||
|
||||
var pkScript []byte
|
||||
|
||||
// Depending on if this is a taproot channel or not, we'll create a v0
|
||||
// vs v1 segwit script.
|
||||
if chanType.IsTaproot() {
|
||||
taprootOutputKey, err := input.TaprootSecondLevelHtlcScript(
|
||||
revocationKey, delayKey, csvDelay,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pkScript, err = input.PayToTaprootScript(taprootOutputKey)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
} else {
|
||||
// Next, we'll generate the script used as the output for all second
|
||||
// level HTLC which forces a covenant w.r.t what can be done with all
|
||||
// HTLC outputs.
|
||||
scriptInfo, err := SecondLevelHtlcScript(
|
||||
chanType, initiator, revocationKey, delayKey, csvDelay,
|
||||
leaseExpiry,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pkScript = scriptInfo.PkScript
|
||||
// Next, we'll generate the script used as the output for all second
|
||||
// level HTLC which forces a covenant w.r.t what can be done with all
|
||||
// HTLC outputs.
|
||||
scriptInfo, err := SecondLevelHtlcScript(
|
||||
chanType, initiator, revocationKey, delayKey, csvDelay,
|
||||
leaseExpiry,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pkScript = scriptInfo.PkScript
|
||||
|
||||
// Finally, the output is simply the amount of the HTLC (minus the
|
||||
// required fees), paying to the regular second level HTLC script.
|
||||
timeoutTx.AddTxOut(&wire.TxOut{
|
||||
|
@ -300,10 +300,18 @@ func testVectors(t *testing.T, chanType channeldb.ChannelType, test testCase) {
|
||||
remoteNewCommit, err := remoteChannel.SignNextCommitment()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, test.RemoteSigHex, hex.EncodeToString(remoteNewCommit.CommitSig.ToSignatureBytes()))
|
||||
require.Equal(
|
||||
t, test.RemoteSigHex,
|
||||
hex.EncodeToString(
|
||||
remoteNewCommit.CommitSig.ToSignatureBytes(),
|
||||
),
|
||||
)
|
||||
|
||||
for i, sig := range remoteNewCommit.HtlcSigs {
|
||||
require.Equal(t, test.HtlcDescs[i].RemoteSigHex, hex.EncodeToString(sig.ToSignatureBytes()))
|
||||
require.Equal(
|
||||
t, test.HtlcDescs[i].RemoteSigHex,
|
||||
hex.EncodeToString(sig.ToSignatureBytes()),
|
||||
)
|
||||
}
|
||||
|
||||
err = localChannel.ReceiveNewCommitment(remoteNewCommit.CommitSigs)
|
||||
@ -321,7 +329,10 @@ func testVectors(t *testing.T, chanType channeldb.ChannelType, test testCase) {
|
||||
var txBytes bytes.Buffer
|
||||
require.NoError(t, forceCloseSum.CloseTx.Serialize(&txBytes))
|
||||
|
||||
require.Equal(t, test.ExpectedCommitmentTxHex, hex.EncodeToString(txBytes.Bytes()))
|
||||
require.Equal(
|
||||
t, test.ExpectedCommitmentTxHex,
|
||||
hex.EncodeToString(txBytes.Bytes()),
|
||||
)
|
||||
|
||||
// Obtain the second level transactions that the local node's channel
|
||||
// state machine has produced. Store them in a map indexed by commit tx
|
||||
|
@ -2388,7 +2388,6 @@ func (l *LightningWallet) ValidateChannel(channelState *channeldb.OpenChannel,
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
} else {
|
||||
witnessScript, err := input.GenMultiSigScript(
|
||||
localKey.SerializeCompressed(),
|
||||
|
@ -31,7 +31,9 @@ func NewMusigChanCloser(channel *lnwallet.LightningChannel) *MusigChanCloser {
|
||||
|
||||
// ProposalClosingOpts returns the options that should be used when
|
||||
// generating a new co-op close signature.
|
||||
func (m *MusigChanCloser) ProposalClosingOpts() ([]lnwallet.ChanCloseOpt, error) {
|
||||
func (m *MusigChanCloser) ProposalClosingOpts() (
|
||||
[]lnwallet.ChanCloseOpt, error) {
|
||||
|
||||
switch {
|
||||
case m.localNonce == nil:
|
||||
return nil, fmt.Errorf("local nonce not generated")
|
||||
|
Loading…
Reference in New Issue
Block a user