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

245 lines
9.1 KiB
XML
Raw Normal View History

<!--
~ Copyright 2018 ACINQ SAS
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
2015-08-19 13:57:05 +02:00
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
2015-08-19 14:05:14 +02:00
<groupId>fr.acinq.eclair</groupId>
2015-08-19 13:57:05 +02:00
<artifactId>eclair_2.11</artifactId>
2018-03-20 16:06:01 +01:00
<version>0.2-android-SNAPSHOT</version>
2015-08-19 13:57:05 +02:00
<packaging>pom</packaging>
<modules>
<module>eclair-core</module>
2016-08-26 18:31:12 +02:00
<module>eclair-node</module>
2015-08-19 13:57:05 +02:00
</modules>
<description>A scala implementation of the Lightning Network</description>
<url>https://github.com/ACINQ/eclair</url>
2015-08-19 13:57:05 +02:00
<name>${project.artifactId}</name>
<licenses>
<license>
<url>https://raw.githubusercontent.com/ACINQ/eclair/master/LICENSE</url>
<name>Apache License</name>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<connection>scm:git:git@github.com:ACINQ/eclair.git</connection>
<developerConnection>scm:git:git@github.com:ACINQ/eclair.git</developerConnection>
<url>git@github.com:ACINQ/eclair.git</url>
</scm>
<developers>
<developer>
[Android] Support for electrumx API (#214) * back to 0.2-SNAPHOT (#166) use scala plugin 3.3.1 (mvn scala:console now works) add Dominique to the list of developpers * 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 * 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 * 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 * 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`). * 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. * 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 * 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. * Base checks in `sendAdd` on the *last* sent sig (#180) fixes #175 * Store state when a sig is received in SHUTDOWN (#181) This fixes #173 (for good this time) * Support multiple hops in RoutingInfoTag (#185) * Support multiple hops in RoutingInfoTag * Change `HiddenHop` to `ExtraHop`, `channelId: BinaryData` to `shortChannelId: Long` * 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 * 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. * Add primary key to channel_updates table (#199) This table was missing a primary key, which caused it to grow indefinitely. Also added duplication tests to other tables. * Always store channel state when a rev is received (#201) The way the store data currently doesn't allow for easy testing of this. It will be improved in a later iteration. This fixes #200. * Add an optional 'minimum htlc expiry' tag (#202) * Support building payments with extra hops (#198) * Support building of outgoing payments with optional extra hops from payment requests * Add test for route calculation with extra hops * Simplify pattern matching in `buildExtra` * `buildPayment` now uses a reverse Seq[Hop] to create a Seq[ExtraHop] Since `Router` currently stores `ChannelUpdate`'s for non-public channels, it is possible to use it not only to get a route from payer to payee but also to get a "reverse" assisted route from payee when creating a `PaymentRequest`. In principle this could be used to even generate a full reverse path to a payer which does not have an access to routing table for some reason. * Can create `PaymentRequest`s with `RoutingInfoTag`s * Bugfix and update test with data from live payment testing * Move ExtraHop to PaymentRequest.scala * Use `min_final_cltv_expiry` included in payment request (if any) (#210) * Lock utxos when creating a funding transaction with Bitcoin Core (#211) This mitigates issues when opening channels in parallel and having unpublished transactions reuse utxos that are already used by other txs. Note that utxo will stay locked if counterparty disconnects after the `funding_created` message is sent, and before a `funding_signed` is received. In that case we should release locked utxos by calling `lockunspent` RPC function. * Readme: added help for options syntax (#212) * (README) updated link to release readme * (README) added a link to HOCON readme for options syntax This closes #209 * Rework preimage handling (#183) * properly handle new htlc requests when closing When in NORMAL state and a `shutdown` message has already been sent or received, then any subsequent `CMD_ADD_HTLC` fails and the relayer is notified of the failure. Same in SHUTDOWN state. This fixes a possible race condition when a channel just switched to SHUTDOWN, and the relayer keeps sending it new htlcs before being notified of the state change. * renamed Htlc->DirectedHtlc + cleanup * storing origin of htlcs in the channel state Currently this information is handled in the relayer, which is not persisted. As a consequence, if eclair is shut down and there are pending (signed) incoming htlcs, those will always expire (time out and fail) even if the corresponding outgoing htlc is fulfilled, because we lose the lookup table (the relayer's `bindings` map). Storing the origin in the channel (as opposed to persisting the state of the relayer) makes sense because we want to store the origin if and only if an outgoing htlc was successfully sent and signed in a channel. It is also probably more performant because we only need to do one disk operation (which we have to do at signing anyway) instead of two distinct operations. * removed bindings from relayer Instead, we rely on the origin stored in the actor state. * preimages are now persisted and acknowledged Upon reception of an `UpdateFulfillHtlc`, the relayer forwards it immediately to the origin channel, *and* it stores the preimage in a `PreimagesDb`. When the origin channel has irrevocably committed the fulfill in a `CommitSig`, it sends an `AckFulfillCmd` back to the relayer, which will then remove the preimage from its database. In addition to that, the relayer will re-send all pending fulfills when it is notified that a channel reaches NORMAL, SHUTDOWN, or CLOSING state. That way we make sure that the origin channel will always get the fulfill eventually, even if it currently OFFLINE for example. This fixes #146. Also, the relayer now relies on the register to forward messages to channels based on `channelId` or `shortChannelId`. This simplifies the relayer but adds one hop when forwarding messages. * modified `PaymentRelayed` event Replaced `amountIn` and `feesEarned` by more explicit `amountIn` and `amountOut`. `feesEarned` are simply the difference. TODO: - when local/remote closing a channel, we currently do not wait for htlc-related transactions, we consider the channel CLOSED when the commitment transactions has been buried deeply enough; this is wrong because it wouldn't let us time to extract payment preimages in certain cases * Reworked channel closing logic (#204) When doing an unilateral close (local or remote), we previously weren't watching htlc outputs to decide whether the commit was finished or not. This was incorrect because we didn't make sure the htlc-related transactions had indeed been confirmed on the blockchain, making us potentially lose money. This is not trivial, because htlc transactions may be double-spent by the counterparty, dependending on scenarios (ex: `htlc-timeout` vs `claim-success`). On top of that, there may be several different kind of commits in competition at the same time. With this change, we now: - put `WatchConfirm` watches on the commitment tx, and on all outputs only us control (eg: our main output) ; - put `WatchSpent` watches on the outputs that may be double spent by the counterparty; when such an output is spent, we put a `WatchConfirm` on the corresponding transaction and keep track of all outpoints spent ; - every time a new transaction is confirmed, we find out if there are some remaining transactions waiting for confirmation, taking into account the fact that some 2nd/3rd-stage txs may never confirm because their input has been doublespent. We also don't rely anymore on dedicated `BITCOIN_CLOSE_DONE`, `BITCOIN_LOCALCOMMIT_DONE`, ... events. * Better handle big routing table (#194) * increased tcp send buffer x100 * throttle announcement messages when dumping the table * set router throttling to chunkSize=10 delay=50ms * Handle remote `error` in `SYNCING` state (#205) This closes #203. * added support for electrumx wallet/watcher 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 * disabled WatchSpentBasic on android * moved bitcoin init to the bootstrap future This way the name resolution when loading electrum server addresses does not occur on android's main thread. * improved fees management * 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) TODO: - set sensible default values for feerates * WalletTransactionReceive contains the tx fee as an option * connect txes even if they arrive out of order * use manual transitions because of limitation in akka 2.3 FSM * Delay `announcement_signatures` when received early (#217) * delay `announcement_signatures` in state `WAIT_FOR_FUNDING_LOCKED` * delay `announcement_signatures` in state `WAIT_FOR_FUNDING_CONFIRMED` * always re-send our `announcement_signatures` in response to theirs * Use a separate `htlc_key` to sign 2nd stage htlc txs (#213) We previously used the `payment_key` both for our main output, and to sign the local `htlc_success`/`htlc_timeout` transactions. With this change we can keep the `payment_privkey` offline, which is far better from a security point of view because an attacker getting control of a node wouldn't be able to just publish the current commitment transaction and get the funds. The attacker would only be able to get our `htlc_privkey`, which we only use in a 2-of-2 multisig with our counterparty, so it is useless except if the attacker and the counterparty are the same person, and even in that case only the pending htlcs would be at risk. Note that this implementation is a first step and actually keeps the payment key to spend our outputs in non-mutual close scenarios. * wallet: send confidence event as soon as a tx is confirmed * fixed 5985148f2fc727dadbe9ffece596ed61331435b6 and improve events * added `NewWalletReceiveAddress` event * cleaned up electrum testnet seeds * added a test on dumping routing state * routing table dump is now disabled in the router instead of peer * 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 * 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) * make electrum wallet advertise address at startup * 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 * set version to 0.2-android-SNAPSHOT
2017-11-21 18:25:27 +01:00
<id>dpad85</id>
</developer>
<developer>
<id>pm47</id>
</developer>
[Android] Support for electrumx API (#214) * back to 0.2-SNAPHOT (#166) use scala plugin 3.3.1 (mvn scala:console now works) add Dominique to the list of developpers * 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 * 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 * 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 * 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`). * 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. * 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 * 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. * Base checks in `sendAdd` on the *last* sent sig (#180) fixes #175 * Store state when a sig is received in SHUTDOWN (#181) This fixes #173 (for good this time) * Support multiple hops in RoutingInfoTag (#185) * Support multiple hops in RoutingInfoTag * Change `HiddenHop` to `ExtraHop`, `channelId: BinaryData` to `shortChannelId: Long` * 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 * 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. * Add primary key to channel_updates table (#199) This table was missing a primary key, which caused it to grow indefinitely. Also added duplication tests to other tables. * Always store channel state when a rev is received (#201) The way the store data currently doesn't allow for easy testing of this. It will be improved in a later iteration. This fixes #200. * Add an optional 'minimum htlc expiry' tag (#202) * Support building payments with extra hops (#198) * Support building of outgoing payments with optional extra hops from payment requests * Add test for route calculation with extra hops * Simplify pattern matching in `buildExtra` * `buildPayment` now uses a reverse Seq[Hop] to create a Seq[ExtraHop] Since `Router` currently stores `ChannelUpdate`'s for non-public channels, it is possible to use it not only to get a route from payer to payee but also to get a "reverse" assisted route from payee when creating a `PaymentRequest`. In principle this could be used to even generate a full reverse path to a payer which does not have an access to routing table for some reason. * Can create `PaymentRequest`s with `RoutingInfoTag`s * Bugfix and update test with data from live payment testing * Move ExtraHop to PaymentRequest.scala * Use `min_final_cltv_expiry` included in payment request (if any) (#210) * Lock utxos when creating a funding transaction with Bitcoin Core (#211) This mitigates issues when opening channels in parallel and having unpublished transactions reuse utxos that are already used by other txs. Note that utxo will stay locked if counterparty disconnects after the `funding_created` message is sent, and before a `funding_signed` is received. In that case we should release locked utxos by calling `lockunspent` RPC function. * Readme: added help for options syntax (#212) * (README) updated link to release readme * (README) added a link to HOCON readme for options syntax This closes #209 * Rework preimage handling (#183) * properly handle new htlc requests when closing When in NORMAL state and a `shutdown` message has already been sent or received, then any subsequent `CMD_ADD_HTLC` fails and the relayer is notified of the failure. Same in SHUTDOWN state. This fixes a possible race condition when a channel just switched to SHUTDOWN, and the relayer keeps sending it new htlcs before being notified of the state change. * renamed Htlc->DirectedHtlc + cleanup * storing origin of htlcs in the channel state Currently this information is handled in the relayer, which is not persisted. As a consequence, if eclair is shut down and there are pending (signed) incoming htlcs, those will always expire (time out and fail) even if the corresponding outgoing htlc is fulfilled, because we lose the lookup table (the relayer's `bindings` map). Storing the origin in the channel (as opposed to persisting the state of the relayer) makes sense because we want to store the origin if and only if an outgoing htlc was successfully sent and signed in a channel. It is also probably more performant because we only need to do one disk operation (which we have to do at signing anyway) instead of two distinct operations. * removed bindings from relayer Instead, we rely on the origin stored in the actor state. * preimages are now persisted and acknowledged Upon reception of an `UpdateFulfillHtlc`, the relayer forwards it immediately to the origin channel, *and* it stores the preimage in a `PreimagesDb`. When the origin channel has irrevocably committed the fulfill in a `CommitSig`, it sends an `AckFulfillCmd` back to the relayer, which will then remove the preimage from its database. In addition to that, the relayer will re-send all pending fulfills when it is notified that a channel reaches NORMAL, SHUTDOWN, or CLOSING state. That way we make sure that the origin channel will always get the fulfill eventually, even if it currently OFFLINE for example. This fixes #146. Also, the relayer now relies on the register to forward messages to channels based on `channelId` or `shortChannelId`. This simplifies the relayer but adds one hop when forwarding messages. * modified `PaymentRelayed` event Replaced `amountIn` and `feesEarned` by more explicit `amountIn` and `amountOut`. `feesEarned` are simply the difference. TODO: - when local/remote closing a channel, we currently do not wait for htlc-related transactions, we consider the channel CLOSED when the commitment transactions has been buried deeply enough; this is wrong because it wouldn't let us time to extract payment preimages in certain cases * Reworked channel closing logic (#204) When doing an unilateral close (local or remote), we previously weren't watching htlc outputs to decide whether the commit was finished or not. This was incorrect because we didn't make sure the htlc-related transactions had indeed been confirmed on the blockchain, making us potentially lose money. This is not trivial, because htlc transactions may be double-spent by the counterparty, dependending on scenarios (ex: `htlc-timeout` vs `claim-success`). On top of that, there may be several different kind of commits in competition at the same time. With this change, we now: - put `WatchConfirm` watches on the commitment tx, and on all outputs only us control (eg: our main output) ; - put `WatchSpent` watches on the outputs that may be double spent by the counterparty; when such an output is spent, we put a `WatchConfirm` on the corresponding transaction and keep track of all outpoints spent ; - every time a new transaction is confirmed, we find out if there are some remaining transactions waiting for confirmation, taking into account the fact that some 2nd/3rd-stage txs may never confirm because their input has been doublespent. We also don't rely anymore on dedicated `BITCOIN_CLOSE_DONE`, `BITCOIN_LOCALCOMMIT_DONE`, ... events. * Better handle big routing table (#194) * increased tcp send buffer x100 * throttle announcement messages when dumping the table * set router throttling to chunkSize=10 delay=50ms * Handle remote `error` in `SYNCING` state (#205) This closes #203. * added support for electrumx wallet/watcher 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 * disabled WatchSpentBasic on android * moved bitcoin init to the bootstrap future This way the name resolution when loading electrum server addresses does not occur on android's main thread. * improved fees management * 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) TODO: - set sensible default values for feerates * WalletTransactionReceive contains the tx fee as an option * connect txes even if they arrive out of order * use manual transitions because of limitation in akka 2.3 FSM * Delay `announcement_signatures` when received early (#217) * delay `announcement_signatures` in state `WAIT_FOR_FUNDING_LOCKED` * delay `announcement_signatures` in state `WAIT_FOR_FUNDING_CONFIRMED` * always re-send our `announcement_signatures` in response to theirs * Use a separate `htlc_key` to sign 2nd stage htlc txs (#213) We previously used the `payment_key` both for our main output, and to sign the local `htlc_success`/`htlc_timeout` transactions. With this change we can keep the `payment_privkey` offline, which is far better from a security point of view because an attacker getting control of a node wouldn't be able to just publish the current commitment transaction and get the funds. The attacker would only be able to get our `htlc_privkey`, which we only use in a 2-of-2 multisig with our counterparty, so it is useless except if the attacker and the counterparty are the same person, and even in that case only the pending htlcs would be at risk. Note that this implementation is a first step and actually keeps the payment key to spend our outputs in non-mutual close scenarios. * wallet: send confidence event as soon as a tx is confirmed * fixed 5985148f2fc727dadbe9ffece596ed61331435b6 and improve events * added `NewWalletReceiveAddress` event * cleaned up electrum testnet seeds * added a test on dumping routing state * routing table dump is now disabled in the router instead of peer * 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 * 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) * make electrum wallet advertise address at startup * 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 * set version to 0.2-android-SNAPSHOT
2017-11-21 18:25:27 +01:00
<developer>
<id>sstone</id>
</developer>
</developers>
2015-08-19 13:57:05 +02:00
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2017-08-25 12:24:54 +02:00
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<scala.version>2.11.11</scala.version>
2015-08-19 13:57:05 +02:00
<scala.version.short>2.11</scala.version.short>
2017-08-25 12:24:54 +02:00
<akka.version>2.3.14</akka.version>
2018-03-28 20:41:38 +02:00
<bitcoinlib.version>0.9.16</bitcoinlib.version>
<guava.version>24.0-android</guava.version>
2015-08-19 13:57:05 +02:00
</properties>
<build>
<pluginManagement>
<plugins>
2017-12-03 17:46:41 +01:00
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<groupId>com.github.chrisdchristo</groupId>
<artifactId>capsule-maven-plugin</artifactId>
<version>1.5.1</version>
</plugin>
2015-08-19 13:57:05 +02:00
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.3</version>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
<configuration>
<failOnNoGitDirectory>false</failOnNoGitDirectory>
</configuration>
</execution>
</executions>
</plugin>
2015-08-19 13:57:05 +02:00
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<args combine.children="append">
<arg>-deprecation</arg>
<arg>-feature</arg>
<arg>-language:postfixOps</arg>
<arg>-language:implicitConversions</arg>
<arg>-Xfatal-warnings</arg>
<arg>-unchecked</arg>
<arg>-Xmax-classfile-name</arg>
<arg>140</arg>
</args>
<scalaCompatVersion>${scala.version.short}</scalaCompatVersion>
</configuration>
2015-08-19 13:57:05 +02:00
<executions>
<execution>
<id>scalac</id>
2015-08-19 13:57:05 +02:00
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
<execution>
<id>scaladoc</id>
<goals>
<goal>doc-jar</goal>
</goals>
<configuration>
<args>
<arg>-no-link-warnings</arg>
</args>
</configuration>
</execution>
2015-08-19 13:57:05 +02:00
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
2015-08-19 13:57:05 +02:00
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
2015-08-19 13:57:05 +02:00
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/main/scala</source>
</sources>
</configuration>
</execution>
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/test/scala</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
2015-09-08 19:36:57 +02:00
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
2015-09-08 19:36:57 +02:00
<configuration>
<argLine>-Xmx1024m</argLine>
2015-09-08 19:36:57 +02:00
<useFile>false</useFile>
<disableXmlReport>false</disableXmlReport>
<!-- If you have classpath issue like NoDefClassError,... -->
<!-- useManifestOnlyJar>false</useManifestOnlyJar -->
<includes>
<include>**/*Spec.*</include>
<include>**/*Test.*</include>
<include>**/*Suite.*</include>
</includes>
<systemPropertyVariables>
<buildDirectory>${project.build.directory}</buildDirectory>
</systemPropertyVariables>
2015-09-08 19:36:57 +02:00
</configuration>
</plugin>
2015-08-19 13:57:05 +02:00
</plugins>
</build>
<repositories>
<repository>
<id>sonatype snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_${scala.version.short}</artifactId>
2016-05-30 18:07:02 +02:00
<version>2.2.6</version>
2015-08-19 13:57:05 +02:00
<scope>test</scope>
</dependency>
</dependencies>
</project>