Overview
Empeiria is a Digital Trust-as-a-Service platform that lets organizations turn data, documents, and events into tamper-proof, verifiable credentials for people, devices, and AI agents. Using simple APIs, developers can issue and verify credentials in minutes, with all integrity anchored on the Empe Blockchain and aligned with open standards like W3C Verifiable Credentials and DIDs.
Key Components:
-
Digital Trust APIs: REST and WebSocket APIs to issue, verify, and revoke digital credentials, replacing manual checks and paperwork.
-
Credential Engine & Schema Builder: Tools to automate credential workflows and define compliant templates (e.g., consent, KYC, ISO 27001) with AI-guided schemas.
-
Empe Blockchain: A modular trust layer that records privacy-preserving anchors for credentials and DIDs, providing tamper-proof, auditable verification with stable, predictable fees.
-
Identity & Wallet: DID wallet and SDKs to manage decentralized identities and enable passwordless, verifiable interactions across users, organizations, and autonomous agents.
Empeiria is used across AI agents, fintech and digital identity, supply chain and trade, IoT, real-world asset tokenization, and public sector compliance-where verifiable, interoperable, and auditable data is critical.
Guide
This guide provides a complete and reliable setup for running an Empeiria testnet node and validator. It covers everything from downloading binaries and configuration files to initializing the node, managing keys, applying snapshots, and maintaining a stable validator environment. Follow the steps carefully to ensure a smooth and secure deployment on the Empeiria network.
Prepare
Update and install packages
sudo apt update && sudo apt upgrade -y && \ sudo apt install curl tar wget clang pkg-config libssl-dev libleveldb-dev jq build-essential bsdmainutils git make ncdu htop screen unzip bc fail2ban htop -y
Installing Go
VER="1.22.0" cd $HOME && \ 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" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ go version
Binary
git clone cd git checkout make install version --long | grep -e version -e commit # version: # commit:
Initialization
Initialize the node (replace VALIDATOR_NAME with your own)
init VALIDATOR_NAME --chain-id && \ config chain-id && \ config keyring-backend os
Genesis
Download genesis
wget -O $HOME//config/genesis.json
Addrbook
Download addrbook
wget -O $HOME//config/addrbook.json
Configuration
EXTERNAL_IP=$(wget -qO- eth0.me) NODE_NUMBER="1" sed -i.bak \ -e "s/\(proxy_app = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))58\"/" \ -e "s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))57\"/" \ -e "s/\(pprof_laddr = \"\)\([^:]*\):\([0-9]*\).*/\1localhost:$(($NODE_NUMBER + 60))60\"/" \ -e "/\[p2p\]/,/^\[/{s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))56\"/}" \ -e "/\[p2p\]/,/^\[/{s/\(external_address = \"\)\([^:]*\):\([0-9]*\).*/\1${EXTERNAL_IP}:$(($NODE_NUMBER + 266))56\"/; t; s/\(external_address = \"\).*/\1${EXTERNAL_IP}:$(($NODE_NUMBER + 266))56\"/}" \ -e "s/\(prometheus_listen_addr = \":\)\([0-9]*\).*/\1$(($NODE_NUMBER + 266))60\"/" $HOME//config/config.toml sed -i.bak \ -e "/\[api\]/,/^\[/{s/\(address = \"tcp:\/\/\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 13))17\4/}" \ -e "/\[grpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 90))90\4/}" \ -e "/\[grpc-web\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 90))91\4/}" \ -e "/\[json-rpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 85))45\4/}" \ -e "/\[json-rpc\]/,/^\[/{s/\(ws-address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 85))46\4/}" $HOME//config/app.toml echo "export NODE=http://localhost:$(($NODE_NUMBER + 266))57" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ config node $NODE
Create a service file
sudo tee /etc/systemd/system/.service > /dev/null <<EOF [Unit] Description=_node After=network.target [Service] User=$USER Type=simple ExecStart=$(which ) start --home $HOME/ Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
Start the node
sudo systemctl daemon-reload && \ sudo systemctl enable && \ sudo systemctl restart && \ sudo journalctl -u -f -o cat
Restore node from snapshot
sudo apt install lz4 -y && \ sudo systemctl stop && \ cp $HOME//data/priv_validator_state.json $HOME//priv_validator_state.json.backup && \ rm -rf $HOME//data && \ curl | lz4 -dc - | tar -xf - -C $HOME/ && \ mv $HOME//priv_validator_state.json.backup $HOME//data/priv_validator_state.json && \ sudo systemctl restart && \ sudo journalctl -u -f
State Sync
Restore node from state sync
SNAP_RPC=":443" && \ sudo systemctl stop && \ cp $HOME//data/priv_validator_state.json $HOME//priv_validator_state.json.backup && \ tendermint unsafe-reset-all --home $HOME/ --keep-addr-book && \ peers="@" && \ sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME//config/config.toml && \ 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" && sleep 2 && \ 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//config/config.toml && \ mv $HOME//priv_validator_state.json.backup $HOME//data/priv_validator_state.json && \ sudo systemctl restart && \ sudo journalctl -u -f
Upgrade Node
VER="v" git clone && \ cd $HOME && \ rm -rf && \ git clone && \ cd && \ git checkout tags/$VER -b $VER && \ make install && \ sudo systemctl restart && \ sudo journalctl -u -f
Delete Node
sudo systemctl stop && \ sudo systemctl disable && \ sudo rm -rf /etc/systemd/system/.service && \ sudo rm "$(which )" && \ sudo rm -rf "$HOME/"
Key management
# This command generates a new wallet with a unique keypair. # Use this to create a secure, brand-new wallet for transactions. # Your wallet name = "wallet" keys add wallet
Validator management
tx staking create-validator \ --amount 1000000 \ --moniker "VALIDATOR_NAME" \ --identity "" \ --website "" \ --details "" \ --from wallet \ --commission-rate 0.1 \ --commission-max-rate 0.2 \ --commission-max-change-rate 0.01 \ --min-self-delegation 1 \ --pubkey $(celestia-appd tendermint show-validator) \ --chain-id \ --gas auto \ --gas-adjustment 1.4 \ --gas-prices 0.002 \ -y
Validator commands
# Retrieves comprehensive information regarding the validator. # This command is utilized to fetch details about the current validator, including its address, public key, and associated data. # Your wallet name = "wallet" q staking validator $( keys show wallet --bech val -a)
Onchain
# Withdraw all accumulated rewards from your account. # This command retrieves and withdraws all rewards earned from staking. # Your wallet name = "wallet" tx distribution withdraw-all-rewards --from wallet --chain-id --gas-adjustment=1.15 --gas auto --gas-prices 0.002 -y


