Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dual funding extension, needed also for splicing: begin_interactive_funding_tx_construction #3443

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

optout21
Copy link
Contributor

@optout21 optout21 commented Dec 5, 2024

Add these two methods to the current dual funding implementation:
begin_interactive_funding_tx_construction()
calculate_change_output_value()

These changes are in the pipeline for dual funding implementation, and needed for dual funding negotiation during splicing, in #3444 .

@dunxen
Copy link
Contributor

dunxen commented Dec 5, 2024

Makes sense to get this this in so it can unblock you as #2302 will still take time. Is this much different from what is in #2302/any of the splicing PRs?

@jkczyz jkczyz self-requested a review December 5, 2024 15:22
@optout21
Copy link
Contributor Author

optout21 commented Dec 5, 2024

TODO: I need to run a comparison against current version of dual funding WIP

@optout21 optout21 force-pushed the splicing-dual-reqs2 branch 2 times, most recently from 4f7e41b to 0448cf9 Compare December 6, 2024 15:20
@optout21
Copy link
Contributor Author

optout21 commented Dec 6, 2024

Did the following:

  • break up maybe_add_funding_change_output() into two: one part for determining if a change needs to be added, and the other to actually add it
  • moved need_to_add_funding_change_output() into interactivetxs.rs
  • added unit tests for need_to_add_funding_change_output()

@optout21 optout21 changed the title [Draft] Dual funding extension needed for Splicing, begin_interactive_funding_tx_construction Dual funding extension needed for Splicing, begin_interactive_funding_tx_construction Dec 6, 2024
@optout21 optout21 marked this pull request as ready for review December 6, 2024 15:23
@optout21 optout21 changed the title Dual funding extension needed for Splicing, begin_interactive_funding_tx_construction Dual funding extension needed also for splicing: begin_interactive_funding_tx_construction Dec 6, 2024
@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from 0448cf9 to 0e47819 Compare December 6, 2024 15:43
lightning/src/ln/interactivetxs.rs Outdated Show resolved Hide resolved
lightning/src/ln/interactivetxs.rs Show resolved Hide resolved
lightning/src/ln/interactivetxs.rs Outdated Show resolved Hide resolved
lightning/src/ln/interactivetxs.rs Show resolved Hide resolved
@optout21 optout21 requested a review from dunxen December 6, 2024 16:39
@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from 48e0518 to 9e44d2b Compare December 6, 2024 16:41
lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from 9e44d2b to b7e7a34 Compare December 9, 2024 07:20
@optout21 optout21 requested a review from dunxen December 9, 2024 07:22
Copy link
Contributor

@jkczyz jkczyz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you update the commit message with the rationale for the change? (i.e., specifically how it will be used in splicing)

lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from 70fde13 to b1ae668 Compare December 11, 2024 16:49
@optout21
Copy link
Contributor Author

Review comments addressed, all resolved from my side (left a few open for visibility)

@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from b1ae668 to 86f9680 Compare December 11, 2024 16:56
@optout21 optout21 requested a review from jkczyz December 11, 2024 16:57
@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from 86f9680 to a379f1d Compare December 11, 2024 19:37
Copy link

codecov bot commented Dec 11, 2024

Codecov Report

Attention: Patch coverage is 51.69082% with 100 lines in your changes missing coverage. Please review.

Project coverage is 88.28%. Comparing base (7c77daf) to head (665be4e).
Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
lightning/src/ln/channel.rs 0.00% 100 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3443      +/-   ##
==========================================
- Coverage   88.35%   88.28%   -0.07%     
==========================================
  Files         149      149              
  Lines      112876   113074     +198     
  Branches   112876   113074     +198     
==========================================
+ Hits        99727    99829     +102     
- Misses      10669    10760      +91     
- Partials     2480     2485       +5     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from a379f1d to 9256a47 Compare December 14, 2024 12:40
@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from 9256a47 to 5194458 Compare January 6, 2025 09:57
@optout21
Copy link
Contributor Author

optout21 commented Jan 6, 2025

Rebased.

@jkczyz jkczyz requested a review from wpaulino January 6, 2025 18:35
}

let mut funding_inputs_prev_outputs: Vec<&TxOut> = Vec::with_capacity(funding_inputs.len());
// Check that vouts exist for each TxIn in provided transactions.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems better suited as a validation check when we construct the DualFundingChannelContext.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this also check the txid of the txin matches the transaction's?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, I will check.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This check makes sense when we obtain the prev TxOut's from the full prev transactions.
I considered the case when in DualFundingChannelContext we would store only the TxOut's, and check and obtain at creation, but the full txs are needed later.
As a middle ground I extracted the logic of checking and extracting into a helper method in DualFundingChannelContext , that can be called when the TxOut's are needed.
Also CC @dunxen

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to do the same validation for the counterparty's provided inputs, I wonder if we already have code for that, or if we can use this new one there now?

lightning/src/ln/channel.rs Outdated Show resolved Hide resolved
}

// Add output for funding tx
let mut funding_outputs = Vec::new();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the spec allows you to specify additional outputs here as part of the interactive negotiation, which would be included here. I noticed we don't seem to track/request these from the user though, is this something we're not planning to support? cc @dunxen

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's planned, but not in this PR.

};
let change_output_weight = get_output_weight(&change_output.script_pubkey).to_wu();
let change_output_fee = fee_for_weight(self.dual_funding_context().funding_feerate_sat_per_1000_weight, change_output_weight);
change_output.value = Amount::from_sat(change_value.saturating_sub(change_output_fee));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the resulting value is below dust then we shouldn't include the output.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point! Turns out this is checked, in holder_dust_limit_satoshis(), invoked a few lines above.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to check again after we subtract the fee of the change output because it may not be enough anymore.

lightning/src/ln/interactivetxs.rs Show resolved Hide resolved
@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from 27868f8 to fce05cb Compare January 9, 2025 10:42
@optout21 optout21 force-pushed the splicing-dual-reqs2 branch from fce05cb to fbde31f Compare January 9, 2025 11:13
@optout21
Copy link
Contributor Author

optout21 commented Jan 9, 2025

Rebased (post Inbound/OutboundV2Channel merge #3498 )

@optout21 optout21 changed the title Dual funding extension needed also for splicing: begin_interactive_funding_tx_construction Dual funding extension, needed also for splicing: begin_interactive_funding_tx_construction Jan 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants