Update final verifier

This commit is contained in:
0xSachinK
2023-08-02 13:17:26 +05:30
parent 8178e7aa52
commit 150653beca
2 changed files with 94 additions and 85 deletions

View File

@@ -5,7 +5,6 @@ import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { Verifier } from "./Verifier.sol";
import "hardhat/console.sol";
contract Ramp is Verifier, Ownable {

View File

@@ -94,9 +94,13 @@ library Pairing {
require(p1.length == p2.length,"pairing-lengths-failed");
uint elements = p1.length;
uint inputSize = elements * 6;
uint[] memory input = new uint[](inputSize);
for (uint i = 0; i < elements; i++)
{
input[i * 6 + 0] = p1[i].X;
input[i * 6 + 1] = p1[i].Y;
input[i * 6 + 2] = p2[i].X[0];
input[i * 6 + 3] = p2[i].X[1];
input[i * 6 + 4] = p2[i].Y[0];
input[i * 6 + 5] = p2[i].Y[1];
}
@@ -112,6 +116,7 @@ library Pairing {
return out[0] != 0;
}
/// Convenience method for a pairing check for two pairs.
function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view returns (bool) {
G1Point[] memory p1 = new G1Point[](2);
G2Point[] memory p2 = new G2Point[](2);
p1[0] = a1;
@@ -189,146 +194,151 @@ contract Verifier {
8495653923123431417604973247489272438418190587263600148770280649306958101930]
);
vk.delta2 = Pairing.G2Point(
[6791971183896370074908250176135820129590587350102736362080552013412579480332,
8464974432063602659978716568462026112686321909259119868788627996208457003433],
[10299415344588723168027352036764498814556186868613129813480974881512402631244,
895844794400648115805879883375092707986479696596973758694818220713919224288]
[1467654322292858910643078194374261616068675465958740410189459270220028345163,
21660166837761322399776079958815088538945345268296515479241507101704173995745],
[15715142577413031133010796164209732420232938572888634058962633115268831342360,
1577149762776324114694699578737919259765369625886964999248212253821739057003]
);
vk.IC = new Pairing.G1Point[](27);
vk.IC[0] = Pairing.G1Point(
vk.IC[0] = Pairing.G1Point(
11390303289064284098189744438463447420778707582462791052618307568031589832040,
7449448169535529458378919271505148978539356638415795572750354322373068439362
);
vk.IC[1] = Pairing.G1Point(
);
vk.IC[1] = Pairing.G1Point(
12926512673301137570628263349765214889130631160950332406024037635286650507630,
8992052977473807772447083576919945335702173772905787498293268627890617242997
);
vk.IC[2] = Pairing.G1Point(
);
vk.IC[2] = Pairing.G1Point(
10300435939865091196742379379501283306448703934998001867487926349042531050125,
14928439355818328326375363823537703358818022931799429941075037725307577070455
);
vk.IC[3] = Pairing.G1Point(
);
vk.IC[3] = Pairing.G1Point(
7611413456733281848700061561983325504251513662385561049933512147189344189699,
4833185216270508713342192501912663935130269443612842251206521878230971676839
);
vk.IC[4] = Pairing.G1Point(
);
vk.IC[4] = Pairing.G1Point(
19062247490960708321777748170389762379672856148924642110378887144213419852566,
6239888245029187530537044168742210282838199991619156575647864448012631067705
);
vk.IC[5] = Pairing.G1Point(
);
vk.IC[5] = Pairing.G1Point(
1900533091959672810586142219238009988575950672610752410245631793102644183020,
8209782988030410782646465527164053824222196574783486141746214338752832758379
);
vk.IC[6] = Pairing.G1Point(
);
vk.IC[6] = Pairing.G1Point(
8878510019023174601370916887464135804425456732601707876870283071941319158779,
2238933498147138257708057025060058512632744467048518254794891840583200928651
);
vk.IC[7] = Pairing.G1Point(
);
vk.IC[7] = Pairing.G1Point(
14774264761588045430490817263961834820949201219760292402883462377258134489261,
13565063219270278023061572736709176503347437541058744868567068106406233758095
);
vk.IC[8] = Pairing.G1Point(
);
vk.IC[8] = Pairing.G1Point(
8640222970343729307611189667179627998087825168565600334875558967992577664369,
14110274253571946477699011561265474162427343516115444871710303863258194976702
);
vk.IC[9] = Pairing.G1Point(
);
vk.IC[9] = Pairing.G1Point(
2595280839257795204498281112565360451329597440214622571669060445042599277667,
12806000801103941363924896892277761387543153396726070951416512053768776176473
);
vk.IC[10] = Pairing.G1Point(
);
vk.IC[10] = Pairing.G1Point(
16097556813974149893401667692330725086078736852759927722019755388159570888179,
21041500172099620828948779396096271241391891618911735365565777088038720129820
);
vk.IC[11] = Pairing.G1Point(
);
vk.IC[11] = Pairing.G1Point(
8502891934148992894234766665284434965333422143486619420599160188496289298766,
10432356863447150028693163504190402489144219087927812414716985309187094963373
);
vk.IC[12] = Pairing.G1Point(
);
vk.IC[12] = Pairing.G1Point(
7657191410121949604532752880122711166479708868216582440269748853989575610007,
20010265458375447628489286987142310761594415204146061186951685402842014748556
);
vk.IC[13] = Pairing.G1Point(
);
vk.IC[13] = Pairing.G1Point(
4109233900831522958415334035503369207374528764471261924191406262792133590161,
3446961700970273147427294976869718002542009503298635780540177324259631759666
);
vk.IC[14] = Pairing.G1Point(
);
vk.IC[14] = Pairing.G1Point(
2999051556079069777151853990146500844490545822224819880971649206202307535626,
20767119344253261102966821628433281607825360200248254451575874541861067020033
);
vk.IC[15] = Pairing.G1Point(
);
vk.IC[15] = Pairing.G1Point(
12935231153420133683806436064217241608814572033955662233616391592624581848743,
758401520845175001964281383234391730940870430820194255681311894447544715649
);
vk.IC[16] = Pairing.G1Point(
);
vk.IC[16] = Pairing.G1Point(
16944115134472787995924248861831098501730291888520747962165860185180158785640,
20166735440122921194353354674357418838459453043867299035185577606103206863362
);
vk.IC[17] = Pairing.G1Point(
);
vk.IC[17] = Pairing.G1Point(
16370904269034995920740050962123727789402746519779569403976467135105461698075,
14449271159026100159899871807797201759680724040929735003794398191584825703054
);
vk.IC[18] = Pairing.G1Point(
);
vk.IC[18] = Pairing.G1Point(
4575501916420720895898002167414775436285619437696512628470738161818319565343,
10259221667769872405798976776109799802312224894204101284658645978943530534476
);
vk.IC[19] = Pairing.G1Point(
);
vk.IC[19] = Pairing.G1Point(
9466546245760905072516718698902616405319448266431304502642473889515878674758,
386151568081870823815772299620009618170598555506537057870884344002746885784
);
vk.IC[20] = Pairing.G1Point(
);
vk.IC[20] = Pairing.G1Point(
18647704995794871178778602066785346048858539589664585854089930952033006245268,
10882072269148921751625569635653085812004835078077584218985179564268085978911
);
vk.IC[21] = Pairing.G1Point(
);
vk.IC[21] = Pairing.G1Point(
12906617616864950231846033602870348293620432768295722554148786123483296821895,
1158115217019412570000102563141115303282553866405915609770644931957018820227
);
vk.IC[22] = Pairing.G1Point(
);
vk.IC[22] = Pairing.G1Point(
13492979305308929563551152505636677944284946254909375630290488183092914383791,
5668308865271279078741142041312696139694684618169069800309774365915338294251
);
);
vk.IC[23] = Pairing.G1Point(
19681564751580133075178966086563939560874013276462995931505512780075917133605,
18685571392392720007478153403859740179162471232692219332488240021841431745434
);
);
vk.IC[24] = Pairing.G1Point(
1203894112246763981503775595446451605566087080761837686069627560297854656668,
20983175836380296359503289678772223830103177744618018883025803258327256687406
);
vk.IC[25] = Pairing.G1Point(
);
vk.IC[25] = Pairing.G1Point(
8397350471530151972463810941539235606086258406954526704957458659889110597164,
18619678220471645118400912559060396310227095241324996845404332354319999198988
);
vk.IC[26] = Pairing.G1Point(
);
vk.IC[26] = Pairing.G1Point(
4232527691538139375507463951561828769485123236480968421402897242256613017100,
19678596330709811800920113509694996785802586222249736560235061199800316957842
);
);
}
function verify(uint[] memory input, Proof memory proof) internal view returns (uint) {
uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
VerifyingKey memory vk = verifyingKey();
require(input.length + 1 == vk.IC.length,"verifier-bad-input");
// Compute the linear combination vk_x