mirror of
https://github.com/aljazceru/lightning.git
synced 2026-01-05 07:14:36 +01:00
bitcoin: Split pull_bitcoin_tx
The deserialization of bitcoin transactions in wire/ is rather annoying in that we first allocate a new bitcoin_tx, then copy it's contents onto the destination and then still carry the newly allocated one around due to the tal-tree. This splits `pull_bitcoin_tx` into two: one part that does the allocation and another one that proceeds to parse. Signed-off-by: Christian Decker <decker.christian@gmail.com>
This commit is contained in:
12
bitcoin/tx.c
12
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)
|
||||
{
|
||||
|
||||
14
bitcoin/tx.h
14
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 */
|
||||
|
||||
Reference in New Issue
Block a user