Browse Source

mfc-df: after psbt signed, send to openchannel_signed if v2s

If there's an v2 destinations, they'll broadcast the tx for us
fix-mocks
niftynei 4 years ago
committed by neil saitug
parent
commit
3e19b6c8f5
  1. 20
      plugins/spender/multifundchannel.c
  2. 21
      plugins/spender/openchannel.c

20
plugins/spender/multifundchannel.c

@ -1566,6 +1566,13 @@ after_signpsbt(struct command *cmd,
json_tok_full_len(field), json_tok_full_len(field),
json_tok_full(buf, field)); json_tok_full(buf, field));
if (!psbt_finalize(psbt))
plugin_err(mfc->cmd->plugin,
"mfc %"PRIu64": Signed PSBT won't finalize"
"%s", mfc->id,
type_to_string(tmpctx, struct wally_psbt, psbt));
/* Replace the PSBT. */ /* Replace the PSBT. */
tal_free(mfc->psbt); tal_free(mfc->psbt);
mfc->psbt = tal_steal(mfc, psbt); mfc->psbt = tal_steal(mfc, psbt);
@ -1599,10 +1606,23 @@ after_signpsbt(struct command *cmd,
*/ */
for (size_t i = 0; i < tal_count(mfc->destinations); ++i) { for (size_t i = 0; i < tal_count(mfc->destinations); ++i) {
struct multifundchannel_destination *dest; struct multifundchannel_destination *dest;
enum multifundchannel_state expected_state;
dest = &mfc->destinations[i]; dest = &mfc->destinations[i];
/* Check that every dest is in the right state */
expected_state = dest->protocol == OPEN_CHANNEL ?
MULTIFUNDCHANNEL_SIGNED : MULTIFUNDCHANNEL_COMPLETED;
assert(dest->state == expected_state);
dest->state = MULTIFUNDCHANNEL_DONE; dest->state = MULTIFUNDCHANNEL_DONE;
} }
/* If there's any v2's, we send the tx via `openchannel_signed` */
if (dest_count(mfc, OPEN_CHANNEL) > 0) {
return perform_openchannel_signed(mfc);
}
plugin_log(mfc->cmd->plugin, LOG_DBG, plugin_log(mfc->cmd->plugin, LOG_DBG,
"mfc %"PRIu64": sendpsbt.", mfc->id); "mfc %"PRIu64": sendpsbt.", mfc->id);

21
plugins/spender/openchannel.c

@ -484,25 +484,10 @@ perform_openchannel_signed(struct multifundchannel_command *mfc)
"mfc %"PRIu64": parallel `openchannel_signed`.", "mfc %"PRIu64": parallel `openchannel_signed`.",
mfc->id); mfc->id);
/* Check that every dest is in the right state */ mfc->pending = dest_count(mfc, OPEN_CHANNEL);
for (size_t i = 0; i < tal_count(mfc->destinations); i++) {
struct multifundchannel_destination *dest;
dest = &mfc->destinations[i];
if (dest->state != MULTIFUNDCHANNEL_SIGNED) {
// FIXME: these channels are all borked.
redo_multifundchannel(mfc, "openchannel_signed");
}
}
if (!psbt_finalize(mfc->psbt))
plugin_err(mfc->cmd->plugin,
"mfc %"PRIu64": Unable to finalize parent PSBT "
"%s",
type_to_string(tmpctx, struct wally_psbt,
mfc->psbt));
mfc->pending = tal_count(mfc->destinations);
for (size_t i = 0; i < tal_count(mfc->destinations); i++) { for (size_t i = 0; i < tal_count(mfc->destinations); i++) {
if (mfc->destinations[i].protocol == FUND_CHANNEL)
continue;
/* We need to 'port' all of the sigs down to the /* We need to 'port' all of the sigs down to the
* destination PSBTs */ * destination PSBTs */
update_node_psbt(mfc, mfc->psbt, update_node_psbt(mfc, mfc->psbt,

Loading…
Cancel
Save