diff --git a/bitcoin/tx.c b/bitcoin/tx.c index c31d31333..3040e1dda 100644 --- a/bitcoin/tx.c +++ b/bitcoin/tx.c @@ -383,10 +383,9 @@ static void pull_witness(struct bitcoin_tx_input *inputs, size_t i, } } -struct bitcoin_tx *pull_bitcoin_tx(const tal_t *ctx, - const u8 **cursor, size_t *max) +struct bitcoin_tx *pull_bitcoin_tx_onto(const tal_t *ctx, const u8 **cursor, + size_t *max, struct bitcoin_tx *tx) { - struct bitcoin_tx *tx = tal(ctx, struct bitcoin_tx); size_t i; u64 count; u8 flag = 0; @@ -425,6 +424,13 @@ struct bitcoin_tx *pull_bitcoin_tx(const tal_t *ctx, return tx; } +struct bitcoin_tx *pull_bitcoin_tx(const tal_t *ctx, + const u8 **cursor, size_t *max) +{ + struct bitcoin_tx *tx = tal(ctx, struct bitcoin_tx); + return pull_bitcoin_tx_onto(ctx, cursor, max, tx); +} + struct bitcoin_tx *bitcoin_tx_from_hex(const tal_t *ctx, const char *hex, size_t hexlen) { diff --git a/bitcoin/tx.h b/bitcoin/tx.h index 987c2e80e..1272a118d 100644 --- a/bitcoin/tx.h +++ b/bitcoin/tx.h @@ -71,4 +71,18 @@ bool bitcoin_txid_to_hex(const struct bitcoin_txid *txid, struct bitcoin_tx *pull_bitcoin_tx(const tal_t *ctx, const u8 **cursor, size_t *max); +/** + * pull_bitcoin_tx_onto - De-serialize a bitcoin tx into tx + * + * Like pull_bitcoin_tx, but skips the allocation of tx. Used by the + * wire implementation where the caller allocates, and the callee only + * fills in values. + * + * @ctx: Allocation context + * @cursor: buffer to read from + * @max: Buffer size left to read + * @tx (out): Destination transaction + */ +struct bitcoin_tx *pull_bitcoin_tx_onto(const tal_t *ctx, const u8 **cursor, + size_t *max, struct bitcoin_tx *tx); #endif /* LIGHTNING_BITCOIN_TX_H */