Invoiceless Lightning Payments with Circular Route

Lightning Network payments require the payee first issue an invoice, which the payer uses to send money to it. While in commercial usage this is a useful property, in some other cases this can be cumbersome. There are some ongoing developments toward Invoiceless payments — for example Sphinx send — I’d like to present another approach.

The basic idea is simple: take the money to the target node, overpay the necessary forwarding fee, and bring small change back. So the receiver does not need to bother with invoice issuing. And this method works with all current Lightning Node implementation, no update required on the receiving side.

By saying Invoiceless I mean the recipient does not need to issue an invoice. Instead, the sender generates one and technically pays to itself, inserting the payee in the payment route for the fees. The invoice generation is an automatic step on the sender side. And the focus is shifting from paying an invoice to paying a forwarding fee to the target node.

Downsides

This method is a dirty hack with a number of downsides:

  • The route is twice as long because of the circular routing. A small amount of the payment is going on the way back, which will slightly increase fees and failure probability.
  • The payee receives the money as a routing fee: hard to associate with anything, distinguish from the usual fees.
  • This payment type requires the sending and receiving parts both to be a well-connected node with proper liquidity for the route back and forth.
  • This approach also has a security issue: if the payment is going on a circular route A-B-C-D-A to pay C and the same malicious entity controls B and D, the money can be stolen by skipping C.

Implementation as a c-lightning plugin

I’ve implemented this feature as a c-lightning plugin. After the plugin activated, someone can easily send Invoiceless payments by typing:

lightning-cli sendinvoiceless <nodeid> <msatoshi>

And thanks to Michael Schmoock’s excellent work, it is also possible to check the received Invoiceless payments:

lightning-cli receivedinvoiceless

You can find more information about the sendinvoiceless plugin in the GitHub repository.


Author: Zoltán Gálli

Follow me on Twitter, or open a channel to my Lightning Network Node! Feedback, comments, and suggestions are welcome!