diff --git a/bitcoin/block.c b/bitcoin/block.c index 861dc5607..81b575399 100644 --- a/bitcoin/block.c +++ b/bitcoin/block.c @@ -5,8 +5,9 @@ #include /* Encoding is ... */ -struct bitcoin_block *bitcoin_block_from_hex(const tal_t *ctx, - const char *hex, size_t hexlen) +struct bitcoin_block * +bitcoin_block_from_hex(const tal_t *ctx, const struct chainparams *chainparams, + const char *hex, size_t hexlen) { struct bitcoin_block *b; u8 *linear_tx; @@ -28,8 +29,10 @@ struct bitcoin_block *bitcoin_block_from_hex(const tal_t *ctx, 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++) + for (i = 0; i < num; i++) { b->tx[i] = pull_bitcoin_tx(b->tx, &p, &len); + b->tx[i]->chainparams = chainparams; + } /* We should end up not overrunning, nor have extra */ if (!p || len) diff --git a/bitcoin/block.h b/bitcoin/block.h index ec96fc9d7..106ba0edb 100644 --- a/bitcoin/block.h +++ b/bitcoin/block.h @@ -8,6 +8,8 @@ #include #include +struct chainparams; + struct bitcoin_blkid { struct sha256_double shad; }; @@ -29,8 +31,9 @@ struct bitcoin_block { struct bitcoin_tx **tx; }; -struct bitcoin_block *bitcoin_block_from_hex(const tal_t *ctx, - const char *hex, size_t hexlen); +struct bitcoin_block * +bitcoin_block_from_hex(const tal_t *ctx, const struct chainparams *chainparams, + const char *hex, size_t hexlen); /* Parse hex string to get blockid (reversed, a-la bitcoind). */ bool bitcoin_blkid_from_hex(const char *hexstr, size_t hexstr_len, diff --git a/bitcoin/test/Makefile b/bitcoin/test/Makefile index 5e8e5ba54..d79186fff 100644 --- a/bitcoin/test/Makefile +++ b/bitcoin/test/Makefile @@ -4,7 +4,7 @@ BITCOIN_TEST_PROGRAMS := $(BITCOIN_TEST_OBJS:.o=) BITCOIN_TEST_COMMON_OBJS := common/utils.o -$(BITCOIN_TEST_PROGRAMS): $(CCAN_OBJS) $(BITCOIN_TEST_COMMON_OBJS) +$(BITCOIN_TEST_PROGRAMS): $(CCAN_OBJS) $(BITCOIN_TEST_COMMON_OBJS) bitcoin/chainparams.o $(BITCOIN_TEST_OBJS): $(CCAN_HEADERS) $(BITCOIN_HEADERS) $(BITCOIN_SRC) ALL_TEST_PROGRAMS += $(BITCOIN_TEST_PROGRAMS) diff --git a/bitcoin/test/run-bitcoin_block_from_hex.c b/bitcoin/test/run-bitcoin_block_from_hex.c index 5b5bd3362..5246024a0 100644 --- a/bitcoin/test/run-bitcoin_block_from_hex.c +++ b/bitcoin/test/run-bitcoin_block_from_hex.c @@ -69,7 +69,8 @@ int main(void) struct bitcoin_block *b; setup_locale(); - b = bitcoin_block_from_hex(NULL, block, strlen(block)); + b = bitcoin_block_from_hex(NULL, chainparams_for_network("bitcoin"), + block, strlen(block)); assert(b); assert(b->hdr.version == CPU_TO_LE32(0x6592a000)); diff --git a/lightningd/bitcoind.c b/lightningd/bitcoind.c index 09340224a..2dc85f072 100644 --- a/lightningd/bitcoind.c +++ b/lightningd/bitcoind.c @@ -469,7 +469,8 @@ static bool process_rawblock(struct bitcoin_cli *bcli) struct bitcoin_block *blk, void *arg) = bcli->cb; - blk = bitcoin_block_from_hex(bcli, bcli->output, bcli->output_bytes); + blk = bitcoin_block_from_hex(bcli, bcli->bitcoind->chainparams, + bcli->output, bcli->output_bytes); if (!blk) fatal("%s: bad block '%.*s'?", bcli_args(tmpctx, bcli),