Skip to content

Commit

Permalink
Merge pull request #1062 from danielgranhao/05-08-2024-fix-inbound-li…
Browse files Browse the repository at this point in the history
…quidity-msats

Fix `inbound_liquidity_msats`
  • Loading branch information
roeierez authored Aug 8, 2024
2 parents 14a59b5 + c51d212 commit 74a8208
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 20 deletions.
3 changes: 2 additions & 1 deletion libs/sdk-bindings/src/breez_sdk.udl
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,8 @@ dictionary NodeState {
u64 max_single_payment_amount_msat;
u64 max_chan_reserve_msats;
sequence<string> connected_peers;
u64 inbound_liquidity_msats;
u64 max_receivable_single_payment_amount_msat;
u64 total_inbound_liquidity_msats;
};

dictionary ConfigureNodeRequest {
Expand Down
8 changes: 5 additions & 3 deletions libs/sdk-core/src/breez_services.rs
Original file line number Diff line number Diff line change
Expand Up @@ -711,7 +711,7 @@ impl BreezServices {

let node_state = self.node_info()?;
let fee_msat = req.amount_msat.map(|req_amount_msat| {
match node_state.inbound_liquidity_msats >= req_amount_msat {
match node_state.max_receivable_single_payment_amount_msat >= req_amount_msat {
// In case we have enough inbound liquidity we return zero fee.
true => 0,
// Otherwise we need to calculate the fee for opening a new channel.
Expand Down Expand Up @@ -2476,7 +2476,8 @@ impl Receiver for PaymentReceiver {
let mut channel_fees_msat = None;

// check if we need to open channel
let open_channel_needed = node_state.inbound_liquidity_msats < req.amount_msat;
let open_channel_needed =
node_state.max_receivable_single_payment_amount_msat < req.amount_msat;
if open_channel_needed {
info!("We need to open a channel");

Expand Down Expand Up @@ -3280,7 +3281,8 @@ pub(crate) mod tests {
max_single_payment_amount_msat: 1_000,
max_chan_reserve_msats: 0,
connected_peers: vec!["1111".to_string()],
inbound_liquidity_msats: 2_000,
max_receivable_single_payment_amount_msat: 2_000,
total_inbound_liquidity_msats: 10_000,
}
}
}
7 changes: 6 additions & 1 deletion libs/sdk-core/src/bridge_generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2058,7 +2058,12 @@ impl support::IntoDart for NodeState {
.into_dart(),
self.max_chan_reserve_msats.into_into_dart().into_dart(),
self.connected_peers.into_into_dart().into_dart(),
self.inbound_liquidity_msats.into_into_dart().into_dart(),
self.max_receivable_single_payment_amount_msat
.into_into_dart()
.into_dart(),
self.total_inbound_liquidity_msats
.into_into_dart()
.into_dart(),
]
.into_dart()
}
Expand Down
5 changes: 4 additions & 1 deletion libs/sdk-core/src/greenlight/node_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -943,6 +943,7 @@ impl NodeAPI for Greenlight {
// calculate payment limits and inbound liquidity
let mut max_payable: u64 = 0;
let mut max_receivable_single_channel: u64 = 0;
let mut total_inbound_liquidity_msats: u64 = 0;
opened_channels.iter().try_for_each(|c| -> Result<()> {
max_payable += c
.spendable_msat
Expand All @@ -954,6 +955,7 @@ impl NodeAPI for Greenlight {
.as_ref()
.map(|a| a.msat)
.unwrap_or_default();
total_inbound_liquidity_msats += receivable_amount;
if receivable_amount > max_receivable_single_channel {
max_receivable_single_channel = receivable_amount;
}
Expand All @@ -976,7 +978,8 @@ impl NodeAPI for Greenlight {
max_single_payment_amount_msat: MAX_PAYMENT_AMOUNT_MSAT,
max_chan_reserve_msats: channels_balance - min(max_payable, channels_balance),
connected_peers,
inbound_liquidity_msats: max_receivable_single_channel,
max_receivable_single_payment_amount_msat: max_receivable_single_channel,
total_inbound_liquidity_msats,
};
let mut htlc_list: Vec<Htlc> = Vec::new();
for channel in all_channel_models.clone() {
Expand Down
7 changes: 6 additions & 1 deletion libs/sdk-core/src/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,12 @@ pub struct NodeState {
pub max_single_payment_amount_msat: u64,
pub max_chan_reserve_msats: u64,
pub connected_peers: Vec<String>,
pub inbound_liquidity_msats: u64,

/// Maximum receivable in a single payment without requiring a new channel open.
pub max_receivable_single_payment_amount_msat: u64,

/// Total receivable on all available channels
pub total_inbound_liquidity_msats: u64,
}

/// Internal response to a [crate::node_api::NodeAPI::pull_changed] call
Expand Down
15 changes: 11 additions & 4 deletions libs/sdk-flutter/lib/bridge_generated.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1119,7 +1119,12 @@ class NodeState {
final int maxSinglePaymentAmountMsat;
final int maxChanReserveMsats;
final List<String> connectedPeers;
final int inboundLiquidityMsats;

/// Maximum receivable in a single payment without requiring a new channel open.
final int maxReceivableSinglePaymentAmountMsat;

/// Total receivable on all available channels
final int totalInboundLiquidityMsats;

const NodeState({
required this.id,
Expand All @@ -1133,7 +1138,8 @@ class NodeState {
required this.maxSinglePaymentAmountMsat,
required this.maxChanReserveMsats,
required this.connectedPeers,
required this.inboundLiquidityMsats,
required this.maxReceivableSinglePaymentAmountMsat,
required this.totalInboundLiquidityMsats,
});
}

Expand Down Expand Up @@ -3749,7 +3755,7 @@ class BreezSdkCoreImpl implements BreezSdkCore {

NodeState _wire2api_node_state(dynamic raw) {
final arr = raw as List<dynamic>;
if (arr.length != 12) throw Exception('unexpected arr length: expect 12 but see ${arr.length}');
if (arr.length != 13) throw Exception('unexpected arr length: expect 13 but see ${arr.length}');
return NodeState(
id: _wire2api_String(arr[0]),
blockHeight: _wire2api_u32(arr[1]),
Expand All @@ -3762,7 +3768,8 @@ class BreezSdkCoreImpl implements BreezSdkCore {
maxSinglePaymentAmountMsat: _wire2api_u64(arr[8]),
maxChanReserveMsats: _wire2api_u64(arr[9]),
connectedPeers: _wire2api_StringList(arr[10]),
inboundLiquidityMsats: _wire2api_u64(arr[11]),
maxReceivableSinglePaymentAmountMsat: _wire2api_u64(arr[11]),
totalInboundLiquidityMsats: _wire2api_u64(arr[12]),
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1755,7 +1755,8 @@ fun asNodeState(nodeState: ReadableMap): NodeState? {
"maxSinglePaymentAmountMsat",
"maxChanReserveMsats",
"connectedPeers",
"inboundLiquidityMsats",
"maxReceivableSinglePaymentAmountMsat",
"totalInboundLiquidityMsats",
),
)
) {
Expand All @@ -1772,7 +1773,8 @@ fun asNodeState(nodeState: ReadableMap): NodeState? {
val maxSinglePaymentAmountMsat = nodeState.getDouble("maxSinglePaymentAmountMsat").toULong()
val maxChanReserveMsats = nodeState.getDouble("maxChanReserveMsats").toULong()
val connectedPeers = nodeState.getArray("connectedPeers")?.let { asStringList(it) }!!
val inboundLiquidityMsats = nodeState.getDouble("inboundLiquidityMsats").toULong()
val maxReceivableSinglePaymentAmountMsat = nodeState.getDouble("maxReceivableSinglePaymentAmountMsat").toULong()
val totalInboundLiquidityMsats = nodeState.getDouble("totalInboundLiquidityMsats").toULong()
return NodeState(
id,
blockHeight,
Expand All @@ -1785,7 +1787,8 @@ fun asNodeState(nodeState: ReadableMap): NodeState? {
maxSinglePaymentAmountMsat,
maxChanReserveMsats,
connectedPeers,
inboundLiquidityMsats,
maxReceivableSinglePaymentAmountMsat,
totalInboundLiquidityMsats,
)
}

Expand All @@ -1802,7 +1805,8 @@ fun readableMapOf(nodeState: NodeState): ReadableMap =
"maxSinglePaymentAmountMsat" to nodeState.maxSinglePaymentAmountMsat,
"maxChanReserveMsats" to nodeState.maxChanReserveMsats,
"connectedPeers" to readableArrayOf(nodeState.connectedPeers),
"inboundLiquidityMsats" to nodeState.inboundLiquidityMsats,
"maxReceivableSinglePaymentAmountMsat" to nodeState.maxReceivableSinglePaymentAmountMsat,
"totalInboundLiquidityMsats" to nodeState.totalInboundLiquidityMsats,
)

fun asNodeStateList(arr: ReadableArray): List<NodeState> {
Expand Down
13 changes: 9 additions & 4 deletions libs/sdk-react-native/ios/BreezSDKMapper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2021,8 +2021,11 @@ enum BreezSDKMapper {
guard let connectedPeers = nodeState["connectedPeers"] as? [String] else {
throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "connectedPeers", typeName: "NodeState"))
}
guard let inboundLiquidityMsats = nodeState["inboundLiquidityMsats"] as? UInt64 else {
throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "inboundLiquidityMsats", typeName: "NodeState"))
guard let maxReceivableSinglePaymentAmountMsat = nodeState["maxReceivableSinglePaymentAmountMsat"] as? UInt64 else {
throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "maxReceivableSinglePaymentAmountMsat", typeName: "NodeState"))
}
guard let totalInboundLiquidityMsats = nodeState["totalInboundLiquidityMsats"] as? UInt64 else {
throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "totalInboundLiquidityMsats", typeName: "NodeState"))
}

return NodeState(
Expand All @@ -2037,7 +2040,8 @@ enum BreezSDKMapper {
maxSinglePaymentAmountMsat: maxSinglePaymentAmountMsat,
maxChanReserveMsats: maxChanReserveMsats,
connectedPeers: connectedPeers,
inboundLiquidityMsats: inboundLiquidityMsats
maxReceivableSinglePaymentAmountMsat: maxReceivableSinglePaymentAmountMsat,
totalInboundLiquidityMsats: totalInboundLiquidityMsats
)
}

Expand All @@ -2054,7 +2058,8 @@ enum BreezSDKMapper {
"maxSinglePaymentAmountMsat": nodeState.maxSinglePaymentAmountMsat,
"maxChanReserveMsats": nodeState.maxChanReserveMsats,
"connectedPeers": nodeState.connectedPeers,
"inboundLiquidityMsats": nodeState.inboundLiquidityMsats,
"maxReceivableSinglePaymentAmountMsat": nodeState.maxReceivableSinglePaymentAmountMsat,
"totalInboundLiquidityMsats": nodeState.totalInboundLiquidityMsats,
]
}

Expand Down
3 changes: 2 additions & 1 deletion libs/sdk-react-native/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,8 @@ export interface NodeState {
maxSinglePaymentAmountMsat: number
maxChanReserveMsats: number
connectedPeers: string[]
inboundLiquidityMsats: number
maxReceivableSinglePaymentAmountMsat: number
totalInboundLiquidityMsats: number
}

export interface OnchainPaymentLimitsResponse {
Expand Down

0 comments on commit 74a8208

Please sign in to comment.