This is quite a common request, and we've used a solution I like to call
the "Poor man's rendez-vous". It basically routes a payment through all
the parties that are to be paid, with the last one accepting the payment
for all participants.

The payment is atomic, once the circuit is set up no participant can
cheat the others and it's seamless from the payer's perspective.

Let's say user `A` wants to pay `B` and `C` atomically. `B` gets 10ksat
and `C` gets 90ksat out of a total of 100ksat:

 1) `C` creates an invoice with payment hash `H` for 90ksat and sends it
    to `B`
 2) `B` creates an invoice with payment hash `H` (same as the first
    invoice, but `B` doesn't know the preimage) for 100ksat (maybe plus
    a tiny bit for routing fees between `B` and `C`).
 3) `A` receives an invoice which appears to be from `B` for the
    expected total of 100ksat.
 4) `A` proceeds to pay the invoice to `B` like normal
 5) `B` receives the incoming payment, but doesn't have the preimage for
    `H`, so they must forward to `C` if they want to receive their
    share. `B` then proceeds to pay the 90ksat invoice from `C`, which
    reveals the preimage to them, and they can turn around and claim
    the incoming `100ksat` (covering both `B` and `C` share)

It's a poor man's version because it requires creating two invoices and
`B` sees two payments (100ksat incoming, 90ksat outgoing), but the
overall outcome is the desired one: either both parties get paid or
noone gets paid. This can trivially be extended to any number of parties
(with reduced success probability), and will remain atomic. It also
doesn't require any changes on the sender side, and only minimal setup
between the payees. The crux here is that we somehow need to ensure `H`
is always the same along the entire chain of payments, but with a good
coordination protocol that should be feasible.


Ronan McGovern <> writes:
> Hi folks, I'm Ronan - based in Dublin and building (simple
> payment links to accept Lightning).
> I'm wondering if there is a way to create an invoice that splits the
> payment to two lightning addresses?
> If not, what would be required to develop this?
> * A protocol change?
> * Could it be built with the current protocol (I see an app on LN Bits to
> split but it doesn't seem to work).
> Many thanks, Ronan
> Ronan McGovern
> _______________________________________________
> Lightning-dev mailing list
Lightning-dev mailing list

Reply via email to