Skip to content

Instantly share code, notes, and snippets.

@CrazySerGo
Last active March 12, 2024 11:23
Show Gist options
  • Save CrazySerGo/263265ec8aeeeeed75b7c7ba64aefda6 to your computer and use it in GitHub Desktop.
Save CrazySerGo/263265ec8aeeeeed75b7c7ba64aefda6 to your computer and use it in GitHub Desktop.
Jito relayer

Highly important - validator MUST be running with these keys before any requests will be done to RPC

--account-index program-id \
--account-index-include-key AddressLookupTab1e1111111111111111111111111 \

I use separate user account. All steps will be done under it.

You can follow Jito's docs or create your own user.

su - relayer

Prepare environment

mkdir $HOME/.keys
openssl genrsa --out $HOME/.keys/private.pem
openssl rsa --in $HOME/.keys/private.pem --pubout --out $HOME/.keys/public.pem

You have solana-keygen next to solana

solana-keygen new --no-bip39-passphrase --outfile $HOME/.keys/relayer-keypair.json

Prerequisites

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

Build binary

cd $HOME
git clone https://github.com/jito-foundation/jito-relayer.git
cd $HOME/jito-relayer
git submodule update -i -r
# You may need git checkout to set necessary version
cargo b --release
$HOME/jito-relayer/target/release/jito-transaction-relayer --version

Create service

sudo tee /etc/systemd/system/relayer.service > /dev/null <<EOF
[Unit]
Description=Solana transaction relayer
Requires=network-online.target chrony.service
After=network-online.target chrony.service

[Service]
Environment="RUST_LOG=info"
Environment="SOLANA_METRICS_CONFIG=host=http://metrics.jito.wtf:8086,db=relayer,u=relayer-operators,p=jito-relayer-write"
Environment="BLOCK_ENGINE_URL=https://ny.mainnet.block-engine.jito.wtf"
Environment="PUBLIC_IP=$(wget -q -O - ipinfo.io/ip)"
Environment="GRPC_BIND_IP=127.0.0.1"
Environment="RELAYER_PATH=$($HOME/jito-relayer/target/release/jito-transaction-relayer)"
ConditionPathExists=$HOME/.keys/relayer-keypair.json
ConditionPathExists=$HOME/.keys/private.pem
ConditionPathExists=$HOME/.keys/public.pem

Type=exec
User=$USER
Restart=on-failure

# I had some issues with variable so temporary put full PATH for binary
ExecStart=/home/relayer/jito-relayer/target/release/jito-transaction-relayer \
--keypair-path=$HOME/.keys/relayer-keypair.json \
--signing-key-pem-path=$HOME/.keys/private.pem \
--verifying-key-pem-path=$HOME/.keys/public.pem \
--block-engine-url \${BLOCK_ENGINE_URL} \
--public-ip \${PUBLIC_IP} \
--grpc-bind-ip \${GRPC_BIND_IP}  # seems 127.0.0.1 should be enough for private mode

[Install]
WantedBy=multi-user.target
EOF

Add firewall rules

sudo ufw allow 11228,11229/udp

Update Solana service file

# Update RELAYER_URL
Environment="RELAYER_URL=http://127.0.0.1:11226"

# Add most important keys
--account-index program-id \
--account-index-include-key AddressLookupTab1e1111111111111111111111111

# Add --full-rpc-api if you don't have it

Also you can use

# https://jito-labs.gitbook.io/mev/searcher-resources/block-engine/mainnet-addresses
Environment="RELAYER_URL=http://ny.mainnet.relayer.jito.wtf:8100"

and later change it with

solana-validator -l /path/to/solana/ledger/ set-relayer-config --relayer-url http://127.0.0.1:11226

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment