Architecture
ZENIQ Smart Chain is EVM-compatible on the surface, but under the hood it is not a go-ethereum clone. It is a fork of smartBCH and pairs a Tendermint consensus engine with a parallel EVM execution engine. This page explains the parts that surprise developers coming from Ethereum.
Consensus and execution are separate engines
- Consensus engine — Tendermint. It proposes blocks and votes on them.
Finality is fast and deterministic: once a block is committed there are no
reorgs and no uncles (which is why
eth_getUncle*always returns empty). - Execution engine. It takes committed blocks from Tendermint, updates the world state, and produces transaction receipts and logs. It is the part that runs the EVM.
The two engines run concurrently. While the execution engine is finishing the current block, Tendermint is already collecting votes and proposing the next one. This overlap is a big part of how the chain sustains throughput.
Blocks are ~4 seconds and gas is legacy
- Block time is about 4 seconds.
- The fee model is legacy — a single
gasPrice, not EIP-1559. There is nobaseFeeor priority fee. Read the price witheth_gasPrice. - The EVM targets the London instruction set; the Shanghai
PUSH0opcode is not supported, so compile with Solidity 0.8.19.
State is split into three stores
Unlike a single Ethereum state trie, ZENIQ Smart Chain keeps three independent stores with different roles:
- Authenticated world state (ADS). A Merkleized key/value store that holds accounts, balances, contract code and storage. Its root hash is the block's app hash — this is the consensus-critical state.
- History / query database. A queryable index of blocks, transactions and
logs. It powers
eth_getLogsand the richerzeniq_*query methods. It is not consensus-critical and can be rebuilt. - Cross-chain FIFO. A small store used by the cross-chain importer (below).
Transactions are executed after commit — in parallel
This is the biggest departure from Ethereum. When a block is committed, its transactions are not executed one-by-one in order. Instead:
- During the commit phase, transactions are validated (signature, sender, gas) and placed into a standby queue that lives inside the world state. The app hash is computed and returned to Tendermint.
- During the post-commit phase, transactions are pulled from the standby queue and executed in parallel across multiple goroutines, with a dependency check that commits only non-conflicting transactions and re-queues the rest.
See Parallel execution for the full flow.
To keep parallel execution deterministic — and to blunt front-running — transactions are also pseudo-randomly reordered before execution, using a seed derived from the block itself. See Transaction ordering.
Cross-chain importer (CCRPC)
ZENIQ Smart Chain is a sidechain of the ZENIQ main chain. A built-in
cross-chain importer mirrors value from the legacy ZENIQ main chain onto the
Smart Chain. You can inspect the imported transfers with
zeniq_crosschainInfo — a method
that has no smartBCH or Ethereum equivalent.
What this means for developers
For the vast majority of contracts and tooling, none of this is visible — you deploy Solidity and call it over standard JSON-RPC. The practical takeaways:
- Don't rely on the proposer's transaction order; it is reordered on-chain.
- Don't design around uncles, reorgs, or EIP-1559 fee fields — they don't exist.
- For deep transaction tracing and wide historical queries, prefer the
zeniq_*methods over their thinnereth_*counterparts.