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.xyzStep 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.jsonCheck balances:
solana balance ~/.config/solana/id.json
solana balance ~/.config/solana/identity.jsonStep 5 — Go to Your Keypair Directory
Navigate to where your keypair files are stored:
cd ~/.config/solana6. 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 10identity.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.1This 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.jsonpubkeyAmount: the amount you want to stake to your validator
Verify balance:
solana balance ~/.config/solana/stake.jsonStep 10 — Delegate Stake
Link your stake account to your vote account:
solana delegate-stake stake.json vote.jsonThis 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.jsonExample 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 ~/ledgerStep 13 — Update Validator Startup Script for Mainnet
Open your validator startup script:
nano $HOME/bin/validator.shReplace 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 50Save 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.logCheck catch-up status:
solana catchup --our-localhostMonitor validator performance:
tachyon-validator --ledger ./ledger monitorLast updated

