UNPKG

o1js

Version:

TypeScript framework for zk-SNARKs and zkApps

52 lines (39 loc) 1.73 kB
import { expect } from 'expect'; import { Provable } from '../provable/provable.js'; import { Field } from '../provable/wrapped.js'; import { Proof } from './proof.js'; import { Void } from './zkprogram.js'; import test from 'node:test'; test('Proof provable', async () => { class MyProof extends Proof<Field, Void> { static publicInputType = Field; static publicOutputType = Void; } expect(MyProof.provable.sizeInFields()).toEqual(1); // can't call this before bindings are initialized expect(() => MyProof._proofFromBase64('', 0)).toThrow('Bindings are not initialized'); let proof = await MyProof.dummy(Field(1n), undefined, 0); // now bindings are initialized and we can call this let proofBase64 = MyProof._proofToBase64(proof.proof, 0); let proofRecovered = MyProof._proofFromBase64(proofBase64, 0); let proofBase64_2 = MyProof._proofToBase64(proofRecovered, 0); expect(proofBase64).toEqual(proofBase64_2); expect(MyProof.provable.toFields(proof)).toEqual([Field(1n)]); expect(MyProof.provable.toAuxiliary(proof)).toEqual([[], [], [proof.proof, 0]]); async function circuit() { let publicInput = Provable.witness(Field, () => 5n); let proof = await Provable.witnessAsync(MyProof, () => { return MyProof.dummy(publicInput, undefined, 0); }); expect(proof).toBeInstanceOf(MyProof); expect(proof.publicOutput).toBeUndefined(); expect(proof.maxProofsVerified).toEqual(0); Provable.asProver(() => { expect(proof.publicInput.toBigInt()).toEqual(5n); let value = MyProof.provable.toValue(proof); expect(value.publicInput).toEqual(5n); expect(value.proof).toBe(proof.proof); }); } await Provable.runAndCheck(circuit); });