Commit graph

6315 commits

Author SHA1 Message Date
Valentine Wallace
50c850fdd0
Set update_add blinding point on HTLC forward
Used by the next hop to decode their blinded onion payload.
2023-11-29 17:18:40 -05:00
Valentine Wallace
a2b2fb0ceb
Parameterize Channel's htlc forward method by outbound blinding point
Used in the next commit to set the update_add blinding point on HTLC forward.
2023-11-29 17:18:40 -05:00
Valentine Wallace
21ae9fdd69
Set HTLCPreviousHopData::blinded on intro node forward.
Useful so we know to fail back blinded HTLCs where we are the intro node with
the invalid_onion_blinding error per BOLT 4.

We don't set this field for blinded received HTLCs because we don't support
receiving to multi-hop blinded paths yet, and there's no point in setting it
for HTLCs received to 1-hop blinded paths because per the spec they should fail
back using an unblinded error code.
2023-11-29 17:18:39 -05:00
Valentine Wallace
ae15ba8462
Persist whether an HTLC is blinded in HTLCPreviousHopData.
Useful so we know to fail blinded intro node HTLCs back with an
invalid_onion_blinding error per BOLT 4.

Another variant will be added to the new Blinded enum when we support
receiving/forwarding as a non-intro node.
2023-11-29 17:18:39 -05:00
Valentine Wallace
b64523780b
Store whether a forwarded HTLC is blinded in PendingHTLCRouting
We need to store the inbound blinding point in PendingHTLCRouting in order to
calculate the outbound blinding point.

The new BlindedForward struct will be augmented when we add support for
forwarding as a non-intro node.
2023-11-29 17:18:38 -05:00
Valentine Wallace
1596116fa4
Persist outbound blinding points in Channel
A blinding point is provided in update_add_htlc messages if we are relaying or
receiving a payment within a blinded path, to decrypt the onion routing packet
and the recipient-provided encrypted payload within. Will be used in upcoming
commits.
2023-11-29 17:10:43 -05:00
Valentine Wallace
b70525df28
Parse blinded onion errors in tests only.
So we can make sure they're encoded properly.
2023-11-29 17:10:43 -05:00
Valentine Wallace
7f765a39bc
onion_utils: extract decrypting faiure packet into method
Will be used in the next commit to parse onion errors from blinded paths in
tests only.
2023-11-29 17:10:43 -05:00
Valentine Wallace
1e12bdfb3b
Parse blinding point in UpdateAddHTLC
A blinding point is provided in update_add_htlc messages if we are relaying or
receiving a payment within a blinded path, to decrypt the onion routing packet
and the recipient-provided encrypted payload within. Will be used in upcoming
commits.
2023-11-29 17:10:41 -05:00
valentinewallace
f07f4b90f8
Merge pull request #2739 from Evanfeenstra/channelmanager-utils
move static channelmanager functions into their own file
2023-11-29 15:41:26 -05:00
Wilmer Paulino
c2bbfffb1e
Merge pull request #2721 from TheBlueMatt/2023-11-log-forward-peer
Handle missing case in reestablish local commitment number checks
2023-11-29 10:03:56 -08:00
Matt Corallo
4fc3a17115
Merge pull request #2755 from arik-so/arik/taproot-2023-11-followup-2512
Followups to 2512
2023-11-29 04:28:50 +00:00
Arik Sosman
c70ea1d987
Remove unused Taproot import. 2023-11-28 16:18:35 -08:00
Arik Sosman
6e5065d93d
Move validate_counterparty_revocation to ChannelSigner. 2023-11-28 16:14:09 -08:00
Arik Sosman
007e6788f5
Remove superfluous commitment_number parameter. 2023-11-28 16:11:15 -08:00
Arik Sosman
5965fb8375
Gate Taproot-related todos behind cfg flag. 2023-11-28 16:08:10 -08:00
Evan Feenstra
9f4dcd0bd5 move static channelmanager functions into their own file 2023-11-28 12:06:01 -08:00
Matt Corallo
2659a2375e
Merge pull request #2512 from arik-so/taproot/2023-08-taproot-signer-variant
Taproot signer variant
2023-11-28 18:10:53 +00:00
Wilmer Paulino
83af9519a8
Merge pull request #2749 from TheBlueMatt/2023-11-2744-followups
Add `channel_keys_id` to `SpendableOutputDescriptor::StaticOutput`
2023-11-28 08:56:25 -08:00
Arik Sosman
88ce7d6575
Move ECDSA-specific signers into ecdsa.rs
To separate out the logic in the `sign` module, which will start to be
convoluted with multiple signer types, we're splitting out each signer
type into its own submodule, following the taproot.rs example from a
previous commit.
2023-11-27 16:28:55 -08:00
Arik Sosman
de4dd95d29
Reparametrize ChannelSignerType by SignerProvider.
ChannelSignerType is an enum that contains variants of all currently
supported signer types. Given that those signer types are enumerated
as associated types in multiple places, it is prudent to denote one
type as the authority on signer types.

SignerProvider seemed like the best option. Thus, instead of
ChannelSignerType declaring the associated types itself, it simply
uses their definitions from SignerProvider.
2023-11-27 16:27:21 -08:00
Arik Sosman
c6bcf75848
Add TaprootSigner variant to SignerProvider.
Previously, SignerProvider was not laid out to support multiple signer
types. However, with the distinction between ECDSA and Taproot signers,
we now need to account for SignerProviders needing to support both.

This approach does mean that if ever we introduced another signer type
in the future, all implementers of SignerProvider would need to add it
as an associated type, and would also need to write a set of dummy
implementations for any Signer trait they do not wish to support.

For the time being, the TaprootSigner associated type is cfg-gated.
2023-11-27 16:27:21 -08:00
Arik Sosman
f862aa9f5f
Introduce TaprootSigner trait.
For Taproot support, we need to define an alternative trait to
EcdsaChannelSigner. This trait will be implemented by all signers
that wish to support Taproot channels.
2023-11-27 16:27:21 -08:00
Arik Sosman
27b9794bed
Rename SignerProvider's Signer to EcdsaSigner. 2023-11-27 16:27:20 -08:00
Matt Corallo
ac3fd98ec1 Handle missing case in reestablish local commitment number checks
If we're behind exactly one commitment (which we've revoked), we'd
previously force-close the channel, guaranteeing we'll lose funds
as the counterparty has our latest local commitment state's
revocation secret.

While this shouldn't happen because users should never lose data,
sometimes issues happen, and we should ensure we always panic.

Further, `test_data_loss_protect` is updated to test this case.
2023-11-27 23:59:12 +00:00
Matt Corallo
f24830719a Clean up error messages and conditionals in reestablish handling
When we reestablish there are generally always 4 conditions for
both local and remote commitment transactions:
 * we're stale and have possibly lost data
 * we're ahead and the peer has lost data
 * we're caught up
 * we're nearly caught up and need to retransmit one update.

In especially the local commitment case we had a mess of different
comparisons, which is improved here. Further, the error messages
are clarified and include more information.
2023-11-27 23:59:12 +00:00
Matt Corallo
d5710fd6ae Add channel_keys_id to SpendableOutputDescriptor::StaticOutput
In 7f0fd868ad, `channel_keys_id` was
added as an argument to `SignerProvider::get_destination_script`,
allowing implementors to generate a new script for each channel.

This is great, however users then have no way to re-derive the
corresponding private key when they ultimately receive a
`SpendableOutputDescriptor::StaticOutput`. Instead, they have to
track all the addresses as they derive them separately. In many
cases this is fine, but we should support both deployments, which
we do here by simply including the missing `channel_keys_id` for
the user.
2023-11-27 21:37:42 +00:00
Wilmer Paulino
146a291f15
Merge pull request #2744 from rmalonson/destinationscript
Add channel_keys_id as param in get_destination_script to support gen…
2023-11-27 12:20:19 -08:00
Matt Corallo
74078c4bef
Merge pull request #2675 from yellowred/delayed_payment_key_types
Implement struct wrappers for Payment, DelayedPayment, HTLC and Revocation channel keys
2023-11-27 18:57:37 +00:00
Rachel Malonson
7f0fd868ad Add channel_keys_id as param in get_destination_script
This enables implementers to generate a different destination script for each channel.
2023-11-27 10:42:01 -08:00
olegkubrakov
935a716cc6 Implement struct wrappers for channel key types to avoid confusion.
Currently all channel keys and their basepoints exist uniformly as
`PublicKey` type, which not only makes in harder for a developer to
distinguish those entities, but also does not engage the language
type system to check if the correct key is being used in any
particular function.

Having struct wrappers around keys also enables more nuanced
semantics allowing to express Lightning Protocol rules in language.
For example, the code allows to derive `HtlcKey` from
`HtlcBasepoint` and not from `PaymentBasepoint`.

This change is transparent for channel monitors that will use the
internal public key of a wrapper.

Payment, DelayedPayment, HTLC and Revocation basepoints and their
derived keys are now wrapped into a specific struct that make it
distinguishable for the Rust type system. Functions that require a
specific key or basepoint should not use generic Public Key, but
require a specific key wrapper struct to engage Rust type
verification system and make it more clear for developers which
key is used.
2023-11-27 17:52:12 +00:00
Matt Corallo
fa0d015d1f
Merge pull request #2685 from tnull/2022-12-add-electrum-sync
Add electrum support to `lightning-transaction-sync`
2023-11-27 17:10:00 +00:00
Elias Rohrer
a0183d7ef1
Merge pull request #2741 from shaavan/issue-2215
Explicitly reject routes that double-back
2023-11-27 13:13:08 +01:00
Elias Rohrer
8bd4a8f303
Merge pull request #2746 from TheBlueMatt/2023-11-bitcoin-0.30-followups
Drop panic if rust-bitcoin adds a new Network
2023-11-27 12:53:17 +01:00
Matt Corallo
a41954d841 Remove now-redundant checks in BOLT12 Invoice fallback addresses
Now that we use the `rust-bitcoin` `WitnessProgram` to check our
addresses, we can just rely on it, rather than checking the program
length and version.
2023-11-26 19:09:06 +00:00
Matt Corallo
b28068cc42 Drop panic if rust-bitcoin adds a new Network
`rust-bitcoin` 0.30 added `#[non_exhaustive]` to the `Network`
enum, allowing them to "add support" for a new network type without
a major version change in the future. When upgrading, we added a
simple `unreachable` for the general match arm, which would break
in a minor version change of `rust-bitcoin`.

While it seems [possible rust-bitcoin will change
this](https://github.com/rust-bitcoin/rust-bitcoin/issues/2225),
we still shouldn't ba panicking, which we drop here in favor of a
`debug_assert`ion, and a default value.
2023-11-26 19:07:10 +00:00
shaavan
a06d15826f Add test for PathParameterError introduced in previous commit
- Also modify the unwrap_send_err!() macro to handle the
  PathParameterError
2023-11-24 18:51:56 +05:30
Elias Rohrer
31ea90eba2
Use esplora-client's async-https-rustls feature
Now that we upgraded `esplora-client` to 0.6 we can use
`async-https-rustls` instead of manually overriding the `reqwest`
dependency.
2023-11-24 12:48:22 +01:00
Elias Rohrer
c2e81fbb82
DRY up Esplora/Electrum integration_tests 2023-11-23 09:30:58 +01:00
Elias Rohrer
28c14cd884
Add Electrum integration test 2023-11-23 09:30:58 +01:00
Elias Rohrer
4dd5ccbe49
Implement ElectrumSyncClient 2023-11-23 09:30:57 +01:00
Elias Rohrer
d2ecf0766c
Set pending_sync when last-minute check fails in Esplora 2023-11-23 09:30:57 +01:00
Elias Rohrer
82f4c10e18
Move sync_ methods to SyncState 2023-11-23 09:30:57 +01:00
Elias Rohrer
e14e2c3fba
Improve EsploraSyncClient test coverage
In particular, we now test `register_output` functionality, too.
2023-11-23 09:30:57 +01:00
Elias Rohrer
48c46bf772
Improve EsploraSyncClient logging
We give some more information while reducing the log levels to make the
logging less spammy.

We also convert one safe-to-unwrap case from returning an error to
unwrapping the value.
2023-11-23 09:30:57 +01:00
Elias Rohrer
5b7c1d511b
Use upstream TestLogger util in tx sync tests 2023-11-23 09:30:57 +01:00
Elias Rohrer
c8ff32197a
Return confirmation height via Confirm::get_relevant_txids
We previously included the block hash, but it's also useful to include
the height under which we expect the respective transaction to be
confirmed.
2023-11-23 09:30:56 +01:00
Elias Rohrer
70ea110864
Merge pull request #2740 from wpaulino/rust-bitcoin-30-update
Update to rust-bitcoin v0.30.2
2023-11-23 09:28:41 +01:00
Wilmer Paulino
ad56847a6b
Remove nightly warnings 2023-11-22 15:58:01 -08:00
Wilmer Paulino
ec928d55b4
Bump rust-bitcoin to v0.30.2 2023-11-22 15:58:01 -08:00