chaintopology: always track txs we broadcast ourselves.

This is inefficient, but it means we always know the tx depth.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2016-05-04 16:11:16 +09:30
parent 7d4d2977b6
commit 1b49d2afa6

View File

@ -99,6 +99,22 @@ static void add_tx_to_block(struct block *b, const struct sha256_double *txid)
b->txids[n] = *txid;
}
static bool we_broadcast(struct lightningd_state *dstate,
const struct sha256_double *txid)
{
struct peer *peer;
list_for_each(&dstate->peers, peer, list) {
struct outgoing_tx *otx;
list_for_each(&peer->outgoing_txs, otx, list) {
if (structeq(&otx->txid, txid))
return true;
}
}
return false;
}
/* Fills in prev, height, mediantime. */
static void connect_block(struct lightningd_state *dstate,
struct block *prev,
@ -138,7 +154,7 @@ static void connect_block(struct lightningd_state *dstate,
/* We did spends first, in case that tells us to watch tx. */
bitcoin_txid(tx, &txid);
if (watching_txid(dstate, &txid))
if (watching_txid(dstate, &txid) || we_broadcast(dstate, &txid))
add_tx_to_block(b, &txid);
}
b->full_txs = tal_free(b->full_txs);