Skip to content

Commit 2586cbb

Browse files
Integrate Persist into ChainMonitor.
- update MonitorUpdateErr to indicate whether the updated ChannelMonitor should be persisted despite the error - The ChainMonitor should: Whenever a new channel is added or updated, these updates should be conveyed to the persister and persisted to disk.
1 parent 65d2086 commit 2586cbb

File tree

10 files changed

+141
-76
lines changed

10 files changed

+141
-76
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ use lightning::routing::router::{Route, RouteHop};
4848

4949

5050
use utils::test_logger;
51+
use utils::test_persister::TestPersister;
5152

5253
use bitcoin::secp256k1::key::{PublicKey,SecretKey};
5354
use bitcoin::secp256k1::Secp256k1;
@@ -84,7 +85,7 @@ impl Writer for VecWriter {
8485

8586
struct TestChainMonitor {
8687
pub logger: Arc<dyn Logger>,
87-
pub chain_monitor: Arc<chainmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
88+
pub chain_monitor: Arc<chainmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<TestPersister>>>,
8889
pub update_ret: Mutex<Result<(), channelmonitor::ChannelMonitorUpdateErr>>,
8990
// If we reload a node with an old copy of ChannelMonitors, the ChannelManager deserialization
9091
// logic will automatically force-close our channels for us (as we don't have an up-to-date
@@ -95,9 +96,9 @@ struct TestChainMonitor {
9596
pub should_update_manager: atomic::AtomicBool,
9697
}
9798
impl TestChainMonitor {
98-
pub fn new(broadcaster: Arc<TestBroadcaster>, logger: Arc<dyn Logger>, feeest: Arc<FuzzEstimator>) -> Self {
99+
pub fn new(broadcaster: Arc<TestBroadcaster>, logger: Arc<dyn Logger>, feeest: Arc<FuzzEstimator>, persister: Arc<TestPersister>) -> Self {
99100
Self {
100-
chain_monitor: Arc::new(chainmonitor::ChainMonitor::new(None, broadcaster, logger.clone(), feeest)),
101+
chain_monitor: Arc::new(chainmonitor::ChainMonitor::new(None, broadcaster, logger.clone(), feeest, persister)),
101102
logger,
102103
update_ret: Mutex::new(Ok(())),
103104
latest_monitors: Mutex::new(HashMap::new()),
@@ -127,7 +128,7 @@ impl chain::Watch for TestChainMonitor {
127128
};
128129
let mut deserialized_monitor = <(BlockHash, channelmonitor::ChannelMonitor<EnforcingChannelKeys>)>::
129130
read(&mut Cursor::new(&map_entry.get().1)).unwrap().1;
130-
deserialized_monitor.update_monitor(update.clone(), &&TestBroadcaster {}, &self.logger).unwrap();
131+
deserialized_monitor.update_monitor(&update, &&TestBroadcaster {}, &self.logger).unwrap();
131132
let mut ser = VecWriter(Vec::new());
132133
deserialized_monitor.write_for_disk(&mut ser).unwrap();
133134
map_entry.insert((update.update_id, ser.0));
@@ -192,7 +193,8 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
192193
macro_rules! make_node {
193194
($node_id: expr) => { {
194195
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()));
196+
let persister = Arc::new(TestPersister{});
197+
let monitor = Arc::new(TestChainMonitor::new(broadcast.clone(), logger.clone(), fee_est.clone(), persister.clone()));
196198

197199
let keys_manager = Arc::new(KeyProvider { node_id: $node_id, rand_bytes_id: atomic::AtomicU8::new(0) });
198200
let mut config = UserConfig::default();
@@ -207,7 +209,8 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
207209
macro_rules! reload_node {
208210
($ser: expr, $node_id: expr, $old_monitors: expr) => { {
209211
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()));
212+
let persister = Arc::new(TestPersister{});
213+
let chain_monitor = Arc::new(TestChainMonitor::new(broadcast.clone(), logger.clone(), fee_est.clone(), persister.clone()));
211214

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

fuzz/src/full_stack.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ use lightning::util::logger::Logger;
4040
use lightning::util::config::UserConfig;
4141

4242
use utils::test_logger;
43+
use utils::test_persister::TestPersister;
4344

4445
use bitcoin::secp256k1::key::{PublicKey,SecretKey};
4546
use bitcoin::secp256k1::Secp256k1;
@@ -145,13 +146,13 @@ impl<'a> std::hash::Hash for Peer<'a> {
145146

146147
type ChannelMan = ChannelManager<
147148
EnforcingChannelKeys,
148-
Arc<chainmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
149+
Arc<chainmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<TestPersister>>>,
149150
Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>;
150151
type PeerMan<'a> = PeerManager<Peer<'a>, Arc<ChannelMan>, Arc<NetGraphMsgHandler<Arc<dyn chain::Access>, Arc<dyn Logger>>>, Arc<dyn Logger>>;
151152

152153
struct MoneyLossDetector<'a> {
153154
manager: Arc<ChannelMan>,
154-
monitor: Arc<chainmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
155+
monitor: Arc<chainmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<TestPersister>>>,
155156
handler: PeerMan<'a>,
156157

157158
peers: &'a RefCell<[bool; 256]>,
@@ -165,7 +166,7 @@ struct MoneyLossDetector<'a> {
165166
impl<'a> MoneyLossDetector<'a> {
166167
pub fn new(peers: &'a RefCell<[bool; 256]>,
167168
manager: Arc<ChannelMan>,
168-
monitor: Arc<chainmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>>>,
169+
monitor: Arc<chainmonitor::ChainMonitor<EnforcingChannelKeys, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<TestPersister>>>,
169170
handler: PeerMan<'a>) -> Self {
170171
MoneyLossDetector {
171172
manager,
@@ -333,7 +334,8 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
333334
};
334335

335336
let broadcast = Arc::new(TestBroadcaster{});
336-
let monitor = Arc::new(chainmonitor::ChainMonitor::new(None, broadcast.clone(), Arc::clone(&logger), fee_est.clone()));
337+
let persister = Arc::new(TestPersister{});
338+
let monitor = Arc::new(chainmonitor::ChainMonitor::new(None, broadcast.clone(), Arc::clone(&logger), fee_est.clone(), persister.clone()));
337339

338340
let keys_manager = Arc::new(KeyProvider { node_secret: our_network_key.clone(), counter: AtomicU64::new(0) });
339341
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_persister;

fuzz/src/utils/test_persister.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use lightning::chain::channelmonitor;
2+
use lightning::chain::transaction::OutPoint;
3+
use lightning::util::enforcing_trait_impls::EnforcingChannelKeys;
4+
5+
pub struct TestPersister {}
6+
impl channelmonitor::Persist<EnforcingChannelKeys> for TestPersister {
7+
fn persist_new_channel(&self, _funding_txo: OutPoint, _data: &channelmonitor::ChannelMonitor<EnforcingChannelKeys>) -> Result<(), channelmonitor::ChannelMonitorUpdateErr> {
8+
Ok(())
9+
}
10+
11+
fn update_persisted_channel(&self, _funding_txo: OutPoint, _update: &channelmonitor::ChannelMonitorUpdate, _data: &channelmonitor::ChannelMonitor<EnforcingChannelKeys>) -> Result<(), channelmonitor::ChannelMonitorUpdateErr> {
12+
Ok(())
13+
}
14+
}

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 ChainFilter = dyn lightning::chain::Filter;
39-
//! type ChainMonitor = lightning::chain::chainmonitor::ChainMonitor<lightning::chain::keysinterface::InMemoryChannelKeys, Arc<ChainFilter>, Arc<TxBroadcaster>, Arc<FeeEstimator>, Arc<Logger>>;
39+
//! type DataPersister = dyn lightning::chain::channelmonitor::Persist<lightning::chain::keysinterface::InMemoryChannelKeys>;
40+
//! type ChainMonitor = lightning::chain::chainmonitor::ChainMonitor<lightning::chain::keysinterface::InMemoryChannelKeys, Arc<ChainFilter>, 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/chainmonitor.rs

Lines changed: 58 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ use bitcoin::blockdata::block::BlockHeader;
3434
use chain;
3535
use chain::Filter;
3636
use chain::chaininterface::{BroadcasterInterface, FeeEstimator};
37-
use chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, ChannelMonitorUpdateErr, MonitorEvent, MonitorUpdateError};
37+
use chain::channelmonitor;
38+
use chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, ChannelMonitorUpdateErr, MonitorEvent, Persist};
3839
use chain::transaction::{OutPoint, TransactionData};
3940
use chain::keysinterface::ChannelKeys;
4041
use util::logger::Logger;
@@ -55,25 +56,28 @@ use std::ops::Deref;
5556
/// [`chain::Watch`]: ../trait.Watch.html
5657
/// [`ChannelManager`]: ../../ln/channelmanager/struct.ChannelManager.html
5758
/// [module-level documentation]: index.html
58-
pub struct ChainMonitor<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref>
59+
pub struct ChainMonitor<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref>
5960
where C::Target: chain::Filter,
6061
T::Target: BroadcasterInterface,
6162
F::Target: FeeEstimator,
6263
L::Target: Logger,
64+
P::Target: channelmonitor::Persist<ChanSigner>,
6365
{
6466
/// The monitors
6567
pub monitors: Mutex<HashMap<OutPoint, ChannelMonitor<ChanSigner>>>,
6668
chain_source: Option<C>,
6769
broadcaster: T,
6870
logger: L,
69-
fee_estimator: F
71+
fee_estimator: F,
72+
persister: P,
7073
}
7174

72-
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> ChainMonitor<ChanSigner, C, T, F, L>
73-
where C::Target: chain::Filter,
74-
T::Target: BroadcasterInterface,
75-
F::Target: FeeEstimator,
76-
L::Target: Logger,
75+
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> ChainMonitor<ChanSigner, C, T, F, L, P>
76+
where C::Target: chain::Filter,
77+
T::Target: BroadcasterInterface,
78+
F::Target: FeeEstimator,
79+
L::Target: Logger,
80+
P::Target: channelmonitor::Persist<ChanSigner>,
7781
{
7882
/// Dispatches to per-channel monitors, which are responsible for updating their on-chain view
7983
/// of a channel and reacting accordingly based on transactions in the connected block. See
@@ -124,27 +128,44 @@ impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> ChainMonit
124128
/// transactions relevant to the watched channels.
125129
///
126130
/// [`chain::Filter`]: ../trait.Filter.html
127-
pub fn new(chain_source: Option<C>, broadcaster: T, logger: L, feeest: F) -> Self {
131+
pub fn new(chain_source: Option<C>, broadcaster: T, logger: L, feeest: F, persister: P) -> Self {
128132
Self {
129133
monitors: Mutex::new(HashMap::new()),
130134
chain_source,
131135
broadcaster,
132136
logger,
133137
fee_estimator: feeest,
138+
persister,
134139
}
135140
}
141+
}
142+
143+
impl<ChanSigner: ChannelKeys, C: Deref + Sync + Send, T: Deref + Sync + Send, F: Deref + Sync + Send, L: Deref + Sync + Send, P: Deref + Sync + Send> chain::Watch for ChainMonitor<ChanSigner, C, T, F, L, P>
144+
where C::Target: chain::Filter,
145+
T::Target: BroadcasterInterface,
146+
F::Target: FeeEstimator,
147+
L::Target: Logger,
148+
P::Target: channelmonitor::Persist<ChanSigner>,
149+
{
150+
type Keys = ChanSigner;
136151

137152
/// Adds the monitor that watches the channel referred to by the given outpoint.
138153
///
139154
/// Calls back to [`chain::Filter`] with the funding transaction and outputs to watch.
140155
///
141156
/// [`chain::Filter`]: ../trait.Filter.html
142-
fn add_monitor(&self, outpoint: OutPoint, monitor: ChannelMonitor<ChanSigner>) -> Result<(), MonitorUpdateError> {
157+
fn watch_channel(&self, funding_outpoint: OutPoint, monitor: ChannelMonitor<ChanSigner>) -> Result<(), ChannelMonitorUpdateErr> {
143158
let mut monitors = self.monitors.lock().unwrap();
144-
let entry = match monitors.entry(outpoint) {
145-
hash_map::Entry::Occupied(_) => return Err(MonitorUpdateError("Channel monitor for given outpoint is already present")),
159+
let entry = match monitors.entry(funding_outpoint) {
160+
hash_map::Entry::Occupied(_) => {
161+
log_error!(self.logger, "Failed to add new channel data: channel monitor for given outpoint is already present");
162+
return Err(ChannelMonitorUpdateErr::PermanentFailure)},
146163
hash_map::Entry::Vacant(e) => e,
147164
};
165+
if let Err(e) = self.persister.persist_new_channel(funding_outpoint, &monitor) {
166+
log_error!(self.logger, "Failed to persist new channel data");
167+
return Err(e);
168+
}
148169
{
149170
let funding_txo = monitor.get_funding_txo();
150171
log_trace!(self.logger, "Got new Channel Monitor for channel {}", log_bytes!(funding_txo.0.to_channel_id()[..]));
@@ -162,38 +183,32 @@ impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> ChainMonit
162183
Ok(())
163184
}
164185

165-
/// Updates the monitor that watches the channel referred to by the given outpoint.
166-
fn update_monitor(&self, outpoint: OutPoint, update: ChannelMonitorUpdate) -> Result<(), MonitorUpdateError> {
186+
fn update_channel(&self, funding_txo: OutPoint, update: ChannelMonitorUpdate) -> Result<(), ChannelMonitorUpdateErr> {
187+
// Update the monitor that watches the channel referred to by the given outpoint.
167188
let mut monitors = self.monitors.lock().unwrap();
168-
match monitors.get_mut(&outpoint) {
189+
match monitors.get_mut(&funding_txo) {
190+
None => {
191+
log_error!(self.logger, "Failed to update channel monitor: no such monitor registered");
192+
Err(ChannelMonitorUpdateErr::PermanentFailure)
193+
},
169194
Some(orig_monitor) => {
170195
log_trace!(self.logger, "Updating Channel Monitor for channel {}", log_funding_info!(orig_monitor));
171-
orig_monitor.update_monitor(update, &self.broadcaster, &self.logger)
172-
},
173-
None => Err(MonitorUpdateError("No such monitor registered"))
174-
}
175-
}
176-
}
177-
178-
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>
179-
where C::Target: chain::Filter,
180-
T::Target: BroadcasterInterface,
181-
F::Target: FeeEstimator,
182-
L::Target: Logger,
183-
{
184-
type Keys = ChanSigner;
185-
186-
fn watch_channel(&self, funding_txo: OutPoint, monitor: ChannelMonitor<ChanSigner>) -> Result<(), ChannelMonitorUpdateErr> {
187-
match self.add_monitor(funding_txo, monitor) {
188-
Ok(_) => Ok(()),
189-
Err(_) => Err(ChannelMonitorUpdateErr::PermanentFailure),
190-
}
191-
}
192-
193-
fn update_channel(&self, funding_txo: OutPoint, update: ChannelMonitorUpdate) -> Result<(), ChannelMonitorUpdateErr> {
194-
match self.update_monitor(funding_txo, update) {
195-
Ok(_) => Ok(()),
196-
Err(_) => Err(ChannelMonitorUpdateErr::PermanentFailure),
196+
let update_res = orig_monitor.update_monitor(&update, &self.broadcaster, &self.logger);
197+
if let Err(e) = &update_res {
198+
log_error!(self.logger, "Failed to update channel monitor: {:?}", e);
199+
}
200+
// Even if updating the monitor returns an error, the monitor's state will
201+
// still be changed. So, persist the updated monitor despite the error.
202+
let persist_res = self.persister.update_persisted_channel(funding_txo, &update, orig_monitor);
203+
if let Err(ref e) = persist_res {
204+
log_error!(self.logger, "Failed to persist channel monitor update: {:?}", e);
205+
}
206+
if update_res.is_err() {
207+
Err(ChannelMonitorUpdateErr::PermanentFailure)
208+
} else {
209+
persist_res
210+
}
211+
}
197212
}
198213
}
199214

@@ -206,11 +221,12 @@ impl<ChanSigner: ChannelKeys, C: Deref + Sync + Send, T: Deref + Sync + Send, F:
206221
}
207222
}
208223

209-
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> events::EventsProvider for ChainMonitor<ChanSigner, C, T, F, L>
224+
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> events::EventsProvider for ChainMonitor<ChanSigner, C, T, F, L, P>
210225
where C::Target: chain::Filter,
211226
T::Target: BroadcasterInterface,
212227
F::Target: FeeEstimator,
213228
L::Target: Logger,
229+
P::Target: channelmonitor::Persist<ChanSigner>,
214230
{
215231
fn get_and_clear_pending_events(&self) -> Vec<Event> {
216232
let mut pending_events = Vec::new();

lightning/src/chain/channelmonitor.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ impl Readable for ChannelMonitorUpdate {
9595
}
9696

9797
/// An error enum representing a failure to persist a channel monitor update.
98-
#[derive(Clone)]
98+
#[derive(Clone, Debug)]
9999
pub enum ChannelMonitorUpdateErr {
100100
/// Used to indicate a temporary failure (eg connection to a watchtower or remote backup of
101101
/// our state failed, but is expected to succeed at some point in the future).
@@ -159,7 +159,7 @@ pub enum ChannelMonitorUpdateErr {
159159
/// inconsistent with the ChannelMonitor being called. eg for ChannelMonitor::update_monitor this
160160
/// means you tried to update a monitor for a different channel or the ChannelMonitorUpdate was
161161
/// corrupted.
162-
/// Contains a human-readable error message.
162+
/// Contains a developer-readable error message.
163163
#[derive(Debug)]
164164
pub struct MonitorUpdateError(pub &'static str);
165165

@@ -1161,28 +1161,28 @@ impl<ChanSigner: ChannelKeys> ChannelMonitor<ChanSigner> {
11611161
/// itself.
11621162
///
11631163
/// panics if the given update is not the next update by update_id.
1164-
pub fn update_monitor<B: Deref, L: Deref>(&mut self, mut updates: ChannelMonitorUpdate, broadcaster: &B, logger: &L) -> Result<(), MonitorUpdateError>
1164+
pub fn update_monitor<B: Deref, L: Deref>(&mut self, updates: &ChannelMonitorUpdate, broadcaster: &B, logger: &L) -> Result<(), MonitorUpdateError>
11651165
where B::Target: BroadcasterInterface,
11661166
L::Target: Logger,
11671167
{
11681168
if self.latest_update_id + 1 != updates.update_id {
11691169
panic!("Attempted to apply ChannelMonitorUpdates out of order, check the update_id before passing an update to update_monitor!");
11701170
}
1171-
for update in updates.updates.drain(..) {
1171+
for update in updates.updates.iter() {
11721172
match update {
11731173
ChannelMonitorUpdateStep::LatestHolderCommitmentTXInfo { commitment_tx, htlc_outputs } => {
11741174
if self.lockdown_from_offchain { panic!(); }
1175-
self.provide_latest_holder_commitment_tx_info(commitment_tx, htlc_outputs)?
1175+
self.provide_latest_holder_commitment_tx_info(commitment_tx.clone(), htlc_outputs.clone())?
11761176
},
11771177
ChannelMonitorUpdateStep::LatestCounterpartyCommitmentTXInfo { unsigned_commitment_tx, htlc_outputs, commitment_number, their_revocation_point } =>
1178-
self.provide_latest_counterparty_commitment_tx_info(&unsigned_commitment_tx, htlc_outputs, commitment_number, their_revocation_point, logger),
1178+
self.provide_latest_counterparty_commitment_tx_info(&unsigned_commitment_tx, htlc_outputs.clone(), *commitment_number, *their_revocation_point, logger),
11791179
ChannelMonitorUpdateStep::PaymentPreimage { payment_preimage } =>
11801180
self.provide_payment_preimage(&PaymentHash(Sha256::hash(&payment_preimage.0[..]).into_inner()), &payment_preimage),
11811181
ChannelMonitorUpdateStep::CommitmentSecret { idx, secret } =>
1182-
self.provide_secret(idx, secret)?,
1182+
self.provide_secret(*idx, *secret)?,
11831183
ChannelMonitorUpdateStep::ChannelForceClosed { should_broadcast } => {
11841184
self.lockdown_from_offchain = true;
1185-
if should_broadcast {
1185+
if *should_broadcast {
11861186
self.broadcast_latest_holder_commitment_txn(broadcaster, logger);
11871187
} else {
11881188
log_error!(logger, "You have a toxic holder commitment transaction avaible in channel monitor, read comment in ChannelMonitor::get_latest_holder_commitment_txn to be informed of manual action to take");

0 commit comments

Comments
 (0)