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

2640 commits

Author SHA1 Message Date
Bastien Teinturier
cfdb0885f8
Extensible Liquidity Ads (#2848)
* Add support for extensible liquidity ads

The initiator of `open_channel2`, `tx_init_rbf` and `splice_init` can
request funding from the remote node. The non-initiator node will:

- let the open-channel-interceptor plugin decide whether to provide
  liquidity for new channels or not, and how much
- always honor liquidity requests on existing channels (RBF and splice)
  when funding rates have been configured

Liquidity ads are included in the `node_announcement` message, which
lets buyers compare sellers and connect to sellers that provide rates
they are comfortable with. They are also included in the `init` message
which allows providing different rates to specific peers.

This implements https://github.com/lightning/bolts/pull/1153. We
currently use the temporary tlv tag 1339 while we're waiting for
feedback on the spec proposal.

* Add `channelCreationFee` to liquidity ads

Creating a new channel has an additional cost compared to adding
liquidity to an existing channel: the channel will be closed in the
future, which will require paying on-chain fees. Node operators can
include a `channel-creation-fee-satoshis` in their liquidity ads to
cover some of that future cost.

* Add liquidity purchases to the `AuditDb`

Whenever liquidity is purchased, we store it in the `AuditDb`. This lets
node operators gather useful statistics on their peers, and which ones
are actively using the liquidity that is purchased.

We store minimal information about the liquidity ads itself to be more
easily compatible with potential changes in the spec.
2024-09-24 10:50:17 +02:00
Bastien Teinturier
885b45bd75
Allow including routing hints when creating Bolt 11 invoice (#2909)
When nodes only have private channels, they must include routing hints
in their Bolt 11 invoices to be able to receive payments. We add a
parameter to the `createinvoice` RPC for this. Note that this may leak
the channel outpoint if `scid_alias` isn't used.

Fixes #2802
2024-09-23 09:43:58 +02:00
Bastien Teinturier
7b25c5adca
Include faulty TLV tag in InvalidOnionPayload error (#2908)
We have a couple of such errors in our logs for blinded payment relay,
and we currently don't know what the sender did wrong because we don't
log the faulty TLV tag. This should make it easier to debug.
2024-09-18 15:33:42 +02:00
DerEwige
a710922729
Ignore LND mutual close errors instead of force-closing (#2907)
Older lnd nodes are unable to mutual close channels while HTLCs are
in-flight. This triggers unexpected force-closes which can be costly
for node operators. We ignore the errors coming from lnd that match
this case to avoid that.
2024-09-16 19:05:51 +02:00
Fabrice Drouin
1ff5697267
Use bitcoin-lib 0.34 (#2905)
* Use bitcoin-lib 0.34

Includes support for testnet4.
2024-09-10 17:52:10 +02:00
Fabrice Drouin
d726ca19fc
Update CI test with latest bitcoin core (switch from autotools to cmake) (#2906)
* Update CI test with latest bitcoin core (switch from autotools to cmake)

bitcoin core now uses cmake instead of autotools.
CI test is triggered by a cron job but can now also be triggered manually.
2024-09-10 16:42:11 +02:00
Bastien Teinturier
8370fa29c0
Reduce the number of RPC calls to bitcoind during force-close (#2902)
* Don't spawn anchor tx publisher if commit is confirmed

It is inefficient to spawn a tx publisher for anchor txs if we already
know that the commit tx is confirmed: we will make calls to our bitcoin
node that can easily be avoided. This can matter when force-closing a
large number of channels with frequent disconnections (e.g. wallets).

* Improve `TxTimeLocksMonitor` performance

When publishing a transaction that has CSV delays, we previously used
the watcher and set a `minDepth` on the parent transaction matching
the CSV delay of the child transaction. While this was very simple,
it was unnecessarily expensive for large CSV delays: the watcher would
check for tx confirmations at every block, even when the CSV delay is
very large. When we force-close a large number of channels, it results
in a very large number of RPC calls to our `bitcoind` node.

We don't use the watcher in the `TxTimeLocksMonitor` anymore: instead
we check the parent confirmations once, and then we check again after
the CSV delay.

* Add relative delay hints to `ZmqWatcher`

When we tell the `ZmqWatcher` to watch for confirmations on transactions
that have a relative delay, it is highly inefficient to call our bitcoin
node at every new block to check for confirmations (especially when the
parent transaction isn't even confirmed). We now tell the watcher about
the relative delay, which lets it check for confirmations only at block
heights where we expect the transaction to reach its minimum depth. This
is especially useful to improve performance for delayed transactions
that usually use a CSV of at least 720 blocks.
2024-09-05 14:48:01 +02:00
Bastien Teinturier
fcd88b0a0a
Wake up wallet nodes before relaying messages or payments (#2865)
We refactor `NodeRelay.scala` to re-order some steps. The steps are:

1. Fully receive the incoming payment
2. Resolve the next node (unwrap blinded paths if needed)
3. Wake-up the next node if necessary (mobile wallet)
4. Relay outgoing payment

Note that we introduce a wake-up step, that can be extended to include
mobile notifications. We introduce that same wake-up step in channel
relay and message relay. We also allow relaying data to contain a wallet
`node_id` instead of an scid. When that's the case, we start by waking
up that wallet node before we try relaying onion messages or payments.

This wake-up step doesn't contain any logic right now apart from waiting
for the peer to connect, if it isn't connected already. But it can easily be
extended to send a mobile notification to prompt the wallet to connect.
2024-08-28 09:43:11 +02:00
Thomas HUET
c440007b52
Fix failure to launch from directory with space in it (#2886)
Co-authored-by: Pierre-Marie Padiou <pm47@users.noreply.github.com>
2024-08-23 10:52:29 +02:00
rorp
c45d2784b5
Pagination for the channelstats RPC (#2890) 2024-08-01 08:51:42 +02:00
Thomas HUET
7aacd4b460
Add HTLC endorsement/confidence (#2884)
Implements https://github.com/lightning/blips/pull/27, a subsequent PR will implement a confidence estimator.
2024-07-31 12:00:56 +02:00
Thomas HUET
e298ba96ea
Offer test vectors (#2723)
Add test vectors from https://github.com/lightning/bolts/pull/798
Update the TLV ranges for offers and invoice requests
2024-07-19 14:19:29 +02:00
Thomas HUET
83d790e1f1
Add incoming peer to Hot.Channel (#2883) 2024-07-18 10:55:42 +02:00
Fabrice Drouin
86373b4411
Reject new static_remote_key channels (#2881)
* Reject new static_remote_key channels

We will still load and use existing static_remote_key channels, we can still open static_remote_key channels, but we will not accept new static_remote_key channels.
This behaviour can be overridden by setting `eclair.channel.accept-incoming-static-remote-key-channels` to `true`.

* Reject new obsolete incoming channels

We reject new incoming channels that don't even support `option_static_remotekey` (which is assumed to be on in the BOLTs).
Unit tests have been modified to use static_remote_key or anchor channels (default used to be the obsolete "standard" channel).

---------

Co-authored-by: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2024-07-16 17:11:41 +02:00
Bastien Teinturier
f8d6acb326
Add logs to onion message relay (#2880)
There weren't any logs when relaying onion messages, which makes it
impossible to troubleshoot. While we're working on cross-compatibility,
we keep those logs at the `INFO` level, and will change some of them to
`DEBUG` once stabilized.
2024-07-15 09:50:50 +02:00
Pierre-Marie Padiou
14a4ea45b1
Upgrade kamon to 2.7.3 (#2879)
Also add an exclusion on kamon-prometheus. The exclusion was previously only present in `eclair-node/pom.xml`.
2024-07-12 14:17:26 +02:00
Bastien Teinturier
eaa9e400c4
Activate route blinding and quiescence features (#2878)
We support those two features and they have been added to the BOLTs.
We start advertising that we support them by default.
2024-07-11 16:53:38 +02:00
Thomas HUET
47c7a45767
Monitor onion messages (#2877)
Improve metrics for for onion messages.
We count messages sent and received, throttled and that couldn't be relayed.
2024-07-11 10:49:57 +02:00
Thomas HUET
9762af8bef
Update test vector for onion messages (#2876)
Copied test vectors from https://github.com/lightning/bolts/blob/master/bolt04/blinded-onion-message-onion-test.json
Also improve JSON parsing
2024-07-10 12:29:08 +02:00
Bastien Teinturier
791edf78b6
Improve Origin and Upstream (#2872)
We move the `Upstream` trait closer to the `Origin`, and make it more
obvious than a hot `Origin` is:

- an `Upstream` referencing the upstream HTLCs
- an actor requesting the outgoing payment

We also improve the cold trampoline relay class to record the incoming
HTLC amount, which we previously didn't bother encoding but is useful to
compute the fees collected during relay. To ensure backwards-compat, it
is set to `0 msat` for pending HTLCs. It will only affect HTLCs that
were pending during the upgrade, which is acceptable.
2024-06-27 16:28:15 +02:00
Bastien Teinturier
c53b32c781
Reject unspendable inputs in interactive-tx (#2870)
When we require inputs to be confirmed, we can reliably check whether
they are unspent. We can't reliably check this for unconfirmed inputs,
because they could be valid but simply not in our mempool, in which
case bitcoind would incorrectly consider them unspendable.

We want to reject unspendable inputs early to immediately fail the
funding attempt, instead of waiting to detect the double-spend later.
2024-06-26 16:17:17 +02:00
Richard Myers
71bad3a210
Update Bitcoin Core to v27.1 (#2862)
Bitcoin Core 27.1 adds the coingrinder coin selection algorithm which will help lower on-chain fees during feerate spikes.
2024-06-18 14:41:37 +02:00
Richard Myers
d960266445
Fix flaky test for punishing a published revoked commit (#2871)
A race exists because node C can publish the txs to spend the htlcs from the revoked commitment *before* F publishes their txs to spend two of the htlc outputs.

 Instead we handle the rare case of a `txn-mempool-conflict` failure.

 We will sometimes miss testing that C claims those two htlcs via 3rd stage txs.
2024-06-18 08:16:42 +02:00
Bastien Teinturier
3277e6d01c
Add EncodedNodeId for mobile wallets (#2867)
We define a new type of `EncodedNodeId` that can be provided in blinded
paths to let a wallet provider know that the next node is a mobile
wallet.
2024-06-13 09:27:19 +02:00
Bastien Teinturier
741ac492e2
Register can forward messages to nodes (#2863)
We add a `ForwardNodeId` command to the `Register` to forward messages
to a `Peer` actor based on its `node_id`.
2024-06-12 10:38:52 +02:00
Bastien Teinturier
f0e3985d10
Add paysCommitTxFees flag to LocalParams (#2845)
The channel initiator traditionally pays the commit tx fees, but we may
want to override that when providing services to wallet users. We thus
split the current `isInitiator` flag into two flags:

- `isChannelOpener`
- `paysCommitTxFees`

We always set `paysCommitTxFees` to the same value as `isChannelOpener`.
Custom feature bits may override that behavior if necessary.

Note that backwards compatibility is preserved since our previous `bool8`
codec encodes `true` as `0xff` and `false` as `0x00`.
2024-06-12 10:33:35 +02:00
Pierre-Marie Padiou
40f13f4de5
(Minor) Log local inputs in interactive-tx (#2864)
We do log all incoming/outgoing messages, including `TxAddInput`, but
the `toString()` prints the whole serialized tx, not the txid, making
grepping more difficult.

Co-authored-by: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2024-06-11 16:12:03 +02:00
Thomas HUET
3bb5f3e9f2
Unwrap blinded routes that start at our node (#2858)
Sending a payment to a blinded route that starts at our node can be tricky, we remove this problem by unwrapping such routes before starting the payment flow.

---------

Co-authored-by: t-bast <bastien@acinq.fr>
2024-06-07 16:07:05 +02:00
Bastien Teinturier
414f72898b
Accept onion failure without a channel_update (#2854)
https://github.com/lightning/bolts/pull/1163 makes the channel update in
onion failures optional. One reason for this change is that it can be a
privacy issue: by applying a `channel_update` received from an payment
attempt, you may reveal that you are the sender. Another reason is that
some nodes have been omitting that field for years (which was arguably
a bug), and it's better to be able to correctly handle such failures.
2024-06-04 16:48:31 +02:00
Thomas HUET
b73a009a1d
Cleanup of RouteBlinding feature (#2856)
RouteBlinding is not an invoice feature.
2024-05-22 10:47:18 +02:00
Thomas HUET
bbd52fab02
Fix TransactionsSpec tests (#2857)
TransactionsSpec reads test cases from the spec, however the spec was recently updated to remove half of the test cases.
2024-05-22 09:32:58 +02:00
Thomas HUET
c4934930aa
Implicit node id in offers with blinded paths (#2852)
To save space in the offer, we can skip the node id for offers that use blinded paths.
The node id used to sign the invoice will be the last blinded node id of the path used to request the invoice.

We also make the description optional for offers without amount.
2024-04-30 14:55:25 +02:00
Bastien Teinturier
35295af73c
Update Bitcoin Core to v26.1 (#2851)
Bitcoin Core 26.1 contains ancestor-aware funding: it will automatically
fetch unconfirmed ancestors during funding and adapt the fee to apply
the target feerate to the whole unconfirmed package.

We had custom code to implement this entirely in eclair, which we can
now remove.
2024-04-23 10:28:25 +02:00
Bastien Teinturier
c6e586ab89
Relax assumptions about gossip_queries (#2842)
https://github.com/lightning/bolts/pull/1092 initially made the
`gossip_queries` feature mandatory and assumed: however it generally
doesn't make sense for mobile wallets. It was thus relaxed in the last
commits of this BOLTs PR, so we revert our change to `mandatory` to
make this optional and avoid sending gossip queries to nodes who don't
activate the feature.
2024-04-16 17:45:24 +02:00
Pierre-Marie Padiou
7ab42bfad5
Remove redundant check on remoteScriptPubkey (#2844)
If the peer had `option_shutdown_anysegwit` enabled when they initially sent their `remoteScriptPubkey`, but reconnected later with `option_shutdown_anysegwit` disabled, then `isValidFinalScriptPubkey` may not pass anymore.
2024-04-11 13:50:49 +02:00
rorp
c8184b3e43
Update the CLI tools (#2837)
The latest eclair release added some RPCs that were missing from the CLI documentation.
2024-03-13 10:47:20 +01:00
Richard Myers
40ef3655cf
Fixup quiescence timeout when initiating splice (#2836)
Should use the quiescence timeout value instead of the revocation timeout value (copy-paste error) when initiating a splice.
2024-03-11 16:21:17 +01:00
Thomas HUET
1b3e4b0dae
Allow relaying messages to self (#2834)
Allow sending messages to self

Fixes corner cases caused by compact encoding of node ids. Every message to be relayed now follows the same path and `MessageRelay` can relay to self.
2024-03-04 15:44:55 +01:00
Bastien Teinturier
c866be321c
Fix flaky test (#2833)
We started using dual-funding by default in some integration tests. One
of the changes is that we consider the channel created once we send our
commitment signatures. At that point, we are not yet in a state where
we have fully signed commitments: that will happen once we receive our
peer's signatures.

Some tests assumed that when receiving the `ChannelCreated` event, we
would have fully signed commitment. We update those tests to handle the
case where we are actually still exchanging signatures.
2024-02-29 14:47:42 +01:00
Fabrice Drouin
82dbbdbf3f
Use bitcoin-lib 0.33 (#2822) 2024-02-29 14:20:37 +01:00
Bastien Teinturier
145d0f4860
Back to dev (#2832)
After the v0.10.0 release.
2024-02-29 10:35:38 +01:00
Bastien Teinturier
a63d2c2909
Eclair v0.10.0 release (#2831) 2024-02-28 17:39:44 +01:00
Bastien Teinturier
8723d355c4
Activate dual funding by default (#2825)
And update the release notes.
2024-02-28 15:57:12 +01:00
Bastien Teinturier
fd0cdf6fc1
Allow plugins to set a dual funding contribution (#2829)
We support dual funding, but we cannot decide for the node operator when
to contribute to channels that are being opened to us. Node operators
may want very different policies depending on their goals. Instead of
trying to figure out a general set of policies, we let plugins decide
when to contribute to channels and how much. Node operators are thus
free to implement whatever logic makes sense for them in a plugin.
2024-02-27 17:03:21 +01:00
Bastien Teinturier
36a3c8897c
More fine grained support for fee diff errors (#2815)
When there is a mismatch between the feerate of a channel and the
feerate we get from our estimator, we may want to force-close because
that could be exploited by our peer to steal HTLCs. But that's only the
case if the feerate is too low, not if it's too high. We previously
force-closed in both cases, whereas we only need to do it when the
feerate is too low.

This should avoid some unnecessary force-close that we've observed and
are due to buggy fee estimators (fee estimation is hard!), or to peers
who simply do some smoothing and slightly delay lowering the feerate of
our channels.
2024-02-27 13:52:01 +01:00
Bastien Teinturier
5d6a1db9fb
Skip anchor tx when remote commit has been evicted (#2830)
When we detect that the remote commit has been published, we spend our
anchor output from that commit if the fees are too low and we have funds
at risk. But if the remote commit is then evicted from our mempool, we
cannot publish our anchor tx and must instead skip it, since we don't
provide the fully signed remote commitment to the publisher.

We otherwise error when calling `fundrawtransaction`, where `bitcoind`
fails because it cannot find the external non-wallet utxo. This change
gets rid of those errors that can be quite confusing for node operators.
2024-02-22 09:21:13 +01:00
Bastien Teinturier
cd4d9fd4b0
Unlock non-wallet inputs (#2828)
When funding a transaction that contains inputs that are external to our
bitcoin wallet, bitcoin core will add a lock to those external inputs,
thinking that they may be wallet inputs that it doesn't know about yet.
In our case, those are never wallet inputs, they are instead:

- the current channel output, when creating a splice transaction
- an output of the commitment transaction, when force-closing

We previously explicitly filtered those inputs before calling `unlock`,
which was wrong. We now also unlock those utxos.
2024-02-22 09:20:27 +01:00
Bastien Teinturier
0393cfc275
Add require_confirmed_inputs to RBF messages (#2783)
This was missing from the spec, but is more flexible and clearer than
inheriting values from the previous attempt.

Fixes #2782
2024-02-21 17:50:12 +01:00
Pierre-Marie Padiou
e32044f05f
Unlock utxos on reconnect when signatures haven't been sent (#2827)
In the case where we have not sent our `TxSignatures`, and our peer replies with an error at reconnection, we can safely unlock our local inputs.
2024-02-20 15:00:23 +01:00
Thomas HUET
86c483708a
Relay onion messages to compact node id (#2821)
To save space, blinded routes may use a compact node id (scid + direction instead of public key) as an introduction node.
When using such a compact route, the sender must use it's knowledge of the network to convert that to a public key, however trampoline users don't have that knowledge, they must transmit the compact route to the trempoline provider.
We extend the spec to allow compact node ids in the `next_node_id` field.


Co-authored-by: t-bast <bastien@acinq.fr>
2024-02-19 16:25:00 +01:00