basicswap/doc/install.md
2024-10-16 21:14:09 +02:00

6 KiB

Run using Docker

Docker must be installed and started:

docker -v

Should return a line containing Docker version...

To install docker engine on your platform see:

https://docs.docker.com/engine/install/#server

It's recommended to setup docker to work without sudo.
Without this step you will need to preface each docker-compose command with sudo:

https://docs.docker.com/engine/install/linux-postinstall/

Install dependencies

apt-get install --no-install-recommends git curl jq

Get the source code

git clone https://github.com/basicswap/basicswap.git

Copy the default environment file

cd basicswap/docker
cp example.env .env

(Optional) Set custom coin data path

Coin-related files, such as blockchain and wallet files, are stored in /var/data/coinswaps by default. To use a different location, simply modify COINDATA_PATH in your .env file found within the /docker sub-folder.

cd basicswap/docker
nano .env

Create the images

cd basicswap/docker
docker-compose build

Depending on your environment, the docker-compose command may not work. If that's the case, type docker compose instead, without the dash.

Prepare the datadir

Set xmrrestoreheight to the current xmr chain height.

CURRENT_XMR_HEIGHT=$(curl -s http://node2.monerodevs.org:18089/get_info | jq .height)

Adjust --withcoins and --withoutcoins as desired, eg: --withcoins=monero,bitcoin. By default only Particl is loaded.

FastSync

Append --usebtcfastsync to the below command to optionally initialise the Bitcoin datadir with a chain snapshot from btcpayserver FastSync.
FastSync README.md

Setup with a local Monero daemon (recommended):

docker-compose run --rm swapclient basicswap-prepare --datadir=/coindata --withcoins=monero --htmlhost="0.0.0.0" --wshost="0.0.0.0" --xmrrestoreheight=$CURRENT_XMR_HEIGHT

To instead use Monero public nodes and not run a local Monero daemon
(it can be difficult to find reliable public nodes):

Set XMR_RPC_HOST and XMR_RPC_PORT to a public XMR node.
docker-compose run --rm -e XMR_RPC_HOST="node.xmr.to" -e XMR_RPC_PORT=18081 swapclient basicswap-prepare --datadir=/coindata --withcoins=monero --htmlhost="0.0.0.0" --wshost="0.0.0.0" --xmrrestoreheight=$CURRENT_XMR_HEIGHT

Record the mnemonic from the output of the above command. Mnemonics should be stored encrypted and/or air-gapped. And the output of echo $CURRENT_XMR_HEIGHT for use if you need to later restore your wallet.

Set the timezone (optional)

Edit the .env file in the docker directory, set TZ to your local timezone. Valid options can be listed with: timedatectl list-timezones

Start the container

docker-compose up

Open in browser: http://localhost:12700

Add a coin

docker-compose stop
docker-compose run --rm swapclient basicswap-prepare --datadir=/coindata --addcoin=bitcoin --usebtcfastsync

You can copy an existing pruned datadir (excluding bitcoin.conf and any wallets) over to $COINDATA_PATH/bitcoin Remove any existing wallets after copying over a pruned chain or the Bitcoin daemon won't start.

With Encryption

docker-compose run --rm -e WALLET_ENCRYPTION_PWD=passwordhere swapclient basicswap-prepare --datadir=/coindata --addcoin=bitcoin --usebtcfastsync

Windows

Setup WSL 2 and Docker Desktop

docs.docker.com/docker-for-windows/wsl

Open a wsl terminal Windows key + R -> "wsl" -> Enter

Install Git:

sudo apt update
sudo apt install --no-install-recommends git

Download the BasicSwap code:

git clone https://github.com/basicswap/basicswap.git
cd basicswap/docker/

It's significantly faster to set COINDATA_PATH in the linux filesystem. You can access it from the windows side at: \\wsl$\Ubuntu

Continue from the Run Using Docker section.

Run Without Docker

Ubuntu Setup

apt-get install --no-install-recommends git python3-venv libpython3-dev gnupg pkg-config gcc libc-dev curl jq

OSX Setup

Install Homebrew (See https://brew.sh/):

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Dependencies:

brew install python git gnupg pkg-config jq

Close the terminal and open a new one to update the python symlinks.

Basicswap

export SWAP_DATADIR=$HOME/coinswaps
python3 -m venv "$SWAP_DATADIR/venv"
. $SWAP_DATADIR/venv/bin/activate && python -V

cd $SWAP_DATADIR
git clone https://github.com/basicswap/basicswap.git
cd $SWAP_DATADIR/basicswap

If installed on OSX, you may need to install additional root ssl certificates for the ssl module. From https://pypi.org/project/certifi/

sudo python3 bin/install_certifi.py

Continue installing dependencies and Basicswap.

pip3 install -r requirements.txt --require-hashes && pip3 install .

Prepare the datadir:

CURRENT_XMR_HEIGHT=$(curl -s http://node2.monerodevs.org:18089/get_info | jq .height)

basicswap-prepare --datadir=$SWAP_DATADIR --withcoins=monero --xmrrestoreheight=$CURRENT_XMR_HEIGHT

OR using a remote/public XMR daemon (not recommended):
XMR_RPC_HOST="node.xmr.to" XMR_RPC_PORT=18081 basicswap-prepare --datadir=$SWAP_DATADIR --withcoins=monero --xmrrestoreheight=$CURRENT_XMR_HEIGHT

Record the mnemonic from the output of the above command.

Start Basicswap:

basicswap-run --datadir=$SWAP_DATADIR

Open in browser: http://localhost:12700 It may take a few minutes to start as the coin daemons are started before the http interface.

Add a coin (Stop basicswap first):

export SWAP_DATADIR=/Users/$USER/coinswaps
basicswap-prepare --usebtcfastsync --datadir=/$SWAP_DATADIR --addcoin=bitcoin

Start after installed:

export SWAP_DATADIR=/Users/$USER/coinswaps
. $SWAP_DATADIR/venv/bin/activate && python -V
basicswap-run --datadir=$SWAP_DATADIR