💻Sidecar (✔️Oracle)
The validator sidecar service allows validators to vote on oracle data during the CometBFT consensus process
Install the sidecar
# create the necessary directories
mkdir -p $HOME/.zrchain/sidecar/bin
mkdir -p $HOME/.zrchain/sidecar/keys
Install the binary file
wget -O $HOME/.zrchain/sidecar/bin/zenrock-sidecar https://github.com/Zenrock-Foundation/zrchain/releases/download/v5.16.22/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
Copy zenrock-validators
cd $HOME
git clone https://github.com/zenrocklabs/zenrock-validators
Build BLS binary
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)
echo "ecdsa address: $ecdsa_address"
#Public address: 0xe766944B5a25B1DE938eF19D15D1F5d3B4fe6E2D
IMPORTANT - to continue you need to register on https://app.infura.io and get the following endpoints:
Create a configuration file config.yaml
Replace the following variables with your values:
zrchain_rpc: ''localhost:HERE_IS_YOUR_GRPC_PORT''
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: "mainnet"
eth_oracle:
rpc:
local: "http://127.0.0.1:8545"
testnet: "<https://rpc-endpoint-holesky-here> "
mainnet: "<https://rpc-endpoint-mainnet-here>"
contract_addrs:
service_manager: "0x4ca852BD78D9B7295874A7D223023Bff011b7EB3"
price_feeds:
btc: "0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c"
eth: "0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419"
zenbtc:
controller:
mainnet: "0xa87bE298115bE701A12F34F9B4585586dF052008"
token:
ethereum:
mainnet: "0x2fE9754d5D28bac0ea8971C0Ca59428b8644C776"
network_name:
mainnet: "Ethereum Mainnet"
testnet: "Holešky Ethereum Testnet"
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/root-data/neutrino"
Create a configuration file eigen_operator_config.yaml
Replace the following variables with your values:
<ETH MAIN WSS ENDPOINT HERE>
<VALUE FROM STEP - ECDSA key>
<VALUE FROM STEP - zenvaloper address>
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.diamond.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: 0xFbFECE8f29f499c32206d8bFfA57da2b124790C7
operator_state_retriever_address: 0x03d0452e70711f169eB6B6F5Ab33d8571c313ef6
token_strategy_addr: 0xa5430Ca83713F877B77b54d5A24FD3D230DF854B
Create a 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
systemctl daemon-reload
systemctl enable zenrock-sidecar
systemctl restart zenrock-sidecar && journalctl -u zenrock-sidecar -f -o cat
Don't forget to save the directory $HOME/.zrchain/sidecar/