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 https://github.com/lightningnetwork/lightning-rfc/pull/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](https://github.com/ACINQ/eclair/wiki/Multipart-Payments) 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 https://github.com/lightningnetwork/lightning-rfc/pull/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](https://acinq.github.io/eclair/#introduction) 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 https://github.com/lightningnetwork/lightning-rfc/pull/714 for more details. # 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: ``` $ 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 !