Network and Testnet
The Solidus testnet is live and producing blocks. This page covers how to connect, the available RPC methods, the block explorer, and the testnet faucet.
Testnet Status
The testnet is running with the following configuration:
| Parameter | Value |
|---|---|
| Validators | 4 |
| Consensus | HotStuff BFT |
| Block time | ~2.5 seconds |
| Finality | 3-chain (~7.5 seconds) |
| RPC endpoint | https://rpc.solidus.network |
| Explorer | explorer.solidus.network |
| Faucet balance | ~1.9M SLDS available |
| Native token | SLDS |
Connecting to the Testnet
Using the SDK
The simplest way to connect is through @solidus-network/sdk:
import { createSdk } from '@solidus-network/sdk'
const sdk = createSdk({
mode: 'testnet',
chain: {
rpcUrl: 'https://rpc.solidus.network',
signerPrivateKey: privateKeyHex,
network: 'testnet',
},
})Using curl
You can query the testnet directly via JSON-RPC:
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "solidus_getLatestBlock",
"params": [],
"id": 1
}'Using JavaScript
For direct RPC calls without the SDK:
async function rpcCall(method: string, params: unknown[] = []) {
const response = await fetch('https://rpc.solidus.network', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method,
params,
id: 1,
}),
})
const data = await response.json()
return data.result
}RPC Methods
The testnet exposes the following JSON-RPC methods.
solidus_getLatestBlock
Returns the most recent finalized block.
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "solidus_getLatestBlock",
"params": [],
"id": 1
}'Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"height": 584210,
"hash": "0x3a8f1b2c...d7e9f0a1",
"previousHash": "0x7c2d4e6f...b8a1c3d5",
"stateRoot": "0x9f0e1d2c...4b5a6c7d",
"timestamp": 1746612345,
"proposer": "0x4a2b3c...validator-pubkey",
"transactionCount": 12
}
}solidus_getBlock
Returns a block by height.
Parameters: [blockHeight: number]
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "solidus_getBlock",
"params": [584210],
"id": 1
}'Response includes the full block with header and transactions.
solidus_didResolve
Resolves a DID and returns its DID Document.
Parameters: [did: string]
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "solidus_didResolve",
"params": ["did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR"],
"id": 1
}'Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"document": {
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/suites/ed25519-2020/v1"
],
"id": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"verificationMethod": [
{
"id": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR#key-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"publicKeyMultibase": "z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"
}
],
"authentication": [
"did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR#key-1"
],
"assertionMethod": [
"did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR#key-1"
]
},
"active": true
}
}solidus_getValidators
Returns the current validator set.
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "solidus_getValidators",
"params": [],
"id": 1
}'Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"validators": [
{
"publicKey": "0x4a2b3c...key1",
"stake": 250000,
"isLeader": true
},
{
"publicKey": "0x5b3c4d...key2",
"stake": 250000,
"isLeader": false
},
{
"publicKey": "0x6c4d5e...key3",
"stake": 250000,
"isLeader": false
},
{
"publicKey": "0x7d5e6f...key4",
"stake": 250000,
"isLeader": false
}
],
"totalStake": 1000000,
"quorum": 3
}
}solidus_getAccount
Returns account information including balance and nonce.
Parameters: [address: string]
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "solidus_getAccount",
"params": ["7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR"],
"id": 1
}'Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"address": "7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"balance": 1000000,
"nonce": 5,
"did": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR"
}
}solidus_getTransaction
Returns a transaction by hash.
Parameters: [transactionHash: string]
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "solidus_getTransaction",
"params": ["0x3a8f1b2c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f"],
"id": 1
}'Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"hash": "0x3a8f1b2c...9e0f",
"type": "CredentialIssue",
"blockHeight": 584200,
"timestamp": 1746612300,
"from": "7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"status": "finalized",
"data": {
"credentialHash": "0x9f0e1d2c...hash",
"issuer": "did:solidus:testnet:4Wp9xKjRvNmQ3eYhT8bC2aFs7gDzLpUk",
"subject": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"credentialType": "KycLevel1Credential"
}
}
}solidus_sendTransaction
Submits a signed transaction to the network.
Parameters: [signedTransaction: object]
curl -X POST https://rpc.solidus.network \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "solidus_sendTransaction",
"params": [{
"type": "Transfer",
"from": "7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"to": "9Jm5nPsVuRxT4wBhL2cD7gFk8iEzMqXy",
"amount": 1000,
"nonce": 6,
"signature": "0xabc123...signed"
}],
"id": 1
}'Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"transactionHash": "0x5d1a2b3c...hash",
"status": "pending"
}
}In practice, use the SDK rather than constructing raw transactions. The SDK handles nonce management, signing, and serialization.
Block Explorer
The block explorer at explorer.solidus.network provides a web interface for browsing the testnet. You can:
- View the latest blocks and their transactions
- Look up accounts by address
- Search for transactions by hash
- Inspect DID Documents
- Monitor validator activity and network health
Testnet Faucet
The testnet faucet distributes test SLDS tokens for development. Approximately 1.9 million SLDS are available.
To request testnet tokens, use the faucet endpoint:
curl -X POST https://rpc.solidus.network/faucet \
-H "Content-Type: application/json" \
-d '{
"address": "7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR"
}'Testnet tokens have no monetary value. They are used for paying transaction fees during development.
Mainnet Status
Mainnet has not yet launched. The testnet is the current production network for development and testing. Key differences to expect when mainnet launches:
- Validator set — mainnet will have a larger, permissionless validator set
- Token value — mainnet SLDS tokens will have real economic value for staking and fees
- Credential permanence — credentials issued on testnet will not carry over to mainnet
- Breaking changes — the protocol may undergo breaking changes before mainnet launch
All SDKs and applications currently target the testnet. When mainnet launches, switching will require changing the network and rpcUrl in the SDK configuration.
Network Health Monitoring
You can check the network status by querying the latest block and comparing the timestamp to the current time. If the latest block is more than 10 seconds old, the network may be experiencing issues.
import { createSdk } from '@solidus-network/sdk'
const sdk = createSdk({
mode: 'testnet',
chain: {
rpcUrl: 'https://rpc.solidus.network',
network: 'testnet',
},
})
const block = await sdk.chain.getLatestBlock()
const age = Date.now() / 1000 - block.timestamp
if (age > 10) {
console.warn('Network may be slow. Latest block is', age, 'seconds old.')
} else {
console.log('Network healthy. Block height:', block.height)
}Next Steps
- Getting Started — start building with the SDK
- Architecture — understand consensus, state model, and transaction types
- DIDs — create and resolve identifiers on the testnet
- Credentials — issue and verify credentials on-chain