Merge pull request #7819 from ziggie1984/abandonchannel-rebroadcaster

Cancel the Rebroadcasting of a Transaction when Abandoning a Channel
This commit is contained in:
Oliver Gugger 2023-08-10 10:43:24 +02:00 committed by GitHub
commit d930dcec40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 1 deletions

View File

@ -141,6 +141,9 @@ It is possible to distinguish between defaults and examples now.
A check script has been developed and integrated into the building process to A check script has been developed and integrated into the building process to
compare the default values between lnd and sample-lnd.conf. compare the default values between lnd and sample-lnd.conf.
* [Cancel rebroadcasting of a transaction when abandoning
a channel](https://github.com/lightningnetwork/lnd/pull/7819)
## Code Health ## Code Health
* Updated [our fork for serializing protobuf as JSON to be based on the * Updated [our fork for serializing protobuf as JSON to be based on the

View File

@ -2315,6 +2315,15 @@ func (l *LightningWallet) ValidateChannel(channelState *channeldb.OpenChannel,
return nil return nil
} }
// CancelRebroadcast cancels the rebroadcast of the given transaction.
func (l *LightningWallet) CancelRebroadcast(txid chainhash.Hash) {
// For neutrino, we don't config the rebroadcaster for the wallet as it
// manages the rebroadcasting logic in neutrino itself.
if l.Cfg.Rebroadcaster != nil {
l.Cfg.Rebroadcaster.MarkAsConfirmed(txid)
}
}
// CoinSource is a wrapper around the wallet that implements the // CoinSource is a wrapper around the wallet that implements the
// chanfunding.CoinSource interface. // chanfunding.CoinSource interface.
type CoinSource struct { type CoinSource struct {

View File

@ -2740,12 +2740,21 @@ func abandonChanFromGraph(chanGraph *channeldb.ChannelGraph,
func (r *rpcServer) abandonChan(chanPoint *wire.OutPoint, func (r *rpcServer) abandonChan(chanPoint *wire.OutPoint,
bestHeight uint32) error { bestHeight uint32) error {
// Before we remove the channel we cancel the rebroadcasting of the
// transaction. If this transaction does not exist in the rebroadcast
// queue anymore it is a noop.
txid, err := chainhash.NewHash(chanPoint.Hash[:])
if err != nil {
return err
}
r.server.cc.Wallet.CancelRebroadcast(*txid)
// Abandoning a channel is a three-step process: remove from the open // Abandoning a channel is a three-step process: remove from the open
// channel state, remove from the graph, remove from the contract // channel state, remove from the graph, remove from the contract
// court. Between any step it's possible that the users restarts the // court. Between any step it's possible that the users restarts the
// process all over again. As a result, each of the steps below are // process all over again. As a result, each of the steps below are
// intended to be idempotent. // intended to be idempotent.
err := r.server.chanStateDB.AbandonChannel(chanPoint, bestHeight) err = r.server.chanStateDB.AbandonChannel(chanPoint, bestHeight)
if err != nil { if err != nil {
return err return err
} }