Commit graph

885 commits

Author SHA1 Message Date
Matt Corallo
615ef7d6f8 Add a const and docs for the min min_final_cltv_expiry we allow 2021-04-28 15:30:25 -04:00
Matt Corallo
fd0ebcf8ec Add some simple tests of payment secret tracking 2021-04-28 15:30:25 -04:00
Matt Corallo
f9a6cb2a8b Fail PendingInboundPayments after their expiry time is reached 2021-04-28 15:30:25 -04:00
Matt Corallo
3b8ac139ba Give users who use get_payment_secret_preimage the PaymentPreimage
For users who get PaymentPreimages via
`get_payment_secret_preimage`, they need to provide the
PaymentPreimage back in `claim_funds` but they aren't actually
given the preimage anywhere.

This commit gives users the PaymentPreimage in the
`PaymentReceived` event.
2021-04-28 15:30:25 -04:00
Matt Corallo
ecaeddca47 Make the PaymentSecret in PaymentReceived events non-Optional 2021-04-28 15:30:25 -04:00
Matt Corallo
5e968114b6 Drop the amount parameter to claim_funds
Like the payment_secret parameter, this paramter has been the source
of much confusion, so we just drop it.

Users should prefer to do this check when registering the payment
secret instead of at claim-time.
2021-04-28 15:30:25 -04:00
Matt Corallo
5a1404809f Drop now-useless PaymentSecret parameters when claiming/failing-back 2021-04-28 15:30:25 -04:00
Matt Corallo
210b887d7c Add a user_payment_id to get_payment_secret+PaymentReceived
This allows users to store metadata about an invoice at
invoice-generation time and then index into that storage with a
general-purpose id when they call `get_payment_secret`. They will
then be provided the same index when the payment has been received.
2021-04-28 15:30:25 -04:00
Matt Corallo
25e4f3e46e Drop dead code for handling non-MPP payments in claim_funds 2021-04-28 15:30:25 -04:00
Matt Corallo
8bf3d8dec2 Req+check payment secrets for inbound payments pre-PaymentReceived
Our current PaymentReceived API is incredibly easy to mis-use -
the "obvious" way to implement a client is to always call
`ChannelManager::claim_funds` in response to a `PaymentReceived`
event. However, users are *required* to check the payment secret
and value against the expected values before claiming in order to
avoid a number of potentially funds-losing attacks.

Instead, if we rely on payment secrets being pre-registered with
the ChannelManager before we receive HTLCs for a payment we can
simply check the payment secrets and never generate
`PaymentReceived` events if they do not match. Further, when the
user knows the value to expect in advance, we can have them
register it as well, allowing us to check it for them.

Other implementations already require payment secrets for inbound
payments, so this shouldn't materially lose compatibility.
2021-04-28 15:30:25 -04:00
Matt Corallo
a7082901fe Use payment_secrets in all sends in functional tests
This prepares us for requiring payment_secrets for all received
payments, by demonstrating test changes work even prior to the new
requirement.

In order to avoid needing to pipe payment secrets through to
additional places in the claim logic and then removing that
infrastructure once payment secrets are required, we use the new
payment secret storage in ChannelManager to look up the payment
secret for any given pament hash in claim and fail-back functions.
This part of the diff is reverted in the next commit.
2021-04-28 15:30:25 -04:00
Matt Corallo
73a3bb3dca Use known InvoiceFeatures for routing in tests 2021-04-28 15:30:25 -04:00
Matt Corallo
6e5cf5e8d4 Pipe through PaymentSecrets in tests during payment hash creation
In order to reduce code movement in the next commit, this commit
simply tweaks get_payment_preimage_hash!() and related functions in
functional tests to return a payment secret. Further, we ensure
that we always call get_payment_preimage_hash!() with the node
which will ultimately receive the payment.
2021-04-28 15:30:25 -04:00
Matt Corallo
7d8dc7ac1a DRY the get_route_and_payment_hash!() macro duplicated in tests 2021-04-28 15:30:25 -04:00
Matt Corallo
7bf6bd2317 Add payment secret and preimage tracking in ChannelManager
This adds support for tracking payment secrets and (optionally)
payment preimages in ChannelManager. This potentially makes client
implementations much simper as they don't have to have external
payment preimage tracking.

This doesn't yet use such tracking anywhere.
2021-04-28 15:30:25 -04:00
Devrandom
7113dbd904 Send Init message immediately after handshake even if not initiator
We were waiting for the initiator, but the spec doesn't guarantee that they will send Init first, so we might theoretically wait forever.

Also, lnprototest expects this behavior.
2021-04-28 15:22:34 +02:00
Matt Corallo
3180c436f5 Set payment_secret to required in features flags 2021-04-27 23:40:33 +00:00
Matt Corallo
affefb677e
Merge pull request #854 from TheBlueMatt/2021-03-fix-lens
Fix serialization expected lengths and check them in test/fuzzing
2021-04-27 02:05:29 +00:00
Matt Corallo
25b9fd8079 Fix serialization expected lengths and check them in test/fuzzing 2021-04-27 01:09:12 +00:00
Matt Corallo
cc18e8a279
Merge pull request #876 from valentinewallace/invoice-features
Invoice features
2021-04-26 18:00:33 +00:00
Valentine Wallace
b24d02c6a2
Add Features feature to invoices. 2021-04-26 12:29:46 -04:00
Matt Corallo
36570f4593
Merge pull request #890 from TheBlueMatt/2021-04-fix-chan-shutdown-crash
Fix (and test) panic when our counterparty uses a bogus funding tx
2021-04-24 00:03:42 +00:00
Matt Corallo
eb42caf8a0 Fix (and test) panic when our counterparty uses a bogus funding tx
During the block API refactor, we started calling
Channel::force_shutdown when a channel is closed due to a bogus
funding tx. However, we still set the channel's state to Shutdown
prior to doing so, leading to an assertion in force_shutdown (that
the channel is not already closed).

This removes the state-set call and adds a (long-overdue) test for
this case.

Fixes: 60b962a18e
2021-04-23 22:52:43 +00:00
Valentine Wallace
f52b617c12
Expose Features::from_le_bytes() method
Useful for constructing features objects from raw feature bytes.
2021-04-23 17:11:40 -04:00
Matt Corallo
0d75a63ead
Merge pull request #889 from jkczyz/2021-04-electrum-trait
Define chain::Confirm trait for use by Electrum clients
2021-04-23 19:13:23 +00:00
Jeffrey Czyz
99e2283aee
Drop pub functions for ChainMonitor's Listen impl 2021-04-22 14:17:26 -07:00
Jeffrey Czyz
23c4c8b7c7
Implement chain::Confirm for relevant structs 2021-04-22 14:17:26 -07:00
Matt Corallo
bfd1128213 [peer_handler] Take the peers lock before getting messages to send
Previously, if a user simultaneously called
`PeerHandler::process_events()` from two threads, we'd race, which
ended up sending messages out-of-order in the real world.
Specifically, we first called `get_and_clear_pending_msg_events`,
then take the `peers` lock and push the messages we got into the
sending queue. Two threads may both get some set of messages to
send, but then race each other into the `peers` lock and send the
messages in random order.

Because we already hold the `peers` lock when calling most message
handler functions, we can simply take the lock before calling
`get_and_clear_pending_msg_events`, solving the race.
2021-04-21 22:03:45 +00:00
Jeffrey Czyz
524c532d40
Rename onchain_events_waiting_threshold_conf 2021-04-14 13:00:16 -07:00
Jeffrey Czyz
5e8b683333
Parameterize test_htlc_on_chain_timeout
This test failed when ConnectionStyle was set to a SkippingBlocks
variant because of a bug in ChannelMonitor::update_best_block.
Parameterize the test with these styles to catch any regressions.
2021-04-14 13:00:16 -07:00
Jeffrey Czyz
d45b38f43f
Test ChainMonitor's Electrum interface 2021-04-14 12:57:06 -07:00
Jeffrey Czyz
87f74fd451
Reuse txdata in functional_test_utils.rs 2021-04-14 12:57:06 -07:00
Jeffrey Czyz
c57bf73a02
Add ChannelMonitor::get_relevant_txids
Define an Electrum-friendly interface for ChannelMonitor where txids of
relevant transactions can be obtained. For any of these transactions
that are re-orged out of the chain, users must call
transaction_unconfirmed.
2021-04-14 12:57:05 -07:00
Jeffrey Czyz
65e588fd92
Add ChannelMonitor::transaction_unconfirmed
Define an Electrum-friendly interface for ChannelMonitor where
transactions are unconfirmed independently from updating the latest
block.
2021-04-14 12:57:05 -07:00
Jeffrey Czyz
8e3744813a
Add ChannelMonitor::update_best_block
Expose a way for Electrum users to update the best block on a
ChannelMonitor independently of confirming transactions.
2021-04-14 12:57:05 -07:00
Jeffrey Czyz
2db1f1f656
Track block height in ChannelMonitor 2021-04-14 12:57:05 -07:00
Jeffrey Czyz
5610ca193d
Combine ChannelManager's block hash and height
There is a possible race condition when both the latest block hash and
height are needed. Combine these in one struct and place them behind a
single lock.
2021-04-14 12:57:04 -07:00
Jeffrey Czyz
24351f5868
Add txid to on-chain event tracking
When using Electrum, transactions are individually unconfirmed during a
reorg rather than by block. Store the txid of the transaction creating
the on-chain event so that it can be used to determine which events need
to be removed when a transaction is unconfirmed.
2021-04-14 12:57:04 -07:00
Jeffrey Czyz
561ddc0b44
Check for duplicate HTLC events having matured 2021-04-14 12:57:04 -07:00
Jeffrey Czyz
a89996564c
Flatten onchain_events_waiting_threshold_conf
Rather than mapping height to a vector of events, use a single vector
for all events. This allows for easily processing events by either
height or transaction. The latter will be used for an interface suitable
for Electrum.
2021-04-14 12:57:04 -07:00
Matt Corallo
6982434c58 Test new transactions_unconfirmed 2021-04-14 14:26:31 -04:00
Matt Corallo
46ac4c796a Expose ChannelManager's current config and use it in reload in tests 2021-04-14 14:26:18 -04:00
Matt Corallo
bdbba5e98f Add method to note transaction unconfirmed/reorged-out 2021-04-14 14:26:17 -04:00
Matt Corallo
eee1c30ea6
Merge pull request #875 from TheBlueMatt/2021-04-fix-bench
Fix benchmark compile warnings and errors
2021-04-14 01:51:33 +00:00
Valentine Wallace
5b4c3c603c
Rename timer_chan_freshness_every_min for uniformity with PeerManager 2021-04-12 20:42:09 -04:00
Matt Corallo
7e39f8735a Fix benchmark compile warnings and errors
Hopefully soon once a few more PRs get merged we can require this
in CI so we won't have any more regressions here.
2021-04-12 18:04:55 -04:00
Matt Corallo
8088e4ba15
Merge pull request #856 from TheBlueMatt/2021-03-check-tx
Take the full funding transaction from the user on generation
2021-04-10 20:27:24 +00:00
Matt Corallo
3f2efcdfa7 Take the full funding transaction from the user on generation
Instead of relying on the user to ensure the funding transaction is
correct (and panicing when it is confirmed), we should check it is
correct when it is generated. By taking the full funding transaciton
from the user on generation, we can also handle broadcasting for
them instead of doing so via an event.
2021-04-09 19:59:06 -04:00
Matt Corallo
dba0709b08
Merge pull request #861 from lightning-signer/degenerify
De-generify Sign methods
2021-04-09 23:57:20 +00:00
Matt Corallo
021959f822
Merge pull request #866 from TheBlueMatt/2021-04-log-err-node
Log the node generating an onion error
2021-04-09 22:23:14 +00:00