Skip to content

Commit 3599a8f

Browse files
committed
Merge branch 'querolita/napi-proof' into shigoto/native/napi/oracles
2 parents d741ec6 + e75b3f3 commit 3599a8f

File tree

10 files changed

+634
-47
lines changed

10 files changed

+634
-47
lines changed

src/bindings/crypto/bindings.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ import { jsEnvironment } from './bindings/env.js';
1616
import { FpBindings, FqBindings } from './bindings/field.js';
1717
import { napiOraclesConversion } from './bindings/napi-conversion-oracles.js';
1818
import { srs } from './bindings/srs.js';
19+
import { srs as napiSrs } from './napi-srs.js';
1920
import { FpVectorBindings, FqVectorBindings } from './bindings/vector.js';
2021
import { napiConversionCore } from './napi-conversion-core.js';
2122
import { napiProofConversion } from './napi-conversion-proof.js';
23+
import type * as napiNamespace from '../compiled/node_bindings/plonk_wasm.cjs';
2224

23-
export { RustConversion, Wasm, createNativeRustConversion, getRustConversion };
25+
export { RustConversion, Wasm, Napi, createNativeRustConversion, getRustConversion };
2426

2527
/* TODO: Uncomment in phase 2 of conversion layer
2628
import { conversionCore as conversionCoreNative } from './native/conversion-core.js';
@@ -50,12 +52,14 @@ const tsBindings = {
5052
return bundle.srsFactory(wasm, bundle.conversion);
5153
},*/
5254
srs: (wasm: Wasm) => srs(wasm, getRustConversion(wasm)),
55+
srsNative: (napi: Napi) => napiSrs(napi, createNativeRustConversion(napi) as any),
5356
};
5457

5558
// this is put in a global variable so that mina/src/lib/crypto/kimchi_bindings/js/bindings.js finds it
5659
(globalThis as any).__snarkyTsBindings = tsBindings;
5760

5861
type Wasm = typeof wasmNamespace;
62+
type Napi = typeof napiNamespace;
5963

6064
type RustConversion = ReturnType<typeof buildWasmConversion>;
6165

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { MlArray } from '../../../lib/ml/base.js';
2+
import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs';
13
import type {
24
WasmFpGate,
35
WasmFpPolyComm,
@@ -6,27 +8,25 @@ import type {
68
WasmGPallas,
79
WasmGVesta,
810
} from '../../compiled/node_bindings/plonk_wasm.cjs';
9-
import { OrInfinity, Gate, PolyComm, Wire } from './kimchi-types.js';
10-
import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs';
11-
import { MlArray } from '../../../lib/ml/base.js';
12-
import { mapTuple } from './util.js';
1311
import {
1412
WasmAffine,
1513
affineFromRust,
1614
affineToRust,
1715
fieldsFromRustFlat,
1816
fieldsToRustFlat,
1917
} from './conversion-base.js';
18+
import { Gate, OrInfinity, PolyComm, Wire } from './kimchi-types.js';
19+
import { mapTuple } from './util.js';
2020

2121
export {
2222
ConversionCore,
2323
ConversionCores,
2424
conversionCore,
2525
freeOnFinalize,
26-
wrap,
27-
unwrap,
2826
mapFromUintArray,
2927
mapToUint32Array,
28+
unwrap,
29+
wrap,
3030
};
3131

3232
// basic conversion functions for each field
@@ -116,7 +116,9 @@ function conversionCorePerField(
116116
return new PolyComm(rustUnshifted, rustShifted);
117117
},
118118
polyCommFromRust(polyComm: WasmPolyComm): PolyComm {
119+
console.log('polyComm', polyComm);
119120
let rustUnshifted = polyComm.unshifted;
121+
console.log('polyCommFromRust', rustUnshifted);
120122
let mlUnshifted = mapFromUintArray(rustUnshifted, (ptr) => {
121123
return affineFromRust(wrap(ptr, CommitmentCurve));
122124
});
@@ -174,6 +176,7 @@ function freeOnFinalize<T extends Freeable>(instance: T) {
174176
}
175177

176178
function mapFromUintArray<T>(array: Uint32Array | Uint8Array, map: (i: number) => T) {
179+
console.log('array', array);
177180
let n = array.length;
178181
let result: T[] = Array(n);
179182
for (let i = 0; i < n; i++) {

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { MlArray, MlBool, MlOption } from '../../../lib/ml/base.js';
2+
import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs';
13
import type {
24
WasmFpDomain,
35
WasmFpLookupSelectors,
@@ -13,11 +15,9 @@ import type {
1315
WasmFqShifts,
1416
LookupInfo as WasmLookupInfo,
1517
} from '../../compiled/node_bindings/plonk_wasm.cjs';
16-
import type * as wasmNamespace from '../../compiled/node_bindings/plonk_wasm.cjs';
17-
import { MlBool, MlArray, MlOption } from '../../../lib/ml/base.js';
18-
import { Field, VerifierIndex, Domain, VerificationEvals, PolyComm } from './kimchi-types.js';
1918
import { fieldFromRust, fieldToRust } from './conversion-base.js';
2019
import { ConversionCore, ConversionCores, freeOnFinalize } from './conversion-core.js';
20+
import { Domain, Field, PolyComm, VerificationEvals, VerifierIndex } from './kimchi-types.js';
2121
import { Lookup, LookupInfo, LookupSelectors } from './lookup.js';
2222

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

src/bindings/crypto/bindings/gate-vector-napi.unit-test.ts

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import type { Field, Gate, Wire } from './kimchi-types.js';
66
const require = createRequire(import.meta.url);
77

88
function loadNative() {
9+
const slug = `${process.platform}-${process.arch}`;
910
const candidates = [
10-
'../../compiled/_node_bindings/plonk_napi.node',
11+
`../../../../../native/${slug}/plonk_napi.node`,
1112
'../../compiled/node_bindings/plonk_napi.node',
13+
'../../compiled/_node_bindings/plonk_napi.node',
1214
];
1315
for (const path of candidates) {
1416
try {
@@ -23,6 +25,21 @@ function loadNative() {
2325

2426
const native: any = loadNative();
2527

28+
const gateVectorCreate =
29+
native.caml_pasta_fp_plonk_gate_vector_create ?? native.camlPastaFpPlonkGateVectorCreate;
30+
const gateVectorLen =
31+
native.caml_pasta_fp_plonk_gate_vector_len ?? native.camlPastaFpPlonkGateVectorLen;
32+
const gateVectorAdd =
33+
native.caml_pasta_fp_plonk_gate_vector_add ?? native.camlPastaFpPlonkGateVectorAdd;
34+
const gateVectorGet =
35+
native.caml_pasta_fp_plonk_gate_vector_get ?? native.camlPastaFpPlonkGateVectorGet;
36+
const gateVectorWrap =
37+
native.caml_pasta_fp_plonk_gate_vector_wrap ?? native.camlPastaFpPlonkGateVectorWrap;
38+
const gateVectorDigest =
39+
native.caml_pasta_fp_plonk_gate_vector_digest ?? native.camlPastaFpPlonkGateVectorDigest;
40+
const circuitSerialize =
41+
native.caml_pasta_fp_plonk_circuit_serialize ?? native.camlPastaFpPlonkCircuitSerialize;
42+
2643
const { fp } = napiConversionCore(native);
2744

2845
const zeroField: Field = [0, 0n];
@@ -44,24 +61,24 @@ const sampleGate: Gate = [
4461
[0, zeroField, zeroField, zeroField, zeroField, zeroField, zeroField, zeroField],
4562
];
4663

47-
const vector = native.camlPastaFpPlonkGateVectorCreate();
48-
expect(native.camlPastaFpPlonkGateVectorLen(vector)).toBe(0);
64+
const vector = gateVectorCreate();
65+
expect(gateVectorLen(vector)).toBe(0);
4966

50-
native.camlPastaFpPlonkGateVectorAdd(vector, fp.gateToRust(sampleGate));
51-
expect(native.camlPastaFpPlonkGateVectorLen(vector)).toBe(1);
67+
gateVectorAdd(vector, fp.gateToRust(sampleGate));
68+
expect(gateVectorLen(vector)).toBe(1);
5269

53-
const gate0 = native.camlPastaFpPlonkGateVectorGet(vector, 0);
70+
const gate0 = gateVectorGet(vector, 0);
5471
expect(gate0.typ).toBe(sampleGate[1]);
5572

5673
const rustTarget = fp.wireToRust(mlWire(0, 0));
5774
const rustHead = fp.wireToRust(mlWire(1, 2));
58-
native.camlPastaFpPlonkGateVectorWrap(vector, rustTarget, rustHead);
59-
const wrapped = native.camlPastaFpPlonkGateVectorGet(vector, 0);
75+
gateVectorWrap(vector, rustTarget, rustHead);
76+
const wrapped = gateVectorGet(vector, 0);
6077
expect(wrapped.wires.w0).toEqual({ row: 1, col: 2 });
6178

62-
native.camlPastaFpPlonkGateVectorDigest(0, vector);
63-
native.camlPastaFpPlonkCircuitSerialize(0, vector);
79+
gateVectorDigest(0, vector);
80+
circuitSerialize(0, vector);
6481

65-
console.log('{}', native.camlPastaFpPlonkGateVectorDigest(0, vector));
82+
console.log('{}', gateVectorDigest(0, vector));
6683

6784
console.log('gate vector napi bindings (fp) are working ✔️');

0 commit comments

Comments
 (0)