Skip to content

Commit f3d04fe

Browse files
Add ChannelDataPersister trait and integrate in ChainMonitor.
The ChannelDataPersister is responsible for loading ChannelMonitors from disk on startup, and persisting new ChannelMonitors and ChannelMonitor updates.
1 parent b7c308b commit f3d04fe

File tree

11 files changed

+166
-49
lines changed

11 files changed

+166
-49
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ use lightning::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr,
3535
use lightning::chain::transaction::OutPoint;
3636
use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
3737
use lightning::chain::keysinterface::{KeysInterface, InMemoryChannelKeys};
38+
use lightning::ln::data_persister::ChannelDataPersister;
3839
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, PaymentSecret, ChannelManagerReadArgs};
3940
use lightning::ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
4041
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, ErrorAction, UpdateAddHTLC, Init};
@@ -48,6 +49,7 @@ use lightning::routing::router::{Route, RouteHop};
4849

4950

5051
use utils::test_logger;
52+
use utils::test_data_persister::TestChanDataPersister;
5153

5254
use bitcoin::secp256k1::key::{PublicKey,SecretKey};
5355
use bitcoin::secp256k1::Secp256k1;
@@ -84,7 +86,7 @@ impl Writer for VecWriter {
8486

8587
struct TestChainMonitor {
8688
pub logger: Arc<dyn Logger>,
87-
pub chain_monitor: Arc<channelmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Notify>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
89+
pub chain_monitor: Arc<channelmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Notify>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<dyn ChannelDataPersister<Keys=EnforcingChannelKeys>>>>,
8890
pub update_ret: Mutex<Result<(), channelmonitor::ChannelMonitorUpdateErr>>,
8991
// If we reload a node with an old copy of ChannelMonitors, the ChannelManager deserialization
9092
// logic will automatically force-close our channels for us (as we don't have an up-to-date
@@ -95,9 +97,9 @@ struct TestChainMonitor {
9597
pub should_update_manager: atomic::AtomicBool,
9698
}
9799
impl TestChainMonitor {
98-
pub fn new(broadcaster: Arc<TestBroadcaster>, logger: Arc<dyn Logger>, feeest: Arc<FuzzEstimator>) -> Self {
100+
pub fn new(broadcaster: Arc<TestBroadcaster>, logger: Arc<dyn Logger>, feeest: Arc<FuzzEstimator>, data_persister: Arc<dyn ChannelDataPersister<Keys=EnforcingChannelKeys>>) -> Self {
99101
Self {
100-
chain_monitor: Arc::new(channelmonitor::ChainMonitor::new(None, broadcaster, logger.clone(), feeest)),
102+
chain_monitor: Arc::new(channelmonitor::ChainMonitor::new(None, broadcaster, logger.clone(), feeest, data_persister).unwrap()),
101103
logger,
102104
update_ret: Mutex::new(Ok(())),
103105
latest_monitors: Mutex::new(HashMap::new()),
@@ -127,7 +129,7 @@ impl chain::Watch for TestChainMonitor {
127129
};
128130
let mut deserialized_monitor = <(BlockHash, channelmonitor::ChannelMonitor<EnforcingChannelKeys>)>::
129131
read(&mut Cursor::new(&map_entry.get().1)).unwrap().1;
130-
deserialized_monitor.update_monitor(update.clone(), &&TestBroadcaster {}, &self.logger).unwrap();
132+
deserialized_monitor.update_monitor(&update, &&TestBroadcaster {}, &self.logger).unwrap();
131133
let mut ser = VecWriter(Vec::new());
132134
deserialized_monitor.write_for_disk(&mut ser).unwrap();
133135
map_entry.insert((update.update_id, ser.0));
@@ -192,7 +194,8 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
192194
macro_rules! make_node {
193195
($node_id: expr) => { {
194196
let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new($node_id.to_string(), out.clone()));
195-
let monitor = Arc::new(TestChainMonitor::new(broadcast.clone(), logger.clone(), fee_est.clone()));
197+
let data_persister = Arc::new(TestChanDataPersister{});
198+
let monitor = Arc::new(TestChainMonitor::new(broadcast.clone(), logger.clone(), fee_est.clone(), data_persister.clone()));
196199

197200
let keys_manager = Arc::new(KeyProvider { node_id: $node_id, rand_bytes_id: atomic::AtomicU8::new(0) });
198201
let mut config = UserConfig::default();
@@ -207,7 +210,8 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
207210
macro_rules! reload_node {
208211
($ser: expr, $node_id: expr, $old_monitors: expr) => { {
209212
let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new($node_id.to_string(), out.clone()));
210-
let chain_monitor = Arc::new(TestChainMonitor::new(broadcast.clone(), logger.clone(), fee_est.clone()));
213+
let data_persister = Arc::new(TestChanDataPersister{});
214+
let chain_monitor = Arc::new(TestChainMonitor::new(broadcast.clone(), logger.clone(), fee_est.clone(), data_persister.clone()));
211215

212216
let keys_manager = Arc::new(KeyProvider { node_id: $node_id, rand_bytes_id: atomic::AtomicU8::new(0) });
213217
let mut config = UserConfig::default();

fuzz/src/full_stack.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget,
3131
use lightning::chain::channelmonitor;
3232
use lightning::chain::transaction::OutPoint;
3333
use lightning::chain::keysinterface::{InMemoryChannelKeys, KeysInterface};
34+
use lightning::ln::data_persister::ChannelDataPersister;
3435
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, PaymentSecret};
3536
use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor};
3637
use lightning::routing::router::get_route;
@@ -41,6 +42,7 @@ use lightning::util::logger::Logger;
4142
use lightning::util::config::UserConfig;
4243

4344
use utils::test_logger;
45+
use utils::test_data_persister::TestChanDataPersister;
4446

4547
use bitcoin::secp256k1::key::{PublicKey,SecretKey};
4648
use bitcoin::secp256k1::Secp256k1;
@@ -146,13 +148,13 @@ impl<'a> std::hash::Hash for Peer<'a> {
146148

147149
type ChannelMan = ChannelManager<
148150
EnforcingChannelKeys,
149-
Arc<channelmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Notify>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
151+
Arc<channelmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Notify>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<dyn ChannelDataPersister<Keys=EnforcingChannelKeys>>>>,
150152
Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>;
151153
type PeerMan<'a> = PeerManager<Peer<'a>, Arc<ChannelMan>, Arc<NetGraphMsgHandler<Arc<dyn chain::Access>, Arc<dyn Logger>>>, Arc<dyn Logger>>;
152154

153155
struct MoneyLossDetector<'a> {
154156
manager: Arc<ChannelMan>,
155-
monitor: Arc<channelmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Notify>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
157+
monitor: Arc<channelmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Notify>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<dyn ChannelDataPersister<Keys=EnforcingChannelKeys>>>>,
156158
handler: PeerMan<'a>,
157159

158160
peers: &'a RefCell<[bool; 256]>,
@@ -166,7 +168,7 @@ struct MoneyLossDetector<'a> {
166168
impl<'a> MoneyLossDetector<'a> {
167169
pub fn new(peers: &'a RefCell<[bool; 256]>,
168170
manager: Arc<ChannelMan>,
169-
monitor: Arc<channelmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Notify>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
171+
monitor: Arc<channelmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Notify>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<dyn ChannelDataPersister<Keys=EnforcingChannelKeys>>>>,
170172
handler: PeerMan<'a>) -> Self {
171173
MoneyLossDetector {
172174
manager,
@@ -334,7 +336,8 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
334336
};
335337

336338
let broadcast = Arc::new(TestBroadcaster{});
337-
let monitor = Arc::new(channelmonitor::ChainMonitor::new(None, broadcast.clone(), Arc::clone(&logger), fee_est.clone()));
339+
let data_persister: Arc<dyn ChannelDataPersister<Keys = EnforcingChannelKeys>> = Arc::new(TestChanDataPersister{});
340+
let monitor = Arc::new(channelmonitor::ChainMonitor::new(None, broadcast.clone(), Arc::clone(&logger), fee_est.clone(), data_persister.clone()).unwrap());
338341

339342
let keys_manager = Arc::new(KeyProvider { node_secret: our_network_key.clone(), counter: AtomicU64::new(0) });
340343
let mut config = UserConfig::default();

fuzz/src/utils/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
// licenses.
99

1010
pub mod test_logger;
11+
pub mod test_data_persister;

fuzz/src/utils/test_data_persister.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use lightning::ln::data_persister::ChannelDataPersister;
2+
use lightning::chain::channelmonitor;
3+
use lightning::chain::transaction::OutPoint;
4+
use lightning::util::enforcing_trait_impls::EnforcingChannelKeys;
5+
6+
use std::collections::HashMap;
7+
8+
pub struct TestChanDataPersister {}
9+
impl ChannelDataPersister for TestChanDataPersister {
10+
type Keys = EnforcingChannelKeys;
11+
12+
fn persist_channel_data(&self, _funding_txo: OutPoint, _data: &channelmonitor::ChannelMonitor<EnforcingChannelKeys>) -> Result<(), channelmonitor::ChannelMonitorUpdateErr> {
13+
Ok(())
14+
}
15+
16+
fn update_channel_data(&self, _funding_txo: OutPoint, _update: &channelmonitor::ChannelMonitorUpdate, _data: &channelmonitor::ChannelMonitor<EnforcingChannelKeys>) -> Result<(), channelmonitor::ChannelMonitorUpdateErr> {
17+
Ok(())
18+
}
19+
20+
fn load_channel_data(&self) -> Result<HashMap<OutPoint, channelmonitor::ChannelMonitor<EnforcingChannelKeys>>, channelmonitor::ChannelMonitorUpdateErr> {
21+
Ok(HashMap::new())
22+
}
23+
}

lightning-net-tokio/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
//! type Logger = dyn lightning::util::logger::Logger;
3737
//! type ChainAccess = dyn lightning::chain::Access;
3838
//! type ChainNotify = dyn lightning::chain::Notify;
39-
//! type ChainMonitor = lightning::chain::channelmonitor::ChainMonitor<lightning::chain::keysinterface::InMemoryChannelKeys, Arc<ChainNotify>, Arc<TxBroadcaster>, Arc<FeeEstimator>, Arc<Logger>>;
39+
//! type DataPersister = dyn lightning::ln::data_persister::ChannelDataPersister<Keys = lightning::chain::keysinterface::InMemoryChannelKeys>;
40+
//! type ChainMonitor = lightning::chain::channelmonitor::ChainMonitor<lightning::chain::keysinterface::InMemoryChannelKeys, Arc<ChainNotify>, Arc<TxBroadcaster>, Arc<FeeEstimator>, Arc<Logger>, Arc<DataPersister>>;
4041
//! type ChannelManager = lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor, TxBroadcaster, FeeEstimator, Logger>;
4142
//! type PeerManager = lightning::ln::peer_handler::SimpleArcPeerManager<lightning_net_tokio::SocketDescriptor, ChainMonitor, TxBroadcaster, FeeEstimator, ChainAccess, Logger>;
4243
//!

lightning/src/chain/channelmonitor.rs

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ use ln::chan_utils;
4343
use ln::chan_utils::{CounterpartyCommitmentSecrets, HTLCOutputInCommitment, LocalCommitmentTransaction, HTLCType};
4444
use ln::channelmanager::{HTLCSource, PaymentPreimage, PaymentHash};
4545
use ln::onchaintx::{OnchainTxHandler, InputDescriptors};
46+
use ln::data_persister::ChannelDataPersister;
4647
use chain;
4748
use chain::Notify;
4849
use chain::chaininterface::{BroadcasterInterface, FeeEstimator};
@@ -99,7 +100,7 @@ impl Readable for ChannelMonitorUpdate {
99100
}
100101

101102
/// An error enum representing a failure to persist a channel monitor update.
102-
#[derive(Clone)]
103+
#[derive(Clone, Debug)]
103104
pub enum ChannelMonitorUpdateErr {
104105
/// Used to indicate a temporary failure (eg connection to a watchtower or remote backup of
105106
/// our state failed, but is expected to succeed at some point in the future).
@@ -182,25 +183,28 @@ impl_writeable!(HTLCUpdate, 0, { payment_hash, payment_preimage, source });
182183
/// independently to monitor channels remotely.
183184
///
184185
/// [`chain::Watch`]: ../../chain/trait.Watch.html
185-
pub struct ChainMonitor<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref>
186+
pub struct ChainMonitor<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref, D: Deref>
186187
where C::Target: chain::Notify,
187188
T::Target: BroadcasterInterface,
188189
F::Target: FeeEstimator,
189190
L::Target: Logger,
191+
D::Target: ChannelDataPersister<Keys=ChanSigner>,
190192
{
191193
/// The monitors
192194
pub monitors: Mutex<HashMap<OutPoint, ChannelMonitor<ChanSigner>>>,
193195
chain_source: Option<C>,
194196
broadcaster: T,
195197
logger: L,
196-
fee_estimator: F
198+
fee_estimator: F,
199+
data_persister: D,
197200
}
198201

199-
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> ChainMonitor<ChanSigner, C, T, F, L>
202+
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref, D: Deref> ChainMonitor<ChanSigner, C, T, F, L, D>
200203
where C::Target: chain::Notify,
201204
T::Target: BroadcasterInterface,
202205
F::Target: FeeEstimator,
203206
L::Target: Logger,
207+
D::Target: ChannelDataPersister<Keys=ChanSigner>,
204208
{
205209
/// Dispatches to per-channel monitors, which are responsible for updating their on-chain view
206210
/// of a channel and reacting accordingly based on transactions in the connected block. See
@@ -246,22 +250,29 @@ impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> ChainMonit
246250
}
247251
}
248252

249-
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> ChainMonitor<ChanSigner, C, T, F, L>
253+
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref, D: Deref> ChainMonitor<ChanSigner, C, T, F, L, D>
250254
where C::Target: chain::Notify,
251255
T::Target: BroadcasterInterface,
252256
F::Target: FeeEstimator,
253257
L::Target: Logger,
258+
D::Target: ChannelDataPersister<Keys=ChanSigner>,
254259
{
255260
/// Creates a new object which can be used to monitor several channels given the chain
256261
/// interface with which to register to receive notifications.
257-
pub fn new(chain_source: Option<C>, broadcaster: T, logger: L, feeest: F) -> Self {
258-
Self {
259-
monitors: Mutex::new(HashMap::new()),
262+
pub fn new(chain_source: Option<C>, broadcaster: T, logger: L, feeest: F, data_persister: D) -> Result<Self, ChannelMonitorUpdateErr> {
263+
let monitors = match data_persister.load_channel_data() {
264+
Ok(mons) => mons,
265+
Err(e) => return Err(e)
266+
};
267+
268+
Ok(Self {
269+
monitors: Mutex::new(monitors),
260270
chain_source,
261271
broadcaster,
262272
logger,
263273
fee_estimator: feeest,
264-
}
274+
data_persister,
275+
})
265276
}
266277

267278
/// Adds or updates the monitor which monitors the channel referred to by the given outpoint.
@@ -275,6 +286,12 @@ impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> ChainMonit
275286
hash_map::Entry::Occupied(_) => return Err(MonitorUpdateError("Channel monitor for given outpoint is already present")),
276287
hash_map::Entry::Vacant(e) => e,
277288
};
289+
{
290+
match self.data_persister.persist_channel_data(outpoint, &monitor) {
291+
Err(_) => return Err(MonitorUpdateError("Unable to persist channel data")),
292+
_ => {}
293+
}
294+
}
278295
{
279296
let funding_txo = monitor.get_funding_txo();
280297
log_trace!(self.logger, "Got new Channel Monitor for channel {}", log_bytes!(funding_txo.0.to_channel_id()[..]));
@@ -295,21 +312,29 @@ impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> ChainMonit
295312
/// Updates the monitor which monitors the channel referred to by the given outpoint.
296313
pub fn update_monitor(&self, outpoint: OutPoint, update: ChannelMonitorUpdate) -> Result<(), MonitorUpdateError> {
297314
let mut monitors = self.monitors.lock().unwrap();
298-
match monitors.get_mut(&outpoint) {
299-
Some(orig_monitor) => {
300-
log_trace!(self.logger, "Updating Channel Monitor for channel {}", log_funding_info!(orig_monitor));
301-
orig_monitor.update_monitor(update, &self.broadcaster, &self.logger)
302-
},
303-
None => Err(MonitorUpdateError("No such monitor registered"))
315+
if let Some(orig_monitor) = monitors.get_mut(&outpoint) {
316+
log_trace!(self.logger, "Updating Channel Monitor for channel {}", log_funding_info!(orig_monitor));
317+
if let Err(e) = orig_monitor.update_monitor(&update, &self.broadcaster, &self.logger) {
318+
return Err(e)
319+
}
320+
match self.data_persister.update_channel_data(outpoint, &update, orig_monitor) {
321+
Err(_) => return Err(MonitorUpdateError("Failed to persist monitor update")),
322+
_ => {}
323+
}
324+
} else {
325+
return Err(MonitorUpdateError("No such monitor registered"));
304326
}
327+
328+
Ok(())
305329
}
306330
}
307331

308-
impl<ChanSigner: ChannelKeys, C: Deref + Sync + Send, T: Deref + Sync + Send, F: Deref + Sync + Send, L: Deref + Sync + Send> chain::Watch for ChainMonitor<ChanSigner, C, T, F, L>
332+
impl<ChanSigner: ChannelKeys, C: Deref + Sync + Send, T: Deref + Sync + Send, F: Deref + Sync + Send, L: Deref + Sync + Send, D: Deref + Sync + Send> chain::Watch for ChainMonitor<ChanSigner, C, T, F, L, D>
309333
where C::Target: chain::Notify,
310334
T::Target: BroadcasterInterface,
311335
F::Target: FeeEstimator,
312336
L::Target: Logger,
337+
D::Target: ChannelDataPersister<Keys=ChanSigner>,
313338
{
314339
type Keys = ChanSigner;
315340

@@ -336,11 +361,12 @@ impl<ChanSigner: ChannelKeys, C: Deref + Sync + Send, T: Deref + Sync + Send, F:
336361
}
337362
}
338363

339-
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> events::EventsProvider for ChainMonitor<ChanSigner, C, T, F, L>
364+
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref, D: Deref> events::EventsProvider for ChainMonitor<ChanSigner, C, T, F, L, D>
340365
where C::Target: chain::Notify,
341366
T::Target: BroadcasterInterface,
342367
F::Target: FeeEstimator,
343368
L::Target: Logger,
369+
D::Target: ChannelDataPersister<Keys=ChanSigner>,
344370
{
345371
fn get_and_clear_pending_events(&self) -> Vec<Event> {
346372
let mut pending_events = Vec::new();
@@ -1339,30 +1365,29 @@ impl<ChanSigner: ChannelKeys> ChannelMonitor<ChanSigner> {
13391365
/// itself.
13401366
///
13411367
/// panics if the given update is not the next update by update_id.
1342-
pub fn update_monitor<B: Deref, L: Deref>(&mut self, mut updates: ChannelMonitorUpdate, broadcaster: &B, logger: &L) -> Result<(), MonitorUpdateError>
1368+
pub fn update_monitor<B: Deref, L: Deref>(&mut self, updates: &ChannelMonitorUpdate, broadcaster: &B, logger: &L) -> Result<(), MonitorUpdateError>
13431369
where B::Target: BroadcasterInterface,
13441370
L::Target: Logger,
13451371
{
13461372
if self.latest_update_id + 1 != updates.update_id {
13471373
panic!("Attempted to apply ChannelMonitorUpdates out of order, check the update_id before passing an update to update_monitor!");
13481374
}
1349-
for update in updates.updates.drain(..) {
1375+
for update in updates.updates.iter() {
13501376
match update {
13511377
ChannelMonitorUpdateStep::LatestLocalCommitmentTXInfo { commitment_tx, htlc_outputs } => {
13521378
if self.lockdown_from_offchain { panic!(); }
1353-
self.provide_latest_local_commitment_tx_info(commitment_tx, htlc_outputs)?
1379+
self.provide_latest_local_commitment_tx_info(commitment_tx.clone(), htlc_outputs.clone())?
13541380
},
13551381
ChannelMonitorUpdateStep::LatestRemoteCommitmentTXInfo { unsigned_commitment_tx, htlc_outputs, commitment_number, their_revocation_point } =>
1356-
self.provide_latest_remote_commitment_tx_info(&unsigned_commitment_tx, htlc_outputs, commitment_number, their_revocation_point, logger),
1382+
self.provide_latest_remote_commitment_tx_info(&unsigned_commitment_tx, htlc_outputs.clone(), *commitment_number, *their_revocation_point, logger),
13571383
ChannelMonitorUpdateStep::PaymentPreimage { payment_preimage } =>
13581384
self.provide_payment_preimage(&PaymentHash(Sha256::hash(&payment_preimage.0[..]).into_inner()), &payment_preimage),
13591385
ChannelMonitorUpdateStep::CommitmentSecret { idx, secret } =>
1360-
self.provide_secret(idx, secret)?,
1386+
self.provide_secret(*idx, *secret)?,
13611387
ChannelMonitorUpdateStep::ChannelForceClosed { should_broadcast } => {
13621388
self.lockdown_from_offchain = true;
1363-
if should_broadcast {
1364-
self.broadcast_latest_local_commitment_txn(broadcaster, logger);
1365-
} else {
1389+
if *should_broadcast {
1390+
self.broadcast_latest_local_commitment_txn(broadcaster, logger);} else {
13661391
log_error!(logger, "You have a toxic local commitment transaction avaible in channel monitor, read comment in ChannelMonitor::get_latest_local_commitment_txn to be informed of manual action to take");
13671392
}
13681393
}

0 commit comments

Comments
 (0)