UNPKG

@antefinance/ante-sdk

Version:

Library for interacting with Ante smart contracts

58 lines (52 loc) 1.42 kB
import { uuidToBigInt } from '@pcd/util'; import { GenerateZupassProofInput, abiEncodeProof, generateWitness, pcdFromSerializedPcdString, verifyWitnessSignature, verifyZupassProof, } from '@utils/zupass'; import { encodeAbiParameters, getAddress } from 'viem'; const buildConfiguration = ( manager: `0x${string}`, events: string[] ): `0x${string}` => { const uintEvents = events.map(uuidToBigInt); return encodeAbiParameters( [{ type: 'address' }, { type: 'bytes' }], [ getAddress(manager), encodeAbiParameters([{ type: 'uint256[]' }], [uintEvents]), ] ); }; const getProof = async ( events: string[], proofInput: GenerateZupassProofInput ): Promise<`0x${string}`> => { 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, };