Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ members = [
"tooling/cli",
"tooling/provekit-bench",
"tooling/provekit-gnark",
"spark-prover",
]
exclude = [
"playground/passport-input-gen",
Expand Down
6 changes: 2 additions & 4 deletions provekit/common/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@ pub mod utils;
mod whir_r1cs;
pub mod witness;

use crate::{
interner::{InternedFieldElement, Interner},
sparse_matrix::{HydratedSparseMatrix, SparseMatrix},
};
use crate::interner::{InternedFieldElement, Interner};
pub use {
acir::FieldElement as NoirElement,
noir_proof_scheme::{NoirProof, NoirProofScheme},
r1cs::R1CS,
sparse_matrix::{HydratedSparseMatrix, SparseMatrix},
whir::crypto::fields::Field256 as FieldElement,
whir_r1cs::{IOPattern, WhirConfig, WhirR1CSProof, WhirR1CSScheme},
};
Expand Down
26 changes: 26 additions & 0 deletions spark-prover/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
[package]
name = "spark-prover"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true
authors.workspace = true
license.workspace = true
homepage.workspace = true
repository.workspace = true

[dependencies]
provekit-common.workspace = true
provekit-r1cs-compiler.workspace = true
serde_json.workspace = true
serde.workspace = true
anyhow.workspace = true
spongefish.workspace = true
whir.workspace = true
ark-std.workspace = true
ark-ff.workspace = true
itertools = "0.14.0"


[lints]
workspace = true

22 changes: 22 additions & 0 deletions spark-prover/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# SPARK
Experimental Rust prover and gnark recursive prover circuit will be implemented and optimized here.

## Running SPARK (under development)
```cargo run --bin spark-prover```

## Test R1CS generation (for development)
A development utility is provided to generate test matrices.
To generate a test R1CS, run the following command:

```cargo run -p spark-prover --bin generate_test_r1cs```

## Test request generation (for development)
A development utility is provided to generate test requests.
To generate a test request, run the following command:

```cargo run -p spark-prover --bin generate_test_request```

## Reference SPARK verifier (for development)
A reference SPARK verifier is implemented to test the correctness of the SPARK proof while being a reference implementation for the gnark verifier circuit.

```cargo run -p spark-prover --bin spark-verifier```
24 changes: 24 additions & 0 deletions spark-prover/src/bin/generate_test_r1cs.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
use {
provekit_common::{FieldElement, R1CS},
std::{fs::File, io::Write},
};

fn main() {
let mut r1cs = R1CS::new();
r1cs.grow_matrices(1024, 512);
let interned_1 = r1cs.interner.intern(FieldElement::from(1));

for i in 0..256 {
r1cs.a.set(i, i, interned_1);
r1cs.b.set(i, i, interned_1);
r1cs.c.set(i, i, interned_1);
}

let matrix_json =
serde_json::to_string(&r1cs).expect("Error: Failed to serialize R1CS to JSON");
let mut request_file =
File::create("spark-prover/r1cs.json").expect("Error: Failed to create the r1cs.json file");
request_file
.write_all(matrix_json.as_bytes())
.expect("Error: Failed to write JSON data to r1cs.json");
}
27 changes: 27 additions & 0 deletions spark-prover/src/bin/generate_test_request.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
use {
provekit_common::FieldElement,
spark_prover::utilities::{ClaimedValues, Point, SPARKRequest},
std::{fs::File, io::Write},
};

fn main() {
let spark_request = SPARKRequest {
point_to_evaluate: Point {
row: vec![FieldElement::from(0); 10],
col: vec![FieldElement::from(0); 9],
},
claimed_values: ClaimedValues {
a: FieldElement::from(1),
b: FieldElement::from(1),
c: FieldElement::from(1),
},
};

let request_json =
serde_json::to_string(&spark_request).expect("Error: Failed to serialize R1CS to JSON");
let mut request_file = File::create("spark-prover/request.json")
.expect("Error: Failed to create the request.json file");
request_file
.write_all(request_json.as_bytes())
.expect("Error: Failed to write JSON data to request.json");
}
Loading
Loading