Imagine a three node network with two channels
A <-> B <-> C
Let's say B would like to perform two splices:
splice-out 10M sats from A <-> B
splice-out 10M sats from B <-> C
B would then like to merge these two splices into a single transaction. This is done in the standard way, namely:
- Initiate splice-out with A, continue process until A finalizes. Do not finalize ourself and pause here.
- Initiate splice-out with C, add inputs & outputs from splice attempt (1). Finalize up to the point of signature exchange.
- Pass inputs & outputs from splice attempt (2) to A. Finalize up the point of signature exchange.
At this point all nodes have a single matching transation that performs a splice for A <-> B and B <-> C.
By existing tie break rules current de-facto rule, the initiator (B) must sign first.
A is waiting to receive signatures for all inputs, which include input(s) controlled by C
- It will not send signatures until it receives all of these
C is waiting to receive signatures for all inputs, which include input(s) controlled by A
- It will not send signatures until it receives all of these
B has it's own signatures but not those for A or C. It cannot send the complete package for either splice, even though it is required to for both.
To break this race condition, the tie break rule must be updated for the accepter to sign first.
What? Why? That's not how we've implemented it.
In the A-B channel, each party adds the following inputs:
amount_a
funding_amount_ab
funding_amount_bc
amount_c
In the B-C channel, each party adds the following inputs:
amount_c
funding_amount_ab
funding_amount_bc
amount_a
The batching works as long as B doesn't have to sign first in both splices. For B to sign first in both splices, B would have to contribute the least in both splices, which means the following inequations would hold:
funding_amount_ab + funding_amount_bc + amount_c
<amount_a
(B signs first in the A-B channel)funding_amount_ab + funding_amount_bc + amount_a
<amount_c
(B signs first in the B-C channel)Those two inequations obviously cannot be both true since all amounts are positive, which means there is at least one splice in which B doesn't sign first.
So everything is working fine with the existing rule?