From 381658dee6da11d5723042d18e5e4333a1499403 Mon Sep 17 00:00:00 2001 From: niftynei Date: Thu, 22 Oct 2020 14:07:33 -0500 Subject: [PATCH] mfc-df: merge openchannel_init/fundchannel_start results These happen simultaneously, and should resolve to the same place when they're finished. --- plugins/spender/multifundchannel.c | 17 +++++----- plugins/spender/multifundchannel.h | 3 ++ plugins/spender/openchannel.c | 50 ++---------------------------- 3 files changed, 13 insertions(+), 57 deletions(-) diff --git a/plugins/spender/multifundchannel.c b/plugins/spender/multifundchannel.c index 01dfbb60e..74f320b1c 100644 --- a/plugins/spender/multifundchannel.c +++ b/plugins/spender/multifundchannel.c @@ -1127,9 +1127,6 @@ fundchannel_start_err(struct command *cmd, return fundchannel_start_done(dest); } -static struct command_result * -after_fundchannel_start(struct multifundchannel_command *mfc); - static struct command_result * fundchannel_start_done(struct multifundchannel_destination *dest) { @@ -1137,7 +1134,7 @@ fundchannel_start_done(struct multifundchannel_destination *dest) --mfc->pending; if (mfc->pending == 0) - return after_fundchannel_start(mfc); + return after_channel_start(mfc); else return command_still_pending(mfc->cmd); } @@ -1145,19 +1142,19 @@ fundchannel_start_done(struct multifundchannel_destination *dest) static struct command_result * perform_funding_tx_finalize(struct multifundchannel_command *mfc); -/* All fundchannel_start commands have returned with either -success or failure. +/* All fundchannel_start/openchannel_init commands have returned + * with either success or failure. */ -static struct command_result * -after_fundchannel_start(struct multifundchannel_command *mfc) +struct command_result * +after_channel_start(struct multifundchannel_command *mfc) { unsigned int i; plugin_log(mfc->cmd->plugin, LOG_DBG, - "mfc %"PRIu64": parallel fundchannel_start done.", + "mfc %"PRIu64": parallel channel starts done.", mfc->id); - /* Check if any fundchannel_start failed. */ + /* Check if any channel start failed. */ for (i = 0; i < tal_count(mfc->destinations); ++i) { struct multifundchannel_destination *dest; diff --git a/plugins/spender/multifundchannel.h b/plugins/spender/multifundchannel.h index 0424ab61b..80f3a9dd7 100644 --- a/plugins/spender/multifundchannel.h +++ b/plugins/spender/multifundchannel.h @@ -250,6 +250,9 @@ size_t dest_count(const struct multifundchannel_command *mfc, struct command_result * mfc_finished(struct multifundchannel_command *, struct json_stream *response); +struct command_result * +after_channel_start(struct multifundchannel_command *mfc); + struct command_result * redo_multifundchannel(struct multifundchannel_command *mfc, const char *failing_method); diff --git a/plugins/spender/openchannel.c b/plugins/spender/openchannel.c index a4c87c6b5..74b309000 100644 --- a/plugins/spender/openchannel.c +++ b/plugins/spender/openchannel.c @@ -13,6 +13,7 @@ static struct list_head mfc_commands; +/* unused for now, will return soon! static void destroy_mfc(struct multifundchannel_command *mfc) { @@ -26,6 +27,7 @@ static void register_mfc(struct multifundchannel_command *mfc) list_add_tail(&mfc_commands, &mfc->list); tal_add_destructor(mfc, &destroy_mfc); } +*/ static struct multifundchannel_destination * find_dest_by_channel_id(struct channel_id *cid) @@ -908,52 +910,6 @@ perform_openchannel_update(struct multifundchannel_command *mfc) return command_still_pending(mfc->cmd); } -static struct command_result * -after_openchannel_init(struct multifundchannel_command *mfc) -{ - unsigned int i; - - plugin_log(mfc->cmd->plugin, LOG_DBG, - "mfc %"PRIu64": parallel openchannel_init done.", - mfc->id); - - /* Check if any openchannel_init failed. */ - for (i = 0; i < tal_count(mfc->destinations); ++i) { - struct multifundchannel_destination *dest; - - dest = &mfc->destinations[i]; - - assert(dest->state == MULTIFUNDCHANNEL_STARTED - || dest->state == MULTIFUNDCHANNEL_FAILED); - - if (dest->state != MULTIFUNDCHANNEL_FAILED) - continue; - - /* One of them failed, oh no. */ - return redo_multifundchannel(mfc, "openchannel_init"); - } - - /* We need to add the change output here, for now. Will - * remove when fundchannel flow is merged */ - if (mfc->change_needed) { - struct wally_psbt_output *out; - u16 serial_id; - - out = psbt_append_output(mfc->psbt, - mfc->change_scriptpubkey, - mfc->change_amount); - - serial_id = psbt_new_output_serial(mfc->psbt, TX_INITIATOR); - psbt_output_set_serial_id(mfc->psbt, out, serial_id); - } - - /* Now we stash the 'mfc' command, so when/if - * signature notifications start coming in, we'll catch them. */ - register_mfc(mfc); - - return perform_openchannel_update(mfc); -} - static struct command_result * openchannel_init_done(struct multifundchannel_destination *dest) { @@ -961,7 +917,7 @@ openchannel_init_done(struct multifundchannel_destination *dest) --mfc->pending; if (mfc->pending == 0) - return after_openchannel_init(mfc); + return after_channel_start(mfc); else return command_still_pending(mfc->cmd); }