How to Run a Polygon Node (Step-by-Step Guide)

How to Run a Polygon Node (Step-by-Step Guide)
Published on Nov 4, 2024 Updated on Apr 17, 2026

Polygon was created to offer a faster solution to Ethereum's scaling problems. It is a layer 2 scaling solution for Ethereum. It processes transactions faster and at a lower cost while relying on Ethereum's security. Running your own node gives you direct access to the network without relying on third-party RPC providers, improving reliability and giving you full control over your data.

This guide walks you through setting up a Polygon full node using binaries. You will install and configure both Heimdall and Bor, download snapshots to speed up syncing, and end up with a fully operational node connected to the Amoy testnet. The guide also includes the equivalent mainnet commands wherever the steps differ.

Set up your Polygon server in minutes

Run high-performance Polygon workloads on customizable bare metal with 24/7 support and crypto payments.

#Prerequisites

To run a Polygon node, ensure your system meets at least the minimum requirements.

Mainnet minimum system requirements:

  • RAM: 32 GB

  • CPU: 8-core

  • Storage: 4 TB SSD

  • Bandwidth: 1 Gbit/s

Mainnet recommended system requirements:

  • RAM: 64 GB

  • CPU: 16-core

  • Storage: 6 TB SSD

  • Bandwidth: 1 Gbit/s

Amoy testnet minimum system requirements:

  • RAM: 8 GB

  • CPU: 8-core

  • Storage: 1 TB SSD

  • Bandwidth: 1 Gbit/s

Amoy testnet recommended system requirements:

  • RAM: 16 GB

  • CPU: 16-core

  • Storage: 2 TB SSD

  • Bandwidth: 1 Gbit/s

This demonstration uses a dedicated server provided by Cherry Servers.

Set up your Web3 server in minutes

Optimize cost and performance with custom or pre-built dedicated bare metal servers for blockchain workloads. High uptime, instant 24/7 support, pay in crypto.

#Understanding Polygon Nodes

Before moving to the setup process, it's important to understand what Polygon nodes are and their role in the network. This section provides an overview of the different types of nodes in the Polygon architecture, their functions, and how they contribute to the network's overall security and performance.

#What is a Polygon Node

A Polygon node is a computer that participates in the Polygon network. It processes transactions, validates blocks, and helps maintain the network's security.

The Polygon network is divided into three layers:

  • The Ethereum layer: This consists of a set of smart contracts deployed on the Ethereum mainnet.

  • The Heimdall layer: This is a proof-of-stake (PoS) layer made up of Heimdall nodes that run in parallel with Ethereum.

  • The Bor layer: Bor is responsible for block production.

#Types of Polygon Nodes

There are two main types of Polygon nodes:

  • Full nodes: These store a copy of the blockchain and help validate transactions. They can be pruned (storing only recent data) or archived (storing all historical data).

    Criteria for selecting a full node:

    • Goals: If your goal is to support the network by validating transactions without participating in block production.

    • Resources: Pruned nodes are more suited for those with limited storage, while archive nodes are best if you need the complete blockchain history and can handle more storage demands.

    • Risk/Rewards: Full nodes do not directly earn rewards like validator nodes. The risk is minimal as they do not engage in consensus, but still play a critical role in network security.

  • Validator nodes: These participate in consensus by proposing, validating, and producing new blocks. Running a validator node requires staking MATIC tokens and meeting specific requirements.

    Criteria for selecting a validator node:

    • Goals: Choose this if your goal is to actively participate in securing the network and earn rewards for your contribution.

    • Resources: Validator nodes require higher computational power, reliable uptime, and a financial stake (MATIC tokens). This option is best suited for those who can meet the technical and staking requirements.

    • Risks/Rewards: Validator nodes can earn staking rewards, but they come with more responsibility. Downtime or failure to meet requirements could result in penalties, making it a higher-risk, higher-reward option.

#How to Run a Polygon Node

This section outlines the steps for setting up a Polygon node. It covers a testnet (Amoy) demonstration and provides instructions and commands for running a node on the mainnet. There are various ways to run a Polygon node, including Docker, binaries, Ansible, GCP, and packages. However, this guide will focus on using binaries.

#Step 1: Connect to the server

Start by accessing the server where your Polygon node will run.

Command Line
ssh user@server_ipaddress

Replace user with your actual server username and server_ipaddress with the IP address of your server.

#Step 2: Update system software and install build-essentials

Before setting up the node, ensure your server is up to date and has the necessary tools for building software.

Update the system’s package list and upgrade all existing software:

Command Line
sudo apt-get update && sudo apt-get upgrade -y
OutputGet:1 http://repo.cherryservers.com/ubuntu noble InRelease [8,121 B]
Get:2 http://repo.cherryservers.com/ubuntu noble-updates InRelease [8,145 B]
...
Fetched 44.4 MB in 2s (20.3 MB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  grub-pc-bin
Use 'sudo apt autoremove' to remove it.
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
The following packages will be upgraded:
  base-files bsdextrautils bsdutils cloud-init curl eject fdisk fwupd ...
  ... [85 more packages] ...
  uuid-runtime vim vim-common vim-runtime vim-tiny wireless-regdb wpasupplicant xxd
95 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 635 MB of archives.
After this operation, 22.8 MB of additional disk space will be used.
Get:1 http://se.archive.ubuntu.com/ubuntu noble-updates/main ...
...

Install essential tools needed for compiling software:

Command Line
sudo apt-get install build-essential -y
OutputReading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following package was automatically installed and is no longer required:
  grub-pc-bin
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu bzip2 cpp cpp-13 ...
  ... [35+ more dependencies] ...
  libstdc++-13-dev libtsan2 libubsan1 lto-disabled-list make
Suggested packages:
  binutils-doc gprofng-gui bzip2-doc cpp-doc gcc-13-locales ...
The following NEW packages will be installed:
  binutils binutils-common ... build-essential ... gcc g++ ... make
0 upgraded, 47 newly installed, 0 to remove and 3 not upgraded.
Need to get 66.9 MB of archives.
After this operation, 228 MB of additional disk space will be used.
Get:1 http://se.archive.ubuntu.com/ubuntu noble-updates/main ...
...

#Step 3: Open the required ports and enable the firewall

To allow your Polygon node to communicate with the network, open the following ports:

Command Line
sudo ufw allow 26656
sudo ufw allow 30303
sudo ufw allow 22/tcp
  • Port 26656 is used by Heimdall for peer-to-peer communication.

  • Port 30303 is used by Bor for peer-to-peer communication.

  • Port 22/tcp is for SSH access to your server.

Then enable the firewall:

Command Line
sudo ufw enable

When prompted, type y and press Enter. You should see output similar to this:

OutputFirewall is active and enabled on system startup

#Step 4: Install Heimdall

Now install Heimdall using the following command:

Command Line
sudo curl -L https://raw.githubusercontent.com/0xPolygon/install/heimdall-v2/heimdall-v2.sh | bash -s -- <heimdall_version> <network_type> <node_type>

Replace <heimdall_version>, <network_type>, and <node_type> with the appropriate values for your setup:

  • <heimdall_version>: Specify the version of Heimdall you wish to install.

  • <network_type>: mainnet or amoy.

  • <node_type>: sentry

This command will have heimdalld binary installed.

OutputDownloading Heimdall v0.6.0 packages...

Downloading binary package...
100% (46.0 MB)

Downloading profile package...
100% (11.8 KB)

Installing Heimdall...

Unpacking heimdall (0.6.0) ...
Setting up heimdall (0.6.0) ...

Unpacking heimdall-profile (0.6.0) ...
Setting up heimdall-profile (0.6.0) ...

Checking heimdalld version ...
0.6.0

heimdall has been installed successfully!

Confirm the installation:

Command Line
heimdalld version --long
Outputname: heimdall
server_name: heimdalld
client_name: heimdalld
version: 0.6.0
commit: 093f740d657ca191cd30605b236a38131f6d6029
go: go version go1.25.6 linux/amd64

#Step 5: Configure Heimdall

Next, download the genesis.json file and place it in /var/lib/heimdall/config/. Run the following commands based on your target network.

For Amoy:

Command Line
cd /var/lib/heimdall/config

sudo curl -fsSL https://storage.googleapis.com/amoy-heimdallv2-genesis/migrated_dump-genesis.json -o genesis.json

For mainnet:

Command Line
cd /var/lib/heimdall/config

sudo curl -fsSL https://storage.googleapis.com/mainnet-heimdallv2-genesis/migrated_dump-genesis.json -o genesis.json

Then change the ownership of the Heimdall configuration directory to the Heimdall user:

Command Line
sudo chown heimdall /var/lib/heimdall

This ensures the Heimdall user has the proper permissions to access and modify the configuration files.

Next, for mainnet, configure the seeds and persistent peers in /var/lib/heimdall/config/config.toml:

Command Line
sudo sed -i 's|^seeds =.*|seeds = "a0ef6f328949adc077c59ab1f6b03711ae8d32d2@34.185.209.56:26656,f1e632758dfaf616a833900c0b8845bb2547b7c2@34.185.162.14:26656,e49bb5d9cb22943fb2b9f49a4c5d0f773917efaf@34.179.171.228:26656,babb8151d6fae45fcbb9229bd9faba173f3feaf3@35.246.166.189:26656,9c92984a5aad02c43955da94bb0a979a8dadbcfe@34.142.28.190:26656,3643aeae6a5965053709303e97257f62012fdd9c@34.39.56.114:26656,830d44b0d11ab25c9a03135859049d55daf73a03@34.147.169.102:26656,b0e795afc432ea3557b377d7763f6fb6dd102e60@34.105.180.11:26656"|g' /var/lib/heimdall/config/config.toml
Command Line
sudo sed -i 's|^persistent_peers =.*|persistent_peers = "a0ef6f328949adc077c59ab1f6b03711ae8d32d2@34.185.209.56:26656,f1e632758dfaf616a833900c0b8845bb2547b7c2@34.185.162.14:26656,e49bb5d9cb22943fb2b9f49a4c5d0f773917efaf@34.179.171.228:26656,babb8151d6fae45fcbb9229bd9faba173f3feaf3@35.246.166.189:26656,9c92984a5aad02c43955da94bb0a979a8dadbcfe@34.142.28.190:26656,3643aeae6a5965053709303e97257f62012fdd9c@34.39.56.114:26656,830d44b0d11ab25c9a03135859049d55daf73a03@34.147.169.102:26656,b0e795afc432ea3557b377d7763f6fb6dd102e60@34.105.180.11:26656"|g' /var/lib/heimdall/config/config.toml

For Amoy, the genesis file already includes the seed configuration. Run the following commands only if you have trouble connecting to peers:

Command Line
sudo sed -i 's|^seeds =.*|seeds = "be818a0ebc61a8ffefdfaf4d3fcfed72ca2d7188@34.89.255.109:26656,81a5aa40d8bf6782e6f3fb0498406ebe707e576c@34.185.137.160:26656,42b0aa4c784a93c4797ff965d75793e099dc0b11@34.89.119.250:26656,5d532264fe8592bf8c1dc8abfa11ff52b381eb2c@34.89.40.235:26656"|g' /var/lib/heimdall/config/config.toml
Command Line
sudo sed -i 's|^persistent_peers =.*|persistent_peers = "be818a0ebc61a8ffefdfaf4d3fcfed72ca2d7188@34.89.255.109:26656,81a5aa40d8bf6782e6f3fb0498406ebe707e576c@34.185.137.160:26656,42b0aa4c784a93c4797ff965d75793e099dc0b11@34.89.119.250:26656,5d532264fe8592bf8c1dc8abfa11ff52b381eb2c@34.89.40.235:26656"|g' /var/lib/heimdall/config/config.toml

#Step 6: Install Bor

With Heimdall installed, you can proceed to install Bor using the following command:

Command Line
sudo curl -L https://raw.githubusercontent.com/0xPolygon/install/main/bor.sh | bash -s -- <bor_version> <network_type> <node_type>
  • <bor_version>: Specify the version of Bor you want to install.

  • <network_type>: mainnet or amoy.

  • <node_type>: sentry

OutputDownloading bor v2.6.5...
Fetched 62.2 MB in 3s (20.4 MB/s)

Downloading bor profile package...
Fetched 3.1 KB

Uninstalling any existing old binary...

Installing bor...
Unpacking bor (2.6.5) ...
Setting up bor (2.6.5) ...

Installing bor profile...
Unpacking bor-profile (2.6.5) ...
Setting up bor-profile (2.6.5) ...

Directory /var/lib/bor exists.

Checking bor version ...
Version: 2.6.5 
GitCommit: ce028df2188926d9ad8ed03a45634132985f96a7 
bor has been installed successfully!

You can confirm Bor installation using:

Command Line
bor version
OutputVersion: 2.6.5 
GitCommit: ce028df2188926d9ad8ed03a45634132985f96a7

#Step 7: Configure Bor

For mainnet, set the bootnodes in /var/lib/bor/config.toml:

Command Line
sudo sed -i 's|.bootnodes =.| bootnodes = ["enode://48e6326841ce106f6b4e229a1be7e98a1d12be57e328b08cb461f6744ae4e78f5ec2340996ce9b40928a1a90137aadea13e25ca34774b52a3600d13a52c5c7bb@34.185.209.56:30303","enode://8ab6905fe76aa9001adb77135250e918db888cac216870c0e95cf26650d83d31d8c2c93d54c3333e0a2196517c41651d174b743ec3e11f44e595f62b77fec7ba@34.185.162.14:30303","enode://02e0b33cf60fb1f88f853c7c04830156151f4acd1c36173cd3fe1f375801fb4f5be5b3a89c98527915d37ed217752933c3faf4c820df740c9dd681294caebcf6@34.179.171.228:30303","enode://079c387b65b09674825462ea63c528ca996af7b03d19b1b2ab6557347434838067db6dd7ae5e0c2e08d5ba164117f3d7faffbf3e890cb91cffbdf45a433ddfce@35.246.166.189:30303","enode://191d06720948ae0119343e5798098f5b1f95a308174c4119d226da91833bc0176009bcc8bf5012e490500562d4d5b5427c307b01f3485b2e8351ac5afd946864@34.142.28.190:30303","enode://30a4651b245e9a0cec674b9ecb5a06ca01553aa727e14a77d0f1ccdb9e48a975f3be631505f417aae438be545ac3b290cd3ed00bef96efd7fb0fb7f916397b3f@34.39.56.114:30303","enode://b950b98b92e118551d79c7280b97ddfcdf3dacb620367ebd45e8382f8e69390df192055386221025ffd3c03912da2aadf668ae6ea7b35f391d82ef87452b3f02@34.147.169.102:30303","enode://92ef18168f6c281a313d0ca76d6122b913a101352b5069af9cea6c8dd0f8b51d669601d59fdf250e972cf9a547d8a10f21ecf5b99ce8511605f328e5f66e845f@34.105.180.11:30303"]|g' /var/lib/bor/config.toml

For Amoy, the genesis file already includes the bootnode configuration. Run the following command only if you have trouble connecting to peers:

Command Line
sudo sed -i 's|.bootnodes =.| bootnodes = ["enode://d40ab6b340be9f78179bd1ec7aa4df346d43dc1462d85fb44c5d43f595991d2ec215d7c778a7588906cb4edf175b3df231cecce090986a739678cd3c620bf580@34.89.255.109:30303","enode://13abba15caa024325f2209d3566fa77cd864281dda4f73bca4296277bfd919ac68cef4dbb508028e0310a24f6f9e23c761fa41ac735cdc87efdee76d5ff985a7@34.185.137.160:30303","enode://fc5bd3856a4ce6389eef1d6bc637ce7617e6ba8013f7d722d9878cf13f1c5a5a95a9e26ccb0b38bcc330343941ce117ab50db9f61e72ba450dd528a1184d8e6a@34.89.119.250:30303","enode://945e11d11bdeed301fb23a5c05aae77bfdde39a8f70308131682a5d2fc1f080531314554afc78718a72ae25cc09be7833f760bf8681516b4315ed36217fa8dab@34.89.40.235:30303"]|g' /var/lib/bor/config.toml

Then change the ownership of the configuration directory to the Bor user:

Command Line
sudo chown bor /var/lib/bor

#Step 8: Update the services’ permission

To ensure that the services have the necessary permissions to run smoothly, update the user permissions for both Heimdall and Bor services by modifying their systemd service files. Use the following commands:

Command Line
sudo sed -i 's/User=heimdall/User=root/g' /lib/systemd/system/heimdalld.service
sudo sed -i 's/User=bor/User=root/g' /lib/systemd/system/bor.service

#Step 9: Start Heimdall service

Start the Heimdall service using the following command:

Command Line
sudo service heimdalld start

You can check the logs to ensure that the node is running:

Command Line
sudo journalctl -u heimdalld.service -f
OutputMar 25 15:29:01 demo heimdalld[18947]: 2026-03-25T15:29:01Z INF finalized block block_app_hash=A558C22F94DB8D3C09EDF4B83AFA7C2FA0D762FE8BF856EAA22A7AC82F177BBF height=8788569 module=state num_txs_res=1 num_val_updates=0 
Mar 25 15:29:01 demo heimdalld[18947]: 2026-03-25T15:29:01Z INF executed block app_hash=A558C22F94DB8D3C09EDF4B83AFA7C2FA0D762FE8BF856EAA22A7AC82F177BBF height=8788569 module=state 
Mar 25 15:29:01 demo heimdalld[18947]: 2026-03-25T15:29:01Z INF committed state block_app_hash=628101C92DD1EA15D8D03A2D0FFAFFA53776575AD5E4004E0D496A89BE2CF921 height=8788569 module=state 
Mar 25 15:29:01 demo heimdalld[18947]: 2026-03-25T15:29:01Z INF indexed block events height=8788569 module=txindex

To check if the Heimdall node is synced, run the following command:

Command Line
curl localhost:26657/status
Output{"jsonrpc":"2.0","id":-1,"result":{"node_info":{"protocol_version":{"p2p":"8","block":"11","app":"0"},"id":"a9b90cc7b44fca96bf419b5a72b9dd626b52f547","listen_addr":"54.171.220.164:26656","network":"heimdallv2-80002","version":"0.38.19","channels":"40202122233038606100","moniker":"ip-10-8-2-38","other":{"tx_index":"on","rpc_address":"tcp://127.0.0.1:26657"}},"sync_info":{"latest_block_hash":"F625EFD862E24A3FC9DAAABE3B49B1FE7EAC5BAD163D3BE67BA19E432DCC4125","latest_app_hash":"E024C03EBB2E75D9B14F6F8B93E81C4227327C78B035345D067F5EFCB5CE2D10","latest_block_height":"8792427","latest_block_time":"2025-06-25T10:12:12.454809572Z","earliest_block_hash":"8ABA33E139078ED7BC10084B9BAA1751E992FB618CDE03FCE9B3209CF75CC155","earliest_app_hash":"E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855","earliest_block_height":"8788501","earliest_block_time":"2025-06-24T20:00:00Z","catching_up":true},"validator_info":{"address":"54960ED9047E3ACAE1BE2A92383CA84BB5280F61","pub_key":{"type":"cometbft/PubKeySecp256k1eth","value":"BEJlcgab5okQLejBvCWMBZ//Qjc5dF1bokWIZb/0L64qRISPOc030LlSDrvWGX0+itjcLUIQRutTU8DlH6ydpUc="},"voting_power":"0"}}}

Check the catching_up value in the output. If it is true, the node is still syncing. Once it becomes false, Heimdall is fully synced.

Syncing from scratch takes several days. To speed up the process, you can use a snapshot instead.

Before downloading the snapshot, stop the Heimdall service:

Command Line
sudo service heimdalld stop

If you have an existing Heimdall data directory, back up your priv_validator_state.json before proceeding:

Command Line
sudo cp /var/lib/heimdall/data/priv_validator_state.json $HOME/priv_validator_state.json

For this guide, the snapshot will be downloaded from Stakecraft, but you can also use platforms like PublicNode, Stakepool, Vaultstaking, or Gimaar Nodes.

To start, install rclone and pv:

Command Line
sudo apt install pv

sudo -v ; curl https://rclone.org/install.sh | sudo bash
OutputReading package lists... Done
Building dependency tree... Done
Reading state information... Done

The following NEW packages will be installed:
  pv

0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 73.9 kB of archives.
After this operation, 188 kB of additional disk space will be used.

Fetched 73.9 kB in 6s (11.9 kB/s)

Unpacking pv (1.8.5-2build1) ...
Setting up pv (1.8.5-2build1) ...
OutputArchive:  rclone-current-linux-amd64.zip
   creating: rclone-v1.73.3-linux-amd64/
  inflating: rclone-v1.73.3-linux-amd64/rclone.1
  inflating: rclone-v1.73.3-linux-amd64/README.html
  inflating: rclone-v1.73.3-linux-amd64/rclone
  inflating: rclone-v1.73.3-linux-amd64/git-log.txt
  inflating: rclone-v1.73.3-linux-amd64/README.txt

Processing manual pages under /usr/share/man...
...
Processing manual pages under /usr/local/man...
Updating index cache for path `/usr/local/man/man1'. Wait...done.

rclone v1.73.3 has successfully installed.
Now run "rclone config" for setup. Check https://rclone.org/docs/ for more details.

Next, configure the S3 bucket access. The credentials below are provided by Stakecraft and are subject to change. Verify the latest credentials on the Stakecraft snapshot page before running this command:

Command Line
mkdir -p ~/.config/rclone/

cat <<EOF > ~/.config/rclone/rclone.conf
[r2] 
type = s3 
provider = Cloudflare 
access_key_id = 849df1cd0e8666858df4b1e182a4b2cd 
secret_access_key = 568a53f5d4ca2b3d38780cd3e7a11ce2d6fe2887fbbe04405a96fc77021e917c 
acl = private 
region = auto 
endpoint = https://dd74dc687a5ce54107082a6849814c19.r2.cloudflarestorage.com 
EOF

Delete the existing data directory and set the environment variables. Replace <snapshot_filename> with the latest Heimdall Amoy snapshot filename from the Stakecraft snapshot page:

Command Line
sudo rm -rf /var/lib/heimdall/data
export RCLONE_REMOTE="r2"
export RCLONE_PATH="sc-snapshots/<snapshot_filename>"
export DEST_DIR="/var/lib/heimdall"

Now download and extract the snapshot:

Command Line
rclone cat "$RCLONE_REMOTE:$RCLONE_PATH" | pv | sudo tar -zx -C "$DEST_DIR"

After extracting the files, ensure the correct ownership of the data directory:

Command Line
sudo chown -R heimdall:nogroup /var/lib/heimdall

Restart the Heimdall service and keep checking the node status until the value of "catching_up" becomes false.

Command Line
sudo systemctl restart heimdalld

sudo journalctl -u heimdalld.service -f

curl localhost:26657/status
Output{"jsonrpc":"2.0","id":-1,"result":{"node_info":{"protocol_version":{"p2p":"8","block":"11","app":"0"},"id":"a9b90cc7b44fca96bf419b5a72b9dd626b52f547","listen_addr":"54.171.220.164:26656","network":"heimdallv2-80002","version":"0.38.19","channels":"40202122233038606100","moniker":"ip-10-8-2-38","other":{"tx_index":"on","rpc_address":"tcp://127.0.0.1:26657"}},"sync_info":{"latest_block_hash":"AE3775586C3275B30AA2892C11E89E66FEA98E5B872244AD5FD8A7ED95DD23AB","latest_app_hash":"4C8F3615C27C23CAAF54F77B529A652E2BACFBE2CE10338AC8D6F96FCC868313","latest_block_height":"30334444","latest_block_time":"2026-03-25T16:40:28.357033933Z","earliest_block_hash":"F43F92F1C5AF581519E7BA9FF97D94A1A973DFC826E5402DC58E35D3920B9611","earliest_app_hash":"CC95F880B9C0C99F83ECF3B03845D39453DA937D14FF553FA7751D18F9FECFA2","earliest_block_height":"27780591","earliest_block_time":"2026-02-24T14:22:22.159843804Z","catching_up":false},"validator_info":{"address":"54960ED9047E3ACAE1BE2A92383CA84BB5280F61","pub_key":{"type":"cometbft/PubKeySecp256k1eth","value":"BEJlcgab5okQLejBvCWMBZ//Qjc5dF1bokWIZb/0L64qRISPOc030LlSDrvWGX0+itjcLUIQRutTU8DlH6ydpUc="},"voting_power":"0"}}}

Once catching_up is false, proceed to start the Bor service.

#Step 10: Start the Bor service

As with the Heimdall service, download a snapshot for the Bor node. If you have an existing chaindata directory, remove it first:

Command Line
sudo rm -rf /var/lib/bor/data/bor/chaindata

Create the chaindata directory and set the environment variables. Replace <snapshot_filename> with the latest Bor Amoy snapshot filename from the Stakecraft snapshot page:

Command Line
sudo mkdir -p /var/lib/bor/data/bor/chaindata
export RCLONE_REMOTE="r2"
export RCLONE_PATH="sc-snapshots/<snapshot_filename>"
export DEST_DIR="/var/lib/bor/data/bor/chaindata"

Download and extract the snapshot:

Command Line
rclone cat "$RCLONE_REMOTE:$RCLONE_PATH" | pv | sudo tar -zx -C "$DEST_DIR"

Change the ownership of the entire Bor data directory to the bor user:

Command Line
sudo chown -R bor:nogroup /var/lib/bor

Start the Bor service and monitor the logs:

Command Line
sudo service bor start

sudo journalctl -u bor.service -f
OutputMar 25 17:34:31 demo bor[28210]: INFO [03-25|17:34:31.652] Fetching state updates from Heimdall fromID=4 to=2023-11-20T15:47:39Z 
Mar 25 17:34:31 demo bor[28210]: INFO [03-25|17:34:31.652] Fetching state sync events queryParams="from_id=4&to_time=2023-11-20T15:47:39Z&pagination.limit=50" 
Mar 25 17:34:31 demo bor[28210]: INFO [03-25|17:34:31.652] Fetching state updates from Heimdall fromID=4 to=2023-11-20T15:47:39Z 
Mar 25 17:34:31 demo bor[28210]: INFO [03-25|17:34:31.652] Fetching state sync events queryParams="from_id=4&to_time=2023-11-20T15:47:39Z&pagination.limit=50" 
Mar 25 17:34:31 demo bor[28210]: INFO [03-25|17:34:31.653] StateSyncData gas=0 number=46752 lastStateID=3 "total records"=0 "fetch time"=1 "process time"=0 
Mar 25 17:34:31 demo bor[28210]: INFO [03-25|17:34:31.653] StateSyncData gas=0 number=46752 lastStateID=3 "total records"=0 "fetch time"=1 "process time"=0

Bor is running and syncing. The early timestamps in the logs are expected. Bor starts from the snapshot's beginning block and works forward to the current network height.

Latency from 30ms to 5ms with Cherry Servers

Read how ELSOUL LABO, leading Solana RPC provider, reduced latency from 30 ms to 5 ms with Cherry Servers' high-performance dedicated bare metal, ensuring optimal performance for their users.

#Conclusion

Your Polygon node is now fully synced and operational. It processes transactions and interacts with the network without relying on third-party RPC providers.

If you want to go further, you can set up your node as a validator. Validator nodes participate in consensus and earn staking rewards, but require staking POL tokens and meeting uptime requirements. The Polygon documentation covers the full validator setup process.

High egress costs and lost transactions?

Switch to blockchain-optimized dedicated bare metal—save up to 60% on your cloud bill and double the performance compared to hyperscale cloud.

Buy a Dedicated Server with Crypto

We accept Bitcoin and other popular cryptocurrencies.

Share this article

Related Articles

Published on Apr 29, 2026 Updated on Apr 30, 2026

Does Hetzner Accept Crypto [7 Hetzner Alternatives to Consider]

Does Hetzner accept crypto payments? In this guide, we’ll answer that question directly and explore the best crypto-friendly Hetzner alternatives.

Read More
Published on Apr 27, 2026 Updated on Apr 28, 2026

How To Create an ERC20 Token: Step-by-Step

This guide walks you through how to create an ERC20 token. You'll learn ERC20 standards, costs, and deploy your token using Remix, Hardhat, and Foundry on Ethereum.

Read More
Published on Apr 16, 2026 Updated on Apr 17, 2026

How to Run a Polygon RPC Node: Step-by-Step [With Examples]

This step-by-step guide walks through everything needed to set up and run a private Polygon RPC node on a dedicated bare metal server, including real-life examples.

Read More
No results found for ""
Recent Searches
Navigate
Go
ESC
Exit