Skip to content

Commit 9830aa6

Browse files
authored
Eclair v0.13.1 release (#3196)
1 parent 701f229 commit 9830aa6

File tree

12 files changed

+159
-108
lines changed

12 files changed

+159
-108
lines changed

.mvn/maven.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
-Daether.trustedChecksumsSource.summaryFile=true
33
-Daether.trustedChecksumsSource.summaryFile.basedir=${session.rootDirectory}/.mvn/checksums/
44
# post processor: trusted checksums
5-
-Daether.artifactResolver.postProcessor.trustedChecksums=true
5+
-Daether.artifactResolver.postProcessor.trustedChecksums=false
66
-Daether.artifactResolver.postProcessor.trustedChecksums.checksumAlgorithms=SHA-256
77
-Daether.artifactResolver.postProcessor.trustedChecksums.failIfMissing=true
88
-Daether.artifactResolver.postProcessor.trustedChecksums.snapshots=false
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
# Eclair v0.13.1
2+
3+
This release contains database changes to prepare for the removal of pre-anchor channels.
4+
Closed channels will be moved to a new table on restart, which may take some time, but will only happen once.
5+
6+
:warning: Note that you will need to run the v0.13.0 release first to migrate your channel data to the latest internal encoding.
7+
8+
This is the last release of eclair where channels that don't use anchor outputs will be supported.
9+
If you have channels that don't use anchor outputs, you should close them now.
10+
You can list those channels using the following command:
11+
12+
```sh
13+
$ eclair-cli channels | jq '.[] | { channelId: .data.commitments.channelParams.channelId, commitmentFormat: .data.commitments.active[].commitmentFormat }' | jq 'select(.["commitmentFormat"] == "legacy")'
14+
```
15+
16+
If your peer is online, you can then cooperatively close those channels using the following command:
17+
18+
```sh
19+
$ eclair-cli close --channelId=<channel_id_from_previous_step> --preferredFeerateSatByte=<feerate_satoshis_per_byte>
20+
```
21+
22+
If your peer isn't online, you may want to force-close those channels to recover your funds:
23+
24+
```sh
25+
$ eclair-cli forceclose --channelId=<channel_id_from_previous_step>
26+
```
27+
28+
:warning: This release also updates the dependency on Bitcoin Core to v29.x (we recommend using v29.2).
29+
30+
## Major changes
31+
32+
### Move closed channels to dedicated database table
33+
34+
We previously kept closed channels in the same database table as active channels, with a flag indicating that it was closed.
35+
This creates performance issues for nodes with a large history of channels, and creates backwards-compatibility issues when changing the channel data format.
36+
37+
We now store closed channels in a dedicated table, where we only keep relevant information regarding the channel.
38+
When restarting your node, the channels table will automatically be cleaned up and closed channels will move to the new table.
39+
This may take some time depending on your channels history, but will only happen once.
40+
41+
### Remove support for legacy channel codecs
42+
43+
We remove the code used to deserialize channel data from versions of eclair prior to v0.13.
44+
Node operators running a version of `eclair` older than v0.13 must first upgrade to v0.13.0 to migrate their channel data, and then upgrade to the latest version.
45+
46+
### Update minimal version of Bitcoin Core
47+
48+
With this release, eclair requires using Bitcoin Core 29.x.
49+
Newer versions of Bitcoin Core may be used, but have not been extensively tested.
50+
51+
### New MPP splitting strategy
52+
53+
Eclair can send large payments using multiple low-capacity routes by sending as much as it can through each route (if `randomize-route-selection = false`) or some random fraction (if `randomize-route-selection = true`).
54+
These splitting strategies are now specified using `mpp.splitting-strategy = "full-capacity"` or `mpp.splitting-strategy = "randomize"`.
55+
In addition, a new strategy is available: `mpp.splitting-strategy = "max-expected-amount"` will send through each route the amount that maximizes the expected delivered amount (amount sent multiplied by the success probability).
56+
57+
Eclair's path-finding algorithm can be customized by modifying the `eclair.router.path-finding.experiments.*` sections of your `eclair.conf`.
58+
The new `mpp.splitting-strategy` goes in these sections, or in `eclair.router.path-finding.default` from which they inherit.
59+
60+
### Configuration changes
61+
62+
No notable changes.
63+
64+
### API changes
65+
66+
- the `closedchannels` API now returns human-readable channel data
67+
68+
### Miscellaneous improvements and bug fixes
69+
70+
No notable changes.
71+
72+
## Verifying signatures
73+
74+
You will need `gpg` and our release signing key E04E48E72C205463. Note that you can get it:
75+
76+
- from our website: https://acinq.co/pgp/drouinf2.asc
77+
- from github user @sstone, a committer on eclair: https://api.github.com/users/sstone/gpg_keys
78+
79+
To import our signing key:
80+
81+
```sh
82+
$ gpg --import drouinf2.asc
83+
```
84+
85+
To verify the release file checksums and signatures:
86+
87+
```sh
88+
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
89+
$ sha256sum -c SHA256SUMS.stripped
90+
```
91+
92+
## Building
93+
94+
Eclair builds are deterministic. To reproduce our builds, please use the following environment (*):
95+
96+
- Ubuntu 24.04.1
97+
- Adoptium OpenJDK 21.0.6
98+
99+
Then use the following command to generate the eclair-node packages:
100+
101+
```sh
102+
./mvnw clean install -DskipTests
103+
```
104+
105+
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`
106+
107+
(*) You may be able to build the exact same artefacts with other operating systems or versions of JDK 21, we have not tried everything.
108+
109+
## Upgrading
110+
111+
This release is fully compatible with previous eclair versions. You don't need to close your channels, just stop eclair, upgrade and restart.
112+
113+
## Changelog
114+
115+
- [3abc17f](https://github.com/ACINQ/eclair/commit/3abc17f9aa9eb3354e1616ff056f1511015a3ced) Back to dev (#3155)
116+
- [f029584](https://github.com/ACINQ/eclair/commit/f02958467214dbe88cdaeeacbd30bc0a2627d161) Update Bitcoin Core to v29.1 (#3153)
117+
- [ae3e44b](https://github.com/ACINQ/eclair/commit/ae3e44be7066c6ed45b8b8021d5de95e086954da) Remove legacy channel codecs and DB migrations (#3150)
118+
- [a7e57ea](https://github.com/ACINQ/eclair/commit/a7e57ea7c8af1876067af78d98f5abb0e6e6d0fa) Update taproot commit weight to match `lnd` (#3158)
119+
- [d3ac75d](https://github.com/ACINQ/eclair/commit/d3ac75dfb5fb0c07bfb43326ad4c11e77cd209d7) Fix flaky `ReputationRecorder` test (#3166)
120+
- [c13d530](https://github.com/ACINQ/eclair/commit/c13d530f3283d5741c2d6c4efa055896a907a041) Fix flaky test in `OfferPaymentSpec` (#3165)
121+
- [379abc5](https://github.com/ACINQ/eclair/commit/379abc55b76668e83a7144f225e9e9a52c260c88) Resign next remote commit on reconnection (#3157)
122+
- [e351320](https://github.com/ACINQ/eclair/commit/e351320503faf79bc60c48e86a023c6e84436cf7) Increase timeout for flaky onion message tests (#3167)
123+
- [76f8d53](https://github.com/ACINQ/eclair/commit/76f8d53aea564d169e4abc774bc098e21ef53366) Correctly fill PSBT for taproot `interactive-tx` (#3169)
124+
- [9f00ebf](https://github.com/ACINQ/eclair/commit/9f00ebf98923455c53f500c3ba34bd35f0e505cf) Always count local CLTV delta in route finding (#3174)
125+
- [08a1fc6](https://github.com/ACINQ/eclair/commit/08a1fc6603c7614164bb32f2628d5100de5061f2) Kill the connection if a peer sends multiple ping requests in parallel (#3172)
126+
- [fa1b0ee](https://github.com/ACINQ/eclair/commit/fa1b0eef5d5f9a5075860c5868a5cb45b9b3980a) Remove `PaymentWeightRatios` from the routing config (#3171)
127+
- [abe2cc9](https://github.com/ACINQ/eclair/commit/abe2cc9cc38df82394f793e5924f8b802a1095fe) Reject offers with some fields present but empty (#3175)
128+
- [ad8b2e3](https://github.com/ACINQ/eclair/commit/ad8b2e3b36a9e09981fc34710d0ba66a2368fb91) Add "phoenix zero reserve" feature bit (#3176)
129+
- [5b4368a](https://github.com/ACINQ/eclair/commit/5b4368a65bee501c80cb8681da171d704db55888) Fix encoding of channel type TLV in splice_init/splice_ack (#3178)
130+
- [90778ca](https://github.com/ACINQ/eclair/commit/90778ca483746143bcab9cb086bb009cd89a5562) Smaller default value for `peer-connection.max-no-channels` (#3180)
131+
- [d04ed3d](https://github.com/ACINQ/eclair/commit/d04ed3dc34b4a43a912c49e09f47dbf4354b933c) Deduplicate closing balance during mutual close (#3182)
132+
- [2b39bf6](https://github.com/ACINQ/eclair/commit/2b39bf622f14cfe227cfc225c48423145e54e5c6) Update `bitcoin-lib` (#3179)
133+
- [16a309e](https://github.com/ACINQ/eclair/commit/16a309e49e83e094fb02063776a324c6a4f31f9c) Add `DATA_CLOSED` class when active channel is closed (#3170)
134+
- [56a3acd](https://github.com/ACINQ/eclair/commit/56a3acdf625ebb455f1c0cbb06339694f2554b49) Add `zero-conf` test tag for Phoenix taproot tests (#3181)
135+
- [cc75b13](https://github.com/ACINQ/eclair/commit/cc75b135f403ab7b4bb8bf09c75a8c4249fa66d9) Nits (#3183)
136+
- [d1863f9](https://github.com/ACINQ/eclair/commit/d1863f9457988e2b78d0c3460b5bb09ae2d610c1) Create fresh shutdown nonce on reconnection (#3184)
137+
- [3208266](https://github.com/ACINQ/eclair/commit/32082666ecf0bca6d0ab87185ef0f4c32a94bb44) Use bitcoin-lib 0.44 (#3185)
138+
- [51a144c](https://github.com/ACINQ/eclair/commit/51a144c8a231b4fe4df6dfb6f51ce45a1188aed3) Split MPP by maximizing expected delivered amount (#2792)
139+
- [409c7c1](https://github.com/ACINQ/eclair/commit/409c7c17148ef1d18d04a3e74739c2cdd89e87ca) Don't store anchor transaction in channel data (#3187)
140+
- [0baddd9](https://github.com/ACINQ/eclair/commit/0baddd91b1901317dc74e7ebf3cb00fee3499536) Only store txs spending our commit outputs (#3188)
141+
- [711c52a](https://github.com/ACINQ/eclair/commit/711c52ab717a55a87f2ea56d9f8115a61170e1d8) Avoid negative on-the-fly funding fee (#3189)
142+
- [656a2fe](https://github.com/ACINQ/eclair/commit/656a2fe6859d426c6f47afa488ac88cd7cfda440) Update Bitcoin Core to v29.2 (#3190)
143+
- [7372a87](https://github.com/ACINQ/eclair/commit/7372a8779e3b1c2bc14975adcbdd53bb7a216ccb) Update `bitcoin-lib` (#3193)
144+
- [9771b2d](https://github.com/ACINQ/eclair/commit/9771b2d862ec779e6281152a3b93dd0d438a4d91) Configure bitcoind test instances to use bech32m addresses (#3195)
145+
- [701f229](https://github.com/ACINQ/eclair/commit/701f2297d2e385d7125268a51e30a4acd5e0ff73) More flexible mixing of clearnet addresses and tor proxy (#3054)

docs/release-notes/eclair-vnext.md

Lines changed: 0 additions & 90 deletions
This file was deleted.

eclair-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<parent>
2222
<groupId>fr.acinq.eclair</groupId>
2323
<artifactId>eclair_2.13</artifactId>
24-
<version>0.14.0-SNAPSHOT</version>
24+
<version>0.13.1</version>
2525
</parent>
2626

2727
<artifactId>eclair-core_2.13</artifactId>

eclair-core/src/main/scala/fr/acinq/eclair/db/jdbc/JdbcUtils.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,13 @@ trait JdbcUtils {
8080
}
8181

8282
/**
83-
* We removed legacy channels codecs after the v0.13 eclair release, and migrated channels in that release.
84-
* It is thus not possible to directly upgrade from an eclair version earlier than v0.13.
85-
* We warn node operators that they must first run the v0.13 release to migrate their channel data.
83+
* We removed legacy channels codecs after the v0.13.0 eclair release, and migrated channels in that release.
84+
* It is thus not possible to directly upgrade from an eclair version earlier than v0.13.0.
85+
* We warn node operators that they must first run the v0.13.0 release to migrate their channel data.
8686
*/
8787
def checkChannelsDbVersion(statement: Statement, db_name: String, minimum: Int): Unit = {
8888
getVersion(statement, db_name) match {
89-
case Some(v) if v < minimum => throw new IllegalArgumentException("You are updating from a version of eclair older than v0.13: please update to the v0.13 release first to migrate your channel data, and afterwards you'll be able to update to the latest version.")
89+
case Some(v) if v < minimum => throw new IllegalArgumentException("You are updating from a version of eclair older than v0.13.0: please update to the v0.13.0 release first to migrate your channel data, and afterwards you'll be able to update to the latest version.")
9090
case _ => ()
9191
}
9292
}

eclair-core/src/main/scala/fr/acinq/eclair/db/pg/PgChannelsDb.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class PgChannelsDb(implicit ds: DataSource, lock: PgLock) extends ChannelsDb wit
147147
statement.executeUpdate("CREATE INDEX htlc_infos_channel_id_idx ON local.htlc_infos(channel_id)")
148148
statement.executeUpdate("CREATE INDEX htlc_infos_commitment_number_idx ON local.htlc_infos(commitment_number)")
149149
statement.executeUpdate("CREATE INDEX channels_closed_remote_node_id_idx ON local.channels_closed(remote_node_id)")
150-
case Some(v) if v < 11 => throw new RuntimeException("You are updating from a version of eclair older than v0.13: please update to the v0.13 release first to migrate your channel data, and afterwards you'll be able to update to the latest version.")
150+
case Some(v) if v < 11 => throw new RuntimeException("You are updating from a version of eclair older than v0.13.0: please update to the v0.13.0 release first to migrate your channel data, and afterwards you'll be able to update to the latest version.")
151151
case Some(v@11) =>
152152
logger.warn(s"migrating db $DB_NAME, found version=$v current=$CURRENT_VERSION")
153153
if (v < 12) migration1112(statement)

eclair-core/src/main/scala/fr/acinq/eclair/db/sqlite/SqliteChannelsDb.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class SqliteChannelsDb(val sqlite: Connection) extends ChannelsDb with Logging {
146146
statement.executeUpdate("CREATE INDEX htlc_infos_channel_id_idx ON htlc_infos(channel_id)")
147147
statement.executeUpdate("CREATE INDEX htlc_infos_commitment_number_idx ON htlc_infos(commitment_number)")
148148
statement.executeUpdate("CREATE INDEX local_channels_closed_remote_node_id_idx ON local_channels_closed(remote_node_id)")
149-
case Some(v) if v < 7 => throw new RuntimeException("You are updating from a version of eclair older than v0.13: please update to the v0.13 release first to migrate your channel data, and afterwards you'll be able to update to the latest version.")
149+
case Some(v) if v < 7 => throw new RuntimeException("You are updating from a version of eclair older than v0.13.0: please update to the v0.13.0 release first to migrate your channel data, and afterwards you'll be able to update to the latest version.")
150150
case Some(v@7) =>
151151
logger.warn(s"migrating db $DB_NAME, found version=$v current=$CURRENT_VERSION")
152152
if (v < 8) migration78(statement)

eclair-core/src/main/scala/fr/acinq/eclair/wire/internal/channel/ChannelCodecs.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ import scodec.{Codec, Err}
5353
object ChannelCodecs extends Logging {
5454

5555
/**
56-
* Codecs v0 to v4 have been removed after the eclair v0.13 release.
57-
* Users on older version will need to first run the v0.13 release before updating to a newer version.
56+
* Codecs v0 to v4 have been removed after the eclair v0.13.0 release.
57+
* Users on older version will need to first run the v0.13.0 release before updating to a newer version.
5858
*/
59-
private val pre013FailingCodec: Codec[PersistentChannelData] = fail(Err("You are updating from a version of eclair older than v0.13: please update to the v0.13 release first to migrate your channel data, and afterwards you'll be able to update to the latest version."))
59+
private val pre013FailingCodec: Codec[PersistentChannelData] = fail(Err("You are updating from a version of eclair older than v0.13.0: please update to the v0.13.0 release first to migrate your channel data, and afterwards you'll be able to update to the latest version."))
6060

6161
/**
6262
* Order matters!!

eclair-front/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<parent>
2222
<groupId>fr.acinq.eclair</groupId>
2323
<artifactId>eclair_2.13</artifactId>
24-
<version>0.14.0-SNAPSHOT</version>
24+
<version>0.13.1</version>
2525
</parent>
2626

2727
<artifactId>eclair-front_2.13</artifactId>

eclair-node/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<parent>
2222
<groupId>fr.acinq.eclair</groupId>
2323
<artifactId>eclair_2.13</artifactId>
24-
<version>0.14.0-SNAPSHOT</version>
24+
<version>0.13.1</version>
2525
</parent>
2626

2727
<artifactId>eclair-node_2.13</artifactId>

0 commit comments

Comments
 (0)