On March 12, NovaChain announced its ZK-EVM mainnet launch, backed by $50M in Series A funding. The press release claimed a '90% reduction in transaction fees compared to Ethereum L1.' I cloned their open-source Prover repository the same day. Within two hours, a pattern emerged: the constraint system is over-parameterized, generating 40% more gates than necessary. That means proving costs are actually higher than Arbitrum’s current fraud-proof system. The marketing is a lie.
Context: ZK rollup economics is brutal. Every transaction requires a SNARK proof, and proving costs on Ethereum currently range from $0.02 to $0.10 per transaction when gas is at 5 gwei. During the 2021 bull run, gas peaked at 200 gwei, making ZK proving economically viable. Today, with Ethereum gas hovering around 5–8 gwei, operators bleed money. NovaChain’s white paper claims an average of 2 million constraints per block. Their actual codebase, however, exposes a constraint count of 5.1 million per block at the default configuration. This discrepancy is not a bug — it’s a design flaw rooted in an early decision to use a monolithic Groth16 setup instead of a modular proving system.
Core: I spent the weekend digging through the Rust implementation of NovaChain’s circuit. The first red flag appeared in the transfer.circom file. They apply a range check for every asset transfer individually, even when multiple transfers share the same asset type. A simple batching optimization would reduce the gate count by 18%, but the circuit architecture forces each transfer to re-derive the asset’s Merkle path from scratch. I wrote a Python script to simulate the constraint generation for a block of 100 transfers. The result: 4.2 million constraints for a block that should require only 2.8 million. The waste is in the proof-of-association logic — they verify each transfer’s inclusion proof independently instead of using a shared root. This is a classic inefficiency taught in any advanced cryptography course.
The second issue lies in the on-chain data posting. NovaChain does not compress calldata. They post raw transaction bytes to Ethereum, consuming ~500 bytes per transfer. At current gas prices, that alone costs $0.08 per transaction. Compare that to Scroll’s compressed calldata (150 bytes) or zkSync Era’s state diff approach. NovaChain’s design is literally more expensive than posting data directly to L1 for small transfers. I verified this by extracting the calldata_bytes function from their relayer code. It serializes the full transaction object without any encoding optimization.
Proving time grows linearly with constraints. At 5 million constraints per block, their prover takes 12 seconds on a 16-core machine. To achieve their claimed 2,000 TPS, they would need to prove 2,000 transactions per block, which would balloon constraints to over 80 million. The prover would take minutes. Their testnet currently runs at 15 TPS with 5 million constraints per block. The math doesn’t add up.
I built a simple economic model. At Ethereum gas of 5 gwei, proving cost per transaction is $0.06. Calldata cost adds $0.08. Total: $0.14 per transaction. If they charge $0.001 per transaction (their announced fee), they lose $0.139 per tx. To break even at $0.001 fee, they need 140 TPS. Their current max is 15 TPS. Even if they reach 140 TPS, they are still not profitable because the proving cost scales linearly with TPS. The only way to profit is to increase fees significantly, which negates the value proposition.
Contrarian: The team might argue they can upgrade the circuit later with optimization. But Groth16 requires a trusted setup ceremony for each new circuit. Changing the constraint structure means redoing the ceremony, a process that took them six months initially. NovaChain’s architecture is monolithic — you cannot swap out the proving system without a hard fork. Meanwhile, competitors like Polygon zkEVM use Halo2, which supports recursive proofs and incremental circuit upgrades without a new ceremony. Halo2 also allows for more efficient batch proving, reducing per-transaction costs by an order of magnitude. NovaChain’s bet on Groth16 finality is a strategic dead end.
The counterargument that 'prover hardware will improve' is weak. Moore’s law is dead for single-threaded performance. Parallelization helps, but the constraints are interdependent. You can’t split a Merkle proof verification across cores without coordination overhead. The fundamental inefficiency is in the algorithm, not the hardware.
Takeaway: NovaChain will either pivot to a fraud-proof model or burn through its $50M treasury within six months. The market will wake up when they announce a 'temporary' fee increase or a 'minor' proving delay. I’ll be watching their next Github commit for the white flag — a change from Groth16 to Halo2, or an admission that their mainnet is really a testnet. Code over marketing. Trust but verify. —N.S. // end of analysis