A Hyperliquid non-validator node syncs chain data and serves read queries without participating in consensus, holding no signing keys and requiring no stake or validator eligibility. It is the right operational profile when you need predictable read latency, a private replica for local tooling, or an independent view of chain state, but do not want the slashing surface and key-management burden of validating. Running one still requires ongoing operations: storage that grows with the chain and your retention policy, RAM for state and indexes, CPU for execution, and bandwidth for ingest plus outbound query traffic. Health is verified by comparing the node's latest block height against a reference endpoint over several samples, confirming the height advances, checking peer count and sync status, and ensuring read methods return current data. This article separates documented protocol behavior from provider-specific behavior and gives reproducible measurement methods you can run against your own endpoint.
The Hyperliquid node role spectrum: validator, archive, and non-validator
Hyperliquid documentation describes node roles and API surfaces as part of its network architecture (Hyperliquid docs). In practice, operators choose among three broad profiles. A validator participates in consensus and therefore needs signing keys plus stake or eligibility. An archive node emphasizes retaining full history so that historical state and logs remain queryable. A non-validator (read-only) node does neither: it syncs the chain to serve queries and local tooling without voting.
The non-validator profile lowers key-management risk because there are no consensus keys to protect and no slashing surface. It also removes validator eligibility requirements. What remains is the operational work of keeping a synchronized, queryable replica online. That tradeoff is the core of this article: you exchange voting power for read availability.
This distinction matters because read infrastructure and consensus infrastructure fail differently. A validator outage affects participation; a read-only node outage affects your applications and indexers. Treating them as the same deployment profile leads to over-provisioning keys and under-provisioning observability.
- Validator: consensus participation, signing keys, stake or eligibility, slashing exposure.
- Archive node: full history retention, larger storage footprint, historical query support.
- Non-validator (read-only): syncs and serves queries, no voting, no signing keys, no stake requirement.
Resource profile: storage, RAM, CPU, and bandwidth
A non-validator node's resource profile is driven by chain growth and your retention policy. Storage grows with the chain and with how much history you keep; an archive-style retention policy costs more disk than a pruned read replica. RAM is consumed by state and indexes, and CPU is consumed by execution and query handling. Bandwidth is consumed twice: inbound for chain ingest and outbound for query responses.
Because these values depend on network conditions and your configuration, treat any specific number as provider-specific or deployment-specific rather than universal. The honest approach is to measure your own node: track disk growth per day, peak RAM during sync and steady state, CPU saturation under query load, and inbound/outbound bandwidth. Documented behavior tells you the shape of the curve; your measurements tell you the size.
Plan for headroom. Sync and query load can overlap, and disk pressure is the most common cause of read-node instability. If you cannot justify the operational cost at small scale, a managed provider may be more cost-effective; see RPC pricing and the API service for comparison.
- Storage: grows with chain and retention; archive retention costs more than pruned.
- RAM: state and indexes; peaks during sync and heavy query periods.
- CPU: execution plus query handling; watch saturation under load.
- Bandwidth: inbound ingest and outbound query traffic; both matter.
Verifying that a non-validator node is healthy and actually synced
A node can be running and still be useless if it is lagging. Health verification has three parts: compare the node's latest block height against a reference endpoint over several samples and confirm it advances; check peer count and sync status; and confirm read methods return current data. The JSON-RPC 2.0 specification (jsonrpc.org) defines the request shape used for these probes, and the Ethereum JSON-RPC specification (ethereum.org) documents the read methods a non-validator node typically serves.
Single-sample comparisons are unreliable because both your node and the reference can be momentarily behind. Take at least two samples separated by a delay, compute the delta, and compare against the reference height. If your node's height advances and stays within a small delta of the reference, it is synced for practical read purposes.
Record the results in a table so you can compare endpoints and detect regressions over time. The method below is reproducible and does not depend on any provider-specific claim.
- Sample latest block height at least twice with a delay between samples.
- Confirm the height advances between samples.
- Compare against a reference endpoint's height.
- Check peer count and sync status.
- Confirm read methods return current data, not stale state.
Runnable Node.js sync check for a candidate endpoint
The following Node.js script polls a candidate endpoint for the latest block height twice with a delay, compares the delta against a reference value, and prints SYNCED or LAGGING with the observed heights. It uses the JSON-RPC 2.0 request shape and a read method documented in the Ethereum JSON-RPC specification. Replace the placeholder URLs and method with the ones your Hyperliquid node exposes.
Run it against your own endpoint and a reference endpoint you trust. The script is intentionally minimal so you can adapt it to your monitoring stack.
// sync-check.js — Node.js 18+
// Usage: node sync-check.js
const CANDIDATE = process.env.CANDIDATE_URL || 'http://127.0.0.1:8545';
const REFERENCE = process.env.REFERENCE_URL || 'https://your-reference-endpoint.example';
const METHOD = process.env.HEIGHT_METHOD || 'eth_blockNumber';
const DELAY_MS = Number(process.env.DELAY_MS || 5000);
async function rpc(url, method) {
const body = { jsonrpc: '2.0', id: 1, method, params: [] };
const res = await fetch(url, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify(body)
});
if (!res.ok) throw new Error(`HTTP ${res.status} from ${url}`);
const json = await res.json();
if (json.error) throw new Error(`RPC error from ${url}: ${JSON.stringify(json.error)}`);
return BigInt(json.result);
}
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
(async () => {
try {
const h1 = await rpc(CANDIDATE, METHOD);
await sleep(DELAY_MS);
const h2 = await rpc(CANDIDATE, METHOD);
const ref = await rpc(REFERENCE, METHOD);
const delta = h2 - h1;
const gap = ref - h2;
const verdict = delta > 0n && gap <= 5n ? 'SYNCED' : 'LAGGING';
console.log(`candidate sample 1: ${h1}`);
console.log(`candidate sample 2: ${h2}`);
console.log(`reference height: ${ref}`);
console.log(`delta: ${delta}`);
console.log(`gap to reference: ${gap}`);
console.log(`verdict: ${verdict}`);
} catch (err) {
console.error(`check failed: ${err.message}`);
process.exitCode = 1;
}
})();Reproducible results table for endpoint comparison
Use the table below to record measurements from your own endpoints. Fill it in each time you evaluate a new endpoint or suspect a regression. Because the values are yours, they are verifiable by you rather than asserted by this article.
Compare rows across time and across endpoints. A row where the delta is zero indicates a stalled node. A row where the gap to reference is large indicates lag. A row where the delta is positive and the gap is small indicates a healthy read replica.
- Endpoint: the URL you are testing.
- Height sample 1: first observed block height.
- Height sample 2: second observed block height after the delay.
- Reference height: the trusted endpoint's height at the same time.
- Delta: sample 2 minus sample 1.
- Verdict: SYNCED or LAGGING based on your threshold.
| Endpoint | Height sample 1 | Height sample 2 | Reference height | Delta | Verdict |
|----------|-----------------|-----------------|------------------|-------|---------|
| | | | | | |
| | | | | | |
| | | | | | |Securing read-only RPC exposure with TLS and rate limiting
Read-only does not mean safe to expose. A non-validator node's RPC endpoint is still an attack surface. Terminate TLS in front of the node so query traffic is encrypted, and apply rate limiting so a single client cannot exhaust CPU or bandwidth. Restrict administrative methods and bind the node to a private interface where possible.
If you serve WebSocket subscriptions, apply the same discipline. The Hyperliquid WebSocket subscriptions guide covers subscription behavior; the security posture is the same as for HTTP: authenticate where needed, limit connection counts, and monitor for abuse.
Documented provider behavior varies: some managed endpoints include TLS and rate limiting by default, while self-hosted nodes require you to add them. Treat this as a configuration responsibility, not an automatic property of running a node.
- Terminate TLS in front of the RPC endpoint.
- Apply rate limiting per client and per method.
- Restrict administrative methods and bind to private interfaces.
- Monitor connection counts and abuse patterns.
Troubleshooting common non-validator node failures
Most read-node failures fall into a few categories: sync stalls, disk pressure, memory exhaustion, and query errors. Start with the sync check above. If the delta is zero, the node is stalled; check peer count and sync status, then inspect logs for ingest errors. If the gap to reference is large but the delta is positive, the node is catching up; allow time and monitor progress.
Disk pressure often presents as slow queries or crashes. Check free space and growth rate. Memory exhaustion typically appears under query load; reduce concurrency or add RAM. Query errors may indicate an unsupported method or a stale index; confirm the method is documented in the Ethereum JSON-RPC specification and that your node is fully synced.
When in doubt, isolate variables: test the node locally, then through your TLS proxy, then from the application. This separates node health from network and configuration issues.
- Stalled sync: check peers, sync status, and ingest logs.
- Lagging sync: confirm positive delta and monitor progress.
- Disk pressure: check free space and growth rate.
- Memory exhaustion: reduce concurrency or add RAM.
- Query errors: verify method support and sync completeness.
Limitations and tradeoffs of self-hosted read infrastructure
A non-validator node still requires ongoing operations: upgrades, disk management, and monitoring. Sync from genesis takes time and bandwidth, and read-only does not remove the need to secure RPC exposure with TLS and rate limiting. These are real costs, not footnotes.
For many teams, a managed provider remains more cost-effective than self-hosting read infrastructure at small scale. The decision hinges on scale, latency sensitivity, and control requirements. If your query volume is low or bursty, a managed endpoint may be simpler. If you need isolation, predictable latency, or independent state inspection, self-hosting may justify the overhead.
The honest framing is that a non-validator node is an operational commitment. It reduces key-management risk and eligibility requirements, but it does not eliminate operational work. Compare the total cost of ownership against RPC pricing and the API service before committing.
- Ongoing upgrades, disk management, and monitoring.
- Sync from genesis takes time and bandwidth.
- Read-only still requires TLS and rate limiting.
- Managed providers may be more cost-effective at small scale.
Next steps: from read replica to production read infrastructure
Once your non-validator node is synced and secured, integrate it into your application and monitoring. Add the sync check to a scheduled job, record results in the table above, and alert on stalled or lagging states. If you need historical state, evaluate archive retention; if you need subscriptions, review the WebSocket guide.
For network-level context, see the Hyperliquid network page and the OnFinality Learn hub for related infrastructure articles. If you decide to use a managed endpoint for part of your traffic, the Hyperliquid RPC endpoints (RPC Assistant) reference can help you compare options.
The goal is not to run a node for its own sake, but to own the read path where it matters. Start with a single replica, measure it honestly, and scale only when the measurements justify it.
- Schedule the sync check and alert on failures.
- Record measurements over time to detect regressions.
- Evaluate archive retention if historical state is needed.
- Compare self-hosted and managed options before scaling.