mirror of https://github.com/lnbook/lnbook
Adding docker example for payment round robin
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 @@
|
||||
2NBKgwSWY5qEmfN2Br4WtMDGuamjpuUc5q1
|
@ -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…
Reference in New Issue