Description
We use Channel::is_live()
for a few things that imply "should we consider this channel available for forwarding HTLCs and sending payments", which is great, except it implies races for clients which use async monitor updates. Such clients will always return a TemporaryFailure on monitor updates, leaving the channel in ChannelState::MonitorUpdateFailed
until the monitor updates completes. This implies !is_live()
which means such clients will refuse to send or forward HTLCs during monitor updates, which they likely should not. The likely fix would be to only !is_live()
a channel if the monitor updating has been running for some time without completion, but this probably has implications for the channel state machine around placing such HTLCs in the holding cell in a new case.