A scala implementation of the Lightning Network.
This release adds official support for the dual-funding feature, an up-to-date implementation of Bolt 12 offers, and a fully working splicing prototype. We're waiting for the specification work to be finalized for some of those features, and other implementations to be ready for cross-compatibility tests. You should only activate them if you know what you're doing, and are ready to handle backwards-incompatible changes!
This release also contains various on-chain fee improvements, more configuration options, performance enhancements and various minor bug fixes.
The detailed release notes can be found here.
You will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-<version>-XXXXXXX-bin.zip
with sha256 checksums that match the one
we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with previous eclair versions. You don't need to close your channels, just stop eclair, upgrade and restart.
This release contains a lot of preparatory work for important (and complex) lightning features: dual-funding, splicing and Bolt 12 offers.
These features are now fully implemented in eclair
, but we're waiting for the specification work to be finalized and other implementations to be ready for cross-compatibility tests.
You should only activate them if you know what you're doing, and are ready to handle potential backwards-incompatible changes!
We also make plugins more powerful, introduce mitigations against various types of DoS, and improve performance in many areas of the codebase.
The detailed release notes can be found here
You will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-<version>-XXXXXXX-bin.zip
with sha256 checksums that match the one
we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with previous eclair versions. You don't need to close your channels, just stop eclair, upgrade and restart.
This release adds official support for two important lightning features: zero-conf channels and channel aliases. It also adds experimental support for dual-funding and a lot of preparatory work for Bolt 12 offers.
:warning: we also require at least Bitcoin Core 23.0: make sure to upgrade and reconfigure your node (see detailed instructions in the release notes)
The detailed release notes can be found here
You will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-<version>-XXXXXXX-bin.zip
with sha256 checksums that match the one
we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with previous eclair versions. You don't need to close your channels, just stop eclair, upgrade and restart.
This is a patch release which adds two commits:
It addresses unwanted disconnections with peers that use unknown messages.
You will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-0.7.0-cad88bf-bin.zip
with sha256 checksums that match the one we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with previous eclair versions. You don't need to close your channels, just stop eclair, upgrade and restart.
This release adds official support for two long-awaited lightning features: anchor outputs and onion messages. Support for the PostreSQL database backend is also now production ready! This release also includes a few bug fixes and many new (smaller) features. It is fully compatible with 0.6.2 (and all previous versions of eclair).
Because this release changes the default type of channels that your node will use, make sure you read the release notes carefully! The release notes can be found here.
You will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-0.7.0-a804905-bin.zip
with sha256 checksums that match the one we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with previous eclair versions. You don't need to close your channels, just stop eclair, upgrade and restart.
This releases fixes a known vulnerability, makes several performance improvements, includes a few bug fixes and many new features. It is fully compatible with 0.6.1 (and all previous versions of eclair).
This release requires a few actions from node operators when upgrading: make sure you read the release notes carefully!
The release notes can be found here.
You will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-0.6.2-6817d6f-bin.zip
with sha256 checksums that match the one we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with previous eclair versions. You don't need to close your channels, just stop eclair, upgrade and restart.
This release makes major performance improvements, includes a few bug fixes and several new features. It is fully compatible with 0.6.0 (and all previous versions of eclair).
Eclair now uses write-ahead logging in Sqlite (#1871). WAL is better suited to our DB access patterns, and is both much more performant and safer than the default rollback journal that we were using previously.
- WAL is significantly faster in most scenarios.
- WAL provides more concurrency as readers do not block writers and a writer does not block readers.
- Disk I/O operations tends to be more sequential using WAL.
- WAL uses many fewer fsync() operations.
This small change improves performance by more than 5x.
Invoice generation (#1878) and handling of incoming payments (#1880) are now processed in parallel, resulting in a higher throughput under load.
This is the continuation of an effort to make PosgreSQL production-ready. The database schema has been reworked (#1866) and is now better organized, with appropriate types for timestamps (#1862). There have been several concurrency-related bug fixes.
We have also added JSONB
columns for local channels and for network announcements (#1865). All individual data fields can now be accessed from SQL and indexed, which is very convenient for advanced analysis and tuning of a routing node.
This release adds support for option_upfront_shutdown_script
(feature bits 4/5).
This feature lets you specify a closing address when you open a channel: your peer will ensure that when you close, your funds can only go to that address.
It can be useful to protect against future hacks of your node, because the attacker won't be able to close your channels and send the funds to an address that he controls. However, it doesn't prevent the attacker from exfiltrating funds by paying lightning invoices, so you shouldn't rely on this feature alone to make your node hack-proof.
This option is disabled by default, but can be enabled in your eclair.conf
.
Note that if you enable it, the closing address will be automatically generated by your bitcoind
node.
This release reworks our internal transaction publishing architecture (see #1844 for details). The new architecture is more flexible, provides better logging and makes it easy to add dynamic fee bumping in the future for anchor output channels. It will also make it easier to automatically use CPFP to ensure funding transactions confirm before the 2016 blocks timeout is reached.
This release updates a few APIs:
parseinvoice
displays Bolt 11 invoices routing hints (#1833)You will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-0.6.1-XXXXXXX-bin.zip
with sha256 checksums that match the one we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with eclair v0.6.0. You don't need to close your channels, just stop eclair, upgrade and restart.
a658fa26f Set version to 0.6.1-SNAPSHOT (#1813)
76894bd2e Add additional PRNG (#1774)
9a20aade0 Allow plugins to inject their own routes into API (#1805)
d437ea1ed Improve API plugin support (#1819)
98cae455f Rename pending_relay to pending_commands (#1822)
e8c33baf5 Various improvements and fixes (#1817)
f829a2e8c Add json type hints on channel data (#1824)
4dc2910c4 Make result set an iterable (#1823)
6f6c458a2 Add metrics on channels processing time (#1826)
43a89f865 Add a random delay before processing blocks (#1825)
af618bc44 Symmetrical HTLC limits (#1828)
dbecb28d9 Include routing hints in parseinvoice API call response (#1833)
2b6d564d2 Expose eclair datadir to plugins (#1837)
bd6bad1bf Fix eventually statements (#1835)
a7bb2c2b2 Do not store CannotAffordFees
errors (#1834)
d4b25d565 Udpate to Bitcoin Core 0.21.1 (#1841)
e750474c7 Use bitcoin-lib 0.19 (#1839)
bbfbad597 Validate payment secret when decoding (#1840)
afb1b41ea Update bolt 3 spec test vectors (#1669)
d43d06f6e Rework TxPublisher (#1844)
45204e238 Schedule backup at regular interval (#1845)
85ed4338a Reject 0-value trampoline payments (#1851)
f857368ea Make trampoline payments use per-channel fee and cltv (#1853)
f52c3dd3f Decode warning messages (#1854)
516929b1a Fix default file backup config (#1857)
4ca5c62ab Remove println in tests (#1861)
291c128ca Reduce some log levels (#1864)
d9a03a52b Use warning messages for connection issues (#1863)
af8394a28 Add support for dual db backend (#1746)
3a573e267 Improve message for CannotRetrieveFeerates
error (#1859)
bd57d41ef Add a globalbalance api call (#1737)
08faf3b7f Add json columns in Postgres (#1865)
f8feb1959 Use schemas in Postgres (#1866)
cea3fc026 Use proper data type for timestamps in Postgres 2 (#1862)
95fffe348 Reduce pg transaction isolation (#1860)
547d7e700 Create chain directory (#1872)
e9df4eece Channels data format migration (#1849)
733c6e768 Refactor global balance tests (#1874)
ca51a2d16 Enable WAL mode on Sqlite (#1871)
3ae9a4ae3 Additional reestablish test (#1875)
d02760d96 Fail unsigned outgoing htlcs on force-close (#1832)
3bb7ee8a3 Parallel payment request generation (#1878)
51824028b Fix flaky channel integration tests (#1879)
b4183edfa Fetch incoming payments in parallel (#1880)
8c49f779a Fix payment handler tests (#1882)
01b40730f Implement option-upfront-shutdown-script (#1846)
79729c78c Update README (#1881)
c22596bb9 Update dependencies and enable fatal warnings (#1885)
adf36de0e Fix yet another flaky test (#1886)
3f1c2506a Fix watcher flaky test (#1883)
c8c5e76d2 Update akka-http-json4s dependency (#1889)
5fa8fedb9 Set version to 0.6.1 (#1887)
This release makes some core features mandatory, includes a few important bug fixes and several performance improvements. It is fully compatible with 0.5.1 (and all previous versions of eclair).
This release makes two important features mandatory:
var_onion_optin
(added to the spec in July 2019)payment_secret
(added to the spec in December 2019)These features have been widely deployed and protect against privacy attacks and stealing payments to 0-value invoices (as described here).
You won't be able to connect to nodes that don't support these features nor pay invoices that don't include a payment_secret
.
Eclair uses ZMQ to receive blocks and transactions from your bitcoin node. While ZMQ is usually very reliable, we discovered that its pub/sub model has some limitations. If a subscriber encounters network failures, it will silently disconnect without notifying the publisher. This never happens when your bitcoin node is on the same machine as eclair, but may happen when bitcoin is running on a remote machine and a VPN is used between the two machines. Eclair now sets a TCP keep-alive on the ZMQ socket to work around this limitation and quickly reconnect.
The blockchain watchdogs have also been improved to run at fixed intervals if no blocks are received. They will poll secondary blockchain sources (bitcoinheaders.net, blockstream.info, mempool.space and blockcypher.com) to detect that your eclair node is missing blocks.
This release removes support for using Electrum instead of Bitcoin Core for your bitcoin wallet. Electrum support was necessary for mobile wallets, but wasn't recommended for server deployments. Wallets are migrating to our Kotlin lightning stack, so eclair can now target exclusively server deployments.
Eclair depends on many low-level bitcoind
RPCs for fee bumping which aren't available yet in Electrum.
We previously introduced beta support for using PostgreSQL as database backend in eclair v0.4.1. We've fixed some bugs since then and improved the integration, but please note that PostgreSQL support is still in beta. We're actively working on finalizing this integration and making PostgreSQL production-ready in a future release.
This release adds support for option_shutdown_anysegwit
(spec PR available here).
Current segwit bitcoin addresses (P2WPKH and P2WSH) only use segwit version 0, but this change lets nodes use bitcoin addresses with other version numbers (taproot will use version 1).
This release updates a few APIs:
--blocking=<bool>
option has been added to the payinvoice
API (#1751)We've also updated our internal API DSL, which paves the way for more plugin integration in a future release. Head over to our API documentation for more details.
You will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-0.6.0-XXXXXXX-bin.zip
with sha256 checksums that match the one we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with eclair v0.5.1. You don't need to close your channels, just stop eclair, upgrade and restart.
Special thanks to @tompro who reworked our internal API DSL.
This release includes many bug fixes and improvements, a new API and monitoring updates. It is fully compatible with 0.5.0 (and all previous versions of eclair).
When eclair starts up and restores channels, it makes a lot of calls to bitcoind
to check the status of each channel.
We improved our calling pattern to greatly reduce the number of calls made when some channels are closing.
This is particularly noticeable when the mempool is quite full and you have many channels.
See #1699 for details.
Most of the bandwidth consumed by lightning nodes is due to gossip (syncing the network graph).
When your eclair node has a lot of peers and doesn't use a sync-whitelist
, you may end up syncing with many different peers and obtaining redundant information, thus wasting bandwidth.
Eclair now only syncs with peers you have a channel with to reduce bandwidth usage.
This release contains a lot of changes for the upcoming anchor outputs commitment format:
While you can start experimenting with this commitment format, it is still not safe to activate in production. Anchor outputs is a complex and subtle change that requires re-architecting most of our transaction broadcasting logic and utxo management. We are making steady progress towards that, but we're not there yet.
Kamon tracing has been removed in this release. It was too invasive in the codebase, generally unused and was costing some bandwidth. We've found that metrics and logs are enough to correctly monitor your eclair node.
Additional metrics to monitor transaction signing have been added. The rate of transaction signatures is a good indicator of how busy your node is.
This release adds a new path-finding API:
findroutebetweennodes
lets you inspect the network graph by looking for routes between two nodes (whereas findroute
only allowed finding routes between your node and a remote node)Head over to our API documentation for more details.
node_announcement
(#1693)initial_routing_sync
: this was bandwidth-heavy and now unnecessary (#1683)update_fee
and shutdown
, which could lead to channels stuck in shutdown
(#1661)min_relay_fee
(#1687)revoke_and_ack
had not been received (#1706)You will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-0.5.1-XXXXXXX-bin.zip
with sha256 checksums that match the one we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with Eclair v0.5.0. You don't need to close your channels, just stop eclair, upgrade and restart.
DoSync
(#1708)Thanks to our new contributors, @tompro and @ariskk!
This release includes many exciting new features, API changes as well as several bug fixes and improvements. It is fully compatible with 0.4.2 (and all previous versions of eclair).
Eclair now allows you to scale up one logical lightning node across multiple servers.
Front servers take care of routing table related gossip and syncing requests from peers, which is cpu/bandwidth intensive. The backend server can focus on core channel management. BOLT 1 and BOLT 7 messages are handled in the frontend, while BOLT 2 messages go through and are processed in the backend.
This new feature is key for robust and scalable enterprise deployments. Head over to the documentation for more details.
Eclair now includes a blockchain watchdog, that fetches bitcoin headers from various sources in order to detect whether we're being eclipsed.
The current blockchain sources we use are:
Eclair now splits your seed into two distinct parts: node_seed.dat
and channel_seed.dat
.
It makes sense to separate the keys that are used for connection handling and gossip (and have no impact on your funds) from the keys that are used for channel operations (and have a direct, critical impact on your funds).
This change paves the way for future security improvements, such as using hardware wallets for channel keys.
On-chain feerate spikes have a subtle but important impact on the security of your channel funds.
Eclair lets you configure the tolerance you have with your peers via the eclair.on-chain-fees.feerate-tolerance
configuration parameter.
With this release, you can now override this configuration for specific nodes. This can be useful when one of your peer is trusted and you know it won't try to cheat you (for example because it's one of your own nodes, a family member's node or a friend). You can configure a higher feerate tolerance with these nodes than with nodes you don't know or trust.
More plugins hooks have been added to eclair, to allow custom connection management and custom commitment formats. Hats off to @btcontract who was able to implement hosted channels entirely as an eclair plugin!
This release contains a few improvements to existing APIs:
channelId
field has been added to the channel-state-changed
websocket eventopen
APIHead over to our API documentation for more details.
option_static_remotekey
is now optionally activated by defaultYou will need gpg
and our release signing key 7A73FE77DE2C4027. Note that you can get it:
To import our signing key:
$ gpg --import drouinf.asc
To verify the release file checksums and signatures:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
Use the following command to generate the eclair-node package:
mvn clean install -DskipTests
That should generate eclair-node/target/eclair-node-0.5.0-XXXXXXX-bin.zip
with sha256 checksums that match the one we provide and sign in SHA256SUMS.asc
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 11, we have not tried everything.
This release is fully compatible with Eclair v0.4.2. You don't need to close your channels, just stop eclair, upgrade and restart.
Commitments
a trait (#1542)Features.toString
(#1573)NodeParams.nodeId
always equals NodeParams.privateKey.publicKey
(#1593)timedOutOutgoingHtlcs
from AbstractCommitments (#1604)