From a3a35eed3bc28fe344ca9fc79ef36a5f53d27e2d Mon Sep 17 00:00:00 2001 From: okjodom Date: Wed, 15 Nov 2023 12:08:50 -0800 Subject: [PATCH] lint: format README.md Adds spaces around headings and sections. See https://github.com/DavidAnson/markdownlint/blob/v0.31.1/doc/md022.md --- README.md | 95 ++++++++++++++++++++++++++------------------- sim-cli/src/main.rs | 12 +++--- 2 files changed, 60 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 5097bfa8..0e8cc607 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,32 @@ # SimLN -SimLN is a simulation tool that can be used to generate realistic -payment activity on any lightning network topology. It is intentionally -environment-agnostic so that it can be used across many environments - -from integration tests to public signets. +SimLN is a simulation tool that can be used to generate realistic +payment activity on any lightning network topology. It is intentionally +environment-agnostic so that it can be used across many environments - +from integration tests to public signets. -This tool is intended to serve developers who are familiar with +This tool is intended to serve developers who are familiar with lightning network development. It may be useful to you if you are: -* A protocol developer looking to test proposals. + +* A protocol developer looking to test proposals. * An application developer load-testing your application. -* A signet operator interested in a hands-off way to run an active node. +* A signet operator interested in a hands-off way to run an active node. * A researcher generating synthetic data for a target topology. ## Pre-Requisites -SimLN requires you to "bring your own network" to generate activity + +SimLN requires you to "bring your own network" to generate activity on. You will need: -* A [lightning network](#lightning-environments) connected with any + +* A [lightning network](#lightning-environments) connected with any topology of channels. * Access to execute commands on _at least_ one node in the network. * Rust compiler [installed](https://www.rust-lang.org/tools/install). ## LN Implementation Support -* LND ✅ -* CLN ✅ + +* LND ✅ +* CLN ✅ * Eclair 🏗️ * LDK-node 🏗️ @@ -30,13 +34,16 @@ See our [tracking issue](https://github.com/bitcoin-dev-project/sim-ln/issues/26 for updates on implementation support (contributions welcome!). ## Getting Started -Clone the repo: + +Clone the repo: + ``` git clone https://github.com/bitcoin-dev-project/sim-ln cd sim-ln ``` -Install the CLI: +Install the CLI: + ``` cargo install --locked --path sim-cli/ ``` @@ -50,9 +57,10 @@ sim-cli Run `sim-cli -h` to see configuration options available. See [setup instructions](#simulation-file-setup) for details on configuring the simulation file. ### Simulation File Setup -The simulator requires access details for a set of `nodes` that you -have permission to execute commands on. Note that the current version -of the simulator uses keysend to execute payments, which must be + +The simulator requires access details for a set of `nodes` that you +have permission to execute commands on. Note that the current version +of the simulator uses keysend to execute payments, which must be enabled in LND using `--accept-keysend` (for CLN node it is enabled by default). The required access details will depend on the node implementation. For LND, the following @@ -82,17 +90,18 @@ Whereas for CLN nodes, the following information is required: **Note that node addresses must be declare with HTTPS transport, i.e. ** Payment activity can be simulated in two different ways: -* Random activity: generate random activity on the `nodes` provided, + +* Random activity: generate random activity on the `nodes` provided, using the graph topology to determine payment frequency and size. -* Defined activity: provide descriptions of specific payments that +* Defined activity: provide descriptions of specific payments that you would like the generator to execute. ### Setup - Random Activity -To run the simulator with random activity generation, you just need to -provide a set of nodes and the simulator will generate activity based -on the topology of the underlying graph. Note that payments will only -be sent between the `nodes` that are provided so that liquidity does +To run the simulator with random activity generation, you just need to +provide a set of nodes and the simulator will generate activity based +on the topology of the underlying graph. Note that payments will only +be sent between the `nodes` that are provided so that liquidity does not "drain" from the simulation. ``` @@ -116,35 +125,39 @@ not "drain" from the simulation. ``` Nodes can be identified by an arbitrary string ("Alice", "CLN1", etc) or -by their node public key. If a valid public key is provided it *must* +by their node public key. If a valid public key is provided it _must_ match the public key reported by the node. -There are a few cli flags that can be used to toggle the characteristics -of the random activity that is generated: -* `--expected-payment-amount`: the approximate average amount that +There are a few cli flags that can be used to toggle the characteristics +of the random activity that is generated: + +* `--expected-payment-amount`: the approximate average amount that will be sent by nodes, randomness will be introduced such that larger nodes send a wider variety of payment sizes around this expectation. -* `--capacity-multiplier`: the number of times over that each node in +* `--capacity-multiplier`: the number of times over that each node in the network sends their capacity in a calendar month, for example: - * `capacity-multiplier=2` means that each node sends double their + * `capacity-multiplier=2` means that each node sends double their capacity in a month. - * `capacity-multiplier=0.5` means that each node sends half their + * `capacity-multiplier=0.5` means that each node sends half their capacity in a month. ### Setup - Defined Activity -If you would like SimLN to generate a specific payments between source -and destination nodes, you can provide `activity` descriptions of the -source, destination, frequency and amount for payments that you'd like -to execute. Note that `source` nodes *must* be contained in `nodes`, -but destination nodes can be any public node in the network (though + +If you would like SimLN to generate a specific payments between source +and destination nodes, you can provide `activity` descriptions of the +source, destination, frequency and amount for payments that you'd like +to execute. Note that `source` nodes _must_ be contained in `nodes`, +but destination nodes can be any public node in the network (though this may result in liquidity draining over time). The example simulation file below sets up the following simulation: + * Connect to `Alice` running LND to generate activity. * Connect to `Bob` running CLN to generate activity. * Dispatch 2000 msat payments from `Alice` to `Carol` every 1 seconds. * Dispatch 140000 msat payments from `Bob` to `Alice` every 50 seconds. * Dispatch 1000 msat payments from `Bob` to `Dave` every 2 seconds. + ``` { "nodes": [ @@ -187,9 +200,9 @@ The example simulation file below sets up the following simulation: **Note that node addresses must be declare with HTTPS transport, i.e ** -Nodes can be identified by their public key or an id string (as -described above). Activity sources and destinations may reference the -`id` defined in `nodes`, but destinations that are not listed in `nodes` +Nodes can be identified by their public key or an id string (as +described above). Activity sources and destinations may reference the +`id` defined in `nodes`, but destinations that are not listed in `nodes` *must* provide a valid public key. ### Simulation Output @@ -201,10 +214,12 @@ Run `sim-cli -h` for details on data directory (`--data-dir`) and other options which affect how simulation outputs are persisted ## Lightning Environments + If you're looking to get started with local lightning development, we -recommend [polar](https://lightningpolar.com/). For larger deployments, -see the [Scaling Lightning](https://github.com/scaling-lightning/scaling-lightning) +recommend [polar](https://lightningpolar.com/). For larger deployments, +see the [Scaling Lightning](https://github.com/scaling-lightning/scaling-lightning) project. ## Docker -If you want to run the cli in a containerized environment, see the docker set up docs [here](./docker/README.md) \ No newline at end of file + +If you want to run the cli in a containerized environment, see the docker set up docs [here](./docker/README.md) diff --git a/sim-cli/src/main.rs b/sim-cli/src/main.rs index 3abf3faa..ed0dc2a5 100644 --- a/sim-cli/src/main.rs +++ b/sim-cli/src/main.rs @@ -53,7 +53,7 @@ struct Cli { data_dir: PathBuf, /// Path to the simulation file to be used by the simulator #[clap(long, short, default_value = DEFAULT_SIM_FILE)] - sim_file: String, + sim_file: PathBuf, /// Total time the simulator will be running #[clap(long, short)] total_time: Option, @@ -218,13 +218,11 @@ async fn main() -> anyhow::Result<()> { Ok(()) } -async fn read_sim_path(data_dir: PathBuf, sim_file: String) -> anyhow::Result { - let sim_path = data_dir.join(sim_file); - - let sim_path = if sim_path.extension().is_none() { - sim_path.with_extension("json") +async fn read_sim_path(data_dir: PathBuf, sim_file: PathBuf) -> anyhow::Result { + let sim_path = if sim_file.extension().is_none() { + data_dir.join(sim_file).with_extension("json") } else { - sim_path + sim_file }; if sim_path.exists() {