Skip to content

Instantly share code, notes, and snippets.

@AlekseiOvchinnikov13
Last active July 30, 2025 03:05
Show Gist options
  • Select an option

  • Save AlekseiOvchinnikov13/c0f553bb4d5af7280140a76d9ee00496 to your computer and use it in GitHub Desktop.

Select an option

Save AlekseiOvchinnikov13/c0f553bb4d5af7280140a76d9ee00496 to your computer and use it in GitHub Desktop.
Solana JITO
# check and choose
https://jito-foundation.gitbook.io/mev/jito-solana/command-line-arguments#mainnet-arguments
https://jito-labs.gitbook.io/mev/searcher-resources/block-engine/mainnet-addresses
https://docs.jito.wtf/lowlatencytxnsend/
# source service
https://gist.githubusercontent.com/Bambarello/76f6a38bd375dac478a97ba6c2648ef1/raw/service-solana-jito-mainnet
nano /etc/systemd/system/solana.service
Environment="BLOCK_ENGINE_URL="https://amsterdam.mainnet.block-engine.jito.wtf""
Environment="RELAYER_URL="http://amsterdam.mainnet.relayer.jito.wtf:8100""
Environment="SHRED_RECEIVER_ADDR="74.118.140.240:1002""
# local relayer
--relayer-url http://127.0.0.1:11226 \
--account-index program-id \
--account-index-include-key AddressLookupTab1e1111111111111111111111111 \
ExecStart=/root/.local/share/solana/install/releases/jito/bin/solana-validator \
--tip-payment-program-pubkey T1pyyaTNZsKv2WcRAB8oVnk93mLJw2XzjtVYqCsaHqt \
--tip-distribution-program-pubkey 4R3gSG8BpU4t19KYj8CfnbtRpnT8gtk4dvTHxVRwc2r7 \
--merkle-root-upload-authority GZctHpWXmsZC1YHACTGGcHhYxjdRqQvTpYkb9LMvxDib \
--commission-bps 10000 \
--relayer-url $RELAYER_URL \
--block-engine-url $BLOCK_ENGINE_URL \
--shred-receiver-address $SHRED_RECEIVER_ADDR \
# NEW BLOCK ENGINE
https://telegra.ph/Ustanovka-Deez-relayer-03-29
declare -A locations=(
["Global"]="global.mainnet.block-engine.deez.wtf"
["LA"]="la.mainnet.block-engine.deez.wtf"
["NY"]="ny.mainnet.block-engine.deez.wtf"
["Oslo"]="oslo.mainnet.block-engine.deez.wtf"
["Vienna"]="vienna.mainnet.block-engine.deez.wtf"
["Warsaw"]="warsaw.mainnet.block-engine.deez.wtf"
["Frankfurt"]="frankfurt.mainnet.block-engine.deez.wtf"
["London"]="london.mainnet.block-engine.deez.wtf"
["Kyiv"]="kyiv.mainnet.block-engine.deez.wtf"
["Tokyo"]="tokyo.mainnet.block-engine.deez.wtf"
)
for city in "${!locations[@]}"; do
hostname="${locations[$city]}"
echo -n "Ping $hostname ($city) - "
ping -c 4 "$hostname" | grep 'avg' | awk -F'/' '{print $5 " ms"}'
done
nano /etc/systemd/system/solana.service
export engine="https://frankfurt.mainnet.block-engine.deez.wtf"
/root/.local/share/solana/install/releases/v2.0.19-jito/bin/agave-validator --ledger /root/solana/validator-ledger set-block-engine-config --block-engine-url ${engine}
curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
rustup component add rustfmt; \
rustup update; \
sudo apt-get update; \
sudo apt-get install libssl-dev libudev-dev pkg-config zlib1g-dev llvm clang cmake make libprotobuf-dev protobuf-compiler
# https://github.com/jito-foundation/jito-solana/releases
export TAG=v2.3.6-jito
# install
git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules; \
cd jito-solana; \
git checkout tags/$TAG; \
git submodule update --init --recursive; \
CI_COMMIT=$(git rev-parse HEAD) scripts/cargo-install-all.sh --validator-only ~/.local/share/solana/install/releases/"$TAG"
# update
cd jito-solana; \
git pull; \
git checkout tags/$TAG; \
git submodule update --init --recursive; \
CI_COMMIT=$(git rev-parse HEAD) scripts/cargo-install-all.sh --validator-only ~/.local/share/solana/install/releases/"$TAG"
ln -sfn ~/.local/share/solana/install/releases/"$TAG" ~/.local/share/solana/install/releases/jito; \
ls -l ~/.local/share/solana/install/releases/jito; \
~/.local/share/solana/install/releases/jito/bin/solana --version
echo 'if $programname == "agave-validator" then stop' > /etc/rsyslog.d/01-solana-remove.conf && sudo systemctl restart rsyslog
export BIN_VALIDATOR=$(which solana-validator); \
wget --limit-rate=400M --trust-server-names https://api.mainnet-beta.solana.com/snapshot.tar.bz2 -P /root/solana/validator-ledger && sleep 30 &&
wget --limit-rate=400M --trust-server-names https://api.mainnet-beta.solana.com/incremental-snapshot.tar.bz2 -P /root/solana/validator-ledger &&
${BIN_VALIDATOR} --ledger /root/solana/validator-ledger exit --skip-new-snapshot-check --min-idle-time 30 --max-delinquent-stake 15 &&
systemctl daemon-reload && systemctl restart solana;
export BIN_VALIDATOR=$(which solana-validator); \
wget --limit-rate=400M --trust-server-names https://api.mainnet-beta.solana.com/incremental-snapshot.tar.bz2 -P /root/solana/validator-ledger &&
${BIN_VALIDATOR} --ledger /root/solana/validator-ledger exit --skip-new-snapshot-check --min-idle-time 60 --max-delinquent-stake 15 &&
systemctl daemon-reload && systemctl restart solana;
export BIN_VALIDATOR=$(which solana-validator); \
${BIN_VALIDATOR} --ledger /root/solana/validator-ledger exit --min-idle-time 60 --max-delinquent-stake 15 &&
systemctl daemon-reload && systemctl restart solana;
wget --limit-rate=400M --trust-server-names https://api.mainnet-beta.solana.com/snapshot.tar.bz2 -P /root/solana/validator-ledger && sleep 30 &&
wget --limit-rate=400M --trust-server-names https://api.mainnet-beta.solana.com/incremental-snapshot.tar.bz2 -P /root/solana/validator-ledger
export BIN_VALIDATOR=$(which solana-validator); \
${BIN_VALIDATOR} --ledger /root/solana/validator-ledger exit --skip-new-snapshot-check --min-idle-time 60 --max-delinquent-stake 15 && systemctl daemon-reload && systemctl restart solana;
export BIN_VALIDATOR=$(which solana-validator); \
curl -s https://raw.githubusercontent.com/c29r3/solana-snapshot-finder/main/snapshot-finder.py --output /root/snapshot-finder.py \
&& python3 /root/snapshot-finder.py --snapshot_path /root/solana/validator-ledger/remote/ \
--with_private_rpc \
--measurement_time 10 \
--min_download_speed 100 \
--max_latency 100 \
--max_snapshot_age 800 \
-r https://api.mainnet-beta.solana.com && \
${BIN_VALIDATOR} --ledger /root/solana/validator-ledger exit --skip-new-snapshot-check --min-idle-time 60 --max-delinquent-stake 15 && \
systemctl daemon-reload && systemctl restart solana;
# # ${BIN_VALIDATOR} --ledger ${HOME}/solana/validator-ledger wait-for-restart-window --min-idle-time 60 --max-delinquent-stake 15 && systemctl daemon-reload && systemctl restart solana
# # ${BIN_VALIDATOR} --ledger /mnt/validator-ledger wait-for-restart-window --min-idle-time 60 --max-delinquent-stake 15 && systemctl daemon-reload && systemctl restart solana
solana catchup /root/solana/validator-keypair.json http://127.0.0.1:8899
solana validators -r -n | grep "$(solana-keygen pubkey /root/solana/validator-keypair.json)"
#######################################################################################################################
export TAG=v2.1.11
export TAG1=v2.1.11-jito
sh -c "$(curl -sSfL https://release.anza.xyz/$TAG/install)"
sh -c "$(curl -sSfL https://release.jito.wtf/$TAG1/install)"
#install
git clone https://github.com/jito-foundation/jito-solana.git --recurse-submodules; \
cd jito-solana;
git reset --hard
git pull || true
git checkout tags/$TAG
git submodule update --init --recursive
RUSTFLAGS="-C target-cpu=native" CI_COMMIT=$(git rev-parse HEAD) scripts/cargo-install-all.sh --validator-only ~/.local/share/solana/install/releases/"$TAG"
ln -sfn ~/.local/share/solana/install/releases/"$TAG"/* ~/.local/share/solana/install/releases/jito
ls -l ~/.local/share/solana/install/releases/jito
/root/.local/share/solana/install/releases/jito/bin/agave-validator --version
echo 'if $programname == "agave-validator" then stop' > /etc/rsyslog.d/01-solana-remove.conf && sudo systemctl restart rsyslog
https://telegra.ph/Deez-relayer-03-24
Поставить Jito на валидатора
# Сгенерировать ключи для релеера и добавить их в wl в дискорде
export NEWUSER=relayer
adduser $NEWUSER; \
usermod -aG sudo $NEWUSER; \
echo "$NEWUSER ALL=(ALL) NOPASSWD: ALL" | sudo EDITOR='tee -a' visudo; \
sudo service ssh restart; \
su - $NEWUSER
mkdir $HOME/.keys
openssl genrsa --out $HOME/.keys/private.pem
openssl rsa --in $HOME/.keys/private.pem --pubout --out $HOME/.keys/public.pem
sudo su - root
solana-keygen new --no-bip39-passphrase --outfile /home/relayer/.keys/relayer-keypair.json
solana-keygen pubkey /home/relayer/.keys/relayer-keypair.json
chown -R relayer:relayer /home/relayer/.keys/
# Find closest engine JITO https://jito-labs.gitbook.io/mev/searcher-resources/block-engine/mainnet-addresses
for entry in "amsterdam.mainnet.block-engine.jito.wtf Amsterdam" "frankfurt.mainnet.block-engine.jito.wtf Frankfurt" "ny.mainnet.block-engine.jito.wtf NY" "tokyo.mainnet.block-engine.jito.wtf Tokyo" "slc.mainnet.block-engine.jito.wtf"; do
hostname="${entry%% *}"
city="${entry##* }"
echo -n "Ping $hostname ($city) - "
ping -c 4 "$hostname" | grep 'avg' | awk -F'/' '{print $5 " ms"}'
done
# Building relayer
su relayer
cd $HOME
curl https://sh.rustup.rs -sSf | sh
source "$HOME/.cargo/env"
sudo apt-get install protobuf-compiler clang llvm
curl -s https://gist.githubusercontent.com/AlekseiOvchinnikov13/c0f553bb4d5af7280140a76d9ee00496/raw/env.sh --output env.sh; \
sudo nano env.sh
curl -s https://gist.githubusercontent.com/AlekseiOvchinnikov13/c0f553bb4d5af7280140a76d9ee00496/raw/relayer_build_deez.sh --output relayer_build_deez.sh && bash relayer_build_deez.sh
curl -s https://gist.githubusercontent.com/AlekseiOvchinnikov13/c0f553bb4d5af7280140a76d9ee00496/raw/relayer_service_deez.sh --output relayer_service_deez.sh && bash relayer_service_deez.sh
sudo nano /etc/systemd/system/relayer.service
# --allowed-validators
solana-keygen pubkey /root/solana/validator-keypair.json
jito-transaction-relayer -V
netstat -tn | grep 8374
ESTABLISHED
sudo systemctl status relayer.service
sudo systemctl daemon-reload; sudo systemctl restart relayer.service; sudo journalctl -u relayer.service -f --no-hostname
sudo systemctl daemon-reload; sudo systemctl stop relayer.service; sudo journalctl -u relayer.service -f --no-hostname
solana-keygen pubkey /home/relayer/.keys/relayer-keypair.json
cd /home/relayer/deez-relayer
git fetch --all \
git reset --hard origin/master \
git pull \
git submodule update -i -r \
cargo b --release -j 4
sudo systemctl daemon-reload; sudo systemctl restart relayer.service; sudo journalctl -u relayer.service -f --no-hostname
sudo systemctl daemon-reload; sudo systemctl restart relayer.service; sudo journalctl -u relayer.service -f --no-hostname | grep 'Current epoch connectivity:'
#!/bin/bash
BIN_PATH=$(which solana)
BLOCK_ENGINE_URL="https://ny.mainnet.block-engine.jito.wtf"
#RELAYER_TAG=v0.1.15
#!/bin/bash
. ./env.sh
#TAG=${RELAYER_TAG}
# build
cd ~/
rm -rf ~/deez-relayer
#rm -rf ~/jito-relayer
git clone https://github.com/deez-labs/deez-relayer.git
#git clone https://github.com/jito-foundation/jito-relayer.git
#cd ~/jito-relayer/jito-protos/protos/ && git clone https://github.com/jito-labs/mev-protos.git
#mv mev-protos/* ./
cd ~/deez-relayer
#cd ~/jito-relayer
git pull
git submodule update -i -r
cargo b --release -j 4
#!/bin/bash
. ./env.sh
SERVICE_NAME='relayer'
##### create service file #####
cat > ${HOME}/${SERVICE_NAME}.service <<EOF
[Unit]
Description=Jito relayer
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=${USER}
LimitNOFILE=2048000
Environment=SOLANA_METRICS_CONFIG="host=http://metrics.jito.wtf:8086,db=relayer,u=relayer-operators,p=jito-relayer-write"
Environment="BLOCK_ENGINE_URL=${BLOCK_ENGINE_URL}"
Environment="GRPC_BIND_IP=127.0.0.1"
# Environment=DISABLE_MEMPOOL=true
ExecStart=${HOME}/deez-relayer/target/release/jito-transaction-relayer \
--rpc-servers "http://127.0.0.1:8899 https://api.mainnet-beta.solana.com" \
--websocket-servers "ws://127.0.0.1:8900 ws://api.mainnet-beta.solana.com" \
--block-engine-url ${BLOCK_ENGINE_URL} \
--keypair-path ${HOME}/.keys/relayer-keypair.json \
--signing-key-pem-path ${HOME}/.keys/private.pem \
--verifying-key-pem-path ${HOME}/.keys/public.pem \
--allowed-validators <identity key> \
--public-ip $(curl -s checkip.amazonaws.com) \
--grpc-bind-ip=127.0.0.1 \
--packet-delay-ms=200
[Install]
WantedBy=multi-user.target
EOF
# --allowed-validators ${allowed_validators} \
sudo mv $HOME/${SERVICE_NAME}.service /etc/systemd/system/${SERVICE_NAME}.service
sudo systemctl daemon-reload
sudo systemctl enable ${SERVICE_NAME}.service
# create aliases
ALIAS=$(cat ~/.bashrc | grep ${SERVICE_NAME})
if [ -z "${ALIAS}" ]
then
echo "" >> ~/.bashrc
echo "# ${SERVICE_NAME} alias" >> ~/.bashrc
echo "alias ${SERVICE_NAME}start='sudo systemctl start ${SERVICE_NAME}.service'" >> ~/.bashrc
echo "alias ${SERVICE_NAME}stop='sudo systemctl stop ${SERVICE_NAME}.service'" >> ~/.bashrc
echo "alias ${SERVICE_NAME}restart='sudo systemctl restart ${SERVICE_NAME}.service'" >> ~/.bashrc
echo "alias ${SERVICE_NAME}status='sudo systemctl status ${SERVICE_NAME}.service'" >> ~/.bashrc
echo "alias ${SERVICE_NAME}logs='sudo journalctl -u ${SERVICE_NAME} -f --no-hostname | grep -v solana_metrics'" >> ~/.bashrc
else
echo "alias already added"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment