Run a SQD Network worker node to serve historical blockchain data and earn SQD token rewards — hardware requirements, setup steps, and operating practices.
We strongly advise against using Hetzner for running SQD Network worker nodes
due to reliability concerns.
Running a worker node allows you to contribute storage and compute resources to SQD Network and earn SQD token rewards.
100,000 SQD tokens (in your wallet or vesting contract)
Arbitrum ETH for gas fees
The SQD tokens should be available in your Primary Wallet, either directly or
through a vesting contract. With sufficient funds, one Primary Wallet can
register multiple workers.
Use a browser-compatible wallet like MetaMask for your Primary Wallet.
By registering a worker, you lock your tokens in the smart contract.
Once you want to withdraw them, you’ll have to wait for approximately 14 days
(100,000 Ethereum blocks) plus the time until the end of the current
epoch (up to 20 minutes).
Before running your worker node, you must register it on-chain.
Jailing is a scheduler-side mechanism that ensures data chunk availability across the network. The scheduler identifies potentially unreliable workers and guarantees that each chunk exists on multiple reliable nodes.
Jailed workers continue serving queries from downloaded chunks and earning
rewards. Jailing is temporary, workers are automatically unjailed within
approximately 20 minutes once they’re reliable again.
Setup script output - Printed when you run setup_worker.sh (see Setup Instructions)
Worker logs:
Docker setup: Run docker compose logs
Source build: Check the output of the worker process
Look for a log line like this:
2024-05-28T07:43:55.591440Z INFO subsquid_worker::transport::p2p: Local peer ID: <PEER_ID>
I see "Failed to download chunk ... operation timed out" in the worker logs
This error indicates connection issues. Adjust timeout settings based on your connection quality:If you encounter this frequently:
Set S3_TIMEOUT to 180 in your .env file
If the issue persists, also set:
CONCURRENT_DOWNLOADS to 1
S3_READ_TIMEOUT to 30
These adjustments reduce concurrent downloads and increase timeout thresholds, helping with slower or less stable connections.
I see "Unable to get assignment: deadline has elapsed" in the worker logs
This is a known issue in version 2.0.2.Solution:Set ASSIGNMENT_FETCH_TIMEOUT_SEC=90 in your .env file and restart the worker.
I see an "Insufficient peers..." error in the worker logs
This error can be safely ignored. It doesn’t affect worker functionality or rewards.
Can I move my worker to another server?
Yes! You can migrate your worker to a new server:
Copy the key file (at <KEY_PATH>) to the new server
Set up the new data directory
Start the worker on the new server
Make sure the worker on the old server is not running anymore
You don’t need to re-register your worker when moving to a new server.
I have just started my worker but see no logs
This is normal behavior. Wait a few minutes, the logs will start showing data download activity once the worker begins syncing.
Should I build from source or run with Docker?
Docker (Recommended) - Easier setup, suitable for most usersBuild from Source - Suitable for experienced Linux/Unix users who need more control or customization
Choose Docker unless you have specific requirements that necessitate building
from source.
How do I check that my worker is updated to the latest version?
Find your worker in the network app and look at the “version” column.
If the version is outdated, there will be a warning sign besides it.
Which Linux distro is recommended?
We recommend Ubuntu 22.04 LTS for optimal compatibility and stability.
I see "error from daemon in stream: Error grabbing logs"
This is a Docker issue, not a worker problem.Resources for resolution: