Node Setup – Setting up BLS Keys and syncing DB

This tutorial provides instructions on setting up a validating node on the Harmony blockchain by generating BLS keys, configuring them, and setting up a standby node. It also includes information on syncing the node’s database using Rclone, a tool for synchronizing files and directories to and from various cloud storage services. The tutorial covers the following steps:

Creating new BLS keys and providing a passphrase to encrypt the BLS key file

Configuring the BLS keys by creating a folder called .hmy/blskeys, copying the BLS key files to this folder, and creating a corresponding .pass file for each BLS key with the passphrase inside it.

Setting up a standby node with the same BLS key

Syncing the node’s database using Rclone by installing Rclone, configuring it, and creating a rclone.conf file.

Creating new BLS keys

You will need to generate one or more BLS keys in order to run a validating node. When generating a BLS key, the CLI will ask you to provide a passphrase to encrypt the BLS key file.‌

./hmy keys generate-bls-keys --count 1 --shard 1 --passphrase


On the command above --count defines the number of BLS keys you want to generate and --shard the shard associated. On this example, we are generating 1 BLS key on shard 1.

Remember your passphrase. You will need it to decrypt the BLS key file in order to create a validator & start a node with that key.

Create a backup of your BLS key file or save the BLS private key (optional).

The BLS public key is the same as the name of the file, without the .key.

Configuring the BLS keys

You need to manually create a folder called .hmy/blskeys:

mkdir -p .hmy/blskeys


Copy all the previously created BLS key(s) to this new folder:

cp *.key .hmy/blskeys


Make sure all your BLS keys belong to the same shard when using multiple BLS keys. You can use the command below to check each one of them.

./hmy --node="" utility shard-for-bls [BLS PUBLIC KEY]


For each BLS key file, a corresponding <blskey>.pass file needs to be created inside folder.hmy/blskeyswith the passphrase inside it.

following this format :

echo '[replace_with_your_passphrase]' > .hmy/blskeys/[replace_with_BLS_without_.key].pass


you should finally have in your .hmy/blskeys folder :


ls .hmy/blskeys/


Setting up a standby node with the same BLS key

It is NOT recommended now to run multiple nodes using the same set of BLS keys. As we are moving towards full decentralization, external validators will become the shard leader and start to propose blocks. If one validator runs multiple nodes using the same set of valid keys, they may all become valid leaders when the key is rotated to this validator, in this case, the blockchain is experiencing a high risk of hard-fork as different valid leaders may propose different blocks. So, do not run redundant validator nodes anymore on the Harmony blockchain. This is also strictly forbidden on all PoS blockchains such as Ethereum 2, Cosmos.

It is recommended to set up standby nodes in case the main node is going to maintenance mode. Check out this bounty on how this feature is supported to run and switch backup nodes.


Syncing DB

Validator Nodes

This document introduces another centralized fast state syncing method using rclone. Please use it with caution. This guide is mainly used for a newly started node to catch up with the blockchain faster. Otherwise, the blockchain syncing may take weeks from genesis block.

Rclone db snapshot is sync’ed with blockchain frequently. However, there maybe a potential race condition when the rclone may fail due to our nodes were updating the db files at the same time. In this case, just re-run the rclone command to re-sync again.

Installing Rclone

For installing Rclone, please follow the instructions at

TL;DR, on a Linux system, you may run the following command.

curl | sudo bash


Make sure your rclone version is above v1.53.2 . you can check version by rclone version

There is a daily snapshot of the rclone DB happening at 1:42:30 AM UTC for 3h. It is not advisable to perform a backup during those time.

Configuring Rclone

To check the location of the rclone.conffile run:

rclone config file


The rclone.conf file is usually located at ~/.config/rclone/rclone.conf .

Now run the following command to create the rclone.conf file.

cat<<-EOF > ~/.config/rclone/rclone.conf
type = s3
provider = Storj
access_key_id = jwuyiin22hl6o5zxzlf76rc6csxa
secret_access_key = jyryzso3fv64zu4i2gmf33ed5hudb7qyatgpst22fnp57dfhviv4k
endpoint =


The above rclone config also work for the pangaea testnet network

Running Rclone

Below is the command to sync the shard you want. Replace <ShardID>with the shard number you want to sync. Shard 0 is around 300 Gb as of November 2021.


rclone -P -L --checksum sync<ShardID> harmony_db_<ShardID> --multi-thread-streams 4 --transfers=32



rclone -P -L --checksum sync<ShardID> harmony_db_<ShardID> --multi-thread-streams 4 --transfers=32


If you encounter the following error:


NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults


Add the option --config=/home/harmony/.config/rclone/rclone.conf to the command line.

Cheat Sheet

Since v4.3.12 shard 1/2/3 doesn’t need to download anymore shard 0 DB. Instead, the node will download automatically the blocks required for the node in shard 1/2/3 to work.

Each node will simply need to rclone its own DB.

Shard0 RPC Explorer node (non archival):


rclone -P -L --checksum sync harmony_db_0 --multi-thread-streams 4 --transfers=32



rclone -P -L --checksum sync harmony_db_0 --multi-thread-streams 4 --transfers=32


Shard0 Validator node:

SnapDB is a new type of DB that contain a snapshot of the state at a given block (ie as of 4th March 2022, this is block 22816573). It doesn’t have any block history history and hence not suitable for RPC node

rclone -P -L --checksum sync harmony_db_0 --multi-thread-streams 4 --transfers=32


Shard 1:


rclone -P -L --checksum sync harmony_db_1 --multi-thread-streams 4 --transfers=8



rclone -P -L --checksum sync harmony_db_1 --multi-thread-streams 4 --transfers=32


Shard 2:


rclone -P -L --checksum sync harmony_db_2 --multi-thread-streams 4 --transfers=8



rclone -P -L --checksum sync harmony_db_2 --multi-thread-streams 4 --transfers=32


Shard 3:


rclone -P -L --checksum sync harmony_db_3 --multi-thread-streams 4 --transfers=32



rclone -P -L --checksum sync harmony_db_3 --multi-thread-streams 4 --transfers=8


After the sync, you may use du -h harmony_db_* command to check the size of the downloaded snapshots.

-P will display a download progress & ETA.

Non-Validating/Explorer Nodes

As of 1st December 2022, the size for the shard 0 on mainnet is ~21TiB. Note that the bucket is currently not fully synced.

Please contact us at if you need to access our archival db.