UNPKG

@antefinance/ante-sdk

Version:

Library for interacting with Ante smart contracts

28 lines (27 loc) 1.25 kB
import { uuidToBigInt } from '@pcd/util'; import { abiEncodeProof, generateWitness, pcdFromSerializedPcdString, verifyWitnessSignature, verifyZupassProof, } from '../utils/zupass'; import { encodeAbiParameters, getAddress } from 'viem'; const buildConfiguration = (manager, events) => { const uintEvents = events.map(uuidToBigInt); return encodeAbiParameters([{ type: 'address' }, { type: 'bytes' }], [ getAddress(manager), encodeAbiParameters([{ type: 'uint256[]' }], [uintEvents]), ]); }; const getProof = async (events, proofInput) => { const { serializedPCDStr, watermark, externalNullifier } = proofInput; const pcd = await pcdFromSerializedPcdString(serializedPCDStr); const proofVerification = await verifyZupassProof(pcd, BigInt(watermark), externalNullifier, events); if (!proofVerification) { return Promise.reject(new Error('Proof verification failed, invalid proof input')); } const witness = generateWitness(pcd); if (!(await verifyWitnessSignature(witness))) { return Promise.reject(new Error('Proof verification failed, invalid witness signature')); } return abiEncodeProof(witness); }; export const ZupassGate = { buildConfiguration, getProof, };