Skip to content

Commit fb1fa6d

Browse files
committed
shigoto + anais kimchi bindings changes for the first native prover poc
1 parent 68de426 commit fb1fa6d

File tree

10 files changed

+402
-109
lines changed

10 files changed

+402
-109
lines changed

src/bindings/crypto/bindings.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* It is exposed to JSOO by populating a global variable with an object.
44
* It gets imported as the first thing in ../../bindings.js so that the global variable is ready by the time JSOO code gets executed.
55
*/
6+
import type * as napiNamespace from '../compiled/node_bindings/plonk_wasm.cjs';
67
import type * as wasmNamespace from '../compiled/node_bindings/plonk_wasm.cjs';
78
import { prefixHashes, prefixHashesLegacy } from '../crypto/constants.js';
89
import { Bigint256Bindings } from './bindings/bigint256.js';
@@ -16,13 +17,13 @@ import { jsEnvironment } from './bindings/env.js';
1617
import { FpBindings, FqBindings } from './bindings/field.js';
1718
import { napiOraclesConversion } from './bindings/napi-conversion-oracles.js';
1819
import { srs } from './bindings/srs.js';
19-
import { srs as napiSrs } from './napi-srs.js';
2020
import { FpVectorBindings, FqVectorBindings } from './bindings/vector.js';
2121
import { napiConversionCore } from './napi-conversion-core.js';
2222
import { napiProofConversion } from './napi-conversion-proof.js';
23-
import type * as napiNamespace from '../compiled/node_bindings/plonk_wasm.cjs';
23+
import { napiVerifierIndexConversion } from './napi-conversion-verifier-index.js';
24+
import { srs as napiSrs } from './napi-srs.js';
2425

25-
export { RustConversion, Wasm, Napi, createNativeRustConversion, getRustConversion };
26+
export { Napi, RustConversion, Wasm, createNativeRustConversion, getRustConversion };
2627

2728
/* TODO: Uncomment in phase 2 of conversion layer
2829
import { conversionCore as conversionCoreNative } from './native/conversion-core.js';
@@ -90,10 +91,11 @@ function buildWasmConversion(wasm: Wasm) {
9091
function createNativeRustConversion(napi: any) {
9192
let core = napiConversionCore(napi);
9293
let proof = napiProofConversion(napi, core);
94+
let verif = napiVerifierIndexConversion(napi, core);
9395
let oracles = napiOraclesConversion(napi);
9496
return {
95-
fp: { ...core.fp, ...proof.fp, ...oracles.fp },
96-
fq: { ...core.fq, ...proof.fq, ...oracles.fq },
97+
fp: { ...core.fp, ...proof.fp, ...verif.fp, ...oracles.fp },
98+
fq: { ...core.fq, ...proof.fq, ...verif.fq, ...oracles.fq },
9799
};
98100
}
99101

src/bindings/crypto/bindings/conversion-base.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
import { Field } from './field.js';
2-
import { bigintToBytes32, bytesToBigint32 } from '../bigint-helpers.js';
1+
import type { MlArray } from '../../../lib/ml/base.js';
32
import type {
43
WasmGPallas,
54
WasmGVesta,
65
WasmPallasGProjective,
76
WasmVestaGProjective,
87
} from '../../compiled/node_bindings/plonk_wasm.cjs';
9-
import type { MlArray } from '../../../lib/ml/base.js';
10-
import { OrInfinity, Infinity } from './curve.js';
8+
import { bigintToBytes32, bytesToBigint32 } from '../bigint-helpers.js';
9+
import { Infinity, OrInfinity } from './curve.js';
10+
import { Field } from './field.js';
1111

1212
export {
13-
fieldToRust,
13+
WasmAffine,
14+
WasmProjective,
15+
affineFromRust,
16+
affineToRust,
1417
fieldFromRust,
15-
fieldsToRustFlat,
18+
fieldToRust,
1619
fieldsFromRustFlat,
20+
fieldsToRustFlat,
1721
maybeFieldToRust,
18-
affineToRust,
19-
affineFromRust,
20-
WasmAffine,
21-
WasmProjective,
2222
};
2323

2424
// TODO: Hardcoding this is a little brittle

src/bindings/crypto/bindings/conversion-core.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
fieldsFromRustFlat,
1616
fieldsToRustFlat,
1717
} from './conversion-base.js';
18-
import { Gate, OrInfinity, PolyComm, Wire } from './kimchi-types.js';
18+
import { Gate, OrInfinity, Wire } from './kimchi-types.js';
1919
import { mapTuple } from './util.js';
2020

2121
export {
@@ -109,26 +109,26 @@ function conversionCorePerField(
109109
return [0, ...arr];
110110
},
111111

112-
polyCommToRust(polyComm: PolyComm): WasmPolyComm {
112+
polyCommToRust(polyComm: any): WasmPolyComm {
113113
let [, camlElems] = polyComm;
114114
let rustShifted = undefined;
115115
let rustUnshifted = self.pointsToRust(camlElems);
116116
return new PolyComm(rustUnshifted, rustShifted);
117117
},
118-
polyCommFromRust(polyComm: WasmPolyComm): PolyComm {
119-
console.log('polyComm', polyComm);
118+
polyCommFromRust(polyComm: WasmPolyComm): any {
119+
console.log('polyComm old', polyComm);
120120
let rustUnshifted = polyComm.unshifted;
121-
console.log('polyCommFromRust', rustUnshifted);
121+
console.log('rustUnshifted', rustUnshifted);
122122
let mlUnshifted = mapFromUintArray(rustUnshifted, (ptr) => {
123123
return affineFromRust(wrap(ptr, CommitmentCurve));
124124
});
125125
return [0, [0, ...mlUnshifted]];
126126
},
127127

128-
polyCommsToRust([, ...comms]: MlArray<PolyComm>): Uint32Array {
128+
polyCommsToRust([, ...comms]: MlArray<any>): Uint32Array {
129129
return mapToUint32Array(comms, (c) => unwrap(self.polyCommToRust(c)));
130130
},
131-
polyCommsFromRust(rustComms: Uint32Array): MlArray<PolyComm> {
131+
polyCommsFromRust(rustComms: Uint32Array): MlArray<any> {
132132
let comms = mapFromUintArray(rustComms, (ptr) => self.polyCommFromRust(wrap(ptr, PolyComm)));
133133
return [0, ...comms];
134134
},

src/bindings/crypto/bindings/conversion-proof.ts

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,46 @@
1+
import { MlArray, MlOption, MlTuple } from '../../../lib/ml/base.js';
2+
import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs';
13
import type {
24
WasmFpLookupCommitments,
3-
WasmPastaFpLookupTable,
45
WasmFpOpeningProof,
56
WasmFpProverCommitments,
67
WasmFpProverProof,
78
WasmFpRuntimeTable,
8-
WasmPastaFpRuntimeTableCfg,
99
WasmFqLookupCommitments,
1010
WasmFqOpeningProof,
1111
WasmFqProverCommitments,
12-
WasmPastaFqLookupTable,
1312
WasmFqProverProof,
1413
WasmFqRuntimeTable,
14+
WasmPastaFpLookupTable,
15+
WasmPastaFpRuntimeTableCfg,
16+
WasmPastaFqLookupTable,
1517
WasmPastaFqRuntimeTableCfg,
1618
WasmVecVecFp,
1719
WasmVecVecFq,
1820
} from '../../compiled/node_bindings/plonk_wasm.cjs';
19-
import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs';
21+
import {
22+
fieldFromRust,
23+
fieldToRust,
24+
fieldsFromRustFlat,
25+
fieldsToRustFlat,
26+
} from './conversion-base.js';
27+
import { ConversionCore, ConversionCores, mapToUint32Array, unwrap } from './conversion-core.js';
2028
import type {
29+
Field,
30+
LookupCommitments,
31+
LookupTable,
32+
OpeningProof,
2133
OrInfinity,
2234
PointEvaluations,
2335
PolyComm,
24-
ProverProof,
25-
ProofWithPublic,
2636
ProofEvaluations,
37+
ProofWithPublic,
2738
ProverCommitments,
28-
OpeningProof,
39+
ProverProof,
2940
RecursionChallenge,
30-
LookupCommitments,
3141
RuntimeTable,
3242
RuntimeTableCfg,
33-
LookupTable,
34-
Field,
3543
} from './kimchi-types.js';
36-
import { MlArray, MlOption, MlTuple } from '../../../lib/ml/base.js';
37-
import {
38-
fieldToRust,
39-
fieldFromRust,
40-
fieldsToRustFlat,
41-
fieldsFromRustFlat,
42-
} from './conversion-base.js';
43-
import { ConversionCore, ConversionCores, mapToUint32Array, unwrap } from './conversion-core.js';
4444

4545
export { proofConversion };
4646

@@ -178,6 +178,7 @@ function proofConversionPerField(
178178
}
179179

180180
function runtimeTableToRust([, id, data]: RuntimeTable): WasmRuntimeTable {
181+
console.log('old runtime table to rust!');
181182
return new RuntimeTable(id, core.vectorToRust(data));
182183
}
183184

src/bindings/crypto/bindings/conversion-verifier-index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ function verifierIndexConversionPerField(
8080
function domainFromRust(domain: WasmDomain): Domain {
8181
let logSizeOfGroup = domain.log_size_of_group;
8282
let groupGen = fieldFromRust(domain.group_gen);
83-
domain.free();
83+
// domain.free();
8484
return [0, logSizeOfGroup, groupGen];
8585
}
8686

@@ -117,8 +117,6 @@ function verifierIndexConversionPerField(
117117
);
118118
}
119119
function verificationEvalsFromRust(evals: WasmVerificationEvals): VerificationEvals {
120-
console.log('evals', evals.coefficients_comm);
121-
122120
let mlEvals: VerificationEvals = [
123121
0,
124122
core.polyCommsFromRust(evals.sigma_comm),

src/bindings/crypto/napi-conversion-core.ts

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {
66
fieldsFromRustFlat,
77
fieldsToRustFlat,
88
} from './bindings/conversion-base.js';
9-
import { mapFromUintArray } from './bindings/conversion-core.js';
109
import { Field, Gate, LookupTable, OrInfinity, PolyComm, Wire } from './bindings/kimchi-types.js';
1110
import { mapTuple } from './bindings/util.js';
1211

@@ -70,13 +69,11 @@ function napiConversionCore(napi: any) {
7069
};
7170

7271
return {
73-
fp: { ...fpCore },
72+
fp: {
73+
...fpCore,
74+
},
7475
fq: {
7576
...fqCore,
76-
shiftsFromRust: (s: any) => {
77-
let shifts = [s.s0, s.s1, s.s2, s.s3, s.s4, s.s5, s.s6];
78-
return [0, ...shifts.map(fieldFromRust)];
79-
},
8077
},
8178
...shared,
8279
};
@@ -156,9 +153,9 @@ function conversionCorePerField({ makeAffine, PolyComm }: NapiClasses) {
156153
};
157154
const affineFromRust = (pt: NapiAffine): OrInfinity => {
158155
if (pt.infinity) return 0;
159-
console.log('pt', pt);
160-
console.log('pt.x', pt.x);
161-
console.log('pt.y', pt.y);
156+
// console.log('pt', pt);
157+
// console.log('pt.x', pt.x);
158+
// console.log('pt.y', pt.y);
162159

163160
const xField = fieldFromRust(pt.x);
164161
const yField = fieldFromRust(pt.y);
@@ -182,22 +179,13 @@ function conversionCorePerField({ makeAffine, PolyComm }: NapiClasses) {
182179
return new PolyCommClass(unshifted as unknown, undefined);
183180
};
184181

185-
/* const polyCommFromRust = (polyComm: NapiPolyComm): PolyComm => {
186-
console.log('polyComm', polyComm);
182+
const polyCommFromRust = (polyComm: any): any => {
183+
if (polyComm == null) return undefined;
184+
// console.log('polyComm', polyComm);
187185
const rustUnshifted = asArrayLike<NapiAffine>(polyComm.unshifted, 'polyComm.unshifted');
188-
console.log('rustUnshifted', rustUnshifted);
186+
// console.log('rustUnshifted', rustUnshifted);
189187
const mlUnshifted = rustUnshifted.map(affineFromRust);
190188
return [0, [0, ...mlUnshifted]];
191-
}; */
192-
const polyCommFromRust = (polyComm: any): any => {
193-
let rustUnshifted = polyComm.unshifted;
194-
console.log('rustUnshifted', rustUnshifted);
195-
let mlUnshifted = mapFromUintArray(rustUnshifted, (ptr) => {
196-
console.log('ptr', ptr);
197-
/* return affineFromRust(wrap(ptr, CommitmentCurve));
198-
*/
199-
});
200-
return [0, [0, ...mlUnshifted]];
201189
};
202190

203191
const polyCommsToRust = ([, ...comms]: MlArray<PolyComm>): NapiPolyComm[] =>

0 commit comments

Comments
 (0)