@@ -40,13 +40,14 @@ use crate::blinded_path::payment::{BlindedPaymentPath, Bolt12OfferContext, Bolt1
40
40
use crate::chain;
41
41
use crate::chain::{Confirm, ChannelMonitorUpdateStatus, Watch, BestBlock};
42
42
use crate::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator, LowerBoundedFeeEstimator};
43
- use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, WithChannelMonitor, ChannelMonitorUpdateStep, HTLC_FAIL_BACK_BUFFER, CLTV_CLAIM_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS, ANTI_REORG_DELAY, MonitorEvent, CLOSED_CHANNEL_UPDATE_ID };
43
+ use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, ChannelMonitorUpdateStep, MonitorEvent, WithChannelMonitor, ANTI_REORG_DELAY, CLOSED_CHANNEL_UPDATE_ID, CLTV_CLAIM_BUFFER, HTLC_FAIL_BACK_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS, STUB_CHANNEL_UPDATE_IDENTIFIER };
44
44
use crate::chain::transaction::{OutPoint, TransactionData};
45
45
use crate::events;
46
46
use crate::events::{Event, EventHandler, EventsProvider, MessageSendEvent, MessageSendEventsProvider, ClosureReason, HTLCDestination, PaymentFailureReason, ReplayEvent};
47
47
// Since this struct is returned in `list_channels` methods, expose it here in case users want to
48
48
// construct one themselves.
49
49
use crate::ln::inbound_payment;
50
+ use crate::ln::our_peer_storage::{OurPeerStorage, StubChannelMonitor};
50
51
use crate::ln::types::{ChannelId, PaymentHash, PaymentPreimage, PaymentSecret};
51
52
use crate::ln::channel::{self, Channel, ChannelPhase, ChannelContext, ChannelError, ChannelUpdateStatus, ShutdownResult, UnfundedChannelContext, UpdateFulfillCommitFetch, OutboundV1Channel, InboundV1Channel, WithChannelContext};
52
53
use crate::ln::channel_state::ChannelDetails;
@@ -6875,6 +6876,8 @@ where
6875
6876
if let Some(raa_blocker) = raa_blocker_opt {
6876
6877
peer_state.actions_blocking_raa_monitor_updates.entry(chan_id).or_insert_with(Vec::new).push(raa_blocker);
6877
6878
}
6879
+
6880
+ let _ = self.our_peer_storage.write().unwrap().update_state_from_monitor_update(chan.context.channel_id(), monitor_update.clone());
6878
6881
if !during_init {
6879
6882
handle_new_monitor_update!(self, prev_hop.outpoint, monitor_update, peer_state_lock,
6880
6883
peer_state, per_peer_state, chan);
@@ -8014,7 +8017,18 @@ where
8014
8017
let mut pending_events = self.pending_events.lock().unwrap();
8015
8018
emit_channel_ready_event!(pending_events, chan);
8016
8019
}
8017
-
8020
+ // Update Peer Storage.
8021
+ let counterparty_channel_parameters = chan.context.channel_transaction_parameters.counterparty_parameters.as_ref().unwrap();
8022
+ let counterparty_delayed_payment_base_key = counterparty_channel_parameters.pubkeys.delayed_payment_basepoint;
8023
+ let counterparty_htlc_base_key = counterparty_channel_parameters.pubkeys.htlc_basepoint;
8024
+ let stub_chan = StubChannelMonitor::new(chan.context.channel_id(), chan.context.get_funding_txo().unwrap(), chan.context.get_value_satoshis(),
8025
+ chan.context.get_channel_keys_id(), chan.context.get_commitment_secret(),
8026
+ chan.context.get_counterparty_node_id(), counterparty_delayed_payment_base_key, counterparty_htlc_base_key,
8027
+ chan.context.get_holder_selected_contest_delay(),
8028
+ chan.context.get_commitment_txn_number_obscure_factor(), None,
8029
+ None, chan.context.channel_transaction_parameters.channel_type_features.clone(),
8030
+ self.current_best_block());
8031
+ self.our_peer_storage.write().unwrap().stub_channel(stub_chan);
8018
8032
Ok(())
8019
8033
} else {
8020
8034
try_chan_phase_entry!(self, Err(ChannelError::close(
@@ -8362,6 +8376,7 @@ where
8362
8376
let funding_txo = chan.context.get_funding_txo();
8363
8377
let monitor_update_opt = try_chan_phase_entry!(self, chan.commitment_signed(&msg, &&logger), chan_phase_entry);
8364
8378
if let Some(monitor_update) = monitor_update_opt {
8379
+ let _ = self.our_peer_storage.write().unwrap().update_state_from_monitor_update(chan.context.channel_id(), monitor_update.clone());
8365
8380
handle_new_monitor_update!(self, funding_txo.unwrap(), monitor_update, peer_state_lock,
8366
8381
peer_state, per_peer_state, chan);
8367
8382
}
@@ -8562,9 +8577,14 @@ where
8562
8577
} else { false };
8563
8578
let (htlcs_to_fail, monitor_update_opt) = try_chan_phase_entry!(self,
8564
8579
chan.revoke_and_ack(&msg, &self.fee_estimator, &&logger, mon_update_blocked), chan_phase_entry);
8580
+
8581
+ let mut our_peer_storage = self.our_peer_storage.write().unwrap();
8565
8582
if let Some(monitor_update) = monitor_update_opt {
8566
8583
let funding_txo = funding_txo_opt
8567
8584
.expect("Funding outpoint must have been set for RAA handling to succeed");
8585
+
8586
+ let _ = our_peer_storage.update_state_from_monitor_update(chan.context.channel_id(), monitor_update.clone());
8587
+
8568
8588
handle_new_monitor_update!(self, funding_txo, monitor_update,
8569
8589
peer_state_lock, peer_state, per_peer_state, chan);
8570
8590
}
@@ -8908,6 +8928,7 @@ where
8908
8928
}
8909
8929
if let Some(monitor_update) = monitor_opt {
8910
8930
has_monitor_update = true;
8931
+ let _ = self.our_peer_storage.write().unwrap().update_state_from_monitor_update(chan.context.channel_id(), monitor_update.clone());
8911
8932
8912
8933
handle_new_monitor_update!(self, funding_txo.unwrap(), monitor_update,
8913
8934
peer_state_lock, peer_state, per_peer_state, chan);
@@ -10145,7 +10166,7 @@ where
10145
10166
}
10146
10167
channel.best_block_updated(height, header.time, self.chain_hash, &self.node_signer, &self.default_configuration, &&WithChannelContext::from(&self.logger, &channel.context, None))
10147
10168
});
10148
-
10169
+ self.our_peer_storage.write().unwrap().update_best_block(header, height);
10149
10170
macro_rules! max_time {
10150
10171
($timestamp: expr) => {
10151
10172
loop {
@@ -12326,6 +12347,8 @@ where
12326
12347
let mut channel_closures = VecDeque::new();
12327
12348
let mut close_background_events = Vec::new();
12328
12349
let mut funding_txo_to_channel_id = hash_map_with_capacity(channel_count as usize);
12350
+ let mut our_peer_storage: OurPeerStorage = OurPeerStorage::new();
12351
+
12329
12352
for _ in 0..channel_count {
12330
12353
let mut channel: Channel<SP> = Channel::read(reader, (
12331
12354
&args.entropy_source, &args.signer_provider, best_block_height, &provided_channel_type_features(&args.default_config)
@@ -12334,7 +12357,38 @@ where
12334
12357
let funding_txo = channel.context.get_funding_txo().ok_or(DecodeError::InvalidValue)?;
12335
12358
funding_txo_to_channel_id.insert(funding_txo, channel.context.channel_id());
12336
12359
funding_txo_set.insert(funding_txo.clone());
12360
+ let counterparty_channel_parameters = channel.context.channel_transaction_parameters.counterparty_parameters.as_ref().unwrap();
12361
+ let counterparty_delayed_payment_base_key = counterparty_channel_parameters.pubkeys.delayed_payment_basepoint;
12362
+ let counterparty_htlc_base_key = counterparty_channel_parameters.pubkeys.htlc_basepoint;
12363
+
12364
+ let stub_chan = StubChannelMonitor::new(
12365
+ channel.context.channel_id(),
12366
+ funding_txo,
12367
+ channel.context.get_value_satoshis(),
12368
+ channel.context.get_channel_keys_id(),
12369
+ channel.context.get_commitment_secret(),
12370
+ channel.context.get_counterparty_node_id(),
12371
+ counterparty_delayed_payment_base_key,
12372
+ counterparty_htlc_base_key,
12373
+ channel.context.get_holder_selected_contest_delay(),
12374
+ channel.context.get_commitment_txn_number_obscure_factor(),
12375
+ None,
12376
+ None,
12377
+ channel.context.channel_transaction_parameters.channel_type_features.clone(),
12378
+ BestBlock::new(best_block_hash.clone(), best_block_height.clone()),
12379
+ );
12380
+ our_peer_storage.stub_channel(stub_chan);
12337
12381
if let Some(ref mut monitor) = args.channel_monitors.get_mut(&funding_txo) {
12382
+ if let Some(latest_commitment_txn_info) = monitor.get_latest_commitment_txn_and_its_claiming_info() {
12383
+
12384
+ our_peer_storage.update_latest_state(monitor.channel_id(), latest_commitment_txn_info.0, latest_commitment_txn_info.2);
12385
+ }
12386
+
12387
+ if monitor.get_latest_update_id() == STUB_CHANNEL_UPDATE_IDENTIFIER {
12388
+ log_error!(logger, "ChannelMonitor for {} is stale and recovered from Peer Storage, it is not safe to run the node in normal mode.", monitor.channel_id());
12389
+ return Err(DecodeError::DangerousValue);
12390
+ }
12391
+
12338
12392
if channel.get_cur_holder_commitment_transaction_number() > monitor.get_cur_holder_commitment_number() ||
12339
12393
channel.get_revoked_counterparty_commitment_transaction_number() > monitor.get_min_seen_secret() ||
12340
12394
channel.get_cur_counterparty_commitment_transaction_number() > monitor.get_cur_counterparty_commitment_number() ||
0 commit comments