Commit graph

567 commits

Author SHA1 Message Date
Matt Corallo
78232f2aed Fail incoming HTLCs sent after we start shutdown, not the chan 2018-11-02 22:26:51 -04:00
Matt Corallo
366e79615b Fix pre-noise outbound peer disconnect panic found by fuzzer
If we make an outbound connection to a peer who we are already
connected to, and the outbound connection fails
pre-noise-completion, we will remove the original peer connection
from our node_id_to_descriptor map.

The fuzzer managed to find this by crashing in Channel's assertions
that we don't do a get_channel_reestablish() when the Channel isn't
already marked disconnected.
2018-11-02 10:50:32 -04:00
Matt Corallo
b030e84ad8 Add logging for (dis)connect in peer_handler/channelmanager 2018-11-02 10:45:29 -04:00
Matt Corallo
a11e27d20e Send closing_signed when appropriate as pending HTLCs clear 2018-11-01 17:08:53 -04:00
Matt Corallo
1993ec0d12 Always send Shutdown resposnes to Shutdown messages
We always require that any changes to Channel state be committed
immediately (within the same lock) so we should never have
uncommitted changes which would prevent us from sending a Shutdown
response.
2018-11-01 17:06:07 -04:00
Matt Corallo
7bb598e525 Refactor out first-closing-sent creation 2018-11-01 17:05:56 -04:00
Matt Corallo
4eb8a4905c Use ChannelError in shutdown handling, clean up, impl err actions 2018-11-01 13:50:03 -04:00
Matt Corallo
11776dbb63 Add warnings reminding users to use SegWit funding inputs 2018-11-01 13:50:03 -04:00
Schalk van Heerden
a0be4d1758 Added config interface to allow users to specify channel limits 2018-10-31 15:45:30 -04:00
Matt Corallo
9189d0e61d Require at least 1k sat for outbound channels and meet BTC's dust 2018-10-31 15:45:30 -04:00
Matt Corallo
55a74b5dab Use non-funder's funding block wait instead of max with ours
This is both required by the protocol and also makes sense - if
we're the funder we don't mind accepting payment on the channel
after one confirmation because we assume we won't double-spend
ourselves.
2018-10-31 15:45:30 -04:00
Matt Corallo
64bd2eaa7f Give ManyChannelMonitor a logger and trace add_update events 2018-10-29 14:26:05 -04:00
Matt Corallo
4a51f4f073 fix broken state comparison (thanks @yuntai!) 2018-10-27 09:58:10 -04:00
Matt Corallo
6ed5a829bb Fix + test disconnect/reconnect prior to FundingLocked 2018-10-27 09:58:10 -04:00
Matt Corallo
7f91572e2e Add very basic test of ChannelManager serialization round-trip 2018-10-27 09:58:10 -04:00
Matt Corallo
a2fb3ccc08 Implement and document Channel/ChannelManager (de)serialization 2018-10-27 09:58:10 -04:00
Matt Corallo
b2bd64d2eb Store+expose bits of Channel[Monitor] to figure out local state 2018-10-27 09:42:04 -04:00
Matt Corallo
6f08779b04 Track ChannelMonitor-watched-outpoints (+ remove now-uesless Mutex) 2018-10-27 09:42:04 -04:00
Matt Corallo
56513f2927 Track last_block_hash in ChannelMonitor and expose it on deser
Also make block_connected take a &mut self to ensure serialized
state will always be self-consistent.
2018-10-27 09:42:04 -04:00
Matt Corallo
612e2801f8 Redo ChannelMonitor deserialization to avoid read_to_end()
This slightly changes the serialization format, but we're still
early enough that that's OK.
2018-10-27 09:42:04 -04:00
Matt Corallo
4eafd37d20 impl Readable/Writable for Route 2018-10-27 09:42:04 -04:00
Matt Corallo
74cec623fd Add a BIG lock to ChannelManager
During normal operation we should never need to take this, so we
use a RwLock that allows normal parallelism until we want to
serialize out our ChannelManager, at which point we can take the
write-mode lock.
2018-10-27 09:42:04 -04:00
Matt Corallo
47fe673c57 Give ChannelMonitor a logger via new ReadableArgs trait 2018-10-27 09:42:04 -04:00
Matt Corallo
bb43b98e8f Store [u8; 32]s instead of SharedSecrets (for deserialization) 2018-10-27 09:42:04 -04:00
Matt Corallo
c0c139cdc2 Fix and test update_add_htlc but disconnect pre-commitment_signed 2018-10-27 09:42:04 -04:00
Matt Corallo
294ad32523 Avoid reentrancy of send_data from PeerHandler::read_bytes.
This greatly simplifies clients of PeerHandler, and because almost
all response messages have already been moved to process_events
this doesn't change much effeciency-wise.
2018-10-27 09:42:04 -04:00
Matt Corallo
249aa77550 Send channel_reestablish out-of-band to ensure ordered deliver 2018-10-27 09:42:04 -04:00
Matt Corallo
e2de49ddc4 Respond to channel_reestablish out-of-band for ordered delivery 2018-10-27 09:42:04 -04:00
Matt Corallo
4342114345 Send RAA/CS messages out-of-band to ensure ordered delivery 2018-10-27 09:42:04 -04:00
Matt Corallo
812f255d7c Send shutdown/closing_signed msgs out-of-band for ordered delivery 2018-10-27 09:42:04 -04:00
Matt Corallo
e382a7b4b3 Send announcement_signatures msgs out-of-band for ordered delivery 2018-10-27 09:42:04 -04:00
Matt Corallo
c962a27156 Send funding_signed messages out-of-band to ensure ordered delivery 2018-10-27 09:42:04 -04:00
Matt Corallo
608d517f92 Send AcceptChannel responses out-of-band to ensure ordered delivery 2018-10-27 09:42:04 -04:00
Matt Corallo
e397cb9960 Split Event, move MessageSendEvent push() inside channel_state lock 2018-10-27 09:42:04 -04:00
Antoine Riard
5180686b1d Integrate destination_script from KeysInterface in ChannelManager/Channel
Drop channel_monitor_claim_key from ChannelKeys
2018-10-27 09:42:04 -04:00
Antoine Riard
32a9378909 Integrate shutdown_pubkey from KeysInterface in ChannelManager/Channel
Drop channel_close_key from ChannelKeys
2018-10-27 09:42:04 -04:00
Antoine Riard
e361fed0f1 Integrate KeysInterface to ChannelManager with Arc 2018-10-27 09:42:04 -04:00
Antoine Riard
d33cb3cca5 Add a KeysInterface which provides keys from user
Move ChannelKeys into keysinterface for generate a set of it from
master_seed and change return type to panic on bogus data
2018-10-27 09:34:45 -04:00
Antoine Riard
8c235d9e28 Generate Events from ChannelMonitor to indicate spendable ouputs
Extend KeyStorage with delayed_payment_base_key and per_commitment_point
to derive local_delayed private key
2018-10-27 09:34:28 -04:00
Matt Corallo
70b026c3c5
Merge pull request #224 from TheBlueMatt/2018-10-221-whitespace
#221 with a few trailing spaces removed
2018-10-25 21:21:54 -04:00
Yuntai Kyong
f133554697 Add PaymentFailReason for fail_htlc_backwards
to indicate fail reason after a PaymentReceived event
2018-10-25 21:24:53 +09:00
Matt Corallo
c662dd3e94 Fix XXXs that slipped into router and handle HTLCFailCHannelUpdates 2018-10-24 00:44:15 -04:00
Matt Corallo
497643a65b Add basic sanity testing for channel monitor update failure handle 2018-10-23 16:03:30 -04:00
Matt Corallo
267b9a44df ChannelManager support for monitor update failure in one place 2018-10-23 16:03:30 -04:00
Matt Corallo
c36d23107c Add Channel support for monitor-update-failed pausing 2018-10-23 16:03:30 -04:00
Matt Corallo
b02670a920 Add an Event for sending revoke_and_ack messages out-of-band 2018-10-23 16:03:30 -04:00
Matt Corallo
4cca933288 Pull out the HTLC forwarding loop into a function 2018-10-23 16:03:30 -04:00
Matt Corallo
695eec23c4 Pull out regenerating RAA/CS in channel_reestablish handling 2018-10-23 16:03:30 -04:00
Matt Corallo
bd2c839a73 Move channel monitor updates inside the channel_state lock
This really, really sucks as it defeats almost all of the
cross-channel parallelism we'd intended to have - waiting on a
client to update a watchtower for an unrelated channel to process
any messages is really shitty. We should revisit this with
per-channel locks as a compile-time option post-0.1.
2018-10-23 16:03:30 -04:00
Matt Corallo
13b80ce805 Add test for two-updates-in-flight disconnect channel resumption 2018-10-23 15:26:11 -04:00