Skip to main content

Bitcoin regtest Lightning Network for integration testing.

Project description

lnregtest - Lightning Networks on Bitcoin regtest

Implements functioning lightning networks for (Python) integration testing operating on a Bitcoin regtest network by running several lightning node instances.

The simulated lightning networks can have different shapes as defined in the network_definitions folder.

An example of a graph (star_ring) with 7 nodes and 12 channels is shown here (for initial channel balance details, have a look at network_definitions/star_ring.py):

Star-like component with channels (where A is the master node):
A -> B, A -> C, A -> D, A -> E, A -> F, A -> G,
Ring-like component with channels (which surrounds the master node):
B -> C, C -> D, D -> E, E -> F, F -> G, G -> B

This star and ring-like lightning network can then be used to test interactions with the network from the master node's perspective, like rebalancing channels, routing payments, sending payments and so on.

Features

  • No external python dependencies
  • Arbitrary lightning network graphs with up to number of nodes on the order of 10 (depends on your resources)
  • LND support
  • Electrum support
  • Lightning graph state comparison
  • Restarting from already created networks
  • Abstraction of random identifiers (public keys, channel ids) to human readable identifiers
  • Library and command-line execution
  • Automatic sanity check of user defined networks

Planned features

  • Arbitrary lightning daemon binary detection (lnd, clightning, ...)
  • Time-dependent transaction series

Creating your own network topology

Networks of arbitrary shape can be defined as a python dictionary in the network_definitions folder. See the examples for a general structure.

The requirements are:

  • Node A is the master node
  • Nodes are uniquely named by subsequent characters A, B, C, ...
  • Channels are uniquely numbered by integers 1, 2, 3, ...
  • Ports must be set uniquely

Testing other (python) projects

Test examples can be found in the test folder and more information on how lnregtest is used for lightning network integration testing can be found in TEST.

This package is also used in production in lndmanage.

Setup

The binaries bitcoind (v22.0), bitcoin-cli, lnd (v0.14), and lncli are expected to be found in $PATH, e.g., put these binaries into your ~/bin folder.

You can use the tool in two different standalone modes:

Git repository mode:

$ git clone https://github.com/bitromortac/lnregtest
$ cd lnregtest

Run network:

$ python3 lnregtest.py -h

Package mode:

$ python3 -m venv venv
$ source venv/bin/activate
$ python3 -m pip install lnregtest

Run network:

$ lnregtest -h

Test if lnregest works

To run all tests, run python3 -m unittest discover test from the root folder.

Running under Docker

$ docker build -t lnregtest:local .
$ docker run --rm -it lnregtest:local python3 -m unittest discover test

Troubleshooting

  • all SubConns are in TransientFailure: Typically, here it happens that lnd is not given enough time to start. The simulation of a lightning network is memory and CPU intensive. Each LN node needs some time to get up and running and consumes resources. Currently, the startup of each lnd node is delayed to distribute CPU load. The settings were tested on a quadcore processor and 8 GB of RAM.
  • bitcoind and lnd processes are not terminated: Sometimes it happens that the processes are not terminated correctly, so before you start new tests, make sure to do so manually.

Related Projects

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lnregtest-0.2.2.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

lnregtest-0.2.2-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

Details for the file lnregtest-0.2.2.tar.gz.

File metadata

  • Download URL: lnregtest-0.2.2.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for lnregtest-0.2.2.tar.gz
Algorithm Hash digest
SHA256 73aaedc5a261ecd026bd2a0a46616821497035baaa7e66f2f0bbee1903256c18
MD5 8cc0949ddd5ed528cf09b70f6e4eadc7
BLAKE2b-256 0acce85b99b37aa597618b274956d26128d8e767a00679a7ab5f5afd702500e5

See more details on using hashes here.

File details

Details for the file lnregtest-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: lnregtest-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 27.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for lnregtest-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 bedbe299360fd468b0119dab7f10e0e574073177f73d4a0bedbe91e3231acc9a
MD5 5e6b111ec411116b5da047d704f14d4e
BLAKE2b-256 f6c3c6111fa05eb2a3afcad426c08f046c7aa7944c4cb56421de4d8b1e2c23dd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page