mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 21:35:11 +01:00
onchaind: fix feerate determination.
There were two bugs here. First, grind_feerate() needs to check the actual range of feerates, not the same rate over and over! Secondly, we need to grind the feerate for the HTLC-success tx, too. These were masked by the fact that our tests always use the same feerate! "Untested code is buggy code" Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
5281541ec6
commit
9b42f49d2c
@ -163,7 +163,7 @@ static bool grind_feerate(struct bitcoin_tx *commit_tx,
|
|||||||
u64 input_amount = *commit_tx->input[0].amount;
|
u64 input_amount = *commit_tx->input[0].amount;
|
||||||
|
|
||||||
for (s64 i = feerate_range.max; i >= feerate_range.min; i--) {
|
for (s64 i = feerate_range.max; i >= feerate_range.min; i--) {
|
||||||
u64 fee = feerate_per_kw * multiplier / 1000;
|
u64 fee = i * multiplier / 1000;
|
||||||
|
|
||||||
if (fee > input_amount)
|
if (fee > input_amount)
|
||||||
continue;
|
continue;
|
||||||
@ -873,8 +873,25 @@ static void handle_preimage(struct tracked_output **outs,
|
|||||||
outs[i]->outnum,
|
outs[i]->outnum,
|
||||||
outs[i]->satoshi * 1000,
|
outs[i]->satoshi * 1000,
|
||||||
to_self_delay[LOCAL],
|
to_self_delay[LOCAL],
|
||||||
feerate_per_kw,
|
0,
|
||||||
keyset);
|
keyset);
|
||||||
|
/* BOLT #3:
|
||||||
|
*
|
||||||
|
* The fee for an HTLC-success transaction MUST BE
|
||||||
|
* calculated to match:
|
||||||
|
*
|
||||||
|
* 1. Multiply `feerate_per_kw` by 703 and divide by
|
||||||
|
* 1000 (rounding down).
|
||||||
|
*/
|
||||||
|
if (!grind_feerate(tx, outs[i]->remote_htlc_sig,
|
||||||
|
outs[i]->wscript, 703))
|
||||||
|
status_failed(STATUS_FAIL_INTERNAL_ERROR,
|
||||||
|
"Could not find feerate for"
|
||||||
|
" signature on HTLC success"
|
||||||
|
" between %u and %u",
|
||||||
|
feerate_range.min,
|
||||||
|
feerate_range.max);
|
||||||
|
|
||||||
sign_tx_input(tx, 0, NULL, outs[i]->wscript,
|
sign_tx_input(tx, 0, NULL, outs[i]->wscript,
|
||||||
&htlc_privkey,
|
&htlc_privkey,
|
||||||
&keyset->self_htlc_key,
|
&keyset->self_htlc_key,
|
||||||
|
Loading…
Reference in New Issue
Block a user