# 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](https://sqlite.org/wal.html) 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](https://sqlite.org/lockingv3.html#rollback) 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](https://github.com/lightningnetwork/lightning-rfc/pull/839) 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](https://github.com/lightningnetwork/lightning-rfc/pull/834) - 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: - from our website: https://acinq.co/pgp/drouinf.asc - from github user @sstone, a committer on eclair: https://api.github.com/users/sstone/gpg_keys To import our signing key: ```sh $ gpg --import drouinf.asc ``` To verify the release file checksums and signatures: ```sh $ 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: ```sh 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 - [a658fa26f](https://github.com/ACINQ/eclair/commit/a658fa26f4ba359923f6e943547ec9a1c4980f54) Set version to 0.6.1-SNAPSHOT (#1813) - [76894bd2e](https://github.com/ACINQ/eclair/commit/76894bd2e1cba226d618ffd28aa38f5da4228f97) Add additional PRNG (#1774) - [9a20aade0](https://github.com/ACINQ/eclair/commit/9a20aade0a00f6ef4ad01247e34bbc4cbe4101cd) Allow plugins to inject their own routes into API (#1805) - [d437ea1ed](https://github.com/ACINQ/eclair/commit/d437ea1ed1e5dc013dec7b609b3ac4cb160a3116) Improve API plugin support (#1819) - [98cae455f](https://github.com/ACINQ/eclair/commit/98cae455fbe629cdce165647e19c76c8d2221157) Rename pending_relay to pending_commands (#1822) - [e8c33baf5](https://github.com/ACINQ/eclair/commit/e8c33baf5477c0fabd380e149b79c24dc1d7b9da) Various improvements and fixes (#1817) - [f829a2e8c](https://github.com/ACINQ/eclair/commit/f829a2e8ca15ebcdbe162420921602fe031a9f68) Add json type hints on channel data (#1824) - [4dc2910c4](https://github.com/ACINQ/eclair/commit/4dc2910c4e865d100de3ddb0d28616c6b201f6ed) Make result set an iterable (#1823) - [6f6c458a2](https://github.com/ACINQ/eclair/commit/6f6c458a2d688c9a7ca638c1d957c88dc6c9e008) Add metrics on channels processing time (#1826) - [43a89f865](https://github.com/ACINQ/eclair/commit/43a89f8659dff7859a9e496344dc3b719bff5be2) Add a random delay before processing blocks (#1825) - [af618bc44](https://github.com/ACINQ/eclair/commit/af618bc44fe6054957f65d77000a460c14b41f30) Symmetrical HTLC limits (#1828) - [dbecb28d9](https://github.com/ACINQ/eclair/commit/dbecb28d96d780668fc006aeee2a043a1cc52d10) Include routing hints in parseinvoice API call response (#1833) - [2b6d564d2](https://github.com/ACINQ/eclair/commit/2b6d564d2161176a851908b871d41961261b1a35) Expose eclair datadir to plugins (#1837) - [bd6bad1bf](https://github.com/ACINQ/eclair/commit/bd6bad1bfd8185eea734a3ce29ce2e0d9f9da5a3) Fix eventually statements (#1835) - [a7bb2c2b2](https://github.com/ACINQ/eclair/commit/a7bb2c2b24e6b2495bef98ccf9cc65219f4f40c3) Do not store `CannotAffordFees` errors (#1834) - [d4b25d565](https://github.com/ACINQ/eclair/commit/d4b25d565d36627b87c608d474c2500f1f1ec50c) Udpate to Bitcoin Core 0.21.1 (#1841) - [e750474c7](https://github.com/ACINQ/eclair/commit/e750474c727c679321691670150253e2165d35f2) Use bitcoin-lib 0.19 (#1839) - [bbfbad597](https://github.com/ACINQ/eclair/commit/bbfbad5975925ed717ea423adb0a63b53f07ca65) Validate payment secret when decoding (#1840) - [afb1b41ea](https://github.com/ACINQ/eclair/commit/afb1b41ea0cbc9aa85ca54b19e4b94bf50690622) Update bolt 3 spec test vectors (#1669) - [d43d06f6e](https://github.com/ACINQ/eclair/commit/d43d06f6e263dc1212515c4f1b25a221adb18079) Rework TxPublisher (#1844) - [45204e238](https://github.com/ACINQ/eclair/commit/45204e238052ca1691f9f6486eaf1863ae8836b2) Schedule backup at regular interval (#1845) - [85ed4338a](https://github.com/ACINQ/eclair/commit/85ed4338a3e34d836897a434afa5353ba636e128) Reject 0-value trampoline payments (#1851) - [f857368ea](https://github.com/ACINQ/eclair/commit/f857368ea052158e894568f620fff664a5f2f549) Make trampoline payments use per-channel fee and cltv (#1853) - [f52c3dd3f](https://github.com/ACINQ/eclair/commit/f52c3dd3fca7b7f32a2740b9c866a237f4703c4f) Decode warning messages (#1854) - [516929b1a](https://github.com/ACINQ/eclair/commit/516929b1a360bc62509b42fb5be91e1a6d378dd0) Fix default file backup config (#1857) - [4ca5c62ab](https://github.com/ACINQ/eclair/commit/4ca5c62abbf38109a390b849c3b5a24a75e53c52) Remove println in tests (#1861) - [291c128ca](https://github.com/ACINQ/eclair/commit/291c128cab5e0cd92aad5d48f721f92c3134c898) Reduce some log levels (#1864) - [d9a03a52b](https://github.com/ACINQ/eclair/commit/d9a03a52b83ad342f06c4eb2f11e7db7af2bcd0a) Use warning messages for connection issues (#1863) - [af8394a28](https://github.com/ACINQ/eclair/commit/af8394a28031117f0ebfbbdcfca1cf3d1633cdd0) Add support for dual db backend (#1746) - [3a573e267](https://github.com/ACINQ/eclair/commit/3a573e267a71a4f1fe91b35065a8d0b96f7f6d69) Improve message for `CannotRetrieveFeerates` error (#1859) - [bd57d41ef](https://github.com/ACINQ/eclair/commit/bd57d41ef3acb755cbb7039603071fec391e5d6a) Add a globalbalance api call (#1737) - [08faf3b7f](https://github.com/ACINQ/eclair/commit/08faf3b7fd05876be358f5ddc2ef6b27d126fd6b) Add json columns in Postgres (#1865) - [f8feb1959](https://github.com/ACINQ/eclair/commit/f8feb19593a269e42f637c8f9bb8cb0843c9a2cd) Use schemas in Postgres (#1866) - [cea3fc026](https://github.com/ACINQ/eclair/commit/cea3fc026da3cc53f0f210fe57501c9ffe8e0c41) Use proper data type for timestamps in Postgres 2 (#1862) - [95fffe348](https://github.com/ACINQ/eclair/commit/95fffe348cbd42da70731fbf76f5cae48a97b678) Reduce pg transaction isolation (#1860) - [547d7e700](https://github.com/ACINQ/eclair/commit/547d7e700f05960c0f52a79819a94686af186d96) Create chain directory (#1872) - [e9df4eece](https://github.com/ACINQ/eclair/commit/e9df4eece09f8757d4e03405b70d1d551bdadff1) Channels data format migration (#1849) - [733c6e768](https://github.com/ACINQ/eclair/commit/733c6e768890ef75e0766b5986431a3f2038390c) Refactor global balance tests (#1874) - [ca51a2d16](https://github.com/ACINQ/eclair/commit/ca51a2d16883d277da41258e527a4ac7a6894bb6) Enable WAL mode on Sqlite (#1871) - [3ae9a4ae3](https://github.com/ACINQ/eclair/commit/3ae9a4ae37297e0527bb83f22135860bcc3e49b3) Additional reestablish test (#1875) - [d02760d96](https://github.com/ACINQ/eclair/commit/d02760d96fb5f353d9f82ae8582db9e7b67c9654) Fail unsigned outgoing htlcs on force-close (#1832) - [3bb7ee8a3](https://github.com/ACINQ/eclair/commit/3bb7ee8a3eeff9811ff0d88365f0d6bc212bc822) Parallel payment request generation (#1878) - [51824028b](https://github.com/ACINQ/eclair/commit/51824028b303169be733c216c2f18c531d11887b) Fix flaky channel integration tests (#1879) - [b4183edfa](https://github.com/ACINQ/eclair/commit/b4183edfa130e81a3c0be624f9331fc9ae4caab1) Fetch incoming payments in parallel (#1880) - [8c49f779a](https://github.com/ACINQ/eclair/commit/8c49f779ada17ba2e3a061b14f5b54c148101b15) Fix payment handler tests (#1882) - [01b40730f](https://github.com/ACINQ/eclair/commit/01b40730fe6d58bfba9c37fcc0d6a32c772851e3) Implement option-upfront-shutdown-script (#1846) - [79729c78c](https://github.com/ACINQ/eclair/commit/79729c78c14fdd2ccea88619d4ed19272964c9b2) Update README (#1881) - [c22596bb9](https://github.com/ACINQ/eclair/commit/c22596bb9243331c8195998738a89d1b0739bf60) Update dependencies and enable fatal warnings (#1885) - [adf36de0e](https://github.com/ACINQ/eclair/commit/adf36de0e154950ef71caa5373a6e85410ab1789) Fix yet another flaky test (#1886) - [3f1c2506a](https://github.com/ACINQ/eclair/commit/3f1c2506a6efe6563a890014b3fa3e4f1f34859b) Fix watcher flaky test (#1883) - [c8c5e76d2](https://github.com/ACINQ/eclair/commit/c8c5e76d2428a37baa4654807275cd1db22af4ba) Update akka-http-json4s dependency (#1889) - [d3ae32326](https://github.com/ACINQ/eclair/commit/d3ae32326e78729390706998b899ea63a91ecb79) Set version to 0.6.1 (#1887)