peer+rpcserver: use new conf scaling for notifications

This commit is contained in:
Olaoluwa Osuntokun committed 2026-01-15 16:22:26 -08:00
1 parent 4f43717d4f
commit 931b54e848
2 files changed
+26 -15

No files matched your search

+18 -14
View File
@@ -4465,14 +4465,19 @@ func (p *Brontide) finalizeChanClosure(chanCloser *chancloser.ChanCloser) {
localOut := chanCloser.LocalCloseOutput() localOut := chanCloser.LocalCloseOutput()
remoteOut := chanCloser.RemoteCloseOutput() remoteOut := chanCloser.RemoteCloseOutput()
auxOut := chanCloser.AuxOutputs() auxOut := chanCloser.AuxOutputs()
go WaitForChanToClose( // Determine the number of confirmations to wait before
chanCloser.NegotiationHeight(), notifier, errChan, // signaling a successful cooperative close, scaled by
&chanPoint, &closingTxid, closingTx.TxOut[0].PkScript, func() { // channel capacity (see CloseConfsForCapacity).
// Respond to the local subsystem which requested the numConfs := lnwallet.CloseConfsForCapacity(chanCloser.Channel().Capacity)
// channel closure.
if closeReq != nil { go WaitForChanToClose(
closeReq.Updates <- &ChannelCloseUpdate{ chanCloser.NegotiationHeight(), notifier, errChan,
ClosingTxid: closingTxid[:], &chanPoint, &closingTxid, closingTx.TxOut[0].PkScript, numConfs, func() {
// Respond to the local subsystem which requested the
// channel closure.
if closeReq != nil {
closeReq.Updates <- &ChannelCloseUpdate{
ClosingTxid: closingTxid[:],
Success: true, Success: true,
LocalCloseOutput: localOut, LocalCloseOutput: localOut,
RemoteCloseOutput: remoteOut, RemoteCloseOutput: remoteOut,
@@ -4489,16 +4494,15 @@ func (p *Brontide) finalizeChanClosure(chanCloser *chancloser.ChanCloser) {
// finally the callback will be executed. If any error is encountered within // finally the callback will be executed. If any error is encountered within
// the function, then it will be sent over the errChan. // the function, then it will be sent over the errChan.
func WaitForChanToClose(bestHeight uint32, notifier chainntnfs.ChainNotifier, func WaitForChanToClose(bestHeight uint32, notifier chainntnfs.ChainNotifier,
errChan chan error, chanPoint *wire.OutPoint, errChan chan error, chanPoint *wire.OutPoint,
closingTxID *chainhash.Hash, closeScript []byte, cb func()) { closingTxID *chainhash.Hash, closeScript []byte, numConfs uint32, cb func()) {
peerLog.Infof("Waiting for confirmation of close of ChannelPoint(%v) "+ peerLog.Infof("Waiting for confirmation of close of ChannelPoint(%v) "+
"with txid: %v", chanPoint, closingTxID) "with txid: %v", chanPoint, closingTxID)
// TODO(roasbeef): add param for num needed confs confNtfn, err := notifier.RegisterConfirmationsNtfn(
confNtfn, err := notifier.RegisterConfirmationsNtfn( closingTxID, closeScript, numConfs, bestHeight,
closingTxID, closeScript, 1, bestHeight, )
)
if err != nil { if err != nil {
if errChan != nil { if errChan != nil {
errChan <- err errChan <- err
+8 -1
View File
@@ -2845,9 +2845,16 @@ func (r *rpcServer) CloseChannel(in *lnrpc.CloseChannelRequest,
errChan = make(chan error, 1) errChan = make(chan error, 1)
notifier := r.server.cc.ChainNotifier notifier := r.server.cc.ChainNotifier
// For force closes, we notify the RPC client immediately after
// 1 confirmation. The actual security-critical confirmation
// waiting is handled by the channel arbitrator.
numConfs := uint32(1)
go peer.WaitForChanToClose( go peer.WaitForChanToClose(
uint32(bestHeight), notifier, errChan, chanPoint, uint32(bestHeight), notifier, errChan, chanPoint,
&closingTxid, closingTx.TxOut[0].PkScript, func() { &closingTxid, closingTx.TxOut[0].PkScript, numConfs,
func() {
// Respond to the local subsystem which // Respond to the local subsystem which
// requested the channel closure. // requested the channel closure.
updateChan <- &peer.ChannelCloseUpdate{ updateChan <- &peer.ChannelCloseUpdate{