1
0
Fork 0
mirror of https://github.com/ACINQ/eclair.git synced 2025-03-13 19:37:35 +01:00
Commit graph

343 commits

Author SHA1 Message Date
Pierre-Marie Padiou
9cb14ee08c
Add logback config for eclair-node tests (#1377)
Otherwise we use the default logback.xml file which writes to a rolling file in the user directory.
2020-04-15 11:53:33 +02:00
Pierre-Marie Padiou
4875d4c879
fixup! Use CLTV as tie-breaker for offered htlc output sorting (#790) (#1360)
* removed the `Direction` class

* improved the non-reg test for htlcs

- check actual content instead of only success and roundtrip
- use randomized data for all fields instead of all-zero
- check the remaining data, not only the decoded value (codecs are
chained so a regression here will cause the next codec to fail)

Co-Authored-By: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2020-03-31 18:31:47 +02:00
araspitzu
65371cd03b
Add more information to GetInfoResponse (#1344)
Add version, color and features
2020-03-10 14:17:09 +01:00
Bastien Teinturier
bb930cd8b0
Channel sends typed responses (#1321)
Instead of sending strings, channel now sends typed responses.
This is more future-proof when we want to add data to those responses.
2020-02-25 10:18:51 +01:00
Bastien Teinturier
48ad9b30e6
Trampoline/MPP API changes (#1297)
Let a sender manually split a payment and specify a trampoline route.

Fix two flaky tests where the order of payment parts could be
different, resulting in a failed equality test.

If we're relaying multiple HTLCs for the same payment_hash,
we need to list all of those.
The previous code only handled that when Trampoline was used.
2020-01-31 11:52:15 +01:00
Bastien Teinturier
453a7c66b1
Trampoline/MPP DB changes (#1287)
With MPP and Trampoline (and particularly the combination of the two),
we need to keep track of multiple amounts, recipients and fees.
There's a trampoline fee and a fee to reach the first trampoline node.
The trampoline nodes must appear in the route, but not as payment recipients.

Adding new fields to payment events and DB structs lets us distinguish those.

We also relax the spec requirement about feature graph dependencies.
The requirement to include `var_onion_optin` in invoice feature bits
was added after the first Phoenix release.
Phoenix users will thus have non spec-compliant invoices in their
payment history.
We accept invoices that don't set this field; this is a harmless
spec violation (as long as we set it in new invoices).
2020-01-29 14:21:41 +01:00
Bastien Teinturier
611f0cfebe
Relay Trampoline payments (#1220)
Start relaying trampoline payments with multi-part aggregation (disabled by default,
must be enabled with config).
Recovery after a restart is correctly handled, even if payments were being forwarded.
No DB schema update in this commit.

The trampoline UX will be somewhat bad because many improvements/polish are missing.
Some shortcuts were taken, a few hacks here and there need to be fixed, but nothing too scary.
Those improvements will be done in separate commits before the next release.
2019-12-18 14:34:52 +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
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
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
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
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
Bastien Teinturier
e73e672fbf
Reject expired invoices before payment flow starts (#1117) 2019-09-04 12:22:21 +00:00
araspitzu
74af0304bd
Move http APIs to subproject eclair-node (#1102)
* Move Service and FormParamExtractor to eclair-node

* Move dependency akka-http-json4s into eclair-node

* Move json serializers to eclair-node
2019-08-30 09:44:24 +02:00
Pierre-Marie Padiou
c94cb13dd3 Add an experimental SPV mode with bitcoinj (#152) 2017-09-07 17:20:36 +02:00
Pierre-Marie Padiou
d86dd72d78 Separate code into modules (#91) (closes #88) 2017-06-06 18:37:34 +02:00
Pierre-Marie Padiou
7f747d55fd Added support for channel_disabled flag and updated failure codes (#90)
* added support for 'disable' flag in announcements (see lightningnetwork/lightning-rfc/pull/143)
* now responding TemporaryChannelFailure errors to CMD_ADD_HTLC in OFFLINE
* added helper methods for interpreting ChannelAnnouncement flags
* (gui) added image depicting flags of announcement in channels table
* implemented all failures as per lightningnetwork/lightning-rfc/pull/167
* router: don't use channels that have been announced as disabled
2017-06-02 20:14:21 +02:00
pm47
6297054a79 added validation checks on payment hash 2017-05-16 14:57:52 +02:00
pm47
0a597adc5a peer now keeps track of both temporary and final channel ids 2017-05-12 13:27:20 +02:00
Fabrice Drouin
14cdf8f345 BOLT4: update Sphinx to match the latest specs (#76)
* Sphinx: implement BOLT PR 145
see https://github.com/lightningnetwork/lightning-rfc/pull/145
* Sphinx: use simplified onion proposed in PR145
address and hop-payload fields have fused, and we are now routing based on channel short ids
* Updated relayer to take advantage of shortChannelId
* Sphinx: use more meaningful class names
* BOLT 4: use 32 bytes MAC in reply error packet
instead of 20
2017-04-24 15:57:13 +02:00
Fabrice Drouin
50429da0ed Wire: add chainHash field to open message (#69)
* wire: add chainHash field to open message (see https://github.com/lightningnetwork/lightning-rfc/pull/135)
* split validateParams() into "funder" and "fundee" versions (fundee also needs to check the chain hash funder sent in their open message)
2017-04-20 17:27:53 +02:00
dpad85
fe22572976 New PaymentRequest object + HTLC verification (#72)
* Added a PaymentRequest object
* A `PaymentRequest` can be serialized/deserialized with `write`/`read`
  static functions in companion
* Amount validation is handled in constructor
* `ReceivePayment` message in payment handler generates a `PaymentRequest`
* Updated tests
* HTLC succeeds if amount is equal or greater than requested amount
* If the amount paid is more than twice the amount expected, the HTLC fails
* (gui) display payment failed cause in notification
* Improved payment request validation messages
2017-04-20 17:26:30 +02:00
Fabrice Drouin
75e4923002 BOLT 4: use proper cipher stream for reply messages (#75)
* more logs on connection establishment, added initialize() to FSMs
2017-04-20 17:08:23 +02:00
Pierre-Marie Padiou
da78ae5356 Better router/channel exception handling (#71)
* added specific channel exceptions
* added specific router exceptions
* retry payment when an error occurs at the first channel
2017-04-20 11:47:38 +02:00
Anton Kumaigorodski
2eded652e5 Validity of remote final script is not checked when a Shutdown was already sent (#74)
* Superfluous mapping as we're only interested in collection sizes
* Add a shutdown with invalid final script test
2017-04-20 11:12:12 +02:00
Fabrice Drouin
378a332954 LocalParams should not include maxFeerateMismatch (#70)
as it is not a direct protocol parameter
2017-04-12 15:17:01 +02:00
Pierre-Marie Padiou
102f76e401 Automatic reconnection (#64)
* automatically reconnect every minute (optional, enabled by default)
* (gui) removed reconnect
* use stateTimeout to send ping messages
2017-04-11 17:17:26 +02:00
dpad85
3f404025da Added a receive method to the API to generate payment requests (#63) 2017-04-11 16:47:09 +02:00
Fabrice Drouin
fd56d35073 make max-feerate-mismatch configurable and set default value to 500% (#62)
* make max-feerate-mismatch configurable and set default value to 500%
there can be a significant gap between the fee rate estimated by different bitcoin
clients (see estimatesmartfee) so we must set a reasonably high value for the threshold
above which we consider htat local and remote fee rates are too different and close the
channel.

* use difference/average to compare feerate
it becomes symmetrical and easier to reason with, and also more forgiving.

* make "UpdateFee" minimum ratio configurable
2017-04-11 16:45:03 +02:00
pm47
e2350ca8b1 added tests for state WAIT_FOR_FUNDING_PARENT 2017-04-11 16:43:38 +02:00
Pierre-Marie Padiou
47310c1534 Fixed racing issues in integration tests making travis fail (#61)
* integ tests: removed sleeps, waiting for watches before generating blocks
* fixed a (rarely occuring) race condition related to bulk-generation of test blocks
2017-04-10 16:58:17 +02:00
pm47
e8485128e5 increased integration test timeouts 2017-04-07 11:26:28 +02:00
pm47
6be1644bb4 improved route calculation errors 2017-04-07 11:26:17 +02:00
Fabrice Drouin
54a8b56c3d Mitigate testnet malleability attacks (#59)
* malleability fix: we wait the parent of the funding tx or its malleated version to be confirmed,
then we create the funding tx

* set default min depth to 2

* disconnection during WAIT_FOR_FUNDING_CREATED now closes the channel
2017-04-06 17:55:16 +02:00
Fabrice Drouin
07a1cb0b99 add ping and pong messages (#56)
* add ping and pong messages
* add setting for ping interval to configuration file
* channels can now be restored when peer is connected
2017-04-05 18:06:09 +02:00
pm47
a1b9860483 added timestamp to test logging 2017-04-05 15:30:31 +02:00
pm47
edefb8d235 increased connection timeout in tests 2017-04-05 15:02:26 +02:00
Pierre-Marie Padiou
1d53e53dd2 channel validation is now made in batch, using parallel JsonRPC requests (#53) 2017-04-04 14:26:50 +02:00
Fabrice Drouin
e8be919fe5 fix fuzzy test (#54)
* re-enabled fuzzy test
* fix fuzzy test: Bob was using his own public key instead of Alice's  when sending HTLCs to Alice
2017-04-04 11:22:39 +02:00
Fabrice Drouin
3e53a1fc2c Use CPFP to create our funding tx (#50)
* use CPFP to create our funding tx
ask bitcoin-core to fund a standard tx which has a segwit output, and spend it to
create our funding tx. the parent and the funding tx are published at the same time
and should end up in the same block.
this should give us some protection against malleability attacks: it should improve the chances
of our funding tx being mined, and if the parent tx loses the race against it malleated version
then our fuding tx will not be published, which is much better than having a conflicted funding
tx

* set default fee-rate-per-kw to 10000

* guestimate that feerate-per-kw is feerate-per-kb / 2 for a standard commit tx

* channel: estimate the fee for the parent of our funding tx
instead of hardcoding it

* integration test: increase channel capacities
because we use a larger feerate-per-kw now

* added a feerateKB2Kw method
2017-03-31 20:28:51 +02:00
dpad85
34677f0ed6 Added an activity tab to the GUI (#52)
* (gui) added Activity tab (payment sent, received, relayed)
* GUIUpdater listens to PaymentEvent
* payments are listed in separate tableviews (sent, received, relayed)
* added Payment[Sent, Relayed, Received] events
* (gui) Handling Relayed and Sent payments in Activity Tab
* (gui) fixed amount columns in activity
* (gui) Added formatting to monetary columns of activity tables
* (gui) payments are prepended to activity tables
2017-03-31 20:03:36 +02:00
Pierre-Marie Padiou
72a14914fc Added integration tests on htlc relaying in on-chain scenarios (#51)
* using scodec for failure messages

* we now update routing info and retry payments in case of Update failure

* properly implemented BOLT4/'Receiving Failure Codes' (also fixed a bug with UnknownPaymentHash)

* added integration tests on htlc timeout

* relayer now sends an UpdateFail to downstream when an htlc timeout hits the blockchain

* added integration tests on extracting preimage from blockchain

* cleaning up of htlc bindings in relayer

* router now doesn't send a 2nd request to bitcoind when it is notified of a new channel twice in a short amount of time

* peerclient now asks for witness when retrieving blocks from bitcoind

* getTxBlockHash now returns None instead of an error when tx is in the mempool

* we now look into the mempool when checking for WatchSpent

* fixed FundingSigned been sent twice when deferring an early FundingLocked

* added zeromq listener, removed predefined eclair.conf files in test, limited concurrent rpc calls to 5 for the router

* Update README.md with ZMQ configuration

* Added a warning and link to alpha2 install instructions

* removed PeerClient

* improved PeerWatcher performance
2017-03-31 18:08:59 +02:00
Pierre-Marie Padiou
16d3960f75 Automated retry of payments (#44)
* using scodec for failure messages

* we now update routing info and retry payments in case of Update failure

* properly implemented BOLT4/'Receiving Failure Codes' (also fixed a bug with UnknownPaymentHash)
2017-03-27 13:29:27 +02:00
Pierre-Marie Padiou
f984e55c68 fixed how we interpret feature bits (#37) 2017-03-21 13:16:12 +01:00
Fabrice Drouin
516ce96c0c BOLT 3: fix computation of obscured tx number (#36)
* BOLT 3: fix computation of obscured tx number
* BOLT 3: fix computation of obscured tx number
2017-03-21 12:02:36 +01:00
Pierre-Marie Padiou
a59b4ad2ed Fixed non-compliant wire messages (#34)
* fixed fundingOutputIndex uint8->uint16

* removed HTLC-timeout sigs from RevokeAndAck

* added an (unused yet) features field to channel announcement
2017-03-20 16:18:46 +01:00
Fabrice Drouin
dc3c49fbeb BOLT 4: propagate htlc failures upstream (#30)
* BOLT 4: create return packets for failure messages

* bolt 4: add low-level methods for returning error messages

* BOLT 4: return shared secrets along with the onion packet

* codecs: minor fix the UpdateFailHtlc codec

* BOLT 4: return htlc failures
create and propagate htlc failures as per BOLT 4

* update tests

* channel: publish short channel id when restoring data
and not on reconnection

* channel: remove "channel update" parameters from Commitments.sendAdd()

* channel: send "add htlc failed" to relayer
and a more informative message to the sender through handleCommandError

* keep shared secrets local to PaymentLifeCycle
CMD_ADD_HTLC should just know the onion packet (as before), not the shared secrets

* relayer: handle failure cases
wrong expiry, amount, ...

* added a simple test on the fail workflow

* added a 'channel-capacity-exceeded' test

* make PaymentSucceeded and PaymentFailed children of PaymentResult

* relayer: ChannelUpdates should be stored in a Map, not an Option

* reply with update_fail_malformed_htlc when the onion is not parsable

* channel: handle 'update_fail_malformed_htlc' in Shutdown state
and add tests

* minor: AddHtlcSucceeded -> AddHtlcSuccess

* use bitcoin-lib 0.9.10
2017-03-17 17:01:14 +01:00
pm47
33ef4c816c set more lax timeouts for travis 2017-03-16 17:43:46 +01:00
Pierre-Marie Padiou
71f62eead9 Added support for UpdateFee (#29)
* clarified which fee rate we are using in calculations, also feeRate->feerate

* added support for UpdateFee

* fixed closing workflow when starting with different fees

* attempt at solving travis issues

* fixed feeratePerKw not cleaned up after tests

* added test on invalid initial feerate

* fixed bitcoind api calls mixup, tested on mainnet

* rebased from wip-bolts
2017-03-16 17:31:38 +01:00
pm47
b0eb2ffb1d better cleanup after integration test 2017-03-16 17:04:01 +01:00