Skip to Content
NetworkDevnet v2

Devnet v2

devnet-v2.solidus.network is not a product — it’s the smallest possible way to let a stranger hit a real v2 consensus RPC endpoint over HTTPS. Be precise about what it is before using it for anything.


What it is

A single Hetzner box (cx23, 2 vCPU / 4GB) running four solidus-noded validator processes, co-located on that one box, provisioned by protocol/apps/consensus/deploy/devnet-provision.sh. Its own chain ID is 50002 — distinct from the live testnet. nginx proxies validator 0’s RPC port (:8545) at the root.

curl -X POST https://devnet-v2.solidus.network \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"solidus_getBlockHeight","params":[],"id":1}'
// Response — measured live { "jsonrpc": "2.0", "id": 1, "result": 141208 }

What it is not

  • Not geo-distributed. All four validators run on the same box. There is no 3-region BFT claim here — that’s a separate, larger deployment (deploy/tier-b-testnet.sh, “Tier B”).
  • Not the live chain. It has its own chain ID (50002) and never touches rpc.solidus.network or the production testnet in any way.
  • Has no restart recovery. A reboot replays from genesis — this box is a throwaway demonstration environment, not something to build a persistent integration against.
  • Carries no $SLDS. Its faucet dispenses this chain’s own dev-genesis token, not the real testnet’s SLDS.

Why it exists

It turns “64.9K TPS on a laptop” — an internal execution benchmark — into something an outsider can independently verify by making an HTTP call. That’s the entire scope. Don’t build a product integration against it.


RPC surface

Devnet v2 runs a separate, smaller RPC implementation (solidus-rpc2) from the main testnet’s solidus-rpc (documented at JSON-RPC) — the method set and the transaction encoding are both different. It exposes exactly six methods:

MethodParamsReturns
solidus_getBalance[address] (base58)Balance as a decimal string
solidus_getNonce[address] (base58)Nonce as a number
solidus_getBlockHeight[]Current block height as a number
solidus_getStateRoot[]Current state root, hex-encoded
solidus_getReceipt[height, txHash]two params, unlike the main chain’s single-param getReceiptExecution receipt
solidus_submitTransaction[hexTransaction] — a hex-encoded bincode-serialized transaction, not the main chain’s JSON-stringified transactionTransaction hash, hex-encoded

There is no solidus_chainInfo, solidus_nodeInfo, solidus_didResolve, or any of the other methods the main testnet exposes — calling one returns {"error":{"code":-32601,"message":"Method not found"}}.

curl -X POST https://devnet-v2.solidus.network \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"solidus_getStateRoot","params":[],"id":1}'
// Response — measured live { "jsonrpc": "2.0", "id": 1, "result": "e4638ab60f7236b5d57e096fd68aae262313c9748f93e2c5b93f14b08e75a267" }
curl -X POST https://devnet-v2.solidus.network \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"solidus_getReceipt","params":[141208,"<hex tx hash>"],"id":1}'
// Response — shape { "jsonrpc": "2.0", "id": 1, "result": { "txHash": "<hex>", "status": "success", "failureReason": null, "blockHeight": 141208, "feePaid": "10000", "eventCount": 1 } }

solidus_submitTransaction expects bincode-serialized transaction bytes, hex-encoded — it does not accept the JSON-stringified transaction shape solidus_sendTransaction takes on the main testnet. The two chains are not wire-compatible; don’t reuse a testnet SDK transaction encoder here without checking.

GET /

A browser GET / returns a plain landing page (nginx intercepts the JSON-RPC server’s 405 on non-POST and serves static HTML), the same dual-usage pattern rpc.solidus.network uses.


Faucet

solidus-noded faucet runs as a separate systemd unit, proxied at /faucet/ on the same box, at a testnet-grade rate limit. It dispenses this chain’s own dev-genesis token — not real SLDS.

Last updated on