Run a Node

Overview

YoorQuezt mesh nodes form a decentralized P2P relay network that privately routes transactions to block builders. Running a node strengthens the network and earns you relay fees.

Installation

curl -sSL https://get.yoorquezt.com/mesh | sh

Homebrew

brew tap yoorquezt/tap
brew install yqmesh

Go Install

go install github.com/yoorquezt-labs/yoorquezt-mesh/cmd/yqmesh@latest

Docker

docker pull ghcr.io/yoorquezt/yoorquezt-mesh:latest

Quick Start

Initialize a new node and start it:

# Generate config, TLS certs, and ECDSA signing keys
yqmesh init

# Start the node
yqmesh start

The init command creates:

  • config.yaml — Node configuration
  • cert.pem / key.pem — TLS certificate and private key
  • signing.pem — ECDSA P-256 signing key for gossip messages

Configuration

The default config.yaml generated by yqmesh init:

FieldDefaultDescription
node_id(generated)Unique node identifier
listen_addr:4242QUIC listener address
http_addr:8080HTTP API address
bootstrap_peersboot1.yoorquezt.com:4242Bootstrap server for peer discovery
max_peers50Maximum concurrent peer connections
gossip_interval100msGossip batch interval
gossip_max_batch64Maximum messages per gossip batch
bloom_filter_size100000Deduplication bloom filter capacity
bloom_fp_rate0.001Bloom filter false-positive rate
reputation_threshold-10Minimum reputation score before peer is dropped
chains["ethereum"]Chains to connect to
rpc_endpoints(per chain)JSON-RPC endpoints for each chain
webhook_url(empty)MEV engine webhook for bundle forwarding
log_levelinfoLog level (debug, info, warn, error)
metrics_enabledtrueEnable Prometheus metrics

Environment Variable Overrides

Every config field can be overridden with an environment variable using the YQMESH_ prefix:

export YQMESH_LISTEN_ADDR=":5555"
export YQMESH_MAX_PEERS=100
export YQMESH_LOG_LEVEL=debug
export YQMESH_CHAINS="ethereum,bsc,arbitrum"
export YQMESH_RPC_ETHEREUM="wss://eth-mainnet.g.alchemy.com/v2/YOUR_KEY"

Docker Deployment

Single Node

docker run -d \
  --name yqmesh \
  -p 4242:4242/udp \
  -p 8080:8080 \
  -v $(pwd)/config.yaml:/app/config.yaml \
  -v $(pwd)/cert.pem:/app/cert.pem \
  -v $(pwd)/key.pem:/app/key.pem \
  -v $(pwd)/signing.pem:/app/signing.pem \
  ghcr.io/yoorquezt/yoorquezt-mesh:latest

Docker Compose Multi-Node

version: "3.8"

services:
  bootstrap:
    image: ghcr.io/yoorquezt/yoorquezt-mesh:latest
    command: ["bootstrap"]
    ports:
      - "4242:4242/udp"
      - "8080:8080"
    volumes:
      - ./certs/bootstrap:/app/certs

  node1:
    image: ghcr.io/yoorquezt/yoorquezt-mesh:latest
    environment:
      YQMESH_BOOTSTRAP_PEERS: "bootstrap:4242"
      YQMESH_LISTEN_ADDR: ":4243"
      YQMESH_HTTP_ADDR: ":8081"
      YQMESH_CHAINS: "ethereum,bsc"
    ports:
      - "4243:4243/udp"
      - "8081:8081"
    depends_on:
      - bootstrap

  node2:
    image: ghcr.io/yoorquezt/yoorquezt-mesh:latest
    environment:
      YQMESH_BOOTSTRAP_PEERS: "bootstrap:4242"
      YQMESH_LISTEN_ADDR: ":4244"
      YQMESH_HTTP_ADDR: ":8082"
      YQMESH_CHAINS: "ethereum,solana"
    ports:
      - "4244:4244/udp"
      - "8082:8082"
    depends_on:
      - bootstrap

  node3:
    image: ghcr.io/yoorquezt/yoorquezt-mesh:latest
    environment:
      YQMESH_BOOTSTRAP_PEERS: "bootstrap:4242"
      YQMESH_LISTEN_ADDR: ":4245"
      YQMESH_HTTP_ADDR: ":8083"
      YQMESH_CHAINS: "ethereum,arbitrum,base"
    ports:
      - "4245:4245/udp"
      - "8083:8083"
    depends_on:
      - bootstrap

Kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: yqmesh-node
spec:
  replicas: 3
  selector:
    matchLabels:
      app: yqmesh
  template:
    metadata:
      labels:
        app: yqmesh
    spec:
      containers:
        - name: yqmesh
          image: ghcr.io/yoorquezt/yoorquezt-mesh:latest
          ports:
            - containerPort: 4242
              protocol: UDP
            - containerPort: 8080
              protocol: TCP
          env:
            - name: YQMESH_BOOTSTRAP_PEERS
              value: "boot1.yoorquezt.com:4242"
            - name: YQMESH_CHAINS
              value: "ethereum,arbitrum,base"
          volumeMounts:
            - name: certs
              mountPath: /app/certs
      volumes:
        - name: certs
          secret:
            secretName: yqmesh-certs

CLI Reference

CommandDescription
yqmesh initGenerate config, TLS certs, and signing keys
yqmesh startStart the mesh node
yqmesh statusShow node status, connected peers, chain sync state
yqmesh peersList connected peers with reputation scores
yqmesh versionPrint version and build info

Supported Chains

ChainTypeTransportDefault RPC
EthereumEVMWebSocketwss://eth-mainnet.g.alchemy.com/v2/
BSCEVMWebSocketwss://bsc-ws-node.nariox.org
SolanaSVMPolling (400ms)https://api.mainnet-beta.solana.com
ZkSyncEVMWebSocketwss://mainnet.era.zksync.io/ws
HyperliquidEVMWebSocketwss://api.hyperliquid.xyz/ws
MonadEVMWebSocketwss://monad-rpc.com/ws
BerachainEVMWebSocketwss://berachain-rpc.com/ws
SeiEVMWebSocketwss://evm-ws.sei-apis.com
MegaETHEVMWebSocketwss://rpc.megaeth.com/ws
SuiMoveVMPolling (500ms)https://fullnode.mainnet.sui.io

Monitoring

HTTP Endpoints

EndpointAuthDescription
GET /healthNoneHealth check
GET /peersNoneConnected peer count
GET /chainNoneChain sync status
GET /blocksNoneRecent blocks
GET /block/{id}NoneBlock by ID
GET /debug/peersNoneDetailed peer info
GET /statusBearerFull node status
GET /metricsBearerPrometheus metrics
GET /mempoolBearerMempool contents
POST /sendTransactionNoneSubmit transaction
POST /sendBundleNoneSubmit bundle

Prometheus + Grafana

The /metrics endpoint exposes Prometheus metrics:

yqmesh_peers_connected         # Current connected peer count
yqmesh_messages_received_total # Total messages received by type
yqmesh_messages_sent_total     # Total messages sent by type
yqmesh_gossip_batch_size       # Histogram of gossip batch sizes
yqmesh_block_build_duration    # Block build latency
yqmesh_reputation_score        # Peer reputation score distribution
yqmesh_chain_head_block        # Latest block number per chain

Add the scrape target to your prometheus.yml:

scrape_configs:
  - job_name: "yqmesh"
    bearer_token: "your-auth-token"
    static_configs:
      - targets: ["localhost:8080"]

Import the YoorQuezt Grafana dashboard (ID 20241) for pre-built panels covering peer connectivity, message throughput, chain sync, and reputation scores.

Edit this page