channels, routes payments between them, and exposes a simple API to make and receive
payments. Individual `ChannelMonitor`s monitor the on-chain state of a channel, punish
counterparties if they misbehave, and force-close channels if they contain unresolved
-HTLCs which are near expiration. The `ManyChannelMonitor` API provides a way for you to
+HTLCs which are near expiration. The `chain::Watch` interface provides a way for you to
receive `ChannelMonitorUpdate`s from `ChannelManager` and persist them to disk before the
channel steps forward.
There are two additional important structures that you may use either on the same device
-as the `ChannelManager` or on a separate one. `Router` handles receiving channel and node
-node announcements and calculates routes for sending payments. `PeerManager` handles the
-authenticated and encrypted communication protocol, monitoring for liveness of peers,
-routing messages to `ChannelManager` and `Router` instances directly, and receiving
-messages from them via the `EventsProvider` interface.
+as the `ChannelManager` or on a separate one. `NetGraphMsgHandler` handles receiving channel
+and node announcements, which are then used to calculate routes by `get_route` for sending payments.
+`PeerManager` handles the authenticated and encrypted communication protocol,
+monitoring for liveness of peers, routing messages to `ChannelManager` and `NetGraphMsgHandler`
+instances directly, and receiving messages from them via the `EventsProvider` interface.
These structs communicate with each other using a public API, so that you can easily add
a proxy in between for special handling. Further, APIs for key generation, transaction
-----------------
| KeysInterface | --------------
----------------- | UserConfig |
- -------------------- | --------------
- /------| MessageSendEvent | | | ----------------
- | -------------------- | | | FeeEstimator |
- | (as MessageSendEventsProvider) | | ----------------
- | ^ | | / | ------------------------
- | \ | | / ---------> | BroadcasterInterface |
- | \ | | / / | ------------------------
- | \ v v v / v ^
- | (as ------------------ ----------------------
- | ChannelMessageHandler)-> | ChannelManager | ----> | ManyChannelMonitor |
- v / ------------------ ----------------------
---------------- / ^ (as EventsProvider) ^
-| PeerManager |- | \ / /
---------------- | -------\---/----------
- | ----------------------- / \ /
- | | ChainWatchInterface | - v
- | ----------------------- ---------
- | | | Event |
-(as RoutingMessageHandler) v ---------
- \ ----------
- -----------------> | Router |
- ----------
+ -------------------- ^ --------------
+ ------| MessageSendEvent | | ^ ----------------
+ / -------------------- | | | FeeEstimator | <-----------------------
+ | (as MessageSendEventsProvider) | | ---------------- \
+ | ^ | | ^ ------------------------ |
+ | \ | | / ---------> | BroadcasterInterface | |
+ | \ | | / / ------------------------ |
+ | \ | | / / ^ |
+ | (as ------------------ ---------------- | |
+ | ChannelMessageHandler)-> | ChannelManager | ----> | chain::Watch | | |
+ v / ------------------ ---------------- | |
+--------------- / (as EventsProvider) ^ | |
+| PeerManager |- \ | | |
+--------------- \ | (is-a) | |
+ | ----------------- \ _---------------- / /
+ | | chain::Access | \ / | ChainMonitor |---------------
+ | ----------------- \ / ----------------
+ | ^ \ / |
+(as RoutingMessageHandler) | v v
+ \ ---------------------- --------- -----------------
+ -----------------> | NetGraphMsgHandler | | Event | | chain::Filter |
+ ---------------------- --------- -----------------
```