From 5f76a0316b932f75071fbf542862980ed3acd46a Mon Sep 17 00:00:00 2001 From: schaeff Date: Mon, 30 Nov 2020 23:10:36 +0000 Subject: [PATCH] featurize zokrates_core --- Cargo.lock | 5 +- zokrates_cli/Cargo.toml | 1 + zokrates_cli/src/bin.rs | 32 +++++++++-- zokrates_cli/src/constants.rs | 38 ++++++++++--- zokrates_cli/src/helpers.rs | 13 ++++- zokrates_core/Cargo.toml | 7 +-- zokrates_core/src/absy/from_ast.rs | 56 +++++++++---------- zokrates_core/src/absy/mod.rs | 2 +- zokrates_core/src/absy/node.rs | 4 +- zokrates_core/src/absy/types.rs | 8 +-- zokrates_core/src/compile.rs | 22 ++++---- zokrates_core/src/embed.rs | 6 +- zokrates_core/src/flat_absy/flat_parameter.rs | 2 +- zokrates_core/src/flat_absy/flat_variable.rs | 1 + zokrates_core/src/flat_absy/mod.rs | 4 +- zokrates_core/src/ir/expression.rs | 1 + zokrates_core/src/ir/interpreter.rs | 5 +- zokrates_core/src/ir/mod.rs | 1 + zokrates_core/src/ir/serialize.rs | 4 +- zokrates_core/src/lib.rs | 3 - zokrates_core/src/optimizer/directive.rs | 2 +- zokrates_core/src/optimizer/duplicate.rs | 2 +- zokrates_core/src/parser/tokenize/position.rs | 2 +- zokrates_core/src/proof_system/ark/gm17.rs | 12 ++-- zokrates_core/src/proof_system/ark/mod.rs | 2 +- .../src/proof_system/bellman/groth16.rs | 12 ++-- zokrates_core/src/proof_system/bellman/mod.rs | 4 +- .../src/proof_system/libsnark/gm17.rs | 12 ++-- .../src/proof_system/libsnark/mod.rs | 6 +- .../src/proof_system/libsnark/pghr13.rs | 14 ++--- zokrates_core/src/proof_system/mod.rs | 3 +- zokrates_core/src/proof_system/scheme/gm17.rs | 7 ++- .../src/proof_system/scheme/groth16.rs | 7 ++- .../src/proof_system/scheme/pghr13.rs | 7 ++- zokrates_core/src/proof_system/solidity.rs | 2 +- zokrates_core/src/semantics.rs | 6 +- zokrates_core/src/solvers/mod.rs | 1 + .../static_analysis/flatten_complex_types.rs | 10 ++-- zokrates_core/src/static_analysis/inline.rs | 6 +- zokrates_core/src/static_analysis/mod.rs | 2 +- .../src/static_analysis/propagate_unroll.rs | 10 ++-- .../src/static_analysis/propagation.rs | 2 +- .../src/static_analysis/return_binder.rs | 6 +- .../src/static_analysis/uint_optimizer.rs | 2 +- .../src/static_analysis/unconstrained_vars.rs | 12 ++-- zokrates_core/src/static_analysis/unroll.rs | 2 +- .../variable_access_remover.rs | 2 +- zokrates_core/src/typed_absy/abi.rs | 10 ++-- zokrates_core/src/typed_absy/identifier.rs | 4 +- zokrates_core/src/typed_absy/mod.rs | 6 +- zokrates_core/src/typed_absy/types.rs | 1 + zokrates_core/src/typed_absy/uint.rs | 4 +- zokrates_core/src/typed_absy/variable.rs | 2 +- zokrates_core/src/zir/from_typed.rs | 4 +- zokrates_core/src/zir/identifier.rs | 4 +- zokrates_core/src/zir/mod.rs | 6 +- zokrates_core/src/zir/parameter.rs | 2 +- zokrates_core/src/zir/types.rs | 1 + zokrates_core/src/zir/uint.rs | 6 +- zokrates_core/src/zir/variable.rs | 4 +- zokrates_field/src/bls12_381.rs | 7 +-- zokrates_field/src/bn128.rs | 11 ++-- zokrates_field/src/bw6_761.rs | 4 +- 63 files changed, 253 insertions(+), 193 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 01a47f43..b1c0fb00 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1578,6 +1578,9 @@ name = "serde" version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_derive" @@ -2042,6 +2045,7 @@ version = "0.6.2" dependencies = [ "assert_cli", "bincode", + "cfg-if 0.1.10", "clap", "dirs", "fs_extra", @@ -2090,7 +2094,6 @@ dependencies = [ "reduce", "regex", "serde", - "serde_derive", "serde_json", "typed-arena", "wasm-bindgen-test", diff --git a/zokrates_cli/Cargo.toml b/zokrates_cli/Cargo.toml index 9d437675..3a729f4b 100644 --- a/zokrates_cli/Cargo.toml +++ b/zokrates_cli/Cargo.toml @@ -12,6 +12,7 @@ bellman = ["zokrates_core/bellman"] ark = ["zokrates_core/ark"] [dependencies] +cfg-if = "0.1" clap = "2.26.2" bincode = "0.8.0" regex = "0.2" diff --git a/zokrates_cli/src/bin.rs b/zokrates_cli/src/bin.rs index 519a0b87..dd797d20 100644 --- a/zokrates_cli/src/bin.rs +++ b/zokrates_cli/src/bin.rs @@ -21,18 +21,24 @@ use std::string::String; use zokrates_abi::Encode; use zokrates_core::compile::{check, compile, CompilationArtifacts, CompileError}; use zokrates_core::ir::{self, ProgEnum}; + use zokrates_core::proof_system::{ - ark::Ark, bellman::Bellman, gm17::GM17, groth16::G16, SolidityCompatibleField, + gm17::GM17, groth16::G16, pghr13::PGHR13, SolidityCompatibleField, }; -use zokrates_core::proof_system::{Backend, Scheme, SolidityAbi, SolidityCompatibleScheme}; +use zokrates_core::proof_system::{SolidityAbi, SolidityCompatibleScheme}; use zokrates_core::typed_absy::abi::Abi; use zokrates_core::typed_absy::{types::Signature, Type}; use zokrates_field::{Bls12_377Field, Bls12_381Field, Bn128Field, Bw6_761Field, Field}; use zokrates_fs_resolver::FileSystemResolver; + +#[cfg(feature = "ark")] +use zokrates_core::proof_system::ark::Ark; +#[cfg(feature = "bellman")] +use zokrates_core::proof_system::bellman::Bellman; #[cfg(feature = "libsnark")] -use { - zokrates_core::proof_system::libsnark::Libsnark, zokrates_core::proof_system::pghr13::PGHR13, -}; +use zokrates_core::proof_system::libsnark::Libsnark; +#[cfg(any(feature = "bellman", feature = "ark", feature = "libsnark"))] +use zokrates_core::proof_system::{Backend, Scheme}; fn main() { cli().unwrap_or_else(|e| { @@ -41,6 +47,7 @@ fn main() { }) } +#[cfg(any(feature = "bellman", feature = "ark", feature = "libsnark"))] fn cli_generate_proof, B: Backend>( program: ir::Prog, sub_matches: &ArgMatches, @@ -115,6 +122,7 @@ fn cli_export_verifier, B: Backend>( program: ir::Prog, sub_matches: &ArgMatches, @@ -397,6 +405,7 @@ fn cli_check(sub_matches: &ArgMatches) -> Result<(), String> { Ok(()) } +#[cfg(any(feature = "bellman", feature = "ark", feature = "libsnark"))] fn cli_verify, B: Backend>( sub_matches: &ArgMatches, ) -> Result<(), String> { @@ -821,6 +830,7 @@ fn cli() -> Result<(), String> { ProgEnum::Bw6_761Program(p) => cli_compute(p, sub_matches)?, } } + #[cfg(any(feature = "bellman", feature = "ark", feature = "libsnark"))] ("setup", Some(sub_matches)) => { // read compiled program let path = Path::new(sub_matches.value_of("input").unwrap()); @@ -842,11 +852,13 @@ fn cli() -> Result<(), String> { ))?; match parameters { + #[cfg(feature = "bellman")] Parameters(BackendParameter::Bellman, _, SchemeParameter::G16) => match prog { ProgEnum::Bn128Program(p) => cli_setup::<_, G16, Bellman>(p, sub_matches), ProgEnum::Bls12_381Program(p) => cli_setup::<_, G16, Bellman>(p, sub_matches), _ => unreachable!(), }, + #[cfg(feature = "ark")] Parameters(BackendParameter::Ark, _, SchemeParameter::GM17) => match prog { ProgEnum::Bls12_377Program(p) => cli_setup::<_, GM17, Ark>(p, sub_matches), ProgEnum::Bw6_761Program(p) => cli_setup::<_, GM17, Ark>(p, sub_matches), @@ -887,13 +899,13 @@ fn cli() -> Result<(), String> { (CurveParameter::Bn128, SchemeParameter::GM17) => { cli_export_verifier::(sub_matches) } - #[cfg(feature = "libsnark")] (CurveParameter::Bn128, SchemeParameter::PGHR13) => { cli_export_verifier::(sub_matches) } _ => Err(format!("Could not export verifier with given parameters (curve: {}, scheme: {}): not supported", curve, scheme)) }? } + #[cfg(any(feature = "bellman", feature = "ark", feature = "libsnark"))] ("generate-proof", Some(sub_matches)) => { let program_path = Path::new(sub_matches.value_of("input").unwrap()); let program_file = File::open(&program_path) @@ -914,6 +926,7 @@ fn cli() -> Result<(), String> { ))?; match parameters { + #[cfg(feature = "bellman")] Parameters(BackendParameter::Bellman, _, SchemeParameter::G16) => match prog { ProgEnum::Bn128Program(p) => { cli_generate_proof::<_, G16, Bellman>(p, sub_matches) @@ -923,6 +936,7 @@ fn cli() -> Result<(), String> { } _ => unreachable!(), }, + #[cfg(feature = "ark")] Parameters(BackendParameter::Ark, _, SchemeParameter::GM17) => match prog { ProgEnum::Bls12_377Program(p) => { cli_generate_proof::<_, GM17, Ark>(p, sub_matches) @@ -994,6 +1008,7 @@ fn cli() -> Result<(), String> { _ => unreachable!(), } } + #[cfg(any(feature = "bellman", feature = "ark", feature = "libsnark"))] ("verify", Some(sub_matches)) => { let parameters = Parameters::try_from(( sub_matches.value_of("backend").unwrap(), @@ -1002,26 +1017,31 @@ fn cli() -> Result<(), String> { ))?; match parameters { + #[cfg(feature = "bellman")] Parameters( BackendParameter::Bellman, CurveParameter::Bn128, SchemeParameter::G16, ) => cli_verify::(sub_matches), + #[cfg(feature = "bellman")] Parameters( BackendParameter::Bellman, CurveParameter::Bls12_381, SchemeParameter::G16, ) => cli_verify::(sub_matches), + #[cfg(feature = "ark")] Parameters( BackendParameter::Ark, CurveParameter::Bls12_377, SchemeParameter::GM17, ) => cli_verify::(sub_matches), + #[cfg(feature = "ark")] Parameters( BackendParameter::Ark, CurveParameter::Bw6_761, SchemeParameter::GM17, ) => cli_verify::(sub_matches), + #[cfg(feature = "ark")] Parameters(BackendParameter::Ark, CurveParameter::Bn128, SchemeParameter::GM17) => { cli_verify::(sub_matches) } diff --git a/zokrates_cli/src/constants.rs b/zokrates_cli/src/constants.rs index ee8f61e4..fba1b3e0 100644 --- a/zokrates_cli/src/constants.rs +++ b/zokrates_cli/src/constants.rs @@ -1,12 +1,36 @@ pub const BELLMAN: &str = "bellman"; -#[cfg(feature = "libsnark")] pub const LIBSNARK: &str = "libsnark"; pub const ARK: &str = "ark"; -#[cfg(feature = "libsnark")] -pub const BACKENDS: &[&str] = &[BELLMAN, LIBSNARK, ARK]; -#[cfg(not(feature = "libsnark"))] -pub const BACKENDS: &[&str] = &[BELLMAN, ARK]; +pub const BACKENDS: &[&str] = if cfg!(feature = "libsnark") { + if cfg!(feature = "ark") { + if cfg!(feature = "bellman") { + &[BELLMAN, LIBSNARK, ARK] + } else { + &[LIBSNARK, ARK] + } + } else { + if cfg!(feature = "bellman") { + &[BELLMAN, LIBSNARK] + } else { + &[LIBSNARK] + } + } +} else { + if cfg!(feature = "ark") { + if cfg!(feature = "bellman") { + &[BELLMAN, ARK] + } else { + &[ARK] + } + } else { + if cfg!(feature = "bellman") { + &[BELLMAN] + } else { + &[] + } + } +}; pub const BN128: &str = "bn128"; pub const BLS12_381: &str = "bls12_381"; @@ -15,11 +39,7 @@ pub const BW6_761: &str = "bw6_761"; pub const CURVES: &[&str] = &[BN128, BLS12_381, BLS12_377, BW6_761]; pub const G16: &str = "g16"; -#[cfg(feature = "libsnark")] pub const PGHR13: &str = "pghr13"; pub const GM17: &str = "gm17"; -#[cfg(feature = "libsnark")] pub const SCHEMES: &[&str] = &[G16, PGHR13, GM17]; -#[cfg(not(feature = "libsnark"))] -pub const SCHEMES: &[&str] = &[G16, GM17]; diff --git a/zokrates_cli/src/helpers.rs b/zokrates_cli/src/helpers.rs index afbc0cb4..a8cc0d6a 100644 --- a/zokrates_cli/src/helpers.rs +++ b/zokrates_cli/src/helpers.rs @@ -11,7 +11,9 @@ pub enum CurveParameter { } pub enum BackendParameter { + #[cfg(feature = "bellman")] Bellman, + #[cfg(feature = "ark")] Ark, #[cfg(feature = "libsnark")] Libsnark, @@ -20,7 +22,6 @@ pub enum BackendParameter { pub enum SchemeParameter { G16, GM17, - #[cfg(feature = "libsnark")] PGHR13, } @@ -43,7 +44,9 @@ impl TryFrom<&str> for BackendParameter { fn try_from(s: &str) -> Result { match s { + #[cfg(feature = "bellman")] BELLMAN => Ok(BackendParameter::Bellman), + #[cfg(feature = "ark")] ARK => Ok(BackendParameter::Ark), #[cfg(feature = "libsnark")] LIBSNARK => Ok(BackendParameter::Libsnark), @@ -59,7 +62,6 @@ impl TryFrom<&str> for SchemeParameter { match s { G16 => Ok(SchemeParameter::G16), GM17 => Ok(SchemeParameter::GM17), - #[cfg(feature = "libsnark")] PGHR13 => Ok(SchemeParameter::PGHR13), _ => Err(format!("Unknown proving scheme {}", s)), } @@ -81,10 +83,15 @@ impl TryFrom<(&str, &str, &str)> for Parameters { let proving_scheme = SchemeParameter::try_from(s.2)?; match (&backend, &curve, &proving_scheme) { + #[cfg(feature = "bellman")] (BackendParameter::Bellman, CurveParameter::Bn128, SchemeParameter::G16) => Ok(()), + #[cfg(feature = "bellman")] (BackendParameter::Bellman, CurveParameter::Bls12_381, SchemeParameter::G16) => Ok(()), + #[cfg(feature = "ark")] (BackendParameter::Ark, CurveParameter::Bls12_377, SchemeParameter::GM17) => Ok(()), + #[cfg(feature = "ark")] (BackendParameter::Ark, CurveParameter::Bw6_761, SchemeParameter::GM17) => Ok(()), + #[cfg(feature = "ark")] (BackendParameter::Ark, CurveParameter::Bn128, SchemeParameter::GM17) => Ok(()), #[cfg(feature = "libsnark")] (BackendParameter::Libsnark, CurveParameter::Bn128, SchemeParameter::GM17) => Ok(()), @@ -94,6 +101,6 @@ impl TryFrom<(&str, &str, &str)> for Parameters { "Unsupported combination of parameters (backend: {}, curve: {}, proving scheme: {})", s.0, s.1, s.2 )), - }.map(|_| Parameters(backend, curve, proving_scheme)) + }.map(|_: ()| Parameters(backend, curve, proving_scheme)) } } diff --git a/zokrates_core/Cargo.toml b/zokrates_core/Cargo.toml index a8d0ce15..6c90ee4b 100644 --- a/zokrates_core/Cargo.toml +++ b/zokrates_core/Cargo.toml @@ -10,10 +10,10 @@ build = "build.rs" [features] default = [] libsnark = ["cc", "cmake", "git2"] -bellman = ["bellman_ce"] +bellman = ["bellman_ce", "pairing_ce", "ff_ce", "zokrates_field/bellman"] wasm = ["bellman_ce/nolog", "bellman_ce/wasm"] multicore = ["bellman_ce/multicore"] -ark = ["ark-ff", "ark-ec", "ark-bn254", "ark-bls12-377", "ark-bw6-761", "ark-gm17", "ark-serialize", "ark-relations"] +ark = ["ark-ff", "ark-ec", "ark-bn254", "ark-bls12-377", "ark-bw6-761", "ark-gm17", "ark-serialize", "ark-relations", "zokrates_field/ark"] [dependencies] cfg-if = "0.1" @@ -23,8 +23,7 @@ lazy_static = "1.4" typed-arena = "1.4.1" reduce = "0.1.1" # serialization and deserialization -serde = "1.0" -serde_derive = "1.0" +serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" bincode = "0.8.0" hex = "0.4.2" diff --git a/zokrates_core/src/absy/from_ast.rs b/zokrates_core/src/absy/from_ast.rs index 1e9522ad..5fbed664 100644 --- a/zokrates_core/src/absy/from_ast.rs +++ b/zokrates_core/src/absy/from_ast.rs @@ -1,5 +1,5 @@ -use absy; -use imports; +use crate::absy; +use crate::imports; use num::ToPrimitive; use num_bigint::BigUint; @@ -23,7 +23,7 @@ impl<'ast> From> for absy::Module<'ast> { impl<'ast> From> for absy::ImportNode<'ast> { fn from(import: pest::ImportDirective<'ast>) -> absy::ImportNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; match import { pest::ImportDirective::Main(import) => { @@ -48,7 +48,7 @@ impl<'ast> From> for absy::ImportNode<'ast> { impl<'ast> From> for absy::SymbolDeclarationNode<'ast> { fn from(definition: pest::StructDefinition<'ast>) -> absy::SymbolDeclarationNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; let span = definition.span; @@ -73,7 +73,7 @@ impl<'ast> From> for absy::SymbolDeclarationNode<'a impl<'ast> From> for absy::StructDefinitionFieldNode<'ast> { fn from(field: pest::StructField<'ast>) -> absy::StructDefinitionFieldNode { - use absy::NodeValue; + use crate::absy::NodeValue; let span = field.span; @@ -87,7 +87,7 @@ impl<'ast> From> for absy::StructDefinitionFieldNode<'as impl<'ast> From> for absy::SymbolDeclarationNode<'ast> { fn from(function: pest::Function<'ast>) -> absy::SymbolDeclarationNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; let span = function.span; @@ -136,7 +136,7 @@ impl<'ast> From> for absy::SymbolDeclarationNode<'ast> { impl<'ast> From> for absy::ParameterNode<'ast> { fn from(param: pest::Parameter<'ast>) -> absy::ParameterNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; let private = param .visibility @@ -166,7 +166,7 @@ fn statements_from_statement(statement: pest::Statement) -> Vec Vec { - use absy::NodeValue; + use crate::absy::NodeValue; let lhs = definition.lhs; @@ -240,7 +240,7 @@ fn statements_from_definition(definition: pest::DefinitionStatement) -> Vec From> for absy::StatementNode<'ast> { fn from(statement: pest::ReturnStatement<'ast>) -> absy::StatementNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; absy::Statement::Return( absy::ExpressionList { @@ -258,7 +258,7 @@ impl<'ast> From> for absy::StatementNode<'ast> { impl<'ast> From> for absy::StatementNode<'ast> { fn from(statement: pest::AssertionStatement<'ast>) -> absy::StatementNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; absy::Statement::Assertion(absy::ExpressionNode::from(statement.expression)) .span(statement.span) @@ -267,7 +267,7 @@ impl<'ast> From> for absy::StatementNode<'ast> { impl<'ast> From> for absy::StatementNode<'ast> { fn from(statement: pest::IterationStatement<'ast>) -> absy::StatementNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; let from = absy::ExpressionNode::from(statement.from); let to = absy::ExpressionNode::from(statement.to); let index = statement.index.span.as_str(); @@ -302,7 +302,7 @@ impl<'ast> From> for absy::ExpressionNode<'ast> { impl<'ast> From> for absy::ExpressionNode<'ast> { fn from(expression: pest::BinaryExpression<'ast>) -> absy::ExpressionNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; match expression.op { pest::BinaryOperator::Add => absy::Expression::Add( box absy::ExpressionNode::from(*expression.left), @@ -391,7 +391,7 @@ impl<'ast> From> for absy::ExpressionNode<'ast> { impl<'ast> From> for absy::ExpressionNode<'ast> { fn from(expression: pest::TernaryExpression<'ast>) -> absy::ExpressionNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; absy::Expression::IfElse( box absy::ExpressionNode::from(*expression.first), box absy::ExpressionNode::from(*expression.second), @@ -403,7 +403,7 @@ impl<'ast> From> for absy::ExpressionNode<'ast> { impl<'ast> From> for absy::SpreadNode<'ast> { fn from(spread: pest::Spread<'ast>) -> absy::SpreadNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; absy::Spread { expression: absy::ExpressionNode::from(spread.expression), } @@ -413,7 +413,7 @@ impl<'ast> From> for absy::SpreadNode<'ast> { impl<'ast> From> for absy::RangeNode<'ast> { fn from(range: pest::Range<'ast>) -> absy::RangeNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; let from = range.from.map(|e| absy::ExpressionNode::from(e.0)); @@ -453,7 +453,7 @@ impl<'ast> From> for absy::SpreadOrExpression<'as impl<'ast> From> for absy::ExpressionNode<'ast> { fn from(array: pest::InlineArrayExpression<'ast>) -> absy::ExpressionNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; absy::Expression::InlineArray( array .expressions @@ -467,7 +467,7 @@ impl<'ast> From> for absy::ExpressionNode<'ast impl<'ast> From> for absy::ExpressionNode<'ast> { fn from(s: pest::InlineStructExpression<'ast>) -> absy::ExpressionNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; absy::Expression::InlineStruct( s.ty.span.as_str().to_string(), s.members @@ -486,7 +486,7 @@ impl<'ast> From> for absy::ExpressionNode<'as impl<'ast> From> for absy::ExpressionNode<'ast> { fn from(initializer: pest::ArrayInitializerExpression<'ast>) -> absy::ExpressionNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; let value = absy::ExpressionNode::from(*initializer.value); let count: absy::ExpressionNode<'ast> = absy::ExpressionNode::from(initializer.count); @@ -501,7 +501,7 @@ impl<'ast> From> for absy::ExpressionNode impl<'ast> From> for absy::ExpressionNode<'ast> { fn from(unary: pest::UnaryExpression<'ast>) -> absy::ExpressionNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; match unary.op { pest::UnaryOperator::Not(_) => { @@ -514,7 +514,7 @@ impl<'ast> From> for absy::ExpressionNode<'ast> { impl<'ast> From> for absy::ExpressionNode<'ast> { fn from(expression: pest::PostfixExpression<'ast>) -> absy::ExpressionNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; let id_str = expression.id.span.as_str(); let id = absy::ExpressionNode::from(expression.id); @@ -548,7 +548,7 @@ impl<'ast> From> for absy::ExpressionNode<'ast> { impl<'ast> From> for absy::ExpressionNode<'ast> { fn from(expression: pest::ConstantExpression<'ast>) -> absy::ExpressionNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; match expression { pest::ConstantExpression::BooleanLiteral(c) => { absy::Expression::BooleanConstant(c.value.parse().unwrap()).span(c.span) @@ -575,14 +575,14 @@ impl<'ast> From> for absy::ExpressionNode<'ast> { impl<'ast> From> for absy::ExpressionNode<'ast> { fn from(expression: pest::IdentifierExpression<'ast>) -> absy::ExpressionNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; absy::Expression::Identifier(expression.span.as_str()).span(expression.span) } } impl<'ast> From> for absy::AssigneeNode<'ast> { fn from(expression: pest::IdentifierExpression<'ast>) -> absy::AssigneeNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; absy::Assignee::Identifier(expression.span.as_str()).span(expression.span) } @@ -590,7 +590,7 @@ impl<'ast> From> for absy::AssigneeNode<'ast> { impl<'ast> From> for absy::AssigneeNode<'ast> { fn from(assignee: pest::Assignee<'ast>) -> absy::AssigneeNode<'ast> { - use absy::NodeValue; + use crate::absy::NodeValue; let a = absy::AssigneeNode::from(assignee.id); let span = assignee.span; @@ -611,8 +611,8 @@ impl<'ast> From> for absy::AssigneeNode<'ast> { impl<'ast> From> for absy::UnresolvedTypeNode { fn from(t: pest::Type<'ast>) -> absy::UnresolvedTypeNode { - use absy::types::UnresolvedType; - use absy::NodeValue; + use crate::absy::types::UnresolvedType; + use crate::absy::NodeValue; match t { pest::Type::Basic(t) => match t { @@ -673,8 +673,8 @@ impl<'ast> From> for absy::UnresolvedTypeNode { #[cfg(test)] mod tests { use super::*; - use absy::types::{UnresolvedSignature, UnresolvedType}; - use absy::NodeValue; + use crate::absy::types::{UnresolvedSignature, UnresolvedType}; + use crate::absy::NodeValue; #[test] fn return_forty_two() { diff --git a/zokrates_core/src/absy/mod.rs b/zokrates_core/src/absy/mod.rs index 7914e236..a497c374 100644 --- a/zokrates_core/src/absy/mod.rs +++ b/zokrates_core/src/absy/mod.rs @@ -15,7 +15,7 @@ pub use crate::absy::node::{Node, NodeValue}; pub use crate::absy::parameter::{Parameter, ParameterNode}; use crate::absy::types::{FunctionIdentifier, UnresolvedSignature, UnresolvedType, UserTypeId}; pub use crate::absy::variable::{Variable, VariableNode}; -use embed::FlatEmbed; +use crate::embed::FlatEmbed; use std::path::PathBuf; use crate::imports::ImportNode; diff --git a/zokrates_core/src/absy/node.rs b/zokrates_core/src/absy/node.rs index a2f59ecf..cf8d3fb4 100644 --- a/zokrates_core/src/absy/node.rs +++ b/zokrates_core/src/absy/node.rs @@ -2,7 +2,7 @@ use crate::parser::Position; use std::fmt; use zokrates_pest_ast::Span; -#[derive(Clone, Serialize, Deserialize)] +#[derive(Clone)] pub struct Node { pub start: Position, pub end: Position, @@ -72,9 +72,9 @@ impl From for Node { } } +use crate::absy::types::UnresolvedType; use crate::absy::*; use crate::imports::*; -use absy::types::UnresolvedType; impl<'ast> NodeValue for Expression<'ast> {} impl<'ast> NodeValue for ExpressionList<'ast> {} diff --git a/zokrates_core/src/absy/types.rs b/zokrates_core/src/absy/types.rs index a6900ece..49658fa2 100644 --- a/zokrates_core/src/absy/types.rs +++ b/zokrates_core/src/absy/types.rs @@ -1,4 +1,4 @@ -use absy::UnresolvedTypeNode; +use crate::absy::UnresolvedTypeNode; use std::fmt; pub type Identifier<'ast> = &'ast str; @@ -7,7 +7,7 @@ pub type MemberId = String; pub type UserTypeId = String; -#[derive(Clone, PartialEq, Serialize, Deserialize, Debug)] +#[derive(Clone, PartialEq, Debug)] pub enum UnresolvedType { FieldElement, Boolean, @@ -41,9 +41,9 @@ pub use self::signature::UnresolvedSignature; mod signature { use std::fmt; - use absy::UnresolvedTypeNode; + use crate::absy::UnresolvedTypeNode; - #[derive(Clone, PartialEq, Serialize, Deserialize)] + #[derive(Clone, PartialEq)] pub struct UnresolvedSignature { pub inputs: Vec, pub outputs: Vec, diff --git a/zokrates_core/src/compile.rs b/zokrates_core/src/compile.rs index 0653f406..75dd02d2 100644 --- a/zokrates_core/src/compile.rs +++ b/zokrates_core/src/compile.rs @@ -3,21 +3,21 @@ //! @file compile.rs //! @author Thibaut Schaeffer //! @date 2018 -use absy::{Module, ModuleId, Program}; -use flatten::Flattener; -use imports::{self, Importer}; -use ir; -use macros; +use crate::absy::{Module, ModuleId, Program}; +use crate::flatten::Flattener; +use crate::imports::{self, Importer}; +use crate::ir; +use crate::macros; +use crate::semantics::{self, Checker}; +use crate::static_analysis::Analyse; +use crate::typed_absy::abi::Abi; +use crate::zir::ZirProgram; use macros::process_macros; -use semantics::{self, Checker}; -use static_analysis::Analyse; use std::collections::HashMap; use std::fmt; use std::io; use std::path::PathBuf; -use typed_absy::abi::Abi; use typed_arena::Arena; -use zir::ZirProgram; use zokrates_common::Resolver; use zokrates_field::Field; use zokrates_pest_ast as pest; @@ -287,8 +287,8 @@ mod test { mod abi { use super::*; - use typed_absy::abi::*; - use typed_absy::types::*; + use crate::typed_absy::abi::*; + use crate::typed_absy::types::*; #[test] fn use_struct_declaration_types() { diff --git a/zokrates_core/src/embed.rs b/zokrates_core/src/embed.rs index 48284e3d..c3a8c3e0 100644 --- a/zokrates_core/src/embed.rs +++ b/zokrates_core/src/embed.rs @@ -1,10 +1,10 @@ -use crate::solvers::Solver; -use flat_absy::{ +use crate::flat_absy::{ FlatDirective, FlatExpression, FlatExpressionList, FlatFunction, FlatParameter, FlatStatement, FlatVariable, }; +use crate::solvers::Solver; +use crate::typed_absy::types::{FunctionKey, Signature, Type}; use std::collections::HashMap; -use typed_absy::types::{FunctionKey, Signature, Type}; use zokrates_field::Field; /// A low level function that contains non-deterministic introduction of variables. It is carried out as is until diff --git a/zokrates_core/src/flat_absy/flat_parameter.rs b/zokrates_core/src/flat_absy/flat_parameter.rs index 1e8d8ef7..788a3ac4 100644 --- a/zokrates_core/src/flat_absy/flat_parameter.rs +++ b/zokrates_core/src/flat_absy/flat_parameter.rs @@ -2,7 +2,7 @@ use crate::flat_absy::flat_variable::FlatVariable; use std::collections::HashMap; use std::fmt; -#[derive(Clone, PartialEq, Serialize, Deserialize)] +#[derive(Clone, PartialEq)] pub struct FlatParameter { pub id: FlatVariable, pub private: bool, diff --git a/zokrates_core/src/flat_absy/flat_variable.rs b/zokrates_core/src/flat_absy/flat_variable.rs index 8a85998c..5fc96c96 100644 --- a/zokrates_core/src/flat_absy/flat_variable.rs +++ b/zokrates_core/src/flat_absy/flat_variable.rs @@ -1,3 +1,4 @@ +use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::fmt; diff --git a/zokrates_core/src/flat_absy/mod.rs b/zokrates_core/src/flat_absy/mod.rs index bf21e104..b96c0c22 100644 --- a/zokrates_core/src/flat_absy/mod.rs +++ b/zokrates_core/src/flat_absy/mod.rs @@ -11,7 +11,7 @@ pub mod flat_variable; pub use self::flat_parameter::FlatParameter; pub use self::flat_variable::FlatVariable; -use solvers::Solver; +use crate::solvers::Solver; use std::collections::HashMap; use std::fmt; use zokrates_field::Field; @@ -209,7 +209,7 @@ impl fmt::Display for FlatDirective { } } -#[derive(Clone, PartialEq, Serialize, Deserialize, Eq, Hash)] +#[derive(Clone, PartialEq, Eq, Hash)] pub enum FlatExpression { Number(T), Identifier(FlatVariable), diff --git a/zokrates_core/src/ir/expression.rs b/zokrates_core/src/ir/expression.rs index 800ff241..3a426141 100644 --- a/zokrates_core/src/ir/expression.rs +++ b/zokrates_core/src/ir/expression.rs @@ -1,4 +1,5 @@ use crate::flat_absy::FlatVariable; +use serde::{Deserialize, Serialize}; use std::collections::btree_map::{BTreeMap, Entry}; use std::fmt; use std::ops::{Add, Div, Mul, Sub}; diff --git a/zokrates_core/src/ir/interpreter.rs b/zokrates_core/src/ir/interpreter.rs index da4d97ac..3af7faf6 100644 --- a/zokrates_core/src/ir/interpreter.rs +++ b/zokrates_core/src/ir/interpreter.rs @@ -1,7 +1,8 @@ use crate::flat_absy::flat_variable::FlatVariable; +use crate::ir::Directive; use crate::ir::{LinComb, Prog, QuadComb, Statement, Witness}; -use ir::Directive; -use solvers::Solver; +use crate::solvers::Solver; +use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; use std::fmt; use zokrates_field::Field; diff --git a/zokrates_core/src/ir/mod.rs b/zokrates_core/src/ir/mod.rs index 3e40ffae..c120806b 100644 --- a/zokrates_core/src/ir/mod.rs +++ b/zokrates_core/src/ir/mod.rs @@ -1,6 +1,7 @@ use crate::flat_absy::flat_parameter::FlatParameter; use crate::flat_absy::FlatVariable; use crate::solvers::Solver; +use serde::{Deserialize, Serialize}; use std::fmt; use zokrates_field::Field; diff --git a/zokrates_core/src/ir/serialize.rs b/zokrates_core/src/ir/serialize.rs index 7464c5dc..8b352f32 100644 --- a/zokrates_core/src/ir/serialize.rs +++ b/zokrates_core/src/ir/serialize.rs @@ -1,5 +1,5 @@ +use crate::ir::Prog; use bincode::{deserialize_from, serialize_into, Infinite}; -use ir::Prog; use std::io::{Read, Write}; use zokrates_field::*; @@ -70,7 +70,7 @@ impl ProgEnum { #[cfg(test)] mod tests { use super::*; - use ir; + use crate::ir; use std::io::{Cursor, Seek, SeekFrom}; use zokrates_field::{Bls12_381Field, Bn128Field}; diff --git a/zokrates_core/src/lib.rs b/zokrates_core/src/lib.rs index 0a02024f..925307be 100644 --- a/zokrates_core/src/lib.rs +++ b/zokrates_core/src/lib.rs @@ -1,8 +1,5 @@ #![feature(box_patterns, box_syntax)] -#[macro_use] -extern crate serde_derive; - cfg_if::cfg_if! { if #[cfg(feature = "ark")] { extern crate bellman_ce as bellman; diff --git a/zokrates_core/src/optimizer/directive.rs b/zokrates_core/src/optimizer/directive.rs index ca0100b0..b2972046 100644 --- a/zokrates_core/src/optimizer/directive.rs +++ b/zokrates_core/src/optimizer/directive.rs @@ -12,7 +12,7 @@ use crate::flat_absy::flat_variable::FlatVariable; use crate::ir::folder::*; use crate::ir::*; -use solvers::Solver; +use crate::solvers::Solver; use std::collections::hash_map::{Entry, HashMap}; use zokrates_field::Field; diff --git a/zokrates_core/src/optimizer/duplicate.rs b/zokrates_core/src/optimizer/duplicate.rs index 763e9ac4..f72b3a9f 100644 --- a/zokrates_core/src/optimizer/duplicate.rs +++ b/zokrates_core/src/optimizer/duplicate.rs @@ -48,7 +48,7 @@ impl Folder for DuplicateOptimizer { #[cfg(test)] mod tests { use super::*; - use flat_absy::FlatVariable; + use crate::flat_absy::FlatVariable; use zokrates_field::Bn128Field; #[test] diff --git a/zokrates_core/src/parser/tokenize/position.rs b/zokrates_core/src/parser/tokenize/position.rs index 0b5a04f2..a85ed3ce 100644 --- a/zokrates_core/src/parser/tokenize/position.rs +++ b/zokrates_core/src/parser/tokenize/position.rs @@ -1,6 +1,6 @@ use std::fmt; -#[derive(Clone, PartialEq, Copy, Serialize, Deserialize)] +#[derive(Clone, PartialEq, Copy)] pub struct Position { pub line: usize, pub col: usize, diff --git a/zokrates_core/src/proof_system/ark/gm17.rs b/zokrates_core/src/proof_system/ark/gm17.rs index 564f3f20..19888fdf 100644 --- a/zokrates_core/src/proof_system/ark/gm17.rs +++ b/zokrates_core/src/proof_system/ark/gm17.rs @@ -6,13 +6,13 @@ use ark_gm17::{ use ark_serialize::{CanonicalDeserialize, CanonicalSerialize}; use zokrates_field::{ArkFieldExtensions, Bw6_761Field, Field}; +use crate::ir::{Prog, Witness}; +use crate::proof_system::ark::Ark; use crate::proof_system::ark::Computation; use crate::proof_system::ark::{parse_fr, parse_g1, parse_g2, parse_g2_fq}; -use ir::{Prog, Witness}; -use proof_system::ark::Ark; -use proof_system::gm17::{NotBw6_761Field, ProofPoints, VerificationKey, GM17}; -use proof_system::Scheme; -use proof_system::{Backend, Proof, SetupKeypair}; +use crate::proof_system::gm17::{NotBw6_761Field, ProofPoints, VerificationKey, GM17}; +use crate::proof_system::Scheme; +use crate::proof_system::{Backend, Proof, SetupKeypair}; impl Backend for Ark { fn setup(program: Prog) -> SetupKeypair<>::VerificationKey> { @@ -200,9 +200,9 @@ impl Backend for Ark { } pub mod serialization { + use crate::proof_system::{G1Affine, G2Affine, G2AffineFq}; use ark_ec::PairingEngine; use ark_ff::FromBytes; - use proof_system::{G1Affine, G2Affine, G2AffineFq}; use zokrates_field::ArkFieldExtensions; #[inline] diff --git a/zokrates_core/src/proof_system/ark/mod.rs b/zokrates_core/src/proof_system/ark/mod.rs index 3f04f831..a21fc448 100644 --- a/zokrates_core/src/proof_system/ark/mod.rs +++ b/zokrates_core/src/proof_system/ark/mod.rs @@ -214,8 +214,8 @@ impl mod parse { use super::*; + use crate::proof_system::{Fr, G1Affine, G2Affine, G2AffineFq}; use ark_ff::ToBytes; - use proof_system::{Fr, G1Affine, G2Affine, G2AffineFq}; pub fn parse_g1( e: &::G1Affine, diff --git a/zokrates_core/src/proof_system/bellman/groth16.rs b/zokrates_core/src/proof_system/bellman/groth16.rs index 2385d3f3..8db9823c 100644 --- a/zokrates_core/src/proof_system/bellman/groth16.rs +++ b/zokrates_core/src/proof_system/bellman/groth16.rs @@ -4,16 +4,16 @@ use bellman::groth16::{ }; use pairing::{CurveAffine, Engine}; -use proof_system::{Backend, Proof, SetupKeypair}; +use crate::proof_system::{Backend, Proof, SetupKeypair}; use zokrates_field::BellmanFieldExtensions; use zokrates_field::Field; +use crate::ir::{Prog, Witness}; +use crate::proof_system::bellman::Bellman; use crate::proof_system::bellman::Computation; use crate::proof_system::bellman::{parse_fr, parse_g1, parse_g2}; -use ir::{Prog, Witness}; -use proof_system::bellman::Bellman; -use proof_system::groth16::{ProofPoints, VerificationKey, G16}; -use proof_system::Scheme; +use crate::proof_system::groth16::{ProofPoints, VerificationKey, G16}; +use crate::proof_system::Scheme; const G16_WARNING: &str = "WARNING: You are using the G16 scheme which is subject to malleability. See zokrates.github.io/toolbox/proving_schemes.html#g16-malleability for implications."; @@ -109,7 +109,7 @@ impl Backend for Bellman { mod serialization { use pairing::{from_hex, CurveAffine, Engine}; - use proof_system::{G1Affine, G2Affine}; + use crate::proof_system::{G1Affine, G2Affine}; use zokrates_field::BellmanFieldExtensions; pub fn to_g1( diff --git a/zokrates_core/src/proof_system/bellman/mod.rs b/zokrates_core/src/proof_system/bellman/mod.rs index bddc6150..df6869de 100644 --- a/zokrates_core/src/proof_system/bellman/mod.rs +++ b/zokrates_core/src/proof_system/bellman/mod.rs @@ -205,7 +205,7 @@ mod parse { use lazy_static::lazy_static; use super::*; - use proof_system::{Fr, G1Affine, G2Affine}; + use crate::proof_system::{Fr, G1Affine, G2Affine}; use regex::Regex; lazy_static! { @@ -260,8 +260,8 @@ mod parse { #[cfg(test)] mod tests { use super::*; + use crate::ir::Interpreter; use crate::ir::{Function, LinComb}; - use ir::Interpreter; use zokrates_field::Bn128Field; mod prove { diff --git a/zokrates_core/src/proof_system/libsnark/gm17.rs b/zokrates_core/src/proof_system/libsnark/gm17.rs index a04c522c..f3743a73 100644 --- a/zokrates_core/src/proof_system/libsnark/gm17.rs +++ b/zokrates_core/src/proof_system/libsnark/gm17.rs @@ -1,11 +1,11 @@ -use ir::{Prog, Witness}; -use proof_system::gm17::{ProofPoints, VerificationKey, GM17}; -use proof_system::libsnark::ffi::{Buffer, ProofResult, SetupResult}; -use proof_system::libsnark::{ +use crate::ir::{Prog, Witness}; +use crate::proof_system::gm17::{ProofPoints, VerificationKey, GM17}; +use crate::proof_system::libsnark::ffi::{Buffer, ProofResult, SetupResult}; +use crate::proof_system::libsnark::{ prepare_generate_proof, prepare_public_inputs, prepare_setup, serialization::*, Libsnark, }; -use proof_system::Scheme; -use proof_system::{Backend, G1Affine, G2Affine, Proof, SetupKeypair}; +use crate::proof_system::Scheme; +use crate::proof_system::{Backend, G1Affine, G2Affine, Proof, SetupKeypair}; use std::io::{BufReader, BufWriter, Write}; use zokrates_field::{Bn128Field, Field}; diff --git a/zokrates_core/src/proof_system/libsnark/mod.rs b/zokrates_core/src/proof_system/libsnark/mod.rs index 64624a4e..10dba493 100644 --- a/zokrates_core/src/proof_system/libsnark/mod.rs +++ b/zokrates_core/src/proof_system/libsnark/mod.rs @@ -2,8 +2,8 @@ mod ffi; pub mod gm17; pub mod pghr13; -use flat_absy::FlatVariable; -use ir::{self, Statement}; +use crate::flat_absy::FlatVariable; +use crate::ir::{self, Statement}; use std::cmp::max; use std::collections::HashMap; use zokrates_field::Field; @@ -305,7 +305,7 @@ pub fn r1cs_program( } pub mod serialization { - use proof_system::{G1Affine, G2Affine}; + use crate::proof_system::{G1Affine, G2Affine}; use std::io::Read; use std::io::Write; diff --git a/zokrates_core/src/proof_system/libsnark/pghr13.rs b/zokrates_core/src/proof_system/libsnark/pghr13.rs index 9d79c1b8..1c4bb3b7 100644 --- a/zokrates_core/src/proof_system/libsnark/pghr13.rs +++ b/zokrates_core/src/proof_system/libsnark/pghr13.rs @@ -1,13 +1,13 @@ -use proof_system::libsnark::ffi::{Buffer, ProofResult, SetupResult}; -use proof_system::libsnark::{ +use crate::proof_system::libsnark::ffi::{Buffer, ProofResult, SetupResult}; +use crate::proof_system::libsnark::{ prepare_generate_proof, prepare_public_inputs, prepare_setup, Libsnark, }; -use proof_system::{Backend, G1Affine, G2Affine, Proof, SetupKeypair}; +use crate::proof_system::{Backend, G1Affine, G2Affine, Proof, SetupKeypair}; -use ir::{Prog, Witness}; -use proof_system::libsnark::serialization::{read_g1, read_g2, write_g1, write_g2}; -use proof_system::pghr13::{ProofPoints, VerificationKey, PGHR13}; -use proof_system::Scheme; +use crate::ir::{Prog, Witness}; +use crate::proof_system::libsnark::serialization::{read_g1, read_g2, write_g1, write_g2}; +use crate::proof_system::pghr13::{ProofPoints, VerificationKey, PGHR13}; +use crate::proof_system::Scheme; use std::io::{BufReader, BufWriter, Write}; use zokrates_field::Bn128Field; use zokrates_field::Field; diff --git a/zokrates_core/src/proof_system/mod.rs b/zokrates_core/src/proof_system/mod.rs index 7a1a3a35..81dd9f48 100644 --- a/zokrates_core/src/proof_system/mod.rs +++ b/zokrates_core/src/proof_system/mod.rs @@ -13,7 +13,7 @@ pub use self::solidity::*; use crate::ir; use serde::de::DeserializeOwned; -use serde::Serialize; +use serde::{Deserialize, Serialize}; use zokrates_field::Field; #[derive(Serialize)] @@ -34,6 +34,7 @@ pub struct Proof { pub inputs: Vec, } +#[allow(dead_code)] impl Proof { fn new(proof: T, inputs: Vec) -> Self { Proof { proof, inputs } diff --git a/zokrates_core/src/proof_system/scheme/gm17.rs b/zokrates_core/src/proof_system/scheme/gm17.rs index 58b88490..da2333c9 100644 --- a/zokrates_core/src/proof_system/scheme/gm17.rs +++ b/zokrates_core/src/proof_system/scheme/gm17.rs @@ -1,11 +1,12 @@ -use proof_system::scheme::Scheme; -use proof_system::solidity::{ +use crate::proof_system::scheme::Scheme; +use crate::proof_system::solidity::{ SolidityAbi, SOLIDITY_G2_ADDITION_LIB, SOLIDITY_PAIRING_LIB, SOLIDITY_PAIRING_LIB_V2, }; -use proof_system::{ +use crate::proof_system::{ G1Affine, G2Affine, G2AffineFq, SolidityCompatibleField, SolidityCompatibleScheme, }; use regex::Regex; +use serde::{Deserialize, Serialize}; use zokrates_field::{Bls12_377Field, Bls12_381Field, Bn128Field, Bw6_761Field, Field}; pub trait NotBw6_761Field {} diff --git a/zokrates_core/src/proof_system/scheme/groth16.rs b/zokrates_core/src/proof_system/scheme/groth16.rs index 7c0dbd85..1da6489f 100644 --- a/zokrates_core/src/proof_system/scheme/groth16.rs +++ b/zokrates_core/src/proof_system/scheme/groth16.rs @@ -1,9 +1,10 @@ -use proof_system::scheme::Scheme; -use proof_system::solidity::{ +use crate::proof_system::scheme::Scheme; +use crate::proof_system::solidity::{ SolidityAbi, SOLIDITY_G2_ADDITION_LIB, SOLIDITY_PAIRING_LIB, SOLIDITY_PAIRING_LIB_V2, }; -use proof_system::{G1Affine, G2Affine, SolidityCompatibleField, SolidityCompatibleScheme}; +use crate::proof_system::{G1Affine, G2Affine, SolidityCompatibleField, SolidityCompatibleScheme}; use regex::Regex; +use serde::{Deserialize, Serialize}; use zokrates_field::Field; pub struct G16; diff --git a/zokrates_core/src/proof_system/scheme/pghr13.rs b/zokrates_core/src/proof_system/scheme/pghr13.rs index f59573b9..29ea5f18 100644 --- a/zokrates_core/src/proof_system/scheme/pghr13.rs +++ b/zokrates_core/src/proof_system/scheme/pghr13.rs @@ -1,9 +1,10 @@ -use proof_system::scheme::Scheme; -use proof_system::solidity::{ +use crate::proof_system::scheme::Scheme; +use crate::proof_system::solidity::{ SolidityAbi, SOLIDITY_G2_ADDITION_LIB, SOLIDITY_PAIRING_LIB, SOLIDITY_PAIRING_LIB_V2, }; -use proof_system::{G1Affine, G2Affine, SolidityCompatibleField, SolidityCompatibleScheme}; +use crate::proof_system::{G1Affine, G2Affine, SolidityCompatibleField, SolidityCompatibleScheme}; use regex::Regex; +use serde::{Deserialize, Serialize}; use zokrates_field::Field; pub struct PGHR13; diff --git a/zokrates_core/src/proof_system/solidity.rs b/zokrates_core/src/proof_system/solidity.rs index 5edfd72f..1eee2b00 100644 --- a/zokrates_core/src/proof_system/solidity.rs +++ b/zokrates_core/src/proof_system/solidity.rs @@ -1,4 +1,4 @@ -use proof_system::Scheme; +use crate::proof_system::Scheme; use zokrates_field::{Bn128Field, Field}; pub trait SolidityCompatibleField: Field {} diff --git a/zokrates_core/src/semantics.rs b/zokrates_core/src/semantics.rs index 50be6997..f13d7cfc 100644 --- a/zokrates_core/src/semantics.rs +++ b/zokrates_core/src/semantics.rs @@ -18,8 +18,8 @@ use crate::parser::Position; use crate::absy::types::{UnresolvedSignature, UnresolvedType, UserTypeId}; use crate::typed_absy::types::{FunctionKey, Signature, StructLocation, Type}; +use crate::typed_absy::types::{ArrayType, StructMember}; use std::hash::{Hash, Hasher}; -use typed_absy::types::{ArrayType, StructMember}; #[derive(PartialEq, Debug)] pub struct ErrorInner { @@ -2378,9 +2378,9 @@ impl<'ast> Checker<'ast> { #[cfg(test)] mod tests { use super::*; - use absy; + use crate::absy; + use crate::typed_absy; use num_bigint::BigUint; - use typed_absy; use zokrates_field::Bn128Field; const MODULE_ID: &str = ""; diff --git a/zokrates_core/src/solvers/mod.rs b/zokrates_core/src/solvers/mod.rs index 5f09b67f..ed3e1ae5 100644 --- a/zokrates_core/src/solvers/mod.rs +++ b/zokrates_core/src/solvers/mod.rs @@ -1,3 +1,4 @@ +use serde::{Deserialize, Serialize}; use std::fmt; use zokrates_field::Field; diff --git a/zokrates_core/src/static_analysis/flatten_complex_types.rs b/zokrates_core/src/static_analysis/flatten_complex_types.rs index 2db586ae..d89ed43a 100644 --- a/zokrates_core/src/static_analysis/flatten_complex_types.rs +++ b/zokrates_core/src/static_analysis/flatten_complex_types.rs @@ -1,7 +1,7 @@ +use crate::typed_absy; +use crate::typed_absy::types::{StructType, UBitwidth}; +use crate::zir; use std::marker::PhantomData; -use typed_absy; -use typed_absy::types::{StructType, UBitwidth}; -use zir; use zokrates_field::Field; pub struct Flattener { @@ -302,7 +302,7 @@ pub fn fold_array_expression_inner<'ast, T: Field>( assert_eq!(consequence.len(), alternative.len()); - use zir::IfElse; + use crate::zir::IfElse; consequence .into_iter() @@ -390,7 +390,7 @@ pub fn fold_struct_expression_inner<'ast, T: Field>( assert_eq!(consequence.len(), alternative.len()); - use zir::IfElse; + use crate::zir::IfElse; consequence .into_iter() diff --git a/zokrates_core/src/static_analysis/inline.rs b/zokrates_core/src/static_analysis/inline.rs index 7a8fe372..104b0109 100644 --- a/zokrates_core/src/static_analysis/inline.rs +++ b/zokrates_core/src/static_analysis/inline.rs @@ -16,9 +16,9 @@ //! where any call in `main` must be to `_SHA_256_ROUND` or `_UNPACK` +use crate::typed_absy::types::{FunctionKey, FunctionKeyHash, Type, UBitwidth}; +use crate::typed_absy::{folder::*, *}; use std::collections::HashMap; -use typed_absy::types::{FunctionKey, FunctionKeyHash, Type, UBitwidth}; -use typed_absy::{folder::*, *}; use zokrates_field::Field; #[derive(Debug, PartialEq, Eq, Hash, Clone)] @@ -605,8 +605,8 @@ impl<'ast, T: Field> Folder<'ast, T> for Inliner<'ast, T> { #[cfg(test)] mod tests { use super::*; + use crate::typed_absy::types::{FunctionKey, Signature, Type}; use std::path::PathBuf; - use typed_absy::types::{FunctionKey, Signature, Type}; use zokrates_field::Bn128Field; #[test] diff --git a/zokrates_core/src/static_analysis/mod.rs b/zokrates_core/src/static_analysis/mod.rs index c42c1b87..d7f25b6f 100644 --- a/zokrates_core/src/static_analysis/mod.rs +++ b/zokrates_core/src/static_analysis/mod.rs @@ -28,7 +28,7 @@ use self::variable_access_remover::VariableAccessRemover; use crate::flat_absy::FlatProg; use crate::ir::Prog; use crate::typed_absy::TypedProgram; -use zir::ZirProgram; +use crate::zir::ZirProgram; use zokrates_field::Field; pub trait Analyse { diff --git a/zokrates_core/src/static_analysis/propagate_unroll.rs b/zokrates_core/src/static_analysis/propagate_unroll.rs index 732da9b7..67354b53 100644 --- a/zokrates_core/src/static_analysis/propagate_unroll.rs +++ b/zokrates_core/src/static_analysis/propagate_unroll.rs @@ -19,9 +19,9 @@ //! In the case that a loop bound cannot be reduced to a constant, we detect it by noticing that the unroll does //! not make progress anymore. -use static_analysis::propagation::Propagator; -use static_analysis::unroll::{Output, Unroller}; -use typed_absy::TypedProgram; +use crate::static_analysis::propagation::Propagator; +use crate::static_analysis::unroll::{Output, Unroller}; +use crate::typed_absy::TypedProgram; use zokrates_field::Field; pub struct PropagatedUnroller; @@ -61,8 +61,8 @@ impl PropagatedUnroller { #[cfg(test)] mod tests { use super::*; - use typed_absy::types::{FunctionKey, Signature}; - use typed_absy::*; + use crate::typed_absy::types::{FunctionKey, Signature}; + use crate::typed_absy::*; use zokrates_field::Bn128Field; #[test] diff --git a/zokrates_core/src/static_analysis/propagation.rs b/zokrates_core/src/static_analysis/propagation.rs index 1b317330..71c8b8b8 100644 --- a/zokrates_core/src/static_analysis/propagation.rs +++ b/zokrates_core/src/static_analysis/propagation.rs @@ -11,10 +11,10 @@ //! @date 2018 use crate::typed_absy::folder::*; +use crate::typed_absy::types::Type; use crate::typed_absy::*; use std::collections::HashMap; use std::convert::TryFrom; -use typed_absy::types::Type; use zokrates_field::Field; pub struct Propagator<'ast, T: Field> { diff --git a/zokrates_core/src/static_analysis/return_binder.rs b/zokrates_core/src/static_analysis/return_binder.rs index 5eb28c96..5320a7f9 100644 --- a/zokrates_core/src/static_analysis/return_binder.rs +++ b/zokrates_core/src/static_analysis/return_binder.rs @@ -1,6 +1,6 @@ -use typed_absy::folder::fold_statement; -use typed_absy::identifier::CoreIdentifier; -use typed_absy::*; +use crate::typed_absy::folder::fold_statement; +use crate::typed_absy::identifier::CoreIdentifier; +use crate::typed_absy::*; use zokrates_field::Field; pub struct ReturnBinder; diff --git a/zokrates_core/src/static_analysis/uint_optimizer.rs b/zokrates_core/src/static_analysis/uint_optimizer.rs index 220c63fb..83cd31aa 100644 --- a/zokrates_core/src/static_analysis/uint_optimizer.rs +++ b/zokrates_core/src/static_analysis/uint_optimizer.rs @@ -1,6 +1,6 @@ +use crate::zir::folder::*; use crate::zir::*; use std::collections::HashMap; -use zir::folder::*; use zokrates_field::Field; #[derive(Default)] diff --git a/zokrates_core/src/static_analysis/unconstrained_vars.rs b/zokrates_core/src/static_analysis/unconstrained_vars.rs index cd90261f..42f741b2 100644 --- a/zokrates_core/src/static_analysis/unconstrained_vars.rs +++ b/zokrates_core/src/static_analysis/unconstrained_vars.rs @@ -1,7 +1,7 @@ +use crate::flat_absy::FlatVariable; +use crate::ir::folder::Folder; +use crate::ir::Directive; use crate::ir::Prog; -use flat_absy::FlatVariable; -use ir::folder::Folder; -use ir::Directive; use std::collections::HashSet; use zokrates_field::Field; @@ -54,9 +54,9 @@ impl Folder for UnconstrainedVariableDetector { #[cfg(test)] mod tests { use super::*; - use flat_absy::FlatVariable; - use ir::{Function, LinComb, Prog, QuadComb, Statement}; - use solvers::Solver; + use crate::flat_absy::FlatVariable; + use crate::ir::{Function, LinComb, Prog, QuadComb, Statement}; + use crate::solvers::Solver; use zokrates_field::Bn128Field; #[test] diff --git a/zokrates_core/src/static_analysis/unroll.rs b/zokrates_core/src/static_analysis/unroll.rs index 00400446..94fb00ba 100644 --- a/zokrates_core/src/static_analysis/unroll.rs +++ b/zokrates_core/src/static_analysis/unroll.rs @@ -5,11 +5,11 @@ //! @date 2018 use crate::typed_absy::folder::*; +use crate::typed_absy::identifier::CoreIdentifier; use crate::typed_absy::types::{MemberId, Type}; use crate::typed_absy::*; use std::collections::HashMap; use std::collections::HashSet; -use typed_absy::identifier::CoreIdentifier; use zokrates_field::Field; pub enum Output<'ast, T: Field> { diff --git a/zokrates_core/src/static_analysis/variable_access_remover.rs b/zokrates_core/src/static_analysis/variable_access_remover.rs index 991740b1..e3fde6f6 100644 --- a/zokrates_core/src/static_analysis/variable_access_remover.rs +++ b/zokrates_core/src/static_analysis/variable_access_remover.rs @@ -10,7 +10,7 @@ //! if(index == 0, a[0], if(index == 1, a[1], ...)) //! ``` -use typed_absy::{folder::*, *}; +use crate::typed_absy::{folder::*, *}; use zokrates_field::Field; pub struct VariableAccessRemover<'ast, T: Field> { diff --git a/zokrates_core/src/typed_absy/abi.rs b/zokrates_core/src/typed_absy/abi.rs index bc82206a..f8ff7a87 100644 --- a/zokrates_core/src/typed_absy/abi.rs +++ b/zokrates_core/src/typed_absy/abi.rs @@ -1,5 +1,5 @@ -use typed_absy::types::Signature; -use typed_absy::Type; +use crate::typed_absy::{Signature, Type}; +use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] pub struct AbiInput { @@ -29,12 +29,12 @@ impl Abi { #[cfg(test)] mod tests { use super::*; - use std::collections::HashMap; - use typed_absy::types::{ArrayType, FunctionKey, StructMember, StructType}; - use typed_absy::{ + use crate::typed_absy::types::{ArrayType, FunctionKey, StructMember, StructType}; + use crate::typed_absy::{ Parameter, Type, TypedFunction, TypedFunctionSymbol, TypedModule, TypedProgram, UBitwidth, Variable, }; + use std::collections::HashMap; use zokrates_field::Bn128Field; #[test] diff --git a/zokrates_core/src/typed_absy/identifier.rs b/zokrates_core/src/typed_absy/identifier.rs index 784ca119..eef72c20 100644 --- a/zokrates_core/src/typed_absy/identifier.rs +++ b/zokrates_core/src/typed_absy/identifier.rs @@ -1,6 +1,6 @@ +use crate::typed_absy::types::FunctionKeyHash; +use crate::typed_absy::TypedModuleId; use std::fmt; -use typed_absy::types::FunctionKeyHash; -use typed_absy::TypedModuleId; #[derive(Debug, PartialEq, Clone, Hash, Eq)] pub enum CoreIdentifier<'ast> { diff --git a/zokrates_core/src/typed_absy/mod.rs b/zokrates_core/src/typed_absy/mod.rs index 3069c17a..a293e16b 100644 --- a/zokrates_core/src/typed_absy/mod.rs +++ b/zokrates_core/src/typed_absy/mod.rs @@ -18,18 +18,18 @@ pub use self::identifier::CoreIdentifier; pub use self::parameter::Parameter; pub use self::types::{Signature, StructType, Type, UBitwidth}; pub use self::variable::Variable; +pub use crate::typed_absy::uint::{bitwidth, UExpression, UExpressionInner, UMetadata}; use std::path::PathBuf; -pub use typed_absy::uint::{bitwidth, UExpression, UExpressionInner, UMetadata}; +use crate::embed::FlatEmbed; use crate::typed_absy::types::{FunctionKey, MemberId}; -use embed::FlatEmbed; use std::collections::HashMap; use std::convert::TryFrom; use std::fmt; use zokrates_field::Field; pub use self::folder::Folder; -use typed_absy::abi::{Abi, AbiInput}; +use crate::typed_absy::abi::{Abi, AbiInput}; pub use self::identifier::Identifier; diff --git a/zokrates_core/src/typed_absy/types.rs b/zokrates_core/src/typed_absy/types.rs index 419dcc45..e1831096 100644 --- a/zokrates_core/src/typed_absy/types.rs +++ b/zokrates_core/src/typed_absy/types.rs @@ -1,3 +1,4 @@ +use serde::{de::Error, ser::SerializeMap, Deserialize, Deserializer, Serialize, Serializer}; use std::fmt; use std::path::{Path, PathBuf}; diff --git a/zokrates_core/src/typed_absy/uint.rs b/zokrates_core/src/typed_absy/uint.rs index 398fa0e2..0403d15e 100644 --- a/zokrates_core/src/typed_absy/uint.rs +++ b/zokrates_core/src/typed_absy/uint.rs @@ -1,5 +1,5 @@ -use typed_absy::types::{FunctionKey, UBitwidth}; -use typed_absy::*; +use crate::typed_absy::types::{FunctionKey, UBitwidth}; +use crate::typed_absy::*; use zokrates_field::Field; type Bitwidth = usize; diff --git a/zokrates_core/src/typed_absy/variable.rs b/zokrates_core/src/typed_absy/variable.rs index 3db55cf9..ca40cca9 100644 --- a/zokrates_core/src/typed_absy/variable.rs +++ b/zokrates_core/src/typed_absy/variable.rs @@ -1,7 +1,7 @@ use crate::typed_absy::types::Type; +use crate::typed_absy::types::{StructType, UBitwidth}; use crate::typed_absy::Identifier; use std::fmt; -use typed_absy::types::{StructType, UBitwidth}; #[derive(Clone, PartialEq, Hash, Eq)] pub struct Variable<'ast> { diff --git a/zokrates_core/src/zir/from_typed.rs b/zokrates_core/src/zir/from_typed.rs index a2c1a25f..30309e0b 100644 --- a/zokrates_core/src/zir/from_typed.rs +++ b/zokrates_core/src/zir/from_typed.rs @@ -1,5 +1,5 @@ -use typed_absy; -use zir; +use crate::typed_absy; +use crate::zir; impl<'ast> From> for zir::types::FunctionKey<'ast> { fn from(k: typed_absy::types::FunctionKey<'ast>) -> zir::types::FunctionKey<'ast> { diff --git a/zokrates_core/src/zir/identifier.rs b/zokrates_core/src/zir/identifier.rs index a0a822cf..6ef1ec8b 100644 --- a/zokrates_core/src/zir/identifier.rs +++ b/zokrates_core/src/zir/identifier.rs @@ -1,7 +1,7 @@ +use crate::zir::types::MemberId; use std::fmt; -use zir::types::MemberId; -use typed_absy::Identifier as CoreIdentifier; +use crate::typed_absy::Identifier as CoreIdentifier; #[derive(Debug, PartialEq, Clone, Hash, Eq)] pub enum Identifier<'ast> { diff --git a/zokrates_core/src/zir/mod.rs b/zokrates_core/src/zir/mod.rs index 008de54d..96a3a543 100644 --- a/zokrates_core/src/zir/mod.rs +++ b/zokrates_core/src/zir/mod.rs @@ -9,14 +9,14 @@ mod variable; pub use self::parameter::Parameter; pub use self::types::Type; pub use self::variable::Variable; +pub use crate::zir::uint::{ShouldReduce, UExpression, UExpressionInner, UMetadata}; use std::path::PathBuf; -pub use zir::uint::{ShouldReduce, UExpression, UExpressionInner, UMetadata}; -use embed::FlatEmbed; +use crate::embed::FlatEmbed; +use crate::zir::types::{FunctionKey, Signature}; use std::collections::HashMap; use std::convert::TryFrom; use std::fmt; -use zir::types::{FunctionKey, Signature}; use zokrates_field::Field; pub use self::folder::Folder; diff --git a/zokrates_core/src/zir/parameter.rs b/zokrates_core/src/zir/parameter.rs index 1bec6c66..27223692 100644 --- a/zokrates_core/src/zir/parameter.rs +++ b/zokrates_core/src/zir/parameter.rs @@ -1,5 +1,5 @@ +use crate::zir::Variable; use std::fmt; -use zir::Variable; #[derive(Clone, PartialEq)] pub struct Parameter<'ast> { diff --git a/zokrates_core/src/zir/types.rs b/zokrates_core/src/zir/types.rs index 3b45481e..ac5aa6bd 100644 --- a/zokrates_core/src/zir/types.rs +++ b/zokrates_core/src/zir/types.rs @@ -1,3 +1,4 @@ +use serde::{Deserialize, Serialize}; use std::fmt; pub type Identifier<'ast> = &'ast str; diff --git a/zokrates_core/src/zir/uint.rs b/zokrates_core/src/zir/uint.rs index fd96ce79..a6db3863 100644 --- a/zokrates_core/src/zir/uint.rs +++ b/zokrates_core/src/zir/uint.rs @@ -1,6 +1,6 @@ -use zir::identifier::Identifier; -use zir::types::UBitwidth; -use zir::{BooleanExpression, FieldElementExpression}; +use crate::zir::identifier::Identifier; +use crate::zir::types::UBitwidth; +use crate::zir::{BooleanExpression, FieldElementExpression}; use zokrates_field::Field; impl<'ast, T: Field> UExpression<'ast, T> { diff --git a/zokrates_core/src/zir/variable.rs b/zokrates_core/src/zir/variable.rs index d1449c77..91fda8c7 100644 --- a/zokrates_core/src/zir/variable.rs +++ b/zokrates_core/src/zir/variable.rs @@ -1,6 +1,6 @@ +use crate::zir::types::{Type, UBitwidth}; +use crate::zir::Identifier; use std::fmt; -use zir::types::{Type, UBitwidth}; -use zir::Identifier; #[derive(Clone, PartialEq, Hash, Eq)] pub struct Variable<'ast> { diff --git a/zokrates_field/src/bls12_381.rs b/zokrates_field/src/bls12_381.rs index edd82a3b..eab6038c 100644 --- a/zokrates_field/src/bls12_381.rs +++ b/zokrates_field/src/bls12_381.rs @@ -4,7 +4,6 @@ prime_field!( ); #[cfg(feature = "bellman")] -bellman_extensions!( - bellman_ce::pairing::bls12_381::Bls12, - bellman_ce::pairing::bls12_381::Fq2 -); +use bellman_ce::pairing::bls12_381::{Bls12, Fq2}; +#[cfg(feature = "ark")] +bellman_extensions!(Bls12, Fq2); diff --git a/zokrates_field/src/bn128.rs b/zokrates_field/src/bn128.rs index 23c3acad..cecca736 100644 --- a/zokrates_field/src/bn128.rs +++ b/zokrates_field/src/bn128.rs @@ -4,13 +4,14 @@ prime_field!( ); #[cfg(feature = "bellman")] -bellman_extensions!( - bellman_ce::pairing::bn256::Bn256, - bellman_ce::pairing::bn256::Fq2 -); +use bellman_ce::pairing::bn256::{Bn256, Fq2}; +#[cfg(feature = "bellman")] +bellman_extensions!(Bn256, Fq2); #[cfg(feature = "ark")] -ark_extensions!(ark_bn254::Bn254); +use ark_bn254::Bn254; +#[cfg(feature = "ark")] +ark_extensions!(Bn254); #[cfg(test)] mod tests { diff --git a/zokrates_field/src/bw6_761.rs b/zokrates_field/src/bw6_761.rs index a4c7eb06..ef050191 100644 --- a/zokrates_field/src/bw6_761.rs +++ b/zokrates_field/src/bw6_761.rs @@ -4,4 +4,6 @@ prime_field!( ); #[cfg(feature = "ark")] -ark_extensions!(ark_bw6_761::BW6_761); +use ark_bw6_761::BW6_761; +#[cfg(feature = "ark")] +ark_extensions!(BW6_761);