Skip to content

Commit

Permalink
lint: format README.md
Browse files Browse the repository at this point in the history
Adds spaces around headings and sections.
See https://github.com/DavidAnson/markdownlint/blob/v0.31.1/doc/md022.md
  • Loading branch information
okjodom committed Nov 16, 2023
1 parent 0e7507a commit d33272f
Showing 1 changed file with 55 additions and 40 deletions.
95 changes: 55 additions & 40 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,49 @@
# 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 🏗️

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/
```
Expand All @@ -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
Expand Down Expand Up @@ -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. <https://ip-or-domain:port>**

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.

```
Expand All @@ -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": [
Expand Down Expand Up @@ -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 <https://ip-or-domain>**

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
Expand All @@ -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)

If you want to run the cli in a containerized environment, see the docker set up docs [here](./docker/README.md)

0 comments on commit d33272f

Please sign in to comment.