Comment on page

Manual Install

Manual installation steps to configure a witness node running on ubuntu 18.04/20.04
This is an introduction for new Witnesses to get up to speed on the Peerplays blockchain. It is intended for Witnesses planning to join a live, already deployed, blockchain. The node running on ubuntu 18.04 or ubuntu 20.04 can follow the steps in the document for manual installation.
The following steps outline the manual installation of a Witness Node:
  1. 1.
    Preparing the Environment
  2. 2.
    Build Peerplays
  3. 3.
    Update the config.ini File
  4. 4.
    Create a Peerplays Account
  5. 5.
    Update config.ini with Witness Account Info
  6. 6.
    Start the Node and Vote for Yourself
Before we begin, to set up a Witness node requires about 15 PPY. This is to pay for an upgraded account (5 PPY) and to create a new witness (8 PPY). The remaining funds are to pay for various transaction fees while setting up the node (like voting for yourself!). Please see Obtaining Your First Tokens for more info.
Note that these fees will likely change over time as recommended by the Committee of Advisors.

1. Preparing the Environment

1.1. Hardware requirements

Please see the general Witness hardware requirements.
For the manual install, the requirements that we'll need for this guide would be as follows (as per the hardware requirements doc):
Node Type?
4 Cores
Ubuntu 18.04
The memory requirements shown in the table above are adequate to operate the node. Building and installing the node from source code (as with this manual installation guide) will require more memory. You may run into errors during the build and install process if the system memory is too low. See Installing vs Operating for more details.

1.2. Installing the required dependencies

The following dependencies are necessary for a clean install of Ubuntu 20.04:
sudo apt-get install \
autoconf bash bison build-essential ca-certificates dnsutils expect flex git \
graphviz libbz2-dev libcurl4-openssl-dev libncurses-dev libpcre3-dev \
libsnappy-dev libsodium-dev libssl-dev libtool libzip-dev locales lsb-release \
mc nano net-tools ntp openssh-server pkg-config python3 python3-jinja2 sudo \
systemd-coredump wget libboost-all-dev

1.3 cmake setup

Cmake is an open-source, cross platform tool that uses independent configuration files to generate native build tool files specific to the compiler and platform. It consists of precompiled binaries and the cmake tools makes configuration, building, and debugging much easier.
Install the cmake using the below commands:
chmod 755 ./
sudo ./ --prefix=/usr --skip-license
cmake --version

1.4 Install Boost libraries

Boost libraries provide free peer-reviewed portable C++ source libraries and it can be used across broad spectrum of application.
Install Boost libraries using the below commands:
tar -xzf boost_1_72_0.tar.gz boost_1_72_0
cd boost_1_72_0
sudo ./b2 install
sudo ldconfig

1.5 Install libzmq

The components libzmp and cppzmp are used for relaying messages between nodes.
First, install libzmq using the below commands:
tar -xzvf v4.3.4.tar.gz
cd libzmq-4.3.4
mkdir build
cd build
cmake ..
make -j$(nproc)
sudo make install
sudo ldconfig

1.6 Install cppzmq

Next, install cppzmp using the below commands:
tar -xzvf v4.9.0.tar.gz
cd cppzmq-4.9.0
mkdir build
cd build
cmake ..
make -j$(nproc)
sudo make install
sudo ldconfig

1.7 Install gsl

GSL is the GNU scientific library for numerical computing. It is a collection of routines for numerical computing in e.g. linear algebra, probability, random number generation, statistics, differentiation, etc.,
Install the gsl using the below commands:
tar -xzvf v4.1.4.tar.gz
cd gsl-4.1.4
make -j$(nproc)
sudo make install
sudo ldconfig

1.8 Install libbitcoin

The libbitcoin toolkit is a set of cross platform C++ libraries for building bitcoin applications. The toolkit consists of several libraries, most of which depend on the base libbitcoin-system library.
Install the libbitcoin using the below commands:
git clone --branch version3.8.0 --depth 1
cd libbitcoin-explorer
sudo ./
sudo ldconfig

1.9 Install Doxygen

Doxygen is a software utility that recognizes comments within C++ code that have a certain form, and uses them to produce a collection of HTML files containing the information in those comments.
Install the Doxygen using the below commands:
tar -xvf Release_1_8_17.tar.gz
cd doxygen-Release_1_8_17
mkdir build
cd build
cmake ..
make -j$(nproc)
sudo make install
sudo ldconfig

2.0 Install Perl

Perl is a high-level, general-purpose, interpreted, dynamic programming language originally developed for text manipulation.
Install the Perl using the below commands:
tar -xvf v5.30.0.tar.gz
cd perl5-5.30.0
./Configure -des
make -j$(nproc)
sudo make install
sudo ldconfig

2. Build Peerplays

Use the below commands to build Peerplays:
cd $HOME
git clone
cd peerplays
git checkout 1.6.0 # --> replace with most recent tag
git submodule update --init --recursive
# If you want to build Mainnet node
cmake -DCMAKE_BUILD_TYPE=Release
# If you want to build Testnet node
# the following command will install the executable files under /usr/local
sudo make install
# the following isn't required if you ran the "sudo make install" command above.
# If you prefer, the "make -j$(nproc)" command will install the
# programs under $HOME/peerplays/programs
# Update the -j flag depending on your current system specs:
# Recommended 4GB of RAM per 1 CPU core
# make -j2 for 8GB RAM
# make -j4 for 16GB RAM
# make -j8 for 32GB RAM
make -j$(nproc)

2.1. Starting the Peerplays Witness Node

If we have installed the blockchain following the above steps, the node can be started as follows:
Launching the Witness for the first time creates the directories which contain the configuration files.
Next, stop the Witness node before continuing (Ctrl + c).

3. Update the config.ini File

We need to set the endpoint and seed-node addresses so we can access the cli_wallet and download all the initial blocks from the chain. Within the config.ini file, locate the p2p-endpoint, rpc-endpoint, and seed-node settings and enter the following addresses.
nano $HOME/witness_node_data_dir/config.ini
p2p-endpoint =
rpc-endpoint =
seed-node =
seed-node =
seed-node =
seed-nodes = []
Save the changes and start the node back up.

4. Create a Peerplays Account

We'll need an account as the basis of creating a new Witness. The easiest way to do that is to use the Peerplays DEX & this doesn't need download of an application.

4.1. Download the Peerplays Core GUI Wallet to Make an Account

  1. 1.
    Install, open, and create an account. It's pretty self-explanatory.
  2. 2.
    Wait for your node to sync the blocks (about 7.3GB at the time of writing). We need to do this before we can use the CLI wallet.
  3. 3.
    From this point on, please note the results of the following commands as you'll need them later.

4.2. Use the cli_wallet to set a password and unlock the wallet

In a new command line window, we can access the cli_wallet program after all the blocks have been downloaded from the chain. Note that "your-password-here" is a password that you're creating for the cli_wallet and doesn't necessarily have to be the password you used in the GUI wallet earlier.
set_password your-password-here
unlock your-password-here
The CLI wallet will show unlocked >>> when successfully unlocked.
A list of CLI wallet commands is available here:

4.3. Generate OWNER private keys for the cli_wallet and import them

This will return an array with your owner key in the form of ["PPYxxx", "xxxx"]. Note that the "created-username" and "created-password" used here are the username and password from the GUI wallet!
get_private_key_from_password created-username owner created-password
The second value in the returned array is the private key of your owner key. Now we'll import that into the cli_wallet.
import_key "created-username" SECONDVALUEFROMLASTCOMMAND

4.4. Generate ACTIVE private keys for the cli_wallet and import them

Once again, this will return an array with your active key in the form of ["PPYxxx", "xxxx"]. Note that the "created-username" and "created-password" used here are the username and password from the GUI wallet!
get_private_key_from_password created-username active created-password
The second value in the returned array is the private key of your active key. Now we'll import that into the cli_wallet.
import_key "created-username" SECONDVALUEFROMLASTCOMMAND
The keys that begin with "PPY" are the public keys.

4.5. Upgrade to lifetime membership

You will need some PPY for this command to succeed. The account must have lifetime membership status to create a new Witness.
upgrade_account created-username true

4.6. Create yourself as a Witness

The URL in this command is your own URL which should point to a page which describes who you are and why you want to become a Peerplays witness. Note your block signing key after you enter this command.
This command will require some PPY as well.
create_witness created-username "https://your-url-to-witness-proposal" true
The above command will also return YOURBLOCKSIGNINGKEY

4.7. Gather your Witness account info

First we'll get the private key for your block_signing_key.
Then dump your keys to check and compare. One of the returned values from the following command should match your block_signing_key.
Last we'll get your witness ID.
get_witness created-username

5. Edit config.ini to include your Witness ID and your private key pair

Exit the cli_wallet with the quit command. Back in the first command line window, we'll stop the node (Ctrl + c) and edit the config.ini file once again.
nano $HOME/witness_node_data_dir/config.ini
witness-id = "your_witness_id"
private-key = ["block_signing_key", "private_key_for_your_block_signing_key"]

6. Start the node and vote for yourself

We need to wait for the node to sync the blocks to use the cli_wallet. After the sync, you can vote for yourself. In the second command line window:
unlock your-password-here
vote_for_witness created-username created-username true true
Now you can check your votes to verify it worked.
get_witness your_witness_account
Success! You built a Peerplays witness node from the latest source code and now it's up and running.

7. What's Next?

7.1. Auto-starting your node

Up until this point we have been running the node in the foreground which is fragile and inconvenient. So let's start the node as a service when the system boots up instead.

7.2. Creating a backup node

After that, it would be smart to create a backup server to enable you to make software updates, troubleshoot issues with the node, and otherwise take your node offline without causing service outages.

7.3. Fire up another node

You've got a Witness node. Now you'll need a BOS node. And since you're in the node making mood, how about a SON too?

7.4. Enable SSL to encrypt your node traffic

If you have a node that is accessible from the internet (for example, an API or Seed node) it would be wise to enable SSL connections to your node.

8. Glossary

Witness: An independent server operator which validates network transactions.
Witness Node: Nodes with a closed RPC port. They don't allow external connections. Instead these nodes focus on processing transactions into blocks.