Today, we welcome the latest Core Lightning release, v23.11, codenamed Bitcoin Orangepaper (courtesy of Shahana Farooqui). After the huge v23.08 release, this update is a bit smaller in scope and mainly offers improvements and follow-ups. Nonetheless, it includes some noteworthy features that we are excited to share with you.
Dual funding reached compatibility level: After a long journey, the dual funding process finally reached cross implementation compatibility.
RPC command updates: This release has some exciting additions and updates for the Core Lightning API, including a much more powerful
check command and a brand new
Core Lightning for developers: Core Lightning’s various interfaces keep growing and runes got an exciting new field. We also got some new options!
Dual Funding within Reach!
The dual funding proposal has been around for several years now. Since Core Lightning was the first Lightning node to officially support dual funding, it's no surprise that we are fans so let’s talk about it once more!
During a traditional channel funding process, the funding transaction is funded solely by the party who initiates a new channel. This means that, despite being created cooperatively, only this party can add inputs and outputs to the funding transaction.
Using the interactive dual funding protocol, both parties can participate in the funding process by contributing inputs and outputs to the funding transaction (interactive-tx sub-protocol). This is accomplished by sharing updates regarding their desired inputs and outputs during a negotiation phase. Once both parties agree on their additions to the funding transaction, they exchange a necessary set of signatures and can proceed to finalize the funding transaction and the initial commitment transaction.
This process allows for the creation of channels with non-zero balances on both ends. One advantage of this is the ability to establish channels for instant payment sending and receiving without any prior balance shift.
Let’s get to the news now:
A fundamental aspect of the BOLT specification process is the requirement for two separate and compatible implementations of any proposal before it can be included in a BOLT.
Lisa Neigut's recent contributions to the implementation of dual funding in Core Lightning allow the funding process to continue in the event of a temporary connection loss. This was the final step for Core Lightning and Eclair to achieve cross-compatibility.
This Core Lightning release brings some notable updates and additions to the API.
Building on the foundations laid by the previous release's
--recover option, this version elevates it to an RPC-command
recover that is accessible through plugins and various interfaces. Behind the scenes, the command causes the node to restart with the
--recover option enabled. This feature is especially advantageous for front-end applications.
Together with the introduction of
check received a significant upgrade, becoming even more powerful. In addition to validating command format and parameters,
check conducts a thorough analysis without altering the system's status.
The conjunction of both commands allows one to check if a recovery can be performed without actually doing so, which can be helpful to build robust user interfaces.
Another example for the improved capabilities of the
check command is the
delinvoice utilizes the parameters
status to remove an invoice from the database. Previously, the
check command validated the form of the command by ensuring the presence of both required parameters. With this update,
check conducts a deeper analysis checking the presence of an invoice with the given
label and confirming that the
$ lightning-cli check delinvoice "l1" "paid"
"message": "Invoice status is unpaid not paid",
decode command has also been updated.
decode can now handle an emergency recover string, which allows a user to verify the integrity and validity of the emergency.recover file. The emergency recover string can be obtained with the new
getemergencyrecover command of the
These updates provide a robust framework that will make it easier for users to operate their Core Lightning node in a secure way.
Speaking of securely operating a Core Lightning Node,
runes got a new restriction that allows for more flexibility and fine-grained access management. The
per constraint allows for general rate limiting and accommodates a range of time units such as
msec, etc. To enable this, Core Lightning now keeps track of a
last_used timestamp per rune that is also added to the
This release also updates all time fields to nanoseconds. This affects the
resolved_time as well as
In addition to
recover, which makes Core Lightning more accessible to front-end applications, the wait and pagination APIs have been extended.
wait now supports two more subsystems
listsendpay. These updates allow waiting for any status change on forwarded HTLCs and payments, and add pagination to
listsendpays. These additions are particularly useful for front-end developers to improve the user experience. To make these available to a wider audience, the
wait system has been enabled on the Rust and gRPC interfaces.
Another neat command that has been added to Core Lightning's utility arsenal is
datastoreusage. This command provides a clear view of the database space occupied by datastore entries without the need to manually quantify the data.
This suite of command updates not only enhances Core Lightning's functionality, but also improves the user and developer experience, underscoring the platform's continued evolution.
Other Notable Updates
With this release, Core Lightning has buried the old way of enabling developer functionality on a node. Previously, it was necessary to compile Core Lightning from scratch. To enable developer functionality, one now simply needs to start
lightningd with the
--developer runtime variable. This is a huge simplification for developers.
Core Lightning now enables large channels by default. During the early development of the Lightning Network, the developers decided to temporarily limit the maximum channel size to less than 0.16777216 BTC. This decision was made to limit the amount a user could lose due to software bugs. Nowadays channels can exceed this limit but a node must signal its support and willingness to do so. This release sets the indicators by default enabling “wumbology for all”. Users can still disable wumbo channels by setting the
Finally, this release also adds the ability to create invoices that include a fallback P2TR address. This way an invoice can also be paid on-chain, for example, when there is not enough inbound liquidity at the time of payment. Core Lightning now tracks payments to fallback addresses and resolves any waiting commands. The fallback addresses can be enabled by setting the configuration option
Join the CLN Community
We want to give a shout out to the contributors (a total of 29 for the v23.11 release) who continue to help us improve CLN with every update. We are grateful for your support; your dedication and feedback made the new release possible.
As always, let us know what you like or what we could improve by starting a thread on Build On L2, where we have special developer and node runner pages to help facilitate long-form discussions. It is free to sign up, and nyms are more than welcome!
You can also reach us on our usual social channels: Twitter, Telegram, or Discord.
One more surprise: keep your eyes on the Blockstream YouTube channel. We have a string of special podcast episodes featuring Rusty Russell, Christian Decker, and other CLN contributors, where we detail the new release.
Thanks again to the community and all those who continue to make Core Lightning great!