# 💜 Polygon PoS - Running a Full Node Using Snapshots
## Overview
> ⚠️ **Warning:** It is essential to follow the specified sequence of actions precisely; any deviations may result in potential issues.
---
## Prepare the Machine
1. **Install Heimdall and Bor binaries** on the full node machine.
2. **Set up Heimdall and Bor services** on the full node machine.
3. **Configure the full node machine.**
4. **Download snapshots** (optional but recommended).
5. **Start the full node.**
6. **Check the node's health** with the community.
---
## Install build-essential
This is **required** for your full node. Run the following command:
```sh
sudo apt-get update
sudo apt-get install build-essential
```
---
## Install Binaries
The Polygon node consists of **two layers**:
- **Heimdall**: A cosmos-sdk based app using a tendermint fork for consensus.
- **Bor**: A Geth fork that generates blocks shuffled by Heimdall nodes.
Both binaries **must be installed and run in the correct order** to function properly.
---
## Install Heimdall
Install the latest version of Heimdall and related services. Make sure you check for the correct release version.
Run:
```sh
curl -L https://raw.githubusercontent.com/maticnetwork/install/main/heimdall.sh | bash -s -- <HEIMDALL_VERSION> <NETWORK_TYPE> <NODE_TYPE>
```
| Parameter | Description |
|----------------|-------------|
| `HEIMDALL_VERSION` | Valid **v1.0+** release tag from [Heimdall Releases](https://github.com/maticnetwork/heimdall/releases) |
| `NETWORK_TYPE` | `mainnet` / `amoy` |
| `NODE_TYPE` | `sentry` |
Verify installation:
```sh
heimdalld version --long
```
---
## Configure Heimdall Seeds (Mainnet)
```sh
sudo sed -i 's|^seeds =.*|seeds = "1500161dd491b67fb1ac81868952be49e2509c9f@52.78.36.216:26656,dd4a3f1750af5765266231b9d8ac764599921736@3.36.224.80:26656,8ea4f592ad6cc38d7532aff418d1fb97052463af@34.240.245.39:26656,e772e1fb8c3492a9570a377a5eafdb1dc53cd778@54.194.245.5:26656,6726b826df45ac8e9afb4bdb2469c7771bd797f1@52.209.21.164:26656"|g' /var/lib/heimdall/config/config.toml
sudo chown heimdall /var/lib/heimdall
```
---
## Install Bor
Run:
```sh
curl -L https://raw.githubusercontent.com/maticnetwork/install/main/bor.sh | bash -s -- <BOR_VERSION> <NETWORK_TYPE> <NODE_TYPE>
```
| Parameter | Description |
|----------------|-------------|
| `BOR_VERSION` | Valid **v1.0+** release tag from [Bor Releases](https://github.com/maticnetwork/bor/releases) |
| `NETWORK_TYPE` | `mainnet` / `amoy` |
| `NODE_TYPE` | `sentry` |
Verify installation:
```sh
bor version
```
---
## Update Service Config User Permission
```sh
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
```
---
## Download Snapshots
> Visit [All4nodes.io](https://all4nodes.io/Polygon) for a list of community snapshots.
Before proceeding, **ensure `aria2c` is installed**:
```sh
sudo apt-get update
sudo apt-get install aria2
```
### Heimdall Mainnet Snapshot
1️⃣ **Stop the service and reset the data:**
```sh
sudo systemctl stop heimdalld.service
sudo rm -rf /var/lib/heimdall/data
```
2️⃣ **Download the Heimdall snapshot:**
```sh
wget https://snapshots.stakepool.dev.br/heimdall/heimdall-mainnet.txt
```
3️⃣ **Use `aria2c` to download efficiently:**
```sh
sudo mkdir -p data && cd data && sudo aria2c -j 6 -x 8 -s 6 --disk-cache=1024M --file-allocation=falloc --timeout=30 --retry-wait=5 --console-log-level=warn --auto-file-renaming=false --summary-interval=3600 -c -i ../heimdall-mainnet.txt && sudo chown -R heimdall:nogroup ./
```
4️⃣ **Move the data directory:**
```sh
sudo mv data /var/lib/heimdall
```
---
### Bor Mainnet Snapshot (Pebble)
1️⃣ **Stop the service and reset chaindata:**
```sh
sudo systemctl stop bor.service
sudo rm -rf /var/lib/bor/data/bor/chaindata
```
2️⃣ **Download the Bor snapshot:**
```sh
wget https://snapshots.stakepool.dev.br/pbss/bor-mainnet-pebble.txt
```
3️⃣ **Use `aria2c` to download efficiently:**
```sh
sudo mkdir -p chaindata && cd chaindata && sudo aria2c -j 6 -x 8 -s 6 --disk-cache=1024M --file-allocation=falloc --timeout=30 --retry-wait=5 --console-log-level=warn --auto-file-renaming=false --summary-interval=3600 -c -i ../bor-mainnet-pebble.txt && sudo chown -R bor:nogroup ./
```
4️⃣ **Move the chaindata directory:**
```sh
sudo mv chaindata /var/lib/bor/data/bor
```
---
## Start Services
1️⃣ **Start Heimdall:**
```sh
sudo service heimdalld start
```
> ⚠️ **Wait for Heimdall to fully sync before starting Bor!**
> Check sync status:
> ```sh
> curl localhost:26657/status
> ```
> If `catching_up` is false, then Heimdall is synced.
2️⃣ **Start Bor:**
```sh
sudo service bor start
```
---
## Logs
### Check Heimdall logs:
```sh
journalctl -u heimdalld.service -f
```
### Check Bor logs:
```sh
journalctl -u bor.service -f
```
> Learn more about logs: [How To Use Journalctl](https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs).
---
### ✅ **Done! Your Polygon PoS Full Node is Running!**