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

1020 commits

Author SHA1 Message Date
Pierre-Marie Padiou
a605790be5
Have channels subscribe to blockchain events at creation (#195)
Instead of only subscribing to those events when we reach certain states,
we now always subscribe to them at startup. It doesn't cost a lot because
we receive an event only when a new block appears, and is much simpler.

Note that we previously didn't even bother unsubscribing when we weren't
interested anymore in the events, and were ignoring the messages in the
`whenUnhandled` block. So it is more consistent to have the same behavior
during the whole lifetime of the channel.

This fixes #187.
2017-10-30 14:53:16 +01:00
Fabrice Drouin
b8a5884847 payment request: encode expiry as a varlen unsigned long (#188)
* payment request expiry encoding: add Anton's test
it shows that we don't encode/decode values which would take up more than 2 5-bits value

* payment request: encode expiry as a varlen unsigned value
fixes #186
2017-10-25 10:20:49 +02:00
Anton Kumaigorodski
5becef6fc6 Support multiple hops in RoutingInfoTag (#185)
* Support multiple hops in RoutingInfoTag

* Change `HiddenHop` to `ExtraHop`, `channelId: BinaryData` to `shortChannelId: Long`
2017-10-23 15:11:49 +02:00
Pierre-Marie Padiou
f13e07850b Store state when a sig is received in SHUTDOWN (#181)
This fixes #173 (for good this time)
2017-10-17 13:09:58 +02:00
Pierre-Marie Padiou
4969845401 Base checks in sendAdd on the *last* sent sig (#180)
fixes #175
2017-10-17 13:09:15 +02:00
Pierre-Marie Padiou
41d1fc26a9 Reworked handling of shutdown messages (#176)
Current version attempted to do everything at once, and would always
leave the NORMAL state after processing the `shutdown` message. In
addition to being overly complicated, it had bugs because it is just
not always possible to do so: for example when we have unsigned outgoing
`update_add_htlc` and are already in the process of signing older changes,
the only thing we can do is wait for the counterparty's `revoke_and_ack`
and sign again right away when we receive it. Only after that can we
send our `shutdown` message, and we can't accept new `update_add_htlc`
in the meantime.

Another issue with the current implementation was that we considered
unsigned outgoing *changes*, when only unsigned outgoing `update_add_htlc`
are relevant in the context of `shutdown` logic.

We now also fail to route htlcs in SHUTDOWN state, as recommended by BOLT 2.

This fixes #173.
2017-10-11 17:53:23 +02:00
Pierre-Marie Padiou
9356ad8d0d Added check amount>dust on ClaimDelayedOutputTx (#177)
The current trimming logic [1] as defined in the spec only takes
care of 2nd level txes, making sure that their outputs are greater
than the configured dust limit. However, it is very possible that
depending on the current `feeRatePerKw`, 3rd level transactions
(such as those claiming delayed outputs) are below the dust limit.

Current implementation wasn't taking care of that, and was happily
generating transactions with negative amounts, as reported in #164.

This fixes #164 by rejecting transactions with an amount below the
dust limit, similarly to what happens when the parent output is
trimmed for 2nd level txes.

[1] https://github.com/lightningnetwork/lightning-rfc/blob/master/03-transactions.md#trimmed-outputs
2017-10-11 16:27:25 +02:00
Pierre-Marie Padiou
6a15b8832d Added ACK-based TCP write back-pressure (#174)
Current implementation was simplistic, which resulted in writes
being rejected when OS buffer was full. This happened especially
right after connection, when dumping a large routing table.

It is not clear whether we need read throttling too.
2017-10-11 16:26:18 +02:00
Pierre-Marie Padiou
0d180032a4 Added an integration test on revoked tx handling (#172)
The scenario was already tested at a lower level, but this is
more realistic, with a real bitcoin core.

Note that we currently only steal the counterparty's *main output*,
we ignore pending htlcs. From an incentive point-of-view, it is an
acceptable tradeoff because the amount of in-flight htlcs should
typically be far less than the main outputs (and can be configured
with `max-htlc-value-in-flight-msat`).
2017-10-03 18:43:36 +02:00
Pierre-Marie Padiou
2fc1d7096f Handle update_fail_malformed_htlc in payment FSM (#170)
* handling `update_fail_malformed` messages in payment fsm

* added check on failure code for malformed htlc errors

Spec says that the `update_fail_malformed_htlc`.`failure_code`
must have the BADONION bit set.

* removed hard-coded actor names in fuzzy tests
2017-09-25 16:13:20 +02:00
Pierre-Marie Padiou
a79f60fdbe Re-send htlc/sigs after funding_locked (#169)
We previously skipped the `handleSync` function when we had to re-send
`funding_locked` messages on reconnection. This didn't take into account
the fact that we might have been disconnected right after sending the
very first `commit_sig` in the channel. In that case we need to first
re-send `funding_locked`, then re-send whatever updates were included in
the lost signature, and finally re-send the same `commit_sig`.

Note that the specification doesn't require to re-send the exact same
updates and signatures on reconnection. But doing this allows for a single
commitment history and allows us not to keep track of all signatures
sent to the other party.

Closes #165
2017-09-22 16:01:18 +02:00
Fabrice Drouin
8c71b80e0c Process update_fail_malformed_htlc properly (#168)
* add a test that fails and shows that we don't process `update_fail_malformed` properly
* remove HTLCs failed with update_fail_malformed
* fixes #167
2017-09-22 11:50:51 +02:00
Fabrice Drouin
1f336772b2 back to 0.2-SNAPHOT (#166)
use scala plugin 3.3.1 (mvn scala:console now works)
add Dominique to the list of developpers
2017-09-20 15:16:49 +02:00
pm47
a97fa39fef set version to 0.2-alpha5 2017-09-14 18:41:01 +02:00
pm47
1ae7885eea now using bitcoinj 0.15-rc4 2017-09-14 18:28:03 +02:00
Pierre-Marie Padiou
9e3fbbe5da Minor fixes (#163)
* improved router/payment-lifecycle logging
* now periodically publish CurrentFeerate events
* added a reference to `channelId` in `ChannelException`
2017-09-13 18:35:22 +02:00
Pierre-Marie Padiou
a18fac135d Set watchermode=true for bitcoinj watcher (#162) 2017-09-12 15:07:30 +02:00
Joe Miyamoto
fbabb7d6a2 write profiles for macos (#157) 2017-09-12 14:51:43 +02:00
Fabrice Drouin
4b7cae47ff Sphinx: fix version byte (#161)
we were using version=1, it should be 0 instead (see BOLT 04)
2017-09-12 14:49:12 +02:00
Fabrice Drouin
a8b97d9c05 SPV watcher: set a timestamp on watched script (#160)
this way we don't disable checkpoint optimizations.
2017-09-11 18:40:57 +02:00
Pierre-Marie Padiou
7b2303af80 Now requiring spv nodes to be Segwit-compatible (#159)
* now requiring spv nodes to be 0.13+
* properly setting bitcoinj Context
* disconnect peers which do not provide witness data
* waiting for bitcoinj to be initialized before going further in the setup
2017-09-08 18:06:59 +02:00
Pierre-Marie Padiou
e478f77e5a Replaced sqlite result iterators by lists (#158)
This is less performant but our ResultSet->Iterator implementation
was buggy due to java/scala iterators requiring look-ahead capabilities
when iterating over the result, which ResultSet does not support.

This is a quick fix in the meantime.
2017-09-08 14:43:43 +02:00
Pierre-Marie Padiou
ebe93538ca Better handling of connection lifecycle in Peer (#155)
* better handling of connection lifecycle in Peer
* replaced `StateTimeout` by scheduled message for channel termination
2017-09-08 14:32:28 +02:00
Pierre-Marie Padiou
93739eb3f1 Temporarily exclude channels from routes (#154)
When a node return a `TemporaryChannelFailure` for its outgoing
channel, along with an unchanged `ChannelUpdate`, we temporarily
exclude this channel from route calculation.

Note that the exclusion is directed, as we expect this will mostly
happen when all funds are on one side of the channel.

The duration of the exclusion can be configured by setting the
key `eclair.channel-exclude-duration`. Default value is 60s.
2017-09-08 13:52:17 +02:00
dpad85
c24b9f0c22 (gui) Remove the millisatoshis part from milli-bitcoin amounts (#153)
* (gui) Added localized decimal patterns for amounts
* balance and capacity in channel pane are formatted with the milliBTC pattern
* (gui) using vm default locale is fine with DecimalFormat
2017-09-07 17:27:48 +02:00
Pierre-Marie Padiou
c94cb13dd3 Add an experimental SPV mode with bitcoinj (#152) 2017-09-07 17:20:36 +02:00
Fabrice Drouin
1d29d28a2a Fix byte order of chain hash (#151)
* fix order of chain hash (see https://github.com/lightningnetwork/lightning-rfc/issues/237)
* use known chain hashes instead of querying bitcoind
2017-09-06 17:29:39 +02:00
Fabrice Drouin
a066e0d042 Switch to java environment variables instead of command line options (#149)
* added an eclair.printToconsole is defined log to stdout
* datadir is now eclair.datadir if defined, or user.home/.eclair
* update README.md
2017-08-30 13:42:58 +02:00
Pierre-Marie Padiou
a1509673a6 Use Sqlite as local database (#143)
* network announcements are now stored in sqlite
* store channels and peers in sqlite
* added tests to peers and channels db
2017-08-29 15:35:28 +02:00
dpad85
45a3993e7a Added a compatibility check with DB files when booting application (#148) 2017-08-28 16:37:44 +02:00
Fabrice Drouin
9a736e2396 Add chain hash to gossip messages, increase max error message size (#145)
see rfc PR 203 and 227
2017-08-28 14:42:44 +02:00
Pierre-Marie Padiou
edab8b004a Use logback's MDC to display channelId in logs (#142) 2017-08-25 16:30:00 +02:00
Anton Kumaigorodski
4cd081c11c Add API method to accept requests with custom amount (closes #134) (#135)
* Add API method to accept requests with custom amount
- can be used to send up to 2x higher amount than requested according to BOLT11
- should be used for payment requests without amounts
* Refactor 'send' method in API
* Add comments and description for 'send' API method
2017-08-25 13:38:14 +02:00
Michael
76f744c57c Replace getinfo with getnetworkinfo (#131) 2017-08-24 11:15:13 +02:00
dpad85
305420bd37 Renamed javafx module to eclair-node-gui and updated binaries name (#137)
* Renamed eclair-node-javafx module to eclair-node-gui

* (build) javafx installer uses project version

* (build) Streamlined capsule names

* (build) mvn generates installer only with `installer` profile. The windows installer does not need to be created in common cases. Decreases `eclair-node-gui` module building time by ~ 1 min

* (readme) updated the `run eclair` commands with the new capsule names
2017-08-23 19:28:18 +02:00
Fabrice Drouin
012d804474 Fix node announcement encoding (closes #124) (#136) 2017-08-23 16:58:05 +02:00
Pierre-Marie Padiou
00aef5c438 Updated bitcoin-lib to 0.9.13 (closes #110) (#132) 2017-08-23 14:16:06 +02:00
dpad85
7acb75d50c (API) Added a method to return all known channels (closes #126) (#133)
* Added an 'allchannels' call that returns local and non-local channels
* Added API calls `allchannels` and `allnodes` to documentation
2017-08-23 14:14:33 +02:00
Pierre-Marie Padiou
43d6c80f9e Bugfix: regression in init (#120)
Eclair wasn't stopping anymore when two instances were started with the
same ports.

Note: we should probably go one step further and put a lock in the datadir
directory. For now we just check if the main TCP port is in use and fail fast.
2017-08-23 12:13:18 +02:00
Fabrice Drouin
f2560e2c9c Reorder features fields to match the BOLTS (#127)
see spec change a257554456cda98afd1532c302c0e5e84de0455e
2017-08-23 11:29:46 +02:00
dpad85
3e81fce898 (gui) Fix direction icons in the list of the known channels in network (#119)
* (gui) channel direction is built from current item state

* using an objectproperty binding with the cell value instead of a string so
  that we can directly access the state within the factory

* (gui) Using option for direction boolean instead of dedicated state

* Tell explicitly in readme that `eclair.conf` must be manually created (#129)

* also added an explicit link to the binaries
* fix #125
2017-08-17 13:04:43 +02:00
Pierre-Marie Padiou
d0a18c0649 improved reconnection logic and fuzzy tests (#123)
Most notably, we do not anymore discard previously signed updates.
Instead, we re-send them and re-send the exact same signature. For that to
work, we had to be careful to re-send rev/sig in the same order, because
that impacts whatever is signed.

NB: this breaks storage serialization backward compatibility
2017-08-10 16:24:05 +02:00
Pierre-Marie Padiou
0440096f95 Clarified node/node-javafx distinction in README 2017-07-26 19:11:44 +02:00
Pierre-Marie Padiou
c6dc33e8bf Bugfixes and minor improvements (#117)
* reworked payment lifecycle

* fixed retry logic (infinite loop in some cases)
* check update signature
* keep track of the list of errors and routes tried

* added support for sending bolt11 payment request in the API

* updated eclair-cli and deleted deprecated TESTING.md (closes #112)

* removed useless application.conf in eclair-node

* now handling CMD_CLOSE in shutdown/negotiating/closing states

* added no-op handlers for FundingLocked and CurrentFeeRate messages

* cleaning up stale announcements on restart

* more informative/less spam logs in Channel

* (gui) Wrapping payment events to display date of event

* Also added controls to item content in cell factory overrides. This
  should prevent prevent duplicates as reported in #115
2017-07-26 18:57:31 +02:00
Pierre-Marie Padiou
f321d3e4ec Fixed links in README 2017-07-23 17:11:08 +02:00
rem0g
75ef04ac23 API: Add description to receive in help menu (#114) 2017-07-22 18:16:17 +02:00
rem0g
f51be77ab1 Update README with description to receive method (closed #111) (#113)
Description is mandatory when using receive as method to generate payment request.
2017-07-22 18:14:52 +02:00
sstone
905aebebbd set version back to 0.2-SNAPSHOT 2017-07-19 17:15:04 +02:00
sstone
c85823f5b4 set version to 0.2-alpha4 2017-07-19 17:12:21 +02:00
sstone
ecce374e1b use bitcoin-lib 0.9.12 2017-07-19 16:33:19 +02:00