core-lightning/lightningd
Vincenzo Palazzo b92b9f074d delpay: delete the payment by status from the db
There are cases (difficult to reproduce with a test) where
a payment will fail one time and succeed later.

As far I understand in this case the groupid field of the payment
is the same, and the only thing that change is the status, so
our logic inside the delpay is ambiguous where it is not
possible to delete a payment as described in https://github.com/ElementsProject/lightning/issues/6114

A sequence of commands that explain the problem is

```
$ lc -k listpays payment_hash=H
{
   "pays": [
      {
         "bolt11": "I",
         "destination": "redacted",
         "payment_hash": "H",
         "status": "complete",
         "created_at": redacted,
         "completed_at": redacted,
         "preimage": "P",
         "amount_msat": "redacted",
         "amount_sent_msat": "redacted"
      }
   ]
}
$ lc delpay H complete
{
   "code": 211,
   "message": "Payment with hash H has failed status but it should be complete"
}
```

In this case, the delpay is not able to delete a payment because the
listpays is returning only the succeeded one, so by running the
listsendpays we may see the following result where our delpay logic
will be stuck because it works to ensure that all the payments stored
in the database has the status specified by the user

```
➜  VincentSSD clightning --testnet listsendpays -k payment_hash=7fc74bedbb78f2f3330155d919a54e730cf19c11bc73e96c027f5cd4a34e53f4
{
   "payments": [
      {
         "id": 322,
         "payment_hash": "7fc74bedbb78f2f3330155d919a54e730cf19c11bc73e96c027f5cd4a34e53f4",
         "groupid": 1,
         "partid": 1,
         "destination": "030b686a163aa2bba03cebb8bab7778fac251536498141df0a436d688352d426f6",
         "amount_msat": 300,
         "amount_sent_msat": 1664,
         "created_at": 1679510203,
         "completed_at": 1679510205,
         "status": "failed",
         "bolt11": "lntb1pjpkj4xsp52trda39rfpe7qtqahx8jjplhnj3tatxy8rh6sc6afgvmdz7n0llspp50lr5hmdm0re0xvcp2hv3nf2wwvx0r8q3h3e7jmqz0awdfg6w206qdp0w3jhxarfdenjqargv5sxgetvwpshjgrzw4njqun9wphhyaqxqyjw5qcqp2rzjqtp28uqy77te96ylt7ek703h4ayldljsf8rnlztgf3p8mg7pd0qzwf8a3yqqpdqqqyqqqqt2qqqqqqgqqc9qxpqysgqgeya2lguaj6sflc4hx2d89jvah8mw9uax4j77d8rzkut3rkm0554x37fc7gy92ws9l76yprdva2lalrs7fqjp9lcx40zuty8gca0g5spme3dup"
      },
      {
         "id": 323,
         "payment_hash": "7fc74bedbb78f2f3330155d919a54e730cf19c11bc73e96c027f5cd4a34e53f4",
         "groupid": 1,
         "partid": 2,
         "destination": "030b686a163aa2bba03cebb8bab7778fac251536498141df0a436d688352d426f6",
         "amount_msat": 300,
         "amount_sent_msat": 3663,
         "created_at": 1679510205,
         "completed_at": 1679510207,
         "status": "failed"
      },
      {
         "id": 324,
         "payment_hash": "7fc74bedbb78f2f3330155d919a54e730cf19c11bc73e96c027f5cd4a34e53f4",
         "groupid": 1,
         "partid": 3,
         "destination": "030b686a163aa2bba03cebb8bab7778fac251536498141df0a436d688352d426f6",
         "amount_msat": 300,
         "amount_sent_msat": 3663,
         "created_at": 1679510207,
         "completed_at": 1679510209,
         "status": "failed"
      },
      {
         "id": 325,
         "payment_hash": "7fc74bedbb78f2f3330155d919a54e730cf19c11bc73e96c027f5cd4a34e53f4",
         "groupid": 1,
         "partid": 4,
         "destination": "030b686a163aa2bba03cebb8bab7778fac251536498141df0a436d688352d426f6",
         "amount_msat": 300,
         "amount_sent_msat": 4663,
         "created_at": 1679510209,
         "completed_at": 1679510221,
         "status": "complete",
         "payment_preimage": "43f746f2d28d4902489cbde9b3b8f3d04db5db7e973f8a55b7229ce774bf33a7"
      }
   ]
}
```

This commit solves the problem by forcing the delete query in the
database to specify status too, and work around this kind of
ambiguous case.

Fixes: f52ff07558 (lightningd: allow delpay to delete a specific payment.)
Reported-by: Antoine Poinsot <darosior@protonmail.com>
Link: https://github.com/ElementsProject/lightning/issues/6114
Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
Co-Developed-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: delpay be more pedantic about delete logic by allowing
delete payments by status directly on the database.
2023-04-05 06:15:47 +09:30
..
test wallet: fix up PSBTs as a migration. 2023-03-31 09:16:25 +10:30
.gitignore Ignore all the deamon inside the git history 2021-10-28 15:51:38 +02:00
bitcoind.c lightningd: only use non-numeric JSON ids if plugin says we can. 2022-11-21 11:23:54 +01:00
bitcoind.h lightningd: trace JSON id prefixes through sendrawtx. 2022-09-16 12:31:45 +09:30
chaintopology.c lightningd/chaintopology: ensure htables are always tal objects. 2023-01-12 11:44:10 +10:30
chaintopology.h lightningd/chaintopology: ensure htables are always tal objects. 2023-01-12 11:44:10 +10:30
channel.c df: persist our setting to disk, read back to dualopend at reinit 2023-02-07 21:03:36 -06:00
channel.h df: persist our setting to disk, read back to dualopend at reinit 2023-02-07 21:03:36 -06:00
channel_control.c lightningd: move bip32_base pointer into struct lightningd. 2023-03-22 13:50:32 +10:30
channel_control.h doc: update BOLTs to bc86304b4b0af5fd5ce9d24f74e2ebbceb7e2730 2022-09-12 09:34:52 +09:30
channel_state.h wallet: make it clear that enum state_change is in db. 2023-03-25 15:28:02 +10:30
closed_channel.c lightningd: add listclosedchannels command. 2023-03-25 15:28:02 +10:30
closed_channel.h lightningd: add listclosedchannels command. 2023-03-25 15:28:02 +10:30
closing_control.c lightningd: move bip32_base pointer into struct lightningd. 2023-03-22 13:50:32 +10:30
closing_control.h lightningd: trace JSON id prefixes through sendrawtx. 2022-09-16 12:31:45 +09:30
coin_mvts.c lightningd: use hash map for peers instead of linked list. 2023-01-21 08:05:31 -06:00
coin_mvts.h coin_mvt: tiny, dont import lightningd header 2022-02-07 13:02:09 +10:30
connect_control.c connectd: make exception for peer storage msgs. 2023-02-08 08:37:59 -06:00
connect_control.h lightningd: tell connectd we're shutting down. 2023-02-05 20:40:47 +01:00
datastore.c lightningd: unescape JSON strings for db. 2023-02-11 12:22:40 -06:00
dual_open_control.c Update libwally to 0.8.8, support PSBTv2 2023-03-23 16:10:55 +10:30
dual_open_control.h lightningd: prepare internal json routines for listpeerchannels. 2023-01-13 10:42:42 +10:30
feerate.c lightningd/json.h: remove. 2022-07-15 12:24:00 -05:00
feerate.h lightningd/json.h: remove. 2022-07-15 12:24:00 -05:00
gossip_control.c cleanup: rename json_add_amount_msat_only to json_add_amount_msat 2023-03-18 15:55:49 +10:30
gossip_control.h gossipd: batch outpoints spent, add block height. 2022-09-24 15:22:27 +09:30
hsm_control.c lightningd: move bip32_pubkey here from common/, add hsm check. 2023-03-22 13:50:32 +10:30
hsm_control.h lightningd: move bip32_pubkey here from common/, add hsm check. 2023-03-22 13:50:32 +10:30
htlc_end.c channeld: don't calculate blinding shared secret, let lightningd do it. 2022-10-26 11:29:06 +10:30
htlc_end.h channeld: don't calculate blinding shared secret, let lightningd do it. 2022-10-26 11:29:06 +10:30
htlc_set.c lightningd: ensure htlc htables are always tal objects. 2023-01-12 11:44:10 +10:30
htlc_set.h Makefile: use completely separate spec-derived files for EXPERIMENTAL_FEATURES 2020-09-08 09:42:00 +09:30
invoice.c global: remove deprecated non-msat-named msat fields. 2023-03-18 15:55:49 +10:30
invoice.h Makefile: use completely separate spec-derived files for EXPERIMENTAL_FEATURES 2020-09-08 09:42:00 +09:30
io_loop_with_timers.c database: pull out database code into a new module 2022-03-05 15:03:34 +10:30
io_loop_with_timers.h lightningd/io_loop_with_timers.c: Move mainloop to its own source file, have chaintopology use it. 2019-05-31 17:57:10 +02:00
jsonrpc.c lightningd: require "jsonrpc": "2.0" as per JSONRPC spec. 2023-03-18 15:55:49 +10:30
jsonrpc.h lightningd: only use non-numeric JSON ids if plugin says we can. 2022-11-21 11:23:54 +01:00
lightningd.c lightningd: move bip32_pubkey here from common/, add hsm check. 2023-03-22 13:50:32 +10:30
lightningd.h lightningd: move bip32_base pointer into struct lightningd. 2023-03-22 13:50:32 +10:30
log.c common: expose node_id_hash functions. 2023-01-21 08:05:31 -06:00
log.h options: let log-level subsystem filter also cover nodeid. 2022-07-09 09:59:52 +09:30
log_status.c check: make sure all files outside contrib/ include "config.h" first. 2021-12-06 10:05:39 +10:30
log_status.h cleanup: remove unneeded includes in header files. 2021-09-17 09:43:22 +09:30
Makefile lightningd: add listclosedchannels command. 2023-03-25 15:28:02 +10:30
memdump.c lightningd: use a hash table for peer->dbid. 2023-01-21 08:05:31 -06:00
memdump.h lightningd: simplify memleak code. 2022-03-10 09:40:09 +10:30
notification.c cleanup: rename json_add_amount_msat_only to json_add_amount_msat 2023-03-18 15:55:49 +10:30
notification.h jsonrpc: make error codes an enum. 2022-09-19 10:18:55 +09:30
offer.c bolt12: update comments to match latest spec. 2022-11-09 15:08:03 +01:00
onchain_control.c lightningd: move bip32_pubkey here from common/, add hsm check. 2023-03-22 13:50:32 +10:30
onchain_control.h onchaind: remove 'is_replay' logic 2021-12-28 04:42:42 +10:30
onion_message.c common: update to latest onion-message spec. 2023-01-30 13:24:29 +10:30
onion_message.h common: remove support for pre v0.10.2 onionmessages. 2021-12-01 05:44:28 +10:30
opening_common.c openingd: Add reserve to fundchannel and multifundchannel 2022-09-21 11:25:47 +02:00
opening_common.h openingd: Add reserve to fundchannel and multifundchannel 2022-09-21 11:25:47 +02:00
opening_control.c Update libwally to 0.8.8, support PSBTv2 2023-03-23 16:10:55 +10:30
opening_control.h lightningd: prepare internal json routines for listpeerchannels. 2023-01-13 10:42:42 +10:30
options.c cleanup: rename json_add_amount_msat_only to json_add_amount_msat 2023-03-18 15:55:49 +10:30
options.h opts: adds the autobool on/off/auto feature 2023-01-25 14:37:56 +01:00
pay.c delpay: delete the payment by status from the db 2023-04-05 06:15:47 +09:30
pay.h jsonrpc: make error codes an enum. 2022-09-19 10:18:55 +09:30
peer_control.c listpeerchannels: add channel_type, both in hex and as array of names. 2023-03-25 15:28:02 +10:30
peer_control.h listpeerchannels: add channel_type, both in hex and as array of names. 2023-03-25 15:28:02 +10:30
peer_fd.c subdaemons: remove gossipd fd from per-peer daemons. 2022-02-08 11:15:52 +10:30
peer_fd.h subdaemons: remove gossipd fd from per-peer daemons. 2022-02-08 11:15:52 +10:30
peer_htlcs.c cleanup: rename json_add_amount_msat_only to json_add_amount_msat 2023-03-18 15:55:49 +10:30
peer_htlcs.h lightningd: fix valgrind reported leak when we exit early. 2023-01-17 14:13:45 +10:30
ping.c common: clean up json routine locations. 2022-07-15 12:24:00 -05:00
plugin.c lightningd: treat JSON ids as direct tokens. 2023-01-11 11:13:27 +10:30
plugin.h lightningd: correctly exit when an important-plugin fails to start. 2022-11-30 15:47:31 +01:00
plugin_control.c lightningd: wire plugin command JSON id through to plugin commands. 2022-09-16 12:31:45 +09:30
plugin_control.h plugins: add command field to subcommand output. 2021-06-25 09:49:33 +09:30
plugin_hook.c lightningd: don't call memcpy with NULL. 2023-01-12 11:44:10 +10:30
plugin_hook.h plugin: wire JSON id for commands which caused hooks to fire. 2022-09-16 12:31:45 +09:30
routehint.c lightnind: use aliases in routehints for private channels. 2022-08-09 16:31:36 -05:00
routehint.h invoice: overhaul routehints to use topology.listincoming, cleanup. 2021-06-16 10:29:17 +09:30
signmessage.c lightningd: remove deprecated behavior where checkmessage would fail quietly. 2023-03-18 15:55:49 +10:30
subd.c lightningd: more graceful shutdown. 2022-09-12 14:00:41 +02:00
subd.h lightningd: more graceful shutdown. 2022-09-12 14:00:41 +02:00
watch.c lightningd/chaintopology: ensure htables are always tal objects. 2023-01-12 11:44:10 +10:30
watch.h Remove names of parameters of callbacks which confuse gcc. 2022-08-31 12:18:28 +03:00