Browse Source

lightningd: actually unwatch txs when onchaind says we should.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ppa-0.6.1
Rusty Russell 7 years ago
committed by Christian Decker
parent
commit
c6ce352404
  1. 15
      lightningd/peer_control.c
  2. 18
      lightningd/watch.c
  3. 4
      lightningd/watch.h

15
lightningd/peer_control.c

@ -1193,7 +1193,20 @@ static void handle_onchain_broadcast_tx(struct peer *peer, const u8 *msg)
static void handle_onchain_unwatch_tx(struct peer *peer, const u8 *msg)
{
/* FIXME: unwatch tx and children here. */
struct bitcoin_txid txid;
struct txwatch *txw;
if (!fromwire_onchain_unwatch_tx(msg, NULL, &txid)) {
peer_internal_error(peer, "Invalid onchain_unwatch_tx");
return;
}
/* Frees the txo watches, too: see watch_tx_and_outputs() */
txw = find_txwatch(peer->ld->topology, &txid, peer);
if (!txw)
log_unusual(peer->log, "Can't unwatch txid %s",
type_to_string(ltmp, struct bitcoin_txid, &txid));
tal_free(txw);
}
static void handle_extracted_preimage(struct peer *peer, const u8 *msg)

18
lightningd/watch.c

@ -112,6 +112,24 @@ struct txwatch *watch_txid_(const tal_t *ctx,
return w;
}
struct txwatch *find_txwatch(struct chain_topology *topo,
const struct bitcoin_txid *txid,
const struct peer *peer)
{
struct txwatch_hash_iter i;
struct txwatch *w;
/* We could have more than one peer watching same txid, though we
* don't for onchaind. */
for (w = txwatch_hash_getfirst(&topo->txwatches, txid, &i);
w;
w = txwatch_hash_getnext(&topo->txwatches, txid, &i)) {
if (w->peer == peer)
break;
}
return w;
}
bool watching_txid(const struct chain_topology *topo,
const struct bitcoin_txid *txid)
{

4
lightningd/watch.h

@ -134,6 +134,10 @@ struct txowatch *watch_txo_(const tal_t *ctx,
const struct block *block), \
(cbdata))
struct txwatch *find_txwatch(struct chain_topology *topo,
const struct bitcoin_txid *txid,
const struct peer *peer);
void txwatch_fire(struct chain_topology *topo,
const struct bitcoin_tx *tx,
unsigned int depth);

Loading…
Cancel
Save