From e489e44cc436f8d92449fc8fff2f76a68d193bad Mon Sep 17 00:00:00 2001 From: auralshin Date: Wed, 20 Dec 2023 21:55:34 +0530 Subject: [PATCH] changed name --- .../contracts/AdrasteiaZkPayment.sol | 2 +- .../payment-link/contracts/xxxVerifier.sol | 208 ------------------ .../payment-link/test/AdrasteiaZkPayment.ts | 4 +- 3 files changed, 3 insertions(+), 211 deletions(-) delete mode 100644 packages/payment-link/contracts/xxxVerifier.sol diff --git a/packages/payment-link/contracts/AdrasteiaZkPayment.sol b/packages/payment-link/contracts/AdrasteiaZkPayment.sol index c7b877d..f76037c 100644 --- a/packages/payment-link/contracts/AdrasteiaZkPayment.sol +++ b/packages/payment-link/contracts/AdrasteiaZkPayment.sol @@ -83,7 +83,7 @@ contract AdrasteiaZkPayment is * @param paymentId The ID of the payment to send. * @param proof zk-SNARK proof to be verified. */ - function sendPayment( + function claimPayment( uint256 paymentId, uint256[] memory proof ) external nonReentrant whenNotPaused { diff --git a/packages/payment-link/contracts/xxxVerifier.sol b/packages/payment-link/contracts/xxxVerifier.sol deleted file mode 100644 index da2951a..0000000 --- a/packages/payment-link/contracts/xxxVerifier.sol +++ /dev/null @@ -1,208 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -/* - Copyright 2021 0KIMS association. - - This file is generated with [snarkJS](https://github.com/iden3/snarkjs). - - snarkJS is a free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - snarkJS is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with snarkJS. If not, see . -*/ - -pragma solidity >=0.7.0 <0.9.0; - -contract Groth16Verifier { - // Scalar field size - uint256 constant r = - 21888242871839275222246405745257275088548364400416034343698204186575808495617; - // Base field size - uint256 constant q = - 21888242871839275222246405745257275088696311157297823662689037894645226208583; - - // Verification Key data - uint256 constant alphax = - 13107290380154181775932389224182069578958704359609208285388840391968280295342; - uint256 constant alphay = - 9484483495940647349518892948807864800711049141935764397474173560076127534058; - uint256 constant betax1 = - 17123502368440839454625522146137454055150539394075688578872143959930050386987; - uint256 constant betax2 = - 18683692064844742623262377297864378715127115541674987712091450834209838587952; - uint256 constant betay1 = - 8203736733343170051142780987840908556319288444398332760019178388216785733972; - uint256 constant betay2 = - 15952264932889423452920300095322868224910774455523175368601827269719664711223; - uint256 constant gammax1 = - 11559732032986387107991004021392285783925812861821192530917403151452391805634; - uint256 constant gammax2 = - 10857046999023057135944570762232829481370756359578518086990519993285655852781; - uint256 constant gammay1 = - 4082367875863433681332203403145435568316851327593401208105741076214120093531; - uint256 constant gammay2 = - 8495653923123431417604973247489272438418190587263600148770280649306958101930; - uint256 constant deltax1 = - 5167487581831034256820456571508248506092052194863166756380949583195475414709; - uint256 constant deltax2 = - 2699678693452768588060345545776436745981057571381284345494159235915521467840; - uint256 constant deltay1 = - 4509936585434281573968870884284761348119413084916050841570544537303872716142; - uint256 constant deltay2 = - 11813057670459563023394783075264216202411868301165553729311205547642315153916; - - uint256 constant IC0x = - 14148887804327275129786572318768332468680753287519511645794326635805971339579; - uint256 constant IC0y = - 15511514365727074811496047865635345240711024085094665661132886447198668288089; - - uint256 constant IC1x = - 13649019881328025093027973410430708472013825939627030975143659310153460467030; - uint256 constant IC1y = - 10596969315078644054214265022059688949122567509024213600113608854014041289281; - - uint256 constant IC2x = - 14672977594699472708790204060233245870494507038879427730541374673782184558479; - uint256 constant IC2y = - 11380443747385973849203136333087437771378629730517916388332119049051900916185; - - // Memory data - uint16 constant pVk = 0; - uint16 constant pPairing = 128; - - uint16 constant pLastMem = 896; - - function verifyProof( - uint[2] memory _pA, - uint[2][2] memory _pB, - uint[2] memory _pC, - uint[2] memory _pubSignals - ) public view returns (bool) { - assembly { - function checkField(v) { - if iszero(lt(v, q)) { - mstore(0, 0) - return(0, 0x20) - } - } - - // G1 function to multiply a G1 value(x,y) to value in an address - function g1_mulAccC(pR, x, y, s) { - let success - let mIn := mload(0x40) - mstore(mIn, x) - mstore(add(mIn, 32), y) - mstore(add(mIn, 64), s) - - success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64) - - if iszero(success) { - mstore(0, 0) - return(0, 0x20) - } - - mstore(add(mIn, 64), mload(pR)) - mstore(add(mIn, 96), mload(add(pR, 32))) - - success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) - - if iszero(success) { - mstore(0, 0) - return(0, 0x20) - } - } - - function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk { - let _pPairing := add(pMem, pPairing) - let _pVk := add(pMem, pVk) - - mstore(_pVk, IC0x) - mstore(add(_pVk, 32), IC0y) - - // Compute the linear combination vk_x - - g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0))) - - g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32))) - - // -A - mstore(_pPairing, calldataload(pA)) - mstore( - add(_pPairing, 32), - mod(sub(q, calldataload(add(pA, 32))), q) - ) - - // B - mstore(add(_pPairing, 64), calldataload(pB)) - mstore(add(_pPairing, 96), calldataload(add(pB, 32))) - mstore(add(_pPairing, 128), calldataload(add(pB, 64))) - mstore(add(_pPairing, 160), calldataload(add(pB, 96))) - - // alpha1 - mstore(add(_pPairing, 192), alphax) - mstore(add(_pPairing, 224), alphay) - - // beta2 - mstore(add(_pPairing, 256), betax1) - mstore(add(_pPairing, 288), betax2) - mstore(add(_pPairing, 320), betay1) - mstore(add(_pPairing, 352), betay2) - - // vk_x - mstore(add(_pPairing, 384), mload(add(pMem, pVk))) - mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32)))) - - // gamma2 - mstore(add(_pPairing, 448), gammax1) - mstore(add(_pPairing, 480), gammax2) - mstore(add(_pPairing, 512), gammay1) - mstore(add(_pPairing, 544), gammay2) - - // C - mstore(add(_pPairing, 576), calldataload(pC)) - mstore(add(_pPairing, 608), calldataload(add(pC, 32))) - - // delta2 - mstore(add(_pPairing, 640), deltax1) - mstore(add(_pPairing, 672), deltax2) - mstore(add(_pPairing, 704), deltay1) - mstore(add(_pPairing, 736), deltay2) - - let success := staticcall( - sub(gas(), 2000), - 8, - _pPairing, - 768, - _pPairing, - 0x20 - ) - - isOk := and(success, mload(_pPairing)) - } - - let pMem := mload(0x40) - mstore(0x40, add(pMem, pLastMem)) - - // Validate that all evaluations ∈ F - - checkField(calldataload(add(_pubSignals, 0))) - - checkField(calldataload(add(_pubSignals, 32))) - - checkField(calldataload(add(_pubSignals, 64))) - - // Validate all evaluations - let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem) - - mstore(0, isValid) - return(0, 0x20) - } - } -} diff --git a/packages/payment-link/test/AdrasteiaZkPayment.ts b/packages/payment-link/test/AdrasteiaZkPayment.ts index e06e472..81e1e55 100644 --- a/packages/payment-link/test/AdrasteiaZkPayment.ts +++ b/packages/payment-link/test/AdrasteiaZkPayment.ts @@ -102,7 +102,7 @@ describe("AdrasteiaZkPayment", () => { }); }); - describe("sendPayment", () => { + describe("claimPayment", () => { let zkProof: string[]; beforeEach(async () => { const passcode = await passcodeHash( @@ -131,7 +131,7 @@ describe("AdrasteiaZkPayment", () => { console.log("zkProof", zkProof.length); await expect( - adrasteiaZkPayment.connect(accounts[1]).sendPayment(1, zkProof) + adrasteiaZkPayment.connect(accounts[1]).claimPayment(1, zkProof) ) .to.emit(adrasteiaZkPayment, "PaymentSent") .withArgs(1);