mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-03 10:46:58 +01:00
wallet: add accessor getting close-info-needed unconfirmed UTXOs.
These are not confirmed by the normal methods (wallet_can_spend is false!), so we'll deal with them manually. We use UTXO_FIELDS in wallet_add_utxo, too, for consistency. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
d280eabc1e
commit
27835df8fd
2 changed files with 37 additions and 15 deletions
|
@ -61,6 +61,11 @@ struct wallet *wallet_new(struct lightningd *ld,
|
||||||
return wallet;
|
return wallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define UTXO_FIELDS \
|
||||||
|
"prev_out_tx, prev_out_index, value, type, status, keyindex, " \
|
||||||
|
"channel_id, peer_id, commitment_point, confirmation_height, " \
|
||||||
|
"spend_height"
|
||||||
|
|
||||||
/* We actually use the db constraints to uniquify, so OK if this fails. */
|
/* We actually use the db constraints to uniquify, so OK if this fails. */
|
||||||
bool wallet_add_utxo(struct wallet *w, struct utxo *utxo,
|
bool wallet_add_utxo(struct wallet *w, struct utxo *utxo,
|
||||||
enum wallet_output_type type)
|
enum wallet_output_type type)
|
||||||
|
@ -68,17 +73,8 @@ bool wallet_add_utxo(struct wallet *w, struct utxo *utxo,
|
||||||
sqlite3_stmt *stmt;
|
sqlite3_stmt *stmt;
|
||||||
|
|
||||||
stmt = db_prepare(w->db, "INSERT INTO outputs ("
|
stmt = db_prepare(w->db, "INSERT INTO outputs ("
|
||||||
"prev_out_tx, "
|
UTXO_FIELDS
|
||||||
"prev_out_index, "
|
") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
|
||||||
"value, "
|
|
||||||
"type, "
|
|
||||||
"status, "
|
|
||||||
"keyindex, "
|
|
||||||
"channel_id, "
|
|
||||||
"peer_id, "
|
|
||||||
"commitment_point, "
|
|
||||||
"confirmation_height, "
|
|
||||||
"spend_height) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
|
|
||||||
sqlite3_bind_blob(stmt, 1, &utxo->txid, sizeof(utxo->txid), SQLITE_TRANSIENT);
|
sqlite3_bind_blob(stmt, 1, &utxo->txid, sizeof(utxo->txid), SQLITE_TRANSIENT);
|
||||||
sqlite3_bind_int(stmt, 2, utxo->outnum);
|
sqlite3_bind_int(stmt, 2, utxo->outnum);
|
||||||
sqlite3_bind_int64(stmt, 3, utxo->amount);
|
sqlite3_bind_int64(stmt, 3, utxo->amount);
|
||||||
|
@ -175,10 +171,6 @@ bool wallet_update_output_status(struct wallet *w,
|
||||||
return sqlite3_changes(w->db->sql) > 0;
|
return sqlite3_changes(w->db->sql) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define UTXO_FIELDS \
|
|
||||||
"prev_out_tx, prev_out_index, value, type, status, keyindex, " \
|
|
||||||
"channel_id, peer_id, commitment_point, confirmation_height, " \
|
|
||||||
"spend_height"
|
|
||||||
struct utxo **wallet_get_utxos(const tal_t *ctx, struct wallet *w, const enum output_status state)
|
struct utxo **wallet_get_utxos(const tal_t *ctx, struct wallet *w, const enum output_status state)
|
||||||
{
|
{
|
||||||
struct utxo **results;
|
struct utxo **results;
|
||||||
|
@ -205,6 +197,26 @@ struct utxo **wallet_get_utxos(const tal_t *ctx, struct wallet *w, const enum ou
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct utxo **wallet_get_unconfirmed_closeinfo_utxos(const tal_t *ctx, struct wallet *w)
|
||||||
|
{
|
||||||
|
struct utxo **results;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sqlite3_stmt *stmt = db_prepare(
|
||||||
|
w->db, "SELECT " UTXO_FIELDS
|
||||||
|
" FROM outputs WHERE channel_id IS NOT NULL and confirmation_height IS NULL");
|
||||||
|
|
||||||
|
results = tal_arr(ctx, struct utxo*, 0);
|
||||||
|
for (i=0; sqlite3_step(stmt) == SQLITE_ROW; i++) {
|
||||||
|
tal_resize(&results, i+1);
|
||||||
|
results[i] = tal(results, struct utxo);
|
||||||
|
wallet_stmt2output(stmt, results[i]);
|
||||||
|
}
|
||||||
|
db_stmt_done(stmt);
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* unreserve_utxo - Mark a reserved UTXO as available again
|
* unreserve_utxo - Mark a reserved UTXO as available again
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -249,6 +249,16 @@ bool wallet_update_output_status(struct wallet *w,
|
||||||
struct utxo **wallet_get_utxos(const tal_t *ctx, struct wallet *w,
|
struct utxo **wallet_get_utxos(const tal_t *ctx, struct wallet *w,
|
||||||
const enum output_status state);
|
const enum output_status state);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wallet_get_unconfirmed_closeinfo_utxos - Retrieve any unconfirmed utxos w/ closeinfo
|
||||||
|
*
|
||||||
|
* Returns a `tal_arr` of `utxo` structs. Double indirection in order
|
||||||
|
* to be able to steal individual elements onto something else.
|
||||||
|
*/
|
||||||
|
struct utxo **wallet_get_unconfirmed_closeinfo_utxos(const tal_t *ctx,
|
||||||
|
struct wallet *w);
|
||||||
|
|
||||||
const struct utxo **wallet_select_coins(const tal_t *ctx, struct wallet *w,
|
const struct utxo **wallet_select_coins(const tal_t *ctx, struct wallet *w,
|
||||||
const u64 value,
|
const u64 value,
|
||||||
const u32 feerate_per_kw,
|
const u32 feerate_per_kw,
|
||||||
|
|
Loading…
Add table
Reference in a new issue