mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-24 01:24:26 +01:00
onchaind: immediately broadcast proposals which don't need to wait.
This removes an extra call and simplifies handling of "immediate" txs. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
@@ -294,6 +294,26 @@ static void ignore_output(struct tracked_output *out)
|
||||
out->resolved->tx_type = SELF;
|
||||
}
|
||||
|
||||
static void proposal_meets_depth(struct tracked_output *out)
|
||||
{
|
||||
/* If we simply wanted to ignore it after some depth */
|
||||
if (!out->proposal->tx) {
|
||||
ignore_output(out);
|
||||
return;
|
||||
}
|
||||
|
||||
status_trace("Broadcasting %s (%s) to resolve %s/%s",
|
||||
tx_type_name(out->proposal->tx_type),
|
||||
type_to_string(trc, struct bitcoin_tx, out->proposal->tx),
|
||||
tx_type_name(out->tx_type),
|
||||
output_type_name(out->output_type));
|
||||
|
||||
wire_sync_write(REQ_FD,
|
||||
take(towire_onchain_broadcast_tx(NULL,
|
||||
out->proposal->tx)));
|
||||
/* We will get a callback when it's in a block. */
|
||||
}
|
||||
|
||||
static void propose_resolution(struct tracked_output *out,
|
||||
const struct bitcoin_tx *tx,
|
||||
unsigned int depth_required,
|
||||
@@ -310,6 +330,9 @@ static void propose_resolution(struct tracked_output *out,
|
||||
out->proposal->tx = tal_steal(out->proposal, tx);
|
||||
out->proposal->depth_required = depth_required;
|
||||
out->proposal->tx_type = tx_type;
|
||||
|
||||
if (depth_required == 0)
|
||||
proposal_meets_depth(out);
|
||||
}
|
||||
|
||||
static void propose_resolution_at_block(struct tracked_output *out,
|
||||
@@ -465,26 +488,6 @@ static bool all_irrevocably_resolved(struct tracked_output **outs)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void proposal_meets_depth(struct tracked_output *out)
|
||||
{
|
||||
/* If we simply wanted to ignore it after some depth */
|
||||
if (!out->proposal->tx) {
|
||||
ignore_output(out);
|
||||
return;
|
||||
}
|
||||
|
||||
status_trace("Broadcasting %s (%s) to resolve %s/%s",
|
||||
tx_type_name(out->proposal->tx_type),
|
||||
type_to_string(trc, struct bitcoin_tx, out->proposal->tx),
|
||||
tx_type_name(out->tx_type),
|
||||
output_type_name(out->output_type));
|
||||
|
||||
wire_sync_write(REQ_FD,
|
||||
take(towire_onchain_broadcast_tx(NULL,
|
||||
out->proposal->tx)));
|
||||
/* We will get a callback when it's in a block. */
|
||||
}
|
||||
|
||||
static void unwatch_tx(const struct bitcoin_tx *tx)
|
||||
{
|
||||
u8 *msg;
|
||||
@@ -795,10 +798,6 @@ static void handle_preimage(struct tracked_output **outs,
|
||||
propose_resolution(outs[i], tx, 0,
|
||||
THEIR_HTLC_FULFILL_TO_US);
|
||||
}
|
||||
|
||||
/* Broadcast immediately. */
|
||||
proposal_meets_depth(outs[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user