Commit graph

306 commits

Author SHA1 Message Date
Matt Corallo
1d30e06893 Rewrite test_update_fee_that_funder_cannot_afford to avoid magic
Instead of magic hard-coded constants, its better for tests to
derive the values used so that they change if constants are changed
and so that it is easier to re-derive constants in the future as
needed.
2021-11-23 01:20:43 +00:00
Matt Corallo
a33d3b98d7 Make Channel::commit_tx_fee_msat static and take fee explicitly
This may avoid risk of bugs in the future as it requires the caller
to think about the fee being used, not just blindly use the current
(committed) channel feerate.
2021-11-22 23:27:25 +00:00
Antoine Riard
c3c0e60226 Check outbound update_fee affordance incremented with holding cell HTLCs 2021-11-22 16:32:47 -05:00
Antoine Riard
efd9ad22fc Introduce CommitmentStats 2021-11-21 21:28:22 -05:00
Antoine Riard
ab11f450b6 Check we won't overflow max_dust_htlc_exposure_msat at outbound feerate update 2021-11-19 21:15:14 -05:00
Antoine Riard
31975c5994 Cancel the outbound feerate update if above what we can afford 2021-11-19 16:16:24 -05:00
Antoine Riard
ee7c5b572b Introduce new helper commit_tx_fee_sat 2021-11-17 17:49:36 -05:00
Matt Corallo
358292141a Automatically close channels that go unfunded for 2016 blocks
As recommended by BOLT 2 added in
https://github.com/lightningnetwork/lightning-rfc/pull/839
2021-11-16 21:44:35 +00:00
Matt Corallo
b288a2739a Return ClosureReason from Channel chain update methods
This fixes a few `ClosureReason`s and allows us to have
finer-grained user-visible errors when a channel closes due to an
on-chain event.
2021-11-16 21:44:35 +00:00
Matt Corallo
4a3139d24d
Merge pull request #1161 from TheBlueMatt/2021-11-fix-chan-type-ser
Correct Channel type serialization logic
2021-11-16 18:18:01 +00:00
Matt Corallo
a44587d9aa Correct Channel type serialization logic
Currently, we write out the Channel's `ChannelTypeFeatures` as an
odd type, implying clients which don't understand the
`ChannelTypeFeatures` field can simply ignore it. This is obviously
nonsense if the channel type is some future version - the client
needs to fail to deserialize as it doesn't understand the channel's
type.

We adapt the serialization logic here to only write out the
`ChannelTypeFeatures` field if it is something other than
only-static-remote-key, and simply consider that "default" (as it
is the only supported type today). Then, we write out the channel
type as an even TLV, implying clients which do not understand it
must fail to read the `Channel`.

Note that we do not need to bother reserving the TLV type no longer
written as it never appeared in a release (merged post-0.0.103).
2021-11-16 17:12:35 +00:00
Matt Corallo
4d6c26248d
Merge pull request #1119 from TheBlueMatt/2021-10-less-aggressive-htlc-timeouts
Be less aggressive in outbound HTLC CLTV timeout checks
2021-11-16 16:18:20 +00:00
Matt Corallo
5e998cce6b Be less aggressive in outbound HTLC CLTV timeout checks
We currently assume our counterparty is naive and misconfigured and
may force-close a channel to get an HTLC we just forwarded them.

There shouldn't be any reason to do this - we don't have any such
bug, and we shouldn't start by assuming our counterparties are
buggy. Worse, this results in refusing to forward payments today,
failing HTLCs for largely no reason.

Instead, we keep a fairly conservative check, but not one which
will fail HTLC forwarding spuriously - testing only that the HTLC
doesn't expire for a few blocks from now.

Fixes #1114.
2021-11-16 15:22:42 +00:00
Matt Corallo
c0bbd4d918
Merge pull request #1078 from TheBlueMatt/2021-09-chan-types
Implement channel_type negotiation
2021-11-03 16:58:33 +00:00
Matt Corallo
1b99c93334 Store Payee information in HTLCSource::OutboundRoute.
This stores and tracks HTLC payee information with HTLCSource info,
allowing us to provide it back to the user if the HTLC fails and
ensuring persistence by keeping it with the HTLC itself as it
passes between Channel and ChannelMonitor.
2021-10-25 19:40:58 +00:00
Matt Corallo
db2e7e75c4 Support send/recv'ing the new channel_type field in open_channel
This implements the channel type negotiation, though as we currently
only support channels with only static_remotekey set, it doesn't
implement the negotiation explicitly.
2021-10-22 19:38:17 +00:00
Matt Corallo
b7a8dd4a1d Support de/ser of the new channel_type field in open_channel 2021-10-22 19:34:18 +00:00
Matt Corallo
0d5050833d Add PaymentSecrets to HTLCSource::OutboundRoute objects 2021-10-22 18:41:42 +00:00
Matt Corallo
f624cc9ac2 Inform ChannelManager when fulfilled HTLCs are finalized
When an HTLC has been failed, we track it up until the point there
exists no broadcastable commitment transaction which has the HTLC
present, at which point Channel returns the HTLCSource back to the
ChannelManager, which fails the HTLC backwards appropriately.

When an HTLC is fulfilled, however, we fulfill on the backwards path
immediately. This is great for claiming upstream HTLCs, but when we
want to track pending payments, we need to ensure we can check with
ChannelMonitor data to rebuild pending payments. In order to do so,
we need an event similar to the HTLC failure event, but for
fulfills instead.

Specifically, if we force-close a channel, we remove its off-chain
`Channel` object entirely, at which point, on reload, we may notice
HTLC(s) which are not present in our pending payments map (as they
may have received a payment preimage, but not fully committed to
it). Thus, we'd conclude we still have a retryable payment, which
is untrue.

This commit does so, informing the ChannelManager via a new return
element where appropriate of the HTLCSource corresponding to the
failed HTLC.
2021-10-22 18:41:42 +00:00
Matt Corallo
fcb178faeb Make Channel::monitor_updating_restored's return tuple a struct
This improves readability at the callsite and in the function.
2021-10-22 18:41:42 +00:00
Matt Corallo
c54d4703f5 Make Channel::revoke_and_ack's return tuple a struct
This substantially improves readability at the callsite and in the
function.
2021-10-22 18:41:42 +00:00
Matt Corallo
d66574803e
Merge pull request #1098 from 1nF0rmed/2021-09-adds-discard-funding-event
Add Event::DiscardFunding generation
2021-10-09 17:17:55 +00:00
1nF0rmed
1955008d6d Adds DiscardFunding event
During the event of a channel close, if the funding transaction
is yet to be broadcasted then a DiscardFunding event is issued
along with the ChannelClose event.
2021-10-09 16:43:50 +05:30
Matt Corallo
7aa2caccd8
Merge pull request #1096 from valentinewallace/2021-09-mpp-retries 2021-09-30 01:19:04 +00:00
Valentine Wallace
28eea12bbe
Rename MppId to PaymentId
Leftover from previous PR Jeff feedback.

Useful in upcoming commits as we'll expose this to users for payment retries
2021-09-28 19:39:34 -04:00
Matt Corallo
ad819ea705
Merge pull request #1065 from TheBlueMatt/2021-08-bump-dust
Increase our default/minimum dust limit and decrease our max
2021-09-27 20:39:02 +00:00
Matt Corallo
2da0d6c0c9 Rename MIN_DUST_LIMIT_SATOSHIS constant to disambiguate chan vs P2P
While channel and P2P network dust limits are related, they're
ultimately two different things, and thus their constant names
should reference that.
2021-09-27 18:19:51 +00:00
Matt Corallo
9279890089 Force-close channels if closing transactions may be non-standard
If a counterparty (or an old channel of ours) uses a non-segwit
script for their cooperative close payout, they may include an
output which is unbroadcastable due to not meeting the network dust
limit.

Here we check for this condition, force-closing the channel instead
if we find an output in the closing transaction which does not meet
the limit.
2021-09-27 18:19:51 +00:00
Matt Corallo
1b70d9ee8f Require user cooperative close payout scripts to be Segwit
There is little reason for users to be paying out to non-Segwit
scripts when closing channels at this point. Given we will soon, in
rare cases, force-close during shutdown when a counterparty closes
to a non-Segwit script, we should also require it of our own users.
2021-09-27 18:19:51 +00:00
Matt Corallo
c43db96062 Reduce the maximum allowed counterparty dust limit to 546 sat/vbyte
546 sat/vbyte is the current default dust limit on most
implementations, matching the network dust limit for P2SH outputs.
Implementations don't currently appear to send any larger dust
limits, and allowing a larger dust limit implies higher payment
failure risk, so we'd like to be as tight as we can here.
2021-09-27 18:19:51 +00:00
Matt Corallo
831f124721
Merge pull request #1053 from valentinewallace/2021-08-dedup-payment-sent
Deduplicate PaymentSent events for MPP payments
2021-09-17 20:59:29 +00:00
Matt Corallo
8fad498900 Increase our default/minimum dust limit to 354 sat/vbytes
330 sat/vbyte, the current value, is not sufficient to ensure a
future segwit script longer than 32 bytes meets the dust limit if
used for a shutdown script. Thus, we can either check the value
on shutdown or we can simply require segwit outputs and require a
dust value of no less than 354 sat/vbyte.

We swap the minimum dust value to 354 sat/vbyte here, requiring
segwit scripts in a future commit.

See https://github.com/lightningnetwork/lightning-rfc/issues/905
2021-09-17 20:32:59 +00:00
Valentine Wallace
c986e52ce8
Add MppId field to HTLCSource as a way to correlate mpp payment paths 2021-09-17 15:23:45 -04:00
Matt Corallo
088daf79aa
Merge pull request #1070 from TheBlueMatt/2021-09-fix-bindings-ignore
Move CounterpartyForwardingInfo from channel to channelmanager
2021-09-17 17:26:54 +00:00
Valentine Wallace
3d77cc790c
Allow multiple monitor_update_failed calls
without requiring calls to channel_monitor_updated in between.

Found by the fuzzer
2021-09-15 15:37:27 -04:00
Matt Corallo
bb9df69d0d
Merge pull request #1043 from jkczyz/2021-07-network-update-handler
Handle network updates from failed payments in BackgroundProcessor
2021-09-15 18:13:20 +00:00
Matt Corallo
3f9efe717b Move CounterpartyForwardingInfo from channel to channelmanager
CounterpartyForwardingInfo is public (previously exposed with a
`pub use`), and used inside of ChannelCounterparty in
channelmanager.rs. However, it is defined in channel.rs, away from
where it is used.

This would be fine, except that the bindings generator is somewhat
confused by this - it doesn't currently support interpreting
`pub use` as a struct to expose, instead ignoring it.

Fixes https://github.com/lightningdevkit/ldk-garbagecollected/issues/44
2021-09-13 17:31:59 +00:00
Matt Corallo
de9fba82f2
Merge pull request #1072 from TheBlueMatt/2021-09-tighter-max_fee-constant
Reduce our stated max closing-transaction fee to be the true value
2021-09-13 16:42:36 +00:00
Jeffrey Czyz
bd3ee0ab3d
Fail with PERM|8 (permanent_channel_failure)
This affects the htlc_fail_async_shutdown test.
2021-09-09 23:11:12 -05:00
Matt Corallo
b348d9cb60 Reduce our stated max closing-transaction fee to be the true value
When communicating the maximum fee we're willing to accept on a
cooperative closing transaction to our peer, we currently tell them
we'll accept `u64::max_value()` if they're the ones who have to pay
it. Spec-wise this is fine - they aren't allowed to try to claim
our balance, and we don't care how much of their own funds they
want to spend on transaction fees.

However, the Eclair folks prefer to check all values on the wire
do not exceed 21 million BTC, which seems like generally good
practice to avoid overflows and such issues. Thus, our close
messages are rejected by Eclair.

Here we simply relax our stated maximum to be the real value - our
counterparty's current balance in satoshis.

Fixes #1071
2021-09-10 00:24:58 +00:00
Matt Corallo
423f1b1803
Merge pull request #1064 from lightning-signer/2021-08-closing-tx-phase2 2021-09-09 19:31:47 +00:00
Devrandom
eebc0a921e Use ClosingTransaction in BaseSign 2021-09-09 20:49:24 +02:00
Matt Corallo
b3be420cfb
Merge pull request #1047 from TheBlueMatt/2021-08-985-followups 2021-09-09 09:23:08 +00:00
Matt Corallo
623da4da7a Add further comments around fee update handling in channel
These were suggested to clarify behavior in post-merge review of #985.
2021-09-09 08:37:59 +00:00
Matt Corallo
fc35aa745a Update docs for pending_update_fee and holding_cell_update_fee
The docs were left stale after the logic was updated in #985 as
pointed out in post-merge review.
2021-09-09 08:37:59 +00:00
Devrandom
3dd99ebda6 Factor out low-level build_closing_transaction 2021-09-03 13:57:21 +02:00
Matt Corallo
4c4d99b291
Merge pull request #1055 from lightning-signer/2021-08-anchor-tx 2021-09-02 21:54:11 +00:00
Devrandom
8275698f3a Add anchor outputs pair in CommitmentTransaction
The anchor ouputs pair is added if there are pending HTLCs. Or a
a per-party anchor is added if the party has a pending balance.
2021-09-02 09:13:46 +02:00
Devrandom
608ed12a5b Allow BaseSign validation functions to return an Err 2021-08-28 11:04:20 +02:00
Devrandom
285b3faf77 Enforce signing counterparty commitment only after revocation 2021-08-28 11:01:15 +02:00