Chainbase Setup Guide


Back to All Posts

Chainbase is the world’s largest omnichain data network designed to integrate all blockchain data into a unified ecosystem, providing an open and transparent data interoperability layer for the AI era.

It has designed a novel dual-chain technology architecture that bridges the programmability and composability of crypto data, which supports high throughput, low latency, and eventual determinism, as well as higher cybersecurity through a dual staking model.

Our mission is to make data accessible and useful. With Chainbase, people can truly enjoy the benefits of the open internet era.

Update and install packages

sudo apt update & sudo apt upgrade -y
sudo apt install ca-certificates zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev curl git wget make jq build-essential pkg-config lsb-release libssl-dev libreadline-dev libffi-dev gcc screen unzip lz4 -y

Install Docker & Docker compose

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-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
docker version
VER=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d '"' -f 4)
curl -L "https://github.com/docker/compose/releases/download/"$VER"/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose
docker-compose --version

Install Go

cd $HOME && \
ver="1.22.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" && \
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile && \
source ~/.bash_profile && \
go version

Install EigenLayer CLI

curl -sSfL https://raw.githubusercontent.com/layr-labs/eigenlayer-cli/master/scripts/install.sh | sh -s
export PATH=$PATH:~/bin
eigenlayer --version

Clone Chainbase AVS repo

git clone https://github.com/chainbase-labs/chainbase-avs-setup
cd chainbase-avs-setup/holesky

Create/Import Eigenlayer wallet

eigenlayer operator keys create --key-type ecdsa "wallet_name"

Set password & save your private key

Import an old key (optional)

eigenlayer operator keys import --key-type ecdsa "wallet_name" PRIVATEKEY

You’ll need at least 1 Holesky ETH to cover the gas cost of the operator registration. Make sure to send at least 1 ETH to your Eigenlayer operator’s address

Faucet here:

  • https://bit.ly/Gooogleholesky
  • https://www.holeskyfaucet.io/

Config & register operator

eigenlayer operator config create
  • Enter your operator address: your Eigenlayer address
  • Enter your earnings address (default to your operator address): your Eigenlayer address
  • Enter your ETH rpc url: RPC infura or alchemy
  • Select your network: holesky
  • Select your signer type: local_keystore
  • Enter your ecdsa key path: /root/.eigenlayer/operator_keys/FURI.ecdsa.key.json

Edit metadata.json

nano /root/chainbase-avs-setup/holesky/metadata.json
{
  "name": "FURI",
  "website": "https://furinode.com",
  "description": "Just Testing",
  "logo": "https://0xfuri.eth.limo/img/fav.png",
  "twitter": "https://x.com/furidngrt"
}

Upload logo.png and metadata.json on github repo take the raw github link and paste it in metadata.json

Edit operator.yaml

nano /root/chainbase-avs-setup/holesky/operator.yaml

Set URL metadata like this: https://raw.githubusercontent.com/furidngrt/Chainbase/master/metadata.json

Run Eigenlayer holesky Node

eigenlayer operator register operator.yaml

Check status:

eigenlayer operator status operator.yaml

Config Chainbase AVS

nano .env
# Chainbase AVS Image
MAIN_SERVICE_IMAGE=repository.chainbase.com/network/chainbase-node:testnet-v0.1.7
FLINK_TASKMANAGER_IMAGE=flink:latest
FLINK_JOBMANAGER_IMAGE=flink:latest
PROMETHEUS_IMAGE=prom/prometheus:latest

MAIN_SERVICE_NAME=chainbase-node
FLINK_TASKMANAGER_NAME=flink-taskmanager
FLINK_JOBMANAGER_NAME=flink-jobmanager
PROMETHEUS_NAME=prometheus

# FLINK CONFIG
FLINK_CONNECT_ADDRESS=flink-jobmanager
FLINK_JOBMANAGER_PORT=8081
NODE_PROMETHEUS_PORT=9091
PROMETHEUS_CONFIG_PATH=./prometheus.yml

# Chainbase AVS mounted locations
NODE_APP_PORT=8080
NODE_ECDSA_KEY_FILE=/app/operator_keys/ecdsa_key.json
NODE_LOG_DIR=/app/logs

# Node logs configs
NODE_LOG_LEVEL=debug
NODE_LOG_FORMAT=text

# Metrics specific configs
NODE_ENABLE_METRICS=true
NODE_METRICS_PORT=9092

# holesky smart contracts
AVS_CONTRACT_ADDRESS=0x5E78eFF26480A75E06cCdABe88Eb522D4D8e1C9d
AVS_DIR_CONTRACT_ADDRESS=0x055733000064333CaDDbC92763c58BF0192fFeBf

###############################################################################
####### TODO: Operators please update below values for your node ##############
###############################################################################
# TODO: Operators need to point this to a working chain rpc
NODE_CHAIN_RPC=https://rpc.ankr.com/eth_holesky
NODE_CHAIN_ID=17000

# TODO: Operators need to update this to their own paths
USER_HOME=$HOME
EIGENLAYER_HOME=${USER_HOME}/.eigenlayer
CHAINBASE_AVS_HOME=${EIGENLAYER_HOME}/chainbase/holesky

NODE_LOG_PATH_HOST=${CHAINBASE_AVS_HOME}/logs

# TODO: Operators need to update this to their own keys
NODE_ECDSA_KEY_FILE_HOST=${EIGENLAYER_HOME}/operator_keys/FURI.ecdsa.key.json

# TODO: Operators need to add password to decrypt the above keys
# If you have some special characters in password, make sure to use single quotes
NODE_ECDSA_KEY_PASSWORD=YourPassword
  • NODE_ECDSA_KEY_FILE_HOST=<sub>${EIGENLAYER_HOME}/operator_keys/FURI.ecdsa.key.json</sub>
  • NODE_ECDSA_KEY_PASSWORD=<sub>your password</sub>
  • NODE_CHAIN_RPC=<sub>Use your RPC infura or Alchemy</sub>

Edit docker-compose.yml file

nano docker-compose.yml

Replace your key

{NODE_ECDSA_KEY_FILE_HOST:-./FURI.ecdsa.key.json}:${NODE_ECDSA_KEY_FILE}
services:
  prometheus:
    image: ${PROMETHEUS_IMAGE}
    container_name: ${PROMETHEUS_NAME}
    env_file:
      - .env
    volumes:
      - "${PROMETHEUS_CONFIG_PATH}:/etc/prometheus/prometheus.yml"
    command:
      - "--enable-feature=expand-external-labels"
      - "--config.file=/etc/prometheus/prometheus.yml"
    ports:
      - "${NODE_PROMETHEUS_PORT}:9090"
    networks:
      - chainbase
    restart: unless-stopped

  flink-jobmanager:
    image: ${FLINK_JOBMANAGER_IMAGE}
    container_name: ${FLINK_JOBMANAGER_NAME}
    env_file:
      - .env
    command: jobmanager
    networks:
      - chainbase
    restart: unless-stopped

  flink-taskmanager:
    image: ${FLINK_JOBMANAGER_IMAGE}
    container_name: ${FLINK_TASKMANAGER_NAME}
    env_file:
      - .env
    depends_on:
      - flink-jobmanager
    command: taskmanager
    networks:
      - chainbase
    restart: unless-stopped

  chainbase-node:
    image: ${MAIN_SERVICE_IMAGE}
    container_name: ${MAIN_SERVICE_NAME}
    command: ["run"]
    env_file:
      - .env
    ports:
      - "${NODE_APP_PORT}:${NODE_APP_PORT}"
      - "${NODE_METRICS_PORT}:${NODE_METRICS_PORT}"
    volumes:
      - "${NODE_ECDSA_KEY_FILE_HOST:-./josephtran.ecdsa.key.json}:${NODE_ECDSA_KEY_FILE}"
      - "${NODE_LOG_PATH_HOST}:${NODE_LOG_DIR}:rw"
    depends_on:
      - prometheus
      - flink-jobmanager
      - flink-taskmanager
    networks:
      - chainbase
    restart: unless-stopped

networks:
  chainbase:
    driver: bridge

Create folders for docker

source .env && mkdir -pv ${EIGENLAYER_HOME} ${CHAINBASE_AVS_HOME} ${NODE_LOG_PATH_HOST}

Set permissions to bash script chainbase-avs.sh

chmod +x ./chainbase-avs.sh

Edit prometheus.yml

nano prometheus.yml

Input your operator Name

Register & Run Chainbase AVS

./chainbase-avs.sh register
./chainbase-avs.sh run

Check AVS health

docker compose logs chainbase-node -f
export PATH=$PATH:~/bin

eigenlayer operator status operator.yaml

Check Operator Health

curl -i localhost:8080/eigen/node/health

Check Docker containers

docker ps