mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-17 19:03:42 +01:00
find_p2wsh_out: new helper to find a particular output.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
bd081d219d
commit
6a54716b56
@ -5,21 +5,40 @@
|
||||
#include <ccan/tal/tal.h>
|
||||
#include <string.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user