Minimal Deployment of BTCPayServer in Testnet Mode with Electrum Wallet
Tags: btcpayserver, bitcoin, dotnet, nbxplorer
Published: 2021-02-16 21:27:51

BTCPay Server is a self-hosted opensource solution for receiving Bitcoin and Altcoin payments. BTCPay Server implements the same API as Bitpay so it's easy to switch over from one to the other. There are detailed instructions for setting up the BTCPay Server (for a production environment) on the BTCPay Server documentation available here: [BTCPay Server docs](https://docs.btcpayserver.org/). That said, a minimal setup of BTCPay server in testnet mode is a bit tricky and this post is here to document the steps I took when I had to do that a few weeks ago. To be clear **The instructions in this post are not for setting BTCPay Server up in production. For production settings, see BTCPay Server's official documentation**

The notes here are just to supplement the Minimal Manual Deployment docs on BTCPay Server which can be found here [Minimal Manual Deployment](https://docs.btcpayserver.org/ManualDeployment/)

### Install Bitcoin
Using these commands
```bash
BITCOIN_VERSION="0.19.1"
BITCOIN_URL="https://bitcoin.org/bin/bitcoin-core-0.19.1/bitcoin-0.19.1-x86_64-linux-gnu.tar.gz"
BITCOIN_SHA256="5fcac9416e486d4960e1a946145566350ca670f9aaba99de6542080851122e4c"

# install bitcoin binaries
cd /tmp
wget -O bitcoin.tar.gz "$BITCOIN_URL"
echo "$BITCOIN_SHA256 bitcoin.tar.gz" | sha256sum -c - && \
mkdir bin && \
sudo tar -xzvf bitcoin.tar.gz -C /usr/local/bin --strip-components=2 "bitcoin-$BITCOIN_VERSION/bin/bitcoin-cli" "bitcoin-$BITCOIN_VERSION/bin/bitcoind"
rm bitcoin.tar.gz
```

### Install .NET Core
```bash
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-sdk-3.1
```

### Install NBXplorer
```bash
cd ~
git clone https://github.com/dgarage/NBXplorer
cd NBXplorer
git checkout latest
./build.sh
```

### Install Electrum
You can use Electrum to setup either a testnet or live wallet for use with BTCPay Server.

Install Electrum with any of the steps available on their docs [Electrum Installation Docs](https://electrum.org/#download)

### Install BTCPayServer
```bash
cd ~
git clone https://github.com/btcpayserver/btcpayserver
cd btcpayserver
git checkout latest
./build.sh
```

## Long-running processes
A quick note that Bitcoin, NBXplorer and BTCPay are long running processes that should ideally run in the background. So when you run `bitcoind` for instance, it would take over your ssh session till you stop the process. If you don't want to run them in the background, you can consider using something like `tmux` to manage different sessions if you plan on just running these commands and leaving them running in multiple windows of the same ssh session.

```bash
# create a new session with
tmux new -s BTC

# create a new window in a session with Ctrl + b, c
# detach from session with Ctrl + b, d
# re-attach to session with tmux attach-session -t BTC
```

### Run Bitcoin in Testnet and Background Mode
To run Bitcoind in testnet mode

```bash
bitcoind -testnet
```

Run in the background using
```bash
bitciond -daemon -testnet
```

### Run NBXplorer in testnet mode
```bash
cd ~/NBXplorer
./run.sh --chains=btc --network=testnet
```

### Setup your testnet wallet with Electrum
```bash
# start testnet electrum in the background
electrum daemon -d --testnet 

# create a main wallet
electrum create --testnet 

# load wallet
electrum load_wallet --testnet

# get the master key of the wallet - you'll need this for your BTCPayServer store
electrum getmpk --testnet
```

### Run BTCPay Server in testnet mode
```bash
cd ~/btcpayserver
./run.sh --network=testnet --bind=0.0.0.0 --port=8080 --sqlitefile=mydb.db --chains=btc
```

Unless you're using Tor, you might need to setup a server like Apache or Nginx with an ssl certificate that forwards to BTCPay server on `port 8080` because BTCPay server does needs you to access it through HTTPS

### Setup your BTCPay Server store.
After BTCPay Server is launched, visit it at its url and create a store. Then integrate that store with your electrum Bitcoin wallet using the master key you got from Electrum earlier. 

See [Connect BTCPay Server Wallet](https://docs.btcpayserver.org/WalletSetup/#create-a-new-wallet) in the BTCPay Server docs.