Skip to content

Releases: ACINQ/eclair

Eclair v0.4.2

19 Oct 13:13
Compare
Choose a tag to compare

This release includes many exciting new features, API changes as well as several bug fixes and improvements.
Its is fully compatible with 0.4.1 (and all previous versions of eclair).

Major changes

Plugins

Third-party plugins are now able to add new feature bits to eclair and handle unknown custom messages.
This lets plugin developers offer services to their customers that are not available in the Lightning specification (e.g. swap-in/swap-out), while staying fully compatible with the network.

See #1528 for more details.

Anchor Outputs

This release adds experimental support for anchor outputs channels.
The main benefit of this type of channels is that it is possible to bump the on-chain fees of commitment transactions and htlc transactions once they are in the mempool to speed up their confirmation.

Eclair is fully compatible with the anchor output specification, but automatic fee bumping has not been implemented yet, hence we do not recommend activating the feature.
Some attacks that are specific to anchor outputs have also been discovered recently and haven't been fully addressed yet, but will be fixed in future releases.

Keysend

This release adds support for spontaneous payments using keysend.
It is fully compatible with lnd and c-lightning and makes it easy for public LN nodes to receive donations.

API changes

This release contains many new APIs and improvements to existing ones:

  • Add signmessage/verifymessage APIs: this allows signing arbitrary messages with the node's key and is compatible with lnd and c-lightning
  • We publish new channel events to the websocket (channel-opened, channel-state-changed and channel-closed)
  • The sendtoroute API now lets you choose the channels that must be used, making it easy to rebalance your local channels

Head over to our API documentation for more details.

Miscellaneous improvements and bug fixes

  • Many actors have been refactored to use Akka Typed instead of classic actors.
    This leads to a cleaner design, better types and more help from the compiler to detect unhandled messages.
  • We added support for Bitcoin Core 0.20.1.
  • We added support for non-default Bitcoin Core wallets (see #1540 for details)
  • We fixed the override-features configuration parameter, which wasn't overriding features everywhere. This parameter can be very useful for example to sync only from specific nodes, or advertize wumbo support only to nodes that you trust.

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 19.10
  • AdoptOpenJDK 11.0.6
  • Maven 3.6.3

Use the following command to generate the eclair-node package:

mvn clean install -DskipTests

That should generate eclair-node/target/eclair-node-0.4.2-XXXXXXX-bin.zip with sha256 checksums that matches 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.4.1. You don't need to close your channels, just stop eclair, upgrade and restart.

Changelog

Eclair v0.4.1

15 Jul 11:43
Compare
Choose a tag to compare

This release includes many exciting new features, API changes as well as several bug fixes and improvements.
Its is fully compatible with 0.4 (and all previous versions of eclair).

Major changes

Static Remote Key

This release adds support for option_static_remotekey.
This removes the key rotation at each update of the commitment, and allows simpler funds recovery in case of backup loss: channel outputs will directly pay to one of your bitcoin wallet addresses.

This option is disabled by default, and will only be available for new channels when both peers activate the feature.
To enable it, add the following lines to your eclair.conf:

eclair.features {
    option_static_remotekey = optional
}

You can verify that this is activated with the getinfo API, which now returns the list of features:

"features": {
  "activated": [
    {
      "name": "basic_mpp",
      "support": "optional"
    },
    {
      "name": "initial_routing_sync",
      "support": "optional"
    },
    {
      "name": "option_data_loss_protect",
      "support": "optional"
    },
    {
      "name": "gossip_queries_ex",
      "support": "optional"
    },
    {
      "name": "payment_secret",
      "support": "optional"
    },
    {
      "name": "var_onion_optin",
      "support": "optional"
    },
    {
      "name": "gossip_queries",
      "support": "optional"
    }
  ],
  "unknown": []
}

Improvements to path-finding and MPP

We've made several improvements to the path-finding algorithm. It now takes into account your channel's current balance more accurately when selecting a route.

The MPP split algorithm has been rewritten from the ground up, inspired by flow algorithms (see #1427 for details). MPP is now enabled by default (it was introduced in eclair v0.3.3 but was opt-in) for all eclair nodes and will soon be available on eclair-mobile (note that Phoenix has had MPP support since its first release).

MPP synergizes well with trampoline: trampoline nodes aggregate incoming MPP and re-split them more efficiently on outgoing channels.

PostgreSQL beta support

Thanks to @rorp, eclair now supports PostgreSQL as a database backend!

By default eclair still uses SQLite, but you can follow the instructions here to use PostgreSQL instead.

We're looking for feedback on how well this is working for you, so don't hesitate to try it out and let us know!

Human-readable features

Say goodbye to hex-encoded features: we've changed the format to be human-readable.

Here is how they are configured by default:

eclair.features {
  initial_routing_sync = optional
  option_data_loss_protect = optional
  gossip_queries = optional
  gossip_queries_ex = optional
  var_onion_optin = optional
  payment_secret = optional
  basic_mpp = optional
}

Note that if you want to disable features, there is a trick. You need to first set the features to null and then provide your set of chosen features, for example (in your eclair.conf):

eclair.features : null
eclair.features {
  option_data_loss_protect = optional
  var_onion_optin = optional
  payment_secret = optional
  basic_mpp = optional
  option_static_remotekey = optional
}

You can verify what features have been set with the getinfo API:

eclair-cli getinfo
{
  "version": "0.4.1-SNAPSHOT-xxxxxxx",
  "nodeId": "...",
  "alias": "...",
  "color": "...",
  "features": {
    "activated": [
      {
        "name": "basic_mpp",
        "support": "optional"
      },
      {
        "name": "initial_routing_sync",
        "support": "optional"
      },
      {
        "name": "option_data_loss_protect",
        "support": "optional"
      },
      {
        "name": "gossip_queries_ex",
        "support": "optional"
      },
      {
        "name": "payment_secret",
        "support": "optional"
      },
      {
        "name": "var_onion_optin",
        "support": "optional"
      },
      {
        "name": "gossip_queries",
        "support": "optional"
      }
    ],
    "unknown": []
  },
  "chainHash": "...",
  "network": "...",
  "blockHeight": 1,
  "publicAddresses": [],
  "instanceId": "..."
}

Feerate mismatch

When you disagree with your peer about on-chain fee rates, your funds may be at risk if your peer is malicious.
For this reason, eclair has always been closing channels on your behalf before the situation gets too dangerous.

Your tolerance to fee rate mismatch was previously configured via eclair.on-chain-fees.max-feerate-mismatch.
You can now independently configure your tolerance to either lower or higher fee rates:

eclair.on-chain-fees.feerate-tolerance {
  ratio-low = 0.5 // will allow remote fee rates as low as half our local feerate
  ratio-high = 10.0 // will allow remote fee rates as high as 10 times our local feerate
}

It's less dangerous if your peer overestimates the fees than if she underestimates it, hence the different default values.

We've also made changes to reduce the number of unnecessary close, by only closing channels when there are funds at risk in pending HTLCs. If your channel doesn't have pending HTLCs, eclair will safely ignore the remote fee rate and won't close the channel.

API changes

This release is packed with new APIs and improvements to existing ones:

  • batch channel updates (updaterelayfee, close, forceclose)
  • nodes to lookup node announcements
  • better channelstats
  • onchainbalance, sendonchain and onchaintransactions to interact with layer-1
  • more data returned in most API responses

Head over to our API documentation for more details.

Miscellaneous improvements and bug fixes

  • More metrics for an even better monitoring experience with Kamon.
  • Various improvements to connection handling and reconnection logic.
  • Updates to security parameters default values.
  • Various improvements on fee estimation.
  • Better errors for trampoline payments.
  • Logging improvements.

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 19.10
  • AdoptOpenJDK 11.0.6
  • Maven 3.6.3

Use the following command to generate the eclair-node package:

mvn clean install -DskipTests

That should generate eclair-node/target/eclair-node-0.4.1-XXXXXXX-bin.zip with sha256 checksums that matches 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.4. You don't need to close your channels, just stop eclair, upgrade and restart.

Changelog

Read more

Eclair v0.4

15 Jul 11:38
69c538e
Compare
Choose a tag to compare

This release includes major upgrades to our core libraries (Scala and Akka), as well as several bug fixes and improvements.
Its is fully compatible with 0.3.4 (and all previous versions of eclair).

Major changes

Scala 2.13, Akka 2.6

Update from Scala 2.11 and Akka 2.4 to Scala 2.13 and Akka 2.6.

Scala 2.13 brings a lot of improvements, among which:

  • better performance
  • tons of improvements for standard collections
  • faster compile times
  • better support for deterministic builds

Akka 2.6 contains a couple years of steady improvements over Akka 2.4:

  • better performance
  • better APIs and the introduction of typed actors
  • production-ready akka-cluster

Eclair will incrementally take advantage of the new features these updates have to offer.

Bitcoin 0.19.1

Add support for Bitcoin Core 0.19.1.

The most notable change impacting eclair is that fundrawtransaction does not fail when providing a too low feerate, but instead bitcoin will fail when broadcasting the transaction with sendrawtransaction. This is correctly handled by eclair v0.4.

GUI deprecation

eclair-node-gui is being deprecated and will is not published with this release. Source code will still remain available for some time, and building the GUI is very easy (check BUILD.md for more details, but basically mvn install -DskipTests is enough to build eclair-node and eclair-node-gui).

We strongly encourage people to use the API instead, see here for more information (it works on Windows too). We also added instructions on how to setup a monitoring endpoint, where you can create your own graphs and alerts.

Our GUI was built for demonstration and testing purposes, typically with a few nodes on single machine and in regtest mode. Using it as a Lightning wallet or to run routing nodes on mainnet is a very bad fit:

  • if you're looking for a Lightning wallet, consider using Phoenix or Eclair Mobile instead.
  • if you want to run a routing node, then it should be running on a machine that is reliable, secure, maintained, reachable from the internet and online most of the time, i.e probably not your desktop PC.
  • having a "bitcoin-like" GUI is misleading: if your Bitcoin node is offline it has a minimal impact on the Bitcoin network and you can still "receive" funds. When you start it again it catches up on the blocks and transactions that it has missed, so having a Bitcoin wallet or node that is often offline is fine. But when your Lightning node is offline it cannot send, receive or relay transactions. Your channels will be tagged as disabled and other nodes will have to route around you and will likely avoid you in the future because of your unreliability.

Miscellaneous improvements and bug fixes

  • More metrics for an even better monitoring experience with Kamon.
  • Improvements to our p2p handling of incoming and outgoing connections.
  • Fixed some race conditions in tests that were leading to random build failures.
  • Added more tests around mempool introspection to extract preimages early.
  • UTXOs weren't always correctly unlocked in the Bitcoin Core wallet in case funding failed (fixed in #1404)

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 19.10
  • AdoptOpenJDK 11.0.6
  • Maven 3.6.3

Use the following command to generate the eclair-node package:

mvn clean install -DskipTests

That should generate eclair-node/target/eclair-node-0.4-XXXXXXX-bin.zip with sha256 checksums that matches 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.3.4. You don't need to close your channels, just stop eclair, upgrade and restart.

Changelog

  • Use correct type for parameters in ExtendedBitcoinClient (#1248)
  • Support additional TLV records in SendPayentRequest (#1367)
  • Move router handlers to separate files (#1352)
  • Do not reconnect immediately if we keep getting disconnected (#1371)
  • Better tracking of channels count metric (#1369)
  • Revert Electrum Tor disabling SSL check (#1376)
  • Add logback config for eclair-node tests (#1377)
  • Gossip metrics (#1372)
  • Add a rejection for update when channel is pruned (#1378)
  • Use sender instead of providing actor refs (#1379)
  • Send update_fee on reconnection (#1383)
  • Refactor transaction generation errors (#1366)
  • fixup! Use sender instead of providing actor refs (#1379) (#1386)
  • Router channel balance (#1382)
  • Prepare upgrade to scala 2.13 and akka 2.6 (#1389)
  • Revert "Use sender instead of providing actor refs (#1379)" (#1391)
  • Fix race condition in router tests (#1392)
  • Update to scala 2.13 and akka 2.6 (incremental) (#1390)
  • Downgrade to scala 2.13.1 (#1394)
  • Support bitcoin-0.19.1 (#1380)
  • Test preimage extraction from mempool (#1387)
  • Remove unused attribute in Peer (#1397)
  • Disable backup handler in tests (#1399)
  • Fix BitcoinCoreWalletSpec (#1401)
  • Platform.currentTime->System.currentTimeMillis (#1403)
  • Delegate client creation to a specialized actor (#1400)
  • Monitoring documentation (#1402)
  • Validate channel_announcement sigs early (#1406)
  • Unlock transaction inputs if tx cannot be published (#1404)
  • Update README (#1405)
  • Minor: catch harmless unhandled events (#1407)

Eclair v0.3.4

06 Apr 12:01
Compare
Choose a tag to compare

This release includes many improvements, as well as a few bug fixes. Its is fully compatible with 0.3.3 (and all previous versions of eclair).

Major changes

Wumbo channels

Eclair now supports wumbo channels (see lightning/bolts#596).
To activate it, update your eclair.conf and set eclair.features = 080a8a (note that if you chose to enable/disable a different set of features from the recommended ones, that value will be slightly different).
You also need to set an upper limit on channels size in eclair.max-funding-satoshis.

Once that's configured, you can open channels above the previous 0.167 BTC limit (if your peer accepts it).
Be cautious though; bigger channels may attract more attackers towards your node.
Make sure your node deployment is secure before you start opening many large channels.

Packaging rework

Eclair is now packaged as a zip folder (see #1307).
This new packaging allows us to provide verifiable builds for eclair-node and eclair-node-gui.
It also brings us one step closer to verifiable builds for eclair-mobile and phoenix.

Note that you won't find a capsule jar as before.
To start eclair you should now use one of the scripts provided in the package.

GUI deprecation

eclair-node-gui is being deprecated and will not be published with future releases. Source code will still remain available for some time, and building the GUI is very easy (check BUILD.md for more details, but basically mvn install -DskipTests is enough to build eclair-node and eclair-node-gui).

We strongly encourage people to use the API instead, see https://github.com/ACINQ/eclair/wiki/Usage#command-line-with-eclair-cli for more information (it works on Windows too).

Our GUI was built for demonstration and testing purposes, typically with a few nodes on single machine and in regtest mode. Using it as a Lightning wallet or to run routing nodes on mainnet is a very bad fit:

  • if you're looking for a Lightning wallet, consider using Phoenix or Eclair Mobile instead.
  • if you want to run a routing node, then it should be running on a machine that is reliable, secure, maintained, reachable from the internet and online most of the time, i.e probably not your desktop PC.
  • having a "bitcoin-like" GUI is misleading: If your Bitcoin node is offline it has a minimal impact on the Bitcoin network and you can still "receive" funds. When you start it again it catches up on the blocks and transactions that it has missed, so having a Bitcoin wallet or node that is often offline is fine. But when your Lightning nodes is offline it cannot send, receive or relay transactions. Your channels will be tagged as disabled and other nodes will have to route around you.

Miscellaneous improvements and bug fixes

We've done a lot of work on our metrics and logs; make sure to leverage those to improve your node's monitoring.

We've added support for multiple Bitcoin wallets (see #1334).

We've found and fixed a few more gossip bugs; if you previously had issues getting your node's information on explorers, this release should fix it.

We've also fixed many small bugs and heavily refactored parts of the codebase, which paves the way for more scalability and performance improvements.

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 19.10
  • AdoptOpenJDK 11.0.6
  • Maven 3.6.3

Use the following command to generate the eclair-node package:

mvn clean install -DskipTests

That should generate eclair-node/target/eclair-node-0.3.4-24aa710-bin.zip and eclair-node-gui/target/eclair-node-gui-0.3.4-24aa710-bin.zip with sha256 checksums that matches 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.3.3. You don't need to close your channels, just stop eclair, upgrade and restart.

Changelog

  • Electrum: allow watcher to watch for mempool transactions (#1298)
  • Notify change in balance when updating network fee (#1301)
  • Fix AuditDb flaky test (#1304)
  • Better logging for transport handler (#1303)
  • Fix networkstats API call (#1309)
  • Payment request: ignore fields with invalid length (#1308)
  • Node relayer faster fulfill (#1306)
  • Electrum: add support for socks5 proxies (#1315)
  • Re-send ChannelUpdate to private channels (#1317)
  • Fix random trampoline test failure (#1318)
  • SendToRoute with routing hints (#1325)
  • Allow receiving non-standard payments (#1326)
  • Add log for normal application shutdown. (#1329)
  • Rework packaging (#1307)
  • Make Commitments method return Try[] (#1311)
  • Channel sends typed responses (#1321)
  • Refactor MultiPartPaymentFSM (#1324)
  • Make UpfrontShutdownScript a TLV record (#1333)
  • Wumbo support (#1323)
  • Avoid illegal reflective operation during startup (#1313)
  • fixup! Use correct assembly descriptors and use bash explicitly. (#1337)
  • Send ping if no message received from peer for 30s (#1340)
  • Payment metrics (#1312)
  • Update kanela-agent 1.0.1->1.0.5 (#1341)
  • Allow users to have multiple wallets in bitcoind (#1334)
  • Add more information to GetInfoResponse (#1344)
  • Re-send ChannelUpdate on reconnection (fixes 8afc00d) (#1342)
  • Funder reserve for future fee increase (#1319)
  • Minor: Reduced some log levels (#1348)
  • Harden requirements on htlc-minimum-msat (#1339)
  • Centralize metrics per package (#1350)
  • Improve AddHtlcFailed (#1349)
  • Split the Peer in two (#1347)
  • Minor: removed unused code (#1353)
  • fixup! Support for Tor onion services (#736) (#1356)
  • BUILD: mention that Docker is needed for tests (#1358)
  • fixup! Split the Peer in two (#1347) (#1357)
  • Use CLTV as tie-breaker for offered htlc output sorting (#790)
  • Add wallet balance metric (#1355)
  • fixup! Use CLTV as tie-breaker for offered htlc output sorting (#790) (#1360)
  • PostRestartHtlcCleaner handle channel closing (#1338)
  • fixup! Harden requirements on htlc-minimum-msat (#1339) (#1362)
  • fixup! Harden requirements on htlc-minimum-msat (#1339) (#1363)
  • fixup! Split the Peer in two (#1347) (#1365)

Eclair v0.3.3

31 Jan 18:59
12ac145
Compare
Choose a tag to compare

This release includes many improvements, as well as a few bug fixes. Its is fully compatible with 0.3.2 (and all previous versions of eclair).

Major changes

Multipart payments

Eclair now supports Multipart Payments (see lightning/bolts#643): payments can now be split into smaller sub-payments sent on different channels, the whole process being "atomic" (they will all succeed, or they will all fail). This is a huge UX improvement for the capacity issue that you encounter when you want to send "large" payments over LN and cannot find a single route with enough capacity along all hops.

MPP is disabled by default for this release, but you can easily enable it by changing eclair.features in your eclair.conf file. If enabled, Eclair will support both sending and receiving MPP. A first splitting algorithm has been implemented to automatically split payments based on your channels and network information. You can also use the CLI to decide on how to split yourself.

More details on our wiki on how to use MPP.

Deterministic builds

The core eclair library (used in our server, desktop and mobile nodes) can now be built deterministically from source. This is the first step towards deterministic builds for our Eclair Mobile and Phoenix applications.

Trampoline Routing Preview

Eclair now supports Trampoline Routing (see lightning/bolts#654), which allows Lightning Nodes to send payments without having to compute a complete route to the destination, by delegating route computation to some of the "trampoline" nodes that relay payments.

Trampoline is still a proposal that has not been merged in the Lightning BOLTs, and is not activated in Eclair's default configuration.

API changes

The sendtoroute API has changed to accommodate MPP and Trampoline.
The format of the payment events has also slightly changed to include more information.
Head over to our API documentation for more details.

Miscellaneous improvements and bug fixes

A few interop bugs with lnd and c-lightning related to channel range queries have been fixed (see #1292 and #1279).

We've also fixed issues related to the broadcast of public node information where local changes to a node configuration (IP address, fee policy, ...) were not broadcast correctly (and would not be found on Lightning explorers for example).

We've done the groundwork to extend any Lightning message with TLV extensions, which allows easy backwards-compatible experimentation on mainnet. See lightning/bolts#714 for more details.

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 19.10
  • AdoptOpenJDK 11.0.6
  • Maven 3.6.3

You should then be able to generate an eclair-core.jar with a sha256 checksum that matches 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.3.2. You don't need to close your channels, just stop eclair, upgrade and restart.

However, if your eclair.conf file contained a non-default value for eclair.local-features or eclair.global-features, you will need to update your configuration. Those two fields have been merged into a single eclair.features. See Flat features (#1253) for more details.

Changelog

  • Fix force-close next commit then fulfill (#1299)
  • Trampoline/MPP API changes (#1297)
  • Support deterministic build of eclair-core artifact on ubuntu (#1295)
  • Fix ChannelUpdate rebroadcast (#1294)
  • UpfrontShutdownScript field (#1290)
  • Clarify ChannelsDb htlc info method (#1291)
  • Trampoline/MPP DB changes (#1287)
  • Turn off SSL when custom Electrum server address is a hidden service (#1278)
  • Fix availableForSend/Receive (#1293)
  • Channel queries: Encode empty arrays as UNCOMPRESSED (#1292)
  • Allow deactivating MPP (#1289)
  • Read fee provider timeout from config correctly (#1288)
  • Improve NodeRelayer errors (#1261)
  • Peer: use a minimum reconnection delay of 200 ms (#1285)
  • Add networks to init message (#1254)
  • Better Non-segwit UTXOs assert message. (#1258)
  • Provide solution to "non-segwit UTXO found." (#1256)
  • Make sure that ids chunks strictly cover the requested range, without gaps (#1279)
  • Broadcast gossip regardless of timestamp filters (#1284)
  • MPP: allow using unannounced channels (#1283)
  • Improve error message when invalid funding tx (#1282)
  • Find htlc by id method (#1266)
  • Fix Sphinx privacy leak (#1247)
  • Dependencies: use bitcoin-lib 0.17 (#1277)
  • Electrum improvements (#1164)
  • Add contributing instructions (#1252)
  • Fix how we split channel ids in channel queries (#1274)
  • Always encode empty list of scids as uncompressed (#1276)
  • Avoid sending PaymentSecret/MPP in Init (#1273)
  • Restore missing 'db.close()' methods (#1272)
  • Flat features (#1253)
  • Disable Trampoline-MPP to non-Phoenix recipients (#1271)
  • Remove mockito from switchboard tests (#1267)
  • More consistency in sending messages during sync (#1268)
  • Remove repeated code (#1265)
  • Added some instructions for TOR auth (#1262)
  • Improve CommandSend type (#1260)
  • Relay Trampoline payments (#1220)
  • Update Maven (3.6.3) (#1259)
  • Add synchronization when locking database connection (#1200)
  • Add HasHtlcIdCommand trait (#1245)
  • Better randomization of reconnection delay (#1250)
  • Minor: missing log category in peer (#1241)
  • MPP: don't retry if failure comes from final recipient (#1246)
  • Minor: ignore "disconnecting" message in Channel (#1231)
  • Add a configurable time-out to onchain fee provider requests (#1244)
  • Fix MPP flaky test (#1243)
  • added blank lines to minimize conflicts (#1236)
  • Set akka.loglevel to DEBUG (#1235)
  • Fix outgoing payments order in payments overview (#1232)
  • Added a 'category' in logs (#1227)
  • Handle chain re-org in balance computation (#1228)
  • Fix onion codec test (#1229)
  • High level payments overview method (#1225)
  • Rework truncated integers codecs (#1212)
  • Extended doHandle to other messages in MultiPartHandler (#1226)
  • Avoid incoherent payment request features. (#1222)
  • Fix MPP post-restart HTLC clean-up (#1224)
  • (waiting-since-in-blocks) Improved tracing of single/multi-part payments (#1218)
  • Add networkstats API call to allow display of network stats (#1221)
  • MPP routing improvements (#1219)
  • PaymentLifecycle should tell the router to ignore route prefix (#1217)
  • Fallback ElectrumClient to TLS 1.2 if 1.3 is not supported (#1216)
  • Fix /allupdates API (#1187)
  • Refactor: move channel relaying to a ChannelRelayer actor. (#1215)
  • Update invoice test vectors. (#1213)
  • Add trampoline onion support (#1209)
  • Payment Request: speed up node id computation (#1203)
  • Ignore NPE in tests (#1211)
  • Fixed race condition on payment handler init (#1208)
  • Fixed composition of receive handlers (#1207)
  • Multi part payments (#1153)
  • Minor: fixed format in exception message (#1199)
  • (tag: btcpay) More metrics (#1196)
  • Add 'getnewaddress' API (#1190)
  • Fix codecov unknown tag (#1181)
  • Refactor Upstream/Origin (#1176)
  • Fix ignored duplicate amounts in htlc-value-in-flight (#1180)

Thank you @btcontract @CandleHater !

Eclair v0.3.2

15 Oct 16:43
5ad3944
Compare
Choose a tag to compare

This release includes many improvements, as well as a few bug fixes.

This release is fully compatible with 0.3.1 (and all previous versions of eclair), but some configuration options have been moved to a new section. This is checked automatically and Eclair will tell you what to do if you use these options, see the Upgrading section below for more details.

Major changes

Backupless Backups :)

Channel keys are now derived from channel's funding public keys, which can be retrieved from the Bitcoin blockchain when a channel is closed. What this means is that even if you don't have any backups, as long as you still have your seed and can find the ids of the nodes you were connected to, you can recover your funds using Lightning's Data Loss Protection feature.

So how does it work ? Just reconnect to the same nodes, they will publish their commit transactions and give you their channel data, watch for it on the Bitcoin blockchain, extract public keys, recompute your channel keys and combine them with the data they gave you to spend your output. Of course we'll release a tool to automate this process, but all new channels created with v0.3.2 will benefit from this feature.

Extended Channel Queries

We implemented an extension to channel queries which makes retrieving and syncing routing information more efficient, which is really good for mobile Lightning nodes which can now sync their routing data faster and using less bandwidth. It is also a first step toward even more efficient strategies (inventory-based gossip, similar to how bitcoin nodes relay blocks and transactions, and potentially more advanced reconciliation algorithms).

Payment API improvements

We've changed the payment API to return more information about received and sent payments (fees, status, route, etc). If you were relying on the format of the previous responses, you may need to slightly update your code. See the API documentation for details.

Configurable transaction confirmation targets (see #1083)

You can now configure the number of confirmations that your node will target for funding, commitment and claim transactions (i.e transactions that spend a commitment transaction, when a channel is closed for example), which has an impact on the fee rate that will be selected in each case. We still provide good default values, and would recommend that you read the description of PR #1083 carefully before you set custom values.

Miscellaneous improvements and bug fixes

We've implemented several new BOLT changes which pave the way for new Lightning features, such as AMP and trampoline payments:

  • variable-length onion (#1087)
  • improved TLV support
  • BOLT 11 invoice feature bits (#1121)

We now run our unit and integration tests against Bitcoin Core 0.18.1, which is our recommended version. Eclair will still work with Bitcoin Core 0.17 but support may be dropped when 0.19 is released.

We've fixed a bug in our Electrum coin selection algorithm, this fix will be included in the next eclair-mobile release (see #1146).

We now allow you to restrict peers you want to sync from (see sync-whitelist #954).

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

Upgrading

This release is fully compatible with Eclair v0.3.1. You don't need to close your channels, just stop eclair, upgrade and restart. There are 2 changes you need to pay attention to though:

  • our target JDK is JDK11 and we don't support JDK8 anymore
  • our Bitcoin Core target is 0.18.1
    If you're still running JDK8 or Bitcoin Core 0.17 we strongly suggest that you upgrade.

The following configuration keys have changed and have been moved to an on-chain-fees section:

Old name new name
default-feerates on-chain-fees.default-feerates
max-feerate-mismatch on-chain-fees.max-feerate-mismatch
update-fee_min-diff-ratio on-chain-fees.update-fee-min-diff-ratio

⚠️ Please note that we changed the hyphen on update-fee-min-diff-ratio to be consistent with other configuration keys.

If you have overridden default values for these keys and have not updated your configuration file, Eclair will not start but instead display a message and tell you which key to update.

For example, if you had overridden max-feerate-mismatch, this is what what you had with 0.3.1:

eclair.max-feerate-mismatch = 10

You must update your configuration file like this:

eclair.on-chain-fees.max-feerate-mismatch = 10

Changelog

  • Check configuration for obsolete keys on startup (#1175)
  • Update assisted channels (#1172)
  • Sqlite: use TEXT type for strings (#1159)
  • Use guava to compute CRC32C checksums (#1166)
  • Activate extended channel range queries (#1165)
  • Add execution time limit (#1161)
  • Update netty dependency to 4.1.32 (#1160)
  • Upgrade new unit tests to bitcoin 0.18.1 API (#1157)
  • Use bitcoin 0.18.1 in the test (#1148)
  • Extend funding key path to 256 bits (#1154)
  • Electrum: improve coin selection (fixes #1146) (#1149)
  • HTTP API: add type hints for payment status (#1150)
  • Commitments: take HTLC fee into account (#1152)
  • Fix and expand channel keypath (#1147)
  • Check if remote funder can handle an updated commit fee when sending HTLC (#1084)
  • Derive channel keys from the channel funding pubkey (#1097)
  • Handle fees increases when channel is OFFLINE (#1080)
  • Improve error handling when we couldn't find all the channels for a supplied route in /sendtoroute API (#1142)
  • Payment lifecycle refactoring (#1130)
  • Update string to match on bitcoind while it's indexing (#1138)
  • Sphinx: accept invalid downstream errors (#1137)
  • Drop support for Java 8 (#1135)
  • Add codecov integration to semaphore CI (#1134)
  • Make tests run in parallel (#1112)
  • Removed Globals class (#1127)
  • Don't hardcode the channel version (#1129)
  • Check funds in millisatoshi when sending/receiving an HTLC (#1128)
  • Add monitoring with Kamon (disabled by default) (#1126)
  • Router computes network stats (#1116)
  • Add Semaphore CI (#1125)
  • Activate support for variable-length onion (#1087)
  • Made sync params configurable (#1124)
  • Reject expired invoices before payment flow starts (#1117)
  • Update docker build (#1123)
  • Implement Bolt 11 invoice feature bits (#1121)
  • Use Long to back the UInt64 type (#1109)
  • Fix maven mirror (#1120)
  • Fix build (#1115)
  • Bolt4: remove final expiry too soon error message (#1106)
  • Fix regression in Commitments.availableForSend (#1107)
  • Move http APIs to subproject eclair-node (#1102)
  • Add a sync whitelist (#954)
  • Use unsigned comparison for 'maxHtlcValueInFlightMsat' (#1105)
  • Add more numeric utilities to MilliSatoshi (#1103)
  • Rework router data structures (#902)
  • Extended queries optional (#899)
  • Typed cltv expiry (#1104)
  • Publish transactions during transitions (#1089)
  • Route computation: fix fee check (#1101)
  • Typed amounts (#1088)
  • Documentation update (#1092)
  • Update list of commands in eclair-cli help (#1091)
  • Use correct cost comparison when evaluating candidate channels (#1090)
  • Configurable transaction confirmation target (#1083)
  • Made using/storing/sending consistent (#1082)
  • Variable-length onion payloads (#976)
  • Handle fulfill not acked upstream (#1079)
  • Replace traits by bitfield for ChannelVersion (#1073)
  • Switch varint codec to big-endian. (#1075)
  • Added a channel version to Commitments object (#1059)
  • TLV improvements and full spec compatibility (#1069)
  • Wrap all routes in toStrictEntity (#1032)
  • Electrum: update checkpoints (#1067)
  • Handle unknown fields in network announcements (#1047)
  • Add a few improvements to tlv. (#1065)
  • Add eclair-cli to eclair's docker image (#1063)
  • Use a RelayResult class instead of an Either (#1064)

Thank you @btcontract !

Eclair v0.3.1

03 Jul 16:03
6906ecb
Compare
Choose a tag to compare

This release includes many improvements, new API calls, as well as a few bug fixes. It is faster, memory usage is smoother, and we strongly recommend that users upgrade.

It is is fully compatible with 0.3 (see the Upgrading section below).

Major changes

API Improvements

Our payment API has been extended (see API documentation website):

  • better fee control when computing routes
  • more comprehensive balance information
  • you can provide your own preimage when you create payment invoices
  • you can provide precomputed payment routes when you send payments

Performance improvements

Some internal structures and data models have been changed to make resource usage (CPU and memory) more efficient even under very heavy load.

Smarter payment relay logic

We have improved our heuristics used to select the "best" outgoing channel when relaying payments, in order to increase success rate even if several channels to the next node are unavailable (because they don't have enough balance for example).

Automatic re-connection using published node addresses

If an IP address it not provided, we will use the address specified in its latest published announcement to connect to a node.

Miscellaneous improvements

Handling of corner cases where funding transactions would never confirm has been improved, as well as re-connection logic when a node is connected to many different peers.

We've also improved runtime checks to detect if your Bitcoin node is still syncing or re-indexing (you should not use eclair with a bitcoin node that is not ready, we detect it when the application start, but not always if you stop your bitcoin node while eclair is running, and upgrade/re-index it).

And we will now properly fail incoming payments when the invoice has expired.

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

Upgrading

This release is fully compatible with Eclair v0.3 (including supported JDK and Bitcoin Node versions). You don't need to close your channels, just stop eclair, upgrade and restart. The only significant difference with v0.3 is that support for our old v0.2 API, which was deprecated but could still be activated, has been completely dropped.

Changelog

  • Reject payments for expired invoices (#1057)
  • Connect immediately on restart, then wait (#1040)
  • Close the channel if the funding tx never confirms (#1034)
  • Check 'initialblockdownload' from bitcoind during startup (#1058)
  • Add TLV and TLV stream codec support (#1045)
  • Add more data to usablebalances API method (#1053)
  • Make Bitcoin Core bind on localhost in tests (#1056)
  • Added more memory for scoverage (#1050)
  • Update link for recommended JDK (#1054)
  • Add balances API method (#962)
  • Remove old service and related docs (#1046)
  • Ack unhandled lightning messages (#1042)
  • Minor fixes (#1043)
  • Electrum: add data to TxIdFromPosResponse. (#1038)
  • Correctly decode requests without multipliers (#1020)
  • Removed cached codec (#1036)
  • Electrum: add id_from_pos (#1035)
  • Use compact encoding for signatures (64 bytes) instead of DER (#1014)
  • Output txid and serialized tx in transaction json serializer (#1033)
  • Clean pending htlcs db (#1027)
  • Smarter restore logic for closing channels (#1015)
  • Peer reconnection address from node announcements (#1009)
  • Add feeThresholdSat and maxFeePct parameters to payments API (#1023)
  • Close channel if funding tx times out (#1016)
  • Smarter relay logic (#1011)
  • Electrum: update server list (#1022)
  • Initialize global feerate with default from conf (#1019)
  • Removed PaymentRequest.MAX_AMOUNT (#1018)
  • Set handleCommandError to WARN (#1012)
  • Electrum: consistently retrieve wallet transactions (#1010)
  • Make htlc-reaper a top-level actor (#1013)
  • Send to route (#952)
  • Increase Service and EclairImpl test coverage (#1004)
  • API: optionally use a user supplied preimage when creating invoices (#965)
  • Improved test coverage of io package (#996)

Thank you @btcontract !

Eclair v0.3

09 May 18:10
a5debcd
Compare
Choose a tag to compare

This is a major release which includes many improvements and bug fixes, and we recommend that users upgrade.

It is compatible with eclair v0.2-beta9 (i.e you don't have to close your channels) but upgrading may be not as seamless as for previous versions, please check the Upgrading section.

Major changes

Eclair runs on mainnet by default

Default configuration now targets mainnet, but you can still easily run Eclair on testnet or regtest.

New RPC API

Our RPC API has been upgraded and improved and now include calls to retrieve payment information, see our API documentation. You can still choose to use the old API with a configuration option that will be removed in a future release.

Easy channels backup

Making backups of your channels is now simpler: we create an update an eclair.sqlite.bak backup file that is always consistent and safe to use even when your node is running.

Please note that an old backup can be used as a "static" backup: if you restore an old backup, channels open to peers that support Data Loss Protect will be recovered.

Simple Plugin Support

You can now easily write and deploy your own plugins, written in any JVM-compatible language. See the readme for more details.

Bitcoin Core v0.17 or newer is now required

We now require Bitcoin Core v0.17 or newer, meaning that eclair now works with Bitcoin Core v0.18. Eclair will not work anymore with older versions, you will have to upgrade.

Support for Tor Services

You can now run Eclair as a Tor hidden service for increased privacy.

Note that Tor also offers out-of-the-box NAT traversal, which solve the issue of changing ips.

Target JDK is now OpenJDK 11

We switched our target JDK from Oracle JDK8 to OpenJDK 11, and we recommend that you use it to run eclair. You can still use Oracle JDK8 (but it's up to you to check your licensing options).

Performance improvements

Eclair now embeds native JNI bindings for libsecp256k1 for Linux 64 bits, Windows 64 bits and Osx 64 bits, which makes eclair much faster. You can still use your own version of libsecp256k1 if you use a different OS.

Many internal structures and workflows have been optimised and eclair is now even faster (not that it was ever slow to begin with, eclair is used on some of the biggest nodes on LN).

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

Upgrading

This release is compatible with Eclair v0.2-beta9. You don't need to close your channels, just stop eclair, upgrade and restart. However, there are 2 major runtime changes that you need to take into account:

  • If you're using Bitcoin Core v0.16.3, you must upgrade to v0.17 (latest release is 0.17.1). Since we require indexing, you tx index database will be migrated the first time you start your Bitcoin Core, which may take up to a few hours. Please stop eclair, migrate your Bitcoin node, and wait until its index database has been migrated before you start eclair again !

  • Our target JDK is now OpenJDK 11, and we suggest that you use it to run Eclair. You can still use Oracle JDK8 (but it's up to you to check your licensing options). See #846 for more details.

.exe Windows installer has been removed

Starting with this version, we do not release a Windows installer. Windows users must instead run the eclair jar file manually. If you're not sure how to do that, follow the instructions below:

  • Download and install Java with OpenJDK
  • Download the eclair-node-gui-0.3-a5debcd.jar file from this page and put it somewhere on your disk
  • Create a run-eclair-0.3.bat file somewhere on your disk, with the following content:
start /B javaw -Declair.datadir=C:\path\to\node\datadir -jar C:\path\to\eclair-node-gui-0.3-2a89cf7.jar

Replace the C:\path\to\... section with the actual values on your system. Note if you use the default datadir (which is C:\Users\name\.eclair) you can omit the -Declair.datadir=... section.

You can now run eclair by executing this bat file. Alternatively, you can use command line.

Changelog

  • Use bitcoind fee estimator first (#987)
  • Ignore subprojects eclair-node/eclair-node-gui in the codecov report (#991)
  • Accept commit_sig without changes (#988)
  • Add bot support for code coverage (codecov) (#982)
  • Set tcp client timeout to 20s (#990)
  • Set default chain to "mainnet" (#989)
  • Replace UnknownPaymentHash and IncorrectPaymentAmount with IncorrectOrUnknownPaymentDetails (#984)
  • Update bash autocompletion for eclair-cli (#983)
  • API: Support query by channelId or shortChannelId everywhere (#969)
  • Better handling of closed channels (#944)
  • Electrum: make debug logs shorter (#964)
  • ElectrumWallet should not send ready if syncing (#963)
  • Print stack trace when crashing during boot sequence (#949)
  • Live channel database backup (#951)
  • Added simple plugin support (#927)
  • Add channel errors in audit db (#955)
  • Added a timeout for channel open request (#928)
  • Electrum: do not persist transaction locks (#953)
  • Add a proper payments database (#885)
  • Set max payment attempts from configuration (#931)
  • Expose the websocket over HTTP GET to work properly with basic auth (#934)
  • Send events when HTLCs settle on-chain (#884)
  • Electrum: update client name (#930)
  • Add random delay to rebroadcast (#925)
  • Rollback tx if disconnected in WAIT_FOR_FUNDING_SIGNED (#923)
  • Separate cases for bech32 testnet and regtest for BOLT11 fallback address
  • API: use form data instead of JSON-RPC (#894)
  • Deal with channels with fees=0 when computing a route (#905)
  • Check WatchSpent in constant time (#916)
  • Rework database initialization (#911)
  • Use bitcoin-lib 0.11 which embeds libsecp256k1 (#907)
  • Don't send updates if no filter has been set (#912)
  • Upgrade to bitcoin 0.17.1 (#826)
  • Better logic for sending channel_updates (#888)
  • Replace BinaryData by scodec.bits.ByteVector (#896)
  • Better error logs for socks5 proxy (#893)
  • NetworkDb: remove stale channels in batch (#886)
  • Clean channels with unexisting funding tx (#714)
  • Set default to-remote-delay-blocks to 720 (#879)
  • Routing heuristics (#821)
  • Use ypub prefix for Electrum xpub (#875)
  • Update jeromq dependency (#852)
  • Use OpenJDK 11 as default JDK (#846)
  • Electrum fixes and improvements (#873)
  • Fixed computation of available balance (#868)
  • Faster gui startup (#863)
  • Support all-uppercase payment requests (#862)
  • Reimplemented BOLT 11 with scodec (#856)
  • Parametric route search (#844)
  • Increased max-to-local-delay-blocks to 2016 (#853)
  • Stop disconnected peer when it has no channels (#840)
  • Improve Electrum start-up time (#848)
  • Add balance and channel lifecycle events to the audit db (#827)
  • Support for Tor onion services (#736)
  • (Router) Always select direct channel if there is one to the target (#850)
  • Proper handling of gossiped channels being spent (#838)
  • Ignore reconnections requests to the same peer with the same address (#835)
  • Replace initialization futures Future[Boolean] by Future[Done] (#836)
  • Set timestamp filter lower bound to current time (#837)
  • ChannelSelectionSpec: use akka.event.NoLogging (#834)
  • Relay to channel with lowest possible balance (#784)
  • Complete commit logs

Thank you @btcontract @rorp @n1bor @Kukks !

Eclair v0.2-beta9

18 Jan 19:11
eb0e45a
Compare
Choose a tag to compare

This release includes many improvements and bug fixes, and we recommend that users upgrade.

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

Upgrading

This release is compatible with Eclair v0.2-beta8. You don't need to close your channels, just stop eclair, upgrade and restart.

Changelog

  • Auto probing of local channels (#762)
  • Routing: use custom implementation for the shortest path algorithm and the graph (#779)
  • Readability improvements in GUI (#801)
  • Make ping less aggressive (#782)
  • Detect broken HTLC links at startup (#757)
  • Set a max value of 2016 blocks for to_self_delay (#795)
  • Disable local channels below reserve (#763)
  • Add exclusive locks to channels sqlite db (#781)
  • Relay fail message after it is cross-signed (#754)
  • Use BOLT specific formatting for short channel id (#793)
  • Optional per-node features in conf (#778)
  • Make maxHtlcValueInFlight checks directional when sending and receiving HTLCs (#768)
  • Update connection-level features at reconnection (#765)
  • Disconnect peer after a timeout when waiting for revocation (#761)
  • Disconnect peer if it does not reply to pings (#755)
  • Watch future remote commit on restore (#766)
  • Switch sttp backend async-http-client -> okhttp (#764)
  • Reject received payments where PaymentRequest Expiry Tag time has been exceeded. (#749)
  • Use sttp lib instead of akka-http-client (#720)
  • Use different ZMQ block and tx subscriptions
  • Always add 1 block to the finalCltvExpiry (#742)
  • Complete commit logs

Thank you @btcontract @jagottsicher @n1bor @rorp !

Eclair v0.2-beta8

20 Oct 20:51
Compare
Choose a tag to compare
Eclair v0.2-beta8 Pre-release
Pre-release

This release fixes a bug in our router module where we would tag signatures for channel_update messages that include an optional htlc_maximum_msat field as invalid and close the channel, even when these signatures were actually valid.

This bug is specific to our server/desktop node and does not affect our mobile wallet.
Our testnet and mainnet nodes have already been patched.
We * strongly * encourage users to upgrade as soon as possible.

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

Upgrading

This release is compatible with Eclair v0.2-beta7. You don't need to close your channels, just stop eclair, upgrade and restart.