1
0
mirror of https://github.com/ACINQ/eclair.git synced 2024-11-20 10:39:19 +01:00
Commit Graph

1591 Commits

Author SHA1 Message Date
Pierre-Marie Padiou
be7429fad4
added blank lines to minimize conflicts (#1236)
See
https://about.gitlab.com/blog/2015/02/10/gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders/
2019-12-06 14:23:56 +01:00
Pierre-Marie Padiou
38a3f07f83
Set akka.loglevel to DEBUG (#1235)
This allows us to only use logback.xml to control the log level.

From akka docs [1]:
> If you set the loglevel to a higher level than DEBUG, any DEBUG events
will be filtered out already at the source and will never reach the
logging backend, regardless of how the backend is configured.
> You can enable DEBUG level for akka.loglevel and control the actual
level in the SLF4J backend without any significant overhead, also for
production.

[1] https://doc.akka.io/docs/akka/current/logging.html
2019-12-06 13:57:45 +01:00
Dominique
f5a626686f
Fix outgoing payments order in payments overview (#1232)
Using the `max()` aggregating function on outgoing payments' 
timestamps, we can ensure that the non-aggregated columns 
for the outgoing payments contain the most recent/pertinent data.
2019-12-04 17:29:55 +01:00
Pierre-Marie Padiou
167d65bc36
Added a 'category' in logs (#1227)
Also added paymentHash to MDC context
2019-12-04 14:17:56 +01:00
Bastien Teinturier
12f95ca8f5
Handle chain re-org in balance computation (#1228)
If a chain re-org happens and a new ShortChannelId is assigned,
the `Relayer` kept both entries (new and old).

This resulted in an incorrect balance because we effectively counted this channel twice.
2019-12-02 16:15:56 +01:00
Bastien Teinturier
215be94640
Fix onion codec test (#1229)
While #1222 was being reviewed, a new unit test was added to OnionCodecsSpec.
It didn't cause any file conflict so Github didn't warn about merging #1222.
However this test needed to be updated to the new truncated int format.
2019-12-02 11:40:22 +01:00
Dominique
fd5d9aec0a
High level payments overview method (#1225)
Add a method to fetch a high level/high performance overview of the 
payments from the payment database.
2019-12-02 11:35:34 +01:00
Bastien Teinturier
20380b2991
Rework truncated integers codecs (#1212)
The spec defines tu64 (and friends) without the length prefix.
Multi-part uses a tu64 without a length prefix inside the PaymentData record.

Our previous implementation only supported using tu64 alone in a TLV record.
We make this more flexible by separating the length encoding.
2019-12-02 11:06:47 +01:00
Pierre-Marie Padiou
b5f993c1ab
Extended doHandle to other messages in MultiPartHandler (#1226) 2019-11-29 17:03:26 +01:00
Bastien Teinturier
d1342eb072
Avoid incoherent payment request features. (#1222)
MPP implies payment secret.
Avoid raising exceptions in PaymentInitiator: validate invoice instead of using a require.
This way senders always get a response.
2019-11-29 10:43:23 +01:00
Bastien Teinturier
631336ed84
Fix MPP post-restart HTLC clean-up (#1224)
We previously had some logic where we would fail incoming HTLCs
for which we were the final recipient when a channel would come online.

That made sense when we didn't have MPP, but with MPP we cannot do that.
There is a risk that we would be failing HTLCs that are considered received by the MPP FSM.
Instead we need to use the CommandBuffer when we are the final recipient.
This way pending commands cannot be lost and HTLCs are cleaned-up on restart.
2019-11-28 18:06:29 +01:00
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