mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-03-15 15:39:09 +01:00
Add a next-outbound-HTLC minimum field to chan details and use it
In the coming commits, in order to ensure all routes we generate are usable, we'll start calculating the next-HTLC minimum for our channels and using it in the router. Here we set this up by adding an always-0 field for it in `ChannelDetails` and use it when routing.
This commit is contained in:
parent
52a90577f2
commit
3aa8a1721c
4 changed files with 19 additions and 5 deletions
|
@ -265,6 +265,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
|
|||
balance_msat: 0,
|
||||
outbound_capacity_msat: capacity.saturating_mul(1000),
|
||||
next_outbound_htlc_limit_msat: capacity.saturating_mul(1000),
|
||||
next_outbound_htlc_minimum_msat: 0,
|
||||
inbound_htlc_minimum_msat: None,
|
||||
inbound_htlc_maximum_msat: None,
|
||||
config: None,
|
||||
|
|
|
@ -73,6 +73,8 @@ pub struct AvailableBalances {
|
|||
pub outbound_capacity_msat: u64,
|
||||
/// The maximum value we can assign to the next outbound HTLC
|
||||
pub next_outbound_htlc_limit_msat: u64,
|
||||
/// The minimum value we can assign to the next outbound HTLC
|
||||
pub next_outbound_htlc_minimum_msat: u64,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
|
@ -2762,6 +2764,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
|
|||
0) as u64,
|
||||
outbound_capacity_msat,
|
||||
next_outbound_htlc_limit_msat: available_capacity_msat,
|
||||
next_outbound_htlc_minimum_msat: 0,
|
||||
balance_msat,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1274,8 +1274,14 @@ pub struct ChannelDetails {
|
|||
/// the current state and per-HTLC limit(s). This is intended for use when routing, allowing us
|
||||
/// to use a limit as close as possible to the HTLC limit we can currently send.
|
||||
///
|
||||
/// See also [`ChannelDetails::balance_msat`] and [`ChannelDetails::outbound_capacity_msat`].
|
||||
/// See also [`ChannelDetails::next_outbound_htlc_minimum_msat`],
|
||||
/// [`ChannelDetails::balance_msat`], and [`ChannelDetails::outbound_capacity_msat`].
|
||||
pub next_outbound_htlc_limit_msat: u64,
|
||||
/// The minimum value for sending a single HTLC to the remote peer. This is the equivalent of
|
||||
/// [`ChannelDetails::next_outbound_htlc_limit_msat`] but represents a lower-bound, rather than
|
||||
/// an upper-bound. This is intended for use when routing, allowing us to ensure we pick a
|
||||
/// route which is valid.
|
||||
pub next_outbound_htlc_minimum_msat: u64,
|
||||
/// The available inbound capacity for the remote peer to send HTLCs to us. This does not
|
||||
/// include any pending HTLCs which are not yet fully resolved (and, thus, whose balance is not
|
||||
/// available for inclusion in new inbound HTLCs).
|
||||
|
@ -1395,6 +1401,7 @@ impl ChannelDetails {
|
|||
inbound_capacity_msat: balance.inbound_capacity_msat,
|
||||
outbound_capacity_msat: balance.outbound_capacity_msat,
|
||||
next_outbound_htlc_limit_msat: balance.next_outbound_htlc_limit_msat,
|
||||
next_outbound_htlc_minimum_msat: balance.next_outbound_htlc_minimum_msat,
|
||||
user_channel_id: channel.get_user_id(),
|
||||
confirmations_required: channel.minimum_depth(),
|
||||
confirmations: Some(channel.get_funding_tx_confirmations(best_block_height)),
|
||||
|
@ -6951,10 +6958,9 @@ impl Writeable for ChannelDetails {
|
|||
(14, user_channel_id_low, required),
|
||||
(16, self.balance_msat, required),
|
||||
(18, self.outbound_capacity_msat, required),
|
||||
// Note that by the time we get past the required read above, outbound_capacity_msat will be
|
||||
// filled in, so we can safely unwrap it here.
|
||||
(19, self.next_outbound_htlc_limit_msat, (default_value, outbound_capacity_msat.0.unwrap() as u64)),
|
||||
(19, self.next_outbound_htlc_limit_msat, required),
|
||||
(20, self.inbound_capacity_msat, required),
|
||||
(21, self.next_outbound_htlc_minimum_msat, required),
|
||||
(22, self.confirmations_required, option),
|
||||
(24, self.force_close_spend_delay, option),
|
||||
(26, self.is_outbound, required),
|
||||
|
@ -6991,6 +6997,7 @@ impl Readable for ChannelDetails {
|
|||
// filled in, so we can safely unwrap it here.
|
||||
(19, next_outbound_htlc_limit_msat, (default_value, outbound_capacity_msat.0.unwrap() as u64)),
|
||||
(20, inbound_capacity_msat, required),
|
||||
(21, next_outbound_htlc_minimum_msat, (default_value, 0)),
|
||||
(22, confirmations_required, option),
|
||||
(24, force_close_spend_delay, option),
|
||||
(26, is_outbound, required),
|
||||
|
@ -7024,6 +7031,7 @@ impl Readable for ChannelDetails {
|
|||
balance_msat: balance_msat.0.unwrap(),
|
||||
outbound_capacity_msat: outbound_capacity_msat.0.unwrap(),
|
||||
next_outbound_htlc_limit_msat: next_outbound_htlc_limit_msat.0.unwrap(),
|
||||
next_outbound_htlc_minimum_msat: next_outbound_htlc_minimum_msat.0.unwrap(),
|
||||
inbound_capacity_msat: inbound_capacity_msat.0.unwrap(),
|
||||
confirmations_required,
|
||||
confirmations,
|
||||
|
|
|
@ -929,7 +929,7 @@ impl<'a> CandidateRouteHop<'a> {
|
|||
|
||||
fn htlc_minimum_msat(&self) -> u64 {
|
||||
match self {
|
||||
CandidateRouteHop::FirstHop { .. } => 0,
|
||||
CandidateRouteHop::FirstHop { details } => details.next_outbound_htlc_minimum_msat,
|
||||
CandidateRouteHop::PublicHop { info, .. } => info.direction().htlc_minimum_msat,
|
||||
CandidateRouteHop::PrivateHop { hint } => hint.htlc_minimum_msat.unwrap_or(0),
|
||||
}
|
||||
|
@ -2460,6 +2460,7 @@ mod tests {
|
|||
balance_msat: 0,
|
||||
outbound_capacity_msat,
|
||||
next_outbound_htlc_limit_msat: outbound_capacity_msat,
|
||||
next_outbound_htlc_minimum_msat: 0,
|
||||
inbound_capacity_msat: 42,
|
||||
unspendable_punishment_reserve: None,
|
||||
confirmations_required: None,
|
||||
|
@ -6121,6 +6122,7 @@ pub(crate) mod bench_utils {
|
|||
user_channel_id: 0,
|
||||
balance_msat: 10_000_000_000,
|
||||
outbound_capacity_msat: 10_000_000_000,
|
||||
next_outbound_htlc_minimum_msat: 0,
|
||||
next_outbound_htlc_limit_msat: 10_000_000_000,
|
||||
inbound_capacity_msat: 0,
|
||||
unspendable_punishment_reserve: None,
|
||||
|
|
Loading…
Add table
Reference in a new issue