Skip to main content

Installation

Install Dependencies:

sudo apt update && sudo apt upgarade -y
sudo apt-get install git curl build-essential make jq gcc snapd chrony lz4 tmux unzip make bc -y

Install GO: (amd64 - x86)

rm -rf $HOME/go
sudo rm -rf /usr/local/go
cd $HOME
curl https://dl.google.com/go/go1.22.4.linux-amd64.tar.gz | sudo tar -C/usr/local -zxvf -
cat <<'EOF' >>$HOME/.bash_profile
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GO111MODULE=on
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
EOF
source $HOME/.bash_profile
go version

Set variables:

echo "export ZENROCK_PORT="36"" >> $HOME/.bash_profile
source $HOME/.bash_profile

Install binary:

cd $HOME
rm -rf zrchain
git clone https://github.com/Zenrock-Foundation/zrchain.git
cd zrchain
git checkout v6.4.0
make install

Set min gas & diamond-1:

zenrockd init Node39-Guide --chain-id diamond-1
sed -i "s/chain-id = .*/chain-id = \"diamond-1\"/" $HOME/.zrchain/config/client.toml
sed -i "s/keyring-backend = .*/keyring-backend = \"os\"/" $HOME/.zrchain/config/client.toml
sed -i "s/node = .*/node = \"tcp:\/\/localhost:${ZENROCK_PORT}657\"/" $HOME/.zrchain/config/client.toml

Custom ports:

sed -i.bak -e "s%:1317%:${ZENROCK_PORT}317%g;
s%:8080%:${ZENROCK_PORT}080%g;
s%:9090%:${ZENROCK_PORT}090%g;
s%:9091%:${ZENROCK_PORT}091%g;
s%:8545%:${ZENROCK_PORT}545%g;
s%:8546%:${ZENROCK_PORT}546%g;
s%:6065%:${ZENROCK_PORT}065%g" $HOME/.zrchain/config/app.toml

sed -i.bak -e "s%:26658%:${ZENROCK_PORT}658%g;
s%:26657%:${ZENROCK_PORT}657%g;
s%:6060%:${ZENROCK_PORT}060%g;
s%:26656%:${ZENROCK_PORT}656%g;
s%^external_address = \"\"%external_address = \"$(wget -qO- eth0.me):${ZENROCK_PORT}656\"%;
s%:26660%:${ZENROCK_PORT}660%g" $HOME/.zrchain/config/config.toml

Set min gas:

sed -i "s/minimum-gas-prices = .*/minimum-gas-prices = \"2.5urock\"/" $HOME/.zrchain/config/app.toml

Set indexer:

sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.zrchain/config/config.toml

Pruning:

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 = \"50\"/" $HOME/.zrchain/config/app.toml

Download Genesis & addressbook:

curl -Ls https://file3.node39.top/Mainnet/Zenrock/genesis.json > $HOME/.zrchain/config/genesis.json
curl -Ls https://file3.node39.top/Mainnet/Zenrock/addrbook.json > $HOME/.zrchain/config/addrbook.json

Peers:

peers="[email protected]:12656"
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.zrchain/config/config.toml

Create Service:

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

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

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable zenrockd

Download snapshot: Here.

Check sync:

(False -> Done)

zenrockd status 2>&1 | jq .SyncInfo

Sidecar

Clone Zenrock

cd $HOME
rm -rf zenrock-validators
git clone https://github.com/zenrocklabs/zenrock-validators

Generate keys

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

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

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

cd $HOME/zenrock-validators/utils/keygen/bls && go build

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)

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

echo "ecdsa address: $ecdsa_address"

Create a configuration file config.yaml

sudo tee "$HOME/.zrchain/sidecar/config.yaml" > /dev/null <<EOF
enabled: true
grpc_port: 9191
zrchain_rpc: "localhost:9190"
state_file: "cache.json"
operator_config: "$HOME/.zrchain/sidecar/eigen_operator_config.yaml"
network: "mainnet"
eth_rpc:
#local: "http://127.0.0.1:8545"
testnet: "[Endpoint-holesky-here]"
mainnet: "[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: "$HOME/.zrchain/sidecar/neutrino"
EOF

Create a configuration file eigen_operator_config

sudo tee "$HOME/.zrchain/sidecar/eigen_operator_config.yaml" > /dev/null <<EOF
register_operator_on_startup: true
register_on_startup: true
production: true

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

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

eth_rpc_url: [ENDPOINT RPC ETH MAINNET]
eth_ws_url: [ENDPOINT WSS ETH MAINNET]

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 - 0x0000000]
operator_validator_address: [VALUE FROM STEP - zenvaloper address]

avs_registry_coordinator_address: 0xFbFECE8f29f499c32206d8bFfA57da2b124790C7
operator_state_retriever_address: 0x03d0452e70711f169eB6B6F5Ab33d8571c313ef6

token_strategy_addr: 0xa5430Ca83713F877B77b54d5A24FD3D230DF854B
EOF

Download sidecar binary

wget -O $HOME/.zrchain/sidecar/bin/validator_sidecar https://github.com/zenrocklabs/zrchain/releases/download/v6.4.1/validator_sidecar
chmod +x $HOME/.zrchain/sidecar/bin/validator_sidecar

Create a service

sudo 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

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