Skip to content

Commit 3ff94fa

Browse files
committed
Move Channel::get_feerate_sat_per_1000_weight and other methods
This is one of a series of commits to make sure methods are moved by chunks so they are easily reviewable in diffs. Unfortunately they are not purely move-only as fields to be updated for things to compile, but these should be quite clear. This commit also uses the `context` field where needed for compilation and tests to pass due to the above change. f s/tarcontext.get_/target_/
1 parent 0d739ee commit 3ff94fa

File tree

4 files changed

+42
-42
lines changed

4 files changed

+42
-42
lines changed

lightning/src/ln/channel.rs

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1341,6 +1341,33 @@ impl<Signer: ChannelSigner> ChannelContext<Signer> {
13411341
fn counterparty_funding_pubkey(&self) -> &PublicKey {
13421342
&self.get_counterparty_pubkeys().funding_pubkey
13431343
}
1344+
1345+
pub fn get_feerate_sat_per_1000_weight(&self) -> u32 {
1346+
self.feerate_per_kw
1347+
}
1348+
1349+
pub fn get_dust_buffer_feerate(&self, outbound_feerate_update: Option<u32>) -> u32 {
1350+
// When calculating our exposure to dust HTLCs, we assume that the channel feerate
1351+
// may, at any point, increase by at least 10 sat/vB (i.e 2530 sat/kWU) or 25%,
1352+
// whichever is higher. This ensures that we aren't suddenly exposed to significantly
1353+
// more dust balance if the feerate increases when we have several HTLCs pending
1354+
// which are near the dust limit.
1355+
let mut feerate_per_kw = self.feerate_per_kw;
1356+
// If there's a pending update fee, use it to ensure we aren't under-estimating
1357+
// potential feerate updates coming soon.
1358+
if let Some((feerate, _)) = self.pending_update_fee {
1359+
feerate_per_kw = cmp::max(feerate_per_kw, feerate);
1360+
}
1361+
if let Some(feerate) = outbound_feerate_update {
1362+
feerate_per_kw = cmp::max(feerate_per_kw, feerate);
1363+
}
1364+
cmp::max(2530, feerate_per_kw * 1250 / 1000)
1365+
}
1366+
1367+
/// Get forwarding information for the counterparty.
1368+
pub fn counterparty_forwarding_info(&self) -> Option<CounterpartyForwardingInfo> {
1369+
self.counterparty_forwarding_info.clone()
1370+
}
13441371
}
13451372

13461373
// Internal utility functions for channels
@@ -2920,7 +2947,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
29202947
let (htlc_timeout_dust_limit, htlc_success_dust_limit) = if self.context.opt_anchors() {
29212948
(0, 0)
29222949
} else {
2923-
let dust_buffer_feerate = self.get_dust_buffer_feerate(outbound_feerate_update) as u64;
2950+
let dust_buffer_feerate = self.context.get_dust_buffer_feerate(outbound_feerate_update) as u64;
29242951
(dust_buffer_feerate * htlc_timeout_tx_weight(false) / 1000,
29252952
dust_buffer_feerate * htlc_success_tx_weight(false) / 1000)
29262953
};
@@ -2952,7 +2979,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
29522979
let (htlc_timeout_dust_limit, htlc_success_dust_limit) = if self.context.opt_anchors() {
29532980
(0, 0)
29542981
} else {
2955-
let dust_buffer_feerate = self.get_dust_buffer_feerate(outbound_feerate_update) as u64;
2982+
let dust_buffer_feerate = self.context.get_dust_buffer_feerate(outbound_feerate_update) as u64;
29562983
(dust_buffer_feerate * htlc_timeout_tx_weight(false) / 1000,
29572984
dust_buffer_feerate * htlc_success_tx_weight(false) / 1000)
29582985
};
@@ -3075,7 +3102,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
30753102
let (htlc_success_dust_limit, htlc_timeout_dust_limit) = if self.context.opt_anchors() {
30763103
(self.context.counterparty_dust_limit_satoshis, self.context.holder_dust_limit_satoshis)
30773104
} else {
3078-
let dust_buffer_feerate = self.get_dust_buffer_feerate(None) as u64;
3105+
let dust_buffer_feerate = self.context.get_dust_buffer_feerate(None) as u64;
30793106
(self.context.counterparty_dust_limit_satoshis + dust_buffer_feerate * htlc_success_tx_weight(false) / 1000,
30803107
self.context.holder_dust_limit_satoshis + dust_buffer_feerate * htlc_timeout_tx_weight(false) / 1000)
30813108
};
@@ -3383,7 +3410,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
33833410
let (htlc_timeout_dust_limit, htlc_success_dust_limit) = if self.context.opt_anchors() {
33843411
(0, 0)
33853412
} else {
3386-
let dust_buffer_feerate = self.get_dust_buffer_feerate(None) as u64;
3413+
let dust_buffer_feerate = self.context.get_dust_buffer_feerate(None) as u64;
33873414
(dust_buffer_feerate * htlc_timeout_tx_weight(false) / 1000,
33883415
dust_buffer_feerate * htlc_success_tx_weight(false) / 1000)
33893416
};
@@ -4394,7 +4421,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
43944421
return Err(ChannelError::Close("Peer sent update_fee when we needed a channel_reestablish".to_owned()));
43954422
}
43964423
Channel::<Signer>::check_remote_fee(fee_estimator, msg.feerate_per_kw, Some(self.context.feerate_per_kw), logger)?;
4397-
let feerate_over_dust_buffer = msg.feerate_per_kw > self.get_dust_buffer_feerate(None);
4424+
let feerate_over_dust_buffer = msg.feerate_per_kw > self.context.get_dust_buffer_feerate(None);
43984425

43994426
self.context.pending_update_fee = Some((msg.feerate_per_kw, FeeUpdateState::RemoteAnnounced));
44004427
self.context.update_time_counter += 1;
@@ -5126,28 +5153,6 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
51265153
})
51275154
}
51285155

5129-
pub fn get_feerate_sat_per_1000_weight(&self) -> u32 {
5130-
self.context.feerate_per_kw
5131-
}
5132-
5133-
pub fn get_dust_buffer_feerate(&self, outbound_feerate_update: Option<u32>) -> u32 {
5134-
// When calculating our exposure to dust HTLCs, we assume that the channel feerate
5135-
// may, at any point, increase by at least 10 sat/vB (i.e 2530 sat/kWU) or 25%,
5136-
// whichever is higher. This ensures that we aren't suddenly exposed to significantly
5137-
// more dust balance if the feerate increases when we have several HTLCs pending
5138-
// which are near the dust limit.
5139-
let mut feerate_per_kw = self.context.feerate_per_kw;
5140-
// If there's a pending update fee, use it to ensure we aren't under-estimating
5141-
// potential feerate updates coming soon.
5142-
if let Some((feerate, _)) = self.context.pending_update_fee {
5143-
feerate_per_kw = cmp::max(feerate_per_kw, feerate);
5144-
}
5145-
if let Some(feerate) = outbound_feerate_update {
5146-
feerate_per_kw = cmp::max(feerate_per_kw, feerate);
5147-
}
5148-
cmp::max(2530, feerate_per_kw * 1250 / 1000)
5149-
}
5150-
51515156
pub fn get_cur_holder_commitment_transaction_number(&self) -> u64 {
51525157
self.context.cur_holder_commitment_transaction_number + 1
51535158
}
@@ -6247,11 +6252,6 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
62476252
}
62486253
}
62496254

6250-
/// Get forwarding information for the counterparty.
6251-
pub fn counterparty_forwarding_info(&self) -> Option<CounterpartyForwardingInfo> {
6252-
self.context.counterparty_forwarding_info.clone()
6253-
}
6254-
62556255
pub fn channel_update(&mut self, msg: &msgs::ChannelUpdate) -> Result<(), ChannelError> {
62566256
if msg.contents.htlc_minimum_msat >= self.context.channel_value_satoshis * 1000 {
62576257
return Err(ChannelError::Close("Minimum htlc value is greater than channel value".to_string()));
@@ -7735,7 +7735,7 @@ mod tests {
77357735
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&feeest, &&keys_provider, &&keys_provider, node_b_node_id, &channelmanager::provided_init_features(&config), 10000000, 100000, 42, &config, 0, 42).unwrap();
77367736
assert!(node_a_chan.context.counterparty_forwarding_info.is_none());
77377737
assert_eq!(node_a_chan.context.holder_htlc_minimum_msat, 1); // the default
7738-
assert!(node_a_chan.counterparty_forwarding_info().is_none());
7738+
assert!(node_a_chan.context.counterparty_forwarding_info().is_none());
77397739

77407740
// Make sure that receiving a channel update will update the Channel as expected.
77417741
let update = ChannelUpdate {
@@ -7758,7 +7758,7 @@ mod tests {
77587758
// The counterparty can send an update with a higher minimum HTLC, but that shouldn't
77597759
// change our official htlc_minimum_msat.
77607760
assert_eq!(node_a_chan.context.holder_htlc_minimum_msat, 1);
7761-
match node_a_chan.counterparty_forwarding_info() {
7761+
match node_a_chan.context.counterparty_forwarding_info() {
77627762
Some(info) => {
77637763
assert_eq!(info.cltv_expiry_delta, 100);
77647764
assert_eq!(info.fee_base_msat, 110);

lightning/src/ln/channelmanager.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,7 +1478,7 @@ impl ChannelDetails {
14781478
node_id: channel.context.get_counterparty_node_id(),
14791479
features: latest_features,
14801480
unspendable_punishment_reserve: to_remote_reserve_satoshis,
1481-
forwarding_info: channel.counterparty_forwarding_info(),
1481+
forwarding_info: channel.context.counterparty_forwarding_info(),
14821482
// Ensures that we have actually received the `htlc_minimum_msat` value
14831483
// from the counterparty through the `OpenChannel` or `AcceptChannel`
14841484
// message (as they are always the first message from the counterparty).
@@ -1496,7 +1496,7 @@ impl ChannelDetails {
14961496
outbound_scid_alias: if channel.context.is_usable() { Some(channel.context.outbound_scid_alias()) } else { None },
14971497
inbound_scid_alias: channel.context.latest_inbound_scid_alias(),
14981498
channel_value_satoshis: channel.context.get_value_satoshis(),
1499-
feerate_sat_per_1000_weight: Some(channel.get_feerate_sat_per_1000_weight()),
1499+
feerate_sat_per_1000_weight: Some(channel.context.get_feerate_sat_per_1000_weight()),
15001500
unspendable_punishment_reserve: to_self_reserve_satoshis,
15011501
balance_msat: balance.balance_msat,
15021502
inbound_capacity_msat: balance.inbound_capacity_msat,
@@ -3945,18 +3945,18 @@ where
39453945
fn update_channel_fee(&self, chan_id: &[u8; 32], chan: &mut Channel<<SP::Target as SignerProvider>::Signer>, new_feerate: u32) -> NotifyOption {
39463946
if !chan.context.is_outbound() { return NotifyOption::SkipPersist; }
39473947
// If the feerate has decreased by less than half, don't bother
3948-
if new_feerate <= chan.get_feerate_sat_per_1000_weight() && new_feerate * 2 > chan.get_feerate_sat_per_1000_weight() {
3948+
if new_feerate <= chan.context.get_feerate_sat_per_1000_weight() && new_feerate * 2 > chan.context.get_feerate_sat_per_1000_weight() {
39493949
log_trace!(self.logger, "Channel {} does not qualify for a feerate change from {} to {}.",
3950-
log_bytes!(chan_id[..]), chan.get_feerate_sat_per_1000_weight(), new_feerate);
3950+
log_bytes!(chan_id[..]), chan.context.get_feerate_sat_per_1000_weight(), new_feerate);
39513951
return NotifyOption::SkipPersist;
39523952
}
39533953
if !chan.context.is_live() {
39543954
log_trace!(self.logger, "Channel {} does not qualify for a feerate change from {} to {} as it cannot currently be updated (probably the peer is disconnected).",
3955-
log_bytes!(chan_id[..]), chan.get_feerate_sat_per_1000_weight(), new_feerate);
3955+
log_bytes!(chan_id[..]), chan.context.get_feerate_sat_per_1000_weight(), new_feerate);
39563956
return NotifyOption::SkipPersist;
39573957
}
39583958
log_trace!(self.logger, "Channel {} qualifies for a feerate change from {} to {}.",
3959-
log_bytes!(chan_id[..]), chan.get_feerate_sat_per_1000_weight(), new_feerate);
3959+
log_bytes!(chan_id[..]), chan.context.get_feerate_sat_per_1000_weight(), new_feerate);
39603960

39613961
chan.queue_update_fee(new_feerate, &self.logger);
39623962
NotifyOption::DoPersist

lightning/src/ln/functional_test_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,7 @@ macro_rules! get_feerate {
790790
let mut per_peer_state_lock;
791791
let mut peer_state_lock;
792792
let chan = get_channel_ref!($node, $counterparty_node, per_peer_state_lock, peer_state_lock, $channel_id);
793-
chan.get_feerate_sat_per_1000_weight()
793+
chan.context.get_feerate_sat_per_1000_weight()
794794
}
795795
}
796796
}

lightning/src/ln/functional_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9628,7 +9628,7 @@ fn do_test_max_dust_htlc_exposure(dust_outbound_balance: bool, exposure_breach_e
96289628
let per_peer_state = nodes[0].node.per_peer_state.read().unwrap();
96299629
let chan_lock = per_peer_state.get(&nodes[1].node.get_our_node_id()).unwrap().lock().unwrap();
96309630
let chan = chan_lock.channel_by_id.get(&channel_id).unwrap();
9631-
chan.get_dust_buffer_feerate(None) as u64
9631+
chan.context.get_dust_buffer_feerate(None) as u64
96329632
};
96339633
let dust_outbound_htlc_on_holder_tx_msat: u64 = (dust_buffer_feerate * htlc_timeout_tx_weight(opt_anchors) / 1000 + open_channel.dust_limit_satoshis - 1) * 1000;
96349634
let dust_outbound_htlc_on_holder_tx: u64 = config.channel_config.max_dust_htlc_exposure_msat / dust_outbound_htlc_on_holder_tx_msat;

0 commit comments

Comments
 (0)