Hi Thomas,

I thought it would be interesting to specify this in details, to figure out
the potential subtleties. I did that in a gist [1], that I plan to turn into
a bLIP after writing some prototype code for it.

Feel free to comment, either on the gist or here.

Cheers,
Bastien

[1] https://gist.github.com/t-bast/69018875f4f95e660ec2cbbc80f711a6


Le mar. 20 juin 2023 à 19:17, Steve Lee <steven.j....@gmail.com> a écrit :

>
>
> On Tue, Jun 20, 2023 at 6:17 AM Thomas Voegtlin <thom...@electrum.org>
> wrote:
>
>>
>>
>> We have not implemented BOLT-12 yet in Electrum. Would you care to
>> describe whether bundled payments already would work with the current
>> specification, or whether they would require changes to BOLT-12? We
>> are going to implement BOLT-12 support in Electrum in the coming
>> months, and I would be happy to help here.
>>
>>
> Fantastic news!
>
>
>> I believe that it will take years *after it is merged*, until BOLT-12
>> actually becomes the dominant payment method on Lightning. OTOH, if
>> this feature was adopted in BOLT-11, I think it could be deployed much
>> faster.
>>
>>
> Why do you think it will be adopted faster? History has shown that any
> upgrade requiring wallets to change takes years even if it is a small
> change to an existing design. For example, despite only requiring a tiny
> change, there is still not widespread bech32m support [1]. Bech32/native
> segwit support also took years.
>
> [1] http://whentaproot.com/
>
>
>>
>> cheers,
>>
>> Thomas
>>
>>
>>
>>
>>
>> On 15.06.23 11:01, Bastien TEINTURIER wrote:
>> > Hi Thomas,
>> >
>> > First of all, I'd like to highlight something that may not be obvious
>> > from your email, and is actually pretty important: your proposal
>> > requires *senders* to be aware that the payment will lead to a channel
>> > creation (or a splice) on the *receiver* end. In particular, it requires
>> > all existing software used by senders to be updated. For this reason, I
>> > think extending Bolt 12 (which requires new sender code anyway) makes
>> > more sense than updating Bolt 11.
>> >
>> > I see only three strategies to provide JIT liquidity (by opening a new
>> > channel or making a splice, I'll only use the open channel case below
>> > for simplicity):
>> >
>> > 1. Ask receiver for the preimage and a fee, then open a channel and
>> >     push the HTLC amount minus the fee
>> > 2. Open a channel, then forward the HTLC amount minus a fee
>> > 3. Pre-pay fee, then open a channel and forward the whole HTLC amount
>> >     on that channel
>> >
>> > What is currently deployed on the network is 1) and 2), while you're
>> > proposing 3). Both 1) and 2) have the advantages that the sender doesn't
>> > need to be aware that JIT liquidity is happening, and doesn't need to do
>> > anything special for that payment, which is the main reason those
>> > strategies were chosen.
>> >
>> > If all you're concerned about is trust and regulation, solution 2) works
>> > fine as long as the mempool isn't empty: if the user doesn't release the
>> > preimage after you've opened the channel, you should just blacklist that
>> > channel, reject payments made to it, and double-spend it whenever you
>> > have another on-chain transaction to make (and use 1 sat/byte for JIT
>> > liquidity transactions). Even if the mempool is empty, if your LSP has
>> > transactions to make at every block, it's likely that it will succeed
>> > at double-spending the faulty channel, and thus won't lose anything.
>> >
>> > But I agree that this only works when coupled with 0-conf. If we're not
>> > using 0-conf anymore, pre-paying fees would make more sense. But we will
>> > likely keep on using 0-conf at least until Bolt 12 is deployed, so it
>> > seems more reasonable to include this new feature in Bolt 12 rather than
>> > Bolt 11, since all implementations are actively working on this?
>> >
>> > Cheers,
>> > Bastien
>> >
>> > Le jeu. 15 juin 2023 à 10:52, Thomas Voegtlin <thom...@electrum.org> a
>> > écrit :
>> >
>> >> Hello Matt,
>> >>
>> >> I think it is not too late to add a new feature to BOLT-11. In any
>> >> case, the belief that BOLT-11 is ossified should not be a reason to
>> >> make interactive something that fundamentally does not require more
>> >> interactivity than what BOLT-11 already offers. Technical decisions
>> >> should be dictated by technical needs, and I am a minimalist when it
>> >> comes to adding new messages to protocols.
>> >>
>> >> I believe that two major implementations have an incentive to support
>> >> this proposal (although I cannot speak for them):
>> >>    - Lightning Labs could potentially offer their Loop service to
>> >>      non-LND users.
>> >>    - ACINQ would be able to open channels to Phoenix users without
>> >>      requesting the preimage first. This would put them on the safe
>> side
>> >>      of the upcoming MICA regulation; I cannot emphasize enough how
>> >>      important that is.
>> >>
>> >> In addition, you could certainly decide to support that feature in
>> >> LDK, and I can speak for Electrum :-)
>> >>
>> >> It is the first time I suggest a change to the Lightning protocol, and
>> >> what I am proposing is really a tiny change. All we need is a new
>> >> invoice feature, that describes the prepayment of a fee using a
>> >> different preimage. This feature does not need to be set on all
>> >> invoices, and it could be made optional during a transition period.
>> >>
>> >> Here is how that feature could possibly made optional:
>> >>    - a new feature bit is defined, BUNDLE_PREPAYMENT
>> >>    - two extra fields are defined: prepayment_amount, prepayment_hash
>> >>    - if the sender does not support BUNDLE_PREPAYMENT and the feature
>> is
>> >>      optional, it ignores the new fields
>> >>    - if the sender support BUNDLE_PREPAYMENT:
>> >>       - sender sends (amount - prepayment_amount) with payment_hash
>> >>       - sender sends prepayment_amount with prepayment_hash
>> >>
>> >> The decision to make this feature required or optional remains with
>> >> the service provider. I can see how submarine swap providers who are
>> >> already exposed to the mining fee griefing attack could decide to make
>> >> it optional for a transition period.
>> >>
>> >> cheers,
>> >> Thomas
>> >>
>> >>
>> >> Regarding your question (a) about the distinction between splice-out
>> >> and submarine swaps: Submarine swaps make it possible to add receiving
>> >> capacity to a channel.
>> >>
>> >>
>> >>
>> >>
>> >> On 14.06.23 19:28, Matt Corallo wrote:
>> >>> I think the ship has probably sailed on getting any kind of new
>> >> interoperable change in to BOLT-11.
>> >>>
>> >>> We already can't get amount-less BOLT-11 invoices broadly supported,
>> >> rolling out yet another new incompatible version of BOLT-11 and
>> expecting
>> >> the entire ecosystem to support it doesn't seem all that likely.
>> >>>
>> >>> If we're working towards specifying some "standard" way of doing
>> swaps,
>> >> (a) I'd be curious to understand why the need isn't obviated by
>> splice-out,
>> >> and (b) why it shouldn't be built on OMs so you can do it more
>> privately.
>> >>>
>> >>> Matt
>> >>>
>> >>> On 6/13/23 1:10 AM, Thomas Voegtlin wrote:
>> >>>> Good morning list,
>> >>>>
>> >>>> I would like to propose an extension to BOLT-11, where an invoice can
>> >> contain two bundled payments, with distinct preimages and amounts.
>> >>>>
>> >>>> The use case is for services that require the prepayment of a mining
>> >> fee in order for a non-custodian exchange to take place:
>> >>>>    - Submarine swaps
>> >>>>    - JIT channels
>> >>>>
>> >>>> In both cases, the service provider receives a HTLC for which they do
>> >> not have the preimage, have to send funds on-chain (to the channel or
>> >> submarine swap funding address), and wait for the client to reveal the
>> >> preimage when they claim the payment. Because there is no guarantee
>> that
>> >> the client will actually claim the payment, the service providers need
>> to
>> >> ask prepayment of mining fees.
>> >>>>
>> >>>> In the case of submarine swaps, services that use dedicated client
>> >> software, such as Loop by Lightning Labs, can ask for a prepayment,
>> because
>> >> their software can handle it (this is called "no show penalty" on the
>> Loop
>> >> website). However, competitors who do require a dedicated wallet, not
>> such
>> >> as the Boltz exchange, cannot do that. Their website shows an invoice
>> to
>> >> the user, whose wallet that is agnostic about the swap, and it would be
>> >> unpractical for them to show two invoices to be paid simultaneously.
>> This
>> >> creates a situation where Boltz is vulnerable to DoS attacks, where the
>> >> attacker forces them to pay on-chain fees.
>> >>>>
>> >>>> In the case of JIT channels, providers who want to protect themselves
>> >> against this mining fee attack need to ask the preimage of the main
>> payment
>> >> before they open the channel. I believe this is what Phoenix does
>> (although
>> >> their pay-to-open service is not open-source, so I cannot really
>> check).
>> >> The issue is that a service that asks for the preimage first becomes
>> >> custodian. From a legal perspective, it does not matter whether they
>> open
>> >> the channel immediately after receiving the preimage, the ordering of
>> >> events makes their service custodian. In Europe, such a service will
>> fall
>> >> within the European MICA regulation. Competitors who refuse to offer
>> >> custodian services, such as Electrum, are excluded from that game.
>> >>>>
>> >>>> In order to solve that, it would be beneficial to bundle the
>> prepayment
>> >> and the main payment in the same BOLT-11 invoice.
>> >>>>
>> >>>> The semantics of bundled payments is as follows:
>> >>>>    - 1. the BOLT-11 invoice contains two preimages and two amounts:
>> >> prepayment and main payment.
>> >>>>    - 2. the receiver should wait until all the HTLCs of both payments
>> >> have arrived, before they fulfill the HTLCs of the pre-payment. If the
>> main
>> >> payment does not arrive, they should fail the pre-payment with a MPP
>> >> timeout.
>> >>>>    - 3. once the HTLCs of both payments have arrived, the receiver
>> >> fulfills the HTLCs of the prepayment, and they broadcast their on-chain
>> >> transaction. Note that the main payment can still fail if the sender
>> never
>> >> reveal the preimage of the main payment.
>> >>>>
>> >>>> Of course, nothing in my proposal prevents the service provider from
>> >> stealing the pre-payment, but that is already the case today.
>> >>>>
>> >>>> I believe this proposal would level the field in terms of competition
>> >> between lightning service providers. Currently, you need to use a
>> dedicated
>> >> client in order to use Loop, and competitors who do not have an
>> established
>> >> user base running a dedicated client are exposed to the mining fee
>> attack.
>> >> I also believe that ACINQ would benefit from this, because it would
>> make it
>> >> possible for them to make their pay-to-open service fully
>> non-custodian. My
>> >> understanding is that in its current form, the 'pay-to-open' service
>> used
>> >> by Phoenix will fall into the scope of the European MICA regulation,
>> which
>> >> they should consider as a serious issue.
>> >>>>
>> >>>> Finally, I believe that such a change should be implemented in
>> BOLT-11,
>> >> and not using BOLT-12 or onion messages. Indeed, my proposal does not
>> >> require the exchange of new messages. Some of the initial feedback I
>> >> received was that this is a use case for BOLT-12 or OM, but I think
>> that
>> >> this is making things unnecessarily complicated. We should not add new
>> >> messages when things can be done in a non-interactive way.
>> >>>>
>> >>>> Cheers,
>> >>>> ThomasV
>> >>>> _______________________________________________
>> >>>> Lightning-dev mailing list
>> >>>> Lightning-dev@lists.linuxfoundation.org
>> >>>> https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev
>> >>
>> >> --
>> >> Electrum Technologies GmbH / Paul-Lincke-Ufer 8d / 10999 Berlin /
>> Germany
>> >> Sitz, Registergericht: Berlin, Amtsgericht Charlottenburg, HRB 164636
>> >> Geschäftsführer: Thomas Voegtlin
>> >> _______________________________________________
>> >> Lightning-dev mailing list
>> >> Lightning-dev@lists.linuxfoundation.org
>> >> https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev
>> >>
>> >
>>
>> --
>> Electrum Technologies GmbH / Paul-Lincke-Ufer 8d / 10999 Berlin / Germany
>> Sitz, Registergericht: Berlin, Amtsgericht Charlottenburg, HRB 164636
>> Geschäftsführer: Thomas Voegtlin
>> _______________________________________________
>> Lightning-dev mailing list
>> Lightning-dev@lists.linuxfoundation.org
>> https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev
>>
>
_______________________________________________
Lightning-dev mailing list
Lightning-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev

Reply via email to