Welcome to validator AlxVoy ANODE.TEAM



Zenrock

Zenrock

Links

Mainnet service

Explorers

Sync

RPC & API

Peers and seeds

Genesis and addrbook

Service script (Install, State-Sync, Snapshot, Delete)

wget -O Zenrock.sh https://anode.team/Zenrock/main/Zenrock.sh && chmod u+x Zenrock.sh && ./Zenrock.sh

Installation

Hardware Requirements

  • Memory 16GB
  • CPUs Quad Core or larger AMD or Intel (amd64) CPU
  • Disk At least 500GB NVMe Storage

Software Requirements

  • Prerequisite: go1.23.2 required. ref
  • Prerequisite: git. ref

Install last binary

sudo curl -Ls https://github.com/Zenrock-Foundation/zrchain/releases/download/v6.3.3/zenrockd -o zenrockd
chmod +x zenrockd
mv zenrockd $HOME/go/bin/zenrockd

if an error has occurred, you can simply download the binary

wget -O $HOME/go/bin/zenrockd https://anode.team/Zenrock/main/zenrockd && chmod +x $HOME/go/bin/zenrockd

Init the config files

zenrockd init [moniker] --chain-id gardia-5
sed -i "s/chain-id = .*/chain-id = \"gardia-5\"/" $HOME/.zrchain/config/client.toml

Create a wallet

zenrockd keys add [wallet_name]

Download genesis and addrbook

curl https://anode.team/Zenrock/main/genesis.json > ~/.zrchain/config/genesis.json
curl https://anode.team/Zenrock/main/addrbook.json > ~/.zrchain/config/addrbook.json

Add peers, seed

SEEDS=""
PEERS="ee7d09ac08dc61548d0e744b23e57436b8c477fc@65.109.93.152:26906"
sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.zrchain/config/config.toml

Add min gas

sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "0urock"|g' $HOME/.zrchain/config/app.toml

Set custom ports

curl -sSL https://anode.team/set-ports.sh | bash -s -- .zrchain

Pruning and indexer

sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" $HOME/.zrchain/config/app.toml 
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $HOME/.zrchain/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"19\"/" $HOME/.zrchain/config/app.toml
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.zrchain/config/config.toml

Create the service file

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

[Service]
User=$USER
ExecStart=$(which zenrockd) start
Restart=always
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

Load service and start

sudo systemctl daemon-reload && sudo systemctl enable zenrockd
sudo systemctl restart zenrockd && journalctl -fu zenrockd -o cat

Create Validator

echo "{\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"$(zenrockd comet show-validator | grep -Po '\"key\":\s*\"\K[^"]*')\"},
    "amount": "1000000urock",
    "moniker": "[moniker]",
    "identity": "[identity]",
    "website": "[website]",
    "details": "[details],
    "security-contact": "[contact]",
    "commission-rate": "0.10",
    "commission-max-rate": "0.20",
    "commission-max-change-rate": "0.01",
    "min-self-delegation": "1"
}" > validator.json
zenrockd tx staking create-validator validator.json \
    --from [wallet_name] \
    --chain-id gardia-4 \
    --fees 500000urock

Sidecar

Create the necessary directories

mkdir -p $HOME/.zrchain/sidecar/bin
mkdir -p $HOME/.zrchain/sidecar/keys

Install last binary

wget -O $HOME/.zrchain/sidecar/bin/zenrock-sidecar https://github.com/Zenrock-Foundation/zrchain/releases/download/v6.3.3/validator_sidecar
chmod +x $HOME/.zrchain/sidecar/bin/zenrock-sidecar

Set a password for sidecar wallets

read -p "Enter password for the keys: " key_pass

Build BLS binary

git clone https://github.com/zenrocklabs/zenrock-validators
cd $HOME/zenrock-validators/utils/keygen/bls/
go mod tidy
go build

Create a BLS key

bls_output_file=$HOME/.zrchain/sidecar/keys/bls.key.json
$HOME/zenrock-validators/utils/keygen/bls/bls --password $key_pass -output-file $bls_output_file

Build ECDSA binary

cd $HOME/zenrock-validators/utils/keygen/ecdsa/
go mod tidy
go build

Create a ECDSA key

ecdsa_output_file=$HOME/.zrchain/sidecar/keys/ecdsa.key.json
ecdsa_creation=$($HOME/zenrock-validators/utils/keygen/ecdsa/ecdsa --password $key_pass -output-file $ecdsa_output_file)
ecdsa_address=$(echo "$ecdsa_creation" | grep "Public address" | cut -d: -f2)

Create a configuration file config.yaml

nano $HOME/.zrchain/sidecar/config.yaml
enabled: true
grpc_port: 9191
zrchain_rpc: "localhost:9190"
state_file: "cache.json"
operator_config: "/root/.zrchain/sidecar/eigen_operator_config.yaml"
network: "testnet"
eth_rpc:
  local: "http://127.0.0.1:8545"
  testnet: "[https://rpc-endpoint-holesky-here]"
  mainnet: "[https://rpc-endpoint-mainnet-here]"
solana_rpc:
  testnet: "https://api.testnet.solana.com"
  mainnet: "https://api.mainnet-beta.solana.com"
proxy_rpc:
  url:
  user:
  password:
neutrino:
  path: "/root/.zrchain/sidecar/neutrino"

Create a configuration file eigen_operator_config.

nano $HOME/.zrchain/sidecar/eigen_operator_config.yaml
register_operator_on_startup: true
register_on_startup: true
production: true

ecdsa_private_key_store_path: /root/.zrchain/sidecar/keys/ecdsa.key.json
bls_private_key_store_path: /root/.zrchain/sidecar/keys/bls.key.json

aggregator_server_ip_port_address: avs-aggregator.gardia.zenrocklabs.io:8090

eth_rpc_url: [ETH MAIN ENDPOINT HERE]
eth_ws_url: [ETH MAIN WSS ENDPOINT HERE]

enable_metrics: true
eigen_metrics_ip_port_address: 0.0.0.0:9292
enable_node_api: true
node_api_ip_port_address: 0.0.0.0:9191

operator_address: [VALUE FROM STEP - ECDSA key]
operator_validator_address: [VALUE FROM STEP - zenvaloper address]

avs_registry_coordinator_address: 0xdc3A1b2a44D18c6B98a1d6c8C042247d2F5AC722
operator_state_retriever_address: 0xdB55356826a16DfFBD86ba334b84fC4E37113d97

token_strategy_addr: 0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9

zr_chain_rpc_address: localhost:9280

metrics_address: 0.0.0.0:9292

service_manager_address: 0xa559CDb9e029fc4078170122eBf7A3e622a764E4

Create the service file

tee /etc/systemd/system/zenrock-sidecar.service > /dev/null <<EOF
[Unit]
Description=Zenrock-sidecar
After=network-online.target

[Service]
User=$USER
ExecStart=$HOME/.zrchain/sidecar/bin/zenrock-sidecar
Restart=on-failure
RestartSec=30
LimitNOFILE=65535
Environment="OPERATOR_BLS_KEY_PASSWORD=$key_pass"
Environment="OPERATOR_ECDSA_KEY_PASSWORD=$key_pass"
Environment="SIDECAR_CONFIG_FILE=$HOME/.zrchain/sidecar/config.yaml"

[Install]
WantedBy=multi-user.target
EOF

Load service and start

sudo systemctl daemon-reload && sudo systemctl enable zenrock-sidecar
sudo systemctl restart zenrock-sidecar && journalctl -fu zenrock-sidecar -o cat

State-Sync

SNAP_RPC=https://zenrock.rpc.t.anode.team:443 && \
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) && \
echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH
wget https://anode.team/unsafe-reset-all.sh && chmod u+x unsafe-reset-all.sh && ./unsafe-reset-all.sh zenrockd .zrchain
peers="ee7d09ac08dc61548d0e744b23e57436b8c477fc@65.109.93.152:26906"
sed -i.bak -e  "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.zrchain/config/config.toml
sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $HOME/.zrchain/config/config.toml
sudo systemctl restart zenrockd && journalctl -fu zenrockd -o cat

Testnet service

Explorers

Sync

RPC & API

Peers and seeds

Genesis and addrbook

Service script (Install, State-Sync, Snapshot, Delete)

wget -O Zenrock.sh https://anode.team/Zenrock/test/Zenrock.sh && chmod u+x Zenrock.sh && ./Zenrock.sh

Installation

Hardware Requirements

  • Memory 16GB
  • CPUs Quad Core or larger AMD or Intel (amd64) CPU
  • Disk At least 500GB NVMe Storage

Software Requirements

  • Prerequisite: go1.23.2 required. ref
  • Prerequisite: git. ref

Install last binary

sudo curl -Ls https://github.com/Zenrock-Foundation/zrchain/releases/download/v6.3.3/zenrockd -o zenrockd
chmod +x zenrockd
mv zenrockd $HOME/go/bin/zenrockd

if an error has occurred, you can simply download the binary

wget -O $HOME/go/bin/zenrockd https://anode.team/Zenrock/test/zenrockd && chmod +x $HOME/go/bin/zenrockd

Init the config files

zenrockd init [moniker] --chain-id gardia-5
sed -i "s/chain-id = .*/chain-id = \"gardia-5\"/" $HOME/.zrchain/config/client.toml

Create a wallet

zenrockd keys add [wallet_name]

Download genesis and addrbook

curl https://anode.team/Zenrock/test/genesis.json > ~/.zrchain/config/genesis.json
curl https://anode.team/Zenrock/test/addrbook.json > ~/.zrchain/config/addrbook.json

Add peers, seed

SEEDS=""
PEERS="ee7d09ac08dc61548d0e744b23e57436b8c477fc@65.109.93.152:26906"
sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.zrchain/config/config.toml

Add min gas

sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "0urock"|g' $HOME/.zrchain/config/app.toml

Set custom ports

curl -sSL https://anode.team/set-ports.sh | bash -s -- .zrchain

Pruning and indexer

sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" $HOME/.zrchain/config/app.toml 
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $HOME/.zrchain/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"19\"/" $HOME/.zrchain/config/app.toml
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.zrchain/config/config.toml

Create the service file

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

[Service]
User=$USER
ExecStart=$(which zenrockd) start
Restart=always
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

Load service and start

sudo systemctl daemon-reload && sudo systemctl enable zenrockd
sudo systemctl restart zenrockd && journalctl -fu zenrockd -o cat

Create Validator

echo "{\"pubkey\":{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"$(zenrockd comet show-validator | grep -Po '\"key\":\s*\"\K[^"]*')\"},
    "amount": "1000000urock",
    "moniker": "[moniker]",
    "identity": "[identity]",
    "website": "[website]",
    "details": "[details],
    "security-contact": "[contact]",
    "commission-rate": "0.10",
    "commission-max-rate": "0.20",
    "commission-max-change-rate": "0.01",
    "min-self-delegation": "1"
}" > validator.json
zenrockd tx staking create-validator validator.json \
    --from [wallet_name] \
    --chain-id gardia-4 \
    --fees 500000urock

Sidecar

Create the necessary directories

mkdir -p $HOME/.zrchain/sidecar/bin
mkdir -p $HOME/.zrchain/sidecar/keys

Install last binary

wget -O $HOME/.zrchain/sidecar/bin/zenrock-sidecar https://github.com/Zenrock-Foundation/zrchain/releases/download/v6.3.3/validator_sidecar
chmod +x $HOME/.zrchain/sidecar/bin/zenrock-sidecar

Set a password for sidecar wallets

read -p "Enter password for the keys: " key_pass

Build BLS binary

git clone https://github.com/zenrocklabs/zenrock-validators
cd $HOME/zenrock-validators/utils/keygen/bls/
go mod tidy
go build

Create a BLS key

bls_output_file=$HOME/.zrchain/sidecar/keys/bls.key.json
$HOME/zenrock-validators/utils/keygen/bls/bls --password $key_pass -output-file $bls_output_file

Build ECDSA binary

cd $HOME/zenrock-validators/utils/keygen/ecdsa/
go mod tidy
go build

Create a ECDSA key

ecdsa_output_file=$HOME/.zrchain/sidecar/keys/ecdsa.key.json
ecdsa_creation=$($HOME/zenrock-validators/utils/keygen/ecdsa/ecdsa --password $key_pass -output-file $ecdsa_output_file)
ecdsa_address=$(echo "$ecdsa_creation" | grep "Public address" | cut -d: -f2)

Create a configuration file config.yaml

nano $HOME/.zrchain/sidecar/config.yaml
enabled: true
grpc_port: 9191
zrchain_rpc: "localhost:9190"
state_file: "cache.json"
operator_config: "/root/.zrchain/sidecar/eigen_operator_config.yaml"
network: "testnet"
eth_rpc:
  local: "http://127.0.0.1:8545"
  testnet: "[https://rpc-endpoint-holesky-here]"
  mainnet: "[https://rpc-endpoint-mainnet-here]"
solana_rpc:
  testnet: "https://api.testnet.solana.com"
  mainnet: "https://api.mainnet-beta.solana.com"
proxy_rpc:
  url:
  user:
  password:
neutrino:
  path: "/root/.zrchain/sidecar/neutrino"

Create a configuration file eigen_operator_config.

nano $HOME/.zrchain/sidecar/eigen_operator_config.yaml
register_operator_on_startup: true
register_on_startup: true
production: true

ecdsa_private_key_store_path: /root/.zrchain/sidecar/keys/ecdsa.key.json
bls_private_key_store_path: /root/.zrchain/sidecar/keys/bls.key.json

aggregator_server_ip_port_address: avs-aggregator.gardia.zenrocklabs.io:8090

eth_rpc_url: [ETH MAIN ENDPOINT HERE]
eth_ws_url: [ETH MAIN WSS ENDPOINT HERE]

enable_metrics: true
eigen_metrics_ip_port_address: 0.0.0.0:9292
enable_node_api: true
node_api_ip_port_address: 0.0.0.0:9191

operator_address: [VALUE FROM STEP - ECDSA key]
operator_validator_address: [VALUE FROM STEP - zenvaloper address]

avs_registry_coordinator_address: 0xdc3A1b2a44D18c6B98a1d6c8C042247d2F5AC722
operator_state_retriever_address: 0xdB55356826a16DfFBD86ba334b84fC4E37113d97

token_strategy_addr: 0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9

zr_chain_rpc_address: localhost:9280

metrics_address: 0.0.0.0:9292

service_manager_address: 0xa559CDb9e029fc4078170122eBf7A3e622a764E4

Create the service file

tee /etc/systemd/system/zenrock-sidecar.service > /dev/null <<EOF
[Unit]
Description=Zenrock-sidecar
After=network-online.target

[Service]
User=$USER
ExecStart=$HOME/.zrchain/sidecar/bin/zenrock-sidecar
Restart=on-failure
RestartSec=30
LimitNOFILE=65535
Environment="OPERATOR_BLS_KEY_PASSWORD=$key_pass"
Environment="OPERATOR_ECDSA_KEY_PASSWORD=$key_pass"
Environment="SIDECAR_CONFIG_FILE=$HOME/.zrchain/sidecar/config.yaml"

[Install]
WantedBy=multi-user.target
EOF

Load service and start

sudo systemctl daemon-reload && sudo systemctl enable zenrock-sidecar
sudo systemctl restart zenrock-sidecar && journalctl -fu zenrock-sidecar -o cat

State-Sync

SNAP_RPC=https://zenrock.rpc.t.anode.team:443 && \
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) && \
echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH
wget https://anode.team/unsafe-reset-all.sh && chmod u+x unsafe-reset-all.sh && ./unsafe-reset-all.sh zenrockd .zrchain
peers="ee7d09ac08dc61548d0e744b23e57436b8c477fc@65.109.93.152:26906"
sed -i.bak -e  "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.zrchain/config/config.toml
sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"| ; \
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $HOME/.zrchain/config/config.toml
sudo systemctl restart zenrockd && journalctl -fu zenrockd -o cat