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

1580 commits

Author SHA1 Message Date
Pierre-Marie Padiou
0937af3a0b
Improved tracing of single/multi-part payments (#1218)
This includes a bit of refactoring in `MultiPartPaymentLifecycle`. Note
that we can't use the `onTermination` handler to finish the spans,
because it is asynchronous and may not be called after a long time.
That's why we use a dedicated `myStop` function.

In Kamon 2.0, by default spans are automatically generated for tracked
actors, which we don't want because we define our own spans. That's why
there is an additional configuration in `application.conf`.
2019-11-22 11:57:28 +01:00
n1bor
ff3aefa45e Add networkstats API call to allow display of network stats (#1221) 2019-11-22 09:58:08 +01:00
Bastien Teinturier
321ecef35c
MPP routing improvements (#1219)
MPP split/retry improvements:
* Only use public channels when sending to remote node
* Don't retry when sending to direct peer
* Blacklist channels that are a bad route prefix
2019-11-21 09:29:49 +01:00
Bastien Teinturier
c76cc5bfe6
PaymentLifecycle should tell the router to ignore route prefix (#1217)
When paying a multi-part payment, we tell the PaymentLifecycle to use a route prefix that contains the first hop (for example a -> b via channel 1).

We need to also tell the router to ignore the nodes that are in the route prefix, otherwise when retrying it may try some completely dumb routes that have no chance of succeeding.
2019-11-18 15:25:38 +01:00
Dominique
f45dc1c0fd
Fallback ElectrumClient to TLS 1.2 if 1.3 is not supported (#1216)
Blindly enabling TLS 1.3 raises an error on android < 10. 
Support should be checked beforehand, and client must fallback 
to `TLSv1.2`.
2019-11-18 15:23:58 +01:00
araspitzu
ac9c091fca
Fix /allupdates API (#1187)
* Fix `allUpdates` API when used with the public key filter, the API now returns all updates that involve a channel of which the filter key has made an update
2019-11-18 14:51:46 +01:00
Bastien Teinturier
11003097cf
Refactor: move channel relaying to a ChannelRelayer actor. (#1215)
The relayer is the top-level orchestrator that forwards to a payment handler, channel relayer or (coming) node relayer.
2019-11-14 16:40:21 +01:00
Bastien Teinturier
859b405587
Update invoice test vectors. (#1213)
The spec PR was updated to modify the feature bits in the official test vectors.
2019-11-14 16:21:32 +01:00
Bastien Teinturier
6bc5fcfecf
Add trampoline onion support (#1209)
This commit adds support for creating and decrypting trampoline onions.
It doesn't add support for forwarding/routing trampoline payments yet.
2019-11-14 11:38:00 +01:00
Fabrice Drouin
30a0e9935a
Payment Request: speed up node id computation (#1203)
* Payment Request: speed up node id computation

Use native secp256k1 pubkey recovery for faster node id computation
2019-11-14 10:04:51 +01:00
Pierre-Marie Padiou
95586300a0
Ignore NPE in tests (#1211)
This is due to a callback being executed after the parent actor has been
cleaned up. We don't really care about the result anyway, so we can
safely ignore, even if the issue only arises in tests.

The root problem here is that we are making references to actor methods
from a callback, which we shouldn't do, because whatever we reference
may have disappeared by the time the callback tries to access it. A
better pattern would be to `pipe` the results of the `Future` to
oneself, but that would require more work and possibly change the FSM,
which seems overkill for the issue at hand.
2019-11-14 09:55:09 +01:00
Pierre-Marie Padiou
e5060d9377
Fixed race condition on payment handler init (#1208)
When an actor sends a message to itself as part of its class definition,
there is no guarantee that this message will be processed first. Relying
on that to set the default payment handler is problematic and causes
race conditions in tests.
2019-11-13 11:05:01 +01:00
Pierre-Marie Padiou
dd86f8701a
Fixed composition of receive handlers (#1207)
It was only working with one custom receive handler, but what we really want is the ability to stack multiple handlers.
2019-11-13 09:50:07 +01:00
Bastien Teinturier
ed022b00ea
Multi part payments (#1153)
Add support for multi-part payments (MPP).
We can now send and receive multi-part payments, with a somewhat basic splitting algorithm that will be refined based on real-world usage.
Compatibility with other implementations hasn't been tested yet as they don't have a branch ready.
This compatibility testing may reveal small details that need to be changed and may invalidate pending multi-part invoices.
2019-11-12 16:06:41 +01:00
Pierre-Marie Padiou
9d95b55e97
Minor: fixed format in exception message (#1199) 2019-11-05 16:39:38 +01:00
Pierre-Marie Padiou
5a6b791203
More metrics (#1196)
* added metrics on bitcoin rpc

* added metrics on lightning message codec
2019-11-04 16:19:15 +01:00
araspitzu
e831c2a4ba
Add 'getnewaddress' API (#1190)
* Add 'getdnewaddress' API

* Restrict newaddress API usage to bitcoin core wallet
2019-11-04 14:54:02 +01:00
Bastien Teinturier
fbdb369e82
Fix codecov unknown tag (#1181) 2019-10-23 10:04:13 +02:00
Bastien Teinturier
b3543a4841
Refactor Upstream/Origin (#1176)
This is a small refactoring of how we handle upstream/origin HTLC.
2019-10-22 14:16:50 +02:00
Bastien Teinturier
f48b423a93
Fix ignored duplicate amounts in htlc-value-in-flight (#1180)
Credits to @btcontract for finding the bug
2019-10-22 11:49:27 +02:00
Fabrice Drouin
b9252cdf87
Release 0.3.2 (#1177)
Set version to 0.3.3-SNAPSHOT
2019-10-15 19:26:42 +02:00
Fabrice Drouin
5ff8828d07
Check configuration for obsolete keys in startup (#1175)
* Check configuration for obsolete keys on startup

We now check the loaded configuration for obsolete keys (that have been moved to a new section) and throw an error if any are found, which will prevent eclair from starting.
2019-10-15 16:37:19 +02:00
Pierre-Marie Padiou
bdb093a7a8
Update assisted channels (#1172)
When sending a payment, if a node on the route answers with an
`UPDATE`-type error, we update our routing table with the new
`channel_update` that is attached to the error message.

But additional routing info (provided by receiver in payment requests)
take precedence over whatever data is in the routing table. If one of
the nodes contained in the routing info replies with a newer
`channel_update`, we will indeed update our routing table, before
retrying, but then we will override it by the (untouched) assisted routes.

We know also update the assisted routes.
2019-10-14 18:09:03 +02:00
Fabrice Drouin
064f780680
Sqlite: use TEXT type for strings (#1159)
* SqliteNetworkDb: add failing test

If a txid starts with 0, it will be stored as NUMERIC, leading 0s will be stripped, and we won't be able to read it back as a ByteVector32

* Sqlite: use TEXT type for strings

* Check that creating a table that already exists with different column types is a NOOP
2019-10-14 11:31:20 +02:00
Fabrice Drouin
a6b33cb5b7
Use guava to compute CRC32C checksums (#1166)
CRC32C is not available in JDK 7 which we target on Android.
2019-10-07 18:25:10 +02:00
Fabrice Drouin
4300e7b651
Activate extended channel range queries (#1165)
* Activate extended channel range queries

By default we now set the `gossip_queries_ex` feature bit.
We also change how we compare feature bits, and will use channel queries (or extended queries) only if the corresponding feature bit is set in both local and remote init messages.
2019-10-07 17:08:22 +02:00
Bastien Teinturier
c1e0adcd98
Add execution time limit (#1161) 2019-10-03 17:05:12 +02:00
Pierre-Marie Padiou
80a27cc566
Update netty dependency to 4.1.32 (#1160)
Also:
* explicitely set endpoint identification algorithm in strict mode
* force TLS protocols 1.2/1.3 in strict mode

Co-Authored-By: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2019-10-03 15:01:10 +02:00
Fabrice Drouin
c968d063f6
Upgrade new unit tests to bitcoin 0.18.1 API (#1157)
We had 2 open PRs, one that added new tests using the 0.API, one that switched to 0.18.1, when they were merged the new tests failed since they had not been upgraded....
2019-10-03 10:42:54 +02:00
araspitzu
37cc5262b0
Use bitcoin 0.18.1 in the test (#1148)
* Use bitcoin 0.18.1 during test
2019-10-03 09:23:31 +02:00
Fabrice Drouin
320af437d7
Extend funding key path to 256 bits (#1154)
Our random funding key path is now 8 * 32 bits plus a 1' (funder) or 0' (fundee).
Channel key paths are computed from the sha256 of the funding public key (we take all 256 bits).
2019-10-02 16:43:58 +02:00
Fabrice Drouin
332216b6ec
Electrum: improve coin selection (fixes #1146) (#1149)
* Electrum wallet: improve coin selection (fixes #1146)

Our previous coin selection would sometimes fail when there was one wallet utxo and and low 
 feerate, because our first pass used a fee estimate that was too high and could sometimes not be met.
2019-10-02 11:20:00 +02:00
Bastien Teinturier
7458383ecd
HTTP API: add type hints for payment status (#1150)
Cleans up the JSON payment status (easier to interpret for callers).
2019-10-01 10:16:29 +02:00
Bastien Teinturier
24d11884fa
Commitments: take HTLC fee into account (#1152)
Our balance computation was slightly incorrect. If you want to know how much you can send (or receive), you need to take into account the fact that you'll add a new HTLC which adds weight to the commit tx (and thus adds fees).
2019-09-30 16:43:07 +02:00
Fabrice Drouin
e11e3e0f55
Fix and expand channel keypath (#1147)
* Fix funding pubkey to channel key path computation

Channel key path is generated from 8 bytes computed from our funding pubkey, but we extracted 4 uint32 values instead of 2 (last 2 were always 0). We now use 128 bits to derive channel key paths.

* Add a channel key path compatibility test

This test will fail if we change the way we compute channel key paths, which would break existing channels.
2019-09-25 14:29:48 +02:00
Anton Kumaigorodski
88880c3077 Check if remote funder can handle an updated commit fee when sending HTLC (#1084)
If the sender of an htlc isn't the funder, then both sides will have to afford the payment:
- the sender needs to be able to afford the htlc amount
- the funder needs to be able to afford the greater commit tx fee incurred by the additional htlc output.

Fixes #1081.

Co-Authored-By: Pierre-Marie Padiou <pm47@users.noreply.github.com>
2019-09-23 18:21:55 +02:00
Fabrice Drouin
ea773425c2
Derive channel keys from the channel funding pubkey (#1097)
* Derive channel keys from funding pubkey

We now generate a random funding key for each new channel, and use its public key to deterministically derive all channel keys and secrets. This will let us easily recover funds using DLP even if we've lost everything but our seed: we just need to connect to the node we had a channel with, ask them to publish their commit tx, and once we see it on the blockchain we can extract our funding pubkey, recompute channel keys and spend our output.

* Add rationale for new channel derivation scheme

* Add a "funding pubkey path" option to the channel version field

This option is checked when we need to compute channel keys. For old channels it won't be set, and we always set it for new ones.

* ChannelVersion: make sure that all bits are set to 0 for legacy channels

* ChannelVersion: USE_PUBKEY_KEYPATH is set by default

* Move recovery test out of OfflineStateSpec
2019-09-23 11:44:58 +02:00
araspitzu
abf3907d4d
Handle fees increases when channel is OFFLINE (#1080)
* Handle feerate changes when OFFLINE, SYNCING

* Add 'close-on-offline-feerate-mismatch' configuration to avoid closing offline channel when the feerate mismatch if over the threshold.
2019-09-20 17:48:02 +02:00
araspitzu
b5461b80c8
Improve error handling when we couldn't find all the channels for a supplied route in /sendtoroute API (#1142)
* Improve error handling when we couldn't find all the channels for a supplied route in /sendtoroute
2019-09-20 16:09:52 +02:00
Bastien Teinturier
401c996a69
Payment lifecycle refactoring (#1130)
* Unify payment events (no more duplication between payment types and events)
* Factorize DB and eventStream interactions: this paves the way for sub-payments that shouldn't be stored in the DB nor emit events.
* Add more fields to the payments DB:
  * bolt 11 invoice for sent payment
  * external id (for app developers)
  * parent id (AMP)
  * target node id
  * fees
  * route (if success)
  * failures (if failed)
* Re-work the PaymentsDb interface
* Clarify use of seconds / milliseconds in DB interfaces -> milliseconds everywhere
* Run SQL migrations inside transactions
2019-09-20 14:29:36 +02:00
araspitzu
e0461ae096
Update string to match on bitcoind while it's indexing (#1138)
* Update string to match on bitcoind while it's indexing, doubleSpent() call

* Check for bitcoind's getrawtransaction availablilty during startup
2019-09-18 15:29:20 +02:00
Bastien Teinturier
bac0829068
Sphinx: accept invalid downstream errors (#1137)
When a downstream node sends us an onion error with an invalid length, we must forward the failure.
The recipient won't be able to extract the error but at least it knows the payment failed.
2019-09-18 09:38:59 +02:00
Pierre-Marie Padiou
8ee53bc97d
Drop support for Java 8 (#1135)
We already have Java 7 (for Android) and Java 11. Supporting Java 8
would require crossbuilding, which we are not doing (two recent PRs
broke the build on Java 8).
2019-09-16 11:04:10 +02:00
araspitzu
2277b88ddc
Add codecov integration to semaphore CI (#1134)
* Add codecov integration to semaphore CI

* Remove codecov integration from travis CI
2019-09-12 17:18:22 +02:00
Pierre-Marie Padiou
8da509b5cd
Make tests run in parallel (#1112)
There are two level of parallelization:
- between test suites (a suite = a test file)
- within a suite (depends on tests suites, some rely on sequential execution of tests, some don't)
2019-09-11 13:40:46 +02:00
Pierre-Marie Padiou
2fbf46a344
Removed Globals class (#1127)
This is a prerequisite to parallelization of tests.
2019-09-11 10:55:43 +02:00
Pierre-Marie Padiou
26e4432c51
Don't hardcode the channel version (#1129)
Instead of hardcoding the channel version when we instantiate the
`Commitments` object, we rather define it when the channel is
instantiated. This is saner and prepares future usage.
2019-09-06 17:15:51 +02:00
Pierre-Marie Padiou
0e704549d7
Check funds in millisatoshi when sending/receiving an HTLC (#1128)
Instead of satoshi, which could introduce rounding errors.

Also, we check first the balance before the max-inflight amount, because
it makes more sense in terms of error management.

Co-Authored-By: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2019-09-06 16:38:37 +02:00
Pierre-Marie Padiou
ff0b4c81e6
Add monitoring with Kamon (disabled by default) (#1126)
For now:
- we only track some tasks (especially in the router, but not even
`node_announcement` and `channel_update`
- all db calls are monitored
- kamon is disabled by default
2019-09-06 14:37:26 +02:00
Bastien Teinturier
7a50610e48
Router computes network stats (#1116)
* Add comments and fix warnings in graph processing
* Add small feature to set the htlcMaximumMsat for routing hints (otherwise the graph processing algorithm used a minimum value which slightly reduced the benefits of those routing hints)
* Add the computation of network statistics to the router: this will be useful for multi-part payments to decide what thresholds should be used to split a payment
2019-09-06 09:39:23 +00:00