non-interactive zero-knowledge
A non-interactive zero-knowledge proof (NIZK) collapses the whole back-and-forth conversation into a single message. The prover produces one string — the proof — hands it over, and anyone can check it later without ever talking back. This is exactly what a blockchain needs: a smart contract is not a live participant who can send random challenges mid-protocol, and a proof posted inside a transaction has to stand on its own and be verifiable by every node independently and identically.
Getting rid of interaction is not free; you must replace the verifier's random challenges with something the prover cannot manipulate. There are two standard routes. The first is a common reference string (CRS): a trusted public string, generated once, that both prover and verifier share — this underlies SNARKs like Groth16 and PLONK. The second is the Fiat-Shamir heuristic: derive the "random" challenges by hashing the protocol transcript, which is secure when the hash is modeled as a random oracle and is how STARKs and Bulletproofs become non-interactive without any setup.
The zero-knowledge part means the single proof reveals nothing beyond the truth of the statement — not the witness, not any intermediate value. Formally this is captured by a simulator that can forge convincing-looking proofs without knowing the secret, which shows the proof cannot contain extractable information about the witness. NIZK is the foundation of both on-chain privacy (Zcash shielded transactions) and on-chain scaling (zk-rollups): in each case a verifier contract reads one short proof and is convinced of a large hidden or expensive computation.
"Non-interactive" does not mean "no setup." Many NIZKs still need a one-time CRS or trusted setup; Fiat-Shamir-based ones avoid that, but lean on the random-oracle assumption instead. There is always some assumption replacing the live verifier's coins.