Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make proofs witnessable #1770

Draft
wants to merge 26 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
43f5a99
feat(witness-proof.ts): add new ZkProgram example with witness proof …
ymekuria May 20, 2024
40e9d85
feat(zkprogram): add a new ZkProgram example file witness-proof-2.ts …
ymekuria May 20, 2024
7c16959
feat(witness-proof.ts): update witness-proof example
ymekuria May 30, 2024
078d768
feat(zkprogram.ts): import statement for Unconstrained
ymekuria May 30, 2024
ae2238b
feat(zkprogram.ts): import ProvableExtended
ymekuria May 30, 2024
d00b47f
refactor(zkprogram.ts): import contexts
ymekuria May 30, 2024
b7a8e54
feat(zkprogram.ts): export sublcass internal api
ymekuria May 31, 2024
550fd3b
feat(provable-context.ts): import Proof Subclass and Bool
ymekuria May 31, 2024
7d0eab9
feat(provable-context.ts): add proof context
ymekuria Jun 1, 2024
b7b2a51
feat(provable-context.ts): add circuit context type
ymekuria Jun 1, 2024
d0ec20c
feat(provable-context.ts): add circuit context
ymekuria Jun 1, 2024
5a7510c
feat(provable-context.ts): export proof and circuit contexts
ymekuria Jun 1, 2024
c23dea9
feat(zkprogram.ts): update proof proberty type in ProofBase to Uncon…
ymekuria Jun 1, 2024
4230023
feat(zkprogram.ts): make proofs provable
ymekuria Jun 1, 2024
d3b3c78
feat(zkprograms.ts): import proof and circuit contexts
ymekuria Jun 3, 2024
157d142
feat(zkprogram.ts): add declare method to add dependencies to global …
ymekuria Jun 3, 2024
3fb9559
feat(zkprogram.ts): add witness method to zkprogram proof
ymekuria Jun 3, 2024
988f436
feat(zkprogram.ts): add witnessed proofs to compile function
ymekuria Jun 3, 2024
b3a616a
feat(zkprogram.ts): add witnessed proofs to getPreviousProofsForProve…
ymekuria Jun 3, 2024
4155498
feat(zkprogram.ts): add witnessed proofs to compileProgram function
ymekuria Jun 3, 2024
bbed514
feat(zkprogram.ts): update picklesRuleFromFunction
ymekuria Jun 3, 2024
08f96d0
feat(zkprogram.ts): update witnessed proof type
ymekuria Jun 3, 2024
7d1b5ba
feat(zkprogram.ts): update pickles rule function
ymekuria Jun 3, 2024
f92bbe4
feat(zkprogram.ts): update declare
ymekuria Jun 3, 2024
5e6b426
feat(zkprogram.ts): update witnessedProofs type
ymekuria Jun 3, 2024
4acdff0
feat(zkapp.ts): add witnessedProofs argument to getPreviousProofsForP…
ymekuria Jun 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions src/examples/zkprogram/witness-proof-2.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import {
SelfProof,
Field,
ZkProgram,
verify,
isReady,
Proof,
JsonProof,
Provable,
Empty,
} from 'o1js';

await isReady;

let MyProgram = ZkProgram({
name: 'example-with-output',
publicOutput: Field,

methods: {
baseCase: {
privateInputs: [],
method() {
return Field(0);
},
},
},
});

class ProgramProof extends ZkProgram.Proof(MyProgram) {}

await MyProgram.compile();

let proof = await MyProgram.baseCase();

let MyProgram2 = ZkProgram({
name: 'example-with-output2',

methods: {
baseCase: {
privateInputs: [ProgramProof],
method(p: ProgramProof) {
p.verify();

// should say 0 and fail verification
Provable.log(proof.publicOutput);
},
},
},
});
console.log('GOING INTO SECOND ZKPROGRAM');
await MyProgram2.compile();
console.log('PROVING');

await MyProgram2.baseCase(proof);
58 changes: 58 additions & 0 deletions src/examples/zkprogram/witness-proof.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import {
SelfProof,
Field,
ZkProgram,
verify,
isReady,
Proof,
JsonProof,
Provable,
Empty,
} from 'o1js';

await isReady;

let MyProgram = ZkProgram({
name: 'example-with-output',
publicOutput: Field,

methods: {
baseCase: {
privateInputs: [],
method() {
return Field(0);
},
},
},
});

class ProgramProof extends ZkProgram.Proof(MyProgram) {}

await MyProgram.compile();

let proof = await MyProgram.baseCase();

let MyProgram2 = ZkProgram({
name: 'example-with-output2',

methods: {
baseCase: {
privateInputs: [],
method() {
let p = Provable.witness(ProgramProof.provable, () => {
proof.publicOutput = Field(5);
return proof;
});

ProgramProof.declare(p);
p.verify();
// should say 0 and fail verification
Provable.log(proof.publicOutput);
},
},
},
});
console.log('GOING INTO SECOND ZKPROGRAM');
await MyProgram2.compile();
console.log('PROVING');
await MyProgram2.baseCase();
6 changes: 4 additions & 2 deletions src/lib/mina/zkapp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,8 @@ function wrapMethod(
// proofs actually don't have to be cloned
previousProofs: getPreviousProofsForProver(
actualArgs,
methodIntf
methodIntf,
[]
),
ZkappClass,
memoized,
Expand Down Expand Up @@ -434,7 +435,8 @@ function wrapMethod(
args: constantArgs,
previousProofs: getPreviousProofsForProver(
constantArgs,
methodIntf
methodIntf,
[]
),
ZkappClass,
memoized,
Expand Down
Loading