From 1c65c3d072683da78be15beb257db0ee91bc5b8c Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Thu, 13 Jun 2024 14:27:06 -0400 Subject: [PATCH] funding: allow AcceptChannel with min depth of zero Even if the channel type is not zero conf. We will still use a min depth of at least 1. We just dont fail if our peer indicates trust. --- funding/manager.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/funding/manager.go b/funding/manager.go index c3a839277..67e4f33c5 100644 --- a/funding/manager.go +++ b/funding/manager.go @@ -2020,19 +2020,22 @@ func (f *Manager) funderProcessAcceptChannel(peer lnpeer.Peer, return } - // Fail early if minimum depth is set to 0 and the channel is not - // zero-conf. - if !resCtx.reservation.IsZeroConf() && msg.MinAcceptDepth == 0 { - err = fmt.Errorf("non-zero-conf channel has min depth zero") - log.Warn(err) - f.failFundingFlow(peer, cid, err) - return + // If this is not a zero-conf channel but the peer responded with a + // min-depth of zero, we will use our minimum of 1 instead. + minDepth := msg.MinAcceptDepth + if !resCtx.reservation.IsZeroConf() && minDepth == 0 { + log.Infof("Responder to pending_id=%v sent a minimum "+ + "confirmation depth of 0 for non-zero-conf channel. "+ + "We will use a minimum depth of 1 instead.", + cid.tempChanID) + + minDepth = 1 } // We'll also specify the responder's preference for the number of // required confirmations, and also the set of channel constraints // they've specified for commitment states we can create. - resCtx.reservation.SetNumConfsRequired(uint16(msg.MinAcceptDepth)) + resCtx.reservation.SetNumConfsRequired(uint16(minDepth)) channelConstraints := &channeldb.ChannelConstraints{ DustLimit: msg.DustLimit, ChanReserve: msg.ChannelReserve,