pragma solidity ^0.8.4; {{ groth16_verifier }} {{ kzg10_verifier }} /** * @author PSE & 0xPARC * @title NovaDecider contract, for verifying zk-snarks Nova IVC proofs. * @dev This is an askama template. It will feature a snarkjs groth16 and a kzg10 verifier, from which this contract inherits. */ contract NovaDecider is Groth16Verifier, KZG10Verifier { function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[{{ gamma_abc_len - 1 }}] calldata _pubSignals, uint256[2] calldata c, uint256[2] calldata pi, uint256 x, uint256 y) public view returns (bool) { require(super.verifyProof(_pA, _pB, _pC, _pubSignals) == true, "Groth16 verification failed"); // for now, we do not relate the Groth16 and KZG10 proofs // this will done in the future, by computing challenge points from the groth16 proof's data require(super.check(c, pi, x, y) == true, "KZG10 verification failed"); return true; } }