Skip to content

Latest commit

 

History

History
125 lines (81 loc) · 3.21 KB

README.md

File metadata and controls

125 lines (81 loc) · 3.21 KB

Bleskomat

Cryptocurrency to Lightning Network ATM

Requirements

Installation instructions will vary based on your operating system

Getting Started

Before continuing, be sure to download and install the project requirements.

Get the LND fork from Learn-by-doing

git clone https://github.com/Learn-by-doing/lnd

Inside the repository go to the directory docker.

cd lnd/docker

Build the containers using docker-compose:

We are going to run a bitcoin node and a lightning node in simnet, it means that we will create a simulation network that is totally under our control, so we can create blocks at will and therefore we do not have to wait.

Create the NETWORK variable to use simnet:

export NETWORK="simnet"

Run the container to use lnd with btcd, and give a name to it. Below we are setting the name "alice" to this container. But you can use other one.

docker-compose run -d --name alice lnd_btc

Log into the container:

docker exec -i -t alice bash

Once you are inside the container you can get information about the state of the network.

lncli --network=simnet getinfo

Create a new address:

lncli --network=simnet newaddress np2wkh

It will generate an output as below, of course with different address:

{
    "address": "rne7QS8kuJBNB7DJ5kARFYMbBjRvrbe4AN"
}

Then outside of the container we recreate "btcd" node and set the generated address as mining address:

MINING_ADDRESS=<your_address> docker-compose up -d btcd

Generate 400 blocks (we need at least "100 >=" blocks because of coinbase block maturity and "300 ~=" in order to activate segwit):

docker-compose run btcctl generate 400

Now you can check that segwit is active:

docker-compose run btcctl getblockchaininfo | grep -A 1 segwit

Comunicate with lnd running in the container using http

LND uses macaroons as authentication, they are like cookies with more functionality.

Copy the admin.macaroon file from lnd docker to your filesystem.

docker cp alice:/root/.lnd/data/chain/bitcoin/simnet/admin.macaroon ~/bleskomat

Then you need to find the IP where your container is running. You do it by running the command below:

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' alice

It will return something like:

172.19.0.3

Once we have the IP and the admin.macaroon file, we can comunicate with lnd using curl using lnd-rest.

  • getinfo

    curl -X GET --insecure -i "Grpc-Metadata-macaroon: $(xxd -ps -u -c 1000 ~/Desktop/admin.macaroon)" https://172.19.0.3:8001/v1/getinfo
  • generate an invoice

    curl -X POST --insecure --header "Grpc-Metadata-macaroon: $(xxd -ps -u -c 1000 ~/Desktop/admin.macaroon)" --data '{"expiry":"144","value":"1000"}' https://172.19.0.3:8001/v1/invoices