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

119 Commits

Author SHA1 Message Date
pm47
74faad53e8 back to SNAPSHOT 2017-12-23 19:26:54 +01:00
pm47
8edb2a478c set version to 0.2-alpha8 2017-12-23 18:37:00 +01:00
Pierre-Marie Padiou
a3bdf52a2f
Improve logs (#320)
* always print `shortChannelId` in hex

* fixed logs in `ThrottleForwarder`

* logs the `paymentHash` when relaying an htlc

* don't print all channel data when restoring a channel

* added logs to relayer

* reduced log level in Peer

* cleaned up switchboard logs

* fixed `id`/`channelId` mixup in relayer logs

* slight changes in log levels

* do not log as warning when tx generation is simply skipped

* streamlined relayer logs

* improved router logs

* don't display errors when witness can't be parsed

* don't log connection errors as warnings

* reduce amount of logs in case of local known error

* removed reconnection message to deadletter

* try a cleaner way of displaying channel errors

* put some reconnection-related logs from info to debug

* peer: ignore `Rebroadcast` messages in `INITIALIZING`

* less verbose exception logging in channel

* display friendlier close type

* reduced default log level to INFO
2017-12-22 23:32:34 +01:00
Pierre-Marie Padiou
fe5416d2df Reworked peer management (#316)
* reworked peer management

- connection and channel opening are now separated, simplified
  `switchboard`

- use a single authenticator for both incoming and outgoing connections

- `peers` api call now returns current state and channel count

* fixed last commit

* fixed last merge

* added inetsocketaddress serializer
2017-12-22 23:06:35 +01:00
Pierre-Marie Padiou
c868d0bdc8 Pre-validation announcements pruning (#323)
* forget about channels older than 3 days and prune every minute

* Revert "forget about channels older than 3 days and prune every minute"

This reverts commit 347e01b5c18208f162b31663d383d5b7de36eea7.

* added pruning pre-validation

* don't pre-prune channels that don't have channel_update, but don't validate them either

* removed println

* removed useless handler

* cleanup announcement db at startup

* simplified pruning logic and re-enabled tests

* fix `getStaleChannels`

* fixed integration tests
2017-12-22 22:18:17 +01:00
Fabrice Drouin
95bd4a12cb
Electrum Wallet: Send ready notification when reconnected (#324)
* Electrum: Add unix timestamp to WalletReady notification

* Electrum: don't send WalletReady when we get disconnected

* Electrum: check that WalletReady notification is sent on reconnection

* Electrum: don't same the same ready notification more than once
We don't use state transitions to send notifications anymore

* Electrum client: use tcp keep-alive

* factorized socket options
2017-12-22 21:08:30 +01:00
Dominique
059f211916 Improve JSON RPC API error handling (#322)
Service pattern matching code visually separates each method and
params to improve the code readability and maintenance. Route completion
is handle on a case by case basis, for each call. This enables better error
management and useful feedback to the caller.

Added custom rejections to handle cases where the given rpc method or
params are not found or not correct.

HTTP code should now be consistent with the error returned.
2017-12-22 21:01:40 +01:00
Pierre-Marie Padiou
6a5814d4fe
Faster search of spending tx when using bitcoind (#319) 2017-12-22 20:39:12 +01:00
Fabrice Drouin
3051cc5602 Electrum: Use actual tx weight when estimating fees (#321)
* Core fee estimator: return result in satoshi per byte
It was still in satoshi per kb

* Electrum: use actual tx weight to estimate fees when funding a tx

This fixes #303
2017-12-22 20:15:46 +01:00
Dominique
dda2d94702 Add an API method to check if a payment request has been paid (#312)
* Received payments are stored in a DB; added api calls for basic select

When the local payment handler receives a valid htlc, a Payment { payment_hash,
amount_msat, timestamp } is added in a sqlite DB. This enables the node
operator to check if a payment has been received.

Two methods are added to the JSON RPC API: list the payments and find a payment
by its payment hash.

* Test LocalPaymentHandler checking that received payment is saved in DB

* Payment API call accepts only valid paymentHash and paymentRequest arg

* API should expose only a `checkpayment` method

Interaction with payment DB from API goes through the payment handler

Also removed exception/rejection handlers to stay consistent with the api

* Updated README with checkpayment API method; moved Payment to PaymentDB
2017-12-22 18:51:48 +01:00
Pierre-Marie Padiou
f454c5e004
Rework channel_update management (#284)
The previous assumption that a `channel_update` only exists when we have a
related `channel_announcement` does not always hold true. There are two
special cases:
- we want the `router` to know of our outgoing `channel_update` as soon as
  a channel reaches `NORMAL` state, so that we can immediately send
  payments
- we need to know remote's `channel_update` even for private (unannounced)
  channels, in order to be able to receive funds (we will put those as
  hints in the payment request using the `r` field); we also need to send
  out our `channel_update` for private channels for the same reason

In order to do that, two fields were added to the `router`'s state:
- `privateChannels`: similar to `channels`, but holds a fake `channel_announcement`s for local channels that are private or are public but not yet announced
- `privateUpdates`: similar to `updates`, but holds `channel_update`s related to local channels that are private, or are public but not yet announced.

For local public channels, we will have `channel_update` both in `updates` and in `privateUpdates`, but the latter has the precedence when computing routes.

Also, in the `channel` we now handle the sending of new `channel_update` during the transitions, as opposed to in the state handlers.

Note that this changes the serialization format, making this upgrade not backward-compatible.

This fixes #244.
2017-12-22 18:28:40 +01:00
Fabrice Drouin
88602e48b7 Upgrade to bitcoin-lib 0.9.14 (#304)
* `Transaction.toString()` now returns the tx in hex format

* removed useless `Transaction.write(_)`
2017-12-20 19:22:57 +01:00
Anton Kumaigorodski
63b772cf2a Assisted route handling (#279) 2017-12-20 19:14:24 +01:00
Pierre-Marie Padiou
7d357662f3
Use the correct toSelfDelay when claiming funds (#296)
In commit 2e2a47e5fd we inverted the
`local`/`remote` `toSelfDelay` when building the commitment tx, but forgot
to do the same when claiming the outputs.

Updated integration tests to reproduce the issue.

This fixes #290.
2017-12-20 18:35:30 +01:00
Pierre-Marie Padiou
0b24d41982
Added a custom json serializer for OutPoint (#291)
It is required to serialize ` Map[OutPoint, BinaryData]`.
2017-12-18 20:44:48 +01:00
Pierre-Marie Padiou
84ee39d769
Put Sphinx.parse* function in Try blocks (#283)
Also handle as best as possible the case where we receive an unparseable
failure.

This fixes #280.
2017-12-15 19:27:56 +01:00
Pierre-Marie Padiou
28037ea8fe
Added more methods in API (#281)
* can use `channelId` or `shortChannelId` in API for methods `channel` and `close`

* can now list channels to a particular `nodeId` in API
2017-12-15 15:05:22 +01:00
pm47
f1afe3f4b7 back to SNAPSHOT 2017-12-14 18:22:39 +01:00
pm47
1155788b5e set version to 0.2-alpha7 2017-12-14 12:28:25 +01:00
Fabrice Drouin
6957de31b5 Implement change in BOLT11 r field (#277)
* update link to bolt11 spec

* BOLT11: implement change in r field
see https://github.com/lightningnetwork/lightning-rfc/pull/317
2017-12-13 15:38:02 +01:00
Pierre-Marie Padiou
c43c009f94
Catch channel errors in relayer (#276)
The `relayer` was missing failures sent by the `channel`, which led to `htlc` lingering without being failed. Sender would see payments stuck in `PENDING` state until they eventually timeout and cause the channel to be unilaterally closed.

This is a regression caused by f47ea72369.

This fixes #264.
2017-12-12 16:12:05 +01:00
Pierre-Marie Padiou
5916dd6a05
Handle corner case when relaying to an unknown channel (#275)
The `relayer` wasn't correctly handling failures from the `register`, which led to `htlc` lingering without being failed. Sender would see payments stuck in `PENDING` state until they eventually timeout and cause the channel to be unilaterally closed.

This is a regression caused by f47ea72369.
2017-12-12 12:30:55 +01:00
Pierre-Marie Padiou
4acfed364e Reduce default fees (#267)
* set more reasonable defaults for routing fees

* removed useless pluginManagement entry
2017-12-08 16:24:43 +01:00
pm47
44f7bd7145 bcak to SNAPSHOT 2017-12-06 19:19:30 +01:00
pm47
3d240f5761 set version 0.2-alpha6 2017-12-06 18:34:40 +01:00
Dominique
46b2af1c26
Removed 'hsmiths' from electrum testnet servers (#257) 2017-12-06 15:46:59 +01:00
Pierre-Marie Padiou
ee7038c7a6
Rework mutual closing (#247)
* include raw tx when sig check fails

See BOLT 1 recommendation:

"when failure was caused by an invalid signature check:

    SHOULD include the raw, hex-encoded transaction in reply to a
    funding_created, funding_signed, closing_signed, or commitment_signed
    message."

 Also, removed redundant signature check in state
 `WAIT_FOR_FUNDING_SIGNED`.

* enforce closing fee <= commitment fee

In accordance to BOLT 2.

Note that it is safe to consider feerates instead of fees, because
weight(closingTx) < weight(commitTx).

This fixes #243.

* use channel logger in Helpers.scala and Commitment.scala

* handle multiple closing txes

Nothing prevents the counterparty to publish any or several of the closing txes
before the negotiation is finished, we need to handle this case.

This fixes #245.

* added msg+state when chanel failure occurs

* proper handling of invalid closing sig

* removed hardcoded error messages in channel

* return an `error` to sync attemps when in CLOSING

* peer now return an error for unknown channels

* added fee negotiation details in logs

* properly display errors, reject closing fee to high
2017-12-06 13:53:09 +01:00
Pierre-Marie Padiou
f47ea72369
Correctly translates and relay channels errors (#230)
* return `UnknownNextPeer` when next channel is unknown

* correctly relay channels errors (fixes #227)

* keeping `channel_update` in DATA_NORMAL

* moved class `ForwardLocalFail`->`AddHtlcFailed`

* made `AddHtlcFailed` a `ChannelException`

* unannounced channels now return `channel_update` in errors

* use remote `htlc_minimum_msat` in `channel_update`

also set default `htlc-minimum-msat`=`10000`

This fixes #248.

* Announce short channel id when funding depth ok

* added logs to router

* channel do not send `node_announcement` anymore
2017-12-06 13:32:06 +01:00
Nicolas Dorier
0794fb8d5a Docker support with repeatable build (#255)
Dependency to `git` has been removed, we now use `notag` when building without
a git directory.

In order to reliably fetch all dependencies, we do a first blank build
(with no source files), then we copy the sources and do a real commit.

This is a simpler and more robust approach.

Also, fixed the .dockerignore to filter out IDE files.
2017-12-05 17:29:47 +01:00
Pierre-Marie Padiou
5f6987bc1a Add test on signing a single Updatefee with no other updates (#254)
* Added a test on updatefee with no changes

* Fixed test logs: Akka slf4j logger was unset by 71f39a033b

* Closes #242 (can't reproduce)
2017-12-04 18:41:39 +01:00
Dominique
82c5b676e6
Unified cltv expiry type to Long (#253) 2017-12-04 17:37:11 +01:00
Dominique
71f39a033b Moved akka conf to eclair-node application.conf (#252)
Overriding configuration of dependencies must be done at the application level.
2017-12-04 13:31:05 +01:00
pm47
1c7f66bf5b updated plugin versions 2017-12-03 18:05:47 +01:00
Fabrice Drouin
84a9d73413 Disable dust limit checks on regtest and testnet (#249)
* disable dust limit checks on regtest and testnet

* fundee should also check dust limit they received open_channel (see #236)

* channel state tests: accept optional node parameters
use defaults if not provided
2017-12-01 11:18:16 +01:00
Dominique
44e7c3ba31 Handling optional amount in a Payment Request (#241)
* Enable generation of a payment request without amount

The amount field in a `PaymentRequest` was already optional but eclair
did not permit the generation of such a request.

Added a new `receive` service with no required amount field.

In the GUI, the parsing of the amount field and its conversion to
`MilliSatoshi` are reworked to better handle decimals.

* (gui) Amount's can be overriden when sending a payment request

The amount of a payment request can be changed and it is up to the
receiving node to accept or deny the payment according to its
implementation.

This also enables the user to pay through the GUI a payment request
where the amount has not been set, such as a donation. The amount is still
required!

The description field has also been added in the GUI. It is empty if the
description has not been set.

* (gui) Properly parse amounts from open channel form

* (gui) added optional `lightning:` scheme to payment request
2017-11-30 15:55:29 +01:00
Pierre-Marie Padiou
ffc4172e70
Added more checks on open/accept messages (#240)
We check that channel parameters are compliant with [BOLT 2](https://github.com/lightningnetwork/lightning-rfc/blob/master/02-peer-protocol.md) (this fixes #236).

We make sure that the counterparty chooses a decent `dust_limit`
because we want them to be able to publish their commitment, e.g. in a
data loss scenario. We also make sure that our configurable `dust_limit` isn't too low (this
fixes #234).

Also fixed our min `dust_limit` (542->546).

GUI:
* Using funding constants from `Channel`
* Also fixed an issue here `push` amount was compared to the max funding amount
  instead of the actual `funding` amount
2017-11-29 18:18:09 +01:00
Pierre-Marie Padiou
2ef479d38c
Fix concurrent spends with Electrum (#233)
By keeping temporary spending items in history
2017-11-29 17:40:07 +01:00
pm47
2d5d68bf3f a channel being restored is disabled 2017-11-28 13:34:35 +01:00
Pierre-Marie Padiou
ba25821e85 eclair-cli: added payreq desc, fixed method names (#238) 2017-11-27 20:46:17 +01:00
Fabrice Drouin
86133db5f7 Check that all UTXOS are p2sh on testnet (#228)
To avoid malleability issues, ask users to only have p2sh-of-p2wkh outputs.
on testnet, on startup we check that all UTXOs are p2sh (we cannot check that the
p2sh script is a p2wpkh script). It is not needed on regtest since there is no
chance that wallet tx will be malleated.
2017-11-27 18:30:59 +01:00
Pierre-Marie Padiou
40b18aed8b Added bitgo fee provider (#237)
* added bitgo fee provider and set it as default, keeping `earn.com` as fallback.
2017-11-27 18:17:38 +01:00
Pierre-Marie Padiou
8b151eb5c0
Removed bitcoin-core parent-tx hack (#231)
This was a workaround because bitcoin-core could produce malleable funding
transactions.

We now:
1) assume that all existing funds in bitcoin core are in segwit P2S addresses
2) manually create segwit change addresses when we create new transactions

Also disabled unused/unreliable bitcoinj tests
2017-11-27 15:05:25 +01:00
Pierre-Marie Padiou
6304041d77
Use tx-output pubkeyscript as hint for electrum watcher (#232)
* use tx-output pubkeyscript as hint for electrum watcher to detect tx confirmed

* support adding a WatchConfirmed to a tx that has no output
2017-11-27 12:28:44 +01:00
Fabrice Drouin
bf0423c020 Ignore unknown tags when parsing a payment request
This fixes #206.
2017-11-24 11:30:36 +01:00
Fabrice Drouin
4a4640bc86 Bitcoin rpc client: queue requests locally (#223)
use a local queue for outgoing rpc requests. this should be a better solution than
inceasing the number of concurrent requests.
see https://doc.akka.io/docs/akka-http/current/scala/http/client-side/host-level.html#using-the-host-level-api-with-a-queue
for more information.
2017-11-22 14:48:23 +01:00
Pierre-Marie Padiou
bfa3e1c2ca Reformat + optimized imports (#222)
* Reformat + optimized imports

* Fixed unwanted modifications
2017-11-21 20:08:15 +01:00
Pierre-Marie Padiou
df67157119 fix doc for api call connect/open (#220)
Fixes #215.
2017-11-21 19:11:07 +01:00
Pierre-Marie Padiou
875dc04d39
Support for electrumx API (#208)
This is a rework of #184 with numerous improvements and bugfixes.

* re-enabled `WatchSpentBasic`

* fixed several issues in watcher

* fixed pattern matching for INPUT_RECONNECTED event in CLOSING

* reduced logback_colors log level

* connect txes even if they arrive out of order

* wallet: send confidence event as soon as a tx is confirmed

* fixed 5985148f2f and improve events

* added `NewWalletReceiveAddress` event

* cleaned up electrum testnet seeds

* added a test on dumping routing state

* removed WAIT_FOR_FUNDING_PUBLISHED state and clarified funding tx publish assumptions

* wallet: use BIP49 derivation and 24 words mnemonic codes
we use segwit with p2sh-of-p2wkh so we should use BIP49 derivation
instead of BIP44 (same path with m/49'/... instead of m/44'/...)

* added a rollback function to `EclairWallet`

This rollback is called whenever we know we won't publish the funding tx,
so that we tell the wallet to release locks on utxos.

* fundee now checks feerates at `open_channel` reception

* proper handling of electrum connection/disconnection

* moved bitcoinj test to its own package

* make electrum wallet advertise address at startup

* set version to 0.2-SNAPSHOT
2017-11-21 18:12:45 +01:00
Pierre-Marie Padiou
68cbcf74e3
Prune stale network announcements (#219)
See https://github.com/lightningnetwork/lightning-rfc/blob/master/07-routing-gossip.md#recommendation-on-pruning-stale-entries.

* send a new `channel_update` every 24h as keepalive

* use case object instead of symbol for ticks

* minor improvements in router init

* prune stale channels

Note that we don't want to prune brand new channels for which we didn't
yet receive a channel update, so we consider stale a channel that:
(1) is older than 2 weeks (2*7*144 = 2016 blocks)
AND
(2) didn't have an update during the last 2 weeks.

Pruning is triggered every day.

Also renamed event `BITCOIN_FUNDING_OTHER_CHANNEL_SPENT` to
`BITCOIN_FUNDING_EXTERNAL_CHANNEL_SPENT`.

* filter out duplicate announcements before checking sig

* changed routing table dump parameters
2017-11-21 16:47:02 +01:00
Pierre-Marie Padiou
1ce7b8791c
Improved fees management (#216)
* main feerate source is now earn.com (21.co) instead of bitpay insight
* if main feerate source is unavailable, we now fallback to default values
* we retrieve feerates for a set of block delays instead of just one
* we now use different block delays depending on transactions:
  - `block_delay`=`1` for txes that compete with others (eg: commitment
    tx, htlc tx, penalty tx)
  - `block_delay`=`6` for other txes (eg: funding tx, closing tx, delayed
    output tx)
2017-11-21 15:59:01 +01:00