mirror of
https://github.com/arnaucube/sonobe.git
synced 2026-01-24 04:53:51 +01:00
* Add solidity verifier of the nova+cyclefold, and add method to prepare the calldata from Decider's proof. Missing conversion of the point coordinates into limbs (ark compatible) * chore: adding comments linking to the contract's signature * chore: update .gitignore * chore: add num-bigint as dev dependency * fix: work with abs path for storing generated sol code * chore: update comment * feat: solidity verifier working on single and multi-input circuits * feat: multi-input folding verification working + fixing encoding of additive identity in calldata * chore: make bigint a dependency * refactor: import utils functions from utils.rs and make them available from anywhere * chore: make utils and evm available publicly * fix: pub mod instead * chore: make relevant method public and add `get_decider_template_for_cyclefold_decider` to exported objects * solidity-verifiers: move tests to their corresponding files * small update: Cyclefold -> CycleFold at the missing places * abstract nova-cyclefold solidity verifiers tests to avoid code duplication, and abstract also the computed setup params (FS & Decider) to compute them only once for all related tests to save test time * small polish after rebase to last main branch changes * rm unneeded Option for KZGData::g1_crs_batch_points * add checks modifying z_0 & z_i to nova_cyclefold_solidity_verifier test * add light-test feature to decider_eth_circuit to use it in solidity-verifier tests without the big circuit * solidity-verifiers: groth16 template: port the fix from https://github.com/iden3/snarkjs/pull/480 & https://github.com/iden3/snarkjs/issues/479 * add print warning msg for light-test in DeciderEthCircuit * solidity-verifiers: update limbs logic to nonnative last version, parametrize limbs params solidity-verifiers: * update solidity limbs logic to last nonnative impl version, and to last u_i.x impl * parametrize limbs params * add light-test feature: replace the '#[cfg(not(test))]' by the 'light-test' feature that by default is not enabled, so when running the github actions we enable the feature 'light-tests', and then we can have a full-test that runs the test without the 'light-tests' flag, but we don't run this big test every time. The choice of a feature is to allow us to control this from other-crates tests (for example for the solidity-verifier separated crate tests, to avoid running the full heavy circuit in the solidity tests) * move solidity constants into template constants for auto compute of params * polishing * revm use only needed feature This is to avoid c depencency for c-kzg which is behind the c-kzg flag and not needed. * nova_cyclefold_decider.sol header * rearrange test helpers position, add error for min number of steps * in solidity-verifiers: 'data'->'vk/verifier key' * add From for NovaCycleFoldVerifierKey from original vks to simplify dev flow, also conditionally template the batchCheck related structs and methods from the KZG10 solidity template --------- Co-authored-by: dmpierre <pdaixmoreux@gmail.com>
37 lines
1.1 KiB
Rust
37 lines
1.1 KiB
Rust
use ::clap::Parser;
|
|
use ark_serialize::Write;
|
|
use settings::Cli;
|
|
use std::path::Path;
|
|
use std::{fs, io};
|
|
|
|
mod settings;
|
|
|
|
fn create_or_open_then_write<T: AsRef<[u8]>>(path: &Path, content: &T) -> Result<(), io::Error> {
|
|
let mut file = fs::OpenOptions::new().create(true).write(true).open(path)?;
|
|
file.write_all(content.as_ref())
|
|
}
|
|
|
|
fn main() {
|
|
let cli = Cli::parse();
|
|
|
|
// generate a subscriber with the desired log level
|
|
env_logger::builder()
|
|
.format_timestamp_secs()
|
|
.filter_level(cli.verbosity.log_level_filter())
|
|
.init();
|
|
|
|
let out_path = cli.out;
|
|
|
|
// Fetch the exact protocol for which we need to generate the Decider verifier contract.
|
|
let protocol = cli.protocol;
|
|
// Fetch the protocol data passed by the user from the file.
|
|
let protocol_vk = std::fs::read(cli.protocol_vk).unwrap();
|
|
|
|
// Generate the Solidity Verifier contract for the selected protocol with the given data.
|
|
create_or_open_then_write(
|
|
&out_path,
|
|
&protocol.render(&protocol_vk, cli.pragma).unwrap(),
|
|
)
|
|
.unwrap();
|
|
}
|