Skip to content

Commit

Permalink
wallet: slightly neaten fundpsbt code.
Browse files Browse the repository at this point in the history
We can keep a single array of 'already considered' utxos, with the same
result as Tony's patch prior.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
  • Loading branch information
rustyrussell committed Sep 13, 2023
1 parent 6639bc7 commit c8acbdb
Showing 1 changed file with 7 additions and 18 deletions.
25 changes: 7 additions & 18 deletions wallet/reservation.c
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,7 @@ static struct command_result *json_fundpsbt(struct command *cmd,
const jsmntok_t *params)
{
struct utxo **utxos;
const struct utxo **excluded;
u32 *feerate_per_kw;
u32 *minconf, *weight, *min_witness_weight;
struct amount_sat *amount, input, diff, change;
Expand Down Expand Up @@ -537,8 +538,8 @@ static struct command_result *json_fundpsbt(struct command *cmd,
/* We keep adding until we meet their output requirements. */
utxos = tal_arr(cmd, struct utxo *, 0);

/* We seperate out UTXOs to exclude if they are uneconomical */
struct utxo **uneconomical_utxos = tal_arr(cmd, struct utxo *, 0);
/* Either uneconomical at this feerate, or already included. */
excluded = tal_arr(cmd, const struct utxo *, 0);

input = AMOUNT_SAT(0);
while (!inputs_sufficient(input, *amount, *feerate_per_kw, *weight,
Expand All @@ -547,35 +548,23 @@ static struct command_result *json_fundpsbt(struct command *cmd,
struct amount_sat fee;
u32 utxo_weight;


/* Merge the two lists for exclusion */
struct utxo **all_excluded = tal_arr(cmd, struct utxo *, 0);
for(size_t i = 0; i < tal_count(utxos); i++) {
tal_arr_expand(&all_excluded, utxos[i]);
}
for(size_t i = 0; i < tal_count(uneconomical_utxos); i++) {
tal_arr_expand(&all_excluded, uneconomical_utxos[i]);
}

utxo = wallet_find_utxo(utxos, cmd->ld->wallet,
current_height,
&diff,
*feerate_per_kw,
maxheight,
*nonwrapped,
cast_const2(const struct utxo **, all_excluded));
tal_free(all_excluded);
excluded);

if (utxo) {
tal_arr_expand(&excluded, utxo);
utxo_weight = utxo_spend_weight(utxo,
*min_witness_weight);
fee = amount_tx_fee(*feerate_per_kw, utxo_weight);

/* Uneconomic to add this utxo, skip it */
if (!all && amount_sat_greater_eq(fee, utxo->amount)){
tal_arr_expand(&uneconomical_utxos, utxo);
if (!all && amount_sat_greater_eq(fee, utxo->amount))
continue;
}

tal_arr_expand(&utxos, utxo);

Expand Down Expand Up @@ -613,7 +602,7 @@ static struct command_result *json_fundpsbt(struct command *cmd,
&diff));
}

tal_free(uneconomical_utxos);
tal_free(excluded);

if (all) {
/* We need to afford one non-dust output, at least. */
Expand Down

0 comments on commit c8acbdb

Please sign in to comment.