@semaphore-protocol/contracts 3.15.1 → 4.0.0-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +5 -5
- package/Semaphore.sol +75 -89
- package/base/SemaphoreGroups.sol +94 -82
- package/base/SemaphoreVerifier.sol +358 -104
- package/interfaces/ISemaphore.sol +65 -74
- package/interfaces/ISemaphoreGroups.sol +35 -6
- package/interfaces/ISemaphoreVerifier.sol +7 -31
- package/package.json +2 -3
- package/base/Pairing.sol +0 -151
- package/extensions/SemaphoreVoting.sol +0 -96
- package/extensions/SemaphoreWhistleblowing.sol +0 -77
- package/interfaces/ISemaphoreVoting.sol +0 -78
- package/interfaces/ISemaphoreWhistleblowing.sol +0 -53
|
@@ -1,113 +1,367 @@
|
|
|
1
|
-
//SPDX-License-Identifier: MIT
|
|
2
|
-
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Part of this file was generated with [snarkJS](https://github.com/iden3/snarkjs).
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
pragma solidity 0.8.23;
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/// is external.
|
|
12
|
-
contract SemaphoreVerifier is ISemaphoreVerifier {
|
|
13
|
-
using Pairing for *;
|
|
6
|
+
contract SemaphoreVerifier {
|
|
7
|
+
// Scalar field size
|
|
8
|
+
uint256 constant r = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
|
|
9
|
+
// Base field size
|
|
10
|
+
uint256 constant q = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
|
|
14
11
|
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
uint256[2][7][17] VK_POINTS = [[[13406811599156507528361773763681356312643537981039994686313383243831956396116,16243966861079634958125511652590761846958471358623040426599000904006426210032],[11781596534582143578120404722739278517564025497573071755253972265891888117374,15688083679237922164673518758181461582601853873216319711156397437601833996222],[1964404930528116823793003656764176108669615750422202377358993070935069307720,2137714996673694828207437580381836490878070731768805974506391024595988817424],[19568893707760843340848992184233194433177372925415116053368211122719346671126,11639469568629189918046964192305250472192697612201524135560178632824282818614],[5317268879687484957437879782519918549127939892210247573193613900261494313825,528174394975085006443543773707702838726735933116136102590448357278717993744],[14865918005176722116473730206622066845866539143554731094374354951675249722731,3197770568483953664363740385883457803041685902965668289308665954510373380344],[6863358721495494421022713667808247652425178970453300712435830652679038918987,15025816433373311798308762709072064417001390853103872064614174594927359131281]],[[15629200772768268814959330350023920183087521275477047626405113853190187031523,13589689305661231568162336263197960570915890299814486885851912452076929115480],[11464919285924930973853174493551975632739604254498590354200272115844983493029,16004221700357242255845535848024178544616388017965468694776181247983831995562],[17789438292552571310739605737896030466581277887660997531707911256058650850910,4112657509505371631825493224748310061184972897405589115208158208294581472016],[3322052920119834475842380240689494113984887785733316517680891208549118967155,381029395779795399840019487059126246243641886087320875571067736504031557148],[8777645223617381095463415690983421308854368583891690388850387317049320450400,11923582117369144413749726090967341613266070909169947059497952692052020331958],[15493263571528401950994933073246603557158047091963487223668240334879173885581,6315532173951617115856055775098532808695228294437279844344466163873167020700],[3481637421055377106140197938175958155334313900824697193932986771017625492245,20088416136090515091300914661950097694450984520235647990572441134215240947932]],[[9218320951536642499143228327011901814587826948504871816273184688188019956292,19717684456458906358368865507225121991585492363133107109865920739019288468011],[16717590750910963405756115910371408378114896008824240863060392362901176601412,18221695645112467945186983098720611586049108689347006136423489099202471884089],[4691595252082380256698158158199364410440273386659834000993210659508747323919,9205801980459323513061837717352821162780471027241700646145937351740096374660],[16150531426263112884093068164597994126623437929929609532055221646496813246000,20245743178241899668170758952526381872637304119026868520579207157118516761827],[6063536446992770713985314309889717594240410784717230886576072989709763902848,18258781411255795973918859665416013869184055573057512603788635470145328981347],[10109932964756104512054045207253535333686585863745296080906925765480296575285,4174640428253153601540284363759502713687021920150940723252842152556151210349],[18049428534741480832385046397049175120355008065781483226058177421025493210952,591730261265040164434889324846001338201068482543108348317417391345612814922]],[[3995128789564535587814512245259203300137618476815456454931286633947953135662,15953239752392927777442331623182226063776310198012173504208557434319753428770],[20957319343912866335583737646657534123362052690050674068142580221965936605075,2523786679709693946058523307330825034772478122295850507521258983130425334580],[9877211178693075145402462781884120278654771727348087433632224794894486095150,19972682062587174829535281061580296764150591339640180868104711395548066529340],[6324578424031095537345184040149690238371517387586958921377481904541316423724,15513931720576048544404512239839508014664224085062729779520992909505663748296],[11371337652479737143800707796204655130812036287859296372695832558127430723628,11757275188600040111649009832378343123994225623498773406233261322165903848967],[13282496583564708104981015168203451877588903263486398132954741568835583461335,1746144324840370907926720490289700342734912534857331743685374514401176014195],[7993952462467372951144011615584426050192046712674662254138390197508963352374,5156942148925224345709309361345680948125600198010285179548841917923439945819]],[[18976133691706015337908381757202123182841901611067930614519324084182946094218,1382518990777992893805140303684642328066746531257780279226677247567004248173],[6627710380771660558660627878547223719795356903257079198333641681330388499309,21806956747910197517744499423107239699428979652113081469385876768212706694581],[19918517214839406678907482305035208173510172567546071380302965459737278553528,7151186077716310064777520690144511885696297127165278362082219441732663131220],[690581125971423619528508316402701520070153774868732534279095503611995849608,21271996888576045810415843612869789314680408477068973024786458305950370465558],[16461282535702132833442937829027913110152135149151199860671943445720775371319,2814052162479976678403678512565563275428791320557060777323643795017729081887],[4319780315499060392574138782191013129592543766464046592208884866569377437627,13920930439395002698339449999482247728129484070642079851312682993555105218086],[3554830803181375418665292545416227334138838284686406179598687755626325482686,5951609174746846070367113593675211691311013364421437923470787371738135276998]],[[3811592683283527904145155808200366192489850711742363953668998371801696238057,9032545080831535702239063467087720597970266046938395860207839433937324718536],[16308433125974933290258540904373317426123214107276055539769464205982500660715,12429982191499850873612518410809641163252887523090441166572590809691267943605],[9494885690931955877467315318223108618392113101843890678090902614660136056680,11783514256715757384821021009301806722951917744219075907912683963173706887379],[7562082660623781416745328104576133910743071878837764423695105915778139873834,17954307004260053757579194018551114133664721761483240877658498973152950708099],[19338184851116432029108109461622579541195083625346674255186169347975445785058,38361206266360048012365562393026952048730052530888439195454086987795985927],[21178537742782571863590222710872928190886000600239072595684369348717288330049,9786438258541172244884631831247223050494423968411444302812755467521949734320],[11330504221972341797183339350494223413034293674225690456356444509688810101433,1490009915387901405464437253469086864085891770312035292355706249426866485365]],[[9485639152672984144988597737758037391807993615552051606205480347442429414340,17626503110323089701269363177710295379967225765713250625279671011873619640598],[12391874700409435648975069978280047983726144854114915177376036190441913967689,18953587685067712486092665232725058638563458484886448540567142557894080640927],[21791720972262589799021600767292883644106575897307484548888696814333235336885,11092962469758788187888592619035811117815082357439060720677582048880121542623],[9418924955930663972575130074928583215922927562059194231976193350658171304436,16113558481826020406162261319744796072664750077095575593106901121115073101408],[20054934960262983176880675919444457578562219675808407582143519621873973120773,14877415271301547911435683263206245199959943680225555496786470669330176961657],[4215199263810110748751715719957184804379752373072771007598572158043965517488,5225943468606602818132879686778547605180105897615251160509064537462109826521],[6250242626034734280813142093008675407723196706248829741247204621913994561803,1472231555266678689888727724824566171966416459791722465278225775922487343641]],[[9830856103389248449121962275587399130605902703453384856543071762984116567573,11408965575174993375815840422438995549652812400401163392501956884932167624437],[11814906841949499037550820576929552248172160643991870665022770052632331265834,19969543376625663966419118899515353499678204573709836615846115182224340858492],[3047486363455933831148688762823238723024952519326207356549121929667745957778,20241836359289449005887237560564358543646542598344362915541027571505243817211],[5965631918800530319167124148627450454569264331058008407732200168631989208657,20463557477532480934514091877628554948892025887087712764683631108388998871350],[16605042322692983282732511249912403956057999815658038166796858627082222971215,12219061498275616585164456833410962809536084885494309093787669879221959361956],[1548998572074037722622224303222294716243074837074272552644853986075252666508,10393312002885367652301897874262367916506364670364584602554176742602334134772],[16180907689593358346406392015123900260925622357393826746385511046141256905390,12267326749885120640972074479210537480053065569337817484467225562817467244765]],[[15035335306919942325459417688135340085377315274625768597233474641923619728582,10090041889587324002759549286390619541526396451963494627957072069124011137562],[21342049717074059749518233491526445388158772701642182532370641230478027030319,10507786999799841055999967456762679569286329319056926475375760604262707147294],[19590996174696909242575628014943555633938195923520472786993379268302478708283,2673753072556442230312995111304911178679525806396134504594492458566941824354],[13411253172375451489380472831999887223592471057462692619008484995624281735092,17181767455563581254432161119660408482332423481128600038352147258951772423229],[19138864631164378176055647711995352935065134904103255748190268290992108588628,14282526277736365863821375748687709839392307698935143595732632710176778519757],[20183773658676161990469276414858234178608794783112866811307579993999118293429,5223464433544489066271184294750886227362580875255044558831927430970236355539],[12333466991139269670298178539679773509487545471126920233507132846828588847444,3787586478923104354547687861486563468235879611952775292288436085429794222238]],[[15718373132479769904443326381037437528372212185108294117696143473979328398658,43456740675249348549891878341522275183186932745162972528932808393415299552],[11236864934894600819960883124570686936554376109344998527334431594565774237827,4289247401578837038775845192875793775418122783738936298355403103074020081838],[18580370382199518848261939652153768394883698461842792002922164533882262019935,20516185953882700254387267244708111605796661864845495645678049276372075842359],[20041291712709610738573661974551517833120775539593003477018637287434210072702,6326630253906616820412999166182553773360987412889775567442543181359104720511],[13268971611130152315428629919012388924225656285593904211561391821918930327614,9247437189452353488017802041158840512956111558640958728149597697508914590433],[6267384495557139339708615182113725421733376438932580472141549274050146739549,1832264154031452148715318442722960696977572389206897240030908464579133134237],[16650684165487873559901140599157559153018449083939294496255590830891994564285,14140282729498011406186082176268025578697081678243955538935501306868500498994]],[[1723458149089715907994189658689343304709709060535625667210252753337752162173,4023016874169005249382064394379671330447496454371261692205411970999350949293],[7651670126664625790835334090273463062538865895183205964669372719235003083565,17710652158212212080502343565075513548898593397103675832636832371532093744857],[4247947150009812467217672970806328247513830308400387953244764907353849211641,14500381439127180474801393438175928191199696177607750163263715436006533630877],[21213779524495874664157797605662894019112036728653622806607467354233012380232,1429370857470083395421401524518861545167550347090873730934256398864585069083],[12465277751642747637430517396067173985821959773399832969105187923427872239200,4377704428607835904642653580543541241155601291484645500691968624389522190030],[11283027832501128633761619552392013253304972822086786857121687098087331014745,21463394238922953607096052056881931791797740737164052798044623278557203313720],[19687293493101130967741578773742597470558958652351513582962108464055656171331,4445165696525061401582979300506082669540223774145877762689724631935313716632]],[[745924679191739894055143748466112994378439645681039136007774787076115375124,13132169670125192016391258838554965176628317453468870968867717287446623320643],[2126777833939378028304266129616145667925849332481755567268747182629795296580,20909608709868730010029182074820840312550443752829480953667886902663547957991],[3388767735894417381503201756905214431625081913405504580464345986403824999889,21014112837214011009096825602791072748195337199912773858499588477762724153070],[10521317016331497094903116740581271122844131442882845700567581775404872949272,13201921794561774338466680421903602920184688290946713194187958007088351657367],[16170260722059932609965743383032703380650557609693540121262881902248073364496,6004983491336500911294872035126141746032033211872472427212274143945425740617],[10275615677574391293596971122111363003313434841806630200532546038183081960924,5955568702561336410725734958627459212680756023420452791680213386065159525989],[19059081014385850734732058652137664919364805650872154944590269874395511868415,19202365837673729366500417038229950532560250566916189579621883380623278182155]],[[4553625243522856553165922942982108474187282402890756796515747778282922584601,16835654219229187428071649241190746119082269636345872682107941472241044260584],[3272293478534046729728233267765357195255129499603632413158978822084188871854,873742823867191038535544062852920538566418819521732785500614249239215175476],[7856986171681248404396064225772749784181602218562773063185003409958949630985,11707218736744382138692483591389641607570557654489363179025201039696228471230],[2902255937308264958973169948617099471543255757887963647238093192858290079050,4092153880227661899721872164083575597602963673456107552146583620177664115673],[18380478859138320895837407377103009470968863533040661874531861881638854174636,14502773952184441371657781525836310753176308880224816843041318743809785835984],[2781117248053224106149213822307598926495461873135153638774638501111353469325,3500056595279027698683405880585654897391289317486204483344715855049598477604],[8880120765926282932795149634761705738498809569874317407549203808931092257005,19080036326648068547894941015038877788526324720587349784852594495705578761000]],[[7252337675475138150830402909353772156046809729627064992143762325769537840623,7601443214415704135008588588192028557655441716696726549510699770097979655628],[436607343827794507835462908831699962173244647704538949914686722631806931932,18500126298578278987997086114400065402270866280547473913420536595663876273004],[18427701611614193839908361166447988195308352665132182219164437649866377475111,5299493942596042045861137432338955179078182570752746487573709678936617478454],[4188155714164125069834512529839479682516489319499446390214266838952761728656,2720966082507704094346897998659841489771837229143573083003847010258396944787],[13256461570028177373135283778770729308216900804505379897951455548375840027026,10722074030307391322177899534114921764931623271723882054692012663305322382747],[9824147497244652955949696442395586567974424828238608972020527958186701134273,15755269950882650791869946186461432242513999576056199368058858215068920022191],[21172488506061181949536573476893375313339715931330476837156243346077173297265,13892434487977776248366965108031841947713544939953824768291380177301871559945]],[[10202326166286888893675634318107715186834588694714750762952081034135561546271,15028154694713144242204861571552635520290993855826554325002991692907421516918],[18486039841380105976272577521609866666900576498507352937328726490052296469859,12766289885372833812620582632847872978085960777075662988932200910695848591357],[1452272927738590248356371174422184656932731110936062990115610832462181634644,3608050114233210789542189629343107890943266759827387991788718454179833288695],[14798240452388909327945424685903532333765637883272751382037716636327236955001,10773894897711848209682368488916121016695006898681985691467605219098835500201],[17204267933132009093604099819536245144503489322639121825381131096467570698650,7704298975420304156332734115679983371345754866278811368869074990486717531131],[8060465662017324080560848316478407038163145149983639907596180500095598669247,20475082166427284188002500222093571716651248980245637602667562336751029856573],[7457566682692308112726332096733260585025339741083447785327706250123165087868,11904519443874922292602150685069370036383697877657723976244907400392778002614]],[[14930624777162656776068112402283260602512252179767747308433194885322661150422,13682963731073238132274278610660469286329368216526659590944079211949686450402],[18705481657148807016785305378773304476425591636333098330324049960258682574070,21315724107376627085778492378001676935454590984229146391746301404292016287653],[12628427235010608529869146871556870477182704310235373946877240509680742038961,15093298104438768585559335868663959710321348106117735180051519837845319121254],[6593907467779318957599440584793099005109789224774644007604434924706249001015,18549596630007199540674697114946251030815675677713256327810772799104711621483],[6271101737045248834759003849256661059806617144229427987717476992610974162336,355748132218964841305454070022507122319085542484477110563322753565651576458],[2116139772133141967317791473319540620104888687412078412336248003979594158546,4004400204967325849492155713520296687406035356901102254880522534085890616486],[4206647028595764233995379982714022410660284578620723510907006350595207905228,19380634286337609988098517090003334645113675227742745065381519159322795845003]],[[12315240965742683516581565369496371929586281338862761742109651525191835544242,18994803742708336446369128568423705404354655742604689352630273180469431952708],[18019403342409608922812569436317484250134945386869657285229378095251425778096,12707009780301102830224094192984906206920666691015255692741008594808694787917],[2592407181901686208061988776764501828311271519595797153264758207470081204331,11847594161160074962679125411562687287595382335410213641115001866587988494499],[3346927026869562921166545684451290646273836362895645367665514203662899621366,15758185693543979820528128025093553492246135914029575732836221618882836493143],[20528686657810499188368147206002308531447185877994439397529705707372170337045,18025396678079701612906003769476076600196287001844168390936182972248852818155],[9799815250059685769827017947834627563597884023490186073806184882963949644596,4998495094322372762314630336611134866447406022687118703953312157819349892603],[16176535527670849161173306151058200762642157343823553073439957507563856439772,21877331533292960470552563236986670222564955589137303622102707801351340670855]]];
|
|
12
|
+
// Verification Key data
|
|
13
|
+
uint256 constant alphax = 20491192805390485299153009773594534940189261866228447918068658471970481763042;
|
|
14
|
+
uint256 constant alphay = 9383485363053290200918347156157836566562967994039712273449902621266178545958;
|
|
15
|
+
uint256 constant betax1 = 4252822878758300859123897981450591353533073413197771768651442665752259397132;
|
|
16
|
+
uint256 constant betax2 = 6375614351688725206403948262868962793625744043794305715222011528459656738731;
|
|
17
|
+
uint256 constant betay1 = 21847035105528745403288232691147584728191162732299865338377159692350059136679;
|
|
18
|
+
uint256 constant betay2 = 10505242626370262277552901082094356697409835680220590971873171140371331206856;
|
|
19
|
+
uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634;
|
|
20
|
+
uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;
|
|
21
|
+
uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;
|
|
22
|
+
uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;
|
|
23
|
+
|
|
24
|
+
uint256[14][12] VK_POINTS = [
|
|
25
|
+
[
|
|
26
|
+
563562783592406106461234396505774794044312891062077216951605541624542949349,
|
|
27
|
+
16293410697967515504861065986355060225819302510590370360517024529684437085892,
|
|
28
|
+
718666295291146285397081607986058864287612968465033527894198098928522749430,
|
|
29
|
+
10971164449179097832515056670594147898894418081309026322805549037082528587660,
|
|
30
|
+
16397970494781113622140409380710514277504568512202481522431528914560031562762,
|
|
31
|
+
15987991045804318696151558137607070651882190737142560406194591976742796145195,
|
|
32
|
+
19175554796060272870947844726785784415291967441071791144616572094703752022787,
|
|
33
|
+
14708716857471570462880683190724447733812118518043273649838616424043548023127,
|
|
34
|
+
5109703116431086866657790821388182053265093586387384935734011036204399393630,
|
|
35
|
+
1612476077210311180626421664389270104678910550524363357381847966959374674423,
|
|
36
|
+
16028984344157742576452936855797086856968817024956118691418341585143424903639,
|
|
37
|
+
6905323418829609143361434077039383502192920586565275784934386988372483556465,
|
|
38
|
+
5037234187699234788733084505200789125332575456459095878140727750253994537245,
|
|
39
|
+
5152780378461098676484401284161685966625077837157208907964141131514955942959
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
6925326031648378844726759441690273332175949886518827719224741736678266471462,
|
|
43
|
+
8087990171976409378525016197066789089596692733769545253942804888352233244331,
|
|
44
|
+
10115242383701466910539784663900956956505212347433548599529944880163612117847,
|
|
45
|
+
15618724583521291135890928658458637081479213437530496494788106479523123480134,
|
|
46
|
+
19573269191775350978579562905764743103417752180580176229566975904395505694207,
|
|
47
|
+
2381522187377974692257359562587606852360557473353020907100590706767276986457,
|
|
48
|
+
3570865353993345507636525265023758855364727230473021611280650482974485897542,
|
|
49
|
+
3026650225811133060402545160946181194870257210933662802529138266788423022235,
|
|
50
|
+
10948020004642082805202152014062303498984706484599503419636897666877701726029,
|
|
51
|
+
16425328653566008388486740080892552688012772956429074139489785673820307770702,
|
|
52
|
+
20638502839000044414864636985783149953889799151008745227055624454042471377832,
|
|
53
|
+
977321369609271151576827768083353705509746900519279122286818202637470656742,
|
|
54
|
+
18662986393280647182646025762677321210586855801774577114215804961111542726195,
|
|
55
|
+
9182414327249389553719378979750943052880001176853490206379257023646169811116
|
|
56
|
+
],
|
|
57
|
+
[
|
|
58
|
+
7699900854308622607636895140107457213471038801393300399043779958706267744510,
|
|
59
|
+
7699563868952902688273782470023919811229667532027732585467624469008534197561,
|
|
60
|
+
8605006500231713390564760089884965869867818332514275728271802101761117177706,
|
|
61
|
+
15390497513810955087868026868634948499789494261604405008298272598684585331879,
|
|
62
|
+
1172653041469601107707030355715854571110526375194334139771259673595104816259,
|
|
63
|
+
139822645729727942447876327389754883087551266970976361358585992124005959663,
|
|
64
|
+
807568760006422352594797418374693945705914727214443753238278163089338607471,
|
|
65
|
+
19362805143026565781098954744725161233661862485826387437200176803022106919133,
|
|
66
|
+
9457043262004277983171082100772969689099515860060732671699192102623198243288,
|
|
67
|
+
19229090298682361289811638032020124933114889462217199961448135904896325661193,
|
|
68
|
+
18883326163102164343877677909116984239805709949130729675634413304023108763212,
|
|
69
|
+
2795333364660917174391473381893559091159208514832297547909172862364581446206,
|
|
70
|
+
18012979848063967305324818138773222084850070233834350625943804711450349870116,
|
|
71
|
+
11425098272720529401115253745902976848228234025625773037823969253767737500443
|
|
72
|
+
],
|
|
73
|
+
[
|
|
74
|
+
9243647856126339588200227750973237380809101852206502177952556679680468734813,
|
|
75
|
+
2561989864654045354260435368824127763249975523256535586391379695256700207392,
|
|
76
|
+
1308059969166897152269078839315249187046718124106168932020710683189419160756,
|
|
77
|
+
18264861452415533737686303596832882667852638121244187636443702248458018416929,
|
|
78
|
+
5735580005765404165535708760854311053102182143614810924129912232734875728422,
|
|
79
|
+
12547270286864340931439010083179993915942911007015778927394042746771813715897,
|
|
80
|
+
17861179987982979247789643870162154315308943006677455616368767345181299723498,
|
|
81
|
+
12520843301982976970226379882714814545061255956743392202788539428471921045815,
|
|
82
|
+
709419095293140562723620898844593712074413125125086760533949250121053456086,
|
|
83
|
+
20254885558410038279405227446341995510955697359900050994091569463713580982280,
|
|
84
|
+
8876829807505794597615690202974184696287415186921508358861381955321520402876,
|
|
85
|
+
9692396410060123455009190221005078571838194435772371581970098240972280778466,
|
|
86
|
+
11541729643712807778212647011796800767186857085220105751644556558522744760878,
|
|
87
|
+
7117533920695574619512162711113223946930183977424569115798612426749467545080
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
12554869896570109663558999106053541183136083706372178136870048170147558661370,
|
|
91
|
+
21307904757295729894500052152251151076177124351059746872940558537429181679313,
|
|
92
|
+
13447792161027167738515744919555311619301071111923271126707713963292614473975,
|
|
93
|
+
11194665041440536766843756304212299788817698936187605770131686430625103172681,
|
|
94
|
+
7022760843802757109079393624924627417630030139055381384837279305453559861026,
|
|
95
|
+
14368180091281110030022253036601349874026580767275461373222397498585380849175,
|
|
96
|
+
20362090815079102760789516334841889611927869342884580401494938701237909313479,
|
|
97
|
+
11683916255585393494577805363227207275174890005674166623110857790951330330248,
|
|
98
|
+
21680925564107543632769644144771629045807478787600735681275069556336841549441,
|
|
99
|
+
1554686039880869088226596836931999292372497423378849142389700108361111176287,
|
|
100
|
+
9553151402225656007352139561853210183786116738154807824913092141416366824324,
|
|
101
|
+
21774504332021003611111291017295441063483107704370481606906960187337904118400,
|
|
102
|
+
3472743162059388238264946309663113383560193397376658519781344886918012396958,
|
|
103
|
+
21850707327192737842691835772722844106916466129654852946865863108319178245521
|
|
104
|
+
],
|
|
105
|
+
[
|
|
106
|
+
6841243505372324564043525805425666596605335849634400049689614462868641599622,
|
|
107
|
+
11706947284665470438085734275890584651957983546291282232304205898476084974953,
|
|
108
|
+
8134420958061302592465696766566203845441024351721660066575866529624350946525,
|
|
109
|
+
2674642993002069213220912300725195098434544703961492590713058622848310061455,
|
|
110
|
+
14007544454490183581525584522132854274412440955138184221862170710084681738226,
|
|
111
|
+
9427297140302346741340407818949601657384670126565058224960470754064287232598,
|
|
112
|
+
9424279417196769259939653963004219272435595656090601392111859177294419276463,
|
|
113
|
+
5159704841441138198509282351301933053602549958584575945916187562678590534936,
|
|
114
|
+
5934282708091541939003757621608766449985810436411564642900129758520734711260,
|
|
115
|
+
6572936900512215029112509161886160866328777917297795430264727434969553346474,
|
|
116
|
+
17332317297867087005634642159909283377570778576256008720318658354552654813365,
|
|
117
|
+
20469716791176463599463762213563135543375669917658488173798369718370224346075,
|
|
118
|
+
11895216520141526042182770992519307655836464153974170586288146149131884093776,
|
|
119
|
+
2345310584279491449819095573562431881564998414485162753036518957549727207513
|
|
120
|
+
],
|
|
121
|
+
[
|
|
122
|
+
16222168105567777760688113388791710300819703656136395550799888633073848798053,
|
|
123
|
+
14347453588631116202352669855016330076170847581618919999243717038742915487177,
|
|
124
|
+
1551977748690015855031859376084014992267998166583511614295554470740621685494,
|
|
125
|
+
5558376366205739247464101507558623934779699722049069497418188353860561540238,
|
|
126
|
+
15084362489402846752495176069529022447007294106313236924068931072406922960482,
|
|
127
|
+
17446301099629553693162731281967866078816607293341610477850995414321505446665,
|
|
128
|
+
15416633712259927998995598381829216728913683600537032862643171407716059372732,
|
|
129
|
+
6910124994917236999728700744617337824847623550680442113266553962793201270115,
|
|
130
|
+
3240338086312503075747637551773566329150860621223080774242357236897458479365,
|
|
131
|
+
9706162939164863315053907226494918827393300584078535638283184502242772542378,
|
|
132
|
+
3821371825593696440611637099905775310839636477646533943959149234595561019388,
|
|
133
|
+
12220054708690507765048929995921680127285008492320123722886943219569231705313,
|
|
134
|
+
16484014909498227505527128570845947338361237083477117662394990633734193572570,
|
|
135
|
+
15639273550026538537711009501005182488432976272250651065072907504931158455474
|
|
136
|
+
],
|
|
137
|
+
[
|
|
138
|
+
8039261311473792027408130340265108867783988336829815266149766357424909552805,
|
|
139
|
+
13742810756711208866393269789950822956196651488331544225304557369739035583007,
|
|
140
|
+
5732605965679620193714116075516176231919315490749768120227762344555213912038,
|
|
141
|
+
1426283383724925735279168010737048062664480092231550167387716017170422478271,
|
|
142
|
+
7289543915982634578897897440956973302403422297539950338836810160596047457980,
|
|
143
|
+
15177295033774438197517772642364420015492974487860823338193520175227862903717,
|
|
144
|
+
5412509155867259433944542755241941469706034032614068890113478300647952353475,
|
|
145
|
+
16755045912589178729548422106539306191579601567866216267685082373250783779841,
|
|
146
|
+
844425885324371282218176954530597075058496766373014736097970493596574863875,
|
|
147
|
+
12323478340077628423886836431146436403221716179764806398442271274194718652143,
|
|
148
|
+
19468406721151512215981453048984639951787280312568894384216547824763527840472,
|
|
149
|
+
6512636337641737270183934024333064400224464644359645491020358650071524340464,
|
|
150
|
+
8198878215192784492258585011520207242810327647198332623948351347768018051267,
|
|
151
|
+
8014960150646978739731831763393714179490854831922196242908407049327430863238
|
|
152
|
+
],
|
|
153
|
+
[
|
|
154
|
+
12816421563768297608770270654146762017343826741755988834647936785087288245221,
|
|
155
|
+
4869230832458710492613139050501069397194236257402947715710705773326736170245,
|
|
156
|
+
18301439700961740613282752163964601039402055729651579152511810295028351855917,
|
|
157
|
+
11073344652802336528382437239976464979745376329678013840706100925574578891663,
|
|
158
|
+
9107882721143487446664847981273782313316003453386555221878701631432129058401,
|
|
159
|
+
9441695541513726822451572070540177043748046411169636568582927338148104680158,
|
|
160
|
+
8987068930426301924419900826390508311526176863992306858982473479912439758010,
|
|
161
|
+
1725109031239210601724581840155988791039497876559382612372874257775877974323,
|
|
162
|
+
18516110346729610211387987894593386281257834088357741109524145966500785499183,
|
|
163
|
+
114078214476076549461901405178268623018026929846201249476869510133510589766,
|
|
164
|
+
15915940069177053049090451855582611051242699463952201407239272373068542013292,
|
|
165
|
+
9373936080407194259749015269175580128112032582312467763484971165406599176646,
|
|
166
|
+
4922802633190996456945600288106639549790810185209505074744770090776471062338,
|
|
167
|
+
8883001810279320778962047313612748029483858862205749774979015238684570049088
|
|
168
|
+
],
|
|
169
|
+
[
|
|
170
|
+
10621957863293158040009666146187340406300006617270113507997717497098731431645,
|
|
171
|
+
11544253490899949675932185200523769178642714850738952025947643180461452257027,
|
|
172
|
+
19367886286197174023585178612664391272570357530876044259219178006444442279835,
|
|
173
|
+
49583159539136224825737189586941489049516773623689603831917260806184061698,
|
|
174
|
+
14718035764669896417897962215694711502145567157050183561348015124983050763912,
|
|
175
|
+
16468329864686708461615593125586840110548434159129257976547738477143616225069,
|
|
176
|
+
19316680422470456517825967239402234468963225932355881906076897312088976727808,
|
|
177
|
+
3793008941035953637072065313624049788550692955904011087840457148221740889857,
|
|
178
|
+
8994123619474927749524041243795236789619386871069943230512200348341409025802,
|
|
179
|
+
2898455184193535874162795400065700362364113037155462125222703939894764399559,
|
|
180
|
+
7006987736985681119096469806956612323700302986805047546691419062106874738669,
|
|
181
|
+
6578526693577992862738197741211972861837397562647850241473856881198749597774,
|
|
182
|
+
18253609658317686864081972526657430282945609846265497350129963610508303097865,
|
|
183
|
+
20602454323920106770928127673050173555696255204782817307960073152139829286712
|
|
184
|
+
],
|
|
185
|
+
[
|
|
186
|
+
6919690594446594824660388293695365136302375315018989420609208580270256193473,
|
|
187
|
+
20152340858374022568747410447956756883573367358669429548835673215400335225747,
|
|
188
|
+
11674218038035204128186342498577020603218612593894174060137243207689886423596,
|
|
189
|
+
16509772385894559653132866836382733797078280267167499296517180188027714772070,
|
|
190
|
+
18387700354891683161007139598833533459740755646851082725263944626765753998128,
|
|
191
|
+
8496770255291121655312305725645117658510206297162207504909146686627154245846,
|
|
192
|
+
3295351580633631545204707236418977224205703294426182202748223245617942752953,
|
|
193
|
+
11318533876720817956139762907441156918032396007060817178042936071438547629319,
|
|
194
|
+
9798692489110933308397734193670030418121117030189402149994776248649813971130,
|
|
195
|
+
7253879530870754821836349446054636336833607432103959373798000294248292966203,
|
|
196
|
+
21808645514001764351825515375665639285586999794992628373968527911077248645185,
|
|
197
|
+
2859748802987042398453158245958377568437550705999358391809538153774651114865,
|
|
198
|
+
4373537692781319117201803895634857716202697229097770645380222493663057011429,
|
|
199
|
+
21723556418902236605356947828522543021755681613733490227407492902239152334538
|
|
200
|
+
],
|
|
201
|
+
[
|
|
202
|
+
3246325158773052647788911340476235648870186305670446321333841273770228016262,
|
|
203
|
+
21672319732433045166991956534762990382763080837755725716637027617201056105221,
|
|
204
|
+
1097625536358560225015844871776096852794298581720514105921271391131873344240,
|
|
205
|
+
5332470123606111842725808071294486759248878958039162159296029608796276205941,
|
|
206
|
+
4147129560663007063799754603731275683761368247704376766576071776957227165800,
|
|
207
|
+
7032402220603422034618210155106646820962552774510253688945919060625670415308,
|
|
208
|
+
5241022678363371404039324538224070321660623527603509392150146296843642044363,
|
|
209
|
+
5281273397025328620822441453790518717375265972202147684745427714882287252791,
|
|
210
|
+
8109626675067152219533782552336308649905522111608563670382254454484448073029,
|
|
211
|
+
4696661232179595878220108186097206302552300846640109174608389689072223809776,
|
|
212
|
+
13974026846148052806722306435446895222317781098029808723550029071117080027133,
|
|
213
|
+
14451415757463182353662034231421738047130904367363697865823311429455557043904,
|
|
214
|
+
9490728148230530026163178051838213576627639298618884515939110001242292217290,
|
|
215
|
+
227687333556127166330064214209948378192130717415165040791158610964406937909
|
|
216
|
+
]
|
|
217
|
+
];
|
|
218
|
+
|
|
219
|
+
// Memory data
|
|
220
|
+
uint16 constant pVk = 0;
|
|
221
|
+
uint16 constant pPairing = 128;
|
|
222
|
+
|
|
223
|
+
uint16 constant pLastMem = 896;
|
|
18
224
|
|
|
19
|
-
/// @dev See {ISemaphoreVerifier-verifyProof}.
|
|
20
225
|
function verifyProof(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
signal = _hash(signal);
|
|
29
|
-
externalNullifier = _hash(externalNullifier);
|
|
30
|
-
|
|
31
|
-
Proof memory p;
|
|
32
|
-
|
|
33
|
-
p.A = Pairing.G1Point(proof[0], proof[1]);
|
|
34
|
-
p.B = Pairing.G2Point([proof[2], proof[3]], [proof[4], proof[5]]);
|
|
35
|
-
p.C = Pairing.G1Point(proof[6], proof[7]);
|
|
36
|
-
|
|
37
|
-
VerificationKey memory vk = _getVerificationKey(merkleTreeDepth - 16);
|
|
38
|
-
|
|
39
|
-
Pairing.G1Point memory vk_x = vk.IC[0];
|
|
40
|
-
|
|
41
|
-
vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[1], merkleTreeRoot));
|
|
42
|
-
vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[2], nullifierHash));
|
|
43
|
-
vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[3], signal));
|
|
44
|
-
vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[4], externalNullifier));
|
|
45
|
-
|
|
46
|
-
Pairing.G1Point[] memory p1 = new Pairing.G1Point[](4);
|
|
47
|
-
Pairing.G2Point[] memory p2 = new Pairing.G2Point[](4);
|
|
48
|
-
|
|
49
|
-
p1[0] = Pairing.negate(p.A);
|
|
50
|
-
p2[0] = p.B;
|
|
51
|
-
p1[1] = vk.alfa1;
|
|
52
|
-
p2[1] = vk.beta2;
|
|
53
|
-
p1[2] = vk_x;
|
|
54
|
-
p2[2] = vk.gamma2;
|
|
55
|
-
p1[3] = p.C;
|
|
56
|
-
p2[3] = vk.delta2;
|
|
57
|
-
|
|
58
|
-
Pairing.pairingCheck(p1, p2);
|
|
59
|
-
}
|
|
226
|
+
uint[2] calldata _pA,
|
|
227
|
+
uint[2][2] calldata _pB,
|
|
228
|
+
uint[2] calldata _pC,
|
|
229
|
+
uint[4] calldata _pubSignals,
|
|
230
|
+
uint merkleTreeDepth
|
|
231
|
+
) external view returns (bool) {
|
|
232
|
+
uint[14] memory _vkPoints = VK_POINTS[merkleTreeDepth - 1];
|
|
60
233
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
234
|
+
assembly {
|
|
235
|
+
function checkField(v) {
|
|
236
|
+
if iszero(lt(v, q)) {
|
|
237
|
+
mstore(0, 0)
|
|
238
|
+
return(0, 0x20)
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// G1 function to multiply a G1 value(x,y) to value in an address
|
|
243
|
+
function g1_mulAccC(pR, x, y, s) {
|
|
244
|
+
let success
|
|
245
|
+
let mIn := mload(0x40)
|
|
246
|
+
mstore(mIn, x)
|
|
247
|
+
mstore(add(mIn, 32), y)
|
|
248
|
+
mstore(add(mIn, 64), s)
|
|
249
|
+
|
|
250
|
+
success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64)
|
|
251
|
+
|
|
252
|
+
if iszero(success) {
|
|
253
|
+
mstore(0, 0)
|
|
254
|
+
return(0, 0x20)
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
mstore(add(mIn, 64), mload(pR))
|
|
258
|
+
mstore(add(mIn, 96), mload(add(pR, 32)))
|
|
259
|
+
|
|
260
|
+
success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64)
|
|
261
|
+
|
|
262
|
+
if iszero(success) {
|
|
263
|
+
mstore(0, 0)
|
|
264
|
+
return(0, 0x20)
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function checkPairing(pA, pB, pC, pubSignals, pMem, vkPoints) -> isOk {
|
|
269
|
+
let _pPairing := add(pMem, pPairing)
|
|
270
|
+
let _pVk := add(pMem, pVk)
|
|
271
|
+
|
|
272
|
+
mstore(_pVk, mload(add(vkPoints, 128)))
|
|
273
|
+
mstore(add(_pVk, 32), mload(add(vkPoints, 160)))
|
|
274
|
+
|
|
275
|
+
// Compute the linear combination vk_x
|
|
276
|
+
|
|
277
|
+
g1_mulAccC(_pVk, mload(add(vkPoints, 192)), mload(add(vkPoints, 224)), calldataload(add(pubSignals, 0)))
|
|
278
|
+
|
|
279
|
+
g1_mulAccC(
|
|
280
|
+
_pVk,
|
|
281
|
+
mload(add(vkPoints, 256)),
|
|
282
|
+
mload(add(vkPoints, 288)),
|
|
283
|
+
calldataload(add(pubSignals, 32))
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
g1_mulAccC(
|
|
287
|
+
_pVk,
|
|
288
|
+
mload(add(vkPoints, 320)),
|
|
289
|
+
mload(add(vkPoints, 352)),
|
|
290
|
+
calldataload(add(pubSignals, 64))
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
g1_mulAccC(
|
|
294
|
+
_pVk,
|
|
295
|
+
mload(add(vkPoints, 384)),
|
|
296
|
+
mload(add(vkPoints, 416)),
|
|
297
|
+
calldataload(add(pubSignals, 96))
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
// -A
|
|
301
|
+
mstore(_pPairing, calldataload(pA))
|
|
302
|
+
mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q))
|
|
303
|
+
|
|
304
|
+
// B
|
|
305
|
+
mstore(add(_pPairing, 64), calldataload(pB))
|
|
306
|
+
mstore(add(_pPairing, 96), calldataload(add(pB, 32)))
|
|
307
|
+
mstore(add(_pPairing, 128), calldataload(add(pB, 64)))
|
|
308
|
+
mstore(add(_pPairing, 160), calldataload(add(pB, 96)))
|
|
309
|
+
|
|
310
|
+
// alpha1
|
|
311
|
+
mstore(add(_pPairing, 192), alphax)
|
|
312
|
+
mstore(add(_pPairing, 224), alphay)
|
|
313
|
+
|
|
314
|
+
// beta2
|
|
315
|
+
mstore(add(_pPairing, 256), betax1)
|
|
316
|
+
mstore(add(_pPairing, 288), betax2)
|
|
317
|
+
mstore(add(_pPairing, 320), betay1)
|
|
318
|
+
mstore(add(_pPairing, 352), betay2)
|
|
319
|
+
|
|
320
|
+
// vk_x
|
|
321
|
+
mstore(add(_pPairing, 384), mload(add(pMem, pVk)))
|
|
322
|
+
mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32))))
|
|
323
|
+
|
|
324
|
+
// gamma2
|
|
325
|
+
mstore(add(_pPairing, 448), gammax1)
|
|
326
|
+
mstore(add(_pPairing, 480), gammax2)
|
|
327
|
+
mstore(add(_pPairing, 512), gammay1)
|
|
328
|
+
mstore(add(_pPairing, 544), gammay2)
|
|
329
|
+
|
|
330
|
+
// C
|
|
331
|
+
mstore(add(_pPairing, 576), calldataload(pC))
|
|
332
|
+
mstore(add(_pPairing, 608), calldataload(add(pC, 32)))
|
|
333
|
+
|
|
334
|
+
// delta2
|
|
335
|
+
mstore(add(_pPairing, 640), mload(vkPoints))
|
|
336
|
+
mstore(add(_pPairing, 672), mload(add(vkPoints, 32)))
|
|
337
|
+
mstore(add(_pPairing, 704), mload(add(vkPoints, 64)))
|
|
338
|
+
mstore(add(_pPairing, 736), mload(add(vkPoints, 96)))
|
|
339
|
+
|
|
340
|
+
let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20)
|
|
341
|
+
|
|
342
|
+
isOk := and(success, mload(_pPairing))
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
let pMem := mload(0x40)
|
|
346
|
+
mstore(0x40, add(pMem, pLastMem))
|
|
347
|
+
|
|
348
|
+
// Validate that all evaluations ∈ F
|
|
349
|
+
|
|
350
|
+
checkField(calldataload(add(_pubSignals, 0)))
|
|
351
|
+
|
|
352
|
+
checkField(calldataload(add(_pubSignals, 32)))
|
|
353
|
+
|
|
354
|
+
checkField(calldataload(add(_pubSignals, 64)))
|
|
355
|
+
|
|
356
|
+
checkField(calldataload(add(_pubSignals, 96)))
|
|
357
|
+
|
|
358
|
+
checkField(calldataload(add(_pubSignals, 128)))
|
|
359
|
+
|
|
360
|
+
// Validate all evaluations
|
|
361
|
+
let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem, _vkPoints)
|
|
106
362
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
function _hash(uint256 message) private pure returns (uint256) {
|
|
111
|
-
return uint256(keccak256(abi.encodePacked(message))) >> 8;
|
|
363
|
+
mstore(0, isValid)
|
|
364
|
+
return(0, 0x20)
|
|
365
|
+
}
|
|
112
366
|
}
|
|
113
367
|
}
|