mirror of
https://github.com/aljazceru/lightning.git
synced 2026-01-03 22:34:21 +01:00
bitcoind: getrawblock helper.
It turns out using the verbose=false parameter, you can get the raw block from getblock. Do that. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
38
bitcoin/block.c
Normal file
38
bitcoin/block.c
Normal file
@@ -0,0 +1,38 @@
|
||||
#include "bitcoin/block.h"
|
||||
#include "bitcoin/tx.h"
|
||||
#include <ccan/str/hex/hex.h>
|
||||
|
||||
/* Encoding is <blockhdr> <varint-num-txs> <tx>... */
|
||||
struct bitcoin_block *bitcoin_block_from_hex(const tal_t *ctx,
|
||||
const char *hex, size_t hexlen)
|
||||
{
|
||||
struct bitcoin_block *b;
|
||||
u8 *linear_tx;
|
||||
const u8 *p;
|
||||
size_t len, i, num;
|
||||
|
||||
if (hexlen && hex[hexlen-1] == '\n')
|
||||
hexlen--;
|
||||
|
||||
/* Set up the block for success. */
|
||||
b = tal(ctx, struct bitcoin_block);
|
||||
|
||||
/* De-hex the array. */
|
||||
len = hex_data_size(hexlen);
|
||||
p = linear_tx = tal_arr(ctx, u8, len);
|
||||
if (!hex_decode(hex, hexlen, linear_tx, len))
|
||||
return tal_free(b);
|
||||
|
||||
pull(&p, &len, &b->hdr, sizeof(b->hdr));
|
||||
num = pull_varint(&p, &len);
|
||||
b->tx = tal_arr(b, struct bitcoin_tx *, num);
|
||||
for (i = 0; i < num; i++)
|
||||
b->tx[i] = pull_bitcoin_tx(b->tx, &p, &len);
|
||||
|
||||
/* We should end up not overrunning, nor have extra */
|
||||
if (!p || len)
|
||||
return tal_free(b);
|
||||
|
||||
tal_free(linear_tx);
|
||||
return b;
|
||||
}
|
||||
Reference in New Issue
Block a user