Skip to content

Contribute funding inputs on accepting dual-funded channel #3735

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

Draft
wants to merge 11 commits into
base: main
Choose a base branch
from

Conversation

dunxen
Copy link
Contributor

@dunxen dunxen commented Apr 15, 2025

Very WIP with upcoming commits.

Based on #3637.

@ldk-reviews-bot
Copy link

ldk-reviews-bot commented Apr 15, 2025

👋 Thanks for assigning @jkczyz as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@dunxen dunxen force-pushed the 2025-04-contributeinputs branch from e22fa33 to fabbf86 Compare April 25, 2025 18:20
@dunxen dunxen force-pushed the 2025-04-contributeinputs branch 4 times, most recently from c42f3d0 to 186d66b Compare May 12, 2025 10:51
@dunxen dunxen force-pushed the 2025-04-contributeinputs branch from 186d66b to c7d8e89 Compare May 19, 2025 11:07
@dunxen dunxen force-pushed the 2025-04-contributeinputs branch from c7d8e89 to 540b8a7 Compare June 12, 2025 08:40
@wpaulino
Copy link
Contributor

Looks like this needs a rebase after #3637

@dunxen dunxen force-pushed the 2025-04-contributeinputs branch from 540b8a7 to 94bf848 Compare June 13, 2025 05:35
@dunxen
Copy link
Contributor Author

dunxen commented Jun 13, 2025

Looks like this needs a rebase after #3637

ugh right!

@wpaulino
Copy link
Contributor

Don't the first three commits need to be dropped?

@dunxen dunxen force-pushed the 2025-04-contributeinputs branch 2 times, most recently from 67504f0 to 9f276d8 Compare June 17, 2025 10:40
@dunxen
Copy link
Contributor Author

dunxen commented Jun 17, 2025

Just needs node reload tests but it can still get some initial review.

jkczyz and others added 8 commits June 17, 2025 17:02
When receiving a commitment_signed message, if there are any pending
splices then we are expected to receive the message as a part of a
batch. Otherwise, the spec dictates that we should send an error and
fail the channel.
The `FundingTransactionReadyForSignatures` event requests witnesses
from the client for their contributed inputs to an interactively
constructed transaction.

The client calls `ChannelManager::funding_transaction_signed` to provide
the witnesses to LDK.
…annel

We introduce a `ChannelManager::accept_inbound_channel_with_contribution`
method allowing contributing to the overall channel capacity of an inbound
dual-funded channel by contributing inputs.
@dunxen dunxen force-pushed the 2025-04-contributeinputs branch from 9f276d8 to 60f58b1 Compare June 17, 2025 16:26
{
if self.is_awaiting_initial_mon_persist() {
log_debug!(logger, "Not sending tx_signatures: a monitor update is in progress. Setting monitor_pending_tx_signatures.");
self.context.monitor_pending_tx_signatures = Some(holder_tx_signatures);
Copy link
Contributor

Choose a reason for hiding this comment

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

Thoughts on just tracking this as an Option<()> and we get the message from the signing session instead?

/// </div>
pub fn funding_transaction_signed(
&self, channel_id: &ChannelId, counterparty_node_id: &PublicKey, transaction: Transaction,
) -> Result<(), APIError> {
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 acquire the PersistenceNotifierGuard throughout this method


fn length_limit_holder_input_prev_txs(
funding_inputs: Vec<(TxIn, Transaction, Weight)>,
) -> Result<Vec<(TxIn, TransactionU16LenLimited, Weight)>, APIError> {
Copy link
Contributor

Choose a reason for hiding this comment

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

Let's return a structured type here that also includes the corresponding TxOut as a field so we don't have to continue doing checks that it exists everywhere.

@@ -11110,6 +11111,31 @@ where
script_pubkey: funding.get_funding_redeemscript().to_p2wsh(),
};

// Optionally add change output
Copy link
Contributor

Choose a reason for hiding this comment

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

Wouldn't this already be covered by begin_interactive_funding_tx_construction?

@@ -11110,6 +11111,31 @@ where
script_pubkey: funding.get_funding_redeemscript().to_p2wsh(),
};

// Optionally add change output
let change_script = signer_provider.get_destination_script(context.channel_keys_id)
Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe let the user optionally provide a change address along with their inputs?

@jkczyz jkczyz self-requested a review June 18, 2025 18:19
@wpaulino
Copy link
Contributor

Since the FundingTransactionReadyForSigning work is also relevant for splicing (though it will need some minor additional changes), maybe we should split it up from the inbound contribution work, so that we can unblock testing on the splicing side once #3736 lands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants