Commit graph

2671 commits

Author SHA1 Message Date
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
e186593687 Drop the now-unused update_id param to monitor update macros 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
ed5f9f6a9b
Verify channel type features for decoding. 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
valentinewallace
773e8ad583
Merge pull request #2365 from TheBlueMatt/2023-06-fix-fuzz-dep
Ensure we build if a downstream crate sets `--cfg=fuzzing`
2023-06-22 18:49:09 -04:00
Arik Sosman
970b174e90
Method for ChannelTypeFeatures serialization compatibility. 2023-06-22 15:23:11 -07:00
Arik Sosman
06a720fa7f
Define ChannelTypeFeatures methods for anchors logic.
Specifically, introduce a new constructor for an anchors-
supporting feature set, as well as methods that will
maintain forwards-compatible deserialization in older
versions.
2023-06-22 15:23:11 -07:00
Arik Sosman
bf2218260e
Reference-rhs bitwise operations for features. 2023-06-22 15:23:11 -07:00
Arik Sosman
38a2186cb6
Document nonzero anchors in features module. 2023-06-22 15:23:11 -07:00
Arik Sosman
7d406d95b4
Introduce nonzero fee anchors feature. 2023-06-22 14:39:42 -07:00
Valentine Wallace
80f904c5eb
Move send_payment_along_path to take args as struct
Cleans up and paves the way for additional arguments to be added more easily,
specifically an update_add_htlc's blinding point.
2023-06-22 15:49:20 -04:00
Matt Corallo
1c7b6925a2 Simplify cases in handle_new_monitor_update macro
By giving up on a tiny bit of parallelism and tweaking the return
types, we can make the `handle_new_monitor_update` macro a bit
clearer - now the only cases where its called after a monitor was
updated was when the monitor was initially committed.
2023-06-21 22:37:50 +00:00
Matt Corallo
5e528ff6bb Drop the now-unused push_blockable_mon_update 2023-06-21 22:37:50 +00:00
Matt Corallo
c843f68d5b Move most handle_new_monitor_update calls to pass the update
Most of the calls to the `handle_new_monitor_update` macro had the
exact same pattern - calling `update_monitor` followed by the
macro. Given that common pattern will grow to first pushing the
new monitor onto an in-flight set and then calling `update_monitor`
unifying the pattern into a single macro now avoids more code churn
in the coming commits.
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
Elias Rohrer
15b1c9b837
Merge pull request #2319 from valentinewallace/2023-05-forward-less-than-onion
Allow forwarding less than the amount in the onion
2023-06-21 09:25:07 +02:00
Matt Corallo
e49a1ba96d Ensure we build if a downstream crate sets --cfg=fuzzing
Downstream crates building fur fuzzing will usually set
`--cfg=fuzzing` as a side-effect of the Rust fuzzing tooling. Thus,
we should ensure we build without failure in such cases.

We do this here by simply relying on the `_test_utils` feature,
rather than conditionally-compiling in modules based on the
`fuzzing` flag.
2023-06-20 23:22:15 +00:00
Valentine Wallace
0d94d9f9b7
Check UpdateAddHTLC::skimmed_fee_msat on receive
Make sure the penultimate hop took the amount of fee that they claimed to take.
Without checking this TLV, we're heavily relying on the receiving wallet code
to correctly implement logic to calculate that that the fee is as expected.
2023-06-20 17:57:38 -04: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
Valentine Wallace
9a3914dee6
Allow receiving less than the onion claims to pay
Useful for penultimate hops in routes to take an extra fee, if for example they
opened a JIT channel to the payee and want them to help bear the channel open
cost.
2023-06-20 17:57:38 -04:00
Valentine Wallace
27b99acd64
Add PaymentClaimable::counterparty_skimmed_fee_msat
See its docs
2023-06-20 17:57:38 -04:00
Valentine Wallace
94853044fe
Persist counterparty skimmed fee in ClaimableHTLC
Used to get an accurate skimmed fee in the resulting PaymentClaimable event.
2023-06-20 17:57:38 -04:00
Valentine Wallace
52f290119d
Set extra skimmed fee on intercepted forward
Receivers need to use this value to verify incoming payments if
ChannelConfig::accept_underpaying_htlcs is set.
2023-06-20 17:57:38 -04:00
Valentine Wallace
672d666ef4
Move next hop packet pubkey calculation to outside channel lock 2023-06-20 17:57:38 -04:00
Valentine Wallace
a2a7fef4d7
Move PendingHTLCStatus construction inside channel lock
We need the channel lock for constructing a pending HTLC's status because we
need to know if the channel accepts underpaying HTLCs in upcoming commits.
2023-06-20 17:57:35 -04:00
Matt Corallo
c5214c2d06
Merge pull request #2089 from wpaulino/bump-transaction-event-handler
Add BumpTransaction event handler
2023-06-19 22:45:54 +00:00
Wilmer Paulino
d4b6f8c08e
Add BumpTransaction event handler
This allows users to bump their commitments and HTLC transactions
without having to worry about all the little details to do so. Instead,
we'll just require that they implement the `CoinSelectionSource` trait
over their wallet/UTXO source, granting the event handler permission to
spend confirmed UTXOs for the transactions it'll produce.

While the event handler should in most cases produce valid transactions,
assuming the provided confirmed UTXOs are valid, it may not produce
relayable transactions due to not satisfying certain Replace-By-Fee
(RBF) mempool policy requirements. Some of these require that the
replacement transactions have a higher feerate and absolute fee than the
conflicting transactions it aims to replace. To make sure we adhere to
these requirements, we'd have to persist some state for all transactions
the event handler has produced, greatly increasing its complexity. While
we may consider implementing so in the future, we choose to go with a
simple initial version that relies on the OnchainTxHandler's bumping
frequency. For each new bumping attempt, the OnchainTxHandler proposes a
25% feerate increase to ensure transactions can propagate under
constrained mempool circumstances.
2023-06-19 14:05:45 -07:00
Wilmer Paulino
d5cbc6c261
Expose ClaimId for each claim bump in BumpTransactionEvent 2023-06-19 14:05:45 -07:00
Matt Corallo
c3c105075a
Merge pull request #2351 from TheBlueMatt/2023-04-remove-legacy-recv
Drop `create_inbound_payment*_legacy` breaking downgrade to 0.0.103
2023-06-17 18:38:25 +00: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
4b1e2865cf
Create and use methods for counting channels
This commit also adds two new maps to `PeerState` for keeping track
of `OutboundV1Channel`s and `InboundV1Channel`s so that further
commits are a bit easier to review.
2023-06-15 12:55:40 +02:00
Duncan Dean
4ad67cfe18
Refactor channel map update macros for use with ChannelContext 2023-06-15 12:55:37 +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
25c1ad8e19
Convert ChannelDetails::from_channel to ChannelDetails::from_channel_context
This rename and refactor is so that we can get channel details from a
`ChannelContext` which is a common object to all channels.
2023-06-14 16:04:27 +02:00
Duncan Dean
60706d6338
Move Channel::get_available_balances to ChannelContext impl 2023-06-14 16:04:26 +02:00