[WITNESS server - part II] HIVE - The manual way

in #witnesslast year (edited)

In this second part of a series of 3 posts about setting up a Witness server we will see how to install the HIVE witness in the manual way.

If you missed: [WITNESS server - part I] - Setup & Tuning Ubuntu 18.04

HIVE - The manual way

Install the dependencies

Install the required packages

witness@witness:~$ sudo apt install build-essential automake cmake libssl-dev libtool libbz2-dev libsnappy-dev pkg-config python3-pip 

Install the Boost packages (also required)

witness@witness:~$ sudo apt install libboost-thread-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-program-options-dev libboost-signals-dev libboost-serialization-dev libboost-chrono-dev libboost-test-dev libboost-context-dev libboost-locale-dev libboost-coroutine-dev libboost-iostreams-dev

Optional packages

witness@witness:~$ sudo apt install doxygen perl libreadline-dev libncurses5-dev

Clone the Official repositorie

We're now ready to clone and build our HIVE witness!

Clone the official repository

witness@witness:~$ git clone https://github.com/openhive-network/hive.git
an interesting public gitlab repository for next releases is also available here :

Change the git branch (time of this post the good one is 0.23.0)

witness@witness:~$ cd hive/
witness@witness:~/hive$ git checkout 0.23.0

Updates all submodules recursively along their tracking branches

witness@witness:~/hive$ git submodule update --init --recursive

Build HIVE

Create a build and bin directory

witness@witness:~/hive$ mkdir ~/build ~/bin

Time to build the project with the options: MIRA, LOW_MEMORY_NODE, CLEAR_VOTES and SKIP_BY_TX_ID. For more information go here: https://github.com/openhive-network/hive/blob/0.23.0/doc/building.md

witness@witness:~/hive$ cd ~/build

We're now ready to make the Steemd program

witness@witness:~/build$ make -j$(nproc) steemd

copy the Steemd program in the directory bin

witness@witness:~/build$ cp programs/steemd/steemd ../bin/

check the version

witness@witness:~/build$ ~/bin/steemd --version

the response will be something like this

hive_blockchain_version: 0.23.0
hive_git_revision:       cdd021e90efb44a2f4ec7dee37b978070653d893
fc_git_revision:          cdd021e90efb44a2f4ec7dee37b978070653d893


                @     @@@@@@    ,@@@@@%               
               @@@@    (@@@@@*    @@@@@@              
             %@@@@@@     @@@@@@    %@@@@@,            
            @@@@@@@@@@    @@@@@@     @@@@@@           
          ,@@@@@@@@@@@@     @@@@@@    @@@@@@          
         @@@@@@@@@@@@@@@&    @@@@@@     @@@@@@        
        @@@@@@@@@@@@@@@@@@    .@@@@@%    @@@@@@       
      @@@@@@@@@@@@@@@@@@@@@(              .@@@@@%     
       @@@@@@@@@@@@@@@@@@@@               @@@@@@      
        *@@@@@@@@@@@@@@@@     @@@@@@    @@@@@@.       
          @@@@@@@@@@@@@@    &@@@@@.    @@@@@@         
           #@@@@@@@@@@     @@@@@@    #@@@@@/          
             @@@@@@@@    /@@@@@/    @@@@@@            
              @@@@@(    @@@@@@    .@@@@@&             
                @@     @@@@@&    @@@@@@               


initminer public key: STM8GC13uCZbP44HzMLV6zPZGwVQ8Nt4Kji8PapsPiNq1BK153XTX
chain id: 0000000000000000000000000000000000000000000000000000000000000000
blockchain version: 0.23.0

and now for the Wallet

witness@witness:~/build$ make -j$(nproc) cli_wallet

copy cli_wallet in the directory bin

witness@witness:~/build$ cp programs/cli_wallet/cli_wallet ../bin


To proceed we need to launch steemd a first time then close it (CTRL+C), the time to create the .steemd directory

witness@witness:~/build$ ~/bin/steemd

We have to configure MIRA according to our hardware resources. Edit the database.cfg file

witness@witness:~/build$ cd ~/.steemd
witness@witness:~/.steemd$ vim ~/.steemd/database.cfg

Update to have these values (in case you have a configuration similar to mine else take a look here https://github.com/openhive-network/hive/blob/0.23.0/doc/mira-tuning.md)

  "global": {
    "shared_cache": {
      "capacity": "10737418240"
    "write_buffer_manager": {
      "write_buffer_size": "2147483648"
    "object_count": 125000,
    "statistics": false
  "base": {
    "optimize_level_style_compaction": true,
    "increase_parallelism": true,
    "block_based_table_options": {
      "block_size": 8192,
      "cache_index_and_filter_blocks": true,
      "bloom_filter_policy": {
        "bits_per_key": 10,
        "use_block_based_builder": false

Next step is to modify the config.ini to select the plugins we want to use and the remote peer to sync.

witness@witness:~/.steemd$ vim ~/.steemd/config.ini

Define the p2p-endpoint

# Endpoint for P2P node to listen on
p2p-endpoint =

Define the websocket

# Local websocket endpoint for webserver requests.
webserver-ws-endpoint =

Define the remote peer to sync (ping each of them to sort them by the lowest latency)

# The IP address and port of a remote peer to sync with.
p2p-seed-node = seed.openhive.network:2001         # gtg
p2p-seed-node = anyx.io:2001                       # anyx
p2p-seed-node = steemseed-fin.privex.io:2001       # privex (FI)
p2p-seed-node = hive-seed.arcange.eu:2001          # arcange
p2p-seed-node = seed.liondani.com:2016
p2p-seed-node = hived.splinterlands.com:2001
p2p-seed-node = seed.hivekings.com:2001
p2p-seed-node = node.mahdiyari.info:2001
p2p-seed-node = seed.roelandp.nl:2001
p2p-seed-node = hiveseed-se.privex.io:2001
p2p-seed-node = seed.buildteam.io:2001
p2p-seed-node = hive-seed.lukestokes.info:2001
p2p-seed-node = seed.chitty.me:2001

Define the plugins

# Plugin(s) to enable, may be specified multiple times
# plugin = witness account_by_key account_by_key_api condenser_api 

# (added) Basic
plugin = witness rc_api

# (added) Condenser (https://developers.steem.io/tutorials-recipes/plugin-and-api-list)
plugin = condenser_api

# (added) Account history (condenser needed)
# plugin = account_history_rocksdb account_history_api

# (added) Reputation  (condenser needed)
# plugin = reputation reputation_api

# (added) Get accounts/witness (condenser needed)
plugin = account_by_key account_by_key_api

# (added) Network Broadcast
plugin = network_broadcast_api

Replay the blockchain

Now we have the good peer to sync we can launch steemd one more time then close it (CTRL+C), the time to create the missing data in the directory (as blockchain directory)

witness@witness:~/.steemd$ ~/bin/steemd

go in the .steemd/blockchain directory, delete the block_log file, then download the snapshot of the blockchain with the command:

witness@witness:~/.steemd$ cd ~/.steemd/blockchain
witness@witness:~/.steemd$ rm block_log
witness@witness:~/.steemd/blockchain$ wget https://gtg.steem.house/get/blockchain/block_log -O block_log

backup link: in case the first one not working you can use this one: http://files.privex.io/hive/block_log

when done you can launch the replay through screen

witness@witness:~/.steemd/blockchain$ screen -S steemd
witness@witness:~/.steemd/blockchain$ ~/bin/steemd --replay-blockchain

screen command:
- screen -S name_your_session -> to name your session
- screen -ls -> to list all screen session
- screen -r name_your_session -> to reattach to a specific session

We are now ready for the last part and the installation of the wallet and witness announcement

[WITNESS server - part III] Wallet and Price Feed

Mintrawa app logo

If you liked Upvote, Follow, Reblog or Cross post are welcome - @mintrawa