Create architecture diagram (#23)

* first draft

* clarify groups of components

* more architecture

* Improve key components section

* Clarify communication between core ln and hsmd

* Add modules section

Co-authored-by: Evan Feenstra <evanfeenstra@gmail.com>
This commit is contained in:
Jules
2022-06-09 08:22:33 -06:00
committed by GitHub
parent 688f1bd0e8
commit 5abc15f3f4

85
ARCHITECTURE.md Normal file
View File

@@ -0,0 +1,85 @@
```
┌──────────────────┐
│ CORE LN │
│ │
│ │
│ - lightningd │
│ - channeld │
│ - openingd │
│ │
└────────┬─────────┘
│ UNIX FILE DESCRIPTORS
HSMD │
┌─────────────────────────────┼──────────────────────────────────────┐
│ │ │
│ ┌──────────┼───────────┐ │
│ │ │ │ │
│ │ ┌────────▼─────────┐ │ │
│ │ │ CLN CLIENT │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ BROKER │ │ SIGNER LOOP │ │ --------- BITCOIND │
│ │ └────────┬─────────┘ │ │
│ │ │ │ │
│ │ │ │ │
│ │ | MPSC │ │
│ │ │ │ │
│ │ │ │ │
│ │ ┌──────▼──────┐ │ │
│ │ │ MQTT BROKER │ │ │
│ │ └──────┬──────┘ │ │
│ │ │ │ │
│ └──────────┼───────────┘ │
│ │ │
│ │ │
│ │ MQTT │
│ │ │
│ │ │
│ ┌────────────┼────────────┐ │
│ │ │ │ │
│ │ ┌──────▼──────┐ │ │
│ │ │ MQTT CLIENT │ │ │
│ │ └──────┬──────┘ │ │
│ │ │ │ │
│ SPHINX-KEY │ │ │ │
│ │ │ MPSC │ │
│ │ │ │ │
│ │ │ │ │
│ │ ┌──────────▼──────────┐ │ │
│ │ │ VLS PROTOCOL SIGNER │ │ │
│ │ └──────────┬──────────┘ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ HAL SPI │ │
│ │ │ │ │
│ │ │ │ │
│ │ ┌───────▼───────┐ │ │
│ │ │ SD CARD, LEDs │ │ │
│ │ └───────────────┘ │ │
│ │ │ │
│ └─────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────┘
```
## Modules
- `HSMD`: Daemon taken out of Core Lightning that handles private key material, and serves signing requests remotely.
- `BROKER`: Proxies HSMD requests from `CORE LN` to `SPHINX-KEY` via MQTT.
- `SPHINX-KEY`: Stores the private keys, and responds to signing requests.
## Key Components
- `CORE LN`: Sends HSMD requests to `CLN CLIENT` via UNIX file descriptors.
- `CLN CLIENT`: Reads and writes HSMD requests and responses via UNIX file descriptors. Lives in `broker/unix_fd.rs`.
- `SIGNER LOOP`: Loops on HSMD requests received on `CLN CLIENT`, and sends them to `MQTT BROKER` via rust `std::sync::mpsc` thread communication channels. Lives in `broker/unix_fd.rs`.
- `MQTT BROKER`: Receives requests from `SIGNER LOOP` via `mpsc` channels, and sends them to `SPHINX KEY` over the internet via authenticated MQTT. Lives in `broker/mqtt.rs`.
- `BITCOIND`: Provides on-chain data to `BROKER` for validation of the operations of `VLS PROTOCOL SIGNER`.
- `MQTT CLIENT`: Receives MQTT messages from `MQTT BROKER` over the internet and sends them to `VLS PROTOCOL SIGNER` via `mpsc` channels. `MQTT CLIENT` lives in `sphinx-key/src/conn/mqtt.rs` and `VLS PROTOCOL SIGNER` lives in `signer/src/lib.rs`.
- `SD CARD`: Persists data from `VLS PROTOCOL SIGNER`. Communicates with `VLS PROTOCOL SIGNER` via the SPI protocol implemented in `esp_idf_hal::spi`.
- `LEDs`: Show users and engineers the state of the sphinx-key, for both UX and debugging. Also communicate with `VLS PROTOCOL SIGNER` via `esp_idf_hal::spi`.
Paste the code block above into `asciiblock.com` to make edits. Then press the download button on the top right of the pane to bring it back here.