Commit graph

275 commits

Author SHA1 Message Date
Matt Corallo
617a680984 DRY-up list_channels by having a common lister that takes a filter 2020-01-21 15:09:12 -05:00
Matt Corallo
912f877482 Pass node features through to RouteHops
This exposes the latest Init-context features in the ChannelDetails
passed to the Router during route calculation, which combines those
with the Node-context features tracked from node_announcements to
provide the latest Node-context features in RouteHop structs.

Fields are also added for Channel-context features, though those are
only partially used since no such features are defined today anyway.

These will be useful when determining whether to use new
TLV-formatted onion hop datas when generating onions for peers.
2020-01-21 15:09:12 -05:00
Matt Corallo
a19d71d0b2 Keep track of the Init Features for every connected/channel'd peer
Since we want to keep track of the Init-context features for every
peer we have channels with, we have to keep them for as long as the
peer is connected (since we may open a channel with them at any
point).

We go ahead and take this opportunity to create a new per-peer-state
struct which has two levels of mutexes which is appropriate for
moving channel storage to.

Since we can't process messages from a given peer in parallel, the
inner lock is a regular mutex, but the outer lock is RW so that we
can process for different peers at the same time with an outer read
lock.
2020-01-19 22:47:08 -05:00
Matt Corallo
d2ba7caf47 Pass peer's Init message through to ChannelManager 2020-01-19 22:47:08 -05:00
Jeffrey Czyz
e58440fe45 Remove unnecessary borrow_parts() methods
Accessing a struct through an std::syn::MutexGuard using implicit
dereferencing can confuse the borrow checker. This situation arises when
obtaining mutable references to more than one field of the struct, which
is normally allowed.

https://doc.rust-lang.org/nomicon/borrow-splitting.html

However, when using implicit dereferencing, a mutable reference to the
the entire struct is taken. Thus, attempting to access another field in
this manner will lead to a compilation error.

https://doc.rust-lang.org/error-index.html#E0499

A simple way to avoid this is to first obtain a mutable reference to the
struct using explicit dereferencing.
2020-01-16 10:48:16 -08:00
Matt Corallo
cd5a11fe0d Move features into a separate module out of msgs. 2020-01-13 13:53:20 -05:00
Matt Corallo
31cc243e6f Implement Flat Features
This merges local and global features into one struct, which is
parameterized by where it appers. The parameterization restricts
which queries can be made and which features can be set, in line
with the latest BOLT 9.

Closes #427.
2020-01-12 18:15:25 -05:00
Antoine Riard
933ae34703 Drop Result for ChannelMessageHandler methods
Simplify interfaces between ChannelMessageHandler and PeerManager,
by switching all ChannelMessageHandler errors to HandleError sent
internally instead of being return. With further refactors in Router
and PeerChannelEncryptor, errors management on the PeerManager-side
won't be splitted between try_potential_handleerror and HandleError
processing.

Inside ChannelManager, we now log MsgHandleErrInternal and send
ErrorAction to PeerManager.

On a high-level, it should allow client using API to be more flexible
by polling events instead of waiting function call returns.

We also update handle_error macro to take channel_state_lock from
caller which should avoid some deadlock potential for some edges
cases.

Filter out IgnoreError in handle_error macro, update test in
consequence.
2020-01-05 20:50:07 -05:00
Matt Corallo
eb97a7534d Make ChannelMonitor sign local transactions (at broadcast time) 2019-12-24 12:14:20 -05:00
Matt Corallo
33810eddb5 Drop duplicative current-local-tx storage in channel.
We now have current-local-tx broadcast ability in channel monitors
directly (for ChannelManager deserialization), so we can just use
that instead of always having the Channel store signed ready-to-go
copies of the latest local commitment transaction.

This is further kinda nice since ChannelMonitor is live and can, eg
broadcast HTLC-Success transactions immediately as they will be
generated at broadcast time instead of in advance.

Finally, this lets us clean up a tiny bit in Channel.
2019-12-24 12:14:09 -05:00
Matt Corallo
d6382f5ed4 Remove unused lifetimes.
f71518365f added a series of lifetimes
which were required for an earlier version of the patch but not the
final version. They can be freely removed.
2019-12-20 14:54:23 -05:00
Matt Corallo
f2a2fd0d48 Make ChannelKeys an API and template Channel with it.
Instead of having in-memory access to the list of private keys
associated with a channel, we should have a generic API which
allows us to request signing, allowing the user to store private
keys any way they like.

The first step is the (rather mechanical) process of templating
the entire tree of ChannelManager -> Channel impls by the
key-providing type. In a later commit we should expose only public
keys where possible.
2019-12-11 17:29:42 -05:00
Matt Corallo
fd1d5fd62c Randomize initial onion packet data.
This avoids at least the trivial hop count discovery attack, though
other obvious ones remain and are slightly harder to avoid.

See https://github.com/lightningnetwork/lightning-rfc/pull/697
2019-12-01 19:22:44 -05:00
Matt Corallo
7591eda7a8
Merge pull request #407 from TheBlueMatt/2019-11-396-english
#396 with a few english fixes
2019-11-30 04:00:27 +00:00
Matt Corallo
fbe3943cab Update comments to be a bit more descriptive and fix english a bit 2019-11-29 20:38:03 -05:00
Antoine Riard
d53f48e157 Add timer_chan_freshness_every_min
Latency/peer disconnection may trigger us to mark as disabled
some of our channels. After some time, if channels are still
disabled we need to broadcast ChannelUpdate to inform other network
peers about the uselessness of these channels.
2019-11-29 18:12:40 -05:00
Matt Corallo
be7d3d17ac
Merge pull request #401 from ariard/2019-11-log-tx-broadcast
Add log for every tx broadcast
2019-11-25 22:39:48 +00:00
Antoine Riard
9df0250dbb Add log for every tx broadcast
Added macro log_tx in macro_logger.rs
2019-11-25 16:55:14 -05:00
Valentine Wallace
f71518365f
chaininterface+multi: add filter_block and reentered to ChainWatchInterface
Because filter_block takes a  and returns a list of s , we must add a lifetime to the ChainWatchInterface, which bubbles up in a lot of places. These places include adding a lifetime  to the Node struct, which causes a lot of rearranging tests so that variables don't go out of scope before the Node that owns them does.
2019-11-21 20:35:53 -05:00
Valentine Wallace
969f863013
chaininterface: add BlockNotifier struct
Adding this struct will allow us to remove the circular reference
between ChainListeners and the ChainWatchInterface, because it
separates out the responsibility of notifying listeners about new
blocks from the responsibility of storing and retrieving watched
transactions.
2019-11-21 20:34:00 -05:00
Valentine Wallace
1ec0c14fce
multi: remove listeners field and method from ChainWatchInterface
This includes the purpose of this PR, which is to remove the circular reference created by ChainListeners self-adding themselves to their ChainWatchInterface's `listeners` field.
2019-11-21 18:06:35 -05:00
Antoine Riard
e938e592b2 Document our handling of announcement_sigs
We may have in the future to rebroadcast announcement_sigs at
peer reconnection if this a burning issue as spec lacks
a acknowledgement mechanism.
2019-11-19 17:48:22 -05:00
RJ Rybarczyk
06091cee0f Merge branch 'master' of github.com:rust-bitcoin/rust-lightning into use-workspaces 2019-11-18 23:51:21 +00:00
RJ Rybarczyk
5305223495 Merge branch 'master' of github.com:rust-bitcoin/rust-lightning into use-workspaces 2019-11-18 19:44:55 +00:00
RJ Rybarczyk
88fef649b1 Use workspaces to separate crates 2019-11-15 02:44:30 +00:00
Renamed from src/ln/channelmanager.rs (Browse further)