Matt Corallo [Thu, 22 Dec 2022 21:58:53 +0000 (21:58 +0000)]
Store an owned `Score` in `ScorerAccountingForInFlightHtlcs`
`ScorerAccountingForInFlightHtlcs` generally stores a `Score`
reference generated by calling `LockableScore::lock`, which
actually returns an arbitrary `Score`. Given `Score` is implemented
directly on lock types, it makes sense to simply hold a fully owned
`Score` in `ScorerAccountingForInFlightHtlcs` rather than a mutable
reference to one.
Matt Corallo [Wed, 21 Dec 2022 23:08:58 +0000 (23:08 +0000)]
Merge pull request #1929 from valentinewallace/2022-12-outbound-payment-mod-followup
Outbound payment module follow-up
Valentine Wallace [Tue, 20 Dec 2022 23:20:53 +0000 (18:20 -0500)]
outbound_payment: put method signature closing paren on next line
in long method signatures
Arik [Wed, 21 Dec 2022 19:05:09 +0000 (11:05 -0800)]
Merge pull request #1931 from TheBlueMatt/2022-12-1910-followups
Trivial #1910 Followups
Matt Corallo [Wed, 21 Dec 2022 16:39:37 +0000 (16:39 +0000)]
Fix capitalization broken in
9d7bb73b599a7a9d8468a2f0c54d28f0ce6cf5
9d7bb73b599a7a9d8468a2f0c54d28f0ce6cf543 broke some capitalization
in docs for `sign_invoice`, which we fix here as well as taking
this opportunity to clean up the `sign_invoice` docs more
generally.
Matt Corallo [Wed, 21 Dec 2022 16:38:28 +0000 (16:38 +0000)]
Clean up use ordering introduced in
9d7bb73b599a7a9d8468a2f0c54d28f
9d7bb73b599a7a9d8468a2f0c54d28f0ce6cf543 moved some code around
unnecessarily, which we fix here.
Valentine Wallace [Tue, 20 Dec 2022 23:19:22 +0000 (18:19 -0500)]
Fix cfg(test) indentation
Valentine Wallace [Tue, 20 Dec 2022 23:18:17 +0000 (18:18 -0500)]
Make add_new_pending_payment private to module
And expose it in testing only, for safety
valentinewallace [Wed, 21 Dec 2022 00:31:16 +0000 (19:31 -0500)]
Merge pull request #1928 from valentinewallace/2022-12-fix-main
Fix `main` build
Valentine Wallace [Tue, 20 Dec 2022 22:55:06 +0000 (17:55 -0500)]
Fix main build
Matt Corallo [Tue, 20 Dec 2022 22:19:43 +0000 (22:19 +0000)]
Merge pull request #1910 from arik-so/2022-12-keys-interface-name-split
Split KeysInterface into EntropySource, NodeSigner, and SignerProvider
valentinewallace [Tue, 20 Dec 2022 20:40:48 +0000 (15:40 -0500)]
Merge pull request #1923 from valentinewallace/2022-12-outbound-payment-mod
Abstract `ChannelManager` outbound payment logic
Arik Sosman [Thu, 8 Dec 2022 23:40:54 +0000 (15:40 -0800)]
Split out KeysInterface into EntropySource, NodeSigner, and SignerProvider.
Valentine Wallace [Mon, 19 Dec 2022 01:34:34 +0000 (20:34 -0500)]
Rename send_payment and retry_payment for retries
Once ChannelManager supports payment retries, it will make more sense for its
current send_payment method to be named send_payment_with_route because
retrying should be the default. Here we get a head start on this by making the
rename in outbound_payment, but not changing the public interface yet.
Valentine Wallace [Sun, 18 Dec 2022 23:28:01 +0000 (18:28 -0500)]
Reduce visibility of outbound payment methods
Valentine Wallace [Mon, 19 Dec 2022 20:30:16 +0000 (15:30 -0500)]
Start parameters on a newline if they don't fit
Separating out this commit to keep the main refactor move-only
Valentine Wallace [Mon, 19 Dec 2022 20:27:29 +0000 (15:27 -0500)]
Remove unnecessary mut in finalize_claims
Valentine Wallace [Sun, 18 Dec 2022 18:28:47 +0000 (13:28 -0500)]
Swap pending_outbound_payments for OutboundPayments struct
This allows us to move a lot of outbound payment logic out of ChannelManager
and into the new outbound_payment module, and helps avoid growing
ChannelManager when we add retry logic to it in upcoming work.
Valentine Wallace [Fri, 16 Dec 2022 21:05:12 +0000 (16:05 -0500)]
Move PaymentSendFailure into outbound_payment module
And re-export it in channelmanager.rs so it can remain public
Valentine Wallace [Fri, 16 Dec 2022 20:32:52 +0000 (15:32 -0500)]
Move PendingOutboundPayment to new outbound_payment module
We want to move all outbound payment-related things to this new module, to help
break up ChannelManager so future payment retries work doesn't increase the
size of ChannelManager.
Matt Corallo [Mon, 19 Dec 2022 16:31:30 +0000 (16:31 +0000)]
Merge pull request #1922 from wpaulino/avoid-remaining-redundant-commitment-broadcasts
Avoid redundant broadcast of local commitment transaction
Matt Corallo [Fri, 16 Dec 2022 21:45:34 +0000 (21:45 +0000)]
Merge pull request #1908 from jkczyz/2022-11-refund
BOLT 12 refund encoding and building
Wilmer Paulino [Tue, 13 Dec 2022 03:00:06 +0000 (19:00 -0800)]
Avoid redundant broadcast of local commitment transaction
This change follows the rationale of commit
62236c7 and addresses the
last remaining redundant local commitment broadcast.
There's no need to broadcast our local commitment transaction if we've
already seen a confirmed one as it'll be immediately rejected as a
duplicate/conflict.
This will also help prevent dispatching spurious events for bumping
commitment and HTLC transactions through anchor outputs since the
dispatch for said events follows the same flow as our usual commitment
broadcast.
Matt Corallo [Fri, 16 Dec 2022 18:45:09 +0000 (18:45 +0000)]
Merge pull request #1920 from TheBlueMatt/2022-12-rel-date
Update release date on 0.0.113 in changelog
Matt Corallo [Fri, 16 Dec 2022 18:29:09 +0000 (18:29 +0000)]
Merge pull request #1903 from TheBlueMatt/2022-12-1867-followups
Clarify docs on `provide_channel_parameters`
Matt Corallo [Fri, 16 Dec 2022 15:57:11 +0000 (15:57 +0000)]
Update release date on 0.0.113 in changelog
Arik [Fri, 16 Dec 2022 05:37:58 +0000 (21:37 -0800)]
Merge pull request #1917 from TheBlueMatt/2022-12-0.0.113
Cut 0.0.113
Matt Corallo [Thu, 15 Dec 2022 17:30:11 +0000 (17:30 +0000)]
Bump crate versions to 0.0.113/invoice 0.21
Matt Corallo [Wed, 14 Dec 2022 19:38:54 +0000 (19:38 +0000)]
Add release notes for 0.0.113
Fixes #1890
Matt Corallo [Wed, 14 Dec 2022 19:46:19 +0000 (19:46 +0000)]
Only do backtrace builds on stable to fix MSRV break in CI
Matt Corallo [Thu, 15 Dec 2022 00:49:41 +0000 (00:49 +0000)]
Merge pull request #1918 from TheBlueMatt/2022-12-one-blinded-path
Unify blinding nomenclature to call them "paths" not "routes".
Jeffrey Czyz [Fri, 9 Dec 2022 22:41:16 +0000 (16:41 -0600)]
Refund parsing tests
Tests for checking refund semantics when parsing invoice_request bytes
as defined by BOLT 12.
Jeffrey Czyz [Fri, 9 Dec 2022 19:17:44 +0000 (13:17 -0600)]
Refund building tests
Tests for checking invoice_request message semantics when building a
refund as defined by BOLT 12.
Jeffrey Czyz [Tue, 29 Nov 2022 23:30:56 +0000 (18:30 -0500)]
Builder for creating refunds
Add a builder for creating refunds given a payer_id and other required
fields. Other settings are optional and duplicative settings will
override previous settings. Building produces a semantically valid
`invoice_request` message representing the refund, which then may be
communicated out of band (e.g., via QR code).
Jeffrey Czyz [Tue, 23 Aug 2022 22:31:46 +0000 (17:31 -0500)]
Refund parsing from bech32 strings
Implement Bech32Encode for Refund, which supports creating and parsing
QR codes for the merchant-pays-user (i.e., offer for money) flow.
Jeffrey Czyz [Wed, 21 Sep 2022 14:32:23 +0000 (09:32 -0500)]
Refund encoding and parsing
Define an interface for BOLT 12 refunds (i.e., an `invoice_request`
message without an `offer_node_id`). A refund is more generally an
"offer for money". While it is encoded using the same TLV streams as an
`invoice_request` message, it has different semantics.
Matt Corallo [Wed, 14 Dec 2022 21:08:51 +0000 (21:08 +0000)]
Update references to "blinded route" to "blinded path"
Finishing the work from the previous two commits.
Matt Corallo [Wed, 14 Dec 2022 20:49:53 +0000 (20:49 +0000)]
Rename `blinded_route` variables and module to `blinded_path`
Following up on the previous commit, this also renames variables
and the module used to `blinded_path`.
Matt Corallo [Wed, 14 Dec 2022 20:45:37 +0000 (20:45 +0000)]
Unify blinding nomenclature to call them "paths" not "routes".
Currently the `onion_message` module exposes the blinded route
object as *both* `BlindedRoute` and `BlindedPath`. This is somewhat
confusing, and given they are really paths, not routes (at least in
the sense that a route could be multi-path, though for OMs they are
not), here we unify to only call them paths.
Jeffrey Czyz [Tue, 13 Dec 2022 22:05:59 +0000 (16:05 -0600)]
Remove Option from OfferContents::signing_pubkey
Refunds (i.e., `invoice_request` without an `offer`) will have its own
contents type, so OfferContents::signing_pubkey can be required.
Matt Corallo [Tue, 13 Dec 2022 21:41:49 +0000 (21:41 +0000)]
Correct docs on `generate_channel_keys`
03de0598afd032e9fd5dbbaca0aabc6a367ce4f5 appeared to revert updated
docs due to a rebase error. This reverts the docs on
`generate_channel_keys` to the state they were in prior to that
commit, with one additional doc.
Matt Corallo [Tue, 6 Dec 2022 18:16:46 +0000 (18:16 +0000)]
Clarify docs on `provide_channel_parameters`
Its very confusing to say that LDK will call
`provide_channel_parameters` more than once - its true for a
channel, but not for a given instance. Instead, phrase the docs
with reference to a specific instance, which is much clearer.
Matt Corallo [Tue, 13 Dec 2022 21:08:45 +0000 (21:08 +0000)]
Merge pull request #1915 from TheBlueMatt/2022-12-jit-reload-consistency
Drop forwarded HTLCs which were still pending at persist-time
Matt Corallo [Tue, 13 Dec 2022 03:27:23 +0000 (03:27 +0000)]
Drop forwarded HTLCs which were still pending at persist-time
If, after forwarding an intercepted payment to our counterparty, we
restart with a ChannelMonitor update having been persisted, but the
corresponding ChannelManager update not having been persisted,
we'll still have the intercepted HTLC in the
`pending_intercepted_htlcs` map on start (and potentially a pending
`HTLCIntercepted` event). This will cause us to allow the user to
handle the forwarded HTLC twice, potentially double-forwarding it.
This builds on
0bb87ddad71d2e33199ebad79e9f709f869f2130, which
provided a preemptive fix for the general relay case (though it was
not an actual issue at the time). We simply check for the HTLCs
having been forwarded on startup and remove them from the map.
Fixes #1858
Matt Corallo [Tue, 13 Dec 2022 01:03:18 +0000 (01:03 +0000)]
Remove unused fetch in `lightning_invoice` tests.
Matt Corallo [Tue, 13 Dec 2022 00:00:32 +0000 (00:00 +0000)]
Merge pull request #1894 from ssbright/2022-12-custom_payment_hash
Add invoice constructor with custom payment hash
Matt Corallo [Mon, 12 Dec 2022 23:22:52 +0000 (23:22 +0000)]
Merge pull request #1900 from tnull/2022-12-improve-confirm-docs
Improve `Confirm` docs
Matt Corallo [Mon, 12 Dec 2022 22:45:00 +0000 (22:45 +0000)]
Merge pull request #1892 from tnull/2022-12-spendableoutputdescriptor-doccs
Clean up docs in `keysinterface.rs`
Matt Corallo [Mon, 12 Dec 2022 22:16:43 +0000 (22:16 +0000)]
Merge pull request #1907 from TheBlueMatt/2022-12-abandon-crash-reset
Note that abandon_payment does not persist the state update in docs
ssbright [Mon, 12 Dec 2022 21:08:38 +0000 (13:08 -0800)]
Add invoice constructor with custom payment hash
Elias Rohrer [Mon, 5 Dec 2022 16:55:47 +0000 (17:55 +0100)]
Improve `Confirm` docs
Elias Rohrer [Thu, 1 Dec 2022 14:17:57 +0000 (15:17 +0100)]
Clean up docs in `keysinterface.rs`
Matt Corallo [Thu, 8 Dec 2022 00:33:15 +0000 (00:33 +0000)]
Note that abandon_payment does not persist the state update in docs
If a user calls `abandon_payment`, then restarts without freshly
persisting the `ChannelManager`, the payment will still be pending
on restart. This was unclear from the docs (and the docs seemed to
imply otherwise). Because this doesn't materially impact the
usability of `abandon_payment` (users shouldn't be called
`retry_payment` on an abandoned one anyway), we simply document it.
Fixes #1804.
Matt Corallo [Mon, 12 Dec 2022 17:58:21 +0000 (17:58 +0000)]
Merge pull request #1904 from TheBlueMatt/2022-12-1825-followups
Trivial Followups to #1825
valentinewallace [Mon, 12 Dec 2022 16:25:07 +0000 (11:25 -0500)]
Merge pull request #1738 from jkczyz/2022-09-invoice-request
BOLT 12 `invoice_request` encoding and building
Matt Corallo [Mon, 12 Dec 2022 03:11:30 +0000 (03:11 +0000)]
Merge pull request #1906 from wpaulino/prevent-downgrade-from-anchors
Use even types for opt_anchors
Matt Corallo [Mon, 12 Dec 2022 03:10:38 +0000 (03:10 +0000)]
Merge pull request #1886 from TheBlueMatt/2022-11-claim-relock
Relock `channel_state` in for each HTLC in `claim_funds` and lay the groundwork for async event generation
Jeffrey Czyz [Fri, 9 Dec 2022 20:45:56 +0000 (14:45 -0600)]
Check entire TLV stream instead of by field
This causes a compilation error if a new field is added but missed in
the tests.
Jeffrey Czyz [Mon, 28 Nov 2022 16:20:07 +0000 (11:20 -0500)]
Add BOLT 12 merkle root test for `invoice_request`
A BOLT 12 test vector uses an `invoice_request` message that has a
currency, which aren't supported, so using OfferBuilder::build_unchecked
is required to avoid a panic.
Jeffrey Czyz [Wed, 16 Nov 2022 22:13:52 +0000 (16:13 -0600)]
Invoice request parsing tests
Tests for checking invoice_request message semantics when parsing bytes
as defined by BOLT 12.
Jeffrey Czyz [Fri, 11 Nov 2022 03:12:58 +0000 (21:12 -0600)]
Invoice request building tests
Tests for checking invoice_request message semantics when building as
defined by BOLT 12.
Jeffrey Czyz [Wed, 31 Aug 2022 15:19:44 +0000 (10:19 -0500)]
Builder for creating invoice requests
Add a builder for creating invoice requests for an offer given a
payer_id. Other settings may be optional depending on the offer and
duplicative settings will override previous settings. Building produces
a semantically valid `invoice_request` message for the offer, which then
can be signed for the payer_id.
Jeffrey Czyz [Tue, 23 Aug 2022 22:31:46 +0000 (17:31 -0500)]
Invoice request raw byte encoding and decoding
When reading an offer, an `invoice_request` message is sent over the
wire. Implement Writeable for encoding the message and TryFrom for
decoding it by defining in terms of TLV streams. These streams represent
content for the payer metadata (0), reflected `offer` (1-79),
`invoice_request` (80-159), and signature (240).
Jeffrey Czyz [Tue, 9 Aug 2022 22:37:02 +0000 (17:37 -0500)]
Merkle root hash computation
Offers uses a merkle root hash construction for signature calculation
and verification. Add a submodule implementing this so that it can be
used when parsing and signing invoice_request and invoice messages.
Jeffrey Czyz [Fri, 24 Jun 2022 21:18:29 +0000 (16:18 -0500)]
Schnorr Signature serialization
BOLT 12 uses Schnorr signatures for signing offers messages, which need
to be serialized.
Jeffrey Czyz [Mon, 19 Sep 2022 21:57:46 +0000 (16:57 -0500)]
Invoice request message interface and data format
Define an interface for BOLT 12 `invoice_request` messages. The
underlying format consists of the original bytes and the parsed
contents.
The bytes are later needed when constructing an `invoice` message. This
is because it must mirror all the `offer` and `invoice_request` TLV
records, including unknown ones, which aren't represented in the
contents.
The contents will be used in `invoice` messages to avoid duplication.
Some fields while required in a typical user-pays-merchant flow may not
be necessary in the merchant-pays-user flow (e.g., refund, ATM).
Matt Corallo [Tue, 6 Dec 2022 21:19:29 +0000 (21:19 +0000)]
Add second TODO when claiming to mirror the existing TODO on claim fail
Matt Corallo [Tue, 6 Dec 2022 21:13:35 +0000 (21:13 +0000)]
Drop unused link in `claim_funds`
Matt Corallo [Wed, 30 Nov 2022 21:48:46 +0000 (21:48 +0000)]
Drop now-unused `ClaimFundsFromHop` enum and replace with an `Err`
Matt Corallo [Tue, 6 Dec 2022 21:01:50 +0000 (21:01 +0000)]
Handle claim result event generation in claim_funds_from_hop
Currently `claim_funds` and `claim_funds_internal` call
`claim_funds_from_hop` and then surface and `Event` to the user
informing them of the forwarded/claimed payment based on it's
result. In both places we assume that a claim "completed" even if
a monitor update is being done async.
Instead, here we push that event generation through a
`MonitorUpdateCompletionAction` and a call to
`handle_monitor_update_completion_action`. This will allow us to
hold the event(s) until async monitor updates complete in the
future.
Matt Corallo [Wed, 30 Nov 2022 05:47:16 +0000 (05:47 +0000)]
Don't hold `channel_state` lock for entire duration of claim_funds
When `claim_funds` has to claim multiple HTLCs as a part of a
single MPP payment, it currently does so holding the
`channel_state` lock for the entire duration of the claim loop.
Here we swap that for taking the lock once for each HTLC. This
allows us to be more flexible with locks going forward, and
ultimately isn't a huge change - if our counterparty intends to
force-close a channel, us choosing to ignore it by holding the
`channel_state` lock for the duration of the claim isn't going to
result in a commitment update, it will just result in the preimage
already being in the `ChannelMonitor`.
Matt Corallo [Tue, 6 Dec 2022 20:46:02 +0000 (20:46 +0000)]
Handle closed-chan HTLC claims in `claim_funds_from_hop`
Currently `claim_funds` does all HTLC claims in one `channel_state`
lock, ensuring that we always make claims from channels which are
open. It can thus avoid ever having to generate a
`ChannelMonitorUpdate` containing a preimage for a closed channel,
which we only do in `claim_funds_internal` (for forwarded payments).
In the next commit we'll change the locking of
`claim_funds_from_hop` so that `claim_funds` is no longer under a
single lock but takes a lock for each claim. This allows us to be
more flexible with locks going forward, and ultimately isn't a huge
change - if our counterparty intends to force-close a channel, us
choosing to ignore it by holding the `channel_state` lock for the
duration of the claim isn't going to result in a commitment update,
it will just result in the preimage already being in the
`ChannelMonitor`.
Matt Corallo [Wed, 30 Nov 2022 18:37:12 +0000 (18:37 +0000)]
Add support for handling "actions" after a monitor update completes
This adds a new enum, `MonitorUpdateCompletionAction` and a method
to execute the "actions". They are intended to be done once a
(potentially-async) `ChannelMonitorUpdate` persistence completes,
however this behavior will be implemented in a future PR. For now,
this adds the relevant infrastructure which will allow us to
prepare `claim_funds` for better monitor async handling.
Matt Corallo [Tue, 6 Dec 2022 18:33:52 +0000 (18:33 +0000)]
Store pending claims awaiting monitor update in a separate map
In the next commits we'll move to generating `PaymentClaimed`
events while handling `ChannelMonitorUpdate`s rather than directly
in line. Thus, as a prerequisite, here we move to storing the info
required to generate the `PaymentClaimed` event in a separate map.
Note that while this does introduce a new map which is written as
an even value which users cannot opt out of, the map is only filled
in when users use the asynchronous `ChannelMonitor` updates and
after a future PR. As these are still considered beta, breaking
downgrades for such users is considered acceptable in the future PR
(which will likely be one LDK version later).
Matt Corallo [Wed, 7 Dec 2022 23:17:31 +0000 (23:17 +0000)]
Slightly clarify comment on safety of only processing HTLCs once
Matt Corallo [Wed, 7 Dec 2022 00:41:07 +0000 (00:41 +0000)]
Ensure `Event::BumpTransaction` is forwards-compatible
`Event`s with an odd type are ignored by older versions of LDK,
however they rely on the `write_tlv_fields` call to know how many
bytes to read and discard. We were missing that call in our writing
of `Event::BumpTransaction`, which we add here.
Matt Corallo [Wed, 7 Dec 2022 00:40:38 +0000 (00:40 +0000)]
Use `Witness::push_bitcoin_signature` where relevant
Matt Corallo [Wed, 7 Dec 2022 00:40:17 +0000 (00:40 +0000)]
Drop excess mut on `OnchainTxHandler::generate_external_htlc_claim`
Matt Corallo [Wed, 7 Dec 2022 00:30:43 +0000 (00:30 +0000)]
DRY the comparison blocks in `update_claims_view_from_matched_txn`
In `update_claims_view_from_matched_txn` we have two different
tx-equivalence checks which do the same thing - both check that the
tx which appeared on chain spent all of the outpoints which we
intended to spend in a given package. While one is more effecient
than the other (but only usable in a subset of cases), the
difference between O(N) and O(N^2) when N is 1-5 is trivial.
Still, it is possible we hit this code with just shy of 900 HTLC
outputs in a channel, and a transaction with a ton of inputs.
While having to spin through a few million entries if our
counterparty wastes a full block isn't really a big deal, we go
ahead and use a sorted vec and binary searches because its trivial.
Matt Corallo [Wed, 7 Dec 2022 00:29:11 +0000 (00:29 +0000)]
Use `PackageId` rather than `Txid` in `OnchainEvent::Claim`
In
19daccf7fb5ea81c8d235c1628a91efe0aa07b96, a `PackageId` type was
added to differentiate between an opaque Id for packages and the
`Txid` type which was being used for that purpose. It, however,
failed to also replace the single inner field in
`OnchainEvent::Claim` which was also a package ID. We do so here.
Wilmer Paulino [Wed, 7 Dec 2022 18:30:25 +0000 (10:30 -0800)]
Use even types for opt_anchors
This prevents downgrading to older versions of LDK that are not capable
of supporting anchor channels when the field is serialized (i.e.,
opt_anchors is `Some`).
Matt Corallo [Wed, 7 Dec 2022 17:52:04 +0000 (17:52 +0000)]
Merge pull request #1863 from TheBlueMatt/2022-11-holding-cell-batch-update
Lean on the holding cell when batch-forwarding/failing HTLCs
Matt Corallo [Wed, 7 Dec 2022 05:51:27 +0000 (05:51 +0000)]
Merge pull request #1825 from wpaulino/anchors-bump-htlc-resolution-event
Introduce new BumpTransactionEvent variant HTLCResolution
Wilmer Paulino [Wed, 30 Nov 2022 22:05:02 +0000 (14:05 -0800)]
Extend BaseSign with HTLC output signing support for external claims
Wilmer Paulino [Wed, 31 Aug 2022 19:03:35 +0000 (12:03 -0700)]
Yield BumpHTLCResolution events
Wilmer Paulino [Wed, 30 Nov 2022 22:03:45 +0000 (14:03 -0800)]
Expose HTLC transaction construction helpers
Wilmer Paulino [Tue, 22 Nov 2022 01:22:06 +0000 (17:22 -0800)]
Rename set_equality within update_claims_view_from_matched_txn
Wilmer Paulino [Wed, 30 Nov 2022 22:03:26 +0000 (14:03 -0800)]
Generate ClaimEvent for HolderHTLCOutput inputs from anchor channels
Wilmer Paulino [Mon, 28 Nov 2022 15:47:44 +0000 (07:47 -0800)]
Introduce internal package ID to track pending claims
Now that our txids will no longer be stable for package claims that
require external funds to be allocated, we transition to a 32-byte array
identifier to remain compatible with them.
Wilmer Paulino [Wed, 31 Aug 2022 18:56:59 +0000 (11:56 -0700)]
Support HolderHTLCOutput inputs from anchor channels
Wilmer Paulino [Wed, 13 Jul 2022 17:27:45 +0000 (10:27 -0700)]
Specify amount units in HolderHTLCOutput
This is only a name change, there is no change in behavior.
Wilmer Paulino [Tue, 22 Nov 2022 01:11:09 +0000 (17:11 -0800)]
Update HTLC transaction detection from revoked counterparty commitments
Previously, this method assumed that all HTLC transactions have 1 input
and 1 output, with the sole input having a witness of 5 elements. This
will no longer be the case for HTLC transactions on channels with
anchors outputs since additional inputs and outputs can be attached to
them to allow fee bumping.
Wilmer Paulino [Thu, 25 Aug 2022 20:09:29 +0000 (13:09 -0700)]
Track HTLC resolving transaction to determine input index
Matt Corallo [Tue, 6 Dec 2022 22:46:04 +0000 (22:46 +0000)]
Merge pull request #1895 from TheBlueMatt/2022-12-fix-missing-data
Fix some onion errors and assert their length is correct
Matt Corallo [Fri, 2 Dec 2022 21:12:47 +0000 (21:12 +0000)]
Correctly handle any `UPDATE` errors to phandom invoices
If we try to send any onion error with the `UPDATE` flag in
response to a phantom receipt, we should always swap it for
something generic that doesn't require a `channel_update` in it.
Here we use `temporary_node_failure`.
Test provided by Valentine Wallace <vwallace@protonmail.com>
Matt Corallo [Thu, 1 Dec 2022 23:30:04 +0000 (23:30 +0000)]
Replace `build_first_hop_failure_packet` with `HTLCFailReason`
This ensures we always hit our new debug assertions while building
failure packets in the immediately-fail pipeline while processing
an inbound HTLC.
Matt Corallo [Thu, 1 Dec 2022 23:39:28 +0000 (23:39 +0000)]
Use `temporary_node_failure` for a phantom HTLC with bogus CLTV
When we receive a phantom HTLC with a bogus/modified CLTV, we
should fail back with `incorrect_cltv_expiry`, but that requires a
`channel_update`, which we cannot generate for a phantom HTLC which
has no corresponding channel. Thus, instead, we have to fall back
to `incorrect_cltv_expiry`.
Fixes #1879
Matt Corallo [Thu, 1 Dec 2022 20:31:52 +0000 (20:31 +0000)]
Assert that all onion error messages are correct len in tests
When we're constructing an HTLCFailReason, we should check that we
set the data to at least the correct length for the given failure
code, which we do here.
Matt Corallo [Thu, 1 Dec 2022 20:30:45 +0000 (20:30 +0000)]
Correctly include the `sha256_hash_of_onion` field in BADONION errs
The spec mandates that we copy the `sha256_hash_of_onion` field
from the `UpdateFailMalformedHTLC` message into the error message
we send back to the sender, however we simply ignored it. Here we
copy it into the message correctly.
Matt Corallo [Thu, 1 Dec 2022 20:25:33 +0000 (20:25 +0000)]
Drop the stale `final_expiry_too_soon` error code
This replaces `final_expiry_too_soon` with
`incorrect_or_unknown_payment` as was done in
https://github.com/lightning/bolts/pull/608. Note that the
rationale for this (that it may expose whether you are the final
recipient for the payment or not) does not currently apply to us -
we don't apply different final CLTV values to different payments.
However, we might in the future, and this will make us slightly
more consistent with other nodes.