79 lines
38 KiB
JSON

{
"address": "0x6C4C4C369d55E86F922C64f5cF33C057AEf28477",
"abi": [
{
"inputs": [],
"name": "InvalidProof",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256[2]",
"name": "a",
"type": "uint256[2]"
},
{
"internalType": "uint256[2][2]",
"name": "b",
"type": "uint256[2][2]"
},
{
"internalType": "uint256[2]",
"name": "c",
"type": "uint256[2]"
},
{
"internalType": "uint256[4]",
"name": "input",
"type": "uint256[4]"
}
],
"name": "verifyProof",
"outputs": [],
"stateMutability": "view",
"type": "function"
}
],
"transactionHash": "0x6e45a5870b48bd3998791fe589c7b5226b85a77d811037a31dc7f9a40c5d7dd3",
"receipt": {
"to": null,
"from": "0xC4d5292b18412bdAEd37E278F4aB6973DEa025B8",
"contractAddress": "0x6C4C4C369d55E86F922C64f5cF33C057AEf28477",
"transactionIndex": 0,
"gasUsed": "1383001",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0xbd772c1e3a109bb345358049e746b1f71b8e68f3fbda382d232e2d3ba050be45",
"transactionHash": "0x6e45a5870b48bd3998791fe589c7b5226b85a77d811037a31dc7f9a40c5d7dd3",
"logs": [],
"blockNumber": 2,
"cumulativeGasUsed": "1383001",
"status": 1,
"byzantium": true
},
"args": [],
"numDeployments": 1,
"solcInputHash": "b8e33ba299e95051cdf4858cd81bbca9",
"metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"a\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2][2]\",\"name\":\"b\",\"type\":\"uint256[2][2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"c\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[4]\",\"name\":\"input\",\"type\":\"uint256[4]\"}],\"name\":\"verifyProof\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"verifyProof(uint256[2],uint256[2][2],uint256[2],uint256[4])\":{\"details\":\"Verifies a Semaphore proof. Reverts with InvalidProof if the proof is invalid.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@semaphore-protocol/contracts/verifiers/Verifier20.sol\":\"Verifier20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@semaphore-protocol/contracts/verifiers/Verifier20.sol\":{\"content\":\"//\\n// Copyright 2017 Christian Reitwiessner\\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\"Software\\\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n// THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n//\\n// 2019 OKIMS\\n// ported to solidity 0.6\\n// fixed linter warnings\\n// added requiere error messages\\n//\\n// 2021 Remco Bloemen\\n// cleaned up code\\n// added InvalidProve() error\\n// always revert with InvalidProof() on invalid proof\\n// make Pairing strict\\n//\\n// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.4;\\n\\nlibrary Pairing {\\n error InvalidProof();\\n\\n // The prime q in the base field F_q for G1\\n uint256 constant BASE_MODULUS = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n\\n // The prime moludus of the scalar field of G1.\\n uint256 constant SCALAR_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n\\n struct G1Point {\\n uint256 X;\\n uint256 Y;\\n }\\n\\n // Encoding of field elements is: X[0] * z + X[1]\\n struct G2Point {\\n uint256[2] X;\\n uint256[2] Y;\\n }\\n\\n /// @return the generator of G1\\n function P1() internal pure returns (G1Point memory) {\\n return G1Point(1, 2);\\n }\\n\\n /// @return the generator of G2\\n function P2() internal pure returns (G2Point memory) {\\n return\\n G2Point(\\n [\\n 11559732032986387107991004021392285783925812861821192530917403151452391805634,\\n 10857046999023057135944570762232829481370756359578518086990519993285655852781\\n ],\\n [\\n 4082367875863433681332203403145435568316851327593401208105741076214120093531,\\n 8495653923123431417604973247489272438418190587263600148770280649306958101930\\n ]\\n );\\n }\\n\\n /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero.\\n function negate(G1Point memory p) internal pure returns (G1Point memory r) {\\n if (p.X == 0 && p.Y == 0) return G1Point(0, 0);\\n // Validate input or revert\\n if (p.X >= BASE_MODULUS || p.Y >= BASE_MODULUS) revert InvalidProof();\\n // We know p.Y > 0 and p.Y < BASE_MODULUS.\\n return G1Point(p.X, BASE_MODULUS - p.Y);\\n }\\n\\n /// @return r the sum of two points of G1\\n function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {\\n // By EIP-196 all input is validated to be less than the BASE_MODULUS and form points\\n // on the curve.\\n uint256[4] memory input;\\n input[0] = p1.X;\\n input[1] = p1.Y;\\n input[2] = p2.X;\\n input[3] = p2.Y;\\n bool success;\\n // solium-disable-next-line security/no-inline-assembly\\n assembly {\\n success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60)\\n }\\n if (!success) revert InvalidProof();\\n }\\n\\n /// @return r the product of a point on G1 and a scalar, i.e.\\n /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p.\\n function scalar_mul(G1Point memory p, uint256 s) internal view returns (G1Point memory r) {\\n // By EIP-196 the values p.X and p.Y are verified to less than the BASE_MODULUS and\\n // form a valid point on the curve. But the scalar is not verified, so we do that explicitelly.\\n if (s >= SCALAR_MODULUS) revert InvalidProof();\\n uint256[3] memory input;\\n input[0] = p.X;\\n input[1] = p.Y;\\n input[2] = s;\\n bool success;\\n // solium-disable-next-line security/no-inline-assembly\\n assembly {\\n success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60)\\n }\\n if (!success) revert InvalidProof();\\n }\\n\\n /// Asserts the pairing check\\n /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1\\n /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should succeed\\n function pairingCheck(G1Point[] memory p1, G2Point[] memory p2) internal view {\\n // By EIP-197 all input is verified to be less than the BASE_MODULUS and form elements in their\\n // respective groups of the right order.\\n if (p1.length != p2.length) revert InvalidProof();\\n uint256 elements = p1.length;\\n uint256 inputSize = elements * 6;\\n uint256[] memory input = new uint256[](inputSize);\\n for (uint256 i = 0; i < elements; i++) {\\n input[i * 6 + 0] = p1[i].X;\\n input[i * 6 + 1] = p1[i].Y;\\n input[i * 6 + 2] = p2[i].X[0];\\n input[i * 6 + 3] = p2[i].X[1];\\n input[i * 6 + 4] = p2[i].Y[0];\\n input[i * 6 + 5] = p2[i].Y[1];\\n }\\n uint256[1] memory out;\\n bool success;\\n // solium-disable-next-line security/no-inline-assembly\\n assembly {\\n success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)\\n }\\n if (!success || out[0] != 1) revert InvalidProof();\\n }\\n}\\n\\ncontract Verifier20 {\\n using Pairing for *;\\n\\n struct VerifyingKey {\\n Pairing.G1Point alfa1;\\n Pairing.G2Point beta2;\\n Pairing.G2Point gamma2;\\n Pairing.G2Point delta2;\\n Pairing.G1Point[] IC;\\n }\\n\\n struct Proof {\\n Pairing.G1Point A;\\n Pairing.G2Point B;\\n Pairing.G1Point C;\\n }\\n\\n function verifyingKey() internal pure returns (VerifyingKey memory vk) {\\n vk.alfa1 = Pairing.G1Point(\\n 20491192805390485299153009773594534940189261866228447918068658471970481763042,\\n 9383485363053290200918347156157836566562967994039712273449902621266178545958\\n );\\n\\n vk.beta2 = Pairing.G2Point(\\n [4252822878758300859123897981450591353533073413197771768651442665752259397132, 6375614351688725206403948262868962793625744043794305715222011528459656738731],\\n [21847035105528745403288232691147584728191162732299865338377159692350059136679, 10505242626370262277552901082094356697409835680220590971873171140371331206856]\\n );\\n\\n vk.gamma2 = Pairing.G2Point(\\n [11559732032986387107991004021392285783925812861821192530917403151452391805634, 10857046999023057135944570762232829481370756359578518086990519993285655852781],\\n [4082367875863433681332203403145435568316851327593401208105741076214120093531, 8495653923123431417604973247489272438418190587263600148770280649306958101930]\\n );\\n\\n vk.delta2 = Pairing.G2Point(\\n [18976133691706015337908381757202123182841901611067930614519324084182946094218, 1382518990777992893805140303684642328066746531257780279226677247567004248173],\\n [6627710380771660558660627878547223719795356903257079198333641681330388499309, 21806956747910197517744499423107239699428979652113081469385876768212706694581]\\n );\\n\\n vk.IC = new Pairing.G1Point[](5);\\n\\n \\n vk.IC[0] = Pairing.G1Point(\\n 19918517214839406678907482305035208173510172567546071380302965459737278553528,\\n 7151186077716310064777520690144511885696297127165278362082219441732663131220\\n );\\n \\n vk.IC[1] = Pairing.G1Point(\\n 690581125971423619528508316402701520070153774868732534279095503611995849608,\\n 21271996888576045810415843612869789314680408477068973024786458305950370465558\\n );\\n \\n vk.IC[2] = Pairing.G1Point(\\n 16461282535702132833442937829027913110152135149151199860671943445720775371319,\\n 2814052162479976678403678512565563275428791320557060777323643795017729081887\\n );\\n \\n vk.IC[3] = Pairing.G1Point(\\n 4319780315499060392574138782191013129592543766464046592208884866569377437627,\\n 13920930439395002698339449999482247728129484070642079851312682993555105218086\\n );\\n \\n vk.IC[4] = Pairing.G1Point(\\n 3554830803181375418665292545416227334138838284686406179598687755626325482686,\\n 5951609174746846070367113593675211691311013364421437923470787371738135276998\\n );\\n \\n }\\n\\n /// @dev Verifies a Semaphore proof. Reverts with InvalidProof if the proof is invalid.\\n function verifyProof(\\n uint[2] memory a,\\n uint[2][2] memory b,\\n uint[2] memory c,\\n uint[4] memory input\\n ) public view {\\n // If the values are not in the correct range, the Pairing contract will revert.\\n Proof memory proof;\\n proof.A = Pairing.G1Point(a[0], a[1]);\\n proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]);\\n proof.C = Pairing.G1Point(c[0], c[1]);\\n\\n VerifyingKey memory vk = verifyingKey();\\n\\n // Compute the linear combination vk_x of inputs times IC\\n if (input.length + 1 != vk.IC.length) revert Pairing.InvalidProof();\\n Pairing.G1Point memory vk_x = vk.IC[0];\\n vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[1], input[0]));\\n vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[2], input[1]));\\n vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[3], input[2]));\\n vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[4], input[3]));\\n\\n // Check pairing\\n Pairing.G1Point[] memory p1 = new Pairing.G1Point[](4);\\n Pairing.G2Point[] memory p2 = new Pairing.G2Point[](4);\\n p1[0] = Pairing.negate(proof.A);\\n p2[0] = proof.B;\\n p1[1] = vk.alfa1;\\n p2[1] = vk.beta2;\\n p1[2] = vk_x;\\n p2[2] = vk.gamma2;\\n p1[3] = proof.C;\\n p2[3] = vk.delta2;\\n Pairing.pairingCheck(p1, p2);\\n }\\n}\\n\",\"keccak256\":\"0x2c25ba57f1c9f48a79a3ac3830771109108b7310a4a3ba1d5dfa11c7d795b9db\",\"license\":\"GPL-3.0\"}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b5061181b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80635fe8c13b14610030575b600080fd5b61004a600480360381019061004591906115f2565b61004c565b005b6100546111c2565b6040518060400160405280866000600281106100735761007261165b565b5b60200201518152602001866001600281106100915761009061165b565b5b6020020151815250816000018190525060405180604001604052806040518060400160405280876000600281106100cb576100ca61165b565b5b60200201516000600281106100e3576100e261165b565b5b60200201518152602001876000600281106101015761010061165b565b5b60200201516001600281106101195761011861165b565b5b602002015181525081526020016040518060400160405280876001600281106101455761014461165b565b5b602002015160006002811061015d5761015c61165b565b5b602002015181526020018760016002811061017b5761017a61165b565b5b60200201516001600281106101935761019261165b565b5b602002015181525081525081602001819052506040518060400160405280846000600281106101c5576101c461165b565b5b60200201518152602001846001600281106101e3576101e261165b565b5b6020020151815250816040018190525060006101fd610589565b90508060800151516001600461021391906116b9565b1461024a576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081608001516000815181106102645761026361165b565b5b602002602001015190506102b8816102b3846080015160018151811061028d5761028c61165b565b5b6020026020010151876000600481106102a9576102a861165b565b5b6020020151610af5565b610c11565b9050610304816102ff84608001516002815181106102d9576102d861165b565b5b6020026020010151876001600481106102f5576102f461165b565b5b6020020151610af5565b610c11565b90506103508161034b84608001516003815181106103255761032461165b565b5b6020026020010151876002600481106103415761034061165b565b5b6020020151610af5565b610c11565b905061039c8161039784608001516004815181106103715761037061165b565b5b60200260200101518760036004811061038d5761038c61165b565b5b6020020151610af5565b610c11565b90506000600467ffffffffffffffff8111156103bb576103ba611329565b5b6040519080825280602002602001820160405280156103f457816020015b6103e16111f5565b8152602001906001900390816103d95790505b5090506000600467ffffffffffffffff81111561041457610413611329565b5b60405190808252806020026020018201604052801561044d57816020015b61043a61120f565b8152602001906001900390816104325790505b50905061045d8560000151610cfa565b826000815181106104715761047061165b565b5b60200260200101819052508460200151816000815181106104955761049461165b565b5b60200260200101819052508360000151826001815181106104b9576104b861165b565b5b60200260200101819052508360200151816001815181106104dd576104dc61165b565b5b602002602001018190525082826002815181106104fd576104fc61165b565b5b60200260200101819052508360400151816002815181106105215761052061165b565b5b60200260200101819052508460400151826003815181106105455761054461165b565b5b60200260200101819052508360600151816003815181106105695761056861165b565b5b602002602001018190525061057e8282610e1b565b505050505050505050565b610591611235565b60405180604001604052807f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281526020017f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19268152508160000181905250604051806040016040528060405180604001604052807f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c81526020017f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab815250815260200160405180604001604052807f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781526020017f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec88152508152508160200181905250604051806040016040528060405180604001604052807f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed815250815260200160405180604001604052807f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa8152508152508160400181905250604051806040016040528060405180604001604052807f29f41c6e0e30802e2749bfb0729810876f3423e6f24829ad3e30adb1934f1c8a81526020017f030e7a5f70bb5daa6e18d80d6d447e772efb0bb7fb9d0ffcd54fc5a48af1286d815250815260200160405180604001604052807f0ea726b117e48cda8bce2349405f006a84cdd3dcfba12efc990df25970a27b6d81526020017f30364cd4f8a293b1a04f0153548d3e01baad091c69097ca4e9f26be63e4095b58152508152508160600181905250600567ffffffffffffffff81111561085857610857611329565b5b60405190808252806020026020018201604052801561089157816020015b61087e6111f5565b8152602001906001900390816108765790505b50816080018190525060405180604001604052807f2c097b31a897227a6f64c9fc31d9a8fc421b0d8b8207f92532b464e431e61db881526020017f0fcf6d89d77d5123a43dfb23efb9c929c28c148ca82c794057864b8e66903c5481525081608001516000815181106109075761090661165b565b5b602002602001018190525060405180604001604052807f0186dae5999acfe2cda6fa7a157ae726afda7c6f57b00ea0aa6c2c23bf83838881526020017f2f078608f710c45b60d23716c58e106d8c7a1c6db28119defffc413e074f8716815250816080015160018151811061097f5761097e61165b565b5b602002602001018190525060405180604001604052807f2464c1784bda2cbfb51e5ab87cf7eb2764ad81f7038152bdbbb07d404b49aa3781526020017f0638b273e4ee33e03e42ca6c7de1ea7043dbdcaa48661864de644d91c6b4821f81525081608001516002815181106109f7576109f661165b565b5b602002602001018190525060405180604001604052807f098ce8b5289ef791db34b68b9e0043ab7bf25306d83a9f0ce74396b8a69c57bb81526020017f1ec6f7a81748f3d2c2b87610d747ca72045ac1530e226f00710630d41aad7e268152508160800151600381518110610a6f57610a6e61165b565b5b602002602001018190525060405180604001604052807f07dbf682cc528d3ff763fa576d05db50e023921728119ef66f880b6adae01cbe81526020017f0d287dcd9318207576eaa871e7b3308f613d9df7865059cdbc9f66fdef342dc68152508160800151600481518110610ae757610ae661165b565b5b602002602001018190525090565b610afd6111f5565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210610b56576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5e61127c565b836000015181600060038110610b7757610b7661165b565b5b602002018181525050836020015181600160038110610b9957610b9861165b565b5b6020020181815250508281600260038110610bb757610bb661165b565b5b602002018181525050600060608360808460076107d05a03fa905080610c09576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505092915050565b610c196111f5565b610c2161129e565b836000015181600060048110610c3a57610c3961165b565b5b602002018181525050836020015181600160048110610c5c57610c5b61165b565b5b602002018181525050826000015181600260048110610c7e57610c7d61165b565b5b602002018181525050826020015181600360048110610ca057610c9f61165b565b5b602002018181525050600060608360c08460066107d05a03fa905080610cf2576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505092915050565b610d026111f5565b60008260000151148015610d1a575060008260200151145b15610d3d5760405180604001604052806000815260200160008152509050610e16565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260000151101580610d9457507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47826020015110155b15610dcb576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360000151815260200183602001517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610e10919061170f565b81525090505b919050565b8051825114610e56576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000825190506000600682610e6b9190611743565b905060008167ffffffffffffffff811115610e8957610e88611329565b5b604051908082528060200260200182016040528015610eb75781602001602082028036833780820191505090505b50905060005b8381101561113c57858181518110610ed857610ed761165b565b5b602002602001015160000151826000600684610ef49190611743565b610efe91906116b9565b81518110610f0f57610f0e61165b565b5b602002602001018181525050858181518110610f2e57610f2d61165b565b5b602002602001015160200151826001600684610f4a9190611743565b610f5491906116b9565b81518110610f6557610f6461165b565b5b602002602001018181525050848181518110610f8457610f8361165b565b5b602002602001015160000151600060028110610fa357610fa261165b565b5b6020020151826002600684610fb89190611743565b610fc291906116b9565b81518110610fd357610fd261165b565b5b602002602001018181525050848181518110610ff257610ff161165b565b5b6020026020010151600001516001600281106110115761101061165b565b5b60200201518260036006846110269190611743565b61103091906116b9565b815181106110415761104061165b565b5b6020026020010181815250508481815181106110605761105f61165b565b5b60200260200101516020015160006002811061107f5761107e61165b565b5b60200201518260046006846110949190611743565b61109e91906116b9565b815181106110af576110ae61165b565b5b6020026020010181815250508481815181106110ce576110cd61165b565b5b6020026020010151602001516001600281106110ed576110ec61165b565b5b60200201518260056006846111029190611743565b61110c91906116b9565b8151811061111d5761111c61165b565b5b60200260200101818152505080806111349061179d565b915050610ebd565b506111456112c0565b6000602082602086026020860160086107d05a03fa9050801580611182575060018260006001811061117a5761117961165b565b5b602002015114155b156111b9576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b60405180606001604052806111d56111f5565b81526020016111e261120f565b81526020016111ef6111f5565b81525090565b604051806040016040528060008152602001600081525090565b60405180604001604052806112226112e2565b815260200161122f6112e2565b81525090565b6040518060a001604052806112486111f5565b815260200161125561120f565b815260200161126261120f565b815260200161126f61120f565b8152602001606081525090565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060200160405280600190602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61136182611318565b810181811067ffffffffffffffff821117156113805761137f611329565b5b80604052505050565b6000611393611304565b905061139f8282611358565b919050565b600067ffffffffffffffff8211156113bf576113be611329565b5b602082029050919050565b600080fd5b6000819050919050565b6113e2816113cf565b81146113ed57600080fd5b50565b6000813590506113ff816113d9565b92915050565b6000611418611413846113a4565b611389565b90508060208402830185811115611432576114316113ca565b5b835b8181101561145b578061144788826113f0565b845260208401935050602081019050611434565b5050509392505050565b600082601f83011261147a57611479611313565b5b6002611487848285611405565b91505092915050565b600067ffffffffffffffff8211156114ab576114aa611329565b5b602082029050919050565b60006114c96114c484611490565b611389565b905080604084028301858111156114e3576114e26113ca565b5b835b8181101561150c57806114f88882611465565b8452602084019350506040810190506114e5565b5050509392505050565b600082601f83011261152b5761152a611313565b5b60026115388482856114b6565b91505092915050565b600067ffffffffffffffff82111561155c5761155b611329565b5b602082029050919050565b600061157a61157584611541565b611389565b90508060208402830185811115611594576115936113ca565b5b835b818110156115bd57806115a988826113f0565b845260208401935050602081019050611596565b5050509392505050565b600082601f8301126115dc576115db611313565b5b60046115e9848285611567565b91505092915050565b600080600080610180858703121561160d5761160c61130e565b5b600061161b87828801611465565b945050604061162c87828801611516565b93505060c061163d87828801611465565b92505061010061164f878288016115c7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116c4826113cf565b91506116cf836113cf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156117045761170361168a565b5b828201905092915050565b600061171a826113cf565b9150611725836113cf565b9250828210156117385761173761168a565b5b828203905092915050565b600061174e826113cf565b9150611759836113cf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117925761179161168a565b5b828202905092915050565b60006117a8826113cf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117da576117d961168a565b5b60018201905091905056fea26469706673582212207f72fd21a4aa7285e9ba2ff12e6fe66a3619273d0c1202c286ee8dc61a48793664736f6c634300080f0033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80635fe8c13b14610030575b600080fd5b61004a600480360381019061004591906115f2565b61004c565b005b6100546111c2565b6040518060400160405280866000600281106100735761007261165b565b5b60200201518152602001866001600281106100915761009061165b565b5b6020020151815250816000018190525060405180604001604052806040518060400160405280876000600281106100cb576100ca61165b565b5b60200201516000600281106100e3576100e261165b565b5b60200201518152602001876000600281106101015761010061165b565b5b60200201516001600281106101195761011861165b565b5b602002015181525081526020016040518060400160405280876001600281106101455761014461165b565b5b602002015160006002811061015d5761015c61165b565b5b602002015181526020018760016002811061017b5761017a61165b565b5b60200201516001600281106101935761019261165b565b5b602002015181525081525081602001819052506040518060400160405280846000600281106101c5576101c461165b565b5b60200201518152602001846001600281106101e3576101e261165b565b5b6020020151815250816040018190525060006101fd610589565b90508060800151516001600461021391906116b9565b1461024a576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081608001516000815181106102645761026361165b565b5b602002602001015190506102b8816102b3846080015160018151811061028d5761028c61165b565b5b6020026020010151876000600481106102a9576102a861165b565b5b6020020151610af5565b610c11565b9050610304816102ff84608001516002815181106102d9576102d861165b565b5b6020026020010151876001600481106102f5576102f461165b565b5b6020020151610af5565b610c11565b90506103508161034b84608001516003815181106103255761032461165b565b5b6020026020010151876002600481106103415761034061165b565b5b6020020151610af5565b610c11565b905061039c8161039784608001516004815181106103715761037061165b565b5b60200260200101518760036004811061038d5761038c61165b565b5b6020020151610af5565b610c11565b90506000600467ffffffffffffffff8111156103bb576103ba611329565b5b6040519080825280602002602001820160405280156103f457816020015b6103e16111f5565b8152602001906001900390816103d95790505b5090506000600467ffffffffffffffff81111561041457610413611329565b5b60405190808252806020026020018201604052801561044d57816020015b61043a61120f565b8152602001906001900390816104325790505b50905061045d8560000151610cfa565b826000815181106104715761047061165b565b5b60200260200101819052508460200151816000815181106104955761049461165b565b5b60200260200101819052508360000151826001815181106104b9576104b861165b565b5b60200260200101819052508360200151816001815181106104dd576104dc61165b565b5b602002602001018190525082826002815181106104fd576104fc61165b565b5b60200260200101819052508360400151816002815181106105215761052061165b565b5b60200260200101819052508460400151826003815181106105455761054461165b565b5b60200260200101819052508360600151816003815181106105695761056861165b565b5b602002602001018190525061057e8282610e1b565b505050505050505050565b610591611235565b60405180604001604052807f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281526020017f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19268152508160000181905250604051806040016040528060405180604001604052807f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c81526020017f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab815250815260200160405180604001604052807f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781526020017f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec88152508152508160200181905250604051806040016040528060405180604001604052807f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed815250815260200160405180604001604052807f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa8152508152508160400181905250604051806040016040528060405180604001604052807f29f41c6e0e30802e2749bfb0729810876f3423e6f24829ad3e30adb1934f1c8a81526020017f030e7a5f70bb5daa6e18d80d6d447e772efb0bb7fb9d0ffcd54fc5a48af1286d815250815260200160405180604001604052807f0ea726b117e48cda8bce2349405f006a84cdd3dcfba12efc990df25970a27b6d81526020017f30364cd4f8a293b1a04f0153548d3e01baad091c69097ca4e9f26be63e4095b58152508152508160600181905250600567ffffffffffffffff81111561085857610857611329565b5b60405190808252806020026020018201604052801561089157816020015b61087e6111f5565b8152602001906001900390816108765790505b50816080018190525060405180604001604052807f2c097b31a897227a6f64c9fc31d9a8fc421b0d8b8207f92532b464e431e61db881526020017f0fcf6d89d77d5123a43dfb23efb9c929c28c148ca82c794057864b8e66903c5481525081608001516000815181106109075761090661165b565b5b602002602001018190525060405180604001604052807f0186dae5999acfe2cda6fa7a157ae726afda7c6f57b00ea0aa6c2c23bf83838881526020017f2f078608f710c45b60d23716c58e106d8c7a1c6db28119defffc413e074f8716815250816080015160018151811061097f5761097e61165b565b5b602002602001018190525060405180604001604052807f2464c1784bda2cbfb51e5ab87cf7eb2764ad81f7038152bdbbb07d404b49aa3781526020017f0638b273e4ee33e03e42ca6c7de1ea7043dbdcaa48661864de644d91c6b4821f81525081608001516002815181106109f7576109f661165b565b5b602002602001018190525060405180604001604052807f098ce8b5289ef791db34b68b9e0043ab7bf25306d83a9f0ce74396b8a69c57bb81526020017f1ec6f7a81748f3d2c2b87610d747ca72045ac1530e226f00710630d41aad7e268152508160800151600381518110610a6f57610a6e61165b565b5b602002602001018190525060405180604001604052807f07dbf682cc528d3ff763fa576d05db50e023921728119ef66f880b6adae01cbe81526020017f0d287dcd9318207576eaa871e7b3308f613d9df7865059cdbc9f66fdef342dc68152508160800151600481518110610ae757610ae661165b565b5b602002602001018190525090565b610afd6111f5565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210610b56576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5e61127c565b836000015181600060038110610b7757610b7661165b565b5b602002018181525050836020015181600160038110610b9957610b9861165b565b5b6020020181815250508281600260038110610bb757610bb661165b565b5b602002018181525050600060608360808460076107d05a03fa905080610c09576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505092915050565b610c196111f5565b610c2161129e565b836000015181600060048110610c3a57610c3961165b565b5b602002018181525050836020015181600160048110610c5c57610c5b61165b565b5b602002018181525050826000015181600260048110610c7e57610c7d61165b565b5b602002018181525050826020015181600360048110610ca057610c9f61165b565b5b602002018181525050600060608360c08460066107d05a03fa905080610cf2576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505092915050565b610d026111f5565b60008260000151148015610d1a575060008260200151145b15610d3d5760405180604001604052806000815260200160008152509050610e16565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260000151101580610d9457507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47826020015110155b15610dcb576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360000151815260200183602001517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610e10919061170f565b81525090505b919050565b8051825114610e56576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000825190506000600682610e6b9190611743565b905060008167ffffffffffffffff811115610e8957610e88611329565b5b604051908082528060200260200182016040528015610eb75781602001602082028036833780820191505090505b50905060005b8381101561113c57858181518110610ed857610ed761165b565b5b602002602001015160000151826000600684610ef49190611743565b610efe91906116b9565b81518110610f0f57610f0e61165b565b5b602002602001018181525050858181518110610f2e57610f2d61165b565b5b602002602001015160200151826001600684610f4a9190611743565b610f5491906116b9565b81518110610f6557610f6461165b565b5b602002602001018181525050848181518110610f8457610f8361165b565b5b602002602001015160000151600060028110610fa357610fa261165b565b5b6020020151826002600684610fb89190611743565b610fc291906116b9565b81518110610fd357610fd261165b565b5b602002602001018181525050848181518110610ff257610ff161165b565b5b6020026020010151600001516001600281106110115761101061165b565b5b60200201518260036006846110269190611743565b61103091906116b9565b815181106110415761104061165b565b5b6020026020010181815250508481815181106110605761105f61165b565b5b60200260200101516020015160006002811061107f5761107e61165b565b5b60200201518260046006846110949190611743565b61109e91906116b9565b815181106110af576110ae61165b565b5b6020026020010181815250508481815181106110ce576110cd61165b565b5b6020026020010151602001516001600281106110ed576110ec61165b565b5b60200201518260056006846111029190611743565b61110c91906116b9565b8151811061111d5761111c61165b565b5b60200260200101818152505080806111349061179d565b915050610ebd565b506111456112c0565b6000602082602086026020860160086107d05a03fa9050801580611182575060018260006001811061117a5761117961165b565b5b602002015114155b156111b9576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b60405180606001604052806111d56111f5565b81526020016111e261120f565b81526020016111ef6111f5565b81525090565b604051806040016040528060008152602001600081525090565b60405180604001604052806112226112e2565b815260200161122f6112e2565b81525090565b6040518060a001604052806112486111f5565b815260200161125561120f565b815260200161126261120f565b815260200161126f61120f565b8152602001606081525090565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060200160405280600190602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61136182611318565b810181811067ffffffffffffffff821117156113805761137f611329565b5b80604052505050565b6000611393611304565b905061139f8282611358565b919050565b600067ffffffffffffffff8211156113bf576113be611329565b5b602082029050919050565b600080fd5b6000819050919050565b6113e2816113cf565b81146113ed57600080fd5b50565b6000813590506113ff816113d9565b92915050565b6000611418611413846113a4565b611389565b90508060208402830185811115611432576114316113ca565b5b835b8181101561145b578061144788826113f0565b845260208401935050602081019050611434565b5050509392505050565b600082601f83011261147a57611479611313565b5b6002611487848285611405565b91505092915050565b600067ffffffffffffffff8211156114ab576114aa611329565b5b602082029050919050565b60006114c96114c484611490565b611389565b905080604084028301858111156114e3576114e26113ca565b5b835b8181101561150c57806114f88882611465565b8452602084019350506040810190506114e5565b5050509392505050565b600082601f83011261152b5761152a611313565b5b60026115388482856114b6565b91505092915050565b600067ffffffffffffffff82111561155c5761155b611329565b5b602082029050919050565b600061157a61157584611541565b611389565b90508060208402830185811115611594576115936113ca565b5b835b818110156115bd57806115a988826113f0565b845260208401935050602081019050611596565b5050509392505050565b600082601f8301126115dc576115db611313565b5b60046115e9848285611567565b91505092915050565b600080600080610180858703121561160d5761160c61130e565b5b600061161b87828801611465565b945050604061162c87828801611516565b93505060c061163d87828801611465565b92505061010061164f878288016115c7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116c4826113cf565b91506116cf836113cf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156117045761170361168a565b5b828201905092915050565b600061171a826113cf565b9150611725836113cf565b9250828210156117385761173761168a565b5b828203905092915050565b600061174e826113cf565b9150611759836113cf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117925761179161168a565b5b828202905092915050565b60006117a8826113cf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117da576117d961168a565b5b60018201905091905056fea26469706673582212207f72fd21a4aa7285e9ba2ff12e6fe66a3619273d0c1202c286ee8dc61a48793664736f6c634300080f0033",
"devdoc": {
"kind": "dev",
"methods": {
"verifyProof(uint256[2],uint256[2][2],uint256[2],uint256[4])": {
"details": "Verifies a Semaphore proof. Reverts with InvalidProof if the proof is invalid."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
},
"storageLayout": {
"storage": [],
"types": null
}
}