Skip to main content
Every number here is measured. Circuit size comes from bb gates; timings are on Apple Silicon (arm64); on-chain costs are the actual fees charged for real testnet transactions.

Circuit

MetricValue
ProvesPoseidon2 commitment · depth-8 Merkle membership · nullifier derivation
ACIR opcodes73
Circuit size (gates)1,540
StackNoir 1.0.0-beta.9 · Barretenberg (UltraHonk) 0.87.0 · BN254

Proving (client-side, off-chain)

StepTime
nargo execute (witness)~0.6 s
bb prove (UltraHonk)~0.27 s

Artifacts

ArtifactSize
Proof14,592 bytes (456 field elements)
Public inputs160 bytes (5 field elements)
Verification key1,760 bytes
Contract wasm (real verifier)44,957 bytes

On-chain verification cost

The load-bearing number: a real UltraHonk proof is verified on-chain inside verify_and_execute, within Soroban’s standard per-transaction resource limits.
TransactionFee chargedNotes
verify_and_executereal UltraHonk (214d788b…)364,475 stroops (~0.0364 XLM)proof verify + escrow transfer + receipt
verify_and_execute — placeholder verifier244,159 stroops (~0.0244 XLM)same flow, no ZK verification
Incremental cost of on-chain ZK verification~120,316 stroops (~0.012 XLM)the UltraHonk verification itself
On-chain UltraHonk verification is cheap enough to run inside a normal payment transaction on testnet — no elevated limits required.

Reproduce

cd circuits/nullis
nargo test                       # circuit soundness
bb gates --scheme ultra_honk --bytecode_path target/nullis.json
node ../../scripts/live-real-zk.mjs && nargo execute && \
  bb prove --scheme ultra_honk --oracle_hash keccak \
    --bytecode_path target/nullis.json --witness_path target/nullis.gz \
    --output_path target --output_format bytes_and_fields