SciChainDocs

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:

MethodDescription
eth_chainIdReturns the chain ID — 0x1e1 (481) for SciChain.
eth_blockNumberNumber of the most recent block.
eth_getBalanceNative SCI balance of an address at a given block.
eth_getTransactionByHashTransaction details by hash (includes SciChain PQC fields).
eth_getTransactionReceiptReceipt with status, gas used, and emitted logs.
eth_getBlockByNumberBlock by number or tag (latest, earliest, pending).
eth_callExecute a read-only contract call without a transaction.
eth_estimateGasEstimate the gas a transaction would consume.
eth_gasPriceCurrent gas price suggestion, in wei.
eth_sendRawTransactionSubmit a signed transaction (classical or post-quantum).
eth_getLogsQuery event logs by address, topics, and block range.
net_versionNetwork ID as a decimal string — 481.
web3_clientVersionClient 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.

FieldTypeDescription
signatureTypeQUANTITYThe 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.
publicKeyDATAThe 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.

MethodParamsDescription
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.

MethodDescription
admin_nodeInfoThis node's enode URL, protocols, ports, and public key.
admin_peersCurrently connected peers and their capabilities.
admin_addPeerManually add a static peer by enode URL.
admin_removePeerDisconnect 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.