diff --git a/bitcoin/psbt.c b/bitcoin/psbt.c index b740ef163..265331379 100644 --- a/bitcoin/psbt.c +++ b/bitcoin/psbt.c @@ -80,6 +80,17 @@ struct wally_psbt *new_psbt(const tal_t *ctx, const struct wally_tx *wtx) return tal_steal(ctx, psbt); } +bool psbt_is_finalized(struct wally_psbt *psbt) +{ + for (size_t i = 0; i < psbt->num_inputs; i++) { + if (!psbt->inputs[i].final_script_sig && + !psbt->inputs[i].final_witness) + return false; + } + + return true; +} + struct wally_psbt_input *psbt_add_input(struct wally_psbt *psbt, struct wally_tx_input *input, size_t insert_at) diff --git a/bitcoin/psbt.h b/bitcoin/psbt.h index 43fcfbc57..218125c24 100644 --- a/bitcoin/psbt.h +++ b/bitcoin/psbt.h @@ -21,6 +21,17 @@ void psbt_destroy(struct wally_psbt *psbt); struct wally_psbt *new_psbt(const tal_t *ctx, const struct wally_tx *wtx); +/** + * psbt_is_finalized - Check if tx is ready to be extracted + * + * The libwally library requires a transaction be *ready* for + * extraction before it will add/append all of the sigs/witnesses + * onto the global transaction. This check returns true if + * a psbt has the finalized script sig and/or witness data populated + * for such a call + */ +bool psbt_is_finalized(struct wally_psbt *psbt); + struct wally_psbt_input *psbt_add_input(struct wally_psbt *psbt, struct wally_tx_input *input, size_t insert_at);