mirror of
https://github.com/selfxyz/self.git
synced 2026-01-23 05:28:02 -05:00
69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
import { assert } from "chai";
|
|
import { ethers } from "hardhat";
|
|
import { mockPassportData_sha256WithRSAEncryption_65537 } from "../../common/src/utils/mockPassportData";
|
|
import { groth16 } from 'snarkjs'
|
|
import { revealBitmapFromMapping } from "../../common/src/utils/revealBitmap";
|
|
import { generateCircuitInputs } from "../../common/src/utils/generateInputs";
|
|
import fs from 'fs';
|
|
|
|
async function main() {
|
|
const proofOfPassportAddress = "0xF3F619aB057E3978204Be68549f9D4a503EAa535"
|
|
const proofOfPassport = await ethers.getContractAt("ProofOfPassport", proofOfPassportAddress);
|
|
|
|
const passportData = mockPassportData_sha256WithRSAEncryption_65537;
|
|
|
|
const attributeToReveal = {
|
|
issuing_state: true,
|
|
name: true,
|
|
passport_number: true,
|
|
nationality: true,
|
|
date_of_birth: true,
|
|
gender: true,
|
|
expiry_date: true,
|
|
older_than: true,
|
|
}
|
|
|
|
const reveal_bitmap = revealBitmapFromMapping(attributeToReveal)
|
|
|
|
const address = "0xE6E4b6a802F2e0aeE5676f6010e0AF5C9CDd0a50";
|
|
|
|
const inputs = generateCircuitInputs(
|
|
passportData,
|
|
reveal_bitmap,
|
|
address,
|
|
18,
|
|
);
|
|
|
|
console.log('generating proof...');
|
|
const { proof, publicSignals } = await groth16.fullProve(
|
|
inputs,
|
|
"../circuits/build/proof_of_passport_js/proof_of_passport.wasm",
|
|
"../circuits/build/proof_of_passport_final.zkey"
|
|
)
|
|
|
|
console.log('proof done');
|
|
|
|
const vKey = JSON.parse(fs.readFileSync("../circuits/build/proof_of_passport_vkey.json") as unknown as string);
|
|
|
|
const verified = await groth16.verify(
|
|
vKey,
|
|
publicSignals,
|
|
proof
|
|
)
|
|
|
|
assert(verified == true, 'Should verifiable')
|
|
|
|
const cd = await groth16.exportSolidityCallData(proof, publicSignals);
|
|
const callData = JSON.parse(`[${cd}]`);
|
|
console.log('callData', callData);
|
|
|
|
const tx = await proofOfPassport.mint(...callData);
|
|
|
|
const receipt = await tx.wait();
|
|
console.log('receipt', receipt?.hash);
|
|
const tokenURI = await proofOfPassport.tokenURI(0);
|
|
console.log('tokenURI', tokenURI);
|
|
}
|
|
|
|
|
|
main() |