# Validator Checklist

### Before You Start

Before starting the validator setup, ensure you're prepared with the right hardware, software, and knowledge.

<br>

#### Hardware Requirements

* Storage:
* * You’ll need \~1TB for Mainnet execution chain data. Total disk space for all clients is around 1TB.
  * Prefer SSD storage to handle the required read/write speeds efficiently.
  * Plan for additional space for maintenance and updates.
* CPU and RAM:
* * Use Bahamut's recommended hardware specs as a reference for your setup. It is preferable to use a quad-core (or dual-core hyperthreaded) CPU. At least 16 GB of RAM, 32GB is recommended

#### Internet Requirements

* A reliable, 24/7 connection is crucial to keep your node in sync and ready to validate.
* Ensure your internet bandwidth is not capped or throttled.

<br>

#### Important Notes

Avoid overly complex setups.

* Brief offline periods result in small penalties but can be easily recovered by staying online longer.
* Complicated backup systems might add unnecessary costs and risks.

Syncing your execution client can take several days, so plan accordingly.

<br>

Warning: Redundant backup validators can cause slashing, leading to serious penalties and ejection from the network.

<br>

### During Setup

Use this section to track your progress while setting up your validator.

#### Initial Setup

* Set up your chosen hardware and operating system.

<br>

#### Node Security

* Secure the root account.
* Set up a firewall.
* Forward the necessary ports for your Execution Client (EL) and Consensus Client (CL):
* * EL Port: 30303 TCP/UDP
  * CL Ports: 13000 TCP, 12000 UDP

<br>

#### Time Synchronization

For Ubuntu 20.04:

1. Run: timedatectl
2. * Confirm NTP Service is active and your time settings (Local, Time zone, Universal) are correct.
3. If NTP isn’t active:
4. * Run: sudo timedatectl set-ntp on
   * If you encounter issues, install chrony or ntp.

I verified that my server time matches the wall clock.

<br>

#### Execution Client Configuration

Install and sync your Execution Client following these instructions

.

All stakers must operate an execution client alongside a consensus client.

☑ I've installed and synced my execution client (this can take several days).

<br>

**Node Setup Tutorial**

Follow the Node Setup Tutorial to run a node on Bahamut.

Warning: Running your validator in multiple places will cause a slashable event and lead to ejection from the network.

<br>

#### JWT Authentication

Configuring JWT Authentication for HTTP Connections

To authenticate the HTTP connection between your beacon node and execution node, use a[ JWT token](https://jwt.io/).

<br>

Generate the token using this method:

1. OpenSSL:

openssl rand -hex 32 | tr -d "\n" > "jwt.hex"

<br>

Ensure the generated jwt.hex file is stored in your Bahamut directory:

📂Bahamut

┣ 📂consensus

┣ 📂execution

┣ 📄jwt.hex

Grant appropriate permissions for file access.

<br>

☑ I've set up a shared JWT secret and made it available to both my execution client, and my consensus client (beacon node)

<br>

#### Setting Addresses

Withdrawal Address:

* Set this when generating your validator keys to unlock rewards.
* If not set before depositing, update your keys with a BLSToExecutionChange message.

<br>

☑ I provided an Bahamut address when creating my deposit\_data\<timestamp>.json file. This is where I want my validator rewards and withdrawals to be sent.

<br>

☑ If I didn’t set a withdrawal address before depositing, I’ve updated it by submitting a BLSToExecutionChange message signed with my BLS withdrawal keys.

<br>

Fee Recipient Address:

* Assign an Bahamut address in your consensus client settings to receive transaction fee rewards.

See Fee Recipient Docs

☑ I provided an Bahamut address to my validator for receiving my fee rewards.

<br>

#### Consensus Layer Validator Client (VC)

Setting up your validator client is essential for participating in the network:

☑ I imported my keystore(s) into my validator client.

☑ I ensured my keystore(s) are stored only on one validator machine to avoid any potential conflicts or slashing risks.

☑ I started running my validator client and confirmed it is functioning correctly.

<br>

#### Consensus Layer Validator Client (VC)

Setting up your validator client is essential for participating in the network:

* I imported my keystore(s) into my validator client.
* I ensured my keystore(s) are stored only on one validator machine to avoid any potential conflicts or slashing risks.
* I started running my validator client and confirmed it is functioning correctly.

<br>

#### Deposit Data

This step is where you inform the network about your validator participation by generating and broadcasting your deposit data.

1. Download the necessary tools from this[ repository](https://github.com/VIWET/GoDepositCLI).
2. Follow the[ instructions](https://github.com/VIWET/GoDepositCLI/blob/develop/README.md) to generate deposit data with your new keys.
3. Launch your validator client to finalize the process.
4. Make a transaction via your selected wallet to broadcast your deposit data to a network.

<br>

### After Depositing

After setting up your validator, there are additional steps you can take to secure your funds and optimize your node:

#### Advanced System Architecture

* Consider using a trusted VPN to hide your IP address and protect your validator’s identity from being exposed to the network.

#### Graffiti

* Add a personal touch to your validator's proposed blocks using the graffiti flag. You can customize this with any text under 32 bytes.

<br>

☑ I’ve set my graffiti flag to personalize my validator's contributions.

<br>
