Skip to content

Commit 9c3f3e7

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 ec4715c commit 9c3f3e7

File tree

10 files changed

+143
-76
lines changed

10 files changed

+143
-76
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 7 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,7 @@ 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 monitor = Arc::new(TestChainMonitor::new(broadcast.clone(), logger.clone(), fee_est.clone(), Arc::new(TestPersister{})));
196197

197198
let keys_manager = Arc::new(KeyProvider { node_id: $node_id, rand_bytes_id: atomic::AtomicU8::new(0) });
198199
let mut config = UserConfig::default();
@@ -207,7 +208,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
207208
macro_rules! reload_node {
208209
($ser: expr, $node_id: expr, $old_monitors: expr) => { {
209210
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()));
211+
let chain_monitor = Arc::new(TestChainMonitor::new(broadcast.clone(), logger.clone(), fee_est.clone(), Arc::new(TestPersister{})));
211212

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

fuzz/src/full_stack.rs

Lines changed: 5 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,7 @@ 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 monitor = Arc::new(chainmonitor::ChainMonitor::new(None, broadcast.clone(), Arc::clone(&logger), fee_est.clone(), Arc::new(TestPersister{})));
337338

338339
let keys_manager = Arc::new(KeyProvider { node_secret: our_network_key.clone(), counter: AtomicU64::new(0) });
339340
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: 63 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,47 @@ 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
///
156+
/// Note that we persist the given `ChannelMonitor` while holding the `ChainMonitor`
157+
/// monitors lock.
158+
///
141159
/// [`chain::Filter`]: ../trait.Filter.html
142-
fn add_monitor(&self, outpoint: OutPoint, monitor: ChannelMonitor<ChanSigner>) -> Result<(), MonitorUpdateError> {
160+
fn watch_channel(&self, funding_outpoint: OutPoint, monitor: ChannelMonitor<ChanSigner>) -> Result<(), ChannelMonitorUpdateErr> {
143161
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")),
162+
let entry = match monitors.entry(funding_outpoint) {
163+
hash_map::Entry::Occupied(_) => {
164+
log_error!(self.logger, "Failed to add new channel data: channel monitor for given outpoint is already present");
165+
return Err(ChannelMonitorUpdateErr::PermanentFailure)},
146166
hash_map::Entry::Vacant(e) => e,
147167
};
168+
if let Err(e) = self.persister.persist_new_channel(funding_outpoint, &monitor) {
169+
log_error!(self.logger, "Failed to persist new channel data");
170+
return Err(e);
171+
}
148172
{
149173
let funding_txo = monitor.get_funding_txo();
150174
log_trace!(self.logger, "Got new Channel Monitor for channel {}", log_bytes!(funding_txo.0.to_channel_id()[..]));
@@ -162,38 +186,34 @@ impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> ChainMonit
162186
Ok(())
163187
}
164188

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> {
189+
/// Note that we persist the given `ChannelMonitor` update while holding the
190+
/// `ChainMonitor` monitors lock.
191+
fn update_channel(&self, funding_txo: OutPoint, update: ChannelMonitorUpdate) -> Result<(), ChannelMonitorUpdateErr> {
192+
// Update the monitor that watches the channel referred to by the given outpoint.
167193
let mut monitors = self.monitors.lock().unwrap();
168-
match monitors.get_mut(&outpoint) {
194+
match monitors.get_mut(&funding_txo) {
195+
None => {
196+
log_error!(self.logger, "Failed to update channel monitor: no such monitor registered");
197+
Err(ChannelMonitorUpdateErr::PermanentFailure)
198+
},
169199
Some(orig_monitor) => {
170200
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),
201+
let update_res = orig_monitor.update_monitor(&update, &self.broadcaster, &self.logger);
202+
if let Err(e) = &update_res {
203+
log_error!(self.logger, "Failed to update channel monitor: {:?}", e);
204+
}
205+
// Even if updating the monitor returns an error, the monitor's state will
206+
// still be changed. So, persist the updated monitor despite the error.
207+
let persist_res = self.persister.update_persisted_channel(funding_txo, &update, orig_monitor);
208+
if let Err(ref e) = persist_res {
209+
log_error!(self.logger, "Failed to persist channel monitor update: {:?}", e);
210+
}
211+
if update_res.is_err() {
212+
Err(ChannelMonitorUpdateErr::PermanentFailure)
213+
} else {
214+
persist_res
215+
}
216+
}
197217
}
198218
}
199219

@@ -206,11 +226,12 @@ impl<ChanSigner: ChannelKeys, C: Deref + Sync + Send, T: Deref + Sync + Send, F:
206226
}
207227
}
208228

209-
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref> events::EventsProvider for ChainMonitor<ChanSigner, C, T, F, L>
229+
impl<ChanSigner: ChannelKeys, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> events::EventsProvider for ChainMonitor<ChanSigner, C, T, F, L, P>
210230
where C::Target: chain::Filter,
211231
T::Target: BroadcasterInterface,
212232
F::Target: FeeEstimator,
213233
L::Target: Logger,
234+
P::Target: channelmonitor::Persist<ChanSigner>,
214235
{
215236
fn get_and_clear_pending_events(&self) -> Vec<Event> {
216237
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

@@ -1162,28 +1162,28 @@ impl<ChanSigner: ChannelKeys> ChannelMonitor<ChanSigner> {
11621162
/// itself.
11631163
///
11641164
/// panics if the given update is not the next update by update_id.
1165-
pub fn update_monitor<B: Deref, L: Deref>(&mut self, mut updates: ChannelMonitorUpdate, broadcaster: &B, logger: &L) -> Result<(), MonitorUpdateError>
1165+
pub fn update_monitor<B: Deref, L: Deref>(&mut self, updates: &ChannelMonitorUpdate, broadcaster: &B, logger: &L) -> Result<(), MonitorUpdateError>
11661166
where B::Target: BroadcasterInterface,
11671167
L::Target: Logger,
11681168
{
11691169
if self.latest_update_id + 1 != updates.update_id {
11701170
panic!("Attempted to apply ChannelMonitorUpdates out of order, check the update_id before passing an update to update_monitor!");
11711171
}
1172-
for update in updates.updates.drain(..) {
1172+
for update in updates.updates.iter() {
11731173
match update {
11741174
ChannelMonitorUpdateStep::LatestHolderCommitmentTXInfo { commitment_tx, htlc_outputs } => {
11751175
if self.lockdown_from_offchain { panic!(); }
1176-
self.provide_latest_holder_commitment_tx_info(commitment_tx, htlc_outputs)?
1176+
self.provide_latest_holder_commitment_tx_info(commitment_tx.clone(), htlc_outputs.clone())?
11771177
},
11781178
ChannelMonitorUpdateStep::LatestCounterpartyCommitmentTXInfo { unsigned_commitment_tx, htlc_outputs, commitment_number, their_revocation_point } =>
1179-
self.provide_latest_counterparty_commitment_tx_info(&unsigned_commitment_tx, htlc_outputs, commitment_number, their_revocation_point, logger),
1179+
self.provide_latest_counterparty_commitment_tx_info(&unsigned_commitment_tx, htlc_outputs.clone(), *commitment_number, *their_revocation_point, logger),
11801180
ChannelMonitorUpdateStep::PaymentPreimage { payment_preimage } =>
11811181
self.provide_payment_preimage(&PaymentHash(Sha256::hash(&payment_preimage.0[..]).into_inner()), &payment_preimage),
11821182
ChannelMonitorUpdateStep::CommitmentSecret { idx, secret } =>
1183-
self.provide_secret(idx, secret)?,
1183+
self.provide_secret(*idx, *secret)?,
11841184
ChannelMonitorUpdateStep::ChannelForceClosed { should_broadcast } => {
11851185
self.lockdown_from_offchain = true;
1186-
if should_broadcast {
1186+
if *should_broadcast {
11871187
self.broadcast_latest_holder_commitment_txn(broadcaster, logger);
11881188
} else {
11891189
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)