2020-02-25 21:57:58 +01:00
|
|
|
Rust-Lightning is broken into a number of high-level structures with APIs to hook them
|
|
|
|
together, as well as APIs for you, the user, to provide external data.
|
|
|
|
|
|
|
|
The two most important structures which nearly every application of Rust-Lightning will
|
|
|
|
need to use are `ChannelManager` and `ChannelMonitor`. `ChannelManager` holds multiple
|
|
|
|
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
|
2020-07-21 02:03:52 +02:00
|
|
|
HTLCs which are near expiration. The `chain::Watch` interface provides a way for you to
|
2020-02-25 21:57:58 +01:00
|
|
|
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
|
2020-05-07 01:04:44 +02:00
|
|
|
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.
|
2020-02-25 21:57:58 +01:00
|
|
|
|
|
|
|
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
|
|
|
|
broadcasting, block fetching, and fee estimation must be implemented and the data
|
|
|
|
provided by you, the user.
|
|
|
|
|
|
|
|
The library does not rely on the presence of a runtime environment outside of access to
|
|
|
|
heap, atomic integers, and basic Mutex primitives. This means the library will never
|
|
|
|
spawn threads or take any action whatsoever except when you call into it. Thus,
|
|
|
|
`ChannelManager` and `PeerManager` have public functions which you should call on a timer,
|
|
|
|
network reads and writes are external and provided by you, and the library relies only on
|
|
|
|
block time for current time knowledge.
|
|
|
|
|
|
|
|
At a high level, some of the common interfaces fit together as follows:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
-----------------
|
|
|
|
| KeysInterface | --------------
|
|
|
|
----------------- | UserConfig |
|
2020-08-04 01:55:11 +02:00
|
|
|
-------------------- ^ --------------
|
|
|
|
------| MessageSendEvent | | ^ ----------------
|
2020-08-04 01:51:10 +02:00
|
|
|
/ -------------------- | | | FeeEstimator | <-----------------------
|
2020-07-21 07:12:14 +02:00
|
|
|
| (as MessageSendEventsProvider) | | ---------------- \
|
2020-08-04 01:55:11 +02:00
|
|
|
| ^ | | ^ ------------------------ |
|
2020-07-21 07:12:14 +02:00
|
|
|
| \ | | / ---------> | BroadcasterInterface | |
|
|
|
|
| \ | | / / ------------------------ |
|
2020-08-04 01:55:11 +02:00
|
|
|
| \ | | / / ^ |
|
2020-07-21 07:12:14 +02:00
|
|
|
| (as ------------------ ---------------- | |
|
|
|
|
| ChannelMessageHandler)-> | ChannelManager | ----> | chain::Watch | | |
|
|
|
|
v / ------------------ ---------------- | |
|
|
|
|
--------------- / (as EventsProvider) ^ | |
|
|
|
|
| PeerManager |- \ | | |
|
|
|
|
--------------- \ | (is-a) | |
|
|
|
|
| ----------------- \ _---------------- / /
|
|
|
|
| | chain::Access | \ / | ChainMonitor |---------------
|
|
|
|
| ----------------- \ / ----------------
|
2020-08-04 01:55:11 +02:00
|
|
|
| ^ \ / |
|
|
|
|
(as RoutingMessageHandler) | v v
|
2020-08-04 01:51:10 +02:00
|
|
|
\ ---------------------- --------- -----------------
|
2020-07-30 19:27:41 +02:00
|
|
|
-----------------> | NetGraphMsgHandler | | Event | | chain::Filter |
|
2020-08-04 01:51:10 +02:00
|
|
|
---------------------- --------- -----------------
|
2020-02-25 21:57:58 +01:00
|
|
|
```
|