mirror of
https://github.com/zkp2p/zkp2p-poc.git
synced 2026-01-08 21:28:10 -05:00
Update final verifier
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user