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 (recommended)
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 configurationcert.pem/key.pem— TLS certificate and private keysigning.pem— ECDSA P-256 signing key for gossip messages
Configuration
The default config.yaml generated by yqmesh init:
| Field | Default | Description |
|---|---|---|
node_id | (generated) | Unique node identifier |
listen_addr | :4242 | QUIC listener address |
http_addr | :8080 | HTTP API address |
bootstrap_peers | boot1.yoorquezt.com:4242 | Bootstrap server for peer discovery |
max_peers | 50 | Maximum concurrent peer connections |
gossip_interval | 100ms | Gossip batch interval |
gossip_max_batch | 64 | Maximum messages per gossip batch |
bloom_filter_size | 100000 | Deduplication bloom filter capacity |
bloom_fp_rate | 0.001 | Bloom filter false-positive rate |
reputation_threshold | -10 | Minimum 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_level | info | Log level (debug, info, warn, error) |
metrics_enabled | true | Enable 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
| Command | Description |
|---|---|
yqmesh init | Generate config, TLS certs, and signing keys |
yqmesh start | Start the mesh node |
yqmesh status | Show node status, connected peers, chain sync state |
yqmesh peers | List connected peers with reputation scores |
yqmesh version | Print version and build info |
Supported Chains
| Chain | Type | Transport | Default RPC |
|---|---|---|---|
| Ethereum | EVM | WebSocket | wss://eth-mainnet.g.alchemy.com/v2/ |
| BSC | EVM | WebSocket | wss://bsc-ws-node.nariox.org |
| Solana | SVM | Polling (400ms) | https://api.mainnet-beta.solana.com |
| ZkSync | EVM | WebSocket | wss://mainnet.era.zksync.io/ws |
| Hyperliquid | EVM | WebSocket | wss://api.hyperliquid.xyz/ws |
| Monad | EVM | WebSocket | wss://monad-rpc.com/ws |
| Berachain | EVM | WebSocket | wss://berachain-rpc.com/ws |
| Sei | EVM | WebSocket | wss://evm-ws.sei-apis.com |
| MegaETH | EVM | WebSocket | wss://rpc.megaeth.com/ws |
| Sui | MoveVM | Polling (500ms) | https://fullnode.mainnet.sui.io |
Monitoring
HTTP Endpoints
| Endpoint | Auth | Description |
|---|---|---|
GET /health | None | Health check |
GET /peers | None | Connected peer count |
GET /chain | None | Chain sync status |
GET /blocks | None | Recent blocks |
GET /block/{id} | None | Block by ID |
GET /debug/peers | None | Detailed peer info |
GET /status | Bearer | Full node status |
GET /metrics | Bearer | Prometheus metrics |
GET /mempool | Bearer | Mempool contents |
POST /sendTransaction | None | Submit transaction |
POST /sendBundle | None | Submit 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.