Services & URIs
Explorer, RPC, WebSocket, faucet, downloads, snapshots, torrent, bootnode, and NTP endpoints.
Public ROKO services
Use the values in `network-manifest.json` as the machine-readable source of truth. This page explains how to use them.
Service catalog
| Name | Purpose | Protocol |
|---|---|---|
| `explorer.roko.network` | blocks, transactions, tokens, validators | HTTPS |
| `rpc.roko.network` | safe chain and temporal queries | JSON-RPC over HTTPS/WSS |
| `faucet.roko.network` | testnet ROKO for user-controlled wallets | HTTPS |
| `downloads.roko.network` | native and offline-container releases | HTTPS |
| `snapshots.roko.network` | verified full/archive bootstrap data | HTTPS and BitTorrent |
| `downloads.roko.network/torrent` | public artifact seeding guide | HTTPS and BitTorrent |
| `boot.roko.network` | initial peer discovery | ROKO libp2p multiaddress over TCP |
| `time.roko.network` | public UTC time source | NTPv4 over UDP/123 |
The DNS names deliberately hide implementation details. Do not depend on a resolved address remaining fixed.
Explorer, faucet, and artifacts
- Browse the chain at explorer.roko.network.
- Add testnet funds at faucet.roko.network.
The faucet requires a wallet-signed proof of address control; the signature does not authorize a transaction or fee.
- If your wallet is not configured yet, follow
Wallets and faucet before claiming.
- Install from the current checksum-verified release at
- Bootstrap from a verified normal or archive snapshot at
- Use the peer-assisted download guide for the official
torrent and magnet distribution guide.
- To help other operators download artifacts, follow
BitTorrent seeding. Seeders only share public release and snapshot files; they do not need validator keys or source access.
The explorer-compatible Ethereum JSON-RPC endpoint is `https://explorer.roko.network/api/eth-rpc`. Prefer `https://rpc.roko.network` for native Substrate and temporal methods.
Bootnode
A hostname is not a complete libp2p address. A bootnode multiaddress also contains its transport, port, and stable peer ID:
/dns4/boot.roko.network/tcp/30333/ws/p2p/12D3KooWKSBZRtSiGKo8ueJtazCHT89LaBi6ZAtzgbeznf4NtVGj
Pass that entire value to `--bootnodes`. Allow outbound TCP/30333. A node that will accept inbound peers must also allow its configured P2P listen port and advertise a reachable public multiaddress.
This is libp2p traffic, not HTTPS JSON-RPC. An HTTP reverse proxy or ordinary Cloudflare Tunnel is not automatically a libp2p transport.
HTTPS JSON-RPC
Query basic health:
curl --fail --silent --show-error https://rpc.roko.network \
-H 'content-type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"system_health","params":[]}'
Verify chain identity:
curl --fail --silent --show-error https://rpc.roko.network \
-H 'content-type: application/json' \
--data '[
{"jsonrpc":"2.0","id":1,"method":"system_chain","params":[]},
{"jsonrpc":"2.0","id":2,"method":"chain_getBlockHash","params":[0]},
{"jsonrpc":"2.0","id":3,"method":"eth_chainId","params":[]}
]'
Compare the genesis hash and EVM chain ID to the manifest. A DNS name and TLS certificate are not enough to establish that an endpoint serves the intended chain.
Query mesh time:
curl --fail --silent --show-error https://rpc.roko.network \
-H 'content-type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"temporal_getConsensusTime","params":[]}'
The public endpoint is for safe methods. Never send a seed, secret URI, keystore operation, authoring/admin request, or unsigned transaction containing private material to it. Method discovery is not proof that a method is authorized.
Use timeouts, exponential backoff, and more than one provider for a production application. Run your own full/archive node for high volume, privacy, historical-state guarantees, or independence from public rate limits.
WebSocket
Use `wss://rpc.roko.network` for subscriptions. A Polkadot.js example:
import { ApiPromise, WsProvider } from "@polkadot/api";
const api = await ApiPromise.create({
provider: new WsProvider("wss://rpc.roko.network"),
});
const unsubscribe = await api.rpc.chain.subscribeFinalizedHeads((header) => {
console.log(header.number.toString(), header.hash.toHex());
});
process.on("SIGINT", async () => {
unsubscribe();
await api.disconnect();
});
Applications should act on finalized heads when a reorganization would be unsafe.
Public NTP
Use ROKO as one of several independent, permitted sources:
# /etc/chrony/sources.d/roko.sources
server time.roko.network iburst
pool pool.ntp.org iburst maxsources 3
Then reload and inspect:
sudo chronyc reload sources
chronyc sources -v
chronyc tracking
Do not add `nts` to the ROKO line until the manifest says `ntsVerified: true`. Do not mix leap-smeared and non-smeared sources. Respect server rate limiting and Kiss-o'-Death responses; aggressive polling harms the public service.
NTP transports time to a host. It does not prove an on-chain event timestamp; use temporal RPC for that.
Reporting a problem
Report the problem through the operator form, the ROKO Telegram, or the ROKO Discord. Include:
- the public DNS name and protocol;
- UTC observation time;
- client software/version;
- sanitized error and retry behavior; and
- the manifest genesis hash you expected.
Remove local addresses, peer lists, credentials, headers/tokens, and unrelated logs.