Skip to content

Commit 72416b9

Browse files
committed
Add a TODO for an important issue for making async mon updates safe
If we receive a monitor event from a forwarded-to channel which contains a preimage for an HTLC, we have to propogate that preimage back to the forwarded-from channel monitor. However, once we have that update, we're running in a relatively unsafe state - we have the preimage in memory, but if we were to crash the forwarded-to channel monitor will not regenerate the update with the preimage for us. If we haven't managed to write the monitor update to the forwarded-from channel by that point, we've lost the preimage, and, thus, money!
1 parent 12fa0b1 commit 72416b9

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4223,8 +4223,12 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
42234223
// event being update_fulfill_htlc).
42244224
let update_res = self.chain_monitor.update_channel(prev_outpoint, preimage_update);
42254225
if update_res != ChannelMonitorUpdateStatus::Completed {
4226+
// TODO: This needs to be handled somehow - if we receive a monitor update
4227+
// with a preimage we *must* somehow manage to propagate it to the upstream
4228+
// channel, or we must have an ability to receive the same event and try
4229+
// again on restart.
42264230
log_error!(self.logger, "Critical error: failed to update channel monitor with preimage {:?}: {:?}",
4227-
payment_preimage, update_res);
4231+
payment_preimage, update_res);
42284232
}
42294233
// Note that we do *not* set `claimed_htlc` to false here. In fact, this
42304234
// totally could be a duplicate claim, but we have no way of knowing

0 commit comments

Comments
 (0)