Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lnwallet/btcwallet/btcwallet.go
Original file line number Diff line number Diff line change
Expand Up @@ -1136,7 +1136,7 @@ func mapRpcclientError(err error) error {
case errors.Is(err, chain.ErrMempoolMinFeeNotMet),
errors.Is(err, chain.ErrMinRelayFeeNotMet):

return fmt.Errorf("%w: %v", lnwallet.ErrMempoolFee, err.Error())
return fmt.Errorf("%w: %v. The cooperative close transaction was created but not accepted into the mempool due to low fees. You may need to use 'lncli wallet bumpfee' to increase the fee and get the transaction confirmed", lnwallet.ErrMempoolFee, err.Error())
}

return err
Expand Down
15 changes: 9 additions & 6 deletions rpcserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -2849,13 +2849,16 @@ func (r *rpcServer) CloseChannel(in *lnrpc.CloseChannelRequest,
// RBF variant, then we can actually bypass the switch.
// Otherwise, we'll return an error.
if !chanHasRbfCloser {
rpcsLog.Debugf("Trying to non-force close "+
"offline channel with chan_point=%v",
chanPoint)
rpcsLog.Debugf("Trying to non-force close "+
"offline channel with chan_point=%v",
chanPoint)

return fmt.Errorf("unable to gracefully close "+
"channel while peer is offline (try "+
"force closing it instead): %v", err)
// Check if the channel is already closed or has a pending close tx.
if channel.HasChanStatus(channeldb.ChanStatusCoopBroadcasted) {
return fmt.Errorf("channel is already in the process of closing. Check 'lncli pendingchannels' for status. If the close transaction is not confirmed, you may need to use 'lncli wallet bumpfee'")
}

return fmt.Errorf("unable to gracefully close channel while peer is offline (try force closing it instead): %v", err)
}
}

Expand Down