Skip to main content

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.

Endpoints
RoleURL
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:

NamespacePurpose
ethStandard Ethereum account/block/transaction/log/filter methods
netNetwork/peer status
web3Client metadata + hashing helper
txpoolPending/queued transaction pool inspection
zeniqZENIQ extension methods (rich queries, receipts with internal txs, validators, cross-chain)
sbchExact alias of zeniq β€” retained for smartBCH tooling compatibility
debugNode 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​

MethodSupportedNotes
web3_clientVersionβœ…Returns e.g. zeniqsmartd/v0.7.3
web3_sha3βœ…Keccak-256 of the given data

net​

MethodSupportedNotes
net_versionβœ…Returns the chain ID as a decimal string, 383414847825
net_listeningβœ…
net_peerCountβœ…

eth​

MethodSupportedNotes
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​

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

MethodSupportedPurpose
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
Not available on ZENIQ Smart 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:

FieldMeaning
statusEVM status code
gasUsedGas consumed
returnDataABI-encoded return value
logsLogs emitted (address, topics, data)
contractAddressAddress created, for contract-creation calls
internalTransactionsInternal calls made during execution
rwListsRead/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.