add autogenerated fallbacks (not custom fallbacks) to invoice_fallbacks table

This commit is contained in:
Chris Guida 2023-10-26 14:02:13 +10:30 committed by Rusty Russell
parent cdc0bd47ff
commit e3e0abc73b
4 changed files with 50 additions and 0 deletions

View File

@ -695,6 +695,7 @@ struct invoice_info {
struct bolt11 *b11;
struct json_escape *label;
struct chanhints *chanhints;
bool custom_fallbacks;
};
/* Add routehints based on listincoming results: NULL means success. */
@ -879,6 +880,13 @@ invoice_complete(struct invoice_info *info,
info->label->s);
}
if (info->cmd->ld->unified_invoices && info->b11->fallbacks && !info->custom_fallbacks) {
for (size_t i = 0; i < tal_count(info->b11->fallbacks); i++) {
const u8 *fallback_script = info->b11->fallbacks[i];
invoices_create_fallback(wallet->invoices, inv_dbid, fallback_script);
}
}
/* Get details */
details = invoices_get_details(info, wallet->invoices, inv_dbid);
@ -915,6 +923,10 @@ invoice_complete(struct invoice_info *info,
json_add_string(response, "warning_private_unused",
"Insufficient incoming capacity, once private channels were excluded (try exposeprivatechannels=true?)");
if (info->cmd->ld->unified_invoices && info->custom_fallbacks)
json_add_string(response, "warning_custom_fallbacks",
"WARNING: Not tracking on-chain payments for custom fallback addresses");
return command_success(info->cmd, response);
}
@ -1160,7 +1172,9 @@ static struct command_result *json_invoice(struct command *cmd,
if (command_check_only(cmd))
return command_check_done(cmd);
info->custom_fallbacks = false;
if (fallbacks) {
info->custom_fallbacks = true;
if (cmd->ld->unified_invoices) {
log_info(cmd->ld->log,
"WARNING: Not tracking on-chain payments "

View File

@ -386,6 +386,11 @@ bool invoices_create(struct invoices *invoices UNNEEDED,
const struct sha256 *rhash UNNEEDED,
const struct sha256 *local_offer_id UNNEEDED)
{ fprintf(stderr, "invoices_create called!\n"); abort(); }
/* Generated stub for invoices_create_fallback */
void invoices_create_fallback(struct invoices *invoices UNNEEDED,
u64 inv_dbid UNNEEDED,
const u8 *scriptPubkey UNNEEDED)
{ fprintf(stderr, "invoices_create_fallback called!\n"); abort(); }
/* Generated stub for invoices_delete */
bool invoices_delete(struct invoices *invoices UNNEEDED,
u64 inv_dbid UNNEEDED,

View File

@ -371,6 +371,26 @@ bool invoices_find_by_rhash(struct invoices *invoices,
}
}
void invoices_create_fallback(struct invoices *invoices,
u64 inv_dbid,
const u8 *scriptPubkey)
{
struct db_stmt *stmt;
/* Save to database. */
stmt = db_prepare_v2(
invoices->wallet->db,
SQL("INSERT INTO invoice_fallbacks"
" ( invoice_id, scriptpubkey )"
" VALUES ( ?, ?);"));
db_bind_u64(stmt, inv_dbid);
db_bind_blob(stmt, scriptPubkey,
tal_bytelen(scriptPubkey));
db_exec_prepared_v2(stmt);
tal_free(stmt);
}
bool invoices_find_by_fallback_script(struct invoices *invoices,
u64 *inv_dbid,
const u8 *scriptPubkey)

View File

@ -89,6 +89,17 @@ bool invoices_find_by_label(struct invoices *invoices,
bool invoices_find_by_rhash(struct invoices *invoices,
u64 *inv_dbid,
const struct sha256 *rhash);
/**
* invoices_create_fallback - Add scriptpubkey into invoice_fallbacks for this inv
*
* @param invoices - the invoice handler.
* @param inv_dbid - invoice id
* @param scriptPubKey - the fallback scriptpubkey associated with
* the above invoice id
*/
void invoices_create_fallback(struct invoices *invoices,
u64 inv_dbid,
const u8 *scriptPubkey);
/**
* invoices_find_by_fallback_script - Search for an invoice by
* scriptpubkey in invoice_fallbacks child table