mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 21:35:11 +01:00
state: use INPUT_RVALUE instead of CMD_SEND_HTLC_FULFILL during closing.
We'd expect stop_commands to stop all commands, but we (ab)used CMD_SEND_HTLC_FULFILL to send us R values even in closing state. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
80d23a0a61
commit
ba73787ecc
6
state.c
6
state.c
@ -740,7 +740,7 @@ enum state state(const enum state state, const struct state_data *sdata,
|
||||
idata->cmd,
|
||||
BITCOIN_HTLC_RETURN_SPEND_DONE));
|
||||
return state;
|
||||
} else if (input_is(input, CMD_SEND_HTLC_FULFILL)) {
|
||||
} else if (input_is(input, INPUT_RVALUE)) {
|
||||
/* This gives us the r value. */
|
||||
set_effect(effect, r_value,
|
||||
r_value_from_cmd(effect, sdata,
|
||||
@ -1060,8 +1060,8 @@ fail_during_close:
|
||||
BITCOIN_HTLC_TOTHEM_TIMEOUT);
|
||||
/* Expect either close or spendthem to complete */
|
||||
if (htlcs) {
|
||||
/* FIXME: Make sure caller uses CMD_HTLC_FULFILL again
|
||||
* if they were in the middle of one! */
|
||||
/* FIXME: Make sure caller uses INPUT_RVAL
|
||||
* if they were in the middle of FULFILL! */
|
||||
set_effect(effect, watch_htlcs, htlcs);
|
||||
return STATE_CLOSE_WAIT_SPENDTHEM_CLOSE_WITH_HTLCS;
|
||||
}
|
||||
|
@ -257,7 +257,15 @@ enum state_input {
|
||||
* Timeouts.
|
||||
*/
|
||||
INPUT_CLOSE_COMPLETE_TIMEOUT,
|
||||
|
||||
|
||||
/*
|
||||
* Inject a known R value.
|
||||
*
|
||||
* In normal operation, use CMD_SEND_HTLC_FULFILL; this is for
|
||||
* after a unilateral close.
|
||||
*/
|
||||
INPUT_RVALUE,
|
||||
|
||||
/* Commands */
|
||||
CMD_SEND_HTLC_UPDATE,
|
||||
CMD_SEND_HTLC_FULFILL,
|
||||
|
@ -1019,6 +1019,7 @@ static struct trail *add_trail(enum state_input input,
|
||||
t->before = *before;
|
||||
t->after = *after;
|
||||
if (input == CMD_SEND_HTLC_FULFILL
|
||||
|| input == INPUT_RVALUE
|
||||
|| input == BITCOIN_HTLC_TOTHEM_TIMEOUT
|
||||
|| input == BITCOIN_HTLC_TOTHEM_SPENT
|
||||
|| input == BITCOIN_HTLC_TOUS_TIMEOUT
|
||||
@ -1741,7 +1742,7 @@ static bool can_refire(enum state_input i)
|
||||
|
||||
/* They could have lots of htlcs. */
|
||||
if (i == BITCOIN_HTLC_TOTHEM_SPENT || i == BITCOIN_HTLC_TOTHEM_TIMEOUT
|
||||
|| i == BITCOIN_HTLC_TOUS_TIMEOUT || i == CMD_SEND_HTLC_FULFILL)
|
||||
|| i == BITCOIN_HTLC_TOUS_TIMEOUT)
|
||||
return true;
|
||||
|
||||
/* We manually remove these if they're not watching any more spends */
|
||||
@ -1870,7 +1871,7 @@ static struct trail *run_peer(const struct state_data *sdata,
|
||||
idata->htlc = (struct htlc *)©.live_htlcs_to_us[i];
|
||||
/* Only send this once. */
|
||||
if (!rval_known(sdata, idata->htlc->id)) {
|
||||
t = try_input(©, CMD_SEND_HTLC_FULFILL,
|
||||
t = try_input(©, INPUT_RVALUE,
|
||||
idata, normalpath, errorpath,
|
||||
depth, hist);
|
||||
if (t)
|
||||
|
Loading…
Reference in New Issue
Block a user