codex-contracts-eth/contracts/Groth16.sol

34 lines
638 B
Solidity

// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
struct G1Point {
uint256 x;
uint256 y;
}
// A field element F_{p^2} encoded as `real + i * imag`.
// We chose to not represent this as an array of 2 numbers, because both Circom
// and Ethereum EIP-197 encode to an array, but with conflicting encodings.
struct Fp2Element {
uint256 real;
uint256 imag;
}
struct G2Point {
Fp2Element x;
Fp2Element y;
}
struct Groth16Proof {
G1Point a;
G2Point b;
G1Point c;
}
interface IGroth16Verifier {
function verify(
Groth16Proof calldata proof,
uint256[] calldata pubSignals
) external view returns (bool);
}