Skip to content

Commit 834f4d7

Browse files
committed
Consider anchor outputs value on channel open
We should make sure the funding amount of a channel can cover all its associated costs, including the value of anchor outputs, to make sure that it is actually usable once "opened".
1 parent 297390a commit 834f4d7

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

lightning/src/ln/channel.rs

+12-7
Original file line numberDiff line numberDiff line change
@@ -5739,16 +5739,16 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
57395739
let channel_type = Self::get_initial_channel_type(&config, their_features);
57405740
debug_assert!(channel_type.is_subset(&channelmanager::provided_channel_type_features(&config)));
57415741

5742-
let commitment_conf_target = if channel_type.supports_anchors_zero_fee_htlc_tx() {
5743-
ConfirmationTarget::AnchorChannelFee
5742+
let (commitment_conf_target, anchor_outputs_value_msat) = if channel_type.supports_anchors_zero_fee_htlc_tx() {
5743+
(ConfirmationTarget::AnchorChannelFee, ANCHOR_OUTPUT_VALUE_SATOSHI * 2 * 1000)
57445744
} else {
5745-
ConfirmationTarget::NonAnchorChannelFee
5745+
(ConfirmationTarget::NonAnchorChannelFee, 0)
57465746
};
57475747
let commitment_feerate = fee_estimator.bounded_sat_per_1000_weight(commitment_conf_target);
57485748

57495749
let value_to_self_msat = channel_value_satoshis * 1000 - push_msat;
57505750
let commitment_tx_fee = commit_tx_fee_msat(commitment_feerate, MIN_AFFORDABLE_HTLC_COUNT, &channel_type);
5751-
if value_to_self_msat < commitment_tx_fee {
5751+
if value_to_self_msat.saturating_sub(anchor_outputs_value_msat) < commitment_tx_fee {
57525752
return Err(APIError::APIMisuseError{ err: format!("Funding amount ({}) can't even pay fee for initial commitment transaction fee of {}.", value_to_self_msat / 1000, commitment_tx_fee / 1000) });
57535753
}
57545754

@@ -6365,13 +6365,18 @@ impl<SP: Deref> InboundV1Channel<SP> where SP::Target: SignerProvider {
63656365

63666366
// check if the funder's amount for the initial commitment tx is sufficient
63676367
// for full fee payment plus a few HTLCs to ensure the channel will be useful.
6368+
let anchor_outputs_value = if channel_type.supports_anchors_zero_fee_htlc_tx() {
6369+
ANCHOR_OUTPUT_VALUE_SATOSHI * 2
6370+
} else {
6371+
0
6372+
};
63686373
let funders_amount_msat = msg.funding_satoshis * 1000 - msg.push_msat;
63696374
let commitment_tx_fee = commit_tx_fee_msat(msg.feerate_per_kw, MIN_AFFORDABLE_HTLC_COUNT, &channel_type) / 1000;
6370-
if funders_amount_msat / 1000 < commitment_tx_fee {
6371-
return Err(ChannelError::Close(format!("Funding amount ({} sats) can't even pay fee for initial commitment transaction fee of {} sats.", funders_amount_msat / 1000, commitment_tx_fee)));
6375+
if (funders_amount_msat / 1000).saturating_sub(anchor_outputs_value) < commitment_tx_fee {
6376+
return Err(ChannelError::Close(format!("Funding amount ({} sats) can't even pay fee for initial commitment transaction fee of {} sats.", (funders_amount_msat / 1000).saturating_sub(anchor_outputs_value), commitment_tx_fee)));
63726377
}
63736378

6374-
let to_remote_satoshis = funders_amount_msat / 1000 - commitment_tx_fee;
6379+
let to_remote_satoshis = funders_amount_msat / 1000 - commitment_tx_fee - anchor_outputs_value;
63756380
// While it's reasonable for us to not meet the channel reserve initially (if they don't
63766381
// want to push much to us), our counterparty should always have more than our reserve.
63776382
if to_remote_satoshis < holder_selected_channel_reserve_satoshis {

0 commit comments

Comments
 (0)