Create a read-only node

Tutorial*

*below are additional steps not covered in tutorial

Open a Terminal application

1. Install rust, cargo, rustfmt etc

Install rustc, cargo and rustfmt.

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

Make sure you are using the latest stable rust version by running:

rustup update

Also install git, libssl-dev, pkg-config, zlib1g-dev, protobuf etc.

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

2. Install Tachyon v2.0 and Solana tools

Clone the Tachyon repository:

git clone https://github.com/x1-labs/tachyon.git

Build Tachyon and the solana tools:

cd tachyon
cargo build --release

Update your PATH environment variable:

export PATH=\$PATH:$(pwd)/target/release
echo "export PATH=\$PATH:$(pwd)/target/release" >> ~/.bashrc

Verify the installation:

solana --version
tachyon-validator --version
tachyon-ledger-tool --version

If you see the versions listed below, the installation was successful:

solana-cli 2.0.21 (src:00000000; feat:607245837, client:Tachyon)
tachyon-validator 2.0.21 (src:00000000; feat:2908148756, client:Tachyon)
tachyon-ledger-tool 2.0.21 (src:00000000; feat:2908148756, client:Tachyon)

3. System Tuning (Linux)

Your system will need to be tuned in order to run properly. Your validator may not start without the settings below.

Optimize sysctl knobs

sudo bash -c "cat >/etc/sysctl.d/21-tachyon-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-tachyon-validator.conf

Increase systemd and session file limits

Add

LimitNOFILE=1000000

to the [Service] section of your systemd service file, if you use one, otherwise add

DefaultLimitNOFILE=1000000

to the [Manager] section of /etc/systemd/system.conf, using

nano /etc/systemd/system.conf

Execute configuration

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 all open sessions (log out then, in again)

4. Set to X1 Testnet network

solana config set -u https://rpc.testnet.x1.xyz

To verify set network, use:

solana config get

5. Create keypairs

Using command solana-keygen to generate a new wallet. It will generate a 12-word seed (aka. mnemonic, or recovery) phrase. Save it safe.

solana-keygen new --no-passphrase -o ~/.config/solana/id.json
solana-keygen new --no-passphrase -o ~/.config/solana/identity.json
solana-keygen new --no-passphrase -o ~/.config/solana/vote.json
solana-keygen new --no-passphrase -o ~/.config/solana/stake.json

To switch between keypairs:

solana config set -k id.json

6. Fund wallet

Check balance:

solana balance

7. Create a validator startup script & start node

In your ubuntu home directory (e.g. /home/ubuntu/), create a folder called bin. Inside that folder create a file called validator.sh and make it executable:

mkdir -p /home/ubuntu/bin
touch /home/ubuntu/bin/validator.sh

Next, open the validator.sh file for editing:

nano /home/ubuntu/bin/validator.sh

Copy and paste the following contents into validator.sh then save the file:

#!/bin/bash
exec tachyon-validator \
    --identity ~/.config/solana/identity.json \
    --vote-account ~/.config/solana/vote.json \
    --known-validator Abt4r6uhFs7yPwR3jT5qbnLjBtasgHkRVAd1W6H5yonT \
    --known-validator 5NfpgFCwrYzcgJkda9bRJvccycLUo3dvVQsVAK2W43Um \
    --known-validator FcrZRBfVk2h634L9yvkysJdmvdAprq1NM4u263NuR6LC \
    --only-known-rpc \
    --log ./validator.log \
    --ledger ./ledger \
    --rpc-port 8899 \
    --full-rpc-api \
    --dynamic-port-range 8000-8020 \
    --entrypoint entrypoint1.testnet.x1.xyz:8001 \
    --entrypoint entrypoint2.testnet.x1.xyz:8000 \
    --entrypoint entrypoint3.testnet.x1.xyz:8000 \
    --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

Make validator startup script executable:

chmod +x /home/ubuntu/bin/validator.sh

Make sure you're in the home directory:

cd ~ 

Start validator with nohup:

nohup /home/ubuntu/bin/validator.sh &

Check validator logs to see if it's running:

tail -f /home/ubuntu/validator.log

Check catch up status:

solana catchup --our-localhost

Use monitor command to check validator operations:

tachyon-validator --ledger ./ledger monitor

See all nodes connected to network, whether they are staked or not. Your identity.json should show up there.

solana gossip

Check validator process:

ps aux | grep validator    

Kill validator process:

tachyon-validator exit -f

Last updated