How to run the PRYZM Node? A full guide

Introduction To PRYZM

PRYZM is a layer-1 blockchain designed specifically to focus on the management, harvesting, and utilization of yield within decentralized finance (DeFi) and proof-of-stake (PoS) environments. It operates utilizing the Cosmos Software Development Kit (SDK) and Tendermint consensus mechanism. Key aspects of PRYZM include:

  • Separation of yield from yield-bearing assets through built-in features at the chain level.

  • Support for innovative decentralized applications (dApps) that leverage cash flows derived from these assets.

  • A hub and spokes model in version 2, which controls outposts across different chains.

  • Asset refraction, converting liquid staking derivatives (LSDs) of yield-bearing assets (YBAs) like ETH, ATOM, DOT, MATIC, OSMO, or LUNA into principal tokens (PT) and yield tokens (YT), enabling users to earn staking rewards without long-term asset lock-ups and avoiding volatile interest rates when raising capital.

  • An automated market maker (AMM)-based pricing mechanism for YTs and PTs.

  • Alignment with evolving market trends to potentially transform DeFi towards more complex financial instruments similar to those found in traditional finance (TradFi).

PRYZM also offers user-friendly tools and services aimed at simplifying the process of earning, managing, and protecting yield, including swapping variable staking yield for fixed yield, taking leveraged exposure to asset yields without liquidation or funding concerns, and instantly converting future yield into stablecoins to mitigate price volatility.

How to run the PRYZM Node?

First thing first, Node Requirements:

Order & Configure your VPS

Establishing your node can be efficiently done through two primary methods: setting it up on a personal computer or opting for a Virtual Private Server (VPS).

A VPS is particularly suitable for tasks like managing websites, applications, or running nodes, thanks to its dedicated resources and internet connectivity.

For those looking into a VPS solution, Contabo comes highly recommended. This provider is known for offering reliable VPS rentals at competitive prices. To accommodate the needs of a node, especially for long-term operation, it's wise to select a plan with a minimum of 100 GB of storage.

We recommend considering the Cloud VPS M or a higher-tier plan from Contabo for your setup. This option ensures you have ample storage for your node's data and the robust performance needed for efficient operation. Explore more about what Contabo offers by visiting their website: https://contabo.com/en/

Choose Cloud VPS M or Higher

  1. Select Payment Term

  2. Region — Germany

  3. Storage Type -400 GB SSDx

  4. Image — Go to Apps & Panels > Docker

Apps & Panels > Docker

  1. Log in & Set a Password for your Server

Set a password

  1. Object Storage — Default

  2. Networking — Default

  3. Add-Ons — Default

After finalizing your payment, you’ll get an email verifying your purchase. Hold tight for a follow-up email, which will provide details about your VPS, encompassing your access credentials.

You’ll need to download and use Putty, a tool that enables you to securely connect to your VPS and utilize its functionalities. Download it here https://www.putty.org/

Enter IP ADDRESS

Enter the VPS IP Address then Click OPEN

Login : root

Password: (Enter your chosen password)

Log in using the password you set earlier.

Preparations

  1. Install essential Components

sudo apt -q update
sudo apt -qy install curl git jq lz4 build-essential fail2ban ufw
sudo apt -qy upgrade
  1. Install Docker

sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://download.docker.com/linux/ubuntu> $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && sudo apt update && sudo apt-cache policy docker-ce && sudo apt install -y docker-ce
  1. Install Docker Compose

mkdir -p ~/.docker/cli-plugins/ && curl -SL <https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64> -o ~/.docker/cli-plugins/docker-compose && chmod +x ~/.docker/cli-plugins/docker-compose
  1. Install GO

sudo rm -rf /usr/local/go
curl -L <https://go.dev/dl/go1.21.6.linux-amd64.tar.gz> | sudo tar -xzf - -C /usr/local
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bash_profile
source .bash_profile
  1. Configure Moniker

MONIKER="<your-moniker-name>"

sample:

MONIKER="EkkoNodes"
  1. Download Binaries

cd $HOME
wget <https://storage.googleapis.com/pryzm-zone/core/0.11.1/pryzmd-0.11.1-linux-amd64>
sudo mv pryzmd-0.11.1-linux-amd64 pryzmd
sudo chmod +x pryzmd
  1. Prepare Binaries for Cosmovisor

mkdir -p $HOME/.pryzm/cosmovisor/genesis/bin
mv pryzmd $HOME/.pryzm/cosmovisor/genesis/bin/
  1. Create symlinks

sudo ln -s $HOME/.pryzm/cosmovisor/genesis $HOME/.pryzm/cosmovisor/current -f
sudo ln -s $HOME/.pryzm/cosmovisor/current/bin/pryzmd /usr/local/bin/pryzmd -f
  1. Set up Cosmovisor

go install cosmossdk.io/tools/cosmovisor/cmd/[email protected]
  1. Create a service

sudo tee /etc/systemd/system/pryzm.service > /dev/null << EOF
[Unit]
Description=pryzm node service
After=network-online.target

[Service]
User=$USER
ExecStart=$(which cosmovisor) run start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="DAEMON_HOME=$HOME/.pryzm"
Environment="DAEMON_NAME=pryzmd"
Environment="UNSAFE_SKIP_BACKUP=true"

[Install]
WantedBy=multi-user.target
EOF
  1. Enable Service

sudo systemctl daemon-reload
sudo systemctl enable pryzm

Initialize the Node

  1. Setting Node config

pryzmd config chain-id indigo-1
pryzmd config keyring-backend test
pryzmd config node tcp://localhost:23257
  1. Initialize Node

pryzmd init $MONIKER --chain-id indigo-1
  1. Download Genesis & Addrbook

curl -Ls <https://snap.nodex.one/pryzm-testnet/genesis.json> > $HOME/.pryzm/config/genesis.json
curl -Ls <https://snap.nodex.one/pryzm-testnet/addrbook.json> > $HOME/.pryzm/config/addrbook.json
  1. Configure Seeds

sed -i -e "s|^seeds *=.*|seeds = \\"[email protected]:23210\\"|" $HOME/.pryzm/config/config.toml
  1. Configure Gas Prices

sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \\"0.015upryzm,0.01factory/pryzm15k9s9p0ar0cx27nayrgk6vmhyec3lj7vkry7rx/uusdsim\\"|" $HOME/.pryzm/config/app.toml
  1. Prunning Setting

sed -i \\
  -e 's|^pruning *=.*|pruning = "custom"|' \\
  -e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \\
  -e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' \\
  -e 's|^pruning-interval *=.*|pruning-interval = "19"|' \\
  $HOME/.pryzm/config/app.toml
  1. Custom Port

sed -i -e "s%^proxy_app = \\"tcp://127.0.0.1:26658\\"%proxy_app = \\"tcp://127.0.0.1:23258\\"%; s%^laddr = \\"tcp://127.0.0.1:26657\\"%laddr = \\"tcp://127.0.0.1:23257\\"%; s%^pprof_laddr = \\"localhost:6060\\"%pprof_laddr = \\"localhost:23260\\"%; s%^laddr = \\"tcp://0.0.0.0:26656\\"%laddr = \\"tcp://0.0.0.0:23256\\"%; s%^prometheus_listen_addr = \\":26660\\"%prometheus_listen_addr = \\":23266\\"%" $HOME/.pryzm/config/config.toml
sed -i -e "s%^address = \\"tcp://0.0.0.0:1317\\"%address = \\"tcp://0.0.0.0:23217\\"%; s%^address = \\":8080\\"%address = \\":23280\\"%; s%^address = \\"0.0.0.0:9090\\"%address = \\"0.0.0.0:23290\\"%; s%^address = \\"0.0.0.0:9091\\"%address = \\"0.0.0.0:23291\\"%; s%:8545%:23245%; s%:8546%:23246%; s%:6065%:23265%" $HOME/.pryzm/config/app.toml
  1. Download Snapshots

curl -L <https://snap.nodex.one/pryzm-testnet/pryzm-latest.tar.lz4> | tar -Ilz4 -xf - -C $HOME/.pryzm
[[ -f $HOME/.pryzm/data/upgrade-info.json ]] && cp $HOME/.pryzm/data/upgrade-info.json $HOME/.pryzm/cosmovisor/genesis/upgrade-info.json
  1. Start Service

sudo systemctl start pryzm
  1. Check Node Status

Check logs

sudo journalctl -u pryzm -f -o cat

Ctrl + C or q to go back

Node Sync Status

pryzmd status | jq .SyncInfo

Install Pryzm Feeder

1.a Create Pryzm Wallet

pryzmd keys add feeder

1.b Recover Wallet (if you already have an existing wallet)

pryzmd keys add feeder --recover
  1. Configure Przym Feeder

Download files

cd $HOME && mkdir -p $HOME/pryzmfeeder && cd $HOME/pryzmfeeder && wget <https://storage.googleapis.com/pryzm-zone/feeder/config.yaml> <https://storage.googleapis.com/pryzm-zone/feeder/init.sql> <https://storage.googleapis.com/pryzm-zone/feeder/docker-compose.yml>
  1. Pull Przym feeder image

docker pull europe-docker.pkg.dev/pryzm-zone/core/pryzm-feeder:0.3.4
  1. Install Postgres

sudo apt install postgresql

Press Y to continue

  1. Move init.sql file to tmp directory

mv init.sql /tmp
  1. Enable PostgreSQL access

sudo -u postgres -i psql -c "alter user postgres with password 'postgres';" -c "\\q" && sudo -u postgres -i psql -c "\\i /tmp/init.sql"
  1. Create feeder folder

cd
mkdir ~/feeder
  1. Go to feeder folder

cd feeder
  1. Move config yaml file to feeder folder

mv -v ~/pryzmfeeder/config.yaml ~/feeder
  1. Config yaml file

Before we proceed, we need the following details:

  • feeder: "your_pryzm_feeder_wallet_address"

  • feederMnemonic: "your_pryzm_feeder_mnemonic"

  • validator: "your_valoper_address"

  • rpcURL: "<http://localhost:23657>" - as is (do not change into your vpsIP)

  • gasPrice: "0.015upryzm"

To get your Validator Address, enter this command

pryzmd keys show feeder --bech val -a

Copy your pryzmvaloper address and save it for later.

Now let’s configure the Yaml file.

Config yaml file

nano config.yaml

example:

Ctrl X + Y + ENTER to save & exit

  1. Node Sync Status

Let’s check the Sync Status of our Node:

pryzmd status | jq .SyncInfo

Since catching up — is still “true”, we will wait for this to become false before we create our validator. ( Check recent blocks here: )

OPTION: To speed up the process, we will download a snapshot Skynode

Download Snapshot

cd
#Stop the service and reset the data
sudo systemctl stop pryzm
cp $HOME/.pryzm/data/priv_validator_state.json $HOME/.pryzm/priv_validator_state.json.backup
rm -rf $HOME/.pryzm/data

#Download latest snapshot
curl -L <https://snap.skynodejs.net/pryzm/pryzm.tar.lz4|> tar -Ilz4 -xf - -C $HOME/.pryzm
mv $HOME/.pryzm/priv_validator_state.json.backup $HOME/.pryzm/data/priv_validator_state.json

#Restart the service and check the log
sudo systemctl restart pryzm && sudo journalctl -u pryzm -f -o cat

After Downloading you’ll see this logs. (Don’t mind the errors, those are normal)

Ctrl+C or Press Q to go back

then check node status again

pryzmd status | jq .SyncInfo

Now we can see that the latest block height increased to ‘1006839’. We will wait for this the ‘catching up’ status to become false to proceed on creating our validator. This usually takes 30mins-1hr depending on your machine.

While waiting, request some testnet funds here. https://testnet.pryzm.zone/faucet

Sync is complete, we can now proceed on creating our Validator.

  1. Create Validator

pryzmd tx staking create-validator \\
  --pubkey $(pryzmd tendermint show-validator) \\
  --amount 1000000upryzm \\
  --moniker "meow" \\
  --identity "" \\
  --details "put some details here" \\
  --website "testnet.pryzm.zone" \\
  --security-contact "your contact info" \\
  --chain-id indigo-1 \\
  --from <accountname> \\
  --commission-rate "0.05"\\
  --commission-max-rate "0.20" \\
  --commission-max-change-rate "0.01" \\
  --min-self-delegation "1" \\
  --gas-adjustment 1.4 \\
  --gas auto \\
  --gas-prices 0.015upryzm

Edit the ff:

  • moniker

  • details

  • website

  • contact info

  • from<accountname>→ feeder

sample:

pryzmd tx staking create-validator \\
  --pubkey $(pryzmd tendermint show-validator) \\
  --amount 1000000upryzm \\
  --moniker "EkkoNodes" \\
  --identity "" \\
  --details "Making Node Setup Effortless" \\
  --website "<https://medium.com/@ekko.nodes>" \\
  --security-contact "<https://twitter.com/EkkoNodes>" \\
  --chain-id indigo-1 \\
  --from feeder \\
  --commission-rate "0.05"\\
  --commission-max-rate "0.20" \\
  --commission-max-change-rate "0.01" \\
  --min-self-delegation "1" \\
  --gas-adjustment 1.4 \\
  --gas auto \\
  --gas-prices 0.015upryzm

Press Y then ENTER

  1. Link Validator to Feeder

pryzmd tx oracle delegate-feed-consent [your_pryzm_feeder_wallet_address] --fees 2000factory/pryzm15k9s9p0ar0cx27nayrgk6vmhyec3lj7vkry7rx/uusdsim,3000upryzm --from feeder

sample:

  • edit [your_pryzm_feeder_wallet_address]

pryzmd tx oracle delegate-feed-consent pryzm150689cgesdkj60x2wp88qt94gdfrpchu9w9dm6 --fees 2000factory/pryzm15k9s9p0ar0cx27nayrgk6vmhyec3lj7vkry7rx/uusdsim,3000upryzm --from feeder

Press Y then ENTER

Congrats. You now have your Validator. Check it here: https://testnet.chainsco.pe/pryzm/validators

Bonus!

Participate in their public Testnet for a potential reward. 👀