Skip to content

Commit f452808

Browse files
committed
bindings: remove types conversions for proof
1 parent 53fef4f commit f452808

File tree

1 file changed

+6
-188
lines changed

1 file changed

+6
-188
lines changed
Lines changed: 6 additions & 188 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,29 @@
11
import type {
2-
WasmPastaFpLookupTable,
32
WasmFpRuntimeTable,
43
WasmPastaFpRuntimeTableCfg,
5-
WasmPastaFqLookupTable,
4+
WasmPastaFpLookupTable,
65
WasmFqRuntimeTable,
76
WasmPastaFqRuntimeTableCfg,
7+
WasmPastaFqLookupTable,
88
WasmVecVecFp,
99
WasmVecVecFq,
10-
WasmFpProverCommitments,
11-
WasmFqProverCommitments,
12-
WasmFpOpeningProof,
13-
WasmFqOpeningProof,
14-
WasmFpProverProof,
15-
WasmFqProverProof,
16-
WasmFpLookupCommitments,
17-
WasmFqLookupCommitments,
1810
} from '../compiled/node_bindings/plonk_wasm.cjs';
1911
import type * as napiNamespace from '../compiled/node_bindings/plonk_wasm.cjs';
20-
import type {
21-
RuntimeTable,
22-
RuntimeTableCfg,
23-
LookupTable,
24-
ProofWithPublic,
25-
ProverProof,
26-
LookupCommitments,
27-
PolyComm, PointEvaluations, ProofEvaluations,
28-
RecursionChallenge,
29-
ProverCommitments,
30-
OpeningProof,
31-
OrInfinity,
32-
} from './bindings/kimchi-types.js';
33-
import { MlArray, MlTuple, MlOption} from '../../lib/ml/base.js';
34-
import {
35-
fieldsToRustFlat,
36-
fieldToRust,
37-
fieldsFromRustFlat,
38-
fieldFromRust,
39-
} from './bindings/conversion-base.js';
12+
import type { RuntimeTable, RuntimeTableCfg, LookupTable } from './bindings/kimchi-types.js';
13+
import { MlArray } from '../../lib/ml/base.js';
14+
import { fieldsToRustFlat } from './bindings/conversion-base.js';
4015
import { ConversionCore, ConversionCores } from './napi-conversion-core.js';
4116

4217
export { napiProofConversion };
43-
44-
type NapiProofEvaluations = [
45-
0,
46-
MlOption<PointEvaluations<Uint8Array>>,
47-
...RemoveLeadingZero<ProofEvaluations<Uint8Array>>,
48-
];
4918

5019
type napi = typeof napiNamespace;
5120

52-
type NapiProverCommitments = WasmFpProverCommitments | WasmFqProverCommitments;
53-
type NapiOpeningProof = WasmFpOpeningProof | WasmFqOpeningProof;
54-
type NapiProverProof = WasmFpProverProof | WasmFqProverProof;
55-
type NapiLookupCommitments = WasmFpLookupCommitments | WasmFqLookupCommitments;
5621
type NapiRuntimeTable = WasmFpRuntimeTable | WasmFqRuntimeTable;
5722
type NapiRuntimeTableCfg = WasmPastaFpRuntimeTableCfg | WasmPastaFqRuntimeTableCfg;
5823
type NapiLookupTable = WasmPastaFpLookupTable | WasmPastaFqLookupTable;
5924

6025
type NapiClasses = {
61-
ProverCommitments: typeof WasmFpProverCommitments | typeof WasmFqProverCommitments;
62-
OpeningProof: typeof WasmFpOpeningProof | typeof WasmFqOpeningProof;
6326
VecVec: typeof WasmVecVecFp | typeof WasmVecVecFq;
64-
ProverProof: typeof WasmFpProverProof | typeof WasmFqProverProof;
65-
LookupCommitments: typeof WasmFpLookupCommitments | typeof WasmFqLookupCommitments;
6627
RuntimeTable: typeof WasmFpRuntimeTable | typeof WasmFqRuntimeTable;
6728
RuntimeTableCfg: typeof WasmPastaFpRuntimeTableCfg | typeof WasmPastaFqRuntimeTableCfg;
6829
LookupTable: typeof WasmPastaFpLookupTable | typeof WasmPastaFqLookupTable;
@@ -71,21 +32,13 @@ type NapiClasses = {
7132
function napiProofConversion(napi: napi, core: ConversionCores) {
7233
return {
7334
fp: proofConversionPerField(core.fp, {
74-
ProverCommitments: napi.WasmFpProverCommitments,
75-
OpeningProof: napi.WasmFpOpeningProof,
7635
VecVec: napi.WasmVecVecFp,
77-
ProverProof: napi.WasmFpProverProof,
78-
LookupCommitments: napi.WasmFpLookupCommitments,
7936
RuntimeTable: napi.WasmFpRuntimeTable,
8037
RuntimeTableCfg: napi.WasmPastaFpRuntimeTableCfg,
8138
LookupTable: napi.WasmPastaFpLookupTable,
8239
}),
8340
fq: proofConversionPerField(core.fq, {
84-
ProverCommitments: napi.WasmFqProverCommitments,
85-
OpeningProof: napi.WasmFqOpeningProof,
8641
VecVec: napi.WasmVecVecFq,
87-
ProverProof: napi.WasmFqProverProof,
88-
LookupCommitments: napi.WasmFqLookupCommitments,
8942
RuntimeTable: napi.WasmFqRuntimeTable,
9043
RuntimeTableCfg: napi.WasmPastaFqRuntimeTableCfg,
9144
LookupTable: napi.WasmPastaFqLookupTable,
@@ -95,79 +48,8 @@ function napiProofConversion(napi: napi, core: ConversionCores) {
9548

9649
function proofConversionPerField(
9750
core: ConversionCore,
98-
{
99-
ProverCommitments,
100-
OpeningProof,
101-
VecVec,
102-
ProverProof,
103-
LookupCommitments,
104-
RuntimeTable,
105-
RuntimeTableCfg,
106-
LookupTable,
107-
}: NapiClasses
51+
{ VecVec, RuntimeTable, RuntimeTableCfg, LookupTable }: NapiClasses
10852
) {
109-
function commitmentsToRust(commitments: ProverCommitments): NapiProverCommitments {
110-
let wComm = core.polyCommsToRust(commitments[1]);
111-
let zComm = core.polyCommToRust(commitments[2]);
112-
let tComm = core.polyCommToRust(commitments[3]);
113-
let lookup = MlOption.mapFrom(commitments[4], lookupCommitmentsToRust);
114-
return new ProverCommitments(wComm, zComm, tComm, lookup);
115-
}
116-
function commitmentsFromRust(commitments: NapiProverCommitments): ProverCommitments {
117-
let wComm = core.polyCommsFromRust(commitments.w_comm);
118-
let zComm = core.polyCommFromRust(commitments.z_comm);
119-
let tComm = core.polyCommFromRust(commitments.t_comm);
120-
let lookup = MlOption.mapTo(commitments.lookup, lookupCommitmentsFromRust);
121-
commitments.free();
122-
return [0, wComm as MlTuple<PolyComm, 15>, zComm, tComm, lookup];
123-
}
124-
125-
function lookupCommitmentsToRust(lookup: LookupCommitments): NapiLookupCommitments {
126-
let sorted = core.polyCommsToRust(lookup[1]);
127-
let aggreg = core.polyCommToRust(lookup[2]);
128-
let runtime = MlOption.mapFrom(lookup[3], core.polyCommToRust);
129-
return new LookupCommitments(sorted, aggreg, runtime);
130-
}
131-
function lookupCommitmentsFromRust(lookup: NapiLookupCommitments): LookupCommitments {
132-
let sorted = core.polyCommsFromRust(lookup.sorted);
133-
let aggreg = core.polyCommFromRust(lookup.aggreg);
134-
let runtime = MlOption.mapTo(lookup.runtime, core.polyCommFromRust);
135-
lookup.free();
136-
return [0, sorted, aggreg, runtime];
137-
}
138-
139-
function openingProofToRust(proof: OpeningProof): NapiOpeningProof {
140-
let [_, [, ...lr], delta, z1, z2, sg] = proof;
141-
// We pass l and r as separate vectors over the FFI
142-
let l: MlArray<OrInfinity> = [0];
143-
let r: MlArray<OrInfinity> = [0];
144-
for (let [, li, ri] of lr) {
145-
l.push(li);
146-
r.push(ri);
147-
}
148-
return new OpeningProof(
149-
core.pointsToRust(l),
150-
core.pointsToRust(r),
151-
core.pointToRust(delta),
152-
fieldToRust(z1),
153-
fieldToRust(z2),
154-
core.pointToRust(sg)
155-
);
156-
}
157-
function openingProofFromRust(proof: NapiOpeningProof): OpeningProof {
158-
let [, ...l] = core.pointsFromRust(proof.lr_0);
159-
let [, ...r] = core.pointsFromRust(proof.lr_1);
160-
let n = l.length;
161-
if (n !== r.length) throw Error('openingProofFromRust: l and r length mismatch.');
162-
let lr = l.map<[0, OrInfinity, OrInfinity]>((li, i) => [0, li, r[i]]);
163-
let delta = core.pointFromRust(proof.delta);
164-
let z1 = fieldFromRust(proof.z1);
165-
let z2 = fieldFromRust(proof.z2);
166-
let sg = core.pointFromRust(proof.sg);
167-
proof.free();
168-
return [0, [0, ...lr], delta, z1, z2, sg];
169-
}
170-
17153
function runtimeTableToRust([, id, data]: RuntimeTable): NapiRuntimeTable {
17254
return new RuntimeTable(id, core.vectorToRust(data));
17355
}
@@ -184,68 +66,8 @@ function proofConversionPerField(
18466
}
18567
return new LookupTable(id, wasmData);
18668
}
187-
188-
18969

19070
return {
191-
proofToRust([, public_evals, proof]: ProofWithPublic): NapiProverProof {
192-
let commitments = commitmentsToRust(proof[1]);
193-
let openingProof = openingProofToRust(proof[2]);
194-
let [, ...evals] = proofEvaluationsToRust(proof[3]);
195-
let publicEvals = pointEvalsOptionToRust(public_evals);
196-
// TODO typed as `any` in wasm-bindgen, this has the correct type
197-
let evalsActual: NapiProofEvaluations = [0, publicEvals, ...evals];
198-
199-
let ftEval1 = fieldToRust(proof[4]);
200-
let public_ = fieldsToRustFlat(proof[5]);
201-
let [, ...prevChallenges] = proof[6];
202-
let n = prevChallenges.length;
203-
let prevChallengeScalars = new VecVec(n);
204-
let prevChallengeCommsMl: MlArray<PolyComm> = [0];
205-
for (let [, scalars, comms] of prevChallenges) {
206-
prevChallengeScalars.push(fieldsToRustFlat(scalars));
207-
prevChallengeCommsMl.push(comms);
208-
}
209-
let prevChallengeComms = core.polyCommsToRust(prevChallengeCommsMl);
210-
return new ProverProof(
211-
commitments,
212-
openingProof,
213-
evalsActual,
214-
ftEval1,
215-
public_,
216-
prevChallengeScalars,
217-
prevChallengeComms
218-
);
219-
},
220-
proofFromRust(wasmProof: NapiProverProof): ProofWithPublic {
221-
let commitments = commitmentsFromRust(wasmProof.commitments);
222-
let openingProof = openingProofFromRust(wasmProof.proof);
223-
// TODO typed as `any` in wasm-bindgen, this is the correct type
224-
let [, wasmPublicEvals, ...wasmEvals]: NapiProofEvaluations = wasmProof.evals;
225-
let publicEvals = pointEvalsOptionFromRust(wasmPublicEvals);
226-
let evals = proofEvaluationsFromRust([0, ...wasmEvals]);
227-
228-
let ftEval1 = fieldFromRust(wasmProof.ft_eval1);
229-
let public_ = fieldsFromRustFlat(wasmProof.public_);
230-
let prevChallengeScalars = wasmProof.prev_challenges_scalars;
231-
let [, ...prevChallengeComms] = core.polyCommsFromRust(wasmProof.prev_challenges_comms);
232-
let prevChallenges = prevChallengeComms.map<RecursionChallenge>((comms, i) => {
233-
let scalars = fieldsFromRustFlat(prevChallengeScalars.get(i));
234-
return [0, scalars, comms];
235-
});
236-
wasmProof.free();
237-
let proof: ProverProof = [
238-
0,
239-
commitments,
240-
openingProof,
241-
evals,
242-
ftEval1,
243-
public_,
244-
[0, ...prevChallenges],
245-
];
246-
return [0, publicEvals, proof];
247-
},
248-
24971
runtimeTablesToRust([, ...tables]: MlArray<RuntimeTable>): NapiRuntimeTable[] {
25072
return tables.map(runtimeTableToRust);
25173
},
@@ -259,7 +81,3 @@ function proofConversionPerField(
25981
},
26082
};
26183
}
262-
263-
// helper
264-
265-
type RemoveLeadingZero<T extends [0, ...any]> = T extends [0, ...infer U] ? U : never;

0 commit comments

Comments
 (0)