Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
181 commits
Select commit Hold shift + click to select a range
6aa05b1
cargo: add comment about cdylib
querolita Sep 11, 2025
d02ec83
napi: poseidon ffi
querolita Sep 22, 2025
18a2370
minor: rename variable to avoid confusion
querolita Sep 29, 2025
cd24f57
types: change output types of poseidon ffi to fix o1js tests
querolita Sep 30, 2025
2a07e99
dummy logs
Trivo25 Oct 8, 2025
9348803
Merge pull request #3343 from o1-labs/florian/napi-conversion-core
querolita Oct 9, 2025
9286836
re-implement `circuit.rs `
Trivo25 Oct 15, 2025
cf6b541
hack serialisation for now
Trivo25 Oct 15, 2025
534fb8e
Merge pull request #3345 from o1-labs/florian/napi-prover-json
querolita Oct 23, 2025
e25e75d
napi: wrapper for field types
querolita Sep 30, 2025
a5d32fe
napi: wrapper for group types
querolita Sep 30, 2025
4b320f3
napi: impls for wasm vectors
querolita Sep 30, 2025
8638b15
napi: impls for polycomm
querolita Oct 1, 2025
0d95c15
napi: uniformize format to match plonk-wasm side
querolita Oct 16, 2025
b7c84ab
napi: wrapper for wires
querolita Oct 2, 2025
8318af0
deps: use kimchi in plonk-napi
querolita Oct 2, 2025
89e829f
napi: wrapper for feature flags
querolita Oct 2, 2025
83ee190
napi: wrapper for lookups
querolita Oct 2, 2025
d4e8169
napi: ffi for gate vector
querolita Oct 2, 2025
02e15b8
minor: add new line at eof
querolita Oct 3, 2025
357d735
napi: inline functions for GateVector struct
querolita Oct 15, 2025
a9e249b
napi: export contents of gate_vector module
querolita Oct 15, 2025
923133e
napi: replace self occurances to vector in gate_vector
querolita Oct 15, 2025
31db09d
napi: fix compilation of gate_vector
querolita Oct 15, 2025
2bb4a8e
napi: improve naming in gate_vector
querolita Oct 15, 2025
4824308
napi: comment out poseidon, and include comments for gatevector
querolita Oct 16, 2025
bc98785
remove _plonk_index_serialize
Trivo25 Oct 15, 2025
25be75a
impl. prover index degrees for fq
Trivo25 Oct 15, 2025
e728d24
impl. prover index for fp
Trivo25 Oct 15, 2025
0159d40
get rid of told types file
Trivo25 Oct 15, 2025
c74e69a
explose and rename modules
Trivo25 Oct 15, 2025
4b887e9
fix proper types
Trivo25 Oct 15, 2025
5151b2a
WasmPastaFqPlonkIndex seri impl (wip)
Trivo25 Oct 15, 2025
906d083
remove debug logs
Trivo25 Oct 15, 2025
81e860b
testtest
Trivo25 Oct 15, 2025
a3b92df
impl some types
Trivo25 Oct 15, 2025
e88ac1b
finish up prover index
Trivo25 Oct 22, 2025
5604cfb
impl caml_pasta_fp_plonk_index_read
Trivo25 Oct 22, 2025
75f1339
get rid of gate vectors for now
Trivo25 Oct 22, 2025
3ac952e
make plonk-napi compile by reusing gate_vector types
Trivo25 Oct 22, 2025
0907e20
merge
Trivo25 Oct 22, 2025
d7f7afc
napi: get rid of gate vector to use external from plonk-wasm
querolita Oct 23, 2025
0925ce3
napi: ffi and types for srs
querolita Oct 7, 2025
b90542c
napi: use macro params closer to plonk-wasms names
querolita Oct 20, 2025
ba4289c
native prover build with proper types
bleepbloopsify Oct 27, 2025
adaf261
napi: pass to srs impls
querolita Oct 27, 2025
db8bdd1
napi: implement FromNapiValue for polycomm
querolita Oct 27, 2025
5c19d07
napi: finish compilation of srs
querolita Oct 27, 2025
4e998c5
napi: replicate format in plonk-wasm and export
querolita Oct 28, 2025
bcc5eb6
add build info
bleepbloopsify Oct 28, 2025
cdf3022
napi: use napi::bindgen_prelude::Result instead of NapiResult for typ…
querolita Oct 28, 2025
a04edae
napi: fix naming of srs functions inside macro
querolita Oct 28, 2025
d205c85
napi: reintroduce gate vector
querolita Oct 28, 2025
1b93772
napi: remove prints for gate vector
querolita Oct 29, 2025
570a29a
napi: add prints for srs
querolita Oct 29, 2025
c3c5807
types tbd
Trivo25 Oct 30, 2025
0c04446
base types and caml_pasta_fp_plonk_verifier_index_shifts
Trivo25 Oct 30, 2025
953bc32
simplify
Trivo25 Oct 30, 2025
ab2d728
pub(crate)
bleepbloopsify Oct 30, 2025
8922137
Merge pull request #3357 from o1-labs/leon/native-prover-build
bleepbloopsify Oct 30, 2025
a68221c
plonk_proof_poc and renaming some fns
bleepbloopsify Oct 30, 2025
e7aff41
napi: refactor gate vector
querolita Oct 31, 2025
bf6ae6f
napi: serde napi srs type
querolita Oct 31, 2025
6660854
add reporting
bleepbloopsify Oct 31, 2025
6098614
do not want this
bleepbloopsify Oct 31, 2025
98f069f
Merge pull request #3361 from o1-labs/leon/native/napi/proof-generati…
bleepbloopsify Nov 3, 2025
36a0212
pinning napi-rs fork
bleepbloopsify Nov 3, 2025
6b91352
Merge pull request #3360 from o1-labs/florian/verifier-index-napi
querolita Nov 4, 2025
1859dc8
Merge pull request #3362 from o1-labs/leon/native/napi/napi-rs-fork
querolita Nov 4, 2025
e509b19
Merge branch 'native/napi' into native/napi-polycomm
querolita Nov 4, 2025
9e4d1fe
napi: prefix wrappers with napi and implement missing traits
querolita Nov 4, 2025
1cfe540
Merge branch 'native/napi-polycomm' into native/napi-gatevector
querolita Nov 4, 2025
bb874bc
napi: fix merge conflicts and reuse lookups types
querolita Nov 4, 2025
fb3f233
napi: use existing polycomm in verifier index
querolita Nov 4, 2025
c69393e
Merge branch 'native/napi-gatevector' into native/napi-srs
querolita Nov 5, 2025
37e96a3
napi: external by reference
querolita Nov 5, 2025
9701ac4
Merge branch 'native/napi-gatevector' into florian/napi-prover-index
querolita Nov 5, 2025
0e2a66e
Merge branch 'florian/napi-prover-index' into native/napi-srs
querolita Nov 5, 2025
9e9154c
napi: delete js_name for one-words
querolita Nov 5, 2025
e7a3178
napi: annotate js_name for srs
querolita Nov 5, 2025
cf6cf90
Merge pull request #3342 from o1-labs/native/napi-srs
querolita Nov 5, 2025
145cb88
napi: annotate js_name for prover index
querolita Nov 5, 2025
ac02943
Merge pull request #3351 from o1-labs/florian/napi-prover-index
querolita Nov 5, 2025
6a9450a
napi: added annotations js_name for polycomm and affine
querolita Nov 5, 2025
9e739fe
Merge pull request #3340 from o1-labs/native/napi-polycomm
querolita Nov 5, 2025
23dc5b7
Merge branch 'native/napi' into native/napi-gatevector
querolita Nov 5, 2025
9929eb5
napi: annotate js_name for verifier index
querolita Nov 5, 2025
b092588
napi: annotate js_name for feature flags
querolita Nov 5, 2025
214a69c
napi: annotate js_name for lookups and fix naming of structs
querolita Nov 5, 2025
4f80d3c
napi: annotate js_name for gate vector
querolita Nov 5, 2025
8e63d6c
Merge pull request #3341 from o1-labs/native/napi-gatevector
querolita Nov 6, 2025
d60917e
cleanup some symbols for native napi
bleepbloopsify Nov 6, 2025
0fa1be1
temp
Trivo25 Nov 4, 2025
b42113c
merge
Trivo25 Nov 4, 2025
597d69e
Update vector.rs
Trivo25 Nov 9, 2025
70d6270
fix remaining naming conflicts tbd
Trivo25 Nov 9, 2025
87adbbf
NapiFlatVector tbd
Trivo25 Nov 9, 2025
11fd88f
fix napi name
Trivo25 Nov 10, 2025
eeb0fd0
Merge pull request #3365 from o1-labs/leon/native/napi/cleanup
querolita Nov 10, 2025
e3c31fb
Merge branch 'native/napi' into florian/native-proof-2
querolita Nov 10, 2025
27272e2
napi: update js_name of plonk index functions prefix with caml_
querolita Nov 10, 2025
611294a
Update napi verifier_index conversion
Shigoto-dev19 Nov 11, 2025
06163dc
Move of_napi function inside the From implementation
Shigoto-dev19 Nov 11, 2025
5007902
Merge pull request #3367 from o1-labs/shigoto/update-napi-verifier-index
querolita Nov 11, 2025
f43f9a4
Merge branch 'native/napi' into florian/native-proof-2
querolita Nov 11, 2025
4a31d14
napi: add plonk proof verify
querolita Nov 11, 2025
aac711f
napi: implement plonk proof batch verify
querolita Nov 11, 2025
5a2f685
napi: plonk proof deep copy with external
querolita Nov 11, 2025
ad8954c
napi: plonk proof dummy with external
querolita Nov 11, 2025
ab91cf3
Update srs.rs
Trivo25 Nov 13, 2025
17a951d
use external instead of reference
Trivo25 Nov 13, 2025
6f5566c
Merge pull request #3370 from o1-labs/florian/external-insteadof-ref
Trivo25 Nov 13, 2025
a5dc0f7
Napi conversions of proof-related types
Shigoto-dev19 Nov 13, 2025
c2464c9
Napi conversions for oracles
Shigoto-dev19 Nov 13, 2025
f5110b8
fix naming
Trivo25 Nov 14, 2025
e5b7131
Merge pull request #3371 from o1-labs/shigoto/native/napi/proof-types…
querolita Nov 14, 2025
ecb6854
napi: export proof types
querolita Nov 14, 2025
4eac953
Merge branch 'florian/native-proof-2' into querolita/napi-proof
querolita Nov 14, 2025
b0af5c1
Merge pull request #3366 from o1-labs/florian/native-proof-2
querolita Nov 17, 2025
31cc9fc
napi: add missing srs functions
querolita Nov 18, 2025
67b9a98
Merge branch 'native/napi' into querolita/napi-proof
querolita Nov 19, 2025
6fcc8ce
napi: go back to using externals with srs after testng
querolita Nov 20, 2025
14f111c
Merge branch 'querolita/napi-proof' into shigoto/native/napi/oracles
querolita Nov 20, 2025
261d047
Merge pull request #3364 from o1-labs/shigoto/native/napi/oracles
querolita Nov 20, 2025
709fad7
napi: first version of macro-styled vk
querolita Nov 25, 2025
1ae987e
napi: fix compilation of verifier index macro implementation
querolita Nov 25, 2025
f6e0328
Full napi conversion for verifier index
Shigoto-dev19 Dec 2, 2025
6f8c8f1
Export napi domain
Shigoto-dev19 Dec 3, 2025
64c7a76
export napi plonk-verifier-index
Shigoto-dev19 Dec 3, 2025
e47bad2
Revert napi shifts
Shigoto-dev19 Dec 3, 2025
4961429
small verifier index fix
Shigoto-dev19 Dec 3, 2025
c985d4f
another fix
Shigoto-dev19 Dec 3, 2025
51a65b2
add names to napi domain
Shigoto-dev19 Dec 3, 2025
f71f28e
napi: rename prover index serde functions
querolita Dec 3, 2025
da2f09f
napi: force snake case for struct fields
querolita Dec 3, 2025
202e2d0
napi: fix h function name
querolita Dec 3, 2025
96f481e
Fix property names of lookup verifier index
Shigoto-dev19 Dec 4, 2025
d363502
Update imports in napi proof.rs
Shigoto-dev19 Dec 4, 2025
e1e44ff
Add plonk verifier index deserialize function
Shigoto-dev19 Dec 4, 2025
77e147f
napi fixes for past plonk index
Shigoto-dev19 Dec 4, 2025
9241d26
Export napi pasta plonk index functions
Shigoto-dev19 Dec 4, 2025
80f235a
napi: rename NapiVecVec so it can be overwritten
querolita Dec 4, 2025
01d188b
Add attribute to napi lookup verifier index
Shigoto-dev19 Dec 4, 2025
c22f062
Define NapiLookupVerifierIndex and PlonkVerifierIndex as napi objects
Shigoto-dev19 Dec 4, 2025
c5eb21d
Update napi exports
Shigoto-dev19 Dec 4, 2025
c5f0a6e
Unskip lookup_info property
Shigoto-dev19 Dec 4, 2025
4e55e52
Forgot name for lookup selectors and converted other napi classes to …
Shigoto-dev19 Dec 4, 2025
35123e4
Fix napi srs_maybe_lagrange_commitment
Shigoto-dev19 Dec 4, 2025
57e99b5
Revert plonk verifier index objects to classes
Shigoto-dev19 Dec 5, 2025
bd455b9
Convert all napi classes to objects for plonk verifier index
Shigoto-dev19 Dec 5, 2025
ef52c65
Rename NapiVecVec to WasmVecVec
Shigoto-dev19 Dec 5, 2025
84373a1
Fix NapiVecVec in napi proof.rs
Shigoto-dev19 Dec 5, 2025
a1addff
Another fix for vector.rs
Shigoto-dev19 Dec 5, 2025
5734152
Add println for napi vecvec
Shigoto-dev19 Dec 5, 2025
9214627
debugging napi vecvec
Shigoto-dev19 Dec 5, 2025
84440c4
Add napi conversion for runtime table
Shigoto-dev19 Dec 5, 2025
43756cf
Use napi runtime tables as object
Shigoto-dev19 Dec 7, 2025
e072aeb
export napi runtime tables
Shigoto-dev19 Dec 7, 2025
1af2adc
Code cleanings
Shigoto-dev19 Dec 7, 2025
75bd438
Merge branch 'querolita/napi-vindex' into shigoto/napi-proof/verifier…
querolita Dec 8, 2025
d52417a
napi: string typo
querolita Dec 8, 2025
1d1d524
napi: unify lookup table definition
querolita Dec 8, 2025
cdf94d4
Merge pull request #3383 from o1-labs/shigoto/napi-proof/verifier-index
querolita Dec 8, 2025
643e42e
Merge pull request #3381 from o1-labs/querolita/napi-vindex
querolita Dec 9, 2025
6714934
Merge pull request #3368 from o1-labs/querolita/napi-proof
querolita Dec 9, 2025
6b5fff9
Merge branch 'native/napi' into querolita/native-proof
querolita Dec 12, 2025
1163f56
napi: remove external for proofs
querolita Dec 15, 2025
9a67b8e
napi: remove skips from evaluations to allow destructuring
querolita Dec 18, 2025
7701bfd
napi: accept Uint8Array in napi vectors
querolita Dec 18, 2025
063d31b
napi: object like for proof evaluations to allow accessing fields
querolita Dec 18, 2025
da6ca46
napi: snake casing js_name PlonkVerifierIndex
querolita Dec 23, 2025
87c67c5
napi: remove External in srs and include some checkpoints for debugging
querolita Jan 9, 2026
569a523
napi: use js_name for snake case property names in oracles
querolita Jan 9, 2026
8e2581f
napi: js_name for lookup structs
querolita Jan 13, 2026
586bee4
napi: remove false check about domain size for chunking in srs commit…
querolita Jan 13, 2026
34bc12e
napi: remove duplicated separate verifier index module
querolita Jan 15, 2026
343ef18
napi: remove report native calls from execution
querolita Jan 15, 2026
266fa8f
napi: remove println's
querolita Jan 15, 2026
a983582
Merge pull request #3442 from o1-labs/native/remove-logs
querolita Jan 21, 2026
059c3a7
Merge pull request #3441 from o1-labs/native/chunking
querolita Jan 21, 2026
a986820
Merge pull request #3443 from o1-labs/querolita/native-proof
querolita Jan 21, 2026
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
148 changes: 145 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ members = [
"mvpoly",
"o1vm",
"plonk-neon",
"plonk-napi",
"plonk-wasm",
"poly-commitment",
"poseidon",
Expand Down Expand Up @@ -61,6 +62,9 @@ libflate = "2"
log = "0.4.20"
num-bigint = { version = "0.4.4", features = ["rand", "serde"] }
num-integer = "0.1.45"
napi = { git = "https://github.com/o1-labs/napi-rs.git", rev = "023d1d4f31bd75e8ab55c95b5077a319b5208cdf", version = "3.3.0", default-features = false, features = ["napi7"] }
napi-derive = { git="https://github.com/o1-labs/napi-rs.git", rev = "023d1d4f31bd75e8ab55c95b5077a319b5208cdf", version = "3.3.0", features = ["type-def"] }
napi-build = "2.1.0"
ocaml = { version = "0.22.2" }
ocaml-gen = { version = "1.0.0" }
once_cell = "=1.21.3"
Expand Down
48 changes: 48 additions & 0 deletions plonk-napi/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
[package]
name = "plonk-napi"
version = "0.1.0"
authors = ["[email protected]"]
description = "Node-API bindings for plonk proof systems"
repository = "https://github.com/MinaProtocol/mina"
license = "MIT/Apache-2.0"
edition = "2021"

[lib]
name = "plonk_napi"
crate-type = ["cdylib"] # to generate a dynamic library that is loadable by Node

[dependencies]
napi = { workspace = true, features = ["napi7"] }
napi-derive.workspace = true

# arkworks
ark-ec.workspace = true
ark-ff.workspace = true
ark-poly.workspace = true
ark-serialize.workspace = true
arkworks.workspace = true

# proof-systems
mina-curves = { path = "../curves" }
mina-poseidon = { path = "../poseidon" }
o1-utils = { path = "../utils" }
plonk_wasm.workspace = true
poly-commitment = { path = "../poly-commitment" }

base64.workspace = true
getrandom.workspace = true
kimchi.workspace = true
libc.workspace = true
num-bigint.workspace = true
once_cell.workspace = true
paste.workspace = true
rand.workspace = true
rayon.workspace = true
rmp-serde.workspace = true
serde.workspace = true
serde_json.workspace = true
serde_with.workspace = true
wasm-types.workspace = true

[build-dependencies]
napi-build.workspace = true
3 changes: 3 additions & 0 deletions plonk-napi/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fn main() {
napi_build::setup();
}
41 changes: 41 additions & 0 deletions plonk-napi/src/build_info.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
use std::sync::atomic::{AtomicU64, Ordering};

use napi_derive::napi;

#[cfg(target_os = "windows")]
#[napi]
pub const OS_NAME: &str = "Windows";

#[cfg(target_os = "linux")]
#[napi]
pub const OS_NAME: &str = "Linux";

#[cfg(target_os = "macos")]
#[napi]
pub const OS_NAME: &str = "macOS";

#[cfg(target_arch = "x86_64")]
#[napi]
pub const ARCH_NAME: &str = "x86_64";

#[cfg(target_arch = "arm")]
#[napi]
pub const ARCH_NAME: &str = "ARM";

#[cfg(target_arch = "aarch64")]
#[napi]
pub const ARCH_NAME: &str = "AArch64";

#[napi]
pub const BACKING: &str = "native";

static NATIVE_CALLS: AtomicU64 = AtomicU64::new(0);

#[napi]
pub fn get_native_calls() -> u64 {
NATIVE_CALLS.load(Ordering::Relaxed)
}

pub(crate) fn report_native_call() {
NATIVE_CALLS.fetch_add(1, Ordering::Relaxed);
}
35 changes: 35 additions & 0 deletions plonk-napi/src/circuit.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
use crate::pasta_fp_plonk_index::WasmPastaFpPlonkIndex;
use ark_ff::PrimeField;
use kimchi::circuits::{constraints::ConstraintSystem, gate::CircuitGate};
use mina_curves::pasta::Fp;
use napi::bindgen_prelude::*;
use napi_derive::napi;
use serde::Serialize;

#[derive(Serialize)]
struct Circuit<F>
where
F: PrimeField,
{
public_input_size: usize,
#[serde(bound = "CircuitGate<F>: Serialize")]
gates: Vec<CircuitGate<F>>,
}

impl<F> From<&ConstraintSystem<F>> for Circuit<F>
where
F: PrimeField,
{
fn from(cs: &ConstraintSystem<F>) -> Self {
Self {
public_input_size: cs.public,
gates: cs.gates.to_vec(),
}
}
}

#[napi(js_name = "prover_to_json")]
pub fn prover_to_json(prover_index: &External<WasmPastaFpPlonkIndex>) -> String {
let circuit: Circuit<Fp> = prover_index.0.cs.as_ref().into();
serde_json::to_string(&circuit).expect("couldn't serialize constraints")
}
Loading