rgb-cln/lightningd
ZmnSCPxj jxPCSnmZ 5db69f1b41 lightningd/opening_control.c: Remove 'Try fundchannel_cancel again' error.
Changelog-Changed: `fundchannel_cancel` will now succeed even when executed while a `fundchannel_complete` is ongoing; in that case, it will be considered as cancelling the funding *after* the `fundchannel_complete` succeeds.

Let me introduce the concept of "Sequential Consistency":
All operations on parallel processes form a single total order agreed upon by all processes.

So for example, suppose we have parallel invocations of `fundchannel_complete` and `fundchannel_cancel`:

                          +--[fundchannel_complete]-->
                          |
    --[fundchannel_start]-+
                          |
                          +--[fundchannel_cancel]---->

What "Sequential Consistency" means is that the above parallel operations can be serialized as a single total order as:

    --[fundchannel_start]--[fundchannel_complete]--[fundchannel_cancel]-->

Or:

    --[fundchannel_start]--[fundchannel_cancel]--[fundchannel_complete]-->

In the first case, `fundchannel_complete` succeeds, and the `fundchannel_cancel` invocation also succeeds, sending an `error` to the peer to make them forget the chanel.

In the second case, `fundchannel_cancel` succeeds, and the succeeding `fundchannel_complete` invocation fails, since the funding is already cancelled and there is nothing to complete.

Note that in both cases, `fundchannel_cancel` **always** succeeds.

Unfortunately, prior to this commit, `fundchannel_cancel` could fail with a `Try fundchannel_cancel again` error if the `fundchannel_complete` is ongoing when the `fundchannel_cancel` is initiated.
This violates Sequential Consistency, as there is no single total order that would have caused `fundchannel_cancel` to fail.

This commit is a minimal patch which just reschedules `fundchannel_cancel` to occur after any `fundchannel_complete` that is ongoing.
2020-06-22 03:15:55 +00:00
..
test hsm: decouple hsm from wallet; init before wallet 2020-06-11 13:13:13 +02:00
.gitignore handshaked: remove. 2017-10-20 18:31:32 +02:00
Makefile setup: create a common setup which will handle the wally-context 2020-05-19 13:35:42 +09:30
bitcoind.c lightningd: fix race where we do rescan before all plugins finish init. 2020-05-05 13:45:17 +09:30
bitcoind.h lightning/bitcoind: adapt and batch fees estimations 2020-03-30 20:17:18 +10:30
chaintopology.c coins: use the chain's BIP173 name instead of a 'unit of account' 2020-05-12 15:46:58 +09:30
chaintopology.h chaintopology: better feerate targets differentiation 2020-03-30 20:17:18 +10:30
channel.c wallet-df: save our_funds amount to channel record 2020-05-07 08:43:00 +09:30
channel.h wallet-df: save our_funds amount to channel record 2020-05-07 08:43:00 +09:30
channel_control.c common/json: move rest of bitcoin/lightning-specific json functions to json_helpers. 2020-05-18 14:51:12 +02:00
channel_control.h channel control: break out separate method for canceling 2020-02-10 15:59:26 +10:30
channel_state.h wallet: Add a final `CLOSED` state to channels 2019-06-30 16:41:30 +09:30
closing_control.c df: rename 'funder' to 'opener' 2020-05-04 10:22:26 +09:30
closing_control.h common/per_per_state: generalize lightningd/peer_comm Part 1 2019-06-04 01:29:39 +00:00
coin_mvts.c coins: use the chain's BIP173 name instead of a 'unit of account' 2020-05-12 15:46:58 +09:30
coin_mvts.h coins: re-write API interface for htlc notices 2020-05-12 15:46:58 +09:30
connect_control.c cleanup: make 'u8 *features' and 'struct feature_set *fset' more explicit. 2020-04-03 13:13:21 +10:30
connect_control.h lightningd: return `features` in connect response. 2020-04-03 13:13:21 +10:30
gossip_control.c gossipd: return channel_announcement features for listchannels. 2020-05-07 08:44:58 +09:30
gossip_control.h gossipd: get fed the blockheight from lightningd when we know it. 2019-09-25 04:01:56 +00:00
gossip_msg.c wire: make fromwire_fail return non-const, use it more 2020-05-20 11:36:13 +02:00
gossip_msg.h gossipd: return channel_announcement features for listchannels. 2020-05-07 08:44:58 +09:30
hsm_control.c hsm: decouple hsm from wallet; init before wallet 2020-06-11 13:13:13 +02:00
hsm_control.h hsm: decouple hsm from wallet; init before wallet 2020-06-11 13:13:13 +02:00
htlc_end.c coins: have `we_fulfilled` be fully 'ternary' 2020-05-12 15:46:58 +09:30
htlc_end.h coins: have `we_fulfilled` be fully 'ternary' 2020-05-12 15:46:58 +09:30
htlc_set.c coins: have `we_fulfilled` be fully 'ternary' 2020-05-12 15:46:58 +09:30
htlc_set.h lightningd: make local htlc failures pass a wiremsg for errors, not a failcode. 2020-02-25 11:12:12 +10:30
invoice.c plugin:added invoice creation event 2020-05-04 19:18:05 +02:00
invoice.h lightningd: sew in htlc set. 2019-12-12 15:03:53 +01:00
io_loop_with_timers.c plugins: don't crash if getmanifest times out. 2019-07-24 16:16:53 +02:00
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
json.c rpc: don't go below feerate_floor when converting vbytes 2020-06-18 14:07:00 +02:00
json.h common: move json_stream helpers to common/json 2020-02-04 13:24:32 +10:30
jsonrpc.c lightningd/jsonrpc: don't assume the jcon to be alive at command execution 2020-06-18 14:07:00 +02:00
jsonrpc.h common: move json_stream from lightningd/ to common/ 2020-02-04 13:24:32 +10:30
lightningd.c hsm: decouple hsm from wallet; init before wallet 2020-06-11 13:13:13 +02:00
lightningd.h config: don't ignore the --commit-fee option. 2020-05-20 06:09:24 +09:30
log.c common/json: move rest of bitcoin/lightning-specific json functions to json_helpers. 2020-05-18 14:51:12 +02:00
log.h lightningd: use a simple array for less memory usage. 2019-11-18 04:50:22 +00:00
log_status.c lightningd: kill per-peer daemons if they claim a different peer id. 2019-11-18 04:50:22 +00:00
log_status.h lightningd: have logging include an optional node_id for each entry. 2019-11-18 04:50:22 +00:00
memdump.c htlcs: Make sure htlc_sets is not erroneously flagged as a memleak 2019-12-12 22:16:03 +01:00
memdump.h lightningd: add code to search strmaps for memleak detection. 2019-02-07 20:33:50 +00:00
notification.c common/json: move rest of bitcoin/lightning-specific json functions to json_helpers. 2020-05-18 14:51:12 +02:00
notification.h notifications: add new notification for coin movements and two helpers 2020-05-12 15:46:58 +09:30
onchain_control.c utxo: fill in scriptPubkey to NULL 2020-06-11 13:13:13 +02:00
onchain_control.h coin moves: don't log coin moves in onchaind if we're replaying 2020-05-12 15:46:58 +09:30
onion_message.c tools/generate-wire: no more lonely messages! 2020-05-06 14:56:09 -05:00
onion_message.h lightningd: forward onion messages. 2020-04-02 14:32:38 +10:30
opening_control.c lightningd/opening_control.c: Remove 'Try fundchannel_cancel again' error. 2020-06-22 03:15:55 +00:00
opening_control.h subd: Add a helper to get the current owning subd for a given peer 2020-01-28 23:50:52 +01:00
options.c config: don't ignore the --commit-fee option. 2020-05-20 06:09:24 +09:30
options.h common: parse --allow-deprecated-apis extremely early. 2019-11-23 22:42:34 +00:00
pay.c lightningd: don't report spurious temporary_node_failure on local failures. 2020-05-04 18:56:33 +09:30
pay.h lightningd: don't report spurious temporary_node_failure on local failures. 2020-05-04 18:56:33 +09:30
peer_control.c psbt: remove input_amounts from bitcoin tx 2020-06-11 13:13:13 +02:00
peer_control.h cleanup: make 'u8 *features' and 'struct feature_set *fset' more explicit. 2020-04-03 13:13:21 +10:30
peer_htlcs.c common/json: move rest of bitcoin/lightning-specific json functions to json_helpers. 2020-05-18 14:51:12 +02:00
peer_htlcs.h lightningd: fix crash when failing htlc once channeld dies. 2020-04-16 09:39:49 +09:30
ping.c bolt: update to BOLT spec changes (extract format + type specifications) 2019-07-16 06:10:58 +00:00
ping.h ping: complete JSON RPC ping commands even if one ping gets no response. 2018-09-14 22:11:23 +02:00
plugin.c lightningd: simplify plugin stdin/stdout initialization. 2020-05-05 13:45:17 +09:30
plugin.h lightningd: list disabled plugins in listconfig. 2020-05-05 13:45:17 +09:30
plugin_control.c lightningd: fix obsolete comment. 2020-05-05 13:45:17 +09:30
plugin_control.h lightningd: attach plugins natively to the command which started it. 2020-05-05 13:45:17 +09:30
plugin_hook.c plugin_hook_call: return indication whether we called the callback or not. 2020-05-05 13:45:17 +09:30
plugin_hook.h plugin_hook_call: return indication whether we called the callback or not. 2020-05-05 13:45:17 +09:30
signmessage.c common/wireaddr: don't include lightningd/lightningd. 2020-02-27 14:16:16 +10:30
subd.c lightningd: Added --subdaemon command to allow alternate subdaemons. 2020-02-04 10:44:13 +10:30
subd.h lightningd: have optional node_id associated with subdaemons. 2019-11-18 04:50:22 +00:00
watch.c wallet: remove edgecase around transaction checks 2020-01-02 16:56:42 +01:00
watch.h lightningd: fix occasional missing txid detection. 2019-06-28 03:31:43 +00:00