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 instructions below)!
## Major changes
### Bitcoin Core 23 or higher required
This release adds support for Bitcoin Core 23.x and removes support for previous Bitcoin Core versions.
Please make sure you have updated your Bitcoin Core node before updating eclair, as eclair won't start when connected to older versions of `bitcoind`.
Bitcoin Core 23.0 updated what type of change outputs are created: when sending funds to an address, `bitcoind` will create a change output that matches that address type.
This is undesirable for lightning, as non-segwit inputs cannot be used for lightning channels (funds can be lost when using them).
Bitcoin Core needs to be configured to generate segwit addresses only, so you must add the following lines to your `bitcoin.conf`:
```conf
addresstype=bech32
changetype=bech32
```
Note that you may also use `bech32m` if your peers support `option_shutdown_anysegwit`.
### Add support for channel aliases and zeroconf channels
#### Channel aliases
Channel aliases offer a way to use arbitrary channel identifiers for routing. This feature improves privacy by not
leaking the funding transaction of the channel during payments.
This feature is enabled by default, but your peer has to support it too, and it is not compatible with public channels.
#### Zeroconf channels
Zeroconf channels make it possible to use a newly created channel before the funding tx is confirmed on the blockchain.
:warning: Zeroconf requires the fundee to trust the funder. For this reason it is disabled by default, and you can
only enable it on a peer-by-peer basis.
##### Enabling through features
Below is how to enable zeroconf with a given peer in `eclair.conf`. With this config, your node will _accept_ zeroconf
$ ./eclair-cli open --nodeId=03864e... --fundingSatoshis=100000 --channelType=anchor_outputs_zero_fee_htlc_tx+zeroconf --announceChannel=true
```
- open a private zeroconf channel with aliases:
```shell
$ ./eclair-cli open --nodeId=03864e... --fundingSatoshis=100000 --channelType=anchor_outputs_zero_fee_htlc_tx+scid_alias+zeroconf --announceChannel=false
```
### Experimental support for dual-funding
This release adds experimental support for dual-funded channels, as specified [here](https://github.com/lightning/bolts/pull/851).
Dual-funded channels have many benefits:
- both peers can contribute to channel funding
- the funding transaction can be RBF-ed
This feature is turned off by default, because there may still be breaking changes in the specification.
To turn it on, simply enable the feature in your `eclair.conf` (use at your own risk until the specification is final!):
```conf
eclair.features.option_dual_fund = optional
```
If your peer also supports the feature, eclair will automatically use dual-funding when opening a channel.
If the channel doesn't confirm, you can use the `rbfopen` RPC to initiate an RBF attempt and speed up confirmation.
In this first version, the non-initiator cannot yet contribute funds to the channel.
This will be added in future updates, most likely in combination with [liquidity ads](https://github.com/lightning/bolts/pull/878).
### Fix channel pruning behavior
The specification says that a channel should be pruned whenever _one_ side has not updated their `channel_update` in two weeks.
Eclair previously only pruned channels when _both_ sides didn't update, because we assumed that nodes would not keep generating useless `channel_update`s if their peer is offline.
But that assumption wasn't correct: `lnd` does generate such updates.
This release fixes the pruning behavior to strictly follow the specification, which results in a slightly smaller network DB.
### Probabilistic estimation of remote channels balance
Whenever an outgoing payment is attempted, eclair will use the result to keep track of the balance of channels in the path.
The path-finding algorithm doesn't yet use these estimates: we want to gather real-world data and improve the model before we can actually use it.
But a future release of eclair will leverage this data to improve payments reliability.
See #2272 for more details.
### Changes to features override
Eclair supports overriding features on a per-peer basis, using the `eclair.override-init-features` field in `eclair.conf`.
These overrides will now be applied on top of the default features, whereas the previous behavior was to completely ignore default features.
We provide detailed examples in the [documentation](../Configure.md#customize-features).
### Remove support for Tor v2
Dropped support for version 2 of Tor protocol. That means:
- Eclair can't open control connection to Tor daemon version 0.3.3.5 and earlier anymore
- Eclair can't create hidden services for Tor protocol v2 with newer versions of Tor daemon
IMPORTANT: You'll need to upgrade your Tor daemon if for some reason you still use Tor v0.3.3.5 or earlier before
upgrading to this release.
### Remove support for MacOS arm64
This version of eclair uses `libsecp256k1` natively, we include bindings for Linux arm64 but not for MacOS arm64 yet.
This can be worked around by downloading an x86-64 version of the JVM to run eclair.
See [the following issue](https://github.com/ACINQ/eclair/issues/2427) for more details.
### API changes
-`channelbalances` retrieves information about the balances of all local channels (#2196)
-`channelbalances` and `usablebalances` return a `shortIds` object instead of a single `shortChannelId` (#2323)
-`stop` stops eclair: please note that the recommended way of stopping eclair is simply to kill its process (#2233)
-`rbfopen` lets the initiator of a dual-funded channel RBF the funding transaction (#2275)
-`listinvoices` and `listpendinginvoices` now accept `--count` and `--skip` parameters to limit the number of retrieved items (#2474)
### Miscellaneous improvements and bug fixes
#### Beta support for Prometheus and Grafana
Eclair can export metrics to Prometheus and consume them from Grafana.
Head over to the [documentation](../Monitoring.md) to set it up for your node.
The dashboards we provide are currently very basic: if they are useful to you, please consider opening pull requests to improve them.
#### Randomize outgoing payment expiry
When sending a payment, if the cltv expiry used for the final node is very close to the current block height, it lets intermediate nodes figure out their position in the route.
To protect against this, a random delta is now added to the current block height, which makes it look like there are more hops after the final node.
You can configure the delta used in your `eclair.conf`:
```conf
// minimum value that will be added to the current block height
This is disabled by default, because there is still a risk of losing funds until bitcoin adds support for package relay.
If the mempool becomes congested and the feerate is too low, the commitment transaction may never reach miners' mempools because it's below the minimum relay feerate.
#### Public IP addresses can be DNS host names
You can now specify a DNS host name as one of your `server.public-ips` addresses (see PR [#911](https://github.com/lightning/bolts/pull/911)).
Note: you can not specify more than one DNS host name.
#### Support for testing on the signet network
To test Eclair with bitcoind configured for signet, set the following values in `eclair.conf`:
```conf
eclair.chain = "signet"
eclair.bitcoind.rpcport=38332
```
#### Support lengthy onion errors
The encrypted errors returned with failed payments were previously limited to 256 bytes.
Eclair now allows errors of arbitrary length, which paves the way for future updates to the onion errors used in lightning.
See #2441 for more details.
#### Deprecate zlib gossip compression
Gossip compression using zlib has been [deprecated](https://github.com/lightning/bolts/pull/981) in the specification and removed from eclair (#2244).
Eclair still supports decompressing zlib content for backwards-compatibility, but will not compress outgoing gossip anymore.
#### Remove legacy Sphinx onion format
The legacy onion format has been replaced by the more flexible variable-length onion format.
Support for the legacy format has been [removed from the specification](https://github.com/lightning/bolts/pull/962).
#### Make `payment_secret` mandatory in Bolt 11 invoices
The `payment_secret` was introduced years ago to ensure that intermediate nodes cannot steal from payments to amountless invoices.
It is now fully supported across the network, so we make it mandatory.
## 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-<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.
## Upgrading
This release is fully compatible with previous eclair versions. You don't need to close your channels, just stop eclair,
upgrade and restart.
## Changelog
- [4451069](https://github.com/ACINQ/eclair/commit/44510698f7c07ffd4c9f42223a4bcec6230062a1) Back to Dev (#2159)
- [cc61f12](https://github.com/ACINQ/eclair/commit/cc61f121ecbf70061cc191ae68c98469ae8419bd) Fix publish loop when funding tx double-spent (#2162)
- [648f93f](https://github.com/ACINQ/eclair/commit/648f93f682f7b980507158fd3dc65d0a1c30962a) Ignore revoked htlcs after restart (#2161)
- [8a65e35](https://github.com/ACINQ/eclair/commit/8a65e35c8f1778e931b71821a9b32b13e68a1b93) Don't broadcast commit before funding locked (#2163)
- [4307bad](https://github.com/ACINQ/eclair/commit/4307bada516aae604a9ba0894ae679146ea971bc) Refactoring of PaymentRequest (#2144)
- [553727c](https://github.com/ACINQ/eclair/commit/553727cb22d3d4a0f596b75a3ab733769bb24479) Convert wiki pages in to files in the docs directory and general docs file cleanups (#2165)
- [9401592](https://github.com/ACINQ/eclair/commit/94015923827c2e49525382c8022155904f270c27) Typed features (#2164)
- [daddee1](https://github.com/ACINQ/eclair/commit/daddee1912e9fc627f0cabe841ca7504e00fef21) fixup! Convert wiki pages in to files in the docs directory and general docs file cleanups (#2165) (#2167)
- [ca71a3c](https://github.com/ACINQ/eclair/commit/ca71a3c1526bec18fb81cb9f873de257d0559fc9) Update a few dependencies (#2166)
- [66aafd6](https://github.com/ACINQ/eclair/commit/66aafd68723bf6a6ad2dd5612586c7cf0335b279) Better logging for NegativeProbability exception (#2171)
- [53cb50a](https://github.com/ACINQ/eclair/commit/53cb50a36e623c1dffea8a219167f634a3072a01) Restrict building and publishing docker images to new pushes on master (#2182)
- [99aabda](https://github.com/ACINQ/eclair/commit/99aabdabd046baf82e2ed83625ef1712b785f1a5) Add txId in logback.xml (#2183)
- [609c206](https://github.com/ACINQ/eclair/commit/609c206a675ff3f98fedff7399216bd022b2a637) Ignore IBD in regtest (#2185)
- [b5b2022](https://github.com/ACINQ/eclair/commit/b5b2022efc71b0d15fd98d29995dfc11f75d5b70) Add more PR details to contributing guidelines (#2186)
- [068b139](https://github.com/ACINQ/eclair/commit/068b1393e16e33adc971e7ef4b189cbfd82f245c) purge expired invoice at given time interval (#2174)
- [be78e0c](https://github.com/ACINQ/eclair/commit/be78e0ca578726015bd32e45bd0310415061843c) Separate htlc calculation from local/remote commit (no quicklens) (#2194)
- [c4f67e7](https://github.com/ACINQ/eclair/commit/c4f67e7495a3c1273a22cca5bf69dac104add564) Bump postgres-jdbc version (#2198)
- [f3c6c78](https://github.com/ACINQ/eclair/commit/f3c6c7885de5b4c8c48302b06b25b1e7422c763c) Do not fail to relay payments with insufficient fee rate that satisfy the previous fee rate (#2201)
- [8f2c93c](https://github.com/ACINQ/eclair/commit/8f2c93c1ab34ceeb5ea697be3c499916078b9130) Add delayed fees to release notes (#2204)
- [f14300e](https://github.com/ACINQ/eclair/commit/f14300e33f86e71c5fbaf0f46c75b12abaaab8a9) two new min-funding config parameters for public and private channels (#2203)
- [7b5cefa](https://github.com/ACINQ/eclair/commit/7b5cefaf99a4ccbe7462ff663f52447b84b124c1) Replace `FeatureScope` by type hierarchy (#2207)
- [18ba900](https://github.com/ACINQ/eclair/commit/18ba90067ec04741cd9c52b3a62a04f98dd46b68) (Minor) Fix timeout in tests (#2208)
- [5af042a](https://github.com/ACINQ/eclair/commit/5af042a56afa549a3e5480ad23f0b228a869f242) Add messages for when startup fails due to wrong bitcoind wallet(s) loaded (#2209)
- [fd84909](https://github.com/ACINQ/eclair/commit/fd849095854547dfcf0af5e80aa906fa36cdbbf4) Fix TLV tag number in exception (#2212)
- [3e02046](https://github.com/ACINQ/eclair/commit/3e02046a52a19f9230c4bb63303154108860923d) Add logs about local channel graph inclusion (#2184)
- [6823309](https://github.com/ACINQ/eclair/commit/682330987400b0d035ca5284e5c2fcb2fd6412df) Use `NodeAddress` everywhere instead of `InetAddress` (#2202)
- [0e88440](https://github.com/ACINQ/eclair/commit/0e88440e6a215ce33da019b60cbb714131fbdbff) Make trampoline pay the right fee (#2206)
- [d135224](https://github.com/ACINQ/eclair/commit/d13522480598be29cffe99b6ff7b453bb9403a3b) Refactor channel into separate traits (#2217)
- [9358e5e](https://github.com/ACINQ/eclair/commit/9358e5e1f5d5fbbf19edcb8891693822c0d4f7bf) Add `channelbalances` API call (#2196)
- [6f31ed2](https://github.com/ACINQ/eclair/commit/6f31ed2dc99399783d2aef842cdb5fa19a327ede) Add release notes for new min-funding settings and invoice purger (#2210)
- [1627682](https://github.com/ACINQ/eclair/commit/162768274e5e40e67381482fbe37ce0e797a0f65) Remove ipv6 zone identifier test (#2220)
- [7883bf6](https://github.com/ACINQ/eclair/commit/7883bf621dd6add1ab25b23d43cb8b47154acad8) Use bitcoin-kmp through bitcoin-lib (#2038)
- [36ed788](https://github.com/ACINQ/eclair/commit/36ed788d392e53a95f707c33dd0930871c72936a) Update experimental trampoline feature bit (#2219)
- [8e2fc7a](https://github.com/ACINQ/eclair/commit/8e2fc7acd35ef9c9c1e6318913f37ae225828c5a) Run channel state tests sequentially (#2271)
- [81571b9](https://github.com/ACINQ/eclair/commit/81571b95e697fc748e565ad6ee6e27c9a03e753d) Fix flaky test PeerConnectionSpec (#2277)
- [bb7703a](https://github.com/ACINQ/eclair/commit/bb7703aa5d513e4697e0fd610d289365335baa23) Add simple integration test between `Channel` and `Router` (#2270)
- [03097b0](https://github.com/ACINQ/eclair/commit/03097b0d42b29346535c87480c9e990bcdc83203) Add `localChannelReserve` and `remoteChannelReserve` (#2237)
- [6fa02a0](https://github.com/ACINQ/eclair/commit/6fa02a0ec18264d082dc6148fafb1ac22315aef6) Use long id instead of short id in `ChannelRelay` (#2221)
- [d98da6f](https://github.com/ACINQ/eclair/commit/d98da6f44f219831b630924cd2e09595d4db5f4f) Index unannounced channels on `channelId` instead of `shortChannelId` in the router (#2269)
- [44e7127](https://github.com/ACINQ/eclair/commit/44e71277a6f1f80d28c1c14cee2f974eb2e1a6db) (Minor) Postgres: use `write` instead of `writePretty` (#2279)
- [9c7ddcd](https://github.com/ACINQ/eclair/commit/9c7ddcd8745bbea9c7113457e1a1f378435347c7) Increase closed timeout from 10s to 1min (#2281)
- [45f19f6](https://github.com/ACINQ/eclair/commit/45f19f6287ae5809f5df6b4248ed148138d076f7) Fix test when run in Intellij (#2288) (#2289)
- [749d92b](https://github.com/ACINQ/eclair/commit/749d92ba39cc21f90a72aa9915ac62335397ade1) Add option to disable sending remote addr in init (#2285)
- [088de6f](https://github.com/ACINQ/eclair/commit/088de6f666e05438924838f9cc5d40744b316963) Don't RBF anchor if commit is confirmed (#2283)
- [ee46c56](https://github.com/ACINQ/eclair/commit/ee46c562812660f36524175aef6b993ff7ecfdf9) Remove dependency between dual funding and anchors (#2297)
- [9610fe3](https://github.com/ACINQ/eclair/commit/9610fe30e308af64fd30d0953ccf2eb0da69b67a) Define a proper base class for fixture tests (#2286)
- [47c5b95](https://github.com/ACINQ/eclair/commit/47c5b95eaa7ee9001c4853cf4e4b0269e685f77d) Drop support for Tor v2 hidden services (#2296)
- [ecbec93](https://github.com/ACINQ/eclair/commit/ecbec93dfe15a76eef94aa54783d908d2829fb44) Add traits for permanent channel features (#2282)
- [e08353b](https://github.com/ACINQ/eclair/commit/e08353b2432e6143ad18622689e99472dc9b4e2c) Remove close() in db interfaces (#2303)
- [c5620b2](https://github.com/ACINQ/eclair/commit/c5620b2d5613e40961eca701236a22ec256a9ca2) Log routing hint when finding a route (#2242)
- [340b568](https://github.com/ACINQ/eclair/commit/340b568d532249fd2d67dd567ad008d3300c83a6) (Minor) Test nits (#2306)
- [e8c9df4](https://github.com/ACINQ/eclair/commit/e8c9df4ec48ec1746ffa727d17bb4563c517b25e) Add more GraphSpec tests (#2292) (#2293)
- [e5f5cd1](https://github.com/ACINQ/eclair/commit/e5f5cd152e9cb881395afb5a04bbf045c548611a) Add support for zero-conf and scid-alias (#2224)
- [f47c7c3](https://github.com/ACINQ/eclair/commit/f47c7c39faf23d4da3674aba2868829895fc29ca) Don't block when generating shutdown script (#2284)
- [bfba9e4](https://github.com/ACINQ/eclair/commit/bfba9e41193da5fbe76a7685485e131293f32789) (Minor) Include the discriminator in all channel codecs (#2317)
- [af79f44](https://github.com/ACINQ/eclair/commit/af79f44051a08ecc31eab5a129d41e6c3100776a) Move arm64 docker file to contrib and udpate README.md (#2327)
- [08d2ad4](https://github.com/ACINQ/eclair/commit/08d2ad4a917aa31719ceb371dcf476a8adf650d7) Random values for `generateLocalAlias()` (#2337)
- [c9810d5](https://github.com/ACINQ/eclair/commit/c9810d54246648c6177dfb92559e7ff6c9676ad6) Resume reading after processing unknown messages (#2332)
- [e880b62](https://github.com/ACINQ/eclair/commit/e880b62c13dbc752e1758386c0ed39aa005728c6) Refactor routing hints to prepare for payments to blinded routes (#2315)
- [8af14ac](https://github.com/ACINQ/eclair/commit/8af14ac515f9c01a4b6709720aec1b778aabac90) Backport from feature branches (#2326)
- [a1f7c1e](https://github.com/ACINQ/eclair/commit/a1f7c1e74f993c1c3f1cbb7df479e873e80576e0) Return local channel alias in payment failures (#2323)
- [2790b2f](https://github.com/ACINQ/eclair/commit/2790b2ff6c792bdc8d06cd427068b0f4de1beb35) Activate 0-conf based on per-peer feature override (#2329)
- [2461ef0](https://github.com/ACINQ/eclair/commit/2461ef08cb7a688e1e48f9e37682b704f99f8ecb) Call `resolve()` on configuration (#2339)
- [85fea72](https://github.com/ACINQ/eclair/commit/85fea72720322d0682d163dc369b5afb0ea5f967) Broadcast commit tx when nothing at stake (#2360)
- [c71c3b4](https://github.com/ACINQ/eclair/commit/c71c3b40465a6fadc8a5cca982a5b466fd0aedfc) Make `htlc_maximum_msat` mandatory in channel updates (#2361)
- [9f9cf9c](https://github.com/ACINQ/eclair/commit/9f9cf9ce0ee9699bcc3443b7b1a72cbc5f0483d2) (Minor) Test improvements (#2354)
- [f49eb0e](https://github.com/ACINQ/eclair/commit/f49eb0effea9808e92f16eeea13b97b1554952f7) Update sqlite to 3.39.2.0 (#2369)
- [0310bf5](https://github.com/ACINQ/eclair/commit/0310bf5dc442d810636059fc371a970e6688f2f1) Implement first steps of the dual funding flow (#2247)
- [de1ac34](https://github.com/ACINQ/eclair/commit/de1ac34d4605e3f691cf15b2fe53df2487a1e8ff) Add explicit duration to ExcludeChannel (#2368)
- [2f590a8](https://github.com/ACINQ/eclair/commit/2f590a80e22a6ad0c5dc0b6bd5540dc144042654) Refactor routing hint failure updates (#2370)
- [e8dda28](https://github.com/ACINQ/eclair/commit/e8dda28eebef39ddbf888a1393480a3f1ab8fb7b) Remove invalid channel updates from DB at startup (#2379)
- [a13c3d5](https://github.com/ACINQ/eclair/commit/a13c3d5d6d5a67448b22d0e766b9959fcf9ee636) Prune channels if any update is stale (#2380)
- [fb6eb48](https://github.com/ACINQ/eclair/commit/fb6eb485c411662357ad942109b91c8b0d965c49) Fix dual funding flaky test (#2392)
- [c1daaf3](https://github.com/ACINQ/eclair/commit/c1daaf3acdac1ff2ba1ecff6139019bdc8e68106) Check input out of bounds early in `tx_add_input` (#2393)
- [81af619](https://github.com/ACINQ/eclair/commit/81af6192a848273f7e043d24116452a5622c14d3) (Minor) Ignore line ending when comparing strings in tests (#2403)
- [40b2d44](https://github.com/ACINQ/eclair/commit/40b2d440296b86303b0439c6f3fc019fe69a526a) Remove support for legacy Sphinx payloads (#2190)
- [3568dd6](https://github.com/ACINQ/eclair/commit/3568dd6c17cd6d3321e023c974b67e93c77669fc) Rework log capture in tests (#2409)
- [ee1136c](https://github.com/ACINQ/eclair/commit/ee1136c040c02f3115b4240e59c6fced9526a7a1) Assume sent htlcs will succeed in the balance computation (#2410)
- [611b796](https://github.com/ACINQ/eclair/commit/611b79635ea757885124ca0e6d796c0e1ab6dccf) More lenient `interactive-tx` RBF validation (#2402)
- [065cb28](https://github.com/ACINQ/eclair/commit/065cb28aaedf47dfcc31b657cd98d226570b97b4) Add option to require confirmed inputs in interactive-tx (#2406)
- [37863a4](https://github.com/ACINQ/eclair/commit/37863a41d76d2e6bdbea41bc23d7d50dd5c7f59f) Use deterministic serial IDs in interactive-tx (#2407)
- [7c8a777](https://github.com/ACINQ/eclair/commit/7c8a777572e149556a0b224d19ec83315912837a) Add a `ChannelOrigin` placeholder (#2411)
- [ca68695](https://github.com/ACINQ/eclair/commit/ca6869530e2a118305c48984e1d610658b15a660) Validate payment using minFinalExpiryDelta from node params (#2448)
- [dad0a51](https://github.com/ACINQ/eclair/commit/dad0a51b7cb24978bff23b6deff7f7e1aa023d84) Complete codec for TLV fields (#2452)
- [3b12475](https://github.com/ACINQ/eclair/commit/3b12475794e6d9d3d71cdb751de6cc1c12c9755c) Make payment secret not optional (#2457)
- [a0433aa](https://github.com/ACINQ/eclair/commit/a0433aa0c027c9be618c5afe18e7f91642a7f372) Fix flaky CommitmentsSpec test (#2458)
- [c1a925d](https://github.com/ACINQ/eclair/commit/c1a925db11ee1aa141ad41cac7efe5760dfa0871) Use 0-conf based on local features only (#2460)
- [1f32652](https://github.com/ACINQ/eclair/commit/1f32652465f8fccbc51f283aa8f23bb59b1b9685) Add tlv to require confirmed inputs for dual funding (#2461)
- [5e85c7c](https://github.com/ACINQ/eclair/commit/5e85c7ce012515f66a8053bf9217a09e2f38b4de) Fix pruned channels coming back online (#2456)
- [a11984b](https://github.com/ACINQ/eclair/commit/a11984bf3f54bfe1f8f94203ec617f5f8707e8db) Use `tx_hash` in dual funding and verify `nSequence` (#2463)
- [7c8bdb9](https://github.com/ACINQ/eclair/commit/7c8bdb959bde5c496e91c747f537db1c985a32fd) Explain how and why we use bitcoin core (#2473)
- [21c6278](https://github.com/ACINQ/eclair/commit/21c6278305bdb773ec8e0360054ae83053b6d58a) Only use txid in error messages (#2423)
- [c385ca2](https://github.com/ACINQ/eclair/commit/c385ca225fc82fab40aacb41200b273cddd1360f) Add support for arbitrary length onion errors (#2441)
- [a8389a0](https://github.com/ACINQ/eclair/commit/a8389a042a149b3b126c617e577a917ffb48448e) Add private flag to channel updates (#2362)
- [31f61c1](https://github.com/ACINQ/eclair/commit/31f61c1ca5e06dfc4476f6cc3b74886ad9de2a56) Randomize final cltv expiry (#2469)
- [a566d53](https://github.com/ACINQ/eclair/commit/a566d53a6e6692f0acef91327012881f06c2b598) Allow nodes to overshoot final htlc amount and expiry (#2468)
- [0906804](https://github.com/ACINQ/eclair/commit/090680403a9856c6f754e8d42a5bc1831fc95eec) Support `scid_alias` and `zero_conf` for all commitment types (#2404)
- [9ae4dea](https://github.com/ACINQ/eclair/commit/9ae4dea03e91adf265387aec07073f0d6ad93ae5) Reduce diff with feature branch (#2476)
- [8f1af28](https://github.com/ACINQ/eclair/commit/8f1af2851dd2a388b91c0d900b27fe65d51ed0ab) Add pagination on listInvoices (#2474)
- [7dbaa41](https://github.com/ACINQ/eclair/commit/7dbaa41f39e6ce34bce013ca33eae83abfcf610a) Update to bitcoind 23.x (#2466)
- [6eba3e7](https://github.com/ACINQ/eclair/commit/6eba3e76da1c1d3c7a16b1236d932217a8e70cc2) Fix static default `from` and `to` pagination (#2484)