Skip to content

Eclair v0.6.1

Compare
Choose a tag to compare
@t-bast t-bast released this 19 Jul 14:33
· 630 commits to master since this release
d3ae323

Eclair v0.6.1

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).

Major changes

Performance improvements

Sqlite

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.

  1. WAL is significantly faster in most scenarios.
  2. WAL provides more concurrency as readers do not block writers and a writer does not block readers.
  3. Disk I/O operations tends to be more sequential using WAL.
  4. WAL uses many fewer fsync() operations.

This small change improves performance by more than 5x.

Payment Handling

Invoice generation (#1878) and handling of incoming payments (#1880) are now processed in parallel, resulting in a higher throughput under load.

Improved Postgres support

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.

Upfront shutdown script

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.

Transaction publishing improvements

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.

API changes

This release updates a few APIs:

  • parseinvoice displays Bolt 11 invoices routing hints (#1833)
  • Plugins can inject their own routes into the API instead of spawning a separate HTTP server (#1805 and #1819)

Miscellaneous improvements and bug fixes

  • Eclair now uses Bitcoin Core 0.21.1 by default (#taproot)
  • Eclair now supports warning messages
  • Eclair uses additional entropy on top of the operating system RNG to mitigate random number generation failures (#1774)

Verifying signatures

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

Building

Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):

  • Ubuntu 20.04
  • AdoptOpenJDK 11.0.6
  • Maven 3.8.1

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.

Upgrading

This release is fully compatible with eclair v0.6.0. You don't need to close your channels, just stop eclair, upgrade and restart.

Changelog

a658fa2 Set version to 0.6.1-SNAPSHOT (#1813)
76894bd Add additional PRNG (#1774)
9a20aad Allow plugins to inject their own routes into API (#1805)
d437ea1 Improve API plugin support (#1819)
98cae45 Rename pending_relay to pending_commands (#1822)
e8c33ba Various improvements and fixes (#1817)
f829a2e Add json type hints on channel data (#1824)
4dc2910 Make result set an iterable (#1823)
6f6c458 Add metrics on channels processing time (#1826)
43a89f8 Add a random delay before processing blocks (#1825)
af618bc Symmetrical HTLC limits (#1828)
dbecb28 Include routing hints in parseinvoice API call response (#1833)
2b6d564 Expose eclair datadir to plugins (#1837)
bd6bad1 Fix eventually statements (#1835)
a7bb2c2 Do not store CannotAffordFees errors (#1834)
d4b25d5 Udpate to Bitcoin Core 0.21.1 (#1841)
e750474 Use bitcoin-lib 0.19 (#1839)
bbfbad5 Validate payment secret when decoding (#1840)
afb1b41 Update bolt 3 spec test vectors (#1669)
d43d06f Rework TxPublisher (#1844)
45204e2 Schedule backup at regular interval (#1845)
85ed433 Reject 0-value trampoline payments (#1851)
f857368 Make trampoline payments use per-channel fee and cltv (#1853)
f52c3dd Decode warning messages (#1854)
516929b Fix default file backup config (#1857)
4ca5c62 Remove println in tests (#1861)
291c128 Reduce some log levels (#1864)
d9a03a5 Use warning messages for connection issues (#1863)
af8394a Add support for dual db backend (#1746)
3a573e2 Improve message for CannotRetrieveFeerates error (#1859)
bd57d41 Add a globalbalance api call (#1737)
08faf3b Add json columns in Postgres (#1865)
f8feb19 Use schemas in Postgres (#1866)
cea3fc0 Use proper data type for timestamps in Postgres 2 (#1862)
95fffe3 Reduce pg transaction isolation (#1860)
547d7e7 Create chain directory (#1872)
e9df4ee Channels data format migration (#1849)
733c6e7 Refactor global balance tests (#1874)
ca51a2d Enable WAL mode on Sqlite (#1871)
3ae9a4a Additional reestablish test (#1875)
d02760d Fail unsigned outgoing htlcs on force-close (#1832)
3bb7ee8 Parallel payment request generation (#1878)
5182402 Fix flaky channel integration tests (#1879)
b4183ed Fetch incoming payments in parallel (#1880)
8c49f77 Fix payment handler tests (#1882)
01b4073 Implement option-upfront-shutdown-script (#1846)
79729c7 Update README (#1881)
c22596b Update dependencies and enable fatal warnings (#1885)
adf36de Fix yet another flaky test (#1886)
3f1c250 Fix watcher flaky test (#1883)
c8c5e76 Update akka-http-json4s dependency (#1889)
5fa8fed Set version to 0.6.1 (#1887)