Dear fellow lightning developers,

last week I have started a new repository [0] where I maintain a python
package that can be used to test (and more importantly simulate) the
improvements to payment delivery that we have suggested over the last years
(c.f. [1][2][3]). I kindly invite you to check it out.

Feedback & code review will be highly appreciated if you find the spare
time to do so. Similarly I will be delighted if you can provide a patch or
an extension if necessary. Note while this may already be very useful that
this is work in progress and there are already quite some issues open [4]
and I am supervising several Summer of Bitcoin projects [5] that I expect
to contribute to the repository over the next couple of weeks in various
ways.

You can easily install the **pre-alpha** package (version 0.0.0) with the
PythonPackageIndex via:

:~$ pip install pickhardtpayments

Example code that shows how to use this library can be found in the
`Readme.md` file and the `example` folder [6]. Unfortunately my
presentation at MIT Bitcoin Expo where I first talked about this is still
buried in a long Livestream video (Day 2 Track A starts at 1:16:19) and is
not yet available as a stand alone video but I will maintain a
`Resources.md` file where I link to useful talks & articles [7] and other
resources related to the topic.

One final and very significant way to speed up the computation of the min
cost flow solver that I have included since my last mail [3] was achieved
by pruning the network to remove edges that are highly unlikely to be part
of the payment flow. The current solution is pretty ad-hoc but I am working
on doing this in a more automated / reliable way[8]. In this way I am very
pleased to report that as of now and with the given size of the zeroBaseFee
subnet...

**...The min cost flow solver consistently takes less that 100ms to find
close to optimal flows!**

That being said: Please be aware that the entire runtime of the provided
code is currently much higher. The reason is that for mere convenience I
have used the very slow `networkx` library that is used to store the
ChannelGraph, UncertaintyNetwork and OracleLightningNetwork with a lot of
memory overhead to maintain those data structures and to copy the necessary
data to the min cost flow solver before starting the actual solver (c.f.
[9]).

For safety reasons I deliberately did not provide an API to do mainnet
tests. However to the fellow expert user - who knows what they are doing -
it should be fairly straight forward to conduct mainnet experiments via the
following two steps:

1.) Create your own wrapper to an Lightning Node that exposes the
`send_onion` call [10] in the same way how it is currently being done in
the `OracleLightingNetwok` class and bring your own wrapper to the
`SyncSimulatedPaymentSession` class instead of the oracle that we have

2.) You may wish to make the payment loop [11] inside the
`SyncSimulatedPaymentSession` async.

Of course delivering production ready mainnet code will require more work
as one needs to figure out other constraints like channel reserves, min/max
htlc sizes, available HTLC slots, offline peers, hanging htlcs (stuck
payments),...

Also if you want to do simulations with non uniform distributions of
liquidity or because your LSP has a crawled snapshot of actual Liquidity
you can just bring your own `OracleLightningNetwork` that encodes your
assumed or known ground truth about the network.

I hope all of this makes sense. Feel free to ask me anything that you need
and I am curious to see if this will be useful for you. Note that there is
a notebook that has basically the same code but more documentation and in
particular a glossary of terms that can currently be found at [12].

Thanks to all people that I have been collaborating with so far and to
NTNU, BitMEX, various anonymous donors and Patreons who all helped to
achieve this.

with kind regards Rene Pickhardt

[0]: https://github.com/renepickhardt/pickhardtpayments
[1]:
https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-March/002984.html
[2]: https://arxiv.org/abs/2107.05322
[3]:
https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-March/003510.html
[4]: https://github.com/renepickhardt/pickhardtpayments/issues
[5]:
https://www.summerofbitcoin.org/project-ideas-details?recordId=recJchpFa9tqSZkQ4
[6]: https://github.com/renepickhardt/pickhardtpayments/tree/main/examples
[7]:
https://github.com/renepickhardt/pickhardtpayments/blob/main/Resources.md
[8]: https://github.com/renepickhardt/pickhardtpayments/issues/1
[9]: https://github.com/renepickhardt/pickhardtpayments/issues/6
[10]:
https://github.com/renepickhardt/pickhardtpayments/blob/1121b48ec6bf5fb2dee2b1793f87d489ce3149e3/pickhardtpayments/OracleLightningNetwork.py#L37

[11]:
https://github.com/renepickhardt/pickhardtpayments/blob/1121b48ec6bf5fb2dee2b1793f87d489ce3149e3/pickhardtpayments/SyncSimulatedPaymentSession.py#L351
[12]:
https://github.com/renepickhardt/mpp-splitter/blob/pickhardt-payments-simulation-dev/Pickhardt-Payments-Simulation.ipynb
(includes
a glossary of terms and many explainations)

-- 
https://ln.rene-pickhardt.de  <https://ln.rene-pickhardt.de>
_______________________________________________
Lightning-dev mailing list
Lightning-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev

Reply via email to