Commit graph

609 commits

Author SHA1 Message Date
Matt Corallo
e404c129a5
Merge pull request #2400 from TheBlueMatt/2023-07-kill-vec_type
Fix backwards compat for blocked_monitor_updates and finally kill `vec_type`
2023-07-11 19:58:34 +00:00
Wilmer Paulino
dba3e8f2d9
Merge pull request #2364 from TheBlueMatt/2023-06-htlc-preimage-replay
Re-claim forwarded HTLCs on startup
2023-07-10 09:27:57 -07:00
Matt Corallo
6ebb6d182e
Merge pull request #2354 from alecchendev/2023-06-bump-default-dust-exp
Bump dust exposure threshold
2023-07-08 02:15:10 +00:00
Matt Corallo
3236be1d8a
Merge pull request #2347 from henghonglee/issue-2304
Expose whether a channel is closing in ChannelDetails
2023-07-07 21:21:09 +00:00
Matt Corallo
e6eb654cd1 Replace vec_type TLVs in channel/manager with required/optional
* `PhantomRouteHints::channels` has been written since the struct
  was added in 410eb05365.
* `HTLCSource::path_hops` has been written since the struct was
  converted to TLVs in 66784e32fe.
2023-07-07 21:07:25 +00:00
Alec Chen
b040335712
Use multiplier in dust exposure threshold calculation
This commit makes use of the added enum to calculate the dust
exposure threshold based on the current fee rate. This also updates
tests to ensure it works as intended.
2023-07-07 14:30:51 -05:00
Alec Chen
c2992fd94b
Send fee estimator through to get_max_htlc_dust_exposure_threshold 2023-07-07 14:30:50 -05:00
Alec Chen
cfc7ec66f0
Add max dust exposure multiplier config knob
With fee rates rising dramatically in mid-April 2023, thresholds for
what is considered dust have risen, often exceeding our previous dust
exposure threshold of 5k sats. This causes all payments and HTLC
forwards between 5k sats and new dust thresholds to fail.

This commit changes our max dust exposure config knob from a fixed
upper limit to a `MaxDustHTLCExposure` enum with an additional variant
to allow setting our max dust exposure to a multiplier on the current
high priority feerate.

To remain backwards compatible we'll always write the fixed limit if
it's set, or its default value in its currently reserved TLV.

We also now write an odd TLV for the new enum, so that previous
versions can safely ignore it upon downgrading, while allowing us to
make use of the new type when it's written.
2023-07-07 14:30:42 -05:00
Matt Corallo
46913daa38 Fix backwards compat for blocked_monitor_updates
In 1ce2beb774,
`Channel::blocked_monitor_updates` was moved to an even TLV to
ensure downgrades with vec entries are forbidden. However, the
serialized type remained `vec_type`, which is always written.

Instead, `optional_vec` must be used.
2023-07-07 18:28:25 +00:00
henghonglee
47cb45ed32 Add ChannelShutdownState to ChannelDetails
This commit adds the state of channel shutdown to channeldetails
2023-07-06 10:51:35 +08:00
Matt Corallo
1ce2beb774 Move Channel's blocked monitor updates vec to an even TLV
In 9dfe42cf86,
`ChannelMonitorUpdate`s were stored in `Channel` while they were
being processed. Because it was possible (though highly unlikely,
due to various locking likely blocking persistence) an update was
in-flight (even synchronously) when a `ChannelManager` was
persisted, the new updates were persisted via an odd TLV.

However, in 4041f0899f these pending
monitor updates were moved to `ChannelManager`, with appropriate
handling there. Now the only `ChannelMonitorUpdate`s which are
stored in `Channel` are those which are explicitly blocked, which
requires the async pipeline.

Because we don't support async monitor update users downgrading to
0.0.115 or lower, we move to persisting them via an even TLV. As
the odd TLV storage has not yet been released, we can do so
trivially.

Fixes #2317.
2023-07-05 17:26:37 +00:00
Matt Corallo
63217bc9ef Some minor comment/doc tweaks in new monitor update blocking code
A few nits that came up in review to make the docs clearer, but not
anything super critical.
2023-06-27 14:35:52 +00:00
Arik Sosman
4a56d87ef9
Fix build warning about public_from_secret_hex. 2023-06-24 10:52:27 -07:00
Wilmer Paulino
6fd13d7b22
Merge pull request #2367 from wpaulino/remove-anchors-flag
Remove anchors config flag
2023-06-23 16:17:48 -07:00
Matt Corallo
f833448703
Merge pull request #2362 from TheBlueMatt/2023-06-unblocked-mons-in-manager
Move in-flight ChannelMonitorUpdates to ChannelManager
2023-06-23 20:46:26 +00:00
Wilmer Paulino
82b646c548
Remove anchors config flag
Now that all of the core functionality for anchor outputs has landed,
we're ready to remove the config flag that was temporarily hiding it
from our API.
2023-06-23 13:32:08 -07:00
Matt Corallo
9c3ad28fa8 Rename Channel::pending_monitor_updates to blocked
To differentiate between in-flight pending completion and blocked
updates.
2023-06-23 19:25:40 +00:00
Matt Corallo
7884e687d2 Rename Channel's latest-monitor-update fetch method for clarity
`Channel::get_latest_complete_monitor_update_id` no longer refers
to complete updates, but rather ones which were passed to the
`ChannelManager` and which the `CHannel` no longer knows about.
Thus, we rename it `get_latest_unblocked_monitor_update_id`.
2023-06-23 19:25:40 +00:00
Matt Corallo
60e671bb93 Remove the blocked param on ChannelMonitorUpdates in Channel
Now that all `ChannelMonitorUpdate`s stored in `Channel` are
blocked we don't need a bool to track it.
2023-06-23 19:25:40 +00:00
Matt Corallo
4041f0899f Move in-flight ChannelMonitorUpdates to ChannelManager
Because `ChannelMonitorUpdate`s can be generated for a
channel which is already closed, and must still be tracked
through their completion, storing them in a `Channel`
doesn't make sense - we'd have to have a redundant place to
put them post-closure and handle both storage locations
equivalently.

Instead, here, we move to storing in-flight
`ChannelMonitorUpdate`s to the `ChannelManager`, leaving
blocked `ChannelMonitorUpdate`s in the `Channel` as they
were.
2023-06-23 19:25:40 +00:00
Matt Corallo
397386539d
Merge pull request #2361 from arik-so/2023-06-anchor-channel-type-features
Replace `opt_anchors` with `ChannelTypeFeatures`
2023-06-23 19:12:15 +00:00
Arik Sosman
82b53598f4
Sync ChannelTransactionParameters features to ChannelContext. 2023-06-23 10:37:14 -07:00
Arik Sosman
1d9a709529
Replace opt_anchors with ChannelTypeFeatures
This change modifies six structs that were keeping
track of anchors features with an `opt_anchors` field,
as well as another field keeping track of nonzero-fee-
anchor-support.
2023-06-23 10:37:14 -07:00
Arik Sosman
7d406d95b4
Introduce nonzero fee anchors feature. 2023-06-22 14:39:42 -07:00
Matt Corallo
5e528ff6bb Drop the now-unused push_blockable_mon_update 2023-06-21 22:37:50 +00:00
Matt Corallo
1433e9ee7b Return owned ChannelMonitorUpdates from Channel
In the coming commits we'll move to storing in-flight
`ChannelMonitorUpdate`s in the `ChannelManager` rather in the
`Channel` (which will then only retain `ChannelMonitorUpdate`s
which have not yet been released/are blocked.

This will simplify handling of pending `ChannelMonitorUpdate` after
a channel has closed by not having to move them into the
`ChannelManager`.
2023-06-21 22:37:49 +00:00
Valentine Wallace
4cee62233c
Set UpdateAddHTLC::skimmed_fee_msat on forward
So the receiver can verify it and approve underpaying HTLCs (see
ChannelConfig::accept_underpaying_htlcs).
2023-06-20 17:57:38 -04:00
Valentine Wallace
5a79d6cc53
Persist update_add sender skimmed fee in Channel 2023-06-20 17:57:38 -04:00
Valentine Wallace
47567e45dc
Track the sender's skimmed fee in UpdateAddHTLC 2023-06-20 17:57:38 -04:00
Duncan Dean
d957f362ff
Rename inbound_is_awaiting_accept() to is_awaiting_accept() 2023-06-15 22:31:41 +02:00
Duncan Dean
8f93e2dc94
Rename InboundV1Channel::new_from_req to InboundV1Channel::new 2023-06-15 22:31:40 +02:00
Duncan Dean
637e03a3de
Move inbound channel methods into InboundV1Channel's impl 2023-06-15 22:31:37 +02:00
Duncan Dean
4a0cd5cf55
Move outbound channel methods into OutboundV1Channel's impl 2023-06-15 22:20:14 +02:00
Duncan Dean
2ea27e02cd
Move Channel::force_shutdown to ChannelContext impl 2023-06-15 12:51:45 +02:00
Duncan Dean
baadeb7374
Move inbound channel constructor into InboundV1Channel impl 2023-06-15 12:51:44 +02:00
Duncan Dean
e6c2f04f15
Move outbound channel constructor into OutboundV1Channel impl 2023-06-15 12:51:43 +02:00
Duncan Dean
883e0566ef
Introduce InboundV1Channel & OutboundV1Channel 2023-06-15 12:51:34 +02:00
Duncan Dean
10125269d2
Move channel constants up 2023-06-14 16:04:30 +02:00
Duncan Dean
e3f0c55182
Make ChannelManager::issue_channel_close_events take a ChannelContext 2023-06-14 16:04:28 +02:00
Duncan Dean
60706d6338
Move Channel::get_available_balances to ChannelContext impl 2023-06-14 16:04:26 +02:00
Duncan Dean
9f4e71452a
Move Channel::next_*_commit_tx_fee_msat methods to ChannelContext impl 2023-06-14 16:04:25 +02:00
Duncan Dean
08ee72be9d
Move Channel::commit_tx_fee_msat to file-level utilities 2023-06-14 16:04:24 +02:00
Duncan Dean
ed6a5bb151
Move Channel::get_*_pending_htlc_stats to ChannelContext impl 2023-06-14 16:04:23 +02:00
Duncan Dean
2774aa26d9
Prepare some methods for upcoming moves to ChannelContext
To reduce interleaving in commits, we introduce a `context` variable
in methods to be moved in upcoming commits so there is minimal change
with the moves.
2023-06-14 16:04:22 +02:00
Duncan Dean
3ff94fae55
Move Channel::get_feerate_sat_per_1000_weight and other methods
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields to be updated for things to
compile, but these should be quite clear.

This commit also uses the `context` field where needed for compilation
and tests to pass due to the above change.

f s/tarcontext.get_/target_/
2023-06-14 16:04:21 +02:00
Duncan Dean
0d739eeb22
Move Channel::build_holder_transaction_keys and some other methods
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.

This commit also uses the `context` field where needed for compilation
and tests to pass due to the above change.
2023-06-14 16:04:14 +02:00
Duncan Dean
497aeb006f
Move Channel::build_commitment_transaction to ChannelContext impl
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.

This commit also uses the `context` field where needed for compilation
and tests to pass due to the above change.
2023-06-14 13:42:27 +02:00
Duncan Dean
ede8324397
Move Channel::channel_id and some other methods to ChannelContext impl
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.

This commit also uses the `context` field where needed for compilation
and tests to pass due to the above change.
2023-06-14 13:42:26 +02:00
Duncan Dean
1ee0a66d21
Move Channel::get_update_time_counter and some other methods
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.

This commit also uses these methods through the `context` field where
needed for compilation and tests to pass due to the above change.
2023-06-14 13:42:24 +02:00
Duncan Dean
1503ebbc0e
Move Channel::opt_anchors to ChannelContext impl & move some util fns
This is one of a series of commits to make sure methods are moved by
chunks so they are easily reviewable in diffs. Unfortunately they are
not purely move-only as fields need to be updated for things to
compile, but these should be quite clear.
2023-06-14 13:42:23 +02:00