JSON-RPC API
SciChain exposes the full standard Ethereum JSON-RPC surface — every eth_, net_, and web3_ method your tools already use — plus QBFT consensus methods and post-quantum transaction fields. All requests go to https://rpc.scimatic.net.
Making a request
SciChain speaks JSON-RPC 2.0 over HTTPS POST. Every request is a JSON object with four fields:
{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
}
A minimal call to fetch the current block height:
curl https://rpc.scimatic.net \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
# => {"jsonrpc":"2.0","id":1,"result":"0x1a2b3c"}
Batch requests are supported. Send an array of request objects in a single POST and you receive an array of responses, matched by id. Batching cuts round-trips when you need many reads at once.
Standard Ethereum methods
Because SciChain is EVM-compatible, the entire standard method set behaves exactly as it does on Ethereum. The most commonly used methods:
| Method | Description |
|---|---|
eth_chainId | Returns the chain ID — 0x1e1 (481) for SciChain. |
eth_blockNumber | Number of the most recent block. |
eth_getBalance | Native SCI balance of an address at a given block. |
eth_getTransactionByHash | Transaction details by hash (includes SciChain PQC fields). |
eth_getTransactionReceipt | Receipt with status, gas used, and emitted logs. |
eth_getBlockByNumber | Block by number or tag (latest, earliest, pending). |
eth_call | Execute a read-only contract call without a transaction. |
eth_estimateGas | Estimate the gas a transaction would consume. |
eth_gasPrice | Current gas price suggestion, in wei. |
eth_sendRawTransaction | Submit a signed transaction (classical or post-quantum). |
eth_getLogs | Query event logs by address, topics, and block range. |
net_version | Network ID as a decimal string — 481. |
web3_clientVersion | Client version string (Besu 25.x lineage). |
Read an account balance at the latest block:
curl https://rpc.scimatic.net \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getBalance",
"params":["0x9f2c4a1b8e7d6c5a4b3c2d1e0f9a8b7c6d5e4f3a","latest"],"id":1}'
# => {"jsonrpc":"2.0","id":1,"result":"0x2386f26fc10000"} // 0.01 SCI
Fetch the latest block header (pass false to get transaction hashes only, true for full objects):
curl https://rpc.scimatic.net \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getBlockByNumber",
"params":["latest",false],"id":1}'
Post-quantum transaction fields
SciChain extends the standard transaction result object with two fields that describe how a transaction was authenticated. These appear on objects returned by eth_getTransactionByHash and on full transaction objects inside blocks.
| Field | Type | Description |
|---|---|---|
signatureType | QUANTITY | The signature scheme used, mapping to the SciChain signature-type registry: 0x1 = ML-DSA-44, 0x2 = ML-DSA-65, 0x3 = ML-DSA-87, 0x4 = SLH-DSA-SHA2-128s, 0x5 = hybrid ECDSA+ML-DSA. Absent or 0x0 for a classical ECDSA transaction. |
publicKey | DATA | The signer's post-quantum public key, hex-encoded. Present only on post-quantum transactions. For ML-DSA-44 this is 1312 bytes. |
Look up a post-quantum transaction:
curl https://rpc.scimatic.net \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getTransactionByHash",
"params":["0xdc7f...e91a"],"id":1}'
The response carries the usual Ethereum fields plus the two SciChain extensions:
{
"jsonrpc": "2.0", "id": 1,
"result": {
"hash": "0xdc7f...e91a",
"nonce": "0x5",
"blockNumber": "0x1a2b3c",
"from": "0x9f2c4a1b8e7d6c5a4b3c2d1e0f9a8b7c6d5e4f3a",
"to": "0x3a1f9c8b7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a",
"value": "0x2386f26fc10000",
"gas": "0x5208",
"gasPrice": "0x3b9aca00",
"input": "0x",
"signatureType": "0x1", // ML-DSA-44 (Dilithium2)
"publicKey": "0x8b41c0f9...e3a7" // 1312-byte ML-DSA public key (truncated)
}
}
Classical transactions keep the standard shape. An ECDSA transaction returns the familiar v, r, s signature fields and omits publicKey; its signatureType is absent or 0x0. This keeps existing Ethereum tooling fully compatible while post-quantum data is purely additive.
QBFT methods
SciChain's QBFT consensus exposes a dedicated qbft_ namespace for inspecting and managing the validator set. Validator changes happen through on-chain votes — see Consensus (QBFT) for the full model.
| Method | Params | Description |
|---|---|---|
qbft_getValidatorsByBlockNumber | [blockTag] | Validator addresses active at a given block number or tag. |
qbft_getValidatorsByBlockHash | [blockHash] | Validator addresses active at a given block hash. |
qbft_proposeValidatorVote | [address, bool] | Cast a vote to add (true) or remove (false) a validator. |
qbft_discardValidatorVote | [address] | Retract a vote this node previously proposed. |
qbft_getPendingVotes | [] | All add/remove votes currently pending on this node. |
qbft_getSignerMetrics | [fromBlock, toBlock] | Per-validator proposal counts over a block range. |
Read the current validator set:
curl https://rpc.scimatic.net \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber",
"params":["latest"],"id":1}'
# => {"jsonrpc":"2.0","id":1,"result":[
# "0xa1b2...","0xc3d4...","0xe5f6...","0x0718..."]} // 4 validators
Propose adding a new validator (run against your own node — see the note below):
curl http://localhost:8545 \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"qbft_proposeValidatorVote",
"params":["0x7a9f3c1e5b8d2a4c6e0f1b3d5a7c9e2f4b6d8a0c", true],"id":1}'
Admin methods
The Besu admin_ namespace lets a node operator inspect and manage peering.
| Method | Description |
|---|---|
admin_nodeInfo | This node's enode URL, protocols, ports, and public key. |
admin_peers | Currently connected peers and their capabilities. |
admin_addPeer | Manually add a static peer by enode URL. |
admin_removePeer | Disconnect and drop a peer by enode URL. |
These methods are not on the public endpoint. The admin_ namespace and the vote-casting qbft_ methods (proposeValidatorVote, discardValidatorVote) are administrative and are only enabled on a node's own RPC interface — typically http://localhost:8545, bound to localhost or a trusted network. The public https://rpc.scimatic.net endpoint exposes read methods only.
web3 & net utilities
A few low-level utility methods round out the surface:
web3_clientVersion— returns the client version string, reflecting SciChain's Besu 25.x lineage.net_version— returns the network ID as a decimal string,481.net_peerCount— returns the number of peers currently connected to the node, as a hex quantity.
curl https://rpc.scimatic.net \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}'
Related reading See Transactions & addresses for how post-quantum transactions are built and signed, and Consensus (QBFT) for how the validator-management methods fit into the consensus model.