Connect validator to X1 Mainnet
Step-by-step guide to connect your validator and vote account to the X1 Mainnet using CLI and hardware wallet.
Step 1 — Switch RPC to X1 Mainnet
Set your Solana CLI to use the X1 Mainnet endpoint:
solana config set --url https://rpc.mainnet.x1.xyz
Step 2 — Verify Validator Airdrop
Check that your id.json
or hardware wallet public key has received the validator airdrop:
solana balance <PUBKEY>
Your balance should be greater than 0.
Step 3 — Fund Local Keypairs
Send 1 XNT (or a small amount) to both:
id.json
— used to manage startup of the validatoridentity.json
— your validator identity key
Do this using Backpack Wallet.
Step 4 — Configure Solana CLI Identity
Make sure you’re operating with the correct signer:
solana config set -k ~/.config/solana/id.json
Check balances:
solana balance ~/.config/solana/id.json
solana balance ~/.config/solana/identity.json
Step 5 — Go to Your Keypair Directory
Navigate to where your keypair files are stored:
cd ~/.config/solana
6. Create a Vote Account
Create a vote account for vote.json
, and assign your hardware wallet (Ledger) as the withdraw authority.
6.1 Get Your Ledger’s Public Key (on Your Local Machine)
On your local computer, plug in your Ledger, open the Solana app, and run:
solana-keygen pubkey "usb://ledger?key=0/0"
Copy the output — this is your Ledger withdraw authority address:
<LEDGER_PUBKEY>
💡 You only need the public key from your Ledger. The Ledger does not need to be connected to your validator server.
6.2 Create the Vote Account (on Your Validator Server)
Create a vote account for vote.json
, using your identity.json
keypair as the signer, and set your Ledger pubkey as the withdraw authority:
solana create-vote-account vote.json identity.json <LEDGER_PUBKEY> --commission 10
identity.json
→ signs the vote account creation and becomes the validator identity<LEDGER_PUBKEY>
→ becomes the withdraw authority--commission 10
→ your validator keeps 10%, and delegators receive 90%
6.3 Verify the Vote Account
Confirm it was successfully created:
solana vote-account <VOTE_ACCOUNT_PUBKEY>
You should see details such as:
Identity pubkey
Withdraw authority
Commission %
Epoch credits and status
Step 7 — Create a Stake Account
Create a stake account and deposit a small amount (e.g. 0.1 XNT):
solana create-stake-account stake.json 0.1
This initializes stake.json
using funds from your id.json
.
Step 8 — Secure Stake Account with Hardware Wallet
Authorize your Ledger hardware wallet as the withdraw authority:
solana stake-authorize stake.json --new-withdraw-authority <HW_WALLET_PUBKEY>
Now only your hardware wallet can withdraw or modify the stake account.
Step 9 — Fund Your Stake Account
Send more XNT to your stake account from your hardware wallet using Backpack.
In Backpack:
From: your hardware wallet pubkey
To: your
stake.json
pubkeyAmount: the amount you want to stake to your validator
Verify balance:
solana balance ~/.config/solana/stake.json
Step 10 — Delegate Stake
Link your stake account to your vote account:
solana delegate-stake stake.json vote.json
This command delegates your staked XNT to your validator’s vote account.
Step 11 — Check Stake Account Status
View your stake account details:
solana stake-account stake.json
Example output:
Balance: 100.1 XNT
Rent Exempt Reserve: 0.00228288 XNT
Delegated Stake: 100.0 XNT
Active Stake: 0 XNT
Activating Stake: 100.0 XNT
Stake activates starting from epoch: 9
Delegated Vote Account Address: <VOTE_PUBKEY>
Stake Authority: <STAKE_AUTHORITY_PUBKEY>
Withdraw Authority: <HW_WALLET_PUBKEY>
The stake will become active starting from the listed epoch once the validator is participating in consensus.
Step 12 — Reset Local Ledger
Before switching to mainnet, clear your old testnet ledger to avoid conflicts:
rm -rf ~/ledger
Step 13 — Update Validator Startup Script for Mainnet
Open your validator startup script:
nano $HOME/bin/validator.sh
Replace its contents with:
#!/bin/bash
export RUST_LOG=solana_metrics=warn,info
exec tachyon-validator \
--identity $HOME/.config/solana/identity.json \
--vote-account $HOME/.config/solana/vote.json \
--entrypoint entrypoint0.mainnet.x1.xyz:8001 \
--entrypoint entrypoint1.mainnet.x1.xyz:8001 \
--entrypoint entrypoint2.mainnet.x1.xyz:8001 \
--entrypoint entrypoint3.mainnet.x1.xyz:8001 \
--entrypoint entrypoint4.mainnet.x1.xyz:8001 \
--known-validator 7ufaUVtQKzGu5tpFtii9Cg8kR4jcpjQSXwsF3oVPSMZA \
--known-validator 5Rzytnub9yGTFHqSmauFLsAbdXFbehMwPBLiuEgKajUN \
--known-validator 4V2QkkWce8bwTzvvwPiNRNQ4W433ZsGQi9aWU12Q8uBF \
--known-validator CkMwg4TM6jaSC5rJALQjvLc51XFY5pJ1H9f1Tmu5Qdxs \
--known-validator 7J5wJaH55ZYjCCmCMt7Gb3QL6FGFmjz5U8b6NcbzfoTy \
--only-known-rpc \
--log $HOME/validator.log \
--ledger $HOME/ledger \
--rpc-port 8899 \
--full-rpc-api \
--dynamic-port-range 8000-8020 \
--wal-recovery-mode skip_any_corrupted_record \
--limit-ledger-size 50000000 \
--enable-rpc-transaction-history \
--enable-extended-tx-metadata-storage \
--rpc-pubsub-enable-block-subscription \
--full-snapshot-interval-slots 5000 \
--maximum-incremental-snapshots-to-retain 10 \
--maximum-full-snapshots-to-retain 50
Save and exit the editor.
Step 14 — Start the Validator
From your home directory:
cd $HOME
nohup $HOME/bin/validator.sh &
Step 15 — Monitor Your Validator
Check validator logs:
tail -f $HOME/validator.log
Check catch-up status:
solana catchup --our-localhost
Monitor validator performance:
tachyon-validator --ledger ./ledger monitor
Last updated