Good morning,

> -------- Original Message --------
> Subject: Re: [Lightning-dev] [1.1] Proposed `funding_cancelled` message
> Local Time: January 9, 2018 2:28 AM
> UTC Time: January 8, 2018 6:28 PM
> From: [email protected]
> To: ZmnSCPxj <[email protected]>
> lightning-dev\\@lists.linuxfoundation.org 
> <[email protected]>
>
> Hello,
>
>> intended to inform the fundee node that the funder node is definitely sure 
>> that the channel funding transaction can never confirm
>
> If the deprecated tx initially sent funds to the fundee via push_msat,
> then the fundee may not want to trust the funder on this. One way to
> do it trustlessly would be for the funder to attach the actual
> deprecated funding tx (not necessarily signed, but still could be big)
> to the funding_cancelled message, then the fundee would be able to
> verify that its inputs have indeed been spent by the overriding tx.

This will not work easily for the multi-channel funding transaction case.

Suppose the funder node A wants to make two channels to two other nodes B and C 
using a single funding transaction.

1.  In parallel, it initiates the open_channel on both B and C.
2.  B and C respond with accept_channel.  A can now create the funding 
transaction.
3.  In parallel, it sends the funding_created to both B and C.
4.  B responds with funding_signed.  However, C suddenly disconnects instead of 
responding with funding_signed.
5.  A cannot safely broadcast the funding transaction.  So it does 
funding_cancelled to B instead.

It is not safe for A to send the funding transaction to B, because B can turn 
around and broadcast the funding transaction itself (for example, B and C can 
be in cahoots with each other, and force A to push_msat more funds to C).  In 
the above case there is no replacement created - the intent is not to increase 
the fees to speed up opening the channel, the intent is to create a single 
funding transaction that can be used to anchor A<->B and A<->C channels.

Of course, A can simply double-spend the inputs it used for the multi-channel 
funding transaction to an address it controls solely, but that just adds an 
otherwise-unnecessary transaction with the cost paid by A.  A would prefer to 
simply silently forget the A<->B and A<->C channels and let B waste its 
resources hopelessly scanning each block for a transaction that A will never 
want to broadcast.

The important part to remember for this proposal is that the current 1.0 spec 
already allow both replace-by-fee and muilti-channel funding transactions, but 
at the cost of wasting resources on the fundee side, while only the funder side 
gets the benefit (either faster channel opens or cheaper channel opens).  
Remember that the protocols for both replace-by-fee funding transactions and 
multi-channel funding transactions simply require implementation on the funder 
side, with the fundee side using the same protocol as the simple single-channel 
non-replaceable funding transaction case.  To prevent this, a fundee node might 
restrict the number of pending channel opening attempts that a peer can have 
with it; implementing `funding_cancelled` lets the funder free up this imposed 
resource limit on the fundee side.

(one could say that the c-lightning one-channel-one-peer is an example of this 
limiting of the resources an external node can consume, for example; of course, 
my understanding is that this limit will be lifted later on)

Regards,
ZmnSCPxj
_______________________________________________
Lightning-dev mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev

Reply via email to