34 lines
638 B
Solidity
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);
|
|
}
|