High-performance indexer for the Qubic network that provides a JSON-RPC 2.0 API (http/ws)
10K+
Qubic Bob is a high-performance indexer for the Qubic networkโ . It syncs tick data from peers, verifies integrity via quorum & log events, indexes blockchain state, and exposes it through:
tickStream, newTicks, logs, transfers.This image ships bob + KeyDB + Kvrocks in a single container โ no extra services to install.
docker run -d --name qubic-bob \
-p 21842:21842 \
-p 40420:40420 \
-e NODE_SEED=your_55_char_lowercase_seed_a_z_only_padded_to_55chars \
-v qubic-bob-redis:/data/redis \
-v qubic-bob-kvrocks:/data/kvrocks \
-v qubic-bob-data:/data/bob \
qubiccore/bob:latest
services:
qubic-bob:
image: qubiccore/bob:latest
container_name: qubic-bob
restart: unless-stopped
ports:
- "21842:21842" # P2P
- "40420:40420" # JSON-RPC / REST / WebSocket
environment:
NODE_SEED: your_55_char_lowercase_seed_a_z_only_padded_to_55chars
NODE_ALIAS: my-bob-node
# See the full list at docs/DOCKER_ENV.md
volumes:
- qubic-bob-redis:/data/redis
- qubic-bob-kvrocks:/data/kvrocks
- qubic-bob-data:/data/bob
volumes:
qubic-bob-redis:
qubic-bob-kvrocks:
qubic-bob-data:
# Wait ~30s after start, then:
curl -s http://localhost:40420/status | jq
curl -s -X POST http://localhost:40420/qubic \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"qubic_getTickNumber","params":[],"id":1}'
| Tag | What it is |
|---|---|
latest | Latest stable release. Recommended for production. |
vX.Y.Z (e.g. v1.5.0) | Pinned version. Recommended if you need reproducibility. |
nightly | Daily build from master. May be unstable. |
See the release notesโ for what changed in each version.
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 4 cores (AVX2 required) | 8+ cores |
| RAM | 12 GB | 32 GB |
| Storage | 300 GB SSD/NVMe | 500 GB+ NVMe |
| Network | 100 Mbps | 1 Gbps |
Bob is memory-hungry on busy networks. KeyDB holds recent ticks in RAM
before migrating to Kvrocks on disk; if the network throughput exceeds
your REDIS_MAXMEMORY, you'll see OOM command not allowed when used memory > maxmemory errors in the log. See Tuning under loadโ below.
| Endpoint | Protocol | Purpose |
|---|---|---|
POST http://localhost:40420/qubic | JSON-RPC 2.0 | Primary API |
ws://localhost:40420/ws/qubic | WebSocket | Subscriptions + JSON-RPC |
GET http://localhost:40420/* | REST | Convenience endpoints |
GET http://localhost:40420/swagger | Swagger UI | REST API explorer |
| Method | Description |
|---|---|
qubic_getTickNumber | Latest tick |
qubic_getTickByNumber | Full tick details (digests, votes, fees, log range) |
qubic_getBalance | Identity's QU balance |
qubic_getAssetBalance | Asset balance (ownership + possession) |
qubic_getTransactionByHash | Transaction by hash |
qubic_getTransactionReceipt | Receipt with status: "success" | "failed" | "pending" |
qubic_getLogs | Filter logs by tick range, identity, log type |
qubic_broadcastTransaction | Submit a signed transaction |
qubic_status | Full node status |
qubic_subscribe | WebSocket subscription (newTicks, logs, transfers, tickStream) |
Full reference: JSON-RPC API Guideโ ยท REST API Guideโ ยท Interactive playgroundโ
Two ways to configure, in order of preference:
bob.json โ for advanced cases where env vars aren't enough.| Env var | Purpose | Default |
|---|---|---|
NODE_SEED | 55-char aโz seed identifying this node | - |
NODE_ALIAS | Display name | Big fat bob |
P2P_NODES | Comma-separated peer list | auto-discover |
LOG_LEVEL | trace/debug/info/warn/error | info |
REDIS_MAXMEMORY | KeyDB memory cap | 2gb |
KVROCKS_TTL | Data retention in kvrocks (seconds) | 1209600 (14 days) |
docker run -d --name qubic-bob \
-p 21842:21842 -p 40420:40420 \
-v ./bob.json:/app/bob.json \
-v qubic-bob-redis:/data/redis \
-v qubic-bob-kvrocks:/data/kvrocks \
-v qubic-bob-data:/data/bob \
qubiccore/bob:latest
โ ๏ธ Do not use :ro on the bob.json mount โ the entrypoint patches the file at startup.
Full bob.json reference: docs/CONFIG_FILE.MDโ .
| Path | What's in it | Persist? |
|---|---|---|
/data/redis | KeyDB persistence (AOF + RDB) | yes |
/data/kvrocks | Kvrocks (RocksDB-backed) data | yes |
/data/bob | bob's snapshot files | yes |
/app/logs | logs from supervisord-managed children | optional |
A fresh container with no volumes will start clean every restart โ fine for dev, not for guardians or production indexers.
If you see Failed to add log ... OOM command not allowed:
| Symptom | Fix |
|---|---|
| Steady OOM under high tx volume | Increase REDIS_MAXMEMORY (e.g. 8gb) |
| OOM after container restart | Wait for migration to drain, or lower LAST_N_TICK_STORAGE (lastNTick mode) / n_tickdata_to_store (kvrocks mode) |
| Disk usage growing fast | Lower KVROCKS_TTL (default 14 days). 7 days halves disk. |
| Cleaner falling behind | Check the Current state: log lines โ the GC: <a>/<b> numbers should track the indexing cursor; if they drift, your machine can't keep up. |
bob logs a KeyDB memory: <used> / <max> (XX%) line roughly once per minute and immediately when usage crosses 85% โ this is the cleanest signal for memory pressure.
| Issue | Check |
|---|---|
| Container exits immediately | docker logs qubic-bob โ usually a config validation error (bad NODE_SEED, bad P2P_NODES format) |
| Stuck at "Waiting for new epoch info from peers" | Peer set unreachable. Verify outbound to port 21841 on the listed peers. Default uses qubic.global for auto-discovery. |
status: "failed" for low-value txs | Should not happen on v1.4.0+ (the default SPAM_QU_THRESHOLD is now 0). Upgrade if you see this. |
tick_data endpoint returns zeros | The tick is older than your retention window. Check TICK_STORAGE_MODE: lastNTick deletes; kvrocks archives. |
| WebSocket subscription disconnects | Bob auto-disconnects idle WS connections. Re-subscribe on disconnect (this is expected). |
# View the effective config
docker exec qubic-bob jq . /app/bob.json
docker exec qubic-bob cat /etc/redis/redis.conf
docker exec qubic-bob cat /etc/kvrocks/kvrocks.conf
# Talk to KeyDB / Kvrocks directly
docker exec qubic-bob redis-cli ping # KeyDB on 6379
docker exec qubic-bob redis-cli -p 6666 ping # Kvrocks on 6666
# Tail bob logs
docker logs -f qubic-bob
Built with โค๏ธ by the Qubic Bob team. Massive thanks to @krypdkatโ for the original qubicbob project this is based on.
Content type
Image
Digest
sha256:631779bb9โฆ
Size
59.6 MB
Last updated
about 7 hours ago
docker pull qubiccore/bob:v1.5.14