BOLT#11, clangd and renepay
In the live coding session of next week (Thursday) we are going to look at the implementation of BOLT #11 invoices in Core Lightning source code.
I think we are going to have some fun. If you are interested soon you'll find more information about the event at:
https://community.corelightning.org/c/events/
Last Tuesday I set up my text editor to work with the CLN code base
written in C. Specifically I wanted code completion and
jump-to-definition functionalities. To have them I used clangd
language server. Let me describe the step I followed in case you want
to use it in your editor/IDE.
First, I installed clang
and clangd
by running the following
command (I'm on Ubuntu 22.04.2 LTS):
$ sudo apt install clang-15 clangd-15
$ sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-15 100
$ sudo update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-15 100
Then I set the LSP (language server protocol) client of my editor
(eglot
in my case on Emacs). In the install page of clangd
there
are instructions for other editors.
To help clangd
understand CLN source code, I generated the file
compile_commands.json
at the top of CLN repository which contains
compile commands for every source file in a project.
To do so I used bear
utility after running ./configure
script like
this:
$ ./configure CC=clang --disable-rust
$ make clean
$ bear -- make
BOOM! Ready to hack on Core Lightning!
Links:
In CLN 23.08, the renepay
plugin has been added. It adds
renepay
command which implements Rene's minimum cost flow proposals
in a concrete form.
Eduardo Quintana who implemented this plugin wrote 2 articles about it that you may find interesting:
This plugin is still experimental.
Rene Pickardt and Stefan Richter are currently reviewing renepay
plugin on Github. I think there will be some interesting
conversations there! Here are the corresponding issues where the
conversation with Eduardo Quintana has already started:
Maybe you also want to check the pickhardtpayments
repository which
implements collection of classes and interfaces that help with testing
and implementation of Pickhardt Payments:
https://github.com/renepickhardt/pickhardtpayments
That's it for today, I hope you're doing well, See you next time, Tony Aldon https://lnroom.live