A guide to setting up and connecting lightning nodes on bitcoin regtest network for testing purposes.
If bitcoind is not already running on regtest network, we need to set this up.
For testing purposes it is easiest to set up a new directory:
$ mkdir .regtest
Now create a bitcoin.conf
file in the .regtest
directory with the following settings:
regtest=1
server=1
daemon=1
txindex=1
# user: lnd | password: password
rpcauth=lnd:98670aa7dba2e75ef79c0583e929dd23$29cd17464f672688ca01b47fbf6bdfe49352cb8e90937dee7de0ddd76dc33e0d
zmqpubrawblock=tcp://127.0.0.1:28332
zmqpubrawtx=tcp://127.0.0.1:28333
To use your own authorisation info you can use bitcoin-rpcauth:
$ npm i -g bitcoin-rpcauth
$ rpcauth --username=<username> --password=<password>
# copy the returned string into bitcoin.conf
Start bitcoind
:
$ bitcoind --datadir=.regtest
Check that bitcoind
is up and running:
$ bitcoin-cli --rpcpassword=password --rpcuser=lnd --regtest getblockcount # should be 0 at this point
Install LND from source using the following instructions for MacOS taken from the LND INSTALL.md:
Install dependencies:
Go:
$ brew install go@1.13
At this point, you should set your $GOPATH
environment variable, which represents the path to your workspace. By default, $GOPATH
is set to ~/go
. You will also need to add $GOPATH/bin
to your PATH
. This ensures that your shell will be able to detect the binaries you install.
$ export GOPATH=~/gocode
$ export PATH=$PATH:$GOPATH/bin
- We recommend placing the above in your .bashrc or in a setup script so that you can avoid typing this every time you open a new terminal window.
With the preliminary steps completed, to install lnd
, lncli
, and all related dependencies run the following commands:
$ go get -d github.com/lightningnetwork/lnd
$ cd $GOPATH/src/github.com/lightningnetwork/lnd
$ make && make install
To check that lnd
was installed properly run the following command:
$ make check
Install c-lightning from source using the following instructions for MacOS taken from the c-lightning INTALL.md:
Install dependencies:
$ brew install autoconf automake libtool python3 gmp gnu-sed gettext libsodium
$ ln -s /usr/local/Cellar/gettext/0.20.1/bin/xgettext /usr/local/opt
$ export PATH="/usr/local/opt:$PATH"
If you need SQLite:
$ brew install sqlite
$ export LDFLAGS="-L/usr/local/opt/sqlite/lib"
$ export CPPFLAGS="-I/usr/local/opt/sqlite/include"
If you need Python 3.x for mako:
$ brew install pyenv
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
$ source ~/.bash_profile
$ pyenv install 3.7.4
$ pip install --upgrade pip
If you don't have bitcoind installed locally you'll need to install that as well:
$ brew install berkeley-db4 boost miniupnpc pkg-config libevent
$ git clone https://github.com/bitcoin/bitcoin
$ cd bitcoin
$ ./autogen.sh
$ ./configure
$ make src/bitcoind src/bitcoin-cli && make install
Clone lightning:
$ git clone https://github.com/ElementsProject/lightning.git
$ cd lightning
Configure Python 3.x & get mako:
$ pyenv local 3.7.4
$ pip install mako
Build lightning:
$ ./configure
$ make
Make sure bitcoind is running using bitcoin.conf
given in .regtest
repository
Start c-lightning daemons (note the port defined by --addr
):
$ ./lightning/lightningd/lightningd --lightning-dir=<dazaar-dir>/.c1 --bitcoin-rpcuser=lnd --bitcoin-rpcpassword=password --network=regtest --log-level=debug --daemon --addr=localhost:9733
$ ./lightning/lightningd/lightningd --lightning-dir=<dazaar-dir>/.c2 --bitcoin-rpcuser=lnd --bitcoin-rpcpassword=password --network=regtest --log-level=debug --daemon --addr=localhost:9732
Set alias for c-lightning cli:
$ alias c1-cli="<c-lightning-dir>/lightning/cli/lightning-cli --lightning-dir=<dazaar-dir>/.c1 --network=regtest"
$ alias c2-cli="<c-lightning-dir>/lightning/cli/lightning-cli --lightning-dir=<dazaar-dir>/.c2 --network=regtest"
Check that node1 has no pre-existing peers
$ c1-cli listpeers
Create a receiveing address for each node:
$ c1-cli newaddr
$ c2-cli newaddr
Connect to the nodes to eachother:
$ c2-cli getinfo | grep id # copy pubkey to <node2_id>, host and port were defined when the daemon was initiated
$ c1-cli connect <node2_id> localhost 9732
Send funds to each node
$ bitcoin-cli --rpcpassword=password --rpcuser=lnd --regtest sendtoaddress <node1_receive_addr> 100
$ bitcoin-cli --rpcpassword=password --rpcuser=lnd --regtest sendtoaddress <node2_receive_addr> 100
Set up a channel with 500,000 sats
$ c1-cli fundchannel <node2_id> 500000
Confirm funding transaction by repeating:
$ bitcoin-cli --rpcpassword=password --rpcuser=lnd --regtest generatetoaddress 20 <node2_receive_addr
Check for that both nodes see the channel:
$ c1-cli listchannels
$ c2-cli listchannels
In new terrminal windows, start the LND daemons:
$ lnd --lnddir=.lnd1
$ lnd --lnddir=.lnd2
Optional - Set alias for lncli command:
$ alias lncli1="lncli --lnddir=.lnd1 --network=regtest --rpcserver=localhost:12009"
$ alias lncli2="lncli --lnddir=.lnd2 --network=regtest --rpcserver=localhost:13009"
Create/unlock wallets:
$ lncli1 create
$ lncli2 create
Check that node1 has no pre-existing peers
$ lncli1 listpeers
- If they do, run `lncli1 listchannels`
- The nodes may already have a prexisting channel in which case skip the following steps
Connect the nodes to eachother:
$ lncli1 getinfo | grep identity_pubkey # copy pubkey to <node1_id>, host and port may be found in lnd.conf
$ lncli2 connect <node1_id>@<host>:<port>
Create a receiveing address for each node:
```sh
$ lncli1 newaddr
$ lncli2 newaddr
Send funds to each node
$ bitcoin-cli --rpcpassword=password --rpcuser=lnd --regtest sendtoaddress <node1_receive_addr> 100
$ bitcoin-cli --rpcpassword=password --rpcuser=lnd --regtest sendtoaddress <node2_receive_addr> 100
Set up a channel with 500,000 sats
$ lncli1 openchannel <node2_id> 500000
Confirm funding transaction by repeating:
$ bitcoin-cli --rpcpassword=password --rpcuser=lnd --regtest generatetoaddress 10 <node2_receive_addr
Check that both nodes see the channel:
$ lncli1 listchannels
$ lncli2 listchannels
We now have 2 or more nodes setup with channels open to eachother and are ready to test out dazaar payments!