mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
lightningd: actually unwatch txs when onchaind says we should.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Christian Decker
parent
6d0fd84c63
commit
c6ce352404
@@ -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)
|
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)
|
static void handle_extracted_preimage(struct peer *peer, const u8 *msg)
|
||||||
|
|||||||
@@ -112,6 +112,24 @@ struct txwatch *watch_txid_(const tal_t *ctx,
|
|||||||
return w;
|
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,
|
bool watching_txid(const struct chain_topology *topo,
|
||||||
const struct bitcoin_txid *txid)
|
const struct bitcoin_txid *txid)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -134,6 +134,10 @@ struct txowatch *watch_txo_(const tal_t *ctx,
|
|||||||
const struct block *block), \
|
const struct block *block), \
|
||||||
(cbdata))
|
(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,
|
void txwatch_fire(struct chain_topology *topo,
|
||||||
const struct bitcoin_tx *tx,
|
const struct bitcoin_tx *tx,
|
||||||
unsigned int depth);
|
unsigned int depth);
|
||||||
|
|||||||
Reference in New Issue
Block a user