From 0809880426629ce2796676a2ef862803b9d1bc2f Mon Sep 17 00:00:00 2001 From: "Johan T. Halseth" Date: Tue, 15 May 2018 15:44:33 +0200 Subject: [PATCH] chancloser: don't log potential closes to the chainwatcher This commit stops the chan closer from sending the potential coop close transactions to the chainwatcher, as this is no longer needed. The chainwatcher recently was modified to watch for any potential close, and will because of this handle the close regardless of which one appears in chain. When the chancloser broadcast the final close transaction, we mark it as CommitmentBroadcasted in the database. --- chancloser.go | 51 +++++++-------------------------------------------- 1 file changed, 7 insertions(+), 44 deletions(-) diff --git a/chancloser.go b/chancloser.go index a9df9fa9..257b6db1 100644 --- a/chancloser.go +++ b/chancloser.go @@ -4,8 +4,6 @@ import ( "fmt" "github.com/davecgh/go-spew/spew" - "github.com/lightningnetwork/lnd/channeldb" - "github.com/lightningnetwork/lnd/contractcourt" "github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwire" @@ -135,8 +133,6 @@ type channelCloser struct { // TODO(roasbeef): abstract away closeReq *htlcswitch.ChanClose - closeCtx *contractcourt.CooperativeCloseCtx - // localDeliveryScript is the script that we'll send our settled // channel funds to. localDeliveryScript []byte @@ -151,8 +147,7 @@ type channelCloser struct { // only be populated iff, we're the initiator of this closing request. func newChannelCloser(cfg chanCloseCfg, deliveryScript []byte, idealFeePerKw lnwallet.SatPerKWeight, negotiationHeight uint32, - closeReq *htlcswitch.ChanClose, - closeCtx *contractcourt.CooperativeCloseCtx) *channelCloser { + closeReq *htlcswitch.ChanClose) *channelCloser { // Given the target fee-per-kw, we'll compute what our ideal _total_ // fee will be starting at for this fee negotiation. @@ -186,7 +181,6 @@ func newChannelCloser(cfg chanCloseCfg, deliveryScript []byte, cfg: cfg, negotiationHeight: negotiationHeight, idealFeeSat: idealFeeSat, - closeCtx: closeCtx, localDeliveryScript: deliveryScript, priorFeeOffers: make(map[btcutil.Amount]*lnwire.ClosingSigned), } @@ -420,7 +414,7 @@ func (c *channelCloser) ProcessCloseMsg(msg lnwire.Message) ([]lnwire.Message, b remoteSigBytes := closeSignedMsg.Signature.ToSignatureBytes() remoteSig := append(remoteSigBytes, byte(txscript.SigHashAll)) - closeTx, finalLocalBalance, err := c.cfg.channel.CompleteCooperativeClose( + closeTx, _, err := c.cfg.channel.CompleteCooperativeClose( localSig, remoteSig, c.localDeliveryScript, c.remoteDeliveryScript, remoteProposedFee, ) @@ -438,33 +432,16 @@ func (c *channelCloser) ProcessCloseMsg(msg lnwire.Message) ([]lnwire.Message, b if err := c.cfg.broadcastTx(closeTx); err != nil { return nil, false, err } - - // Clear out the current channel state, marking the channel as - // being closed within the database. - closingTxid := closeTx.TxHash() - chanInfo := c.cfg.channel.StateSnapshot() - c.closeCtx.Finalize(&channeldb.ChannelCloseSummary{ - ChanPoint: c.chanPoint, - ChainHash: chanInfo.ChainHash, - ClosingTXID: closingTxid, - CloseHeight: c.negotiationHeight, - RemotePub: &chanInfo.RemoteIdentity, - Capacity: chanInfo.Capacity, - SettledBalance: finalLocalBalance, - CloseType: channeldb.CooperativeClose, - ShortChanID: c.cfg.channel.ShortChanID(), - IsPending: true, - }) - - // TODO(roasbeef): don't need, ChainWatcher will handle - - c.state = closeFinished + if c.cfg.channel.MarkCommitmentBroadcasted(); err != nil { + return nil, false, err + } // Finally, we'll transition to the closeFinished state, and // also return the final close signed message we sent. // Additionally, we return true for the second argument to // indicate we're finished with the channel closing // negotiation. + c.state = closeFinished matchingOffer := c.priorFeeOffers[remoteProposedFee] return []lnwire.Message{matchingOffer}, true, nil @@ -493,7 +470,7 @@ func (c *channelCloser) ProcessCloseMsg(msg lnwire.Message) ([]lnwire.Message, b // current compromise fee. func (c *channelCloser) proposeCloseSigned(fee btcutil.Amount) (*lnwire.ClosingSigned, error) { - rawSig, txid, localAmt, err := c.cfg.channel.CreateCloseProposal( + rawSig, _, _, err := c.cfg.channel.CreateCloseProposal( fee, c.localDeliveryScript, c.remoteDeliveryScript, ) if err != nil { @@ -521,20 +498,6 @@ func (c *channelCloser) proposeCloseSigned(fee btcutil.Amount) (*lnwire.ClosingS // accepts our offer. This way, we don't have to re-sign. c.priorFeeOffers[fee] = closeSignedMsg - chanInfo := c.cfg.channel.StateSnapshot() - c.closeCtx.LogPotentialClose(&channeldb.ChannelCloseSummary{ - ChanPoint: c.chanPoint, - ChainHash: chanInfo.ChainHash, - ClosingTXID: *txid, - CloseHeight: c.negotiationHeight, - RemotePub: &chanInfo.RemoteIdentity, - Capacity: chanInfo.Capacity, - SettledBalance: localAmt, - CloseType: channeldb.CooperativeClose, - ShortChanID: c.cfg.channel.ShortChanID(), - IsPending: true, - }) - return closeSignedMsg, nil }