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

252 lines
9.3 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>
2019-02-19 13:49:12 +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.12</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>
<sttp.version>1.3.9</sttp.version>
<bitcoinlib.version>0.10</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>
Update Android branch (#746) * Fixed regression in rebroadcast (#713) Fixed regression caused by 2c1811d: we now don't force sending a channel_update at the same time with channel_announcement. This greatly simplifies the rebroadcast logic, and is what caused the integration test to fail. Added proper test on Peer, testing the actor, not only static methods. * Routing sync fixes (#712) * Router: reset sync state on reconnection When we're reconnected to a peer we will start a new sync process and should reset our sync state with that peer. * Ignore 'origin htlc not found' in CLOSING (#708) If we don't have the origin, it means that we already have forwarded the fulfill so that's not a big deal. This can happen if they send a signature containing the fulfill, then fail the channel before we have time to sign it. * Fix handling of born again channels (#717) * Fix handling of born again channels When we receive a recent update for a channel that we had marked as stale we must send a query to the underlying transport, not the origin of the update (which would send the query back to the router) * Replace `update_fee` in commitments (#709) This is a simple optimisation, we don't have to keep all `update_fee`, just the last one. cf BOLT 2: > An update_fee message is sent by the node which is paying the Bitcoin fee. Like any update, it's first committed to the receiver's commitment transaction and then (once acknowledged) committed to the sender's. Unlike an HTLC, update_fee is never closed but simply replaced. * Tests: use bitcoind 0.16.3 (#715) Bitcoind 0.16.0 is no longer available * Make `publishTransaction` idempotent (#711) Bitcoin core returns an error `missing inputs (code: -25)` if the tx that we want to publish has already been published and its output have been spent. When we receive this error, we try to get the tx, in order to know if it is in the blockchain, or if its inputs were spent by another tx. Note: If the outputs of the tx were still unspent, bitcoin core would return "transaction already in block chain (code: -27)" and this is already handled. * Improved eclair-cli (#718) This fixes #695, and also adds the channel point in the default channel output. ```bash $ ./eclair-cli channel 00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46 { "nodeId": "0232e20e7b68b9b673fb25f48322b151a93186bffe4550045040673797ceca43cf", "shortChannelId": "845230006070001", "channelId": "00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46", "state": "NORMAL", "balanceSat": 9858759, "capacitySat": 10000000, "channelPoint": "470eafa146785a21a3eb55f4d327969b511f08cbb61b566537f94ad9564dfd00:1" } ``` * Handle update relay fee in OFFLINE state (#719) Previously it was only possible to update relay fee in NORMAL state, which is not very convenient because most of the time there are always some channels in OFFLINE state. This works like the NORMAL case, except that the new `channel_update` won't be broadcast immediately. It will be sent out next time the channel goes back to NORMAL, in the same `channel_update` that sets the `enable` flag to true. Also added a default handler that properly rejects the CMD_UPDATE_RELAY_FEE command in all other states. * Fixed regression caused by 7a4f175 (#722) When updating relay fee in state OFFLINE, the new channel_update must have the disabled flag on. This caused tests to be flaky, added necessary checks to always make them fail in case that kind of regression happens again. * Logging: use a rolling file appender (#721) * Logging: use a rolling file appender Use one file per day, keep 90 days of logs with a total maximum size capped at 5 Gb * Router: log routing broadcast in debug level only * set version to 0.2-beta6 * set version back to 0.2-SNAPSHOT * Simplify bitcoind version check (#731) Bitcoind returns version as MMmmrr (major, minor, revision), use an int representation and compare it to our minimum version target. * Update scalatest and remove junit runner (#728) * updated to scalatest 3.0.5 * use scalatest runner instead of junit Output is far more readable, and makes console (incl. travis) reports actually usable. Turned off test logs as error reporting is enough to figure out what happens. The only downside is that we can't use junit's categories to group tests, like we did for docker related tests. We could use nested suites, but that seems to be overkill so I just removed the categories. Users will only have the possibility to either skip/run all tests. * update scala-maven-plugin to 3.4.2 NB: This requires maven 3.5.4, which means that we currently need to manually install maven on travis. Also updated Docker java version to 8u181 (8u171 for compiling). * Add instructions for Bitcoin Core 0.17.0 [ci skip] (#732) * Add instructions for Bitcoin Core 0.17.0 [ci skip] Bitcoin Core 0.17.0 deprecates the `signrawtransaction` RPC call, which will be removed in version 0.18.0, you need to enable this call if you want your eclair node to use a 0.1.70 node. * README: add an example of how to use the new bitcoin.conf sections [ci skip] * Only persist trimmed htlcs (#724) We persist htlc data in order to be able to claim htlc outputs in case a revoked tx is published by our counterparty, so only htlcs above remote's `dust_limit` matter. Removed the TODO because we need data to be indexed by commit number so it is ok to write the same htlc data for every commitment it is included in. * set version to 0.2-beta7 * set version to 0.2-SNAPSHOT * Add `htlcMaximumMsat` field to `ChannelUpdate` message (#738) * Add `htlcMaximumMsat` field to `ChannelUpdate` message * added compatibility test with c-lightning * Fix encoding of FinalIncorrectHtlcAmount error message (#740) * set version to 0.2-beta8 * set version to 0.2-SNAPSHOT * Always add 1 block to the `finalCltvExpiry` (#742) This fixes #651. * ignore IntegrationSpec (no server on android) * back to SNAPSHOT * use proper [gs]etNullableLong method for Sqlite
2018-10-25 17:50:48 +02:00
<version>3.4.2</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>
<!-- needed to compile Scala code on JDK9+ -->
<arg>-nobootcp</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>
Update Android branch (#746) * Fixed regression in rebroadcast (#713) Fixed regression caused by 2c1811d: we now don't force sending a channel_update at the same time with channel_announcement. This greatly simplifies the rebroadcast logic, and is what caused the integration test to fail. Added proper test on Peer, testing the actor, not only static methods. * Routing sync fixes (#712) * Router: reset sync state on reconnection When we're reconnected to a peer we will start a new sync process and should reset our sync state with that peer. * Ignore 'origin htlc not found' in CLOSING (#708) If we don't have the origin, it means that we already have forwarded the fulfill so that's not a big deal. This can happen if they send a signature containing the fulfill, then fail the channel before we have time to sign it. * Fix handling of born again channels (#717) * Fix handling of born again channels When we receive a recent update for a channel that we had marked as stale we must send a query to the underlying transport, not the origin of the update (which would send the query back to the router) * Replace `update_fee` in commitments (#709) This is a simple optimisation, we don't have to keep all `update_fee`, just the last one. cf BOLT 2: > An update_fee message is sent by the node which is paying the Bitcoin fee. Like any update, it's first committed to the receiver's commitment transaction and then (once acknowledged) committed to the sender's. Unlike an HTLC, update_fee is never closed but simply replaced. * Tests: use bitcoind 0.16.3 (#715) Bitcoind 0.16.0 is no longer available * Make `publishTransaction` idempotent (#711) Bitcoin core returns an error `missing inputs (code: -25)` if the tx that we want to publish has already been published and its output have been spent. When we receive this error, we try to get the tx, in order to know if it is in the blockchain, or if its inputs were spent by another tx. Note: If the outputs of the tx were still unspent, bitcoin core would return "transaction already in block chain (code: -27)" and this is already handled. * Improved eclair-cli (#718) This fixes #695, and also adds the channel point in the default channel output. ```bash $ ./eclair-cli channel 00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46 { "nodeId": "0232e20e7b68b9b673fb25f48322b151a93186bffe4550045040673797ceca43cf", "shortChannelId": "845230006070001", "channelId": "00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46", "state": "NORMAL", "balanceSat": 9858759, "capacitySat": 10000000, "channelPoint": "470eafa146785a21a3eb55f4d327969b511f08cbb61b566537f94ad9564dfd00:1" } ``` * Handle update relay fee in OFFLINE state (#719) Previously it was only possible to update relay fee in NORMAL state, which is not very convenient because most of the time there are always some channels in OFFLINE state. This works like the NORMAL case, except that the new `channel_update` won't be broadcast immediately. It will be sent out next time the channel goes back to NORMAL, in the same `channel_update` that sets the `enable` flag to true. Also added a default handler that properly rejects the CMD_UPDATE_RELAY_FEE command in all other states. * Fixed regression caused by 7a4f175 (#722) When updating relay fee in state OFFLINE, the new channel_update must have the disabled flag on. This caused tests to be flaky, added necessary checks to always make them fail in case that kind of regression happens again. * Logging: use a rolling file appender (#721) * Logging: use a rolling file appender Use one file per day, keep 90 days of logs with a total maximum size capped at 5 Gb * Router: log routing broadcast in debug level only * set version to 0.2-beta6 * set version back to 0.2-SNAPSHOT * Simplify bitcoind version check (#731) Bitcoind returns version as MMmmrr (major, minor, revision), use an int representation and compare it to our minimum version target. * Update scalatest and remove junit runner (#728) * updated to scalatest 3.0.5 * use scalatest runner instead of junit Output is far more readable, and makes console (incl. travis) reports actually usable. Turned off test logs as error reporting is enough to figure out what happens. The only downside is that we can't use junit's categories to group tests, like we did for docker related tests. We could use nested suites, but that seems to be overkill so I just removed the categories. Users will only have the possibility to either skip/run all tests. * update scala-maven-plugin to 3.4.2 NB: This requires maven 3.5.4, which means that we currently need to manually install maven on travis. Also updated Docker java version to 8u181 (8u171 for compiling). * Add instructions for Bitcoin Core 0.17.0 [ci skip] (#732) * Add instructions for Bitcoin Core 0.17.0 [ci skip] Bitcoin Core 0.17.0 deprecates the `signrawtransaction` RPC call, which will be removed in version 0.18.0, you need to enable this call if you want your eclair node to use a 0.1.70 node. * README: add an example of how to use the new bitcoin.conf sections [ci skip] * Only persist trimmed htlcs (#724) We persist htlc data in order to be able to claim htlc outputs in case a revoked tx is published by our counterparty, so only htlcs above remote's `dust_limit` matter. Removed the TODO because we need data to be indexed by commit number so it is ok to write the same htlc data for every commitment it is included in. * set version to 0.2-beta7 * set version to 0.2-SNAPSHOT * Add `htlcMaximumMsat` field to `ChannelUpdate` message (#738) * Add `htlcMaximumMsat` field to `ChannelUpdate` message * added compatibility test with c-lightning * Fix encoding of FinalIncorrectHtlcAmount error message (#740) * set version to 0.2-beta8 * set version to 0.2-SNAPSHOT * Always add 1 block to the `finalCltvExpiry` (#742) This fixes #651. * ignore IntegrationSpec (no server on android) * back to SNAPSHOT * use proper [gs]etNullableLong method for Sqlite
2018-10-25 17:50:48 +02:00
<!-- disable surefire -->
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>
Update Android branch (#746) * Fixed regression in rebroadcast (#713) Fixed regression caused by 2c1811d: we now don't force sending a channel_update at the same time with channel_announcement. This greatly simplifies the rebroadcast logic, and is what caused the integration test to fail. Added proper test on Peer, testing the actor, not only static methods. * Routing sync fixes (#712) * Router: reset sync state on reconnection When we're reconnected to a peer we will start a new sync process and should reset our sync state with that peer. * Ignore 'origin htlc not found' in CLOSING (#708) If we don't have the origin, it means that we already have forwarded the fulfill so that's not a big deal. This can happen if they send a signature containing the fulfill, then fail the channel before we have time to sign it. * Fix handling of born again channels (#717) * Fix handling of born again channels When we receive a recent update for a channel that we had marked as stale we must send a query to the underlying transport, not the origin of the update (which would send the query back to the router) * Replace `update_fee` in commitments (#709) This is a simple optimisation, we don't have to keep all `update_fee`, just the last one. cf BOLT 2: > An update_fee message is sent by the node which is paying the Bitcoin fee. Like any update, it's first committed to the receiver's commitment transaction and then (once acknowledged) committed to the sender's. Unlike an HTLC, update_fee is never closed but simply replaced. * Tests: use bitcoind 0.16.3 (#715) Bitcoind 0.16.0 is no longer available * Make `publishTransaction` idempotent (#711) Bitcoin core returns an error `missing inputs (code: -25)` if the tx that we want to publish has already been published and its output have been spent. When we receive this error, we try to get the tx, in order to know if it is in the blockchain, or if its inputs were spent by another tx. Note: If the outputs of the tx were still unspent, bitcoin core would return "transaction already in block chain (code: -27)" and this is already handled. * Improved eclair-cli (#718) This fixes #695, and also adds the channel point in the default channel output. ```bash $ ./eclair-cli channel 00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46 { "nodeId": "0232e20e7b68b9b673fb25f48322b151a93186bffe4550045040673797ceca43cf", "shortChannelId": "845230006070001", "channelId": "00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46", "state": "NORMAL", "balanceSat": 9858759, "capacitySat": 10000000, "channelPoint": "470eafa146785a21a3eb55f4d327969b511f08cbb61b566537f94ad9564dfd00:1" } ``` * Handle update relay fee in OFFLINE state (#719) Previously it was only possible to update relay fee in NORMAL state, which is not very convenient because most of the time there are always some channels in OFFLINE state. This works like the NORMAL case, except that the new `channel_update` won't be broadcast immediately. It will be sent out next time the channel goes back to NORMAL, in the same `channel_update` that sets the `enable` flag to true. Also added a default handler that properly rejects the CMD_UPDATE_RELAY_FEE command in all other states. * Fixed regression caused by 7a4f175 (#722) When updating relay fee in state OFFLINE, the new channel_update must have the disabled flag on. This caused tests to be flaky, added necessary checks to always make them fail in case that kind of regression happens again. * Logging: use a rolling file appender (#721) * Logging: use a rolling file appender Use one file per day, keep 90 days of logs with a total maximum size capped at 5 Gb * Router: log routing broadcast in debug level only * set version to 0.2-beta6 * set version back to 0.2-SNAPSHOT * Simplify bitcoind version check (#731) Bitcoind returns version as MMmmrr (major, minor, revision), use an int representation and compare it to our minimum version target. * Update scalatest and remove junit runner (#728) * updated to scalatest 3.0.5 * use scalatest runner instead of junit Output is far more readable, and makes console (incl. travis) reports actually usable. Turned off test logs as error reporting is enough to figure out what happens. The only downside is that we can't use junit's categories to group tests, like we did for docker related tests. We could use nested suites, but that seems to be overkill so I just removed the categories. Users will only have the possibility to either skip/run all tests. * update scala-maven-plugin to 3.4.2 NB: This requires maven 3.5.4, which means that we currently need to manually install maven on travis. Also updated Docker java version to 8u181 (8u171 for compiling). * Add instructions for Bitcoin Core 0.17.0 [ci skip] (#732) * Add instructions for Bitcoin Core 0.17.0 [ci skip] Bitcoin Core 0.17.0 deprecates the `signrawtransaction` RPC call, which will be removed in version 0.18.0, you need to enable this call if you want your eclair node to use a 0.1.70 node. * README: add an example of how to use the new bitcoin.conf sections [ci skip] * Only persist trimmed htlcs (#724) We persist htlc data in order to be able to claim htlc outputs in case a revoked tx is published by our counterparty, so only htlcs above remote's `dust_limit` matter. Removed the TODO because we need data to be indexed by commit number so it is ok to write the same htlc data for every commitment it is included in. * set version to 0.2-beta7 * set version to 0.2-SNAPSHOT * Add `htlcMaximumMsat` field to `ChannelUpdate` message (#738) * Add `htlcMaximumMsat` field to `ChannelUpdate` message * added compatibility test with c-lightning * Fix encoding of FinalIncorrectHtlcAmount error message (#740) * set version to 0.2-beta8 * set version to 0.2-SNAPSHOT * Always add 1 block to the `finalCltvExpiry` (#742) This fixes #651. * ignore IntegrationSpec (no server on android) * back to SNAPSHOT * use proper [gs]etNullableLong method for Sqlite
2018-10-25 17:50:48 +02:00
<skipTests>true</skipTests>
</configuration>
</plugin>
<!-- enable scalatest -->
<plugin>
<groupId>org.scalatest</groupId>
<artifactId>scalatest-maven-plugin</artifactId>
<version>2.0.0</version>
<configuration>
<parallel>false</parallel>
<systemProperties>
<buildDirectory>${project.build.directory}</buildDirectory>
Update Android branch (#746) * Fixed regression in rebroadcast (#713) Fixed regression caused by 2c1811d: we now don't force sending a channel_update at the same time with channel_announcement. This greatly simplifies the rebroadcast logic, and is what caused the integration test to fail. Added proper test on Peer, testing the actor, not only static methods. * Routing sync fixes (#712) * Router: reset sync state on reconnection When we're reconnected to a peer we will start a new sync process and should reset our sync state with that peer. * Ignore 'origin htlc not found' in CLOSING (#708) If we don't have the origin, it means that we already have forwarded the fulfill so that's not a big deal. This can happen if they send a signature containing the fulfill, then fail the channel before we have time to sign it. * Fix handling of born again channels (#717) * Fix handling of born again channels When we receive a recent update for a channel that we had marked as stale we must send a query to the underlying transport, not the origin of the update (which would send the query back to the router) * Replace `update_fee` in commitments (#709) This is a simple optimisation, we don't have to keep all `update_fee`, just the last one. cf BOLT 2: > An update_fee message is sent by the node which is paying the Bitcoin fee. Like any update, it's first committed to the receiver's commitment transaction and then (once acknowledged) committed to the sender's. Unlike an HTLC, update_fee is never closed but simply replaced. * Tests: use bitcoind 0.16.3 (#715) Bitcoind 0.16.0 is no longer available * Make `publishTransaction` idempotent (#711) Bitcoin core returns an error `missing inputs (code: -25)` if the tx that we want to publish has already been published and its output have been spent. When we receive this error, we try to get the tx, in order to know if it is in the blockchain, or if its inputs were spent by another tx. Note: If the outputs of the tx were still unspent, bitcoin core would return "transaction already in block chain (code: -27)" and this is already handled. * Improved eclair-cli (#718) This fixes #695, and also adds the channel point in the default channel output. ```bash $ ./eclair-cli channel 00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46 { "nodeId": "0232e20e7b68b9b673fb25f48322b151a93186bffe4550045040673797ceca43cf", "shortChannelId": "845230006070001", "channelId": "00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46", "state": "NORMAL", "balanceSat": 9858759, "capacitySat": 10000000, "channelPoint": "470eafa146785a21a3eb55f4d327969b511f08cbb61b566537f94ad9564dfd00:1" } ``` * Handle update relay fee in OFFLINE state (#719) Previously it was only possible to update relay fee in NORMAL state, which is not very convenient because most of the time there are always some channels in OFFLINE state. This works like the NORMAL case, except that the new `channel_update` won't be broadcast immediately. It will be sent out next time the channel goes back to NORMAL, in the same `channel_update` that sets the `enable` flag to true. Also added a default handler that properly rejects the CMD_UPDATE_RELAY_FEE command in all other states. * Fixed regression caused by 7a4f175 (#722) When updating relay fee in state OFFLINE, the new channel_update must have the disabled flag on. This caused tests to be flaky, added necessary checks to always make them fail in case that kind of regression happens again. * Logging: use a rolling file appender (#721) * Logging: use a rolling file appender Use one file per day, keep 90 days of logs with a total maximum size capped at 5 Gb * Router: log routing broadcast in debug level only * set version to 0.2-beta6 * set version back to 0.2-SNAPSHOT * Simplify bitcoind version check (#731) Bitcoind returns version as MMmmrr (major, minor, revision), use an int representation and compare it to our minimum version target. * Update scalatest and remove junit runner (#728) * updated to scalatest 3.0.5 * use scalatest runner instead of junit Output is far more readable, and makes console (incl. travis) reports actually usable. Turned off test logs as error reporting is enough to figure out what happens. The only downside is that we can't use junit's categories to group tests, like we did for docker related tests. We could use nested suites, but that seems to be overkill so I just removed the categories. Users will only have the possibility to either skip/run all tests. * update scala-maven-plugin to 3.4.2 NB: This requires maven 3.5.4, which means that we currently need to manually install maven on travis. Also updated Docker java version to 8u181 (8u171 for compiling). * Add instructions for Bitcoin Core 0.17.0 [ci skip] (#732) * Add instructions for Bitcoin Core 0.17.0 [ci skip] Bitcoin Core 0.17.0 deprecates the `signrawtransaction` RPC call, which will be removed in version 0.18.0, you need to enable this call if you want your eclair node to use a 0.1.70 node. * README: add an example of how to use the new bitcoin.conf sections [ci skip] * Only persist trimmed htlcs (#724) We persist htlc data in order to be able to claim htlc outputs in case a revoked tx is published by our counterparty, so only htlcs above remote's `dust_limit` matter. Removed the TODO because we need data to be indexed by commit number so it is ok to write the same htlc data for every commitment it is included in. * set version to 0.2-beta7 * set version to 0.2-SNAPSHOT * Add `htlcMaximumMsat` field to `ChannelUpdate` message (#738) * Add `htlcMaximumMsat` field to `ChannelUpdate` message * added compatibility test with c-lightning * Fix encoding of FinalIncorrectHtlcAmount error message (#740) * set version to 0.2-beta8 * set version to 0.2-SNAPSHOT * Always add 1 block to the `finalCltvExpiry` (#742) This fixes #651. * ignore IntegrationSpec (no server on android) * back to SNAPSHOT * use proper [gs]etNullableLong method for Sqlite
2018-10-25 17:50:48 +02:00
</systemProperties>
Better logic for sending `channel_updates` (#888) * don't spam with channel_updates at startup Previous logic was very simple but naive: - every time a channel_update changed we would send it out - we would always make a new channel_update with the disabled flag set at startup. In case our node was simply restarted, this resulted in us re-sending a channel_update with the disabled flag set, then a second one with the disabled flag unset a few seconds later, for each public channel. On top of that, this opened way to a bug: if reconnection is very fast, then the two successive channel_update will have the same timestamp, causing the router to not send the second one, which means that the channel would be considered disabled by the network, and excluded from payments. The new logic is as follows: - when we do NORMAL->NORMAL or NORMAL->OFFLINE or OFFLINE->NORMAL, we send out the new channel_update if it has changed - in all other case (e.g. WAIT_FOR_INIT_INTERNAL->OFFLINE) we do nothing As a side effect, if we were connected to a peer, then we shut down eclair, then the peer goes down, then we restart eclair: we will make a new channel_update with the disabled flag set but we won't broadcast it. If someone tries to make a payment to that node, we will return the new channel_update with disabled flag set (and maybe the payer will then broadcast that channel_update). So even in that corner case we are good. * quick reconnection: bump channel_update timestamp In case of a disconnection-reconnection, we first generate a channel_update with disabled bit set, then after we reconnect we generate a second channel_update with disabled bit not set. If this happens very quickly, then both channel_updates will have the same timestamp, and the second one will get ignored by the network. A simple fix is to bump the second timestamp in this case. * set channel_update refresh timer at reconnection We only care about this timer when connected anyway. We also cancel it when disconnecting. This has several advantages: - having a static task resulted in unnecessary refresh if the channel got disconnected/reconnected in between 2 weeks - better repartition of the channel_update refresh over time because at startup all channels were generated at the same time causing all refresh tasks to be synchronized - less overhead for the scheduler (because we cancel refresh task for offline channels (minor, but still)
2019-03-18 14:39:29 +01:00
<argLine>-Xmx1024m</argLine>
2015-09-08 19:36:57 +02:00
</configuration>
Update Android branch (#746) * Fixed regression in rebroadcast (#713) Fixed regression caused by 2c1811d: we now don't force sending a channel_update at the same time with channel_announcement. This greatly simplifies the rebroadcast logic, and is what caused the integration test to fail. Added proper test on Peer, testing the actor, not only static methods. * Routing sync fixes (#712) * Router: reset sync state on reconnection When we're reconnected to a peer we will start a new sync process and should reset our sync state with that peer. * Ignore 'origin htlc not found' in CLOSING (#708) If we don't have the origin, it means that we already have forwarded the fulfill so that's not a big deal. This can happen if they send a signature containing the fulfill, then fail the channel before we have time to sign it. * Fix handling of born again channels (#717) * Fix handling of born again channels When we receive a recent update for a channel that we had marked as stale we must send a query to the underlying transport, not the origin of the update (which would send the query back to the router) * Replace `update_fee` in commitments (#709) This is a simple optimisation, we don't have to keep all `update_fee`, just the last one. cf BOLT 2: > An update_fee message is sent by the node which is paying the Bitcoin fee. Like any update, it's first committed to the receiver's commitment transaction and then (once acknowledged) committed to the sender's. Unlike an HTLC, update_fee is never closed but simply replaced. * Tests: use bitcoind 0.16.3 (#715) Bitcoind 0.16.0 is no longer available * Make `publishTransaction` idempotent (#711) Bitcoin core returns an error `missing inputs (code: -25)` if the tx that we want to publish has already been published and its output have been spent. When we receive this error, we try to get the tx, in order to know if it is in the blockchain, or if its inputs were spent by another tx. Note: If the outputs of the tx were still unspent, bitcoin core would return "transaction already in block chain (code: -27)" and this is already handled. * Improved eclair-cli (#718) This fixes #695, and also adds the channel point in the default channel output. ```bash $ ./eclair-cli channel 00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46 { "nodeId": "0232e20e7b68b9b673fb25f48322b151a93186bffe4550045040673797ceca43cf", "shortChannelId": "845230006070001", "channelId": "00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46", "state": "NORMAL", "balanceSat": 9858759, "capacitySat": 10000000, "channelPoint": "470eafa146785a21a3eb55f4d327969b511f08cbb61b566537f94ad9564dfd00:1" } ``` * Handle update relay fee in OFFLINE state (#719) Previously it was only possible to update relay fee in NORMAL state, which is not very convenient because most of the time there are always some channels in OFFLINE state. This works like the NORMAL case, except that the new `channel_update` won't be broadcast immediately. It will be sent out next time the channel goes back to NORMAL, in the same `channel_update` that sets the `enable` flag to true. Also added a default handler that properly rejects the CMD_UPDATE_RELAY_FEE command in all other states. * Fixed regression caused by 7a4f175 (#722) When updating relay fee in state OFFLINE, the new channel_update must have the disabled flag on. This caused tests to be flaky, added necessary checks to always make them fail in case that kind of regression happens again. * Logging: use a rolling file appender (#721) * Logging: use a rolling file appender Use one file per day, keep 90 days of logs with a total maximum size capped at 5 Gb * Router: log routing broadcast in debug level only * set version to 0.2-beta6 * set version back to 0.2-SNAPSHOT * Simplify bitcoind version check (#731) Bitcoind returns version as MMmmrr (major, minor, revision), use an int representation and compare it to our minimum version target. * Update scalatest and remove junit runner (#728) * updated to scalatest 3.0.5 * use scalatest runner instead of junit Output is far more readable, and makes console (incl. travis) reports actually usable. Turned off test logs as error reporting is enough to figure out what happens. The only downside is that we can't use junit's categories to group tests, like we did for docker related tests. We could use nested suites, but that seems to be overkill so I just removed the categories. Users will only have the possibility to either skip/run all tests. * update scala-maven-plugin to 3.4.2 NB: This requires maven 3.5.4, which means that we currently need to manually install maven on travis. Also updated Docker java version to 8u181 (8u171 for compiling). * Add instructions for Bitcoin Core 0.17.0 [ci skip] (#732) * Add instructions for Bitcoin Core 0.17.0 [ci skip] Bitcoin Core 0.17.0 deprecates the `signrawtransaction` RPC call, which will be removed in version 0.18.0, you need to enable this call if you want your eclair node to use a 0.1.70 node. * README: add an example of how to use the new bitcoin.conf sections [ci skip] * Only persist trimmed htlcs (#724) We persist htlc data in order to be able to claim htlc outputs in case a revoked tx is published by our counterparty, so only htlcs above remote's `dust_limit` matter. Removed the TODO because we need data to be indexed by commit number so it is ok to write the same htlc data for every commitment it is included in. * set version to 0.2-beta7 * set version to 0.2-SNAPSHOT * Add `htlcMaximumMsat` field to `ChannelUpdate` message (#738) * Add `htlcMaximumMsat` field to `ChannelUpdate` message * added compatibility test with c-lightning * Fix encoding of FinalIncorrectHtlcAmount error message (#740) * set version to 0.2-beta8 * set version to 0.2-SNAPSHOT * Always add 1 block to the `finalCltvExpiry` (#742) This fixes #651. * ignore IntegrationSpec (no server on android) * back to SNAPSHOT * use proper [gs]etNullableLong method for Sqlite
2018-10-25 17:50:48 +02:00
<executions>
<execution>
<id>test</id>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
2015-09-08 19:36:57 +02:00
</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>org.scalatest</groupId>
<artifactId>scalatest_${scala.version.short}</artifactId>
Update Android branch (#746) * Fixed regression in rebroadcast (#713) Fixed regression caused by 2c1811d: we now don't force sending a channel_update at the same time with channel_announcement. This greatly simplifies the rebroadcast logic, and is what caused the integration test to fail. Added proper test on Peer, testing the actor, not only static methods. * Routing sync fixes (#712) * Router: reset sync state on reconnection When we're reconnected to a peer we will start a new sync process and should reset our sync state with that peer. * Ignore 'origin htlc not found' in CLOSING (#708) If we don't have the origin, it means that we already have forwarded the fulfill so that's not a big deal. This can happen if they send a signature containing the fulfill, then fail the channel before we have time to sign it. * Fix handling of born again channels (#717) * Fix handling of born again channels When we receive a recent update for a channel that we had marked as stale we must send a query to the underlying transport, not the origin of the update (which would send the query back to the router) * Replace `update_fee` in commitments (#709) This is a simple optimisation, we don't have to keep all `update_fee`, just the last one. cf BOLT 2: > An update_fee message is sent by the node which is paying the Bitcoin fee. Like any update, it's first committed to the receiver's commitment transaction and then (once acknowledged) committed to the sender's. Unlike an HTLC, update_fee is never closed but simply replaced. * Tests: use bitcoind 0.16.3 (#715) Bitcoind 0.16.0 is no longer available * Make `publishTransaction` idempotent (#711) Bitcoin core returns an error `missing inputs (code: -25)` if the tx that we want to publish has already been published and its output have been spent. When we receive this error, we try to get the tx, in order to know if it is in the blockchain, or if its inputs were spent by another tx. Note: If the outputs of the tx were still unspent, bitcoin core would return "transaction already in block chain (code: -27)" and this is already handled. * Improved eclair-cli (#718) This fixes #695, and also adds the channel point in the default channel output. ```bash $ ./eclair-cli channel 00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46 { "nodeId": "0232e20e7b68b9b673fb25f48322b151a93186bffe4550045040673797ceca43cf", "shortChannelId": "845230006070001", "channelId": "00fd4d56d94af93765561bb6cb081f519b9627d3f455eba3215a7846a1af0e46", "state": "NORMAL", "balanceSat": 9858759, "capacitySat": 10000000, "channelPoint": "470eafa146785a21a3eb55f4d327969b511f08cbb61b566537f94ad9564dfd00:1" } ``` * Handle update relay fee in OFFLINE state (#719) Previously it was only possible to update relay fee in NORMAL state, which is not very convenient because most of the time there are always some channels in OFFLINE state. This works like the NORMAL case, except that the new `channel_update` won't be broadcast immediately. It will be sent out next time the channel goes back to NORMAL, in the same `channel_update` that sets the `enable` flag to true. Also added a default handler that properly rejects the CMD_UPDATE_RELAY_FEE command in all other states. * Fixed regression caused by 7a4f175 (#722) When updating relay fee in state OFFLINE, the new channel_update must have the disabled flag on. This caused tests to be flaky, added necessary checks to always make them fail in case that kind of regression happens again. * Logging: use a rolling file appender (#721) * Logging: use a rolling file appender Use one file per day, keep 90 days of logs with a total maximum size capped at 5 Gb * Router: log routing broadcast in debug level only * set version to 0.2-beta6 * set version back to 0.2-SNAPSHOT * Simplify bitcoind version check (#731) Bitcoind returns version as MMmmrr (major, minor, revision), use an int representation and compare it to our minimum version target. * Update scalatest and remove junit runner (#728) * updated to scalatest 3.0.5 * use scalatest runner instead of junit Output is far more readable, and makes console (incl. travis) reports actually usable. Turned off test logs as error reporting is enough to figure out what happens. The only downside is that we can't use junit's categories to group tests, like we did for docker related tests. We could use nested suites, but that seems to be overkill so I just removed the categories. Users will only have the possibility to either skip/run all tests. * update scala-maven-plugin to 3.4.2 NB: This requires maven 3.5.4, which means that we currently need to manually install maven on travis. Also updated Docker java version to 8u181 (8u171 for compiling). * Add instructions for Bitcoin Core 0.17.0 [ci skip] (#732) * Add instructions for Bitcoin Core 0.17.0 [ci skip] Bitcoin Core 0.17.0 deprecates the `signrawtransaction` RPC call, which will be removed in version 0.18.0, you need to enable this call if you want your eclair node to use a 0.1.70 node. * README: add an example of how to use the new bitcoin.conf sections [ci skip] * Only persist trimmed htlcs (#724) We persist htlc data in order to be able to claim htlc outputs in case a revoked tx is published by our counterparty, so only htlcs above remote's `dust_limit` matter. Removed the TODO because we need data to be indexed by commit number so it is ok to write the same htlc data for every commitment it is included in. * set version to 0.2-beta7 * set version to 0.2-SNAPSHOT * Add `htlcMaximumMsat` field to `ChannelUpdate` message (#738) * Add `htlcMaximumMsat` field to `ChannelUpdate` message * added compatibility test with c-lightning * Fix encoding of FinalIncorrectHtlcAmount error message (#740) * set version to 0.2-beta8 * set version to 0.2-SNAPSHOT * Always add 1 block to the `finalCltvExpiry` (#742) This fixes #651. * ignore IntegrationSpec (no server on android) * back to SNAPSHOT * use proper [gs]etNullableLong method for Sqlite
2018-10-25 17:50:48 +02:00
<version>3.0.5</version>
2015-08-19 13:57:05 +02:00
<scope>test</scope>
</dependency>
</dependencies>
</project>