> For the complete documentation index, see [llms.txt](https://node.z4ch.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://node.z4ch.xyz/nodes-+-providers/xolana-validator-guide.md).

# Xolana Validator Guide

**Disclaimer**:&#x20;

Not financial advise. The only incentive you get from running a node is earning the right to ask Jack, "wen X1 mainnet?", "wen xolana?" or anything related to X1. Check the original source guide [here](https://x1.wiki/xolana/).

LFG!

### Requirement

You need to have a dedicated server that meets the basic requirements of:

* CPU: 3GHz or higher (recommended)
* RAM: 1TB or higher (recommended)

Get a server from Interserver. Use my referral link if you want: <https://www.interserver.net/r/950716>

## Setup Solana CLI

Run this command on your Terminal session:

```
sh -c "$(curl -sSfL https://release.solana.com/v1.18.15/install)"
```

Make sure the apply the PATH environment once the install is done. Test by running this:

```
solana --version
```

## System Tuning (Linux only)

This will make sure that your server runs the node properly.

Run the following commands on your Terminal session:

* Optimize sysctl knobs

```
sudo bash -c "cat >/etc/sysctl.d/21-solana-validator.conf <<EOF
# Increase UDP buffer sizes
net.core.rmem_default = 134217728
net.core.rmem_max = 134217728
net.core.wmem_default = 134217728
net.core.wmem_max = 134217728

# Increase memory mapped files limit
vm.max_map_count = 1000000

# Increase number of allowed open file descriptors
fs.nr_open = 1000000
EOF"
```

```
sudo sysctl -p /etc/sysctl.d/21-solana-validator.conf
```

* Increase systemd and session file limits

Add the following line to the \[Service] section of your systemd service file.

```
LimitNOFILE=1000000
```

Or, Add the following line to the \[Manager] section of /etc/systemd/system.conf.

```
DefaultLimitNOFILE=1000000
```

Save your changes and then run these commands to reload the services.

```
sudo systemctl daemon-reload
```

```
sudo bash -c "cat >/etc/security/limits.d/90-solana-nofiles.conf <<EOF
# Increase process file descriptor count limit
* - nofile 1000000
EOF"
```

Close session, Logout and then Login. Check if the limits have taken effect.

```
ulimit -n
```

You should get a result showing `1000000`.

In case it did not work for you, you can manually set it by using this command:

```
ulimit -n 1000000
```

## Manual Xolana Build

Install Rust

```
curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
rustup component add rustfmt
```

Run update

```
rustup update
```

Update your system files

```
sudo apt-get update
sudo apt-get install libssl-dev libudev-dev pkg-config zlib1g-dev llvm clang cmake make libprotobuf-dev protobuf-compiler
```

Clone Xolana repo

```
git clone https://github.com/jacklevin74/xolana.git
cd xolana
git checkout xolana
```

Build Xolana validator

```
cargo build --release
```

<figure><img src="/files/UirXrw91Q6Rcj542Y4n1" alt=""><figcaption></figcaption></figure>

Once the build is done, check the version you are running

```
./target/release/solana-validator -V
```

You should see a prompt like this:

`solana-validator 1.18.15 (src:00000000; feat:4215500110, client:SolanaLabs)`

## Create Wallets

You need to create a main wallet `id.json` and 4 additional wallets for the validator namely; `identity.json`, `vote.json`, `withdrawer.json`, and `stake.json`.

Main wallet

```
solana-keygen new --no-passphrase -o id.json
```

4 additional wallets

```
solana-keygen new --no-passphrase -o identity.json
solana-keygen new --no-passphrase -o vote.json
solana-keygen new --no-passphrase -o withdrawer.json
solana-keygen new --no-passphrase -o stake.json
```

Take note of the seed phrases of your wallets. You might need them in the future.

<figure><img src="/files/xuO64l1oxTxiyEmkHfAK" alt=""><figcaption></figcaption></figure>

### Fund Wallets

Connect CLI to Xolana Network by running this command:

```
solana config set -u http://xolana.xen.network:8899
```

Then airdrop 100 SOL to your main wallet.

```
solana airdrop 100
```

<figure><img src="/files/7MCU3YBAE6uCp8VNp1wj" alt=""><figcaption></figcaption></figure>

## Run Read Only Node

It is best practice to always run your node first in read only until it is fully synced.

Using the following command, this should run your server in read only.

```
nohup solana-validator --identity identity.json --limit-ledger-size 50000000 --rpc-port 8899 --entrypoint xolana.xen.network:8001 --full-rpc-api --log - --vote-account vote.json --max-genesis-archive-unpacked-size 1073741824 --no-incremental-snapshots --require-tower --enable-rpc-transaction-history --enable-extended-tx-metadata-storage --skip-startup-ledger-verification --no-poh-speed-test &
```

This will run the node in the background. You can check logs by running this command and see if it is working:

```
tail -f nohup.out
```

To check if your node is fully synced, you can run this command:

```
solana catchup --our-localhost
```

<figure><img src="/files/sazg2OOJje6oDwhmBlG4" alt=""><figcaption></figcaption></figure>

## Stake SOL Tokens

Send 100 SOL to identity.json address. PUBKEY or public key is the address of your generated wallets.

```
solana transfer <IDENTITY_PUBKEY> 100 --allow-unfunded-recipient
```

Create Stake account

```
solana create-stake-account stake.json 10
```

Create Vote account

```
solana create-vote-account vote.json identity.json <WITHDRAWER_PUBKEY> --commission 10
```

Transfer SOL to Stake account

```
solana transfer <STAKE_PUBKEY> 10
```

Run Delegate Stakeke command

```
solana delegate-stake stake.json vote.json
```

Run Stake command

```
solana stake-account stake.json
```

Check your stakes on the vote.json address

```
solana stakes <VOTE_PUBKEY>
```

<figure><img src="/files/23YNlOvJlmmB2dSBKtZ7" alt=""><figcaption></figcaption></figure>

## Relaunch Validator and Final Checks

Get ID of the running validator

```
ps aux | grep solana-validator
```

<figure><img src="/files/XhGXhybtAxqSawJKFJpo" alt=""><figcaption></figcaption></figure>

Kill validator

```
kill <# beside the logged in profile>
example:
kill 143551
```

Run the command again to check if it is still running.&#x20;

```
ps aux | grep solana-validator
```

Run the validator using the following command:

```
nohup ./target/release/solana-validator --identity identity.json --limit-ledger-size 50000000 --rpc-port 8899 --entrypoint xolana.xen.network:8001 --full-rpc-api --log - --vote-account vote.json --max-genesis-archive-unpacked-size 1073741824 --no-incremental-snapshots --require-tower --enable-rpc-transaction-history --enable-extended-tx-metadata-storage --skip-startup-ledger-verification --rpc-pubsub-enable-block-subscription &
```

Check logs:

```
tail -f nohup.out
```

Check list of nodes and validators. Look for your identity and it should match the IP address of your server.

```
solana gossip
```

<figure><img src="/files/r3pZz3HLFI1pzpN1mCiv" alt=""><figcaption></figcaption></figure>

Finally, check validators list

```
solana validators
```

<figure><img src="/files/fkxHVr5KTGSjyxDVKcuj" alt=""><figcaption></figcaption></figure>

If your node does not have an exclamation warning, then it is running fine.

Congratulations, you have successfully ran your own Xolana Validator.

### Need Help?

Join Telegram: <https://t.me/+gBrQjWYlyZYxZTBk>\
Watch Full guide video by Xenducation: <https://youtu.be/o61ROj-H0zY?si=dTZ8gtcEDLBwRXfp>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://node.z4ch.xyz/nodes-+-providers/xolana-validator-guide.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
