1
0
Fork 0
mirror of https://github.com/ACINQ/eclair.git synced 2025-02-24 06:47:46 +01:00
Commit graph

2073 commits

Author SHA1 Message Date
Pierre-Marie Padiou
24dd6136f7
Fix the build (#1945)
* disable pg lock auto-release in tests

It relies on akka's coordinated shutdown and causes the test jvm to
halt.

* fixup! Remove  `messageFlags` from `ChannelUpdate` (#1941)
2021-09-09 17:35:03 +02:00
thomash-acinq
64f33bada4
Fix isNode1 in tests (#1944) 2021-09-09 15:45:45 +02:00
thomash-acinq
768a74558f
AB testing (#1930)
Add AB testing framework:
- Experiments are added by adding a section in router.path-finding config. Each experiment can have different parameters.
- Traffic is randomly split among the different experiments. The size of each experiment is configurable. 0% experiments don't affect traffic but can be triggered manually with the API.
- Metrics are recorded in the audit database
2021-09-09 14:17:37 +02:00
Pierre-Marie Padiou
6c546f06c0
Remove messageFlags from ChannelUpdate (#1941)
We make it a serialization detail, which it should be. The `derive`
method from `scodec` makes it very easy to do. We should probably always
use a dedicated class to handle flags, instead of using the `byte` codec
and binary operators.

This allows to remove the `require` in the `ChannelUpdate` definition,
which recently bit us in testing.

The only annoying thing is that we still need to expose a `messageFlags`
method in order to populate the `ChannelDisabled` error message.

We also typeify channel flags, as an alternative to passing around a `Byte`.
2021-09-09 13:25:25 +02:00
rorp
88f0dfd225
Make publising of onion addresses configurable (#1936)
When using Tor, your onion address is by default added to your
list of public addresses and advertised through the gossip layer
to allow peers to find your node and connect to it.

We now allow opting out of that mechanism by setting
`tor.publish-onion-address = false` in your `eclair.conf`.

This will ensure your onion address is not advertised, and peers
will not be able to connect to you unless you've connected to
them first.
2021-09-08 15:11:17 +02:00
Anton Kumaigorodski
632d40c270
Add AbstractChannelRestored event trait (#1927)
This lets plugins define variants of the `ChannelRestored` when
using non-standard channel types, while ensuring these channels
are correctly integrated in the list of local channels for payment
relaying.
2021-09-08 14:40:40 +02:00
Bastien Teinturier
663094e0bf
More flexible mutual close fees (#1768)
Add `closing_signed` `fee_range` TLV as described in
https://github.com/lightningnetwork/lightning-rfc/pull/847
We also refactor the negotiating state, add many tests and fix #1742.

Add new fields to the `close` API to let users configure their preferred
fees for mutual close.
2021-09-08 10:03:05 +02:00
Pierre-Marie Padiou
daace535c4
Dedicated event for channel_update modifications (#1935)
Use an event `ChannelUpdateParametersChanged` for the sole purpose of tracking changes to channel_update.

Also, conf change at restore is now treated like a regular fee update. We do handle `CMD_UPDATE_RELAY_FEES` in both `OFFLINE` and `SYNCING`, because there may be a race between `CMD_UPDATE_RELAY_FEES` and
`ChannelRestablish`. And there was no good reason to behave differently in those states anyway.

* fix updateRelayFee api call

The `Register` should be used to channel actors, not the `Router`.
The former tracks all channels, whereas the latter only contains
channels in certain states. We only query the `Router` when we need
reference to external (public) nodes and channels.
2021-09-03 18:45:05 +02:00
Pierre-Marie Padiou
9f9f10e911
Conversion nits (#1937) 2021-09-03 14:36:49 +02:00
Bastien Teinturier
4f93734fe3
Add warning about GUI deprecation (#1929)
The GUI has been deprecated a long time ago, and doesn't inform users about
potential risks, such as RBF-ing funding txs.

We should instead incentivize users to use the CLI and read the documentation,
which ensures they will know about potential pitfalls.
2021-09-03 14:11:48 +02:00
Pierre-Marie Padiou
118285f4a0
Gracefully release Postgres lock on shutdown (#1912)
This allows instant restart of eclair when using Postgres backend.

Fixes #1896.
2021-09-03 11:34:16 +02:00
Anton Kumaigorodski
d11765cfda
Add description_hash in createinvoice (#1919)
Bolt11 invoices can either contain a string description or a hash
of that description (if it's too big or should stay private).

The API didn't let users provide a description hash, which is now
possible.

Co-authored-by: Pierre-Marie Padiou <pm47@users.noreply.github.com>
2021-09-03 09:26:50 +02:00
rorp
bca2a83218
Tor support for blockchain watchdogs (#1907)
We now query blockchain watchdogs over Tor when it's activated.
Some watchdogs are automatically disabled because they have no
support for Tor.

We also let users change the list of watchdogs that should be run
from their `eclair.conf`.

Co-authored-by: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2021-09-01 09:09:10 +02:00
Pierre-Marie Padiou
54fa208c7d
Add validation on the recid in verifymessage (#1928)
We offset the `recid` by `31` for compatibility with `lnd` [1] but we
should also support normal values (0-3), and also add boundary checks.

[1] https://twitter.com/rusty_twit/status/1182102005914800128
2021-08-31 15:28:40 +02:00
Bastien Teinturier
59ccf3427a
Explicit channel type in channel open (#1867)
Add support for https://github.com/lightningnetwork/lightning-rfc/pull/880

This lets node operators open a channel with different features than what
the implicit choice based on activated features would use.
2021-08-31 09:01:06 +02:00
thomash-acinq
275581df96
Make route params explicit (#1923)
For path finding we always need `routeParams`, however all of the messages asking for finding a route have `routeParams` as an optional parameter. This makes it hard to enforce that a given payments uses a given `routeParams` as there may be a `None` somewhere that reverts to the global defaults.
It seems that the reason all the `routeParams` are optional is that the messages asking for finding a route are sometimes used when we already have a route. This is a hacky solution and I've tried to replace these messages by traits that work both when we want to find a route and when we already have it.
I'm trying to enable AB testing which requires using different `routeParams` for different payments and this is a blocker.
2021-08-30 18:12:21 +02:00
Bastien Teinturier
d53f57fed9
Switch ZMQ to block hash and improve resiliency (#1910)
* Disable ZMQ high watermark

This should prevent messages from being dropped.
We also configure the socket before subscribing to topics and connecting.

* Switch ZMQ raw block to block hash only

We were receiving raw blocks on the ZMQ socket, whereas we don't use it.
We only use this event as a trigger that a new block has been found, so we
can save bandwidth by switching to block hash subscriptions instead.

* Regularly check blocks

In case we haven't received block events on the ZMQ socket, we regularly
check whether we're behind.
2021-08-30 18:08:22 +02:00
Bastien Teinturier
92091a1504
Fix ZmqWatcher flaky test (#1925)
There's a very annoying race condition in that test, and we can end up
emitting events twice on slow machines. This isn't an issue so we stop
verifying that we avoid duplicate events.
2021-08-30 16:38:04 +02:00
thomash-acinq
07b022e7fb
Split SendPayment in SendPaymentToRoute and SendPaymentToNode (#1921)
In case we want to retry, this allow us to know what we started with and not try to find a new route when using `SendPaymentToRoute`
2021-08-30 13:15:27 +02:00
Bastien Teinturier
fc36321403
Add TlvStream to all lightning messages (#1891)
This ensures we'll be able to easily enrich messages with future
tlv fields and minimizes the risk of future backwards-compatibility
issues.
2021-08-25 13:36:28 +02:00
llya Evdokimov
759c87fc09
Add advanced configuration details in README.md (#1915)
Add details about advanced bitcoin configuration options and JVM customization.
2021-08-25 09:14:20 +02:00
Bastien Teinturier
c504658264
Better handling of remote commit confirmation in TxPublisher (#1905)
* Never retry anchor publish when commit confirmed

We used to check the feerate before checking whether the commit tx was
already confirmed: when the commit feerate was good enough, we would
respawn a publish actor every block whereas the commit tx was already
confirmed.

* Abandon evicted replaceable txs

This ensures the bitcoind wallet won't keep the transaction around and
avoid using its inputs for other transactions.

Fixes #1898
2021-08-23 10:21:11 +02:00
Bastien Teinturier
9a0fc14710
Nicer feerate string representation (#1908)
Override toString() for the various feerate classes.
2021-08-18 12:35:26 +02:00
Bastien Teinturier
49e1996391
MPP scale min part amount based on total amount (#1911)
Scale MPP partial amounts based on the total amount we want to
send and the number of parts we allow.

This avoids polluting the results with cheap routes that don't have the
capacity to route when the amount is big.
2021-08-17 16:35:43 +02:00
thomash-acinq
ebed5ad9ea
Add cost per hop and base weight ratio (#1815)
- Add a base weight ratio. Allows to give more weight to the fee itself. Setting the base to 1 is like not using weight ratios.
- Add checks that the configuration values make sense (all weights should be nonnegative and sum to 1). Checks are performed when loading the configuration.
- Add a virtual cost per hop which allows prioritizing short paths. The cost per hop has a base component and a proportional one, similar to channel fees.
2021-08-17 12:36:29 +02:00
thomash-acinq
aab83fdfbc
Don't add channel update to auditDb if it hasn't changed (#1906)
Don't add channel update to auditDb if it hasn't changed
2021-08-17 10:28:25 +02:00
Bastien Teinturier
4cde8c555f
Handle shutdown retransmit when negotiating (#1902)
We didn't handle shutdown messages in the negotiating state, whereas they
may be received upon reconnection. This created some unnecessary warnings
in the logs.
2021-08-16 10:18:54 +02:00
Bastien Teinturier
9f2b0368c7
Rename channel type traits (#1909)
No functional changes, we just rename some traits and a file for clarity.
2021-08-16 09:32:39 +02:00
thomash-acinq
19f4d1f9e1
Refactor db migration (#1901)
* Refactor migration to newer versions of databases
* Put DB name and version in companion object and share it with tests
2021-08-12 12:07:30 +02:00
Bastien Teinturier
a3427172b7
Retry local channel failures in trampoline payments (#1899)
We previously made a single payment attempt per trampoline fee.
Since our channel selection for the first attempt is deterministic, if we
encountered a local failure with that channel, the retries with higher
trampoline fees were hitting the exact same error, whereas we should
instead try a different channel.
2021-08-12 10:19:12 +02:00
thomash-acinq
8f5f6ace54
Set relay fees per node and save them to database (#1890)
* Set relay fees per node and save them to database

- Fees are set per node instead of per channel (setting different fees for different channels to the same node is most probably an error)
- Fees are saved to a database so that we can keep a trace of historic fees and new channels with a known node use the fee that we set and not the default fee.
2021-08-11 18:02:27 +02:00
Pierre-Marie Padiou
131ae8b11d
Balance: do not deduplicate identical htlcs amounts (#1894)
HTLCs are stored in a `Set`, and doing `htlcs.map(_.amount).sum` will
deduplicate identical amounts, resulting in an erroneous balance
calculation. The `Set` must be converted to a `List` first.

Identical htlcs amount are quite frequent due to splitting for AMP.

Co-authored-by: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2021-08-09 16:08:43 +02:00
Bastien Teinturier
2d68bab303
Fix API substream materialization issues (#1884)
Akka-HTTP can throw this error when we're lazily serializing
response objects. We don't need that laziness, so we set the
strict mode at the top-level of our http stack.

Fixes #1855
2021-08-09 15:23:04 +02:00
thomash-acinq
6d4da4072c
Different default relay fees for announced and unannounced channels (#1893)
* Different default relay fees for announced and unannounced channels

* nit

Co-authored-by: Pierre-Marie Padiou <pm47@users.noreply.github.com>
2021-07-29 09:04:32 +02:00
Bastien Teinturier
cafaeedef4
Set version to 0.6.2-SNAPSHOT (#1888) 2021-07-19 17:14:08 +02:00
Bastien Teinturier
d3ae32326e
Set version to 0.6.1 (#1887) 2021-07-19 15:36:23 +02:00
Pierre-Marie Padiou
c8c5e76d24
Update akka-http-json4s dependency (#1889) 2021-07-19 14:07:16 +02:00
Bastien Teinturier
3f1c2506a6
Fix watcher flaky test (#1883)
This test sometimes fail when the `NewTransaction` events are delayed too
much because the CI machine is overloaded.
2021-07-16 19:29:33 +02:00
Bastien Teinturier
adf36de0e1
Fix yet another flaky test (#1886)
If we want C to go to the closed state, we must ensure it's really his claim
transaction that's in the mempool before generating blocks.
2021-07-16 19:18:55 +02:00
Pierre-Marie Padiou
c22596bb92
Update dependencies and enable fatal warnings (#1885)
Co-authored-by: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2021-07-16 19:02:18 +02:00
Pierre-Marie Padiou
79729c78c1
Update README (#1881) 2021-07-16 17:32:34 +02:00
Fabrice Drouin
01b40730fe
Implement option-upfront-shutdown-script (#1846)
* Implement option-upfront-shutdown-script

* Do not activate option_upfront_shutdown_Script by defaut

Users will need to explicitly activate it.

* Send back a warning when we receive an invalid shutdown script
2021-07-16 17:27:56 +02:00
Pierre-Marie Padiou
8c49f779ad
Fix payment handler tests (#1882)
The parallelization introduced with #1880 has created race conditions in tests.
2021-07-16 16:08:16 +02:00
Pierre-Marie Padiou
b4183edfa1
Fetch incoming payments in parallel (#1880)
This is a simpler approach to completely parallelizing the handling of
payments, where we simply parallelize the fetch from the database.

This brings a ~30% performance improvement in performance in `PerformanceIntegrationSpec`.
2021-07-16 14:36:26 +02:00
Bastien Teinturier
51824028b3
Fix flaky channel integration tests (#1879)
Our test suite is putting a lot of strain on our CI machines, and we start
hitting some timeouts. There were places where we would put a 60 seconds
timeout on an `awaitCond` but inside we'd still use the default 15 seconds
timeout.
2021-07-16 14:18:07 +02:00
Pierre-Marie Padiou
3bb7ee8a3e
Parallel payment request generation (#1878)
Delegate the payment request generation, signature and db write to a short-lived child actor.

There is small (~5%) gain in performance in `PerformanceIntegrationSpec` because what matters is the db write, and it is not parallelized in WAL mode.
2021-07-16 13:55:38 +02:00
Pierre-Marie Padiou
d02760d96f
Fail unsigned outgoing htlcs on force-close (#1832)
Fail outgoing _unsigned_ htlcs on force close, just like we do when disconnected.

Fixes #1829.

Co-authored-by: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2021-07-16 13:52:25 +02:00
Bastien Teinturier
3ae9a4ae37
Additional reestablish test (#1875)
This test was added to lightning-kmp where this case wasn't correctly
handled: https://github.com/ACINQ/lightning-kmp/pull/278

It is correctly handled by eclair, but an additional test doesn't hurt.
2021-07-16 13:31:24 +02:00
Pierre-Marie Padiou
ca51a2d168
Enable WAL mode on Sqlite (#1871)
[Write-Ahead Logging](https://sqlite.org/wal.html) is both much more performant in general, and more suited to our particular access patterns.

With a simple throughput performance test, it improves performance by a factor of 5-20x depending on the sync flag.

 version                                 | throughput
-------------------------------|-------------
mode=journal sync=normal (*)| 11 htlc/s
mode=journal sync=full| 7 htlc/s
mode=wal sync=normal| 248 htlc/s
mode=wal sync=full (**)| 62 htlc/s 

(*) previous setting
(**) new setting

I went with a conservative new setting of wal+full sync, which is both 5x more performant, and more secure than what we had before.

> In WAL mode when synchronous is NORMAL (1), the WAL file is synchronized before each checkpoint and the database file is synchronized after each completed checkpoint and the WAL file header is synchronized when a WAL file begins to be reused after a checkpoint, but no sync operations occur during most transactions. With synchronous=FULL in WAL mode, an additional sync operation of the WAL file happens after each transaction commit. The extra WAL sync following each transaction help ensure that transactions are durable across a power loss. Transactions are consistent with or without the extra syncs provided by synchronous=FULL. If durability is not a concern, then synchronous=NORMAL is normally all one needs in WAL mode.

Co-authored-by: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2021-07-15 18:12:26 +02:00
Bastien Teinturier
733c6e7688
Refactor global balance tests (#1874)
Move balance check test to their own file instead of
adding bloat to the NormalStateSpec tests.

Remove unnecessary parts that belonged to the
NormalStateSpec test.
2021-07-15 17:45:34 +02:00