Documentation

LNDhub with raspibolt

Install Redis

Login as “admin”

Download Redis

$ cd /home/admin/download
$ rm -rf /home/admin/download/*
$ wget http://download.redis.io/releases/redis-5.0.3.tar.gz
$ tar xzf redis-5.0.3.tar.gz
$ cd redis-5.0.3/

Make & install

$ make
$ sudo make install

Create the working directory for Redis. We will create it on the external hard disk

$ sudo mkdir /mnt/hdd/redis

Create the redis user

$ sudo adduser --system --group --no-create-home redis
$ sudo chown redis:redis /mnt/hdd/redis
$ sudo chmod 770 /mnt/hdd/redis

Make a directory for the redis.conf file & copy the default conf file to it.

$ sudo mkdir /etc/redis
$ sudo cp redis.conf /etc/redis

Edit the redis.conf to change the supervised & dir options.

$ nano /etc/redis/redis.conf
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

Find supervised no and change it to supervised systemd

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

Find dir and set it to /mnt/hdd/redis

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /mnt/hdd/redis

Autostart Redis

Setup Redis to start automatically on system startup. Edit the system service config for redis

$ sudo nano /etc/systemd/system/redis.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

Start up redis via the systemctl and test the status

$ sudo systemctl start redis
$ sudo systemctl status redis

Test redis is running

$ redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit

Enable the service

$ sudo systemctl enable redis

Clean up

$ rm -rf /home/admin/download/*

Install Node

Download Node

$ cd /home/admin/download
$ wget https://nodejs.org/dist/v10.15.1/node-v10.15.1-linux-armv7l.tar.xz

Extract to usr/local/lib

$ sudo mkdir /usr/local/lib/nodejs/node-v10.15.1
$ sudo tar -xf node-v10.15.1-linux-armv7l.tar.xz -C /usr/local/lib/nodejs/node-v10.15.1

Link node version into /usr/local/bin

$ sudo ln -s /usr/local/lib/nodejs/node-v10.15.1/bin/node /usr/local/bin/node
$ sudo ln -s /usr/local/lib/nodejs/node-v10.15.1/bin/npm /usr/local/bin/npm

Test node & npm is linked correctly

$ node -v
$ npm -v

Clean up

$ rm -rf /home/admin/download/*

Port Forwarding and Uncomplicated Firewall

We need to open up port 3000 on the router and allow access through ufw. Follow the steps as you have done previously opening the port forwarding on your router. Add a new port forwarding configuration with the following settings:

Application nameExternal portInternal portInternal IP addressProtocol (TCP or UDP)LndHub 3000 3000 YOUR:NODE:IP:ADDR TCP 

Allowing access in ufw

$ sudo su
$ ufw allow 3000 comment 'allow LndHub'
$ ufw reload
$ exit

Unlock LND

Make sure your lnd node is unlocked before running LndHub

$ lncli unlock

Install LndHub

Switch user to bitcoin

$ su - bitcoin

Clone the LndHub repository

$ git clone https://github.com/BlueWallet/LndHub

Copy the tls.cert and admin.macaroon files into LndHub

$ cp .lnd/data/chain/bitcoin/mainnet/admin.macaroon LndHub/
$ cp .lnd/tls.cert LndHub/

Edit the LndHub config.js file to add bitcoin RPC credentials

$ cd LndHub/
$ nano config.js

Edit the config.js file

  • Change bitcoind.rpc login:password to match the rpcuser & rpcpassword in your bitcoin.conf. Your rpcpassword may need to be URL encoded if it contains special characters. You can use an online service like https://meyerweb.com/eric/tools/dencoder/ to encode it (it does not send your rpcpassword anywhere).
  • Change all the IP addresses from 1.1.1.1 to 127.0.0.1
  • Change the redis port from 12914 to 6379
let config = {
  bitcoind: {
    rpc: 'http://rpcuser:rpcpassword@127.0.0.1:8332',
  },
  redis: {
    port: 6379,
    host: '127.0.0.1',
    family: 4,
    db: 0,
  },
  lnd: {
    url: '127.0.0.1:10009',
  },
};

Install required node modules

$ npm config set prefix '~/.npm-global'
$ export PATH=~/.npm-global/bin:$PATH
$ npm install

Compile babeljs

$ npm install -g babel-cli
$ mkdir build
$ babel ./ --out-dir ./build --copy-files --ignore node_modules

Run LndHub

$ node build/index.js

Check for 'BOOTING UP' 'Listening on port 3000'

Autostart LndHub

Setup LndHub to start automatically on system startup. Switch back to the “admin” user or login as “admin”

$ exit

Edit the system service config for LndHub

$ sudo nano /etc/systemd/system/lndhub.service
[Unit]
Description=LndHub Wrapper for Lightning Daemon
Wants=lnd.service
After=lnd.service

[Service]
WorkingDirectory=/home/bitcoin/LndHub
ExecStart=/usr/local/bin/node build/index.js

User=bitcoin
Group=bitcoin
Type=simple
KillMode=process
LimitNOFILE=128000
TimeoutSec=240
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

Start up LndHub via the systemctl

$ sudo systemctl enable lndhub
$ sudo systemctl start lndhub

Check the lndhub log file for 'BOOTING UP' 'Listening on port 3000'

$ sudo journalctl -f -u lndhub

LndHub should now be ready to use in the BlueWallet, but first


LNDHub on Mac OSX
Recover lndhub account