JSON-RPC
The Solidus blockchain exposes a JSON-RPC 2.0 endpoint for querying blocks, transactions, accounts, and DID documents directly from the network.
Endpoint: https://rpc.solidus.network
All requests use POST with Content-Type: application/json. No authentication is required.
Request Format
Every request follows the JSON-RPC 2.0 specification.
{
"jsonrpc": "2.0",
"method": "method_name",
"params": [],
"id": 1
}Error Format
Errors follow the JSON-RPC 2.0 error object structure.
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Invalid params: DID not found"
},
"id": 1
}| Code | Meaning |
|---|---|
-32700 | Parse error — invalid JSON |
-32600 | Invalid request — missing required fields |
-32601 | Method not found |
-32602 | Invalid params |
-32603 | Internal error |
Methods
There is no solidus_getAccount method — a call to it returns {"error":{"code":-32601,"message":"Method not found"}}. Account balance and nonce are two separate calls: solidus_getBalance and solidus_getNonce. All hashes below are lowercase hex with no 0x prefix, timestamps are Unix milliseconds (timestamp_ms), and response shapes below were captured live from rpc.solidus.network.
solidus_getBalance
Returns the balance (smallest units) for a base58 address.
| Param | Type | Description |
|---|---|---|
address | string | Base58-encoded account address |
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"solidus_getBalance","params":["3GfjBM7v6LZ1N5zp1b12gfpwCN8j"],"id":1}'// Response
{ "jsonrpc": "2.0", "id": 1, "result": 1000000000000 }solidus_getNonce
Returns the current nonce (next expected transaction index) for a base58 address.
| Param | Type | Description |
|---|---|---|
address | string | Base58-encoded account address |
{ "jsonrpc": "2.0", "id": 1, "result": 0 }solidus_getLatestBlock
Returns the most recent committed block, or null if no blocks exist.
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"solidus_getLatestBlock","params":[],"id":1}'// Response (measured live)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"height": 82054,
"round": 6495,
"hash": "7bdd7ba192080a011f4564bae0d065401e2efa6a257f52df0eeb0ae284e01d02",
"parent_hash": "261c0ac7955a5359b653f189a720ddd1358650772e35734003093fb2bc324800",
"state_root": "c2a009a8fc5f869aee238febb2e362694bd3828748158d758e52420f5a15c89d",
"transactions_root": "0000000000000000000000000000000000000000000000000000000000000000",
"timestamp_ms": 1785314852140,
"tx_count": 0,
"proposer": "KoYahYf66hCp2wqTJFCxrzYpQ5r",
"transactions": []
}
}transactions is a bare array of hex transaction-hash strings, not an array of objects. round is
the consensus round the block was proposed in; tx_count mirrors transactions.length.
solidus_getBlock
Returns a block by height, or null if it does not exist. Same response shape as solidus_getLatestBlock.
| Param | Type | Description |
|---|---|---|
height | number | The block height to retrieve |
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"solidus_getBlock","params":[1],"id":1}'solidus_getBlockBySeq
Returns a block by its contiguous canonical sequence number (distinct from height, which can be
lossy under fast leader rotation), or null if nothing is canonized at that seq. Response shape
matches solidus_getLatestBlock.
| Param | Type | Description |
|---|---|---|
seq | number | Canonical sequence number |
solidus_canonHead
Returns the head of the canonical ledger, or null if no blocks have been canonized.
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"solidus_canonHead","params":[],"id":1}'{ "jsonrpc": "2.0", "id": 1, "result": { "seq": 80335, "hash": "7bdd7ba192080a011f4564bae0d065401e2efa6a257f52df0eeb0ae284e01d02" } }solidus_blockNumber
Returns just the latest committed block height.
{ "jsonrpc": "2.0", "id": 1, "result": 82054 }solidus_chainInfo
Returns chain metadata — id, native token, genesis hash, latest height, node version.
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"solidus_chainInfo","params":[],"id":1}'// Response (measured live)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"chain_id": "solidus-testnet-1",
"native_token": { "symbol": "SLDS", "name": "Solidus", "decimals": 8 },
"genesis_hash": "fd5c6ad7951a6a0352290e0731feb05e2fc96650030b8280a52518267e23a312",
"latest_block": 82054,
"version": "0.1.0"
}
}solidus_nodeInfo
Returns process-level node observability: version, uptime, resident memory.
// Response (measured live)
{ "jsonrpc": "2.0", "id": 1, "result": { "version": "0.1.0", "uptime_seconds": 1244870, "rss_bytes": 165449728 } }solidus_getReceipt
Returns the execution receipt for a transaction hash, or null if not found.
| Param | Type | Description |
|---|---|---|
tx_hash | string | Hex transaction hash (no 0x prefix) |
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tx_hash": "<hex>",
"status": "success",
"block_height": 82054,
"fee_paid": 10000,
"events": [{ "type": "Transfer", "from": "...", "to": "...", "amount": 500 }]
}
}status is either "success" or "failed: <reason>".
solidus_getTransaction
Returns the full transaction JSON for a hash (scanning blocks backwards from the latest —
acceptable on testnet), or null if not found.
| Param | Type | Description |
|---|---|---|
tx_hash | string | Hex transaction hash |
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"solidus_getTransaction","params":["<hex tx hash>"],"id":1}'The result is the raw signed transaction — {sender_pubkey, nonce, payload, signature} — not a
{tx, receipt} wrapper. Use solidus_getReceipt separately for execution status.
solidus_sendTransaction
Submit a signed transaction (a JSON-encoded string, not an object) to the network. Returns the transaction hash as a hex string.
| Param | Type | Description |
|---|---|---|
tx_json | string | JSON-stringified signed transaction |
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"solidus_sendTransaction","params":["<JSON-stringified signed tx>"],"id":1}'{ "jsonrpc": "2.0", "id": 1, "result": "<hex tx hash>" }The transaction is added to the mempool. Use solidus_getReceipt with the returned hash to check
when it is included in a block. In practice, use the SDK rather than constructing raw transactions
— it handles nonce management, signing, and serialization.
solidus_didResolve
Resolve a DID to its DID Document, or null if it does not exist.
| Param | Type | Description |
|---|---|---|
did | string | The DID to resolve |
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"solidus_didResolve","params":["did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K"],"id":1}'The result is the DID document itself (not wrapped in a document field), including active,
created_ms, updated_ms, and version_id. See DIDs for the full field-by-field
shape, which this method matches exactly.
solidus_credentialVerify
Verify a credential by ID. Returns validity and the credential record, or null if the credential
does not exist.
| Param | Type | Description |
|---|---|---|
credential_id | string | The credential ID (e.g. urn:solidus:credential:...) |
{
"jsonrpc": "2.0",
"id": 1,
"result": { "valid": true, "credential": { "id": "...", "issuer_did": "...", "subject_did": "...", "credential_type": "Email", "hash": "<hex>", "issued_ms": 0, "revoked": false, "revoked_ms": null }, "revoked": false }
}solidus_credentialsBySubject
Returns all credentials where the given DID is the subject, as a bare array (empty array if none).
| Param | Type | Description |
|---|---|---|
did | string | The subject DID |
solidus_credentialsByIssuer
Returns all credentials where the given DID is the issuer, as a bare array. Same record shape as
solidus_credentialsBySubject.
| Param | Type | Description |
|---|---|---|
did | string | The issuer DID |
solidus_getValidators
Returns the active validator set as a bare array — not wrapped in {validators: [...]}.
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"solidus_getValidators","params":[],"id":1}'// Response (measured live — 5 validators currently active)
{
"jsonrpc": "2.0",
"id": 1,
"result": [
{ "address": "3GfjBM7v6LZ1N5zp1b12gfpwCN8j", "staked": 1000000000000, "unbonding": 0, "reputation": 1000, "active": true },
{ "address": "28gvczeVVVQjy6MpP4yexmd3xEsm", "staked": 0, "unbonding": 0, "reputation": 0, "active": true },
{ "address": "2ddrNYxwr5V42QJmDgpphzGuWrAK", "staked": 0, "unbonding": 0, "reputation": 0, "active": true },
{ "address": "2VnFvB9X8BW5QxDAD1wJjjd8AJvT", "staked": 0, "unbonding": 0, "reputation": 0, "active": true },
{ "address": "KoYahYf66hCp2wqTJFCxrzYpQ5r", "staked": 0, "unbonding": 0, "reputation": 0, "active": true }
]
}There is no public_key, isLeader, totalStake, or quorum field. Each entry carries
address, staked, unbonding (amount in the 21-day unbonding lock), reputation (0–1000), and
active.
solidus_getValidatorStake
Returns a single validator’s info for a base58 address, or null if not found. Same record shape
as one entry in solidus_getValidators.
| Param | Type | Description |
|---|---|---|
address | string | Base58 validator address |
solidus_bbsVerifyProof
Verify a BBS+ selective-disclosure proof statelessly (no chain lookup). All hex inputs must be lowercase.
| Param | Type | Description |
|---|---|---|
proof_hex | string | Hex-encoded BBS+ proof |
pubkey_hex | string | Hex-encoded BBS+ public key |
header_hex | string | Hex-encoded signature header |
ph_hex | string | Hex-encoded presentation header |
disclosed_messages | {index: number, message: string}[] | Disclosed message indices + hex message bytes |
total_message_count | number | Total messages in the originally signed vector |
Returns true iff the proof is cryptographically valid.
solidus_bbsVerifyCredentialProof
Verify a BBS+ proof against an on-chain credential record — looks up the credential by ID, pulls
its bbs_pubkey/bbs_message_count from chain state, then verifies. Combines proof validity with
revocation status.
| Param | Type | Description |
|---|---|---|
credential_id | string | The credential ID |
proof_hex | string | Hex-encoded BBS+ proof |
header_hex | string | Hex-encoded signature header |
ph_hex | string | Hex-encoded presentation header |
disclosed_messages | {index: number, message: string}[] | Disclosed message indices + hex message bytes |
{
"jsonrpc": "2.0",
"id": 1,
"result": { "valid": true, "proof_valid": true, "is_bbs": true, "revoked": false, "credential": { "...": "..." } }
}