Skip to content
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
1806949
merge native/-napi
Trivo25 Nov 5, 2025
fb3788c
Update proof-systems
Trivo25 Nov 9, 2025
637e59b
Update proof-systems
Trivo25 Nov 9, 2025
791b7f4
Update proof-systems
Trivo25 Nov 9, 2025
924cecf
fix headet ypes
Trivo25 Nov 10, 2025
459c862
submodule: update proof-systems
querolita Nov 11, 2025
940cf31
jsoo: attempt proof bindings
querolita Nov 12, 2025
2686bf1
jsoo: remove proof conversions
querolita Nov 13, 2025
cc4b411
Revert "jsoo: remove proof conversions"
querolita Nov 13, 2025
698b18b
fix tbd
Trivo25 Nov 14, 2025
a7e7ab7
wip dont use napi types just yet
Trivo25 Nov 14, 2025
4c4df14
Update proof-systems
Trivo25 Nov 14, 2025
ef9d64f
submodule: update proof-systems
querolita Nov 14, 2025
2cffb7f
Kimchi bindings native overrides for napi oracles conversion
Shigoto-dev19 Nov 14, 2025
b68cc0f
submodule: update proof systemse
querolita Nov 14, 2025
4a26076
backend: add overrides for proof types
querolita Nov 14, 2025
05ae9ba
jsoo: override proof batch verify
querolita Nov 14, 2025
277525f
jsoo: override proof dummy
querolita Nov 14, 2025
c19a049
jsoo: override proof deep copy
querolita Nov 14, 2025
9d34fc4
Merge branch 'florian/native-proof' into querolita/napi-proof
querolita Nov 14, 2025
21c38f0
Merge branch 'native/napi' into florian/native-proof
querolita Nov 17, 2025
857e2a8
backend: don't include fq yet
querolita Nov 17, 2025
53a6174
Merge pull request #18079 from MinaProtocol/florian/native-proof
querolita Nov 19, 2025
5573035
Merge branch 'native/napi' into querolita/napi-proof
querolita Nov 19, 2025
6189fa7
backend: include missing srs functions
querolita Nov 18, 2025
464b918
jsoo: remove serde workaround for wasm/napi as we are advancing in ex…
querolita Nov 20, 2025
6d9b2f6
submodule: update proof-systems
querolita Nov 20, 2025
3116ffc
Merge branch 'querolita/napi-proof' into shigoto/native/napi/oracles
querolita Nov 20, 2025
88522d3
Merge pull request #18115 from MinaProtocol/shigoto/native/napi/oracles
querolita Nov 20, 2025
cabebc8
jsoo: overrides for verifier index functions and types
querolita Nov 26, 2025
8437493
submodule: update proof-systems
querolita Nov 26, 2025
3747ee2
bindings: remove extra plonk index conversions
querolita Dec 3, 2025
0fd6efb
bindings: exposing serde helpers
querolita Dec 3, 2025
6f15cb8
submodule: update proof-systems
querolita Dec 3, 2025
e7dce81
shigoto + anais kimchi bindings changes for the first native prover poc
Shigoto-dev19 Dec 8, 2025
54c170f
Merge branch 'querolita/napi-vindex' into shigoto/napi-proof/verifier…
querolita Dec 8, 2025
ebfe5d8
submodule: update proof-systems
querolita Dec 8, 2025
3c0b64c
Merge pull request #18211 from MinaProtocol/shigoto/napi-proof/verifi…
querolita Dec 8, 2025
1c7ee27
Merge pull request #18190 from MinaProtocol/querolita/napi-vindex
querolita Dec 9, 2025
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
64 changes: 0 additions & 64 deletions src/lib/crypto/kimchi_bindings/js/bindings/oracles.js
Original file line number Diff line number Diff line change
@@ -1,69 +1,5 @@
/* global plonk_wasm, tsRustConversion,*/

// Provides: fp_oracles_create
// Requires: plonk_wasm, tsRustConversion
var fp_oracles_create = function (lgr_comm, verifier_index, proof) {
return tsRustConversion.fp.oraclesFromRust(
plonk_wasm.fp_oracles_create(
tsRustConversion.fp.polyCommsToRust(lgr_comm),
tsRustConversion.fp.verifierIndexToRust(verifier_index),
tsRustConversion.fp.proofToRust(proof)
)
);
};

// Provides: fp_oracles_create_no_public
// Requires: fp_oracles_create
var fp_oracles_create_no_public = function (lgr_comm, verifier_index, proof) {
return fp_oracles_create(lgr_comm, verifier_index, [0, 0, proof]);
};

// Provides: fp_oracles_dummy
// Requires: plonk_wasm, tsRustConversion
var fp_oracles_dummy = function () {
return tsRustConversion.fp.oraclesFromRust(plonk_wasm.fp_oracles_dummy());
};

// Provides: fp_oracles_deep_copy
// Requires: plonk_wasm, tsRustConversion
var fp_oracles_deep_copy = function (x) {
return tsRustConversion.fp.oraclesFromRust(
plonk_wasm.fp_oracles_deep_copy(tsRustConversion.fp.oraclesToRust(x))
);
};

// Provides: fq_oracles_create
// Requires: plonk_wasm, tsRustConversion
var fq_oracles_create = function (lgr_comm, verifier_index, proof) {
return tsRustConversion.fq.oraclesFromRust(
plonk_wasm.fq_oracles_create(
tsRustConversion.fq.polyCommsToRust(lgr_comm),
tsRustConversion.fq.verifierIndexToRust(verifier_index),
tsRustConversion.fq.proofToRust(proof)
)
);
};

// Provides: fq_oracles_create_no_public
// Requires: fq_oracles_create
var fq_oracles_create_no_public = function (lgr_comm, verifier_index, proof) {
return fq_oracles_create(lgr_comm, verifier_index, [0, 0, proof]);
};

// Provides: fq_oracles_dummy
// Requires: plonk_wasm, tsRustConversion
var fq_oracles_dummy = function () {
return tsRustConversion.fq.oraclesFromRust(plonk_wasm.fq_oracles_dummy());
};

// Provides: fq_oracles_deep_copy
// Requires: plonk_wasm, tsRustConversion
var fq_oracles_deep_copy = function (x) {
return tsRustConversion.fq.oraclesFromRust(
plonk_wasm.fq_oracles_deep_copy(tsRustConversion.fq.oraclesToRust(x))
);
};

// This is fake -- parameters are only needed on the Rust side, so no need to return something meaningful
// Provides: caml_pasta_fp_poseidon_params_create
function caml_pasta_fp_poseidon_params_create() {
Expand Down
139 changes: 0 additions & 139 deletions src/lib/crypto/kimchi_bindings/js/bindings/proof.js
Original file line number Diff line number Diff line change
@@ -1,139 +0,0 @@
/* global plonk_wasm, tsRustConversion
*/

// Provides: caml_pasta_fp_plonk_proof_create
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fp_plonk_proof_create = function (
index,
witness_cols,
caml_runtime_tables,
prev_challenges,
prev_sgs
) {
var w = new plonk_wasm.WasmVecVecFp(witness_cols.length - 1);
for (var i = 1; i < witness_cols.length; i++) {
w.push(tsRustConversion.fp.vectorToRust(witness_cols[i]));
}
witness_cols = w;
prev_challenges = tsRustConversion.fp.vectorToRust(prev_challenges);
var wasm_runtime_tables =
tsRustConversion.fp.runtimeTablesToRust(caml_runtime_tables);
prev_sgs = tsRustConversion.fp.pointsToRust(prev_sgs);
var proof = plonk_wasm.caml_pasta_fp_plonk_proof_create(
index,
witness_cols,
wasm_runtime_tables,
prev_challenges,
prev_sgs
);
return tsRustConversion.fp.proofFromRust(proof);
};

// Provides: caml_pasta_fp_plonk_proof_verify
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fp_plonk_proof_verify = function (index, proof) {
index = tsRustConversion.fp.verifierIndexToRust(index);
proof = tsRustConversion.fp.proofToRust(proof);
return plonk_wasm.caml_pasta_fp_plonk_proof_verify(index, proof);
};

// Provides: caml_pasta_fp_plonk_proof_batch_verify
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fp_plonk_proof_batch_verify = function (indexes, proofs) {
indexes = tsRustConversion.mapMlArrayToRustVector(
indexes,
tsRustConversion.fp.verifierIndexToRust
);
proofs = tsRustConversion.mapMlArrayToRustVector(
proofs,
tsRustConversion.fp.proofToRust
);
return plonk_wasm.caml_pasta_fp_plonk_proof_batch_verify(indexes, proofs);
};

// Provides: caml_pasta_fp_plonk_proof_dummy
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fp_plonk_proof_dummy = function () {
return tsRustConversion.fp.proofFromRust(
plonk_wasm.caml_pasta_fp_plonk_proof_dummy()
);
};

// Provides: caml_pasta_fp_plonk_proof_deep_copy
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fp_plonk_proof_deep_copy = function (proof) {
return tsRustConversion.fp.proofFromRust(
plonk_wasm.caml_pasta_fp_plonk_proof_deep_copy(
tsRustConversion.fp.proofToRust(proof)
)
);
};

// Provides: caml_pasta_fq_plonk_proof_create
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fq_plonk_proof_create = function (
index,
witness_cols,
caml_runtime_tables,
prev_challenges,
prev_sgs
) {
var w = new plonk_wasm.WasmVecVecFq(witness_cols.length - 1);
for (var i = 1; i < witness_cols.length; i++) {
w.push(tsRustConversion.fq.vectorToRust(witness_cols[i]));
}
witness_cols = w;
prev_challenges = tsRustConversion.fq.vectorToRust(prev_challenges);
var wasm_runtime_tables =
tsRustConversion.fq.runtimeTablesToRust(caml_runtime_tables);
prev_sgs = tsRustConversion.fq.pointsToRust(prev_sgs);
var proof = plonk_wasm.caml_pasta_fq_plonk_proof_create(
index,
witness_cols,
wasm_runtime_tables,
prev_challenges,
prev_sgs
);
return tsRustConversion.fq.proofFromRust(proof);
};

// Provides: caml_pasta_fq_plonk_proof_verify
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fq_plonk_proof_verify = function (index, proof) {
index = tsRustConversion.fq.verifierIndexToRust(index);
proof = tsRustConversion.fq.proofToRust(proof);
return plonk_wasm.caml_pasta_fq_plonk_proof_verify(index, proof);
};

// Provides: caml_pasta_fq_plonk_proof_batch_verify
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fq_plonk_proof_batch_verify = function (indexes, proofs) {
indexes = tsRustConversion.mapMlArrayToRustVector(
indexes,
tsRustConversion.fq.verifierIndexToRust
);
proofs = tsRustConversion.mapMlArrayToRustVector(
proofs,
tsRustConversion.fq.proofToRust
);
return plonk_wasm.caml_pasta_fq_plonk_proof_batch_verify(indexes, proofs);
};

// Provides: caml_pasta_fq_plonk_proof_dummy
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fq_plonk_proof_dummy = function () {
return tsRustConversion.fq.proofFromRust(
plonk_wasm.caml_pasta_fq_plonk_proof_dummy()
);
};

// Provides: caml_pasta_fq_plonk_proof_deep_copy
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fq_plonk_proof_deep_copy = function (proof) {
return tsRustConversion.fq.proofFromRust(
plonk_wasm.caml_pasta_fq_plonk_proof_deep_copy(
tsRustConversion.fq.proofToRust(proof)
)
);
};

Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,13 @@ var caml_opt_to_rust = function (caml_optional_value, to_rust) {
// Provides: caml_pasta_fp_plonk_verifier_index_create
// Requires: plonk_wasm, tsRustConversion
var caml_pasta_fp_plonk_verifier_index_create = function (x) {
console.log("caml_pasta_fp_plonk_verifier_index_create")
var vk = plonk_wasm.caml_pasta_fp_plonk_verifier_index_create(x);
console.log("caml_pasta_fp_plonk_verifier_index_create", x)
var bytes = plonk_wasm.prover_index_fp_to_bytes(x);
console.log("bytes", bytes)
var index = plonk_wasm.WasmPastaFpPlonkIndex.deserialize(bytes)
console.log("index", index)
var vk = plonk_wasm.caml_pasta_fp_plonk_verifier_index_create(index);
console.log("vk", vk)
return tsRustConversion.fp.verifierIndexFromRust(vk);
};

Expand Down
3 changes: 2 additions & 1 deletion src/lib/crypto/kimchi_bindings/js/dune
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
native/native-overrides/prover-index.js
native/native-overrides/srs.js
native/native-overrides/util.js
native/native-overrides/proof.js))
native/native-overrides/proof.js
native/native-overrides/verifier-index.js))
(instrumentation
(backend bisect_ppx))
(preprocess
Expand Down
22 changes: 14 additions & 8 deletions src/lib/crypto/kimchi_bindings/js/native/header-d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,20 @@
// This file gets auto-included in the generated plonk-napi types to supplement
// external pointer types.

type WasmGVesta = {};
type WasmGPallas = {};
type WasmPastaFp = {};
type WasmPastaFq = {};
type WasmLookupInfo = {};
type WasmPastaFpPlonkIndex = {};
type NapiVector<T> = {};
type NapiGVesta = {};
type NapiGPallas = {};
type NapiPastaFpPlonkIndex = {};
type NapiPastaFqPlonkIndex = {};
type NapiLookupInfo = {};
type NapiPastaFp = {};
type NapiPastaFq = {};
type WasmPastaFqPlonkIndex = {};
type Proof = {}
type WasmVector<T> = {};
type WasmFlatVector<T> = {};
type WasmVecVecFp = {};
type WasmVecVecFq = {};
type WasmFpSrs = {};
type WasmFqSrs = {};
type Self = {};

// Header section end
Original file line number Diff line number Diff line change
@@ -1,5 +1,68 @@
/* global plonk_wasm, tsRustConversionNative,*/

// Provides: fp_oracles_create
// Requires: plonk_wasm, tsRustConversionNative
var fp_oracles_create = function (lgr_comm, verifier_index, proof) {
return tsRustConversionNative.fp.oraclesFromRust(
plonk_wasm.fp_oracles_create(
tsRustConversionNative.fp.polyCommsToRust(lgr_comm),
tsRustConversionNative.fp.verifierIndexToRust(verifier_index),
tsRustConversionNative.fp.proofToRust(proof)
)
);
};

// Provides: fp_oracles_create_no_public
// Requires: fp_oracles_create
var fp_oracles_create_no_public = function (lgr_comm, verifier_index, proof) {
return fp_oracles_create(lgr_comm, verifier_index, [0, 0, proof]);
};

// Provides: fp_oracles_dummy
// Requires: plonk_wasm, tsRustConversionNative
var fp_oracles_dummy = function () {
return tsRustConversionNative.fp.oraclesFromRust(plonk_wasm.fp_oracles_dummy());
};

// Provides: fp_oracles_deep_copy
// Requires: plonk_wasm, tsRustConversionNative
var fp_oracles_deep_copy = function (x) {
return tsRustConversionNative.fp.oraclesFromRust(
plonk_wasm.fp_oracles_deep_copy(tsRustConversionNative.fp.oraclesToRust(x))
);
};

// Provides: fq_oracles_create
// Requires: plonk_wasm, tsRustConversionNative
var fq_oracles_create = function (lgr_comm, verifier_index, proof) {
return tsRustConversionNative.fq.oraclesFromRust(
plonk_wasm.fq_oracles_create(
tsRustConversionNative.fq.polyCommsToRust(lgr_comm),
tsRustConversionNative.fq.verifierIndexToRust(verifier_index),
tsRustConversionNative.fq.proofToRust(proof)
)
);
};

// Provides: fq_oracles_create_no_public
// Requires: fq_oracles_create
var fq_oracles_create_no_public = function (lgr_comm, verifier_index, proof) {
return fq_oracles_create(lgr_comm, verifier_index, [0, 0, proof]);
};

// Provides: fq_oracles_dummy
// Requires: plonk_wasm, tsRustConversionNative
var fq_oracles_dummy = function () {
return tsRustConversionNative.fq.oraclesFromRust(plonk_wasm.fq_oracles_dummy());
};

// Provides: fq_oracles_deep_copy
// Requires: plonk_wasm, tsRustConversionNative
var fq_oracles_deep_copy = function (x) {
return tsRustConversionNative.fq.oraclesFromRust(
plonk_wasm.fq_oracles_deep_copy(tsRustConversionNative.fq.oraclesToRust(x))
);
};

// Provides: caml_pasta_fq_poseidon_block_cipher
// Requires: plonk_wasm, tsRustConversionNative
Expand Down
Loading