bisq/pricenode
Devin Bileck 0bab863ee9
Fix command shown in README used to install collectd service
The install_collectd_debian.sh script reads user input to obtain the
onion address. However, when you pipe the output of curl into the shell
you're making the script text be standard input of the shell, which
takes it in as commands to run. After that, there's nothing left to
read. Even if it were to try, it wouldn't get anything from the terminal
input, because it's not connected to it. The pipe has replaced standard
input for the shell process.

Instead, create a pipe for bash to read the output of curl from and
provide it as the script file argument. In this case, the standard input
of the script is still connected to the terminal, and read will work.
2020-06-17 22:35:02 -07:00
..
docker Merge pricenode repository at 85df033 2018-09-14 11:45:35 +02:00
src Rename properties used to configure mempool hostnames 2020-05-11 11:45:33 +02:00
bisq-pricenode.env Add pricenode one-command installer script, systemd service, README (#3997) 2020-02-26 12:16:26 +01:00
bisq-pricenode.service Adjust the pricenode installer 2020-02-27 10:25:16 +01:00
collectd.conf.snippet Monitoring install scripts (#3985) 2020-02-20 16:48:56 +01:00
install_hsversion_debian.sh Report HS version to pricenode (#4027) 2020-04-02 16:06:00 +02:00
install_networksize_debian.sh Monitoring install scripts (#3985) 2020-02-20 16:48:56 +01:00
install_pricenode_debian.sh Update install scripts for Git LFS 2020-06-17 22:35:01 -07:00
journalscraper_hsversion.sh Report HS version to pricenode (#4027) 2020-04-02 16:06:00 +02:00
journalscraper.sh Fix using /bin/sh instead of /bin/bash in journalscraper.sh 2020-03-12 22:57:45 +09:00
Procfile Merge pricenode repository at 85df033 2018-09-14 11:45:35 +02:00
README-HEROKU.md Merge pricenode repository at 85df033 2018-09-14 11:45:35 +02:00
README.md Fix command shown in README used to install collectd service 2020-06-17 22:35:02 -07:00
TODO.md Merge pricenode repository at 85df033 2018-09-14 11:45:35 +02:00
torrc Merge pricenode repository at 85df033 2018-09-14 11:45:35 +02:00
uninstall_hsversion_debian.sh Report HS version to pricenode (#4027) 2020-04-02 16:06:00 +02:00

bisq-pricenode

Overview

The Bisq pricenode is a simple HTTP service that fetches, transforms and relays data from third-party price providers to Bisq exchange clients on request. Available prices include:

  • Bitcoin exchange rates, available at /getAllMarketPrices, and
  • Bitcoin mining fee rates, available at /getFees

Pricenodes are deployed in production as Tor hidden services. This is not because the location of these nodes needs to be kept secret, but rather so that Bisq exchange clients do not need to exit the Tor network in order to get price data.

Anyone can run a pricenode, but it must be discoverable in order for it to do any good. For exchange clients to discover your pricenode, its .onion address must be hard-coded in the Bisq exchange client's ProvidersRepository class. Alternatively, users can point explicitly to given pricenode (or set of pricenodes) with the exchange client's --providers command line option.

Pricenodes can be deployed anywhere Java and Tor binaries can be run. Instructions below cover deployment on localhost, and instructions how to deploy on Heroku are also available.

Pricenodes should be cheap to run with regard to both time and money. The application itself is non-resource intensive and can be run on the low-end of most providers' paid tiers.

A pricenode operator's main responsibilities are to ensure their node(s) are available and up-to-date. Releases are currently source-only, with the assumption that most operators will favor Git-based "push to deploy" workflows. To stay up to date with releases, operators can subscribe to this repository's releases.atom feed and/or get notifications in the #pricenode Slack channel.

Operating a production pricenode is a valuable service to the Bisq network, and operators should issue BSQ compensation requests accordingly.

Prerequisites for running a pricenode

To run a pricenode, you will need:

  • BitcoinAverage API keys. Free plans are fine for local development or personal nodes; paid plans should be used for well-known production nodes.
  • JDK 8 if you want to build and run a node locally.
  • The tor binary (e.g. brew install tor) if you want to run a hidden service locally.

How to deploy for production

Install

Run the one-command installer:

curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/install_pricenode_debian.sh | sudo bash

At the end of the installer script, it should print your Tor onion hostname.

Setting your BitcoinAverage API keys

Open /etc/default/bisq-pricenode.env in a text editor and look for these lines:

BITCOIN_AVG_PUBKEY=foo
BITCOIN_AVG_PRIVKEY=bar

Add your pubkey and privkey and then reload/restart bisq-pricenode service:

systemctl daemon-reload
systemctl restart bisq-pricenode

Test

To manually test endpoints, run each of the following:

curl http://localhost:8080/getAllMarketPrices
curl http://localhost:8080/getFees
curl http://localhost:8080/getParams
curl http://localhost:8080/getVersion
curl http://localhost:8080/info

Monitoring

If you run a main pricenode, you also are obliged to activate the monitoring feed by running

bash <(curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/monitor/install_collectd_debian.sh)

Follow the instruction given by the script and report your certificate to the @bisq-network/monitoring team or via the Keybase #monitoring channel!

Furthermore, you are obliged to provide network size data to the monitor by running

curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/install_networksize_debian.sh | sudo bash

Updating

Update your bisq code in /bisq/bisq with git pull

Then build an updated pricenode: ./gradlew :pricenode:installDist -x test

How to deploy elsewhere

Bitcoin mining fee estimates

The pricenode exposes a service API to Bisq clients under /getFees.

This API returns a mining fee rate estimate, representing an average of several mining fee rate values retrieved from different mempool.space instances.

To configure which mempool.space instances are queried to calculate this average, see the relevant section in the file application.properties.