Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 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
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
f5110b8
fix naming
Trivo25 Nov 14, 2025
b0af5c1
Merge pull request #3366 from o1-labs/florian/native-proof-2
querolita Nov 17, 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
145 changes: 143 additions & 2 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
47 changes: 47 additions & 0 deletions plonk-napi/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
[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" }
poly-commitment = { path = "../poly-commitment" }
plonk_wasm.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);
}
37 changes: 37 additions & 0 deletions plonk-napi/src/circuit.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
use crate::{build_info::report_native_call, 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 {
report_native_call();

let circuit: Circuit<Fp> = prover_index.0.cs.as_ref().into();
serde_json::to_string(&circuit).expect("couldn't serialize constraints")
}
Loading