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