Adding docker example for payment round robin

pull/634/head
Matthias Debernardini 3 years ago
parent 68504ea511
commit 1b8f94e6b4

@ -0,0 +1,16 @@
REGISTRY=docker.com
NAME=lnbook
CONTAINERS=bitcoind c-lightning
all: build-all push-all
build-all:
for container in ${CONTAINERS}; do \
docker build -t ${NAME}/$$container $$container -f $$container/Dockerfile; \
done
push-all:
for container in ${CONTAINERS}; do \
docker push ${NAME}/$$container; \
done

@ -0,0 +1,46 @@
FROM ubuntu:20.04 AS bitcoind-base
RUN apt update && apt install -yqq \
curl gosu jq bash-completion
ENV BITCOIND_VERSION 0.21.0
# Install binaries for Bitcoin Core
ADD https://bitcoincore.org/bin/bitcoin-core-${BITCOIND_VERSION}/bitcoin-${BITCOIND_VERSION}-x86_64-linux-gnu.tar.gz /usr/local
RUN cd /usr/local/ \
&& tar -zxf bitcoin-${BITCOIND_VERSION}-x86_64-linux-gnu.tar.gz \
&& cd bitcoin-${BITCOIND_VERSION} \
&& install bin/* /usr/local/bin \
&& install include/* /usr/local/include \
&& install -v lib/* /usr/local/lib
ENV GH_URL https://raw.githubusercontent.com/bitcoin/bitcoin/master/
ENV BC /usr/share/bash-completion/completions/
ADD $GH_URL/contrib/bitcoin-cli.bash-completion $BC/bitcoin-cli
ADD $GH_URL/contrib/bitcoind.bash-completion $BC/bitcoind
ADD $GH_URL/contrib/bitcoin-tx.bash-completion $BC/bitcoin-tx
FROM bitcoind-base AS bitcoind
ADD bitcoind /bitcoind
RUN ln -s /bitcoind /root/.
ADD bashrc /root/.bashrc
ADD bitcoind-entrypoint.sh /usr/local/bin
RUN chmod +x /usr/local/bin/bitcoind-entrypoint.sh
ADD mine.sh /usr/local/bin
RUN chmod +x /usr/local/bin/mine.sh
# bitcoind P2P
EXPOSE 18444/tcp
# bitcoind regtest RPC
EXPOSE 18443/tcp
# zmqpubrawblock
EXPOSE 12005/tcp
# zmqpubrawtx
EXPOSE 12006/tcp
WORKDIR /bitcoind
ENTRYPOINT ["/usr/local/bin/bitcoind-entrypoint.sh"]
# Mine new block every 10 seconds
CMD ["/usr/local/bin/mine.sh"]

@ -0,0 +1,5 @@
# Use bash-completion, if available
alias bitcoin-cli="bitcoin-cli -datadir=/bitcoind"
[[ $PS1 && -f /usr/share/bash-completion/bash_completion ]] && \
. /usr/share/bash-completion/bash_completion

@ -0,0 +1,23 @@
#!/bin/bash
set -Eeuo pipefail
echo Starting bitcoind...
bitcoind -datadir=/bitcoind -daemon
until bitcoin-cli -datadir=/bitcoind getblockchaininfo > /dev/null 2>&1
do
sleep 1
done
echo bitcoind started
export address=`cat /bitcoind/keys/demo_address.txt`
export privkey=`cat /bitcoind/keys/demo_privkey.txt`
echo "================================================"
echo "Importing demo private key"
echo "Bitcoin address: " ${address}
echo "Private key: " ${privkey}
echo "================================================"
bitcoin-cli -datadir=/bitcoind createwallet regtest
bitcoin-cli -datadir=/bitcoind importprivkey $privkey
# Executing CMD
echo "$@"
exec "$@"

@ -0,0 +1,22 @@
regtest=1
server=1
debuglogfile=debug.log
debug=1
txindex=1
printtoconsole=0
[regtest]
fallbackfee=0.000001
port=18444
noconnect=1
dnsseed=0
dns=0
upnp=0
onlynet=ipv4
rpcport=18443
rpcbind=0.0.0.0
rpcallowip=0.0.0.0/0
rpcuser=regtest
rpcpassword=regtest
zmqpubrawblock=tcp://0.0.0.0:12005
zmqpubrawtx=tcp://0.0.0.0:12006

@ -0,0 +1 @@
electric flash rain cloud umbrella energy charge ozone air thunder crack wet

@ -0,0 +1 @@
cSaejkcWwU25jMweWEewRSsrVQq2FGTij1xjXv4x1XvxVRF1ZCr3

@ -0,0 +1,20 @@
#!/bin/bash
set -Eeuo pipefail
export address=`cat /bitcoind/keys/demo_address.txt`
export privkey=`cat /bitcoind/keys/demo_privkey.txt`
echo "================================================"
echo "Bitcoin address: " ${address}
echo "Private key: " ${privkey}
echo "Balance:" `bitcoin-cli -datadir=/bitcoind getbalance`
echo "================================================"
echo "Mining 101 blocks to unlock some bitcoin"
bitcoin-cli -datadir=/bitcoind generatetoaddress 101 $address
echo "Mining 1 block every 10 seconds"
while sleep 10; do \
bitcoin-cli -datadir=/bitcoind generatetoaddress 1 $address; \
echo "Balance:" `bitcoin-cli -datadir=/bitcoind getbalance`; \
done
# If loop is interrupted, stop bitcoind
bitcoin-cli -datadir=/bitcoind stop

@ -0,0 +1,33 @@
FROM lnbook/bitcoind AS c-lightning-base
# Install software-properties-common to add apt repositories
RUN apt update && apt install -yqq \
software-properties-common
# c-lightning
ENV C_LIGHTNING_VER 0.9.3~20210120202101201901~ubuntu20.04.1
RUN add-apt-repository -u ppa:lightningnetwork/ppa
RUN apt-get install -yqq \
lightningd=${C_LIGHTNING_VER}
ADD https://raw.githubusercontent.com/ElementsProject/lightning/master/contrib/lightning-cli.bash-completion /usr/share/bash-completion/completions/lightning-cli
FROM c-lightning-base AS c-lightning-run
ADD lightningd /lightningd
WORKDIR /lightningd
RUN ln -s /lightningd /root/.lightning
ADD bashrc /root/.bashrc
ADD c-lightning-entrypoint.sh /usr/local/bin
RUN chmod +x /usr/local/bin/c-lightning-entrypoint.sh
ADD logtail.sh /usr/local/bin
RUN chmod +x /usr/local/bin/logtail.sh
ADD wait-for-bitcoind.sh /usr/local/bin
RUN chmod +x /usr/local/bin/wait-for-bitcoind.sh
EXPOSE 9735 9835
ENTRYPOINT ["/usr/local/bin/c-lightning-entrypoint.sh"]
# Show logs from beginning and keep following
CMD ["/usr/local/bin/logtail.sh"]

@ -0,0 +1,4 @@
alias lightning-cli="lightning-cli --lightning-dir=/lightningd"
[[ $PS1 && -f /usr/share/bash-completion/bash_completion ]] && \
. /usr/share/bash-completion/bash_completion

@ -0,0 +1,17 @@
#!/bin/bash
set -Eeuo pipefail
source /usr/local/bin/wait-for-bitcoind.sh
echo Starting c-lightning...
lightningd --lightning-dir=/lightningd --daemon
until lightning-cli --lightning-dir=/lightningd getinfo > /dev/null 2>&1
do
sleep 1
done
echo "Startup complete"
echo "$@"
exec "$@"

@ -0,0 +1,22 @@
#!/bin/bash
# Generate a new receiving address for LND wallet
address=$(lightning-cli --lightning-dir=/lightningd newaddr | jq .address)
# Ask Bitcoin Core to send 10 BTC to the address, using JSON-RPC call
curl --user regtest:regtest \
-H 'content-type: text/plain;' \
http://bitcoind:18443/ \
--data-binary @- <<EOF
{
"jsonrpc": "1.0",
"id": "c-lightning-container",
"method": "sendtoaddress",
"params": [
${address},
10,
"funding c-lightning",
"true"
]
}
EOF

@ -0,0 +1,9 @@
network=regtest
bitcoin-rpcuser=regtest
bitcoin-rpcpassword=regtest
bitcoin-rpcconnect=bitcoind
bitcoin-rpcport=18443
log-level=debug
log-file=/lightningd/lightningd.log

@ -0,0 +1,5 @@
#!/bin/bash
set -Eeuo pipefail
# Show LND log from beginning and follow
tail -n +1 -f /lightningd/lightningd.log || true

@ -0,0 +1,16 @@
#!/bin/bash
set -Eeuo pipefail
echo Waiting for bitcoind to start...
until bitcoin-cli -rpcconnect=bitcoind -rpcport=18443 -rpcuser=regtest -rpcpassword=regtest getblockchaininfo > /dev/null 2>&1
do
echo -n "."
sleep 1
done
echo Waiting for bitcoind to mine blocks...
until bitcoin-cli -rpcconnect=bitcoind -rpcport=18443 -rpcuser=regtest -rpcpassword=regtest getbalance | jq -e ". > 0" > /dev/null 2>&1
do
echo -n "."
sleep 1
done

@ -0,0 +1,95 @@
version: "3.3"
networks:
lnnet:
services:
bitcoind:
container_name: bitcoind
build:
context: bitcoind
image: lnbook/bitcoind:latest
networks:
- lnnet
expose:
- "18443"
- "12005"
- "12006"
restart: always
Aa:
container_name: Aa
build:
context: c-lightning
image: lnbook/c-lightning:latest
networks:
- lnnet
expose:
- "9735"
restart: always
depends_on:
- bitcoind
Bb:
container_name: Bb
build:
context: c-lightning
image: lnbook/c-lightning:latest
networks:
- lnnet
expose:
- "9735"
restart: always
depends_on:
- bitcoind
Cc:
container_name: Cc
build:
context: c-lightning
image: lnbook/c-lightning:latest
networks:
- lnnet
expose:
- "9735"
restart: always
depends_on:
- bitcoind
Dd:
container_name: Dd
build:
context: c-lightning
image: lnbook/c-lightning:latest
networks:
- lnnet
expose:
- "9735"
restart: always
depends_on:
- bitcoind
Ee:
container_name: Ee
build:
context: c-lightning
image: lnbook/c-lightning:latest
networks:
- lnnet
expose:
- "9735"
restart: always
depends_on:
- bitcoind
Ff:
container_name: Ff
build:
context: c-lightning
image: lnbook/c-lightning:latest
networks:
- lnnet
expose:
- "9735"
restart: always
depends_on:
- bitcoind

@ -0,0 +1,36 @@
#!/bin/bash
#docker-compose exec -T Aa lightning-cli getinfo
#docker-compose exec -T Bb lightning-cli getinfo
#docker-compose exec -T Cc lightning-cli getinfo
#docker-compose exec -T Ee lightning-cli getinfo
#docker-compose exec -T Dd lightning-cli getinfo
#docker-compose exec -T Ff lightning-cli getinfo
echo getting addresses
a=$(docker-compose exec -T Aa bash -c "lightning-cli newaddr | jq -r .bech32")
echo $a
b=$(docker-compose exec -T Bb bash -c "lightning-cli newaddr | jq -r .bech32")
echo $b
c=$(docker-compose exec -T Cc bash -c "lightning-cli newaddr | jq -r .bech32")
echo $c
d=$(docker-compose exec -T Dd bash -c "lightning-cli newaddr | jq -r .bech32")
echo $d
e=$(docker-compose exec -T Ee bash -c "lightning-cli newaddr | jq -r .bech32")
echo $e
f=$(docker-compose exec -T Ff bash -c "lightning-cli newaddr | jq -r .bech32")
echo $f
echo funding wallets
ba=$(docker-compose exec -T bitcoind bash -c "bitcoin-cli -regtest -rpcport=18443 -rpcuser=regtest -rpcpassword=regtest sendtoaddress $a 10")
echo $ba
bb=$(docker-compose exec -T bitcoind bash -c "bitcoin-cli -regtest -rpcport=18443 -rpcuser=regtest -rpcpassword=regtest sendtoaddress $b 10")
echo $bb
bc=$(docker-compose exec -T bitcoind bash -c "bitcoin-cli -regtest -rpcport=18443 -rpcuser=regtest -rpcpassword=regtest sendtoaddress $c 10")
echo $bc
bd=$(docker-compose exec -T bitcoind bash -c "bitcoin-cli -regtest -rpcport=18443 -rpcuser=regtest -rpcpassword=regtest sendtoaddress $d 10")
echo $bd
be=$(docker-compose exec -T bitcoind bash -c "bitcoin-cli -regtest -rpcport=18443 -rpcuser=regtest -rpcpassword=regtest sendtoaddress $e 10")
echo $be
bf=$(docker-compose exec -T bitcoind bash -c "bitcoin-cli -regtest -rpcport=18443 -rpcuser=regtest -rpcpassword=regtest sendtoaddress $f 10")
echo $bf

@ -0,0 +1,23 @@
#!/bin/bash
#docker-compose up -d && bash make-network-payloop.sh
echo Wait for network to load for 180 sec
sleep 180
echo Funding all nodes
source fund-all-nodes.sh
sleep 60
echo Making topology
source make-topology.sh
sleep 60
echo Entering the payment loop
source payment-loop.sh
#docker-compose exec -T Aa lightning-cli
#docker-compose exec -T Bb lightning-cli
#docker-compose exec -T Cc lightning-cli
#docker-compose exec -T Ee lightning-cli
#docker-compose exec -T Dd lightning-cli
#docker-compose exec -T Ff lightning-cli
exit 0

@ -0,0 +1,38 @@
#!/bin/bash
echo Getting node IDs
a_ID=$(docker-compose exec -T Aa bash -c "lightning-cli getinfo | jq -r .id")
b_ID=$(docker-compose exec -T Bb bash -c "lightning-cli getinfo | jq -r .id")
c_ID=$(docker-compose exec -T Cc bash -c "lightning-cli getinfo | jq -r .id")
d_ID=$(docker-compose exec -T Dd bash -c "lightning-cli getinfo | jq -r .id")
e_ID=$(docker-compose exec -T Ee bash -c "lightning-cli getinfo | jq -r .id")
f_ID=$(docker-compose exec -T Ff bash -c "lightning-cli getinfo | jq -r .id")
# Let's tell everyone what we found!
#echo A ${a_ID}
#echo B ${b_ID}
#echo C ${c_ID}
#echo D ${d_ID}
#echo E ${e_ID}
#echo F ${f_ID}
echo Setting up channels...
echo A to B
docker-compose exec -T Aa lightning-cli connect ${b_ID}@Bb
docker-compose exec -T Aa lightning-cli -k fundchannel id=${b_ID} amount=1000000sat minconf=0
echo B to C
docker-compose exec -T Bb lightning-cli connect ${c_ID}@Cc
docker-compose exec -T Bb lightning-cli -k fundchannel id=${c_ID} amount=1000000sat minconf=0
echo C to D
docker-compose exec -T Cc lightning-cli connect ${d_ID}@Dd
docker-compose exec -T Cc lightning-cli -k fundchannel id=${d_ID} amount=1000000sat minconf=0
echo D to E
docker-compose exec -T Dd lightning-cli connect ${e_ID}@Ee
docker-compose exec -T Dd lightning-cli -k fundchannel id=${e_ID} amount=1000000sat minconf=0
echo E to F
docker-compose exec -T Ee lightning-cli connect ${f_ID}@Ff
docker-compose exec -T Ee lightning-cli -k fundchannel id=${f_ID} amount=1000000sat minconf=0
echo F to A
docker-compose exec -T Ff lightning-cli connect ${a_ID}@Aa
docker-compose exec -T Ff lightning-cli -k fundchannel id=${a_ID} amount=1000000sat minconf=0

@ -0,0 +1,37 @@
#!/bin/bash
echo pay in a loop
start=$(date +"%T")
for i in {1..2}
do
echo A pays B
INV=$(docker-compose exec -T Bb bash -c "lightning-cli invoice 10000sat inva{$i} desc | jq -r .bolt11")
docker-compose exec -T Aa bash -c "lightning-cli pay $INV"
echo B pays C
INV=$(docker-compose exec -T Cc bash -c "lightning-cli invoice 10000sat invb{$i} desc | jq -r .bolt11")
docker-compose exec -T Bb bash -c "lightning-cli pay $INV"
echo C pays D
INV=$(docker-compose exec -T Dd bash -c "lightning-cli invoice 10000sat invc{$i} desc | jq -r .bolt11")
docker-compose exec -T Cc bash -c "lightning-cli pay $INV"
echo D pays E
INV=$(docker-compose exec -T Ee bash -c "lightning-cli invoice 10000sat invd{$i} desc | jq -r .bolt11")
docker-compose exec -T Dd bash -c "lightning-cli pay $INV"
echo E pays F
INV=$(docker-compose exec -T Ff bash -c "lightning-cli invoice 10000sat inve{$i} desc | jq -r .bolt11")
docker-compose exec -T Ee bash -c "lightning-cli pay $INV"
echo F pays A
INV=$(docker-compose exec -T Aa bash -c "lightning-cli invoice 10000sat invf{$i} desc | jq -r .bolt11")
docker-compose exec -T Ff bash -c "lightning-cli pay $INV"
done
stop=$(date +"%T")
echo time to finish
echo start $start
echo stop $stop
Loading…
Cancel
Save