Skip to content

Commit 69dfbdc

Browse files
Integrate Persist into ChainMonitor.
- The ChainMonitor should: Whenever a new channel is added or updated, these updates should be conveyed to the persister and persisted to disk. Even if the update errors while it's being applied, the updated monitor still needs to be persisted.
1 parent 8dbf1da commit 69dfbdc

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)