diff --git a/find_p2sh_out.c b/find_p2sh_out.c index 5eb6aa7b6..1068a81ec 100644 --- a/find_p2sh_out.c +++ b/find_p2sh_out.c @@ -5,21 +5,40 @@ #include #include -u32 find_p2sh_out(const struct bitcoin_tx *tx, u8 *redeemscript) +static u32 find_output(const struct bitcoin_tx *tx, const u8 *scriptpubkey) { - /* This is the scriptPubKey commit tx will have */ - u8 *p2sh = scriptpubkey_p2sh(NULL, redeemscript); u32 i; for (i = 0; i < tx->output_count; i++) { - if (tx->output[i].script_length != tal_count(p2sh)) + if (tx->output[i].script_length != tal_count(scriptpubkey)) continue; - if (memcmp(tx->output[i].script, p2sh, tal_count(p2sh)) == 0) + if (memcmp(tx->output[i].script, scriptpubkey, tal_count(scriptpubkey)) == 0) break; } /* FIXME: Return failure! */ if (i == tx->output_count) errx(1, "No matching output in tx"); + return i; +} + +u32 find_p2sh_out(const struct bitcoin_tx *tx, const u8 *redeemscript) +{ + /* This is the scriptPubKey commit tx will have */ + u8 *p2sh = scriptpubkey_p2sh(NULL, redeemscript); + u32 i; + + i = find_output(tx, p2sh); tal_free(p2sh); return i; } + +u32 find_p2wsh_out(const struct bitcoin_tx *tx, const u8 *witnessscript) +{ + /* This is the scriptPubKey commit tx will have */ + u8 *p2wsh = scriptpubkey_p2wsh(NULL, witnessscript); + u32 i; + + i = find_output(tx, p2wsh); + tal_free(p2wsh); + return i; +} diff --git a/find_p2sh_out.h b/find_p2sh_out.h index 5463499c0..bb7a9e348 100644 --- a/find_p2sh_out.h +++ b/find_p2sh_out.h @@ -8,5 +8,8 @@ struct bitcoin_tx; /* Normally we'd simply remember which output of the anchor or commit * tx is the one which pays to this script. But for these examples, * we have to figure it out by recreating the output and matching. */ -u32 find_p2sh_out(const struct bitcoin_tx *tx, u8 *redeemscript); +u32 find_p2sh_out(const struct bitcoin_tx *tx, const u8 *redeemscript); + +/* Similar routine for finding a specific p2wsh output. */ +u32 find_p2wsh_out(const struct bitcoin_tx *tx, const u8 *witnessscript); #endif /* LIGHTNING_FIND_P2SH_OUT_H */