🔌 Installation
1️⃣ Installation packages and dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install curl git wget htop tmux build-essential jq make lz4 gcc unzip -y
➡️ Go Installation
cd $HOME
VER="1.23.0"
wget "https://golang.org/dl/go$VER.linux-amd64.tar.gz"
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "go$VER.linux-amd64.tar.gz"
rm "go$VER.linux-amd64.tar.gz"
[ ! -f ~/.bash_profile ] && touch ~/.bash_profile
echo "export PATH=$PATH:/usr/local/go/bin:~/go/bin" >> ~/.bash_profile
source $HOME/.bash_profile
[ ! -d ~/go/bin ] && mkdir -p ~/go/bin
2️⃣ Install node
echo "export PELL_PORT="57"" >> $HOME/.bash_profile
source $HOME/.bash_profile
mkdir -p $HOME/.pellcored/cosmovisor/upgrades/v1.3/bin
rm -rf ./pellcored
wget -O pellcored https://github.com/0xPellNetwork/network-config/releases/download/v1.3.0/pellcored-1.3.0-linux-amd64
chmod +x ./pellcored
sudo mv ./pellcored $HOME/.pellcored/cosmovisor/upgrades/v1.3/bin/pellcored
sudo ln -sfn $HOME/.pellcored/cosmovisor/upgrades/v1.3 $HOME/.pellcored/cosmovisor/current
sudo ln -sfn $HOME/.pellcored/cosmovisor/current/bin/pellcored /usr/local/bin/pellcored
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.6.0
cd
mkdir -p /root/.pellcored/lib
wget "https://github.com/CosmWasm/wasmvm/releases/download/v2.1.2/libwasmvm.$(uname -m).so" -O "$HOME/.pellcored/lib/libwasmvm.$(uname -m).so"
echo "alias pellcored='LD_LIBRARY_PATH=/root/.pellcored/lib:\$LD_LIBRARY_PATH /usr/local/bin/pellcored'" >> ~/.bashrc
source ~/.bashrc
➡️ Create a service
sudo tee /etc/systemd/system/pellcored.service > /dev/null <<EOF
[Unit]
Description=pellcore node service
After=network-online.target
[Service]
User=$USER
ExecStart=$(which cosmovisor) run start --chain-id ignite_186-1
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="DAEMON_HOME=$HOME/.pellcored"
Environment="DAEMON_NAME=pellcored"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:$HOME/.pellcored/cosmovisor/current/bin"
Environment="LD_LIBRARY_PATH=$HOME/.pellcored/lib:$LD_LIBRARY_PATH"
[Install]
WantedBy=multi-user.target
EOF
➡️ Let’s activate it
sudo systemctl daemon-reload
sudo systemctl enable pellcored
➡️ Initialize the node
pellcored config set client chain-id ignite_186-1
pellcored config set client keyring-backend test
pellcored config set client node tcp://localhost:${PELL_PORT}657
pellcored init "Moniker-Name" --chain-id ignite_186-1
➡️ Genesis addrbook and others
rm -rf /root/.pellcored/config/app.toml
wget https://raw.githubusercontent.com/0xPellNetwork/network-config/refs/heads/main/testnet/app.toml -O $HOME/.pellcored/config/app.toml
rm -rf /root/.pellcored/config/config.toml
wget https://raw.githubusercontent.com/0xPellNetwork/network-config/refs/heads/main/testnet/config.toml -O $HOME/.pellcored/config/config.toml
sed -i 's/^moniker = .*/moniker = "Moniker-Name"/' $HOME/.pellcored/config/config.toml
rm -rf /root/.pellcored/config/genesis.json
wget https://raw.githubusercontent.com/0xPellNetwork/network-config/refs/heads/main/testnet/genesis.json -O $HOME/.pellcored/config/genesis.json
curl https://raw.githubusercontent.com/MictoNode/pellnetwork/refs/heads/main/addrbook.json -o $HOME/.pellcored/config/addrbook.json
➡️ Port
sed -i.bak -e "s%:26658%:${PELL_PORT}658%g;
s%:26657%:${PELL_PORT}657%g;
s%:6060%:${PELL_PORT}060%g;
s%:26656%:${PELL_PORT}656%g;
s%^external_address = \"\"%external_address = \"$(wget -qO- eth0.me):${PELL_PORT}656\"%;
s%:26660%:${PELL_PORT}660%g" $HOME/.pellcored/config/config.toml
sed -i.bak -e "s%:1317%:${PELL_PORT}317%g;
s%:8080%:${PELL_PORT}080%g;
s%:9090%:${PELL_PORT}090%g;
s%:9091%:${PELL_PORT}091%g;
s%:8545%:${PELL_PORT}545%g;
s%:8546%:${PELL_PORT}546%g;
s%:6065%:${PELL_PORT}065%g" $HOME/.pellcored/config/app.toml
➡️ Peers and Seeds
SEEDS="d52c32a6a8510bdf0d33909008041b96d95c8408@34.87.39.12:57656,9b955d07f05b02b3d622f9cb7a0e6cfecd719985@34.87.47.193:57656"
PEERS="28c0fcd184c31ac7f3e2b3a91ae60dedc086b0c3@94.130.204.227:26656,e8a6c31a15b93f69b9b55b3f6f5929a86eb9beb6@157.173.192.45:26656,d003cb808ae91bad032bb94d19c922fe094d8556@65.108.193.254:58656,4efd5164f02c3af4247fc0292922af8d08a46ae6@51.89.1.16:26656,407c7229a207a0c932a56ab3a979fc2312751390@162.19.240.7:28656,a7704bf5ade6e8ce27c213451ccf64c133ca8ccf@94.72.102.207:26656,bf2fb3f61cdc246ab1f1b8dc46fba1bd81a47a43@157.173.202.246:26656,9fa8f667ad165a132f7bd3bd03d903c9c71e721a@77.91.65.114:26656,276f7afbc85837910d3744904136b3e699a4ae42@5.9.80.109:40656,e7a16d32896009781b323590695d950acbc9c809@157.173.115.225:26656,2b9b56a7361f042740d880f22dad1f5b2da131bd@149.102.146.105:26656,c89ed4d2ff5cc1761d01ad40837c8fcbf2be79bb@149.102.159.91:26656,fade91edc6a41fa1a6c44ca426e761efba5ac221@158.220.92.33:26656,d52c32a6a8510bdf0d33909008041b96d95c8408@34.87.39.12:26656,dee1af9137838e4b546d379cff5de73a94f7d7d4@154.38.174.32:26656,969eab8b58e22ce24ce06c653f0a352c576d4d8a@65.108.199.62:58656,1847c58942caf39b00ea0e58364cb3bf1f68a8af@38.242.220.212:26656,d6057e6074afb87683494c60f32dfa678a291a5a@38.242.134.127:26656,4b821045cab0cb9639cfdaa7e8ee5418ce2bcfc9@38.242.210.216:26656,4d3140c0ebc78d07cff5a172620e36fbece88b63@45.151.122.167:26656,3fd4174c3680bbe70d689d9bab30bdb3a706523d@188.245.60.19:26656,b142265d3c434251327a1ac8fbb83bd8cb0b35aa@86.48.5.21:26656,452af765413defd1c8ce65d62ef6a3b54a1b62d8@89.250.65.225:26656,85ec30ac1a8d9a4ea9eae4ff3b6cdd9d74fe7539@149.102.136.15:26656,51c6ce0210a119f654482e6f4f9d119497e4f7e9@162.55.94.173:4050,79627094e05b0d82218baa1d299e0f273e37e2ad@38.242.137.219:26656,89fdc7c036f91f76ce5af12bfae2c23dd60a12a7@158.220.84.151:26656,6758b5a1d13547a67fa2a5ed74941e73e6a67f21@157.173.116.4:26656,b43c089d0af318df7279670efd5c3639ca323d31@75.119.157.58:26656,a43cefbaf632049eb9c6a4c6789535db2df77a48@157.173.115.234:26656,61aa844be524974e5898768d29d7e4f7b5a62e4e@86.48.1.110:26656,ef0669a6c92253275df6c0e3b3eb966e76750b00@38.242.213.219:26656,d4e688dae18e156a19b9c9648e8a7cd61a4708c7@149.102.147.0:26656,3111adbd5d7c9ad619a99e2f2d7bf15b74ea9fff@149.102.138.244:26656,caa49aebe5eac61d2f23a55990ba8c26111a83e5@149.102.136.215:26656,0d346646c58f75dbccd4ef7da0af3043aa8a4d2b@149.102.143.59:26656,c0e92a57b5352890127adf92dbd9aa419e1870cd@38.242.231.182:26656,0ef0f2ea4661771c65a81b492f989ad9be9110fa@188.245.235.232:26656,af4914b8b03eeac5b1bac77c106594b843dd939a@91.108.245.0:26656,5a0bf8ff9ae5d5afb967bbfdcb778dca343477ff@38.242.231.114:26656,f8f4696ce4daef5ce2127775b6982230ea862e26@94.72.102.164:26656,5a993756bc107f49f9751f2ca2f11b5c10458c7d@158.220.84.243:26656,878d92728a3f8823b9004063296780594b6a9d9a@157.173.116.7:26656,9a66f68c0e8bf0df6c103c794b9d315cd5620920@38.242.247.64:26656,1f9e2e07410ce390750b1731d3d3ca4a4e2154e7@194.35.120.148:26656,5f10959cc96b5b7f9e08b9720d9a8530c3d08d19@65.108.75.179:58656,dbd9b474bd89b80fb4358f347067ba8b973402ed@81.0.220.22:57656,30ad730817b26f2c62029db7d6912664361aa772@37.120.191.47:26656,f6f93e32a2d4d2f2ba499846882285133528edea@62.169.16.14:11656"
sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.pellcored/config/config.toml
➡️ Pruning
sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" $HOME/.pellcored/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $HOME/.pellcored/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"10\"/" $HOME/.pellcored/config/app.toml
➡️ Indexer
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.pellcored/config/config.toml
➡️ Gas Settings
sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "0apell"|g' $HOME/.pellcored/config/app.toml
➡️ Prometheus
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.pellcored/config/config.toml
➡️ Starter Snap (thx Itrocket)
pellcored tendermint unsafe-reset-all --home $HOME/.pellcored --keep-addr-book
SNAPSHOT_URL="https://server-5.itrocket.net/testnet/pell/"
LATEST_SNAPSHOT=$(curl -s $SNAPSHOT_URL | grep -oP 'pell_\d{4}-\d{2}-\d{2}_\d+_snap\.tar\.lz4' | sort | tail -n 1)
if [ -n "$LATEST_SNAPSHOT" ]; then
FULL_URL="${SNAPSHOT_URL}${LATEST_SNAPSHOT}"
if curl -s --head "$FULL_URL" | head -n 1 | grep "200" > /dev/null; then
curl "$FULL_URL" | lz4 -dc - | tar -xf - -C $HOME/.pellcored
else
echo "Snapshot URL not accessible"
fi
else
echo "No snapshot found"
fi
➡️ Let’s get started
sudo systemctl restart pellcored
journalctl -fu pellcored -o cat
➡️ Log Command
sudo journalctl -fu pellcored -o cat
➡️ Create wallet
Warning
Don’t forget to backup the wallet words!
pellcored keys add wallet-name --keyring-backend=test
➡️ Import wallet
pellcored keys add wallet-name --recover --keyring-backend=test
➡️ Create Validator
Reminder
You can’t create a validator without Sync. You must have to catch the latest block.
rm -rf /root/validator.json
cat > ./validator.json << EOF
{
"pubkey": $(pellcored tendermint show-validator),
"amount": "1000000000000000000apell",
"moniker": "<your_node_name>",
"identity": "optional identity signature (ex. UPort or Keybase)",
"website": "validator's (optional) website",
"security": "validator's (optional) security contact email",
"details": "validator's (optional) details",
"commission-rate": "0.1",
"commission-max-rate": "0.2",
"commission-max-change-rate": "0.01",
"min-self-delegation": "1"
}
EOF
pellcored tx staking create-validator ./validator.json --chain-id=ignite_186-1 --fees=0.000001pell --gas=1000000 --from=wallet-name --keyring-backend=test -y
➡️ Delegate to Yourself
pellcored tx staking delegate $(pellcored keys show wallet-name --bech val -a) 1000000000000000000apell --from wallet-name --chain-id ignite_186-1 --fees=0.000001pell --gas=1000000 --keyring-backend=test -y
➡️ Edit Validator
pellcored tx staking edit-validator \
--chain-id ignite_186-1 \
--commission-rate 0.05 \
--new-moniker "validator-name" \
--identity "" \
--details "" \
--website "" \
--security-contact "" \
--from "wallet-name" \
--node http://localhost:${PELL_PORT}657 \
--fees=0.000001pell \
--gas=1000000 \
--keyring-backend=test
-y
➡️ Complete deletion
cd $HOME
sudo systemctl stop pellcored
sudo systemctl disable pellcored
sudo rm -rf /etc/systemd/system/pellcored.service
sudo systemctl daemon-reload
sudo rm -f /usr/local/bin/pellcored
sudo rm -f $(which pellcored)
sudo rm -rf $HOME/.pellcored
sed -i "/PELL_PORT_/d" $HOME/.bash_profile
➡️ Block check
local_height=$(curl -s localhost:${PELL_PORT}657/status | jq -r .result.sync_info.latest_block_height); network_height=$(curl -s https://pell-testnet-rpc.mictonode.com/status | jq -r .result.sync_info.latest_block_height); blocks_left=$((network_height - local_height)); echo "Your node height: $local_height"; echo "Network height: $network_height"; echo "Blocks left: $blocks_left"
- Your node height - the current block of your node
- Network height - the last block of the network
- Blocks left - how many blocks your node has left to sync.