Skip to content

Commit

Permalink
* Use repository folders for nodes data
Browse files Browse the repository at this point in the history
* Add scripts for multi-part tests
* Add scripts for bitcoin start/stop
  • Loading branch information
t-bast committed Dec 11, 2019
1 parent 8e57b5c commit d7fa798
Show file tree
Hide file tree
Showing 15 changed files with 324 additions and 62 deletions.
52 changes: 28 additions & 24 deletions .bash_aliases
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@

##### Bitcoin #####

alias btc-cli='bitcoin-cli -datadir=.bitcoin'

##### C-Lightning #####

# Set the path to the lightningd and lightning-cli binaries:
CLIGHTNING_BIN=/usr/bin/lightningd
CLIGHTNING_CLI=/usr/bin/lightning-cli

alias alice-clightning='$CLIGHTNING_BIN --lightning-dir=$HOME/.lightning/alice'
alias alice-clightning-cli='$CLIGHTNING_CLI --lightning-dir=$HOME/.lightning/alice'
alias bob-clightning='$CLIGHTNING_BIN --lightning-dir=$HOME/.lightning/bob'
alias bob-clightning-cli='$CLIGHTNING_CLI --lightning-dir=$HOME/.lightning/bob'
alias carol-clightning='$CLIGHTNING_BIN --lightning-dir=$HOME/.lightning/carol'
alias carol-clightning-cli='$CLIGHTNING_CLI --lightning-dir=$HOME/.lightning/carol'
alias dave-clightning='$CLIGHTNING_BIN --lightning-dir=$HOME/.lightning/dave'
alias dave-clightning-cli='$CLIGHTNING_CLI --lightning-dir=$HOME/.lightning/dave'
CLIGHTNING_BIN=/usr/local/bin/lightningd
CLIGHTNING_CLI=/usr/local/bin/lightning-cli

alias alice-clightning='$CLIGHTNING_BIN --lightning-dir=.lightning/alice'
alias alice-clightning-cli='$CLIGHTNING_CLI --lightning-dir=.lightning/alice'
alias bob-clightning='$CLIGHTNING_BIN --lightning-dir=.lightning/bob'
alias bob-clightning-cli='$CLIGHTNING_CLI --lightning-dir=.lightning/bob'
alias carol-clightning='$CLIGHTNING_BIN --lightning-dir=.lightning/carol'
alias carol-clightning-cli='$CLIGHTNING_CLI --lightning-dir=.lightning/carol'
alias dave-clightning='$CLIGHTNING_BIN --lightning-dir=.lightning/dave'
alias dave-clightning-cli='$CLIGHTNING_CLI --lightning-dir=.lightning/dave'

##### Eclair #####

Expand All @@ -21,15 +25,15 @@ ECLAIR_JAR=$HOME/.m2/repository/fr/acinq/eclair/eclair-node_2.11/0.3.2-SNAPSHOT/
# Set the path to the eclair-cli file (see https://github.com/ACINQ/eclair/wiki/Usage):
ECLAIR_CLI=/usr/bin/eclair-cli
# Set the path to the eclair logging configuration to use (default one provided in .eclair):
ECLAIR_LOG_CONF=$HOME/.eclair/logback.xml
ECLAIR_LOG_CONF=.eclair/logback.xml

alias alice-eclair='java -Dakka.loglevel=DEBUG -Dlogback.configurationFile=$ECLAIR_LOG_CONF -Declair.datadir=$HOME/.eclair/alice -jar $ECLAIR_JAR'
alias alice-eclair='java -Dakka.loglevel=DEBUG -Dlogback.configurationFile=$ECLAIR_LOG_CONF -Declair.datadir=.eclair/alice -jar $ECLAIR_JAR'
alias alice-eclair-cli='$ECLAIR_CLI -p password -a localhost:9000'
alias bob-eclair='java -Dakka.loglevel=DEBUG -Dlogback.configurationFile=$ECLAIR_LOG_CONF -Declair.datadir=$HOME/.eclair/bob -jar $ECLAIR_JAR'
alias bob-eclair='java -Dakka.loglevel=DEBUG -Dlogback.configurationFile=$ECLAIR_LOG_CONF -Declair.datadir=.eclair/bob -jar $ECLAIR_JAR'
alias bob-eclair-cli='$ECLAIR_CLI -p password -a localhost:9001'
alias carol-eclair='java -Dakka.loglevel=DEBUG -Dlogback.configurationFile=$ECLAIR_LOG_CONF -Declair.datadir=$HOME/.eclair/carol -jar $ECLAIR_JAR'
alias carol-eclair='java -Dakka.loglevel=DEBUG -Dlogback.configurationFile=$ECLAIR_LOG_CONF -Declair.datadir=.eclair/carol -jar $ECLAIR_JAR'
alias carol-eclair-cli='$ECLAIR_CLI -p password -a localhost:9002'
alias dave-eclair='java -Dakka.loglevel=DEBUG -Dlogback.configurationFile=$ECLAIR_LOG_CONF -Declair.datadir=$HOME/.eclair/dave -jar $ECLAIR_JAR'
alias dave-eclair='java -Dakka.loglevel=DEBUG -Dlogback.configurationFile=$ECLAIR_LOG_CONF -Declair.datadir=.eclair/dave -jar $ECLAIR_JAR'
alias dave-eclair-cli='$ECLAIR_CLI -p password -a localhost:9003'

##### LND #####
Expand All @@ -38,11 +42,11 @@ alias dave-eclair-cli='$ECLAIR_CLI -p password -a localhost:9003'
LND_BIN=$HOME/go/bin/lnd
LND_CLI=$HOME/go/bin/lncli

alias alice-lnd='$LND_BIN --lnddir=$HOME/.lnd/alice'
alias alice-lnd-cli='$LND_CLI --lnddir=$HOME/.lnd/alice --rpcserver=localhost:10009 --network=regtest'
alias bob-lnd='$LND_BIN --lnddir=$HOME/.lnd/bob'
alias bob-lnd-cli='$LND_CLI --lnddir=$HOME/.lnd/bob --rpcserver=localhost:10010 --network=regtest'
alias carol-lnd='$LND_BIN --lnddir=$HOME/.lnd/carol'
alias carol-lnd-cli='$LND_CLI --lnddir=$HOME/.lnd/carol --rpcserver=localhost:10011 --network=regtest'
alias dave-lnd='$LND_BIN --lnddir=$HOME/.lnd/dave'
alias dave-lnd-cli='$LND_CLI --lnddir=$HOME/.lnd/dave --rpcserver=localhost:10012 --network=regtest'
alias alice-lnd='$LND_BIN --lnddir=.lnd/alice'
alias alice-lnd-cli='$LND_CLI --lnddir=.lnd/alice --rpcserver=localhost:10009 --network=regtest'
alias bob-lnd='$LND_BIN --lnddir=.lnd/bob'
alias bob-lnd-cli='$LND_CLI --lnddir=.lnd/bob --rpcserver=localhost:10010 --network=regtest'
alias carol-lnd='$LND_BIN --lnddir=.lnd/carol'
alias carol-lnd-cli='$LND_CLI --lnddir=.lnd/carol --rpcserver=localhost:10011 --network=regtest'
alias dave-lnd='$LND_BIN --lnddir=.lnd/dave'
alias dave-lnd-cli='$LND_CLI --lnddir=.lnd/dave --rpcserver=localhost:10012 --network=regtest'
21 changes: 17 additions & 4 deletions .eclair/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<target>System.out</target>
<withJansi>false</withJansi>
<encoder>
<pattern>%yellow(${HOSTNAME} %d) %highlight(%-5level) %logger{24} %X{nodeId}%X{channelId}%X{paymentId} - %msg%ex{12}%n</pattern>
<pattern>%yellow(${HOSTNAME} %d) %highlight(%-5level) %logger{24}%X{nodeId}%X{channelId}%.-11X{parentPaymentId}%.-11X{paymentId} - %msg%ex{12}%n</pattern>
</encoder>
</appender>

Expand All @@ -19,7 +19,7 @@
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d %-5level %logger{24} %X{nodeId}%X{channelId}%X{paymentId} - %msg%ex{24}%n</pattern>
<pattern>%d %-5level %logger{24}%X{nodeId}%X{channelId}%.-11X{parentPaymentId}%.-11X{paymentId} - %msg%ex{24}%n</pattern>
</encoder>
</appender>

Expand All @@ -30,6 +30,19 @@
</encoder>
</appender>

<if condition='isDefined("eclair.printToConsole")'>
<then>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %-5level %logger{24}%X{nodeId}%X{channelId}%.-11X{parentPaymentId}%.-11X{paymentId} - %msg%ex{24}%n</pattern>
</encoder>
</appender>
<root>
<appender-ref ref="CONSOLE"/>
</root>
</then>
</if>

<!--
This logger can be used to dump encryption keys for traffic analysis.
It is used by the wireshark lightning dissector to troubleshoot issues between nodes.
Expand All @@ -40,12 +53,12 @@
<appender-ref ref="KEYLOG"/>
</logger>

<logger name="fr.acinq.eclair.router" level="DEBUG"/>
<!--<logger name="fr.acinq.eclair.router" level="DEBUG"/>-->
<!--<logger name="fr.acinq.eclair.channel" level="DEBUG"/>-->
<logger name="fr.acinq.eclair.payment" level="DEBUG"/>

<root level="INFO">
<appender-ref ref="ROLLING"/>
<appender-ref ref="CONSOLE"/>
</root>

</configuration>
6 changes: 3 additions & 3 deletions .eclair/setup_channels.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# This script connects nodes and creates some channels.

shopt -s expand_aliases
source ../.bash_aliases
source .bash_aliases

ALICE_ID=$(alice-eclair-cli getinfo | jq -r .nodeId)
BOB_ID=$(bob-eclair-cli getinfo | jq -r .nodeId)
Expand Down Expand Up @@ -36,8 +36,8 @@ carol-eclair-cli open --nodeId=$DAVE_ID --fundingSatoshis=255000
carol-eclair-cli open --nodeId=$DAVE_ID --fundingSatoshis=295000

echo Generating a few blocks to confirm channels...
MINER=$(bitcoin-cli getnewaddress)
bitcoin-cli generatetoaddress 10 $MINER
MINER=$(btc-cli getnewaddress)
btc-cli generatetoaddress 10 $MINER

echo Awaiting confirmations...
sleep 10
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@
regtest
data
*.sqlite
*.sqlite3
*.sqlite3
*.pid
1 change: 1 addition & 0 deletions .lightning/reset_nodes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
echo Resetting c-lightning nodes...

# Remove databases
rm -r **/regtest
rm -r **/*.sqlite3

# Remove pipes
Expand Down
16 changes: 8 additions & 8 deletions .lightning/setup_channels.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
# This script connects nodes and creates some channels.

shopt -s expand_aliases
source ../.bash_aliases
source .bash_aliases

MINER=$(bitcoin-cli getnewaddress)
MINER=$(btc-cli getnewaddress)

ALICE_ID=$(alice-clightning-cli getinfo | jq -r .id)
BOB_ID=$(bob-clightning-cli getinfo | jq -r .id)
Expand All @@ -18,16 +18,16 @@ echo Dave is $DAVE_ID

echo Adding some Bitcoins to wallets...
ALICE_ADDR=$(alice-clightning-cli newaddr | jq -r .address)
bitcoin-cli sendtoaddress $ALICE_ADDR 20
btc-cli sendtoaddress $ALICE_ADDR 20
BOB_ADDR=$(bob-clightning-cli newaddr | jq -r .address)
bitcoin-cli sendtoaddress $BOB_ADDR 15
btc-cli sendtoaddress $BOB_ADDR 15
CAROL_ADDR=$(carol-clightning-cli newaddr | jq -r .address)
bitcoin-cli sendtoaddress $CAROL_ADDR 10
btc-cli sendtoaddress $CAROL_ADDR 10
DAVE_ADDR=$(dave-clightning-cli newaddr | jq -r .address)
bitcoin-cli sendtoaddress $DAVE_ADDR 5
btc-cli sendtoaddress $DAVE_ADDR 5

echo Generating a few blocks to confirm wallet balances...
bitcoin-cli generatetoaddress 10 $MINER
btc-cli generatetoaddress 10 $MINER

echo Opening channels between Alice and Bob...
alice-clightning-cli connect $BOB_ID localhost 9736
Expand All @@ -46,7 +46,7 @@ carol-clightning-cli connect $DAVE_ID localhost 9738
carol-clightning-cli fundchannel $DAVE_ID 295000

echo Generating a few blocks to confirm channels...
bitcoin-cli generatetoaddress 10 $MINER
btc-cli generatetoaddress 10 $MINER

echo Awaiting confirmations...
sleep 10
Expand Down
16 changes: 8 additions & 8 deletions .lnd/setup_channels.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
# This script connects nodes and creates some channels.

shopt -s expand_aliases
source ../.bash_aliases
source .bash_aliases

MINER=$(bitcoin-cli getnewaddress)
MINER=$(btc-cli getnewaddress)

ALICE_ID=$(alice-lnd-cli getinfo | jq -r .identity_pubkey)
BOB_ID=$(bob-lnd-cli getinfo | jq -r .identity_pubkey)
Expand All @@ -18,16 +18,16 @@ echo Dave is $DAVE_ID

echo Adding some Bitcoins to wallets...
ALICE_ADDR=$(alice-lnd-cli newaddress p2wkh | jq -r .address)
bitcoin-cli sendtoaddress $ALICE_ADDR 20
btc-cli sendtoaddress $ALICE_ADDR 20
BOB_ADDR=$(bob-lnd-cli newaddress p2wkh | jq -r .address)
bitcoin-cli sendtoaddress $BOB_ADDR 15
btc-cli sendtoaddress $BOB_ADDR 15
CAROL_ADDR=$(carol-lnd-cli newaddress p2wkh | jq -r .address)
bitcoin-cli sendtoaddress $CAROL_ADDR 10
btc-cli sendtoaddress $CAROL_ADDR 10
DAVE_ADDR=$(dave-lnd-cli newaddress p2wkh | jq -r .address)
bitcoin-cli sendtoaddress $DAVE_ADDR 5
btc-cli sendtoaddress $DAVE_ADDR 5

echo Generating a few blocks to confirm wallet balances...
bitcoin-cli generatetoaddress 10 $MINER
btc-cli generatetoaddress 10 $MINER

echo Opening channels between Alice and Bob...
alice-lnd-cli connect $BOB_ID@localhost:9736
Expand All @@ -51,7 +51,7 @@ carol-lnd-cli openchannel $DAVE_ID 255000
carol-lnd-cli openchannel $DAVE_ID 295000

echo Generating a few blocks to confirm channels...
bitcoin-cli generatetoaddress 10 $MINER
btc-cli generatetoaddress 10 $MINER

echo Awaiting confirmations...
sleep 10
Expand Down
37 changes: 28 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,19 @@ specific versions of eclair, lnd or c-lightning with multi-hop payments.

## How to use

### Run Bitcoin in regtest mode
Note: scripts need to be run from the top-level directory.

Copy the `.bitcoin` folder to your home directory (be careful not to overwrite
your previous bitcoin configuration if you have one).
### Run Bitcoin in regtest mode

Run bitcoin daemon:
Run the bitcoin daemon with the following script:

```sh
bitcoind -daemon
scripts/start_bitcoin.sh
```

### Run Lightning Nodes
Note: you can tweak the default Bitcoin configuration in `.bitcoin/bitcoin.conf`.

Copy the `.eclair`, `.lnd` and `.lightning` folders to your home directory (be
careful not to overwrite your previous lightning configurations if you have
some).
### Run Lightning Nodes

Edit the `.bash_aliases` file to fill the required environment variables:

Expand All @@ -42,3 +39,25 @@ source .bash_aliases
```

Use the provided aliases to run your nodes.

For example:

```sh
alice-eclair
dave-clightning
```

Nodes will store their data in sub-directories of this repository so it won't
conflict with other nodes you may be running on your machine.

### Test scenario

The `scripts` folder contains some test scenario.
Don't hesitate to tweak them to test other scenario.
If your test script may be useful to others, please open a PR!

For example:

```sh
scripts/multipart_direct_peer.sh
```
5 changes: 0 additions & 5 deletions reset_all_nodes.sh

This file was deleted.

57 changes: 57 additions & 0 deletions scripts/multipart_direct_peer.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/bin/bash

# This script tests sending a multi-part payment to a direct peer.

shopt -s expand_aliases
source .bash_aliases

MINER=$(btc-cli getnewaddress)
ALICE_ID=$(alice-eclair-cli getinfo | jq -r .nodeId)
DAVE_ID=$(dave-lnd-cli getinfo | jq -r .identity_pubkey)

echo Alice is $ALICE_ID
echo Dave is $DAVE_ID

echo Adding some Bitcoins to wallets...
DAVE_ADDR=$(dave-lnd-cli newaddress p2wkh | jq -r .address)
btc-cli sendtoaddress $DAVE_ADDR 15

echo Generating a few blocks to confirm wallet balances...
btc-cli generatetoaddress 10 $MINER

echo Opening channels between Alice and Dave...
alice-eclair-cli connect --uri=$DAVE_ID@localhost:9738
alice-eclair-cli open --nodeId=$DAVE_ID --fundingSatoshis=110000
alice-eclair-cli open --nodeId=$DAVE_ID --fundingSatoshis=105000

echo Generating a few blocks to confirm channels...
btc-cli generatetoaddress 10 $MINER

echo Awaiting confirmations...
sleep 30

echo Channels confirmed:
alice-eclair-cli channels | jq '.[] | {shortChannelId: .data.shortChannelId, capacity: .data.channelUpdate.htlcMaximumMsat}'

echo Generating multi-part invoice...
INVOICE=$(dave-lnd-cli addinvoice --memo="MPP is #reckless" 130000 | jq .pay_req)

echo Awaiting broadcast network state...
sleep 60

echo Paying multi-part invoice
PAYMENT_ID=$(alice-eclair-cli payinvoice --invoice=$INVOICE --maxAttempts=1)
echo $PAYMENT_ID
sleep 10

alice-eclair-cli getsentinfo --id=$PAYMENT_ID

echo Generating multi-part invoice...
INVOICE2=$(alice-eclair-cli createinvoice --amountMsat=115000000 --description="MPP is #reckless" --allowMultiPart=true | jq .serialized)
PAYMENT_HASH=$(alice-eclair-cli listinvoices | jq '.[0] | .paymentHash')

echo Paying multi-part invoice
dave-lnd-cli sendpayment --pay_req=$INVOICE2
sleep 10

alice-eclair-cli getreceivedinfo --paymentHash=$PAYMENT_HASH
Loading

0 comments on commit d7fa798

Please sign in to comment.