@antefinance/ante-sdk
Version:
Library for interacting with Ante smart contracts
28 lines (27 loc) • 1.25 kB
JavaScript
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,
};