mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-02 18:35:00 +01:00
txprepare: don't crash if we are passed unconfirmed utxos
Changelog-added: `txprepare` doesn't crash lightningd anymore if you pass unconfirmed utxos
This commit is contained in:
parent
9e9e23c81a
commit
cd15cec2f3
2 changed files with 14 additions and 8 deletions
|
@ -205,7 +205,7 @@ struct command_result *wtx_from_utxos(struct wallet_tx *tx,
|
|||
/* + segwit marker + flag */
|
||||
weight = 4 * (4 + 1 + 1 + 4) + 4 * (8 + 1 + out_len) + 1 + 1;
|
||||
for (size_t i = 0; i < tal_count(utxos); i++) {
|
||||
if (!*utxos[i]->blockheight || *utxos[i]->blockheight > maxheight) {
|
||||
if (!utxos[i]->blockheight || *utxos[i]->blockheight > maxheight) {
|
||||
tal_arr_remove(&utxos, i);
|
||||
continue;
|
||||
}
|
||||
|
@ -236,9 +236,11 @@ struct command_result *wtx_from_utxos(struct wallet_tx *tx,
|
|||
tx->amount = total_amount;
|
||||
if (!amount_sat_sub(&tx->amount, tx->amount, fee_estimate))
|
||||
return command_fail(tx->cmd, FUND_CANNOT_AFFORD,
|
||||
"Cannot afford transaction with %s sats of fees",
|
||||
type_to_string(tmpctx, struct amount_sat,
|
||||
&fee_estimate));
|
||||
"Cannot afford transaction with %s"
|
||||
" sats of fees, make sure to use "
|
||||
"confirmed utxos.",
|
||||
type_to_string(tmpctx, struct amount_sat,
|
||||
&fee_estimate));
|
||||
} else {
|
||||
if (!amount_sat_sub(&tx->change, tx->change, fee_estimate)) {
|
||||
/* Try again without a change output */
|
||||
|
@ -246,7 +248,9 @@ struct command_result *wtx_from_utxos(struct wallet_tx *tx,
|
|||
fee_estimate = amount_tx_fee(fee_rate_per_kw, weight);
|
||||
if (!amount_sat_sub(&tx->change, tx->change, fee_estimate))
|
||||
return command_fail(tx->cmd, FUND_CANNOT_AFFORD,
|
||||
"Cannot afford transaction with %s sats of fees",
|
||||
"Cannot afford transaction with %s"
|
||||
" sats of fees, make sure to use "
|
||||
"confirmed utxos.",
|
||||
type_to_string(tmpctx, struct amount_sat,
|
||||
&fee_estimate));
|
||||
tx->change = AMOUNT_SAT(0);
|
||||
|
|
|
@ -280,7 +280,6 @@ def test_txprepare_multi(node_factory, bitcoind):
|
|||
l1.rpc.txdiscard(prep['txid'])
|
||||
|
||||
|
||||
@pytest.mark.xfail(strict=True)
|
||||
def test_txprepare(node_factory, bitcoind, chainparams):
|
||||
amount = 1000000
|
||||
l1 = node_factory.get_node(random_hsm=True)
|
||||
|
@ -374,8 +373,11 @@ def test_txprepare(node_factory, bitcoind, chainparams):
|
|||
|
||||
# Try passing unconfirmed utxos
|
||||
unconfirmed_utxo = l1.rpc.withdraw(l1.rpc.newaddr()["bech32"], 10**5)
|
||||
utxos = [unconfirmed_utxo["txid"] + ":0"]
|
||||
l1.rpc.txprepare([{addr: Millisatoshi(amount * 3.5 * 1000)}], utxos=utxos)
|
||||
uutxos = [unconfirmed_utxo["txid"] + ":0"]
|
||||
with pytest.raises(RpcError, match=r"Cannot afford transaction .* use "
|
||||
"confirmed utxos."):
|
||||
l1.rpc.txprepare([{addr: Millisatoshi(amount * 3.5 * 1000)}],
|
||||
utxos=uutxos)
|
||||
|
||||
decode = bitcoind.rpc.decoderawtransaction(prep5['unsigned_tx'])
|
||||
assert decode['txid'] == prep5['txid']
|
||||
|
|
Loading…
Add table
Reference in a new issue