JSON-RPC API
zeniqsmartd, the ZENIQ Smart Chain full node, serves a standard Ethereum
JSON-RPC interface plus a set of ZENIQ-specific extension methods. Because
the node is Ethereum-compatible, existing Web3 tooling (MetaMask, ethers.js,
web3.js, Hardhat, Truffle, Remix) works out of the box β point it at a ZENIQ
Smart Chain RPC endpoint and it behaves like any other EVM chain.
| Role | URL |
|---|---|
| Primary (HTTPS) | https://api.zeniq.network |
| Fallback (HTTPS) | https://zsc.nomo.rest |
| Legacy (HTTP / WSS) | http://smart.zeniq.network:9545 Β· ws://smart.zeniq.network:9546 |
Chain ID: 383414847825 (0x59454e4951) Β· Currency: ZENIQ Β· Block time: ~4 s
The wss/ws endpoint is required for subscriptions (eth_subscribe); the
HTTPS endpoints are request/response only.
Making a callβ
Every request is an HTTP POST with a JSON body:
curl https://api.zeniq.network \
-H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
{ "jsonrpc": "2.0", "id": 1, "result": "0x2596e3f" }
Block-number parameters accept a hex height ("0x1b4") or one of the tags
"latest", "earliest", "pending". Quantities are 0x-prefixed hex.
Namespacesβ
The node exposes seven namespaces:
| Namespace | Purpose |
|---|---|
eth | Standard Ethereum account/block/transaction/log/filter methods |
net | Network/peer status |
web3 | Client metadata + hashing helper |
txpool | Pending/queued transaction pool inspection |
zeniq | ZENIQ extension methods (rich queries, receipts with internal txs, validators, cross-chain) |
sbch | Exact alias of zeniq β retained for smartBCH tooling compatibility |
debug | Node diagnostics |
zeniq_* == sbch_*ZENIQ Smart Chain is a fork of smartBCH. The extension
methods are registered under both the zeniq_ and sbch_ prefixes and are
backed by the same service, so zeniq_validatorsInfo and sbch_validatorsInfo
are identical. New integrations should prefer zeniq_*; sbch_* exists so that
smartBCH-era clients keep working unchanged.
Standard Ethereum methodsβ
The support matrix below was verified against the live node
(zeniqsmartd/v0.7.3). It reflects what the network actually answers today,
which differs in places from generic smartBCH / go-ethereum documentation.
web3β
| Method | Supported | Notes |
|---|---|---|
web3_clientVersion | β | Returns e.g. zeniqsmartd/v0.7.3 |
web3_sha3 | β | Keccak-256 of the given data |
netβ
| Method | Supported | Notes |
|---|---|---|
net_version | β | Returns the chain ID as a decimal string, 383414847825 |
net_listening | β | |
net_peerCount | β |
ethβ
| Method | Supported | Notes |
|---|---|---|
eth_chainId | β | 0x59454e4951 |
eth_protocolVersion | β | |
eth_syncing | β | |
eth_gasPrice | β | Legacy gas model β see Gas |
eth_blockNumber | β | |
eth_getBalance | β | |
eth_getStorageAt | β | |
eth_getTransactionCount | β | |
eth_getCode | β | |
eth_call | β | |
eth_estimateGas | β | |
eth_getBlockByHash / eth_getBlockByNumber | β | |
eth_getBlockTransactionCountByHash / β¦ByNumber | β | |
eth_getTransactionByHash | β | |
eth_getTransactionByBlockHashAndIndex / β¦ByNumberAndIndex | β | |
eth_getTransactionReceipt | β | For internal calls, use zeniq_getTransactionReceipt |
eth_getLogs | β | For unindexed history use zeniq_queryLogs |
eth_sendRawTransaction | β | The recommended way to submit a signed transaction |
eth_newFilter / eth_newBlockFilter / eth_newPendingTransactionFilter | β | |
eth_getFilterChanges / eth_getFilterLogs / eth_uninstallFilter | β | |
eth_accounts | β | Public nodes hold no keys β returns [] |
eth_coinbase | β | |
eth_getUncleCountByBlockβ¦ / eth_getUncleByBlockβ¦ | β | Always 0 / null β the chain has no uncles |
eth_subscribe / eth_unsubscribe | π | WebSocket only (ws://β¦:9546); errors over HTTP |
eth_sendTransaction / eth_sign / eth_signTransaction | β οΈ | Need locally-unlocked accounts, which public nodes do not have β sign client-side and use eth_sendRawTransaction |
eth_feeHistory / eth_maxPriorityFeePerGas | β | No EIP-1559 β the chain uses a legacy (single) gas price |
eth_mining / eth_hashrate / eth_getWork / eth_submitWork / eth_submitHashrate | β | No proof-of-work mining |
eth_getCompilers / eth_compileSolidity / eth_compileLLL / eth_compileSerpent | β | Removed upstream in geth long ago |
txpoolβ
| Method | Supported |
|---|---|
txpool_content | β |
txpool_status | β |
txpool_inspect | β |
ZENIQ extension methods (zeniq_* / sbch_*)β
These methods go beyond the standard Ethereum surface. They are served from the
node's history/query index, so they can answer questions that plain eth_*
methods cannot (e.g. "every transaction touching this address in a height
range", or "the full receipt including internal transactions"). All are
available under both the zeniq_ and sbch_ prefixes.
| Method | Supported | Purpose |
|---|---|---|
zeniq_getTransactionReceipt | β | Receipt including internal transactions |
zeniq_queryTxBySrc | β | Transactions sent from an address in a height range |
zeniq_queryTxByDst | β | Transactions sent to an address in a height range |
zeniq_queryTxByAddr | β | Transactions to or from an address in a height range |
zeniq_queryLogs | β | Logs by contract address + topics over a height range |
zeniq_getTxListByHeight | β | All transactions in a block |
zeniq_getTxListByHeightWithRange | β | As above, sliced to [start, end) |
zeniq_getAddressCount | β | Number of indexed tx entries for an address (kind: from/to/addr) |
zeniq_getSep20AddressCount | β | As above, scoped to a specific SEP-20 (ZEN-20) token contract |
zeniq_call | β | Like eth_call, but returns a detailed execution trace |
zeniq_validatorsInfo | β | Current epoch, validators, pending rewards, min gas price |
zeniq_healthCheck | β | Node liveness / block-freshness probe |
zeniq_getSyncBlock | β | Raw serialized block for fast-sync tooling |
zeniq_crosschainInfo | β | ZENIQ-only β cross-chain (CCRPC) transfers from the ZENIQ main chain |
The following smartBCH methods are not part of this fork and return
-32601 method not found: getStandbyValidatorsInfo, getEpochs, getEpoch,
getVoteInfos. getStandbyTxQueue is present but unimplemented (it errors) and
should not be relied upon.
zeniq_getTransactionReceiptβ
zeniq_getTransactionReceipt(txHash) β receipt object.
Same shape as eth_getTransactionReceipt, but augmented with an
internalTransactions array β every internal call made during execution. Each
entry carries callPath, from, to, gas, value, input, status,
gasUsed, output and (for creations) contractAddress. Useful for tracing
contract-to-contract value flow that the standard receipt hides.
curl https://api.zeniq.network -H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"zeniq_getTransactionReceipt",
"params":["0x<txhash>"]}'
zeniq_queryTxBySrc / β¦ByDst / β¦ByAddrβ
zeniq_queryTxBySrc(address, startHeight, endHeight, limit)
zeniq_queryTxByDst(address, startHeight, endHeight, limit)
zeniq_queryTxByAddr(address, startHeight, endHeight, limit)
Returns the transactions whose sender (BySrc), recipient (ByDst), or either
(ByAddr) is address, restricted to block heights [startHeight, endHeight].
startHeight/endHeight accept hex heights or "latest"; limit is a hex
uint64 cap on the number of results.
curl https://api.zeniq.network -H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"zeniq_queryTxByAddr",
"params":["0x<address>","0x0","latest","0x64"]}'
zeniq_queryLogsβ
zeniq_queryLogs(address, topics, startHeight, endHeight, limit) β array of logs.
Filters event logs by emitting contract address and an array of topics, over
the height range, capped at limit. A more index-efficient alternative to
eth_getLogs for wide historical scans.
zeniq_getTxListByHeightβ
zeniq_getTxListByHeight(height) β array of transactions (with internal txs) for
the block at height (hex or "latest"). zeniq_getTxListByHeightWithRange(height, start, end)
returns only entries [start, end).
zeniq_callβ
zeniq_call(callArgs, blockNrOrHash) β detailed call result.
Like eth_call, but instead of just the return data it yields a structured
CallDetail:
| Field | Meaning |
|---|---|
status | EVM status code |
gasUsed | Gas consumed |
returnData | ABI-encoded return value |
logs | Logs emitted (address, topics, data) |
contractAddress | Address created, for contract-creation calls |
internalTransactions | Internal calls made during execution |
rwLists | Read/write sets touched (used by the parallel executor) |
zeniq_validatorsInfoβ
zeniq_validatorsInfo() β object describing the validator set. Fields include
genesisMainnetBlockHeight, currEpochNum, currValidators, validators,
validatorsUpdate, pendingRewards, minGasPrice and lastMinGasPrice. Each
validator object carries address, pubkey, reward_to, voting_power,
introduction, staked_coins and is_retiring.
curl https://api.zeniq.network -H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"zeniq_validatorsInfo","params":[]}'
zeniq_healthCheckβ
zeniq_healthCheck(latestBlockTooOldAge) β status object. Reports whether the
node is healthy and, given latestBlockTooOldAge (seconds), whether its latest
block is stale. Handy for load-balancer / monitoring probes.
zeniq_crosschainInfoβ
zeniq_crosschainInfo(startHeight, endHeight) β array of cross-chain transfers.
Unique to ZENIQ Smart Chain. The node runs a cross-chain importer (CCRPC) that mirrors value from the legacy ZENIQ main chain onto the Smart Chain. This method returns the cross-chain transfer records applied between the two heights.
debug namespaceβ
Diagnostic methods, primarily for operators: debug_nodeInfo, debug_getStats
and debug_getSeq(address). These are intended for troubleshooting rather than
application use.
Gas & feesβ
ZENIQ Smart Chain uses the legacy gas model β a single gasPrice, not
EIP-1559 (baseFee / maxPriorityFeePerGas). Read the current price with
eth_gasPrice and set gasPrice on your transactions accordingly; feeHistory
and maxPriorityFeePerGas are intentionally absent.
The EVM targets the London instruction set. In particular the PUSH0 opcode
(Shanghai) is not supported, so compile contracts with Solidity 0.8.19
(or configure the compiler's evmVersion to london) β see the
Distributor Contract guide for the
rationale.