HOWTO Setup a Witness Node

Step by step guide on how to setup a Witness Node. Please see my references at the end of this article. This is not just a server it is a Witness Node server.

You can manually install Steem but @someguy123 prepared STEEM-in-a-Box using Docker and my screen captured installation guide to keep it simple stupid (KISS).


  • October 26, 2018. Update to 0.20.6
  • September 29, 2018. Update to 0.20.5
  • September 28, 2018. Update to 0.20.4
  • September 25, 2018. Update to 0.20.3
  • September 24, 2018. Upgrade to HF 0.20.2
  • September 17, 2018. Halted the steem blockchain, developers are checking the issue.
  • September 15, 2018. Upgraded to HF 0.20, see detailed upgrade steps last page.
  • August 29, 2018. Step-by-step guide on how to install Witness node to AppBase version 0.19.12. I upgraded my server memory to 96GB RAM.
  • March 2, 2018. Updated to support 64GB RAM server.
  • January 10, 2018. Updated.
  • The OLD procedure is here for troubleshooting tips only.

What Server Specification is recommended? I’ve tested it using a minimum requirement listed below. You can buy or rent your server, it’s up to you to decide.

  • 4 CPU (Minimum CPU)
  • 64 GB RAM (recommend minimum).
  • 500 GB SSD (200GB minimum).

I’m using Ubuntu 16.04 LTS for my operating system. I failed to install Steem using the latest version of Ubuntu 17.x, so this procedure is using Ubuntu 16.04 LTS.

When I setup a Server or a workstation. I always set the date and time correct, so I can get a good event logs later on for trouble shooting.

I prefer using screen utility so I can open multiple session. If not installed, run this command.

$ sudo apt-get install screen

Install Linux Process Monitoring, to monitor CPU and Memory current usage.
$ apt-get install htop

Set your timezone, for me it’s EST (optional)
$ sudo timedatectl set-timezone America/New_York

Step 01. Install all dependencies.

sudo apt update

sudo apt install git curl wget

Step 02. Download Steem in the box courtesy by @someguy123 using git clone.

git clone

cd steem-docker

Step 03. Let’s install docker.

./ install_docker

THIS IS IMPORTANT. After the install_docker is finished. Logout, re-login, then change directory to steem-docker.

You will see something like this captured screen.

Step 04. Pre-compile Steem.

./ install

Then build and start, this will take a while to finish the installation. This is the time to take a break.


Step 05. Download a copy of blocks. This will take a some of hours depending on your server specifications and internet speed.

./ dlblocks

Alternative download from @gtg server.

cd data/witness_node_data_dir/blockchain
Download the file (currently 152GB as of September 1, 2018). This will take hours to download, time to take a break or watch a movie.

or I can use secure copy (scp) block_log from one of my backup server, using the following command.

scp /path/block_log DestinationServerLogin@DestinationServerIP:/path/

Enter the password of DestinationServerLogin to authenticate and begin copying.

Step 06. Run the wallet.

./ remote_wallet

Step 07. Create a key pair for your witness.


After running suggest_brain_key, copy your wif_priv_key and pub_key you will use this later on.

Press CTRL + D to exit the wallet.

Step 08. Adjust your Witness server memory. MUST re-adjust if server upgrade it’s memory. DO NOT GIVE MORE SHARED MEMORY THAN YOU HAVE ACTUAL RAM AVAILABLE. e.g. In our server specification example, we are using 64GB RAM only use 63G for your shared memory.

sudo ./ shm_size 63G

Step 09. Edit the config.ini file.

nano data/witness_node_data_dir/config.ini

Some data in config.ini file.

# p2p-endpoint =
p2p-seed-node =

shared-file-size = 63G (I upgraded my server, now using 96GB RAM)
shared-file-dir = /shm
enable-plugin = witness condenser_api network_broadcast_api rc_api
witness = “yehey”  <– change this using your Steem account ID.
# WIF PRIVATE KEY to be used by one or more witnesses or miners. This the “wif_priv_key” result using suggest_brain_key.
private-key = 5KfKJ………….

Put in your witness name, and your WIF private key from earlier. Be aware the name needs quotes, while the private key doesn’t. You use the private key (wif_priv_key) you generated earlier using suggest_key_brain and put into notepad.

Step 10. To disable port forwarding for seeds:

nano .env

On a blank line, put the following:

Step 11. 

./ build 

This will take 30+ minutes to build, time to take a break.

./ replay

Check the logs, every 10 minutes. Use this command to see the current logs.

./ logs

or if you want to be nerdy, use this command to see the logs in real-time

docker logs –tail=30 –follow witness

You will see something like this results.

You should see the logs below when it’s fully sync to the blockchain.

Your Witness Node server is ready. You’re not done, continue reading this article.

Running “top” (or htop if you installed it) will you an idea of your memory usage, see sample captured screen image below. This example shows 5.6% CPU and 89% MEM. The 89% utilization of Memory is too high if you ask me, but this is enough to run your Witness Node server. In humble opinion, you need to bring up your RAM to at least 64GB (as of March 2, 2018, updated from January 10, 2018).

I also check docker session, ps -aux | grep docker

That’s a normal operations of my Witness Node server.

Step 12.  We are NOT done. Go to website, login to your account. Click on Wallet, Permission, click on Show Private Key. Your Active Private Key will appear as 5andSomeLongCharacter. Take note, your Active Private Key start in number 5 e.g. 5andSomeLongCharacter.

./ wallet

Set a password, unlock the wallet with the same password, then import your ACTIVE private key from website.

For example.

set_password “MyAlph4Num4r1cP4ssw0rd”
unlock “MyAlph4Num4r1cP4ssw0rd”
import_key 5andSomeLongCharacter // this is your ACTIVE private key

press CTRL + d to exit.

Step 13. Finally, update your witness information on the network. Please note, you have to enter the command within 15-30 seconds before it timed out.

update_witness “yehey” “” “Public_Key_from_Suggest_Brain_Key” {“account_creation_fee”:”0.100 STEEM”,”maximum_block_size”:65536,”sbd_interest_rate”:0} true

If no error, congratulation to you as a Witness! Welcome to the STEEM Witness Club. If you received an “invalid state” error, your session timed out. Try it again, this time make it quick. Tips. I’ve used a notepad to prepare my update and paste it.

Now, vote for your self and yehey for Witness, go to and vote for yehey.

As Witness, you are expected to send update for Price Feed. Thanks to @someguy123 and @yabapmatt they provided scripts ready to go.

Step 14. Installation of SteemFeed JS by @someguy123 and/or PriceFeed by @yabapmatt
First, download the git repository, then edit config.json as needed. The interval is in minutes.

Using steemfeed-js, in steem-docker folder

git clone
cd steemfeed-js
cp config.example.json config.json
nano config.json

Sample config.json file. The Interval is 60 minutes, to send Price Feed update.

“node”: “wss://”,  // Added Jan 8, 2018 to point to new server.
“name”: “yehey”,
“interval”: 60

Optional Node Servers: At this time, you only need one in config.json file. I don’t know yet if you can put multiple servers.


I’ve learned from other Witnesses, complaining about Steemfeed-js frequently. Well, it’s not the end of the world. Here’s your alternative, courtesy by @yabapmatt. Just follow the step-by-step procedure to set it up.

Step 15. Starting Steemfeed-js

cd steemfeed-js
docker build -t steemfeed-js .
docker run -itd –rm –name feed steemfeed-js

PLEASE NOTE: single dash itd double dash rm double dash name, the website theme is messing it up.

# Check the status with docker logs
docker logs feed

Got an error the first time running the docker logs feed, as shown below. Attempting to login account.

Waited to make sure the –replay-blockchain is fully synced, re-run the following command again.

docker build -t steemfeed-js .
docker run -itd –rm –name feed steemfeed-js
# Check the status with docker logs
docker logs feed

Checking your Price Feed update using @drakos website. Or go to to check your price feed update. You will see mine updating every hour.

If you get an error running “docker logs feed”, exit SSH and re-login again and it will correct itself.

Re-run ps aux | grep docker to check docker session. You will see the 3rd docker session pid “6297” as shown below. It will be a different number on your server.

That’s all for now.

To find out when did you processed a block, visit change @yehey using your account.

What’s Next? You need to advertise to your family and friends that you are now a Witness and ask them to vote for you. Give them plenty of reason why their votes matter and how you give back to the community.

Step 16. What to review to make sure your Witness server is configured correctly?

  1. In Step 07 you will run suggest_brain_key to produce keys for your witness server, a private and public.
  2. You will use the private key (from suggest_brain_key) for your config.ini file in Step 09.
  3. You will import your ACTIVE Key in Step 12.
  4. You will use the public key (from suggest_brain_key) to broadcast your intent as a Witness in Step 13.
  5. To verify, go to (replace @yehey with your witness name), scroll down ’till you see your Authorities Signing Keys. You should see your public key here. If not, go back and review the step by step procedures.
  6. When it’s done, go to website and find your Witness Name. See captured image below.

The blue color indicates the Witness server is ready to produce block. The crossed witness name in red, means a witness server under maintenance (offline) or a new witness waiting to produce it’s first block.

FYI. Ranking is very important, this is how you produce blocks, more blocks produced more Steem goes to your witness account. This is very important to advertise your witness intent and ask them to vote for you and me (@yehey) as their witness. If your rank is LOW, it will take days for you to produce 1 block.

Question is can you afford to pay for Witness node per month producing 1 block in 24-72 hours? If YES, then continue to be a Witness make a better world. If No, you better spend your $$$ to buy Steem Power (SP) and create good content for a better reward.

How to check if you produce a block? Visit (replace @yehey with your witness name) to check the producer_reward, see captured screen below. This automatically added to your witness account.


The following procedures if you will upgrade your Witness Node server memory.

Upgrading my Witness Node server memory from 64GB to 96GB.

New server running at 96GB RAM.
./ stop
sudo ./ shm_size 90G

Edit config.ini in ~/steem-docker/data/witness_node_data_dir
shared-file-size = 90G

./ replay

After sync.

# Check the status with docker logs
docker logs feed

Check your server memory, record utilization.

Use “docker logs –tail=30 –follow witness” (two dash line) to monitor logs in real-time.

Some useful commands and websites to remember.

  • docker logs witness | grep yehey


For maintenance:

Disable the signing key first to avoid missing blocks. As recommended by @drakos check the timing, if u’re low in the rank and now scheduled soon, u can do your maintenance and not lose your turn.

update_witness “yehey” “” “STM1111111111111111111111111111111114T1Anm” {“account_creation_fee”:”0.100 STEEM”,”maximum_block_size”:65536,”sbd_interest_rate”:0} true

Press CTRL + d, to exit

./ stop

update_witness “yehey” “” “Public_Key_from_Suggest_Brain_Key” {“account_creation_fee”:”0.100 STEEM”,”maximum_block_size”:65536,”sbd_interest_rate”:0} true

Press CTRL + d, to exit

./ start – to begin running steemd replay again.

If “docker feed logs” not working. Here’s how to troubleshoot.

$ docker ps -a

76f821043793 steemfeed-js “npm start” About a minute ago Up About a minute feed
12506a870ff7 steem “steemd –replay” 2 days ago Up 2 days 2001/tcp, 5000/tcp, 8090/tcp witness

You should see two cointainer ID, for feed and witness. If the feed is not available running. Do the following.

  1. docker rm -f feed
  2. cd steemfeed-js
  3. docker run -itd –rm –name feed steemfeed-js // to re-run steemfeed-js
  4. docker logs feed // to run price feed.

Note: has retired since Jan 6, 2018. Edit app.js file, change it using or update the config.json file with the following entries.

“node”: “wss://”,  // Added Jan 8, 2018 to point to new server.
“name”: “yehey”,
“interval”: 60

Then, re-run the previous 4 steps.


Install Conductor a Steem Witness Toolkit. In my personal opinion, this is the most easiest to update your Witness information.

$ steempy addkey

when prompted, paste your active key with shift-insert

Then use “steempy listkeys” to make sure it’s added, also “steempy listsaccounts”

$ steempy listkeys

$ steempy set nodes,,

$ conductor init
What is your witness account name?: yehey
Imported a witness yehey from its existing settings.

$ conductor feed
Fri Oct 20 16:52:28 2017
Old Price: 1.019
New Price: 1.002
Current STEEM price: 1.002 USD
Current SBD price: 0.942 USD
Quote: 1.000 STEEM
Spread between prices: 1.697%

steempy wallet is in .local/share/steem/steem.sqlite

Some references I’ve used to build my Witness node and Seed node.

Useful Tools

  • just another STEEM blockchain website (condenser) by @yehey (at your service)
  • by @roadscape
  • by @jesta (currently down, DB migration in progress)
  • by @drakos
  • by penguinpablo
  • I will continue to update page. Let me know if you have something to share, or simply use the form below to post.

August 30, 2018. Troubleshooting error upgrading to 0.19.12. The error shows up after 99% replaying.

3186249ms p2p_plugin.cpp:650 operator() ] P2P adding seed node
3186250ms p2p_plugin.cpp:650 operator() ] P2P adding seed node
90003 already_connected_to_requested_peer: already connected to requested peer
already connected to requested endpoint
node.cpp:4775 connect_to_endpoint
stack trace:
0x0000000001a8358c steemd : fc::segfault_handler(int, siginfo_t*, void*)+0x1c
0x00007fe838a72390 /lib/x86_64-linux-gnu/ : +0x11390
0x0000000001a6ee13 steemd : fc::exception_factory::rethrow(fc::exception const&) const+0x33
0x0000000001a6eeb4 steemd() [0x1a6eeb4]
0x0000000001a807b9 steemd : fc::promise_base::_wait_until(fc::time_point const&)+0x49
0x0000000001a80fb7 steemd : fc::promise_base::_wait(fc::microseconds const&)+0x1a7
0x000000000121021c steemd : graphene::net::peer_connection::destroy(char const*)+0x6bc
0x000000000121813e steemd : graphene::net::peer_connection::~peer_connection()+0x1e
0x00000000012188e1 steemd : std::_Sp_counted_ptr<graphene::net::peer_connection*, (__gnu_cxx::_Lock_policy)2>::_M_dispose()+0x21
0x0000000001097876 steemd : graphene::net::detail::node_impl::delayed_peer_deletion_task()+0x406
0x0000000001097d64 steemd() [0x1097d64]
0x0000000001a81704 steemd : fc::task_base::run_impl()+0x44
0x0000000001a7f2cb steemd : fc::thread_d::process_tasks()+0x50b
0x0000000001a7f9e5 steemd : fc::thread_d::start_process_tasks(long)+0x25
0x0000000001b9df61 steemd : make_fcontext+0x21
executing command:
addr2line -p -a -f -C -i -e /usr/bin/steemd 0000000001a82f16 0000000001a8358c 00007fe838a72390 0000000001a6ee13 0000000001a6eeb4 0000000001a807b9 0000000001a80fb7 000000000121021c 000000000121813e 00000000012188e1 0000000001097876 0000000001097d64 0000000001a81704 0000000001a7f2cb 0000000001a7f9e5 0000000001b9df61

Resolution: Still troubleshooting the error. ? Tried the following.

  1. Deleted block_logs.
  2. Download block_logs
  3. cd witness_node_data_dir/blockchain
  4. wget
  5. after the download, run ./ replay to try again.
  6. Check config.ini seed-nodes entries, making sure they are online. Use the website to check the status.
  7. Above action didn’t work. ./ status shows Container exist? Yes and Container running: No.
  8. Run ./ replay… waiting for result. Still now working.
  9. As recommended by other witnesses, change the seed-node to p2p-seed-node (p2p-seed-node = Fixed the issue, now producing block.
  10. Issue closed.

When I tried to run update_witness command, got the following error.

Assert Exception:_network_broadcast_api: network_broadcast_api_plugin not enabled.
{“error”:”Assert Exception:_network_broadcast_api: network_broadcast_api_plugin not enabled.”,”data”:{“id”:4,”error”:{“code”:-32003,”message”:”Assert Exception:_network_broadcast_api: network_broadcast_api_plugin not enabled.”,”data”:{“code”:10,”name”:”assert_exception”,”message”:”Assert Exception”,”stack”:[{“context”:{“level”:”error”,”file”:”condenser_api.cpp”,”line”:1722,”method”:”broadcast_transaction_synchronous”,”hostname”:””,”timestamp”:”2018-09-01T12:20:55″},”format”:”_network_broadcast_api: network_broadcast_api_plugin not enabled.”,”data”:{}}]}}}}
state.cpp:38 handle_reply
unlocked >>>

Resolution. I changed my steem account password, so I need to re-introduce the new information to the blockchain. I can do this using update_witness command via wallet but for this I have used a conductor tool. It is good to know other tools to managing your witness server.

In my conductor server (yes, I have a dedicated server). I run the following commands.

  1. steempy addkey // to add the new active key password
  2. steemy listaccounts // to check if the new active key information is added.
  3. conductor status // to check the current status
  4. conductor enable your_active_key // to enable witness server

Issue is resolved.

September 15, 2018 Upgrade to HF 0.20

Following @someguy123 ugprade step by step procedure.
Before I do the upgrade, I disabled my witness server so I won’t miss any block.
~/steem-docker $ git fetch
~/steem-docker $ git checkout master
~/steem-docker $ git pull
Backup your existing config.ini file.
mv data/witness_node_data_dir/config.ini data/witness_node_data_dir/config.ini.bak-sep2018
Run install
$ ./ install
I also run this command to support my 96GB RAM
sudo ./ shm_size 90G
Then, edit data/witness_node_data_dir/config.ini file to add your witness account and key.
nano data/witness_node_data_dir/config.ini
Example config.ini
# p2p-endpoint =
shared-file-size = 90G
witness = “yehey”
private-key = your_witness_private_key
$ ./ stop
$ ./ start // getting error container not running.
$ ./ status
Container exists?: YES
Container running?: NO (!)
Container isn’t running. Start it with ./ start
Follow the steps below to fix it.
$ ./ build // this will take a few minutes
then run
$ ./ replay
Check the status
./ status
Container exists?: YES
Container running?: YES
Resolved – fixed the container issue.
Check logs
docker logs –tail=30 –follow witness
When it’s ready to produce block.
Enable the Witness server by running conductor command.
$ conductor enable

September 25, 2018 Update to HF 0.20.3

from old setup
git checkout master
git pull
./ install

updating to 0.20.3
git checkout master
git pull
./ install

docker images // checking the docker releases/versions.
steem latest 149185b1373f 2 hours ago 1.34GB
someguy123/steem latest 149185b1373f 2 hours ago 1.34GB

you can also do it manually:
docker stop witness
docker rm witness
docker pull someguy123/steem
docker tag someguy123/steem steem
./ replay

if modified the file, do this to reset back to original:*
git checkout master
git reset –hard
git pull

git checkout master
git pull
./ build master
docker tag steem:master steem:latest

nano data/witness_node_data_dir/config.ini
# Plugin(s) to enable, may be specified multiple times
enable-plugin = witness condenser_api network_broadcast_api rc_api

If everything is ok, you should have this version.
docker logs seed | grep “blockchain version” or
docker logs witness | grep “blockchain version”

then run, to go live.
conductor enable pub_key

September 28 update.

This is to apply bug fix rlease regarding the rc plugin.

Updating the backup witness server.
./ install
./ replay // container not working.

try this one.
./ build v0.20.4 && docker tag steem:v0.20.4 steem:latest
./ replay
that works ok.
Check status
./ status
Container exists?: YES
Container running?: YES

Check current version.
~/steem-docker$ docker logs seed | grep “blockchain version”
blockchain version: 0.20.4

Disabled primary witness server.
conductor disable

Enable backup witness server
conductor enable pub_key

Next is to update the other witness server to 0.20.4 and make as backup.

September 29 update for maintenance.

./ build v0.20.5 && docker tag steem:v0.20.5 steem:latest
./ replay
that works ok.
Check status
./ status
Container exists?: YES
Container running?: YES

docker logs –tail=30 –follow witness
or docker logs –tail=30 –follow seed

Check current version.
~/steem-docker$ docker logs witness | grep “blockchain version”
or docker logs seed | grep “blockchain version”
blockchain version: 0.20.5

Disabled primary witness server.
conductor disable

Enable backup witness server
conductor enable pub_key

October 26, 2018. Update to 0.20.6

Run the following update commands in your backup server.
./ build v0.20.6 && docker tag steem:v0.20.6 steem:latest
./ replay

Check status
./ status
Container exists?: YES
Container running?: YES

docker logs –tail=30 –follow witness
docker logs –tail=30 –follow seed

Check current version.
~/steem-docker$ docker logs witness | grep “blockchain version”
docker logs seed | grep “blockchain version”
blockchain version: 0.20.6

Disabled primary witness server.
conductor disable

Enable backup witness server
conductor enable pub_key



Support @QUE.COM

Founder, QUE.COM Game Studios. | Founder, a Shout for Joy! | MAJ.COM Management of Assets and Joint Venture | More at KING.NET Ideas to Life | Network of Innovation | Send your Tip to my Bitcoin/Ethereum or other crypto currency.

Leave a Reply