diff --git a/doc/DOCKER_advanced_setups.md b/doc/DOCKER_advanced_setups.md index 36bd1ac7..4f13e39a 100644 --- a/doc/DOCKER_advanced_setups.md +++ b/doc/DOCKER_advanced_setups.md @@ -9,6 +9,7 @@ A word of caution, though, the default values of these options try to maximize y ## Table of Content ## - [Local indexer of Bitcoin addresses](#local_indexer) - [Local Electrum server used as data source for imports/rescans](#local_electrum) +- [Local Whirlpool client](#local_whirlpool) - [External Bitcoin full node](#external_bitcoind) - [bitcoind RPC API ans ZMQ notifications exposed to external apps](#exposed_rpc_zmq) - [Static onion address for bitcoind hidden service](#static_onion) @@ -117,6 +118,80 @@ nano ./conf/docker-node.conf ``` + + +## Local Whirlpool client ## + +This setup allows to install and run a [Whirlpool client](https://github.com/Samourai-Wallet/whirlpool-client-cli) inside MyDojo. + +The client can be configured and controlled through a REST API exposed as a Tor hidden service. + + +### Procedure ### + +``` +# If you're installing a new Dojo or if you're upgrading from a Dojo version < 1.6, edit the docker-whirlpool.conf.tpl file +nano ./conf/docker-whirlpool.conf.tpl + +# Otherwise, edit the docker-whirlpool.conf file +nano ./conf/docker-whirlpool.conf + +# +# Set the value of WHIRLPOOL_INSTALL to "on" +## Save and exit nano +# +``` + +### Installation of Whirlpool GUI ### + +The [Whirlpool GUI application]((https://github.com/Samourai-Wallet/whirlpool-gui)) provides a graphical interface for your Whirlpool client. + +These steps describe how to install the Whirlpool GUI application how a computer and how to connect it to your Whirlpool client. + + +**Requirements** + +- MyDojo has been fully initialized, +- Whirlpool client has been activated in MyDojo, +- Your Samourai Wallet is paired to MyDojo, +- MyDojo is running. +- Tor browser is installed on the computer that will run the Whirlpool GUI application. + + +**Procedure** + +- Retrieve the onion address of the API provided by your Whirlpool client + + ``` + # Open a terminal console on the computer hosting your Dojo + + # Retrieve the onion address of the Whirlpool API + ./dojo.sh onion + ``` + +- Install and configure the Whirlpool GUI application + + ``` + # If needed, install Tor browser on the computer that will run the Whirlpool GUI application + # Launch the Tor browser + + # Install the Whirlpool GUI application on the computer and launch it + + # Select 'Advanced: remote CLI' + # Set 'CLI address' with 'http://your_onion_address' where your_onion_address is the address of the Whirlpool API + # Check that the 'Tor proxy' field has the correct socks5 port used by your Tor browser. + # Click 'Connect'. + + # Paste the pairing payload from your mobile device when prompted: + # Select the Samourai Wallet Menu (3 dots top right), + # Go to Settings -> Transactions -> Pair to Whirlpool GUI, + # Copy the payload and send to your main computer using any method you prefer, + # Paste the payload. + + # The GUI will restart and prompt for you to enter your Samourai Wallet passphrase. + # You are all set and ready to mix! + ``` + ## External Bitcoin full node ## diff --git a/doc/DOCKER_setup.md b/doc/DOCKER_setup.md index b44c8b3f..1c679186 100644 --- a/doc/DOCKER_setup.md +++ b/doc/DOCKER_setup.md @@ -27,42 +27,41 @@ MyDojo is a set of Docker containers providing a full Samourai backend composed ## Architecture ## - ------------------- ------------------- -------------------- - | Samourai Wallet | | Sentinel | | Bitcoin full nodes | - ------------------- ------------------- -------------------- - |_______________________|_______________________| - | - ------------ - - Tor network - - ------------ - | - Host machine | (Tor hidden services) - ______________________________ | _____________________________ - | | | - | --------- dmznet | - | --------| Tor |------------ | - | | --------- | | - | | | | - | --------- | | - | --| Nginx |-------- | | - | | --------- | | | - |- - - - -|- - - - - - - - - - -|- - - - - - - - -|- - - - - - | - | | | | | - | ---------- ---------- ---------- | - | | Nodejs |----------| Explorer |------| Bitcoind | | - | ---------- ---------- ---------- | - | | | | | | - | | ------- | | | - | | | | | | - | ---------- | ---------- | | - | | MySQL | ----| Indexer |----------- | - | ---------- ---------- | - | dojonet | - |______________________________________________________________| - - + ------------------ -------------------- --------------- ----------------------- + | Mobile Wallets | | Bitcoin full nodes | | Whirlpool GUI | | Whirlpool Coordinator | + ------------------ -------------------- --------------- ----------------------- + |_______________________|____________________|_______________________| + | + ------------- + | | + ---------------------- | Tor network | + | | | + | ------------ + | | + | | (Tor hidden services) + _____ | ____________________________ | _________________________________________ + | | | | | + | | | --------- dmznet | + | | | -----------| Tor |------------------------ | + | | | | --------- | | + | | --------- | | + | | | nginx | - - - - - - - - - - - - - - - - - - - - - -|- - - - - - | + | | --------- | | + | | | | | | | + | | --- | ---------------------------- | | + | | | | | | | | + | ----------- | ---------- ---------- ---------- | + | | whirlpool | | | Nodejs |----------| Explorer |------| Bitcoind | | + | ----------- | ---------- ---------- ---------- | + | | | | | | | + | | | ------- | | | + | | | | | | | + | | ---------- | ---------- | | + | | | MySQL | ----| Indexer |----------- | + | | ---------- ---------- | + | whirlnet | dojonet | + |_________________|______________________________________________________________| + Host machine @@ -160,6 +159,7 @@ This procedure allows to install a new Dojo from scratch. * Dojo provides a few additional settings for advanced setups: * installation of an address indexer used for fast imports and rescans, * support of an external electrum server (ElectrumX or electrs) used for fast imports and rescans, + * installation of a Whirlpool client, * static onion address for your full node, * bitcoind RPC API exposed to external apps, * use of an external full node, @@ -258,6 +258,7 @@ Available commands: dojo.sh logs pushtx : display the logs of the pushTx API (nodejs) dojo.sh logs pushtx-orchest : display the logs of the Orchestrator (nodejs) dojo.sh logs explorer : display the logs of the Explorer + dojo.sh logs whirlpool : display the logs of the Whirlpool client Available options (for api, tracker, pushtx, pushtx-orchest and explorer modules): -d [VALUE] : select the type of log to be displayed. @@ -277,6 +278,12 @@ Available commands: upgrade Upgrade your Dojo. version Display the version of dojo. + + whirlpool [action] Interact with the internal whirlpool-cli mdule." + + Available actions:" + apikey : display the API key generated by whirlpool-cli." + reset : reset the whirlpool-cli instance (delete configuration file)." ``` @@ -346,6 +353,10 @@ The maintenance tool is accessed as a Tor hidden service (static onion address). The block explorer is accessed as a Tor hidden service (static onion address). +The Whirlpool API is accessed as a Tor hidden service (static onion address). + +The Whirlpool client connects to the Whirlpool Coordinator hidden service. + The Bitcoin node only allows incoming connections from Tor (ephemeral onion address). The Bitcoin node attempts outgoing connections to both Tor and clearnet nodes (through the Tor local proxy). diff --git a/docker/my-dojo/.env b/docker/my-dojo/.env index b051e08e..e23c0911 100644 --- a/docker/my-dojo/.env +++ b/docker/my-dojo/.env @@ -14,10 +14,11 @@ DOJO_VERSION_TAG=1.6.0 DOJO_DB_VERSION_TAG=1.1.1 DOJO_BITCOIND_VERSION_TAG=1.5.0 DOJO_NODEJS_VERSION_TAG=1.6.0 -DOJO_NGINX_VERSION_TAG=1.4.0 +DOJO_NGINX_VERSION_TAG=1.5.0 DOJO_TOR_VERSION_TAG=1.4.0 DOJO_EXPLORER_VERSION_TAG=1.3.0 DOJO_INDEXER_VERSION_TAG=1.0.0 +DOJO_WHIRLPOOL_VERSION_TAG=1.0.0 ######################################### diff --git a/docker/my-dojo/conf/docker-whirlpool.conf.tpl b/docker/my-dojo/conf/docker-whirlpool.conf.tpl new file mode 100644 index 00000000..2ec295ab --- /dev/null +++ b/docker/my-dojo/conf/docker-whirlpool.conf.tpl @@ -0,0 +1,20 @@ +######################################### +# CONFIGURATION OF WHIRLPOOL CONTAINER +######################################### + +# Install and run an instance of whirlpool-cli inside Docker +# Value: on | off +WHIRLPOOL_INSTALL=off + + +# +# EXPERT SETTINGS +# + +# Activate debug logs +# Value: on | off +WHIRLPOOL_DEBUG=off + +# Activate more debug logs +# Value: on | off +WHIRLPOOL_DEBUG_CLIENT=off diff --git a/docker/my-dojo/docker-compose.yaml b/docker/my-dojo/docker-compose.yaml index 1c093744..7c0d69e0 100644 --- a/docker/my-dojo/docker-compose.yaml +++ b/docker/my-dojo/docker-compose.yaml @@ -66,6 +66,8 @@ services: depends_on: - node networks: + whirlnet: + ipv4_address: 172.30.1.3 dmznet: ipv4_address: 172.29.1.3 dojonet: @@ -79,6 +81,7 @@ services: env_file: - ./.env - ./conf/docker-explorer.conf + - ./conf/docker-whirlpool.conf - ./conf/docker-tor.conf restart: always command: /restart.sh @@ -103,6 +106,12 @@ networks: driver: default config: - subnet: 172.29.0.0/16 + whirlnet: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.30.0.0/16 volumes: data-mysql: diff --git a/docker/my-dojo/dojo.sh b/docker/my-dojo/dojo.sh index 71252bbb..c845e076 100755 --- a/docker/my-dojo/dojo.sh +++ b/docker/my-dojo/dojo.sh @@ -14,6 +14,7 @@ source_file() { } # Source config files +source_file "$DIR/conf/docker-whirlpool.conf" source_file "$DIR/conf/docker-indexer.conf" source_file "$DIR/conf/docker-bitcoind.conf" source_file "$DIR/conf/docker-explorer.conf" @@ -43,6 +44,10 @@ select_yaml_files() { yamlFiles="$yamlFiles -f $DIR/overrides/indexer.install.yaml" fi + if [ "$WHIRLPOOL_INSTALL" == "on" ]; then + yamlFiles="$yamlFiles -f $DIR/overrides/whirlpool.install.yaml" + fi + # Return yamlFiles echo "$yamlFiles" } @@ -236,6 +241,7 @@ uninstall() { docker image rm -f samouraiwallet/dojo-nginx:"$DOJO_NGINX_VERSION_TAG" docker image rm -f samouraiwallet/dojo-tor:"$DOJO_TOR_VERSION_TAG" docker image rm -f samouraiwallet/dojo-indexer:"$DOJO_INDEXER_VERSION_TAG" + docker image rm -f samouraiwallet/dojo-whirlpool:"$DOJO_WHIRLPOOL_VERSION_TAG" docker volume prune -f return 0 @@ -264,6 +270,7 @@ clean() { del_images_for samouraiwallet/dojo-nginx "$DOJO_NGINX_VERSION_TAG" del_images_for samouraiwallet/dojo-tor "$DOJO_TOR_VERSION_TAG" del_images_for samouraiwallet/dojo-indexer "$DOJO_INDEXER_VERSION_TAG" + del_images_for samouraiwallet/dojo-whirlpool "$DOJO_WHIRLPOOL_VERSION_TAG" } # Upgrade @@ -334,6 +341,11 @@ onion() { V3_ADDR=$( docker exec -it tor cat /var/lib/tor/hsv3dojo/hostname ) echo "Maintenance Tool hidden service address = $V3_ADDR" + if [ "$WHIRLPOOL_INSTALL" == "on" ]; then + V3_ADDR_WHIRLPOOL=$( docker exec -it tor cat /var/lib/tor/hsv3whirlpool/hostname ) + echo "Whirlpool API hidden service address = $V3_ADDR_WHIRLPOOL" + fi + if [ "$BITCOIND_INSTALL" == "on" ]; then V2_ADDR_BTCD=$( docker exec -it tor cat /var/lib/tor/hsv2bitcoind/hostname ) echo "bitcoind hidden service address = $V2_ADDR_BTCD" @@ -345,6 +357,29 @@ version() { echo "Dojo v$DOJO_VERSION_TAG" } +# Interact with whirlpool-cli +whirlpool() { + if [ "$WHIRLPOOL_INSTALL" == "off" ]; then + echo -e "Command not supported for your setup.\nCause: Your Dojo is not running a whirlpool client" + fi + + case $1 in + apikey ) + API_KEY=$( docker exec -it whirlpool cat /home/whirlpool/.whirlpool-cli/whirlpool-cli-config.properties | grep cli.apiKey= | cut -c 12-) + echo "$API_KEY" + ;; + reset ) + eval "docker exec -it whirlpool rm -f /home/whirlpool/.whirlpool-cli/*.json" + eval "docker exec -it whirlpool rm -f /home/whirlpool/.whirlpool-cli/whirlpool-cli-config.properties" + yamlFiles=$(select_yaml_files) + eval "docker-compose $yamlFiles restart whirlpool" + ;; + * ) + echo -e "Unkonwn action for the whirlpool command" + ;; + esac +} + # Display logs logs_node() { if [ $3 -eq 0 ]; then @@ -362,9 +397,18 @@ logs_explorer() { fi } +logs_whirlpool() { + if [ $3 -eq 0 ]; then + docker exec -ti whirlpool tail -f /home/whirlpool/.whirlpool-cli/whirlpool-output.log + else + docker exec -ti whirlpool tail -n $3 /home/whirlpool/.whirlpool-cli/whirlpool-output.log + fi +} + logs() { source_file "$DIR/conf/docker-bitcoind.conf" source_file "$DIR/conf/docker-indexer.conf" + source_file "$DIR/conf/docker-whirlpool.conf" source_file "$DIR/conf/docker-common.conf" case $1 in @@ -400,6 +444,13 @@ logs() { explorer ) logs_explorer $1 $2 $3 ;; + whirlpool ) + if [ "$WHIRLPOOL_INSTALL" == "on" ]; then + logs_whirlpool $1 $2 $3 + else + echo -e "Command not supported for your setup.\nCause: Your Dojo is not running a whirlpool client" + fi + ;; * ) yamlFiles=$(select_yaml_files) services="nginx node tor db" @@ -412,6 +463,9 @@ logs() { if [ "$INDEXER_INSTALL" == "on" ]; then services="$services indexer" fi + if [ "$WHIRLPOOL_INSTALL" == "on" ]; then + services="$services whirlpool" + fi eval "docker-compose $yamlFiles logs --tail=0 --follow $services" ;; esac @@ -448,8 +502,9 @@ help() { echo " dojo.sh logs pushtx : display the logs of the pushTx API (nodejs)" echo " dojo.sh logs pushtx-orchest : display the logs of the pushTx Orchestrator (nodejs)" echo " dojo.sh logs explorer : display the logs of the Explorer" + echo " dojo.sh logs whirlpool : display the logs of the Whirlpool client" echo " " - echo " Available options (only available for api, tracker, pushtx, pushtx-orchest and explorer modules):" + echo " Available options (only available for api, tracker, pushtx, pushtx-orchest, explorer and whirlpool modules):" echo " -d [VALUE] : select the type of log to be displayed." echo " VALUE can be output (default) or error." echo " -n [VALUE] : display the last VALUE lines" @@ -471,6 +526,12 @@ help() { echo " --nocache : rebuild the docker containers without reusing the cached layers." echo " " echo " version Display the version of dojo" + echo " " + echo " whirlpool [action] Interact with the internal whirlpool-cli mdule." + echo " " + echo " Available actions:" + echo " apikey : display the API key generated by whirlpool-cli." + echo " reset : reset the whirlpool-cli instance (delete configuration file)." } @@ -566,4 +627,7 @@ case "$subcommand" in version ) version ;; + whirlpool ) + whirlpool "$@" + ;; esac diff --git a/docker/my-dojo/install/install-scripts.sh b/docker/my-dojo/install/install-scripts.sh index d55b7921..50170f54 100755 --- a/docker/my-dojo/install/install-scripts.sh +++ b/docker/my-dojo/install/install-scripts.sh @@ -12,6 +12,12 @@ else source ./conf/docker-explorer.conf.tpl fi +if [ -f ./conf/docker-whirlpool.conf ]; then + source ./conf/docker-whirlpool.conf +else + source ./conf/docker-whirlpool.conf.tpl +fi + if [ -f ./conf/docker-common.conf ]; then source ./conf/docker-common.conf else @@ -76,6 +82,9 @@ init_config_files() { cp ./conf/docker-indexer.conf.tpl ./conf/docker-indexer.conf echo "Initialized docker-indexer.conf" + cp ./conf/docker-whirlpool.conf.tpl ./conf/docker-whirlpool.conf + echo "Initialized docker-whirlpool.conf" + if [ "$EXPLORER_INSTALL" == "on" ]; then cp ./nginx/explorer.conf ./nginx/dojo-explorer.conf else @@ -83,6 +92,13 @@ init_config_files() { fi echo "Initialized dojo-explorer.conf (nginx)" + if [ "$WHIRLPOOL_INSTALL" == "on" ]; then + cp ./nginx/whirlpool.conf ./nginx/dojo-whirlpool.conf + else + cp /dev/null ./nginx/dojo-ewhirlpool.conf + fi + echo "Initialized dojo-whirlpool.conf (nginx)" + # Initialize config files for nginx and the maintenance tool if [ "$COMMON_BTC_NETWORK" == "testnet" ]; then cp ./nginx/testnet.conf ./nginx/dojo.conf diff --git a/docker/my-dojo/install/upgrade-scripts.sh b/docker/my-dojo/install/upgrade-scripts.sh index f59dbcbd..40795ed2 100755 --- a/docker/my-dojo/install/upgrade-scripts.sh +++ b/docker/my-dojo/install/upgrade-scripts.sh @@ -12,6 +12,12 @@ else source ./conf/docker-explorer.conf.tpl fi +if [ -f ./conf/docker-whirlpool.conf ]; then + source ./conf/docker-whirlpool.conf +else + source ./conf/docker-whirlpool.conf.tpl +fi + source ./conf/docker-bitcoind.conf # Confirm upgrade operation @@ -60,6 +66,9 @@ update_config_files() { update_config_file ./conf/docker-indexer.conf ./conf/docker-indexer.conf.tpl echo "Initialized docker-indexer.conf" + update_config_file ./conf/docker-whirlpool.conf ./conf/docker-whirlpool.conf.tpl + echo "Initialized docker-whirlpool.conf" + # Initialize config files for nginx and the maintenance tool if [ "$EXPLORER_INSTALL" == "on" ]; then cp ./nginx/explorer.conf ./nginx/dojo-explorer.conf @@ -68,6 +77,13 @@ update_config_files() { fi echo "Initialized dojo-explorer.conf (nginx)" + if [ "$WHIRLPOOL_INSTALL" == "on" ]; then + cp ./nginx/whirlpool.conf ./nginx/dojo-whirlpool.conf + else + cp /dev/null ./nginx/dojo-ewhirlpool.conf + fi + echo "Initialized dojo-whirlpool.conf (nginx)" + if [ "$COMMON_BTC_NETWORK" == "testnet" ]; then cp ./nginx/testnet.conf ./nginx/dojo.conf echo "Initialized dojo.conf (nginx)" diff --git a/docker/my-dojo/nginx/Dockerfile b/docker/my-dojo/nginx/Dockerfile index 93db47a6..1c440e4b 100644 --- a/docker/my-dojo/nginx/Dockerfile +++ b/docker/my-dojo/nginx/Dockerfile @@ -10,6 +10,7 @@ RUN mkdir -p "$LOGS_DIR" && \ COPY ./nginx.conf /etc/nginx/nginx.conf COPY ./dojo.conf /etc/nginx/sites-enabled/dojo.conf COPY ./dojo-explorer.conf /etc/nginx/sites-enabled/dojo-explorer.conf +COPY ./dojo-whirlpool.conf /etc/nginx/sites-enabled/dojo-whirlpool.conf # Copy wait-for script COPY ./wait-for /wait-for diff --git a/docker/my-dojo/nginx/whirlpool.conf b/docker/my-dojo/nginx/whirlpool.conf new file mode 100644 index 00000000..a10dc983 --- /dev/null +++ b/docker/my-dojo/nginx/whirlpool.conf @@ -0,0 +1,15 @@ +server { + listen 8898; + server_name _; + resolver 127.0.0.11 valid=30s; + + location / { + set $upstream http://whirlpool:8898; + proxy_pass $upstream; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + } +} diff --git a/docker/my-dojo/overrides/whirlpool.install.yaml b/docker/my-dojo/overrides/whirlpool.install.yaml new file mode 100644 index 00000000..2e356735 --- /dev/null +++ b/docker/my-dojo/overrides/whirlpool.install.yaml @@ -0,0 +1,24 @@ +version: "3.2" + +services: + whirlpool: + image: "samouraiwallet/dojo-whirlpool:${DOJO_WHIRLPOOL_VERSION_TAG}" + container_name: whirlpool + build: + context: ./whirlpool + env_file: + - ./.env + - ./conf/docker-common.conf + - ./conf/docker-whirlpool.conf + restart: always + command: /restart.sh + expose: + - "8898" + volumes: + - data-whirlpool:/home/whirlpool + networks: + whirlnet: + ipv4_address: 172.30.1.8 + +volumes: + data-whirlpool: diff --git a/docker/my-dojo/tor/restart.sh b/docker/my-dojo/tor/restart.sh index e99aa1e0..1cf44585 100644 --- a/docker/my-dojo/tor/restart.sh +++ b/docker/my-dojo/tor/restart.sh @@ -32,6 +32,13 @@ if [ "$EXPLORER_INSTALL" == "on" ]; then tor_options+=(--HiddenServiceDirGroupReadable 1) fi +if [ "$WHIRLPOOL_INSTALL" == "on" ]; then + tor_options+=(--HiddenServiceDir /var/lib/tor/hsv3whirlpool) + tor_options+=(--HiddenServiceVersion 3) + tor_options+=(--HiddenServicePort "80 172.29.1.3:8898") + tor_options+=(--HiddenServiceDirGroupReadable 1) +fi + if [ "$TOR_USE_BRIDGES" == "on" ]; then tor_options+=(--ClientTransportPlugin "obfs4 exec /usr/local/bin/obfs4proxy") tor_options+=(--UseBridges 1) diff --git a/docker/my-dojo/whirlpool/Dockerfile b/docker/my-dojo/whirlpool/Dockerfile new file mode 100644 index 00000000..4620070c --- /dev/null +++ b/docker/my-dojo/whirlpool/Dockerfile @@ -0,0 +1,78 @@ +FROM debian:buster + +ENV WHIRLPOOL_HOME /home/whirlpool +ENV WHIRLPOOL_DIR /usr/local/whirlpool-cli + + +# Install prerequisites +# Create group & user whirlpool +# Create .whirlpool-cli subdirectory of WHIRLPOOL_HOME +# Create /usr/local/src/whirlpool-cli directory +RUN set -ex && \ + apt-get update && \ + apt-get install -y libevent-dev zlib1g-dev libssl-dev gcc make automake ca-certificates autoconf musl-dev coreutils gpg wget default-jdk && \ + addgroup --system -gid 1113 whirlpool && \ + adduser --system --ingroup whirlpool -uid 1110 whirlpool && \ + mkdir -p "$WHIRLPOOL_HOME/.whirlpool-cli" && \ + chown -Rv whirlpool:whirlpool "$WHIRLPOOL_HOME" && \ + chmod -R 750 "$WHIRLPOOL_HOME" && \ + mkdir -p "$WHIRLPOOL_DIR" + +# Install Tor +ENV WHIRLPOOL_TOR_URL https://archive.torproject.org/tor-package-archive +ENV WHIRLPOOL_TOR_VERSION 0.4.2.7 +ENV WHIRLPOOL_TOR_GPG_KS_URI hkp://keyserver.ubuntu.com:80 +ENV WHIRLPOOL_TOR_GPG_KEY1 0xEB5A896A28988BF5 +ENV WHIRLPOOL_TOR_GPG_KEY2 0xC218525819F78451 +ENV WHIRLPOOL_TOR_GPG_KEY3 0x21194EBB165733EA +ENV WHIRLPOOL_TOR_GPG_KEY4 0x6AFEE6D49E92B601 + +RUN set -ex && \ + mkdir -p /usr/local/src/ && \ + cd /usr/local/src && \ + wget -qO "tor-$WHIRLPOOL_TOR_VERSION.tar.gz" "$WHIRLPOOL_TOR_URL/tor-$WHIRLPOOL_TOR_VERSION.tar.gz" && \ + wget -qO "tor-$WHIRLPOOL_TOR_VERSION.tar.gz.asc" "$WHIRLPOOL_TOR_URL/tor-$WHIRLPOOL_TOR_VERSION.tar.gz.asc" && \ + gpg --keyserver "$WHIRLPOOL_TOR_GPG_KS_URI" --recv-keys "$WHIRLPOOL_TOR_GPG_KEY1" && \ + gpg --keyserver "$WHIRLPOOL_TOR_GPG_KS_URI" --recv-keys "$WHIRLPOOL_TOR_GPG_KEY2" && \ + gpg --keyserver "$WHIRLPOOL_TOR_GPG_KS_URI" --recv-keys "$WHIRLPOOL_TOR_GPG_KEY3" && \ + gpg --keyserver "$WHIRLPOOL_TOR_GPG_KS_URI" --recv-keys "$WHIRLPOOL_TOR_GPG_KEY4" && \ + gpg --verify "tor-$WHIRLPOOL_TOR_VERSION.tar.gz.asc" && \ + tar -xzvf "tor-$WHIRLPOOL_TOR_VERSION.tar.gz" -C /usr/local/src && \ + cd "/usr/local/src/tor-$WHIRLPOOL_TOR_VERSION" && \ + ./configure \ + --disable-asciidoc \ + --sysconfdir=/etc \ + --disable-unittests && \ + make && make install && \ + cd .. && \ + rm -rf "tor-$WHIRLPOOL_TOR_VERSION" && \ + rm "tor-$WHIRLPOOL_TOR_VERSION.tar.gz" && \ + rm "tor-$WHIRLPOOL_TOR_VERSION.tar.gz.asc" + +# Install whirlpool-cli +ENV WHIRLPOOL_URL https://github.com/Samourai-Wallet/whirlpool-client-cli/releases/download +ENV WHIRLPOOL_VERSION 0.10.5 +ENV WHIRLPOOL_JAR "whirlpool-client-cli-$WHIRLPOOL_VERSION-run.jar" +ENV WHIRLPOOL_SHA256 94da0b3dc3da1a6292d7ffe74c0cba324a8b553437e66898e86312051ee1b84f + +RUN set -ex && \ + cd "$WHIRLPOOL_DIR" && \ + echo "$WHIRLPOOL_SHA256 *$WHIRLPOOL_JAR" > WHIRLPOOL_CHECKSUMS && \ + wget -qO "$WHIRLPOOL_JAR" "$WHIRLPOOL_URL/$WHIRLPOOL_VERSION/$WHIRLPOOL_JAR" && \ + sha256sum -c WHIRLPOOL_CHECKSUMS 2>&1 | grep OK && \ + mv "$WHIRLPOOL_JAR" whirlpool-client-cli-run.jar && \ + chown -Rv whirlpool:whirlpool "$WHIRLPOOL_DIR" && \ + chmod -R 750 "$WHIRLPOOL_DIR" + +# Copy restart script +COPY ./restart.sh /restart.sh + +RUN chown whirlpool:whirlpool /restart.sh && \ + chmod u+x /restart.sh && \ + chmod g+x /restart.sh + +# Expose HTTP API port +EXPOSE 8898 + +# Switch to user whirlpool +USER whirlpool diff --git a/docker/my-dojo/whirlpool/restart.sh b/docker/my-dojo/whirlpool/restart.sh new file mode 100644 index 00000000..d5d114ef --- /dev/null +++ b/docker/my-dojo/whirlpool/restart.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -e + +whirlpool_options=( + --listen + --cli.api.http-enable=true + --cli.api.http-port=8898 + --cli.dojo.enabled=true + --cli.tor=true + --cli.torConfig.executable=/usr/local/bin/tor + --cli.torConfig.coordinator.enabled=true + --cli.torConfig.coordinator.onion=true + --cli.torConfig.backend.enabled=false + --cli.torConfig.backend.onion=false + --logging.file="/home/whirlpool/.whirlpool-cli/whirlpool-output.log" +) + +if [ "$COMMON_BTC_NETWORK" == "testnet" ]; then + whirlpool_options+=(--cli.server="TESTNET") + whirlpool_options+=(--cli.dojo.url="http://172.30.1.3:80/test/v2/") +else + whirlpool_options+=(--cli.server="MAINNET") + whirlpool_options+=(--cli.dojo.url="http://172.30.1.3:80/v2/") +fi + +if [ "$WHIRLPOOL_DEBUG" == "on" ]; then + whirlpool_options+=(--debug) +fi + +if [ "$WHIRLPOOL_DEBUG_CLIENT" == "on" ]; then + whirlpool_options+=(--debug-client) +fi + +cd /home/whirlpool/.whirlpool-cli +java -jar /usr/local/whirlpool-cli/whirlpool-client-cli-run.jar "${whirlpool_options[@]}"