@antefinance/ante-sdk
Version:
Library for interacting with Ante smart contracts
58 lines (52 loc) • 1.42 kB
text/typescript
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,
};