From 17d7010291a0372533b25dfe37d4517be56fcc29 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Mon, 18 Sep 2023 14:26:02 -0700 Subject: [PATCH] chore: Separate barretenberg solver from generic blackbox solver code --- .release-please-manifest.json | 3 +- Cargo.lock | 41 +++++++---- Cargo.toml | 5 +- acvm/Cargo.toml | 6 +- acvm/src/lib.rs | 4 +- acvm/src/pwg/blackbox/hash.rs | 2 +- acvm/src/pwg/blackbox/mod.rs | 2 +- acvm/src/pwg/blackbox/signature/ecdsa.rs | 2 +- acvm/src/pwg/brillig.rs | 4 +- acvm/src/pwg/mod.rs | 2 +- acvm/tests/solver.rs | 2 +- acvm/tests/stdlib.rs | 2 +- acvm_js/Cargo.toml | 1 + acvm_js/src/execute.rs | 4 +- barretenberg_blackbox_solver/Cargo.toml | 70 +++++++++++++++++++ .../build.rs | 0 .../src/lib.rs | 3 +- .../src}/wasm/barretenberg_structures.rs | 0 .../src}/wasm/mod.rs | 0 .../src}/wasm/pedersen.rs | 0 .../src}/wasm/scalar_mul.rs | 2 +- .../src}/wasm/schnorr.rs | 0 blackbox_solver/Cargo.toml | 31 -------- blackbox_solver/src/lib.rs | 5 -- brillig_vm/Cargo.toml | 2 +- brillig_vm/src/black_box.rs | 2 +- brillig_vm/src/lib.rs | 4 +- release-please-config.json | 3 + 28 files changed, 128 insertions(+), 74 deletions(-) create mode 100644 barretenberg_blackbox_solver/Cargo.toml rename {blackbox_solver => barretenberg_blackbox_solver}/build.rs (100%) rename blackbox_solver/src/barretenberg/mod.rs => barretenberg_blackbox_solver/src/lib.rs (97%) rename {blackbox_solver/src/barretenberg => barretenberg_blackbox_solver/src}/wasm/barretenberg_structures.rs (100%) rename {blackbox_solver/src/barretenberg => barretenberg_blackbox_solver/src}/wasm/mod.rs (100%) rename {blackbox_solver/src/barretenberg => barretenberg_blackbox_solver/src}/wasm/pedersen.rs (100%) rename {blackbox_solver/src/barretenberg => barretenberg_blackbox_solver/src}/wasm/scalar_mul.rs (98%) rename {blackbox_solver/src/barretenberg => barretenberg_blackbox_solver/src}/wasm/schnorr.rs (100%) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6cf84ddd1..c76549168 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -7,5 +7,6 @@ "stdlib": "0.26.1", "brillig": "0.26.1", "brillig_vm": "0.26.1", - "blackbox_solver": "0.26.1" + "blackbox_solver": "0.26.1", + "barretenberg_blackbox_solver": "0.26.1" } diff --git a/Cargo.lock b/Cargo.lock index 57da2b451..57e9945aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -54,22 +54,11 @@ version = "0.26.1" dependencies = [ "acir", "blake2", - "flate2", - "getrandom", - "hex", - "js-sys", "k256", - "num-bigint", "p256", - "pkg-config", - "reqwest", - "rust-embed", "sha2", "sha3", - "tar", "thiserror", - "wasm-bindgen-futures", - "wasmer", ] [[package]] @@ -77,6 +66,7 @@ name = "acvm_js" version = "0.26.1" dependencies = [ "acvm", + "barretenberg_blackbox_solver", "build-data", "cfg-if", "console_error_panic_hook", @@ -138,9 +128,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" +checksum = "0f2135563fb5c609d2b2b87c1e8ce7bc41b0b45430fa9661f457981503dd5bf0" dependencies = [ "memchr", ] @@ -316,6 +306,31 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "barretenberg_blackbox_solver" +version = "0.26.1" +dependencies = [ + "acir", + "acvm_blackbox_solver", + "blake2", + "flate2", + "getrandom", + "hex", + "js-sys", + "k256", + "num-bigint", + "p256", + "pkg-config", + "reqwest", + "rust-embed", + "sha2", + "sha3", + "tar", + "thiserror", + "wasm-bindgen-futures", + "wasmer", +] + [[package]] name = "base16ct" version = "0.1.1" diff --git a/Cargo.toml b/Cargo.toml index e48301d9a..1b0229bfd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] -members = ["acir_field", "acir", "acvm", "acvm_js", "stdlib", "brillig", "brillig_vm", "blackbox_solver"] +members = ["acir_field", "acir", "acvm", "acvm_js", "stdlib", "brillig", "brillig_vm", "blackbox_solver", "barretenberg_blackbox_solver"] resolver = "2" [workspace.package] @@ -15,7 +15,8 @@ acir = { version = "0.26.1", path = "acir", default-features = false } acir_field = { version = "0.26.1", path = "acir_field", default-features = false } stdlib = { package = "acvm_stdlib", version = "0.26.1", path = "stdlib", default-features = false } brillig = { version = "0.26.1", path = "brillig", default-features = false } -blackbox_solver = { package = "acvm_blackbox_solver", version = "0.26.1", path = "blackbox_solver", default-features = false } +acvm_blackbox_solver = { version = "0.26.1", path = "blackbox_solver", default-features = false } +barretenberg_blackbox_solver = { version = "0.26.1", path = "barretenberg_blackbox_solver", default-features = false } bincode = "1.3.3" diff --git a/acvm/Cargo.toml b/acvm/Cargo.toml index 54af92f58..80daa291d 100644 --- a/acvm/Cargo.toml +++ b/acvm/Cargo.toml @@ -18,7 +18,7 @@ thiserror.workspace = true acir.workspace = true stdlib.workspace = true brillig_vm = { version = "0.26.1", path = "../brillig_vm", default-features = false } -blackbox_solver.workspace = true +acvm_blackbox_solver.workspace = true indexmap = "1.7.0" @@ -28,13 +28,13 @@ bn254 = [ "acir/bn254", "stdlib/bn254", "brillig_vm/bn254", - "blackbox_solver/bn254", + "acvm_blackbox_solver/bn254", ] bls12_381 = [ "acir/bls12_381", "stdlib/bls12_381", "brillig_vm/bls12_381", - "blackbox_solver/bls12_381", + "acvm_blackbox_solver/bls12_381", ] testing = ["stdlib/testing", "unstable-fallbacks"] unstable-fallbacks = [] diff --git a/acvm/src/lib.rs b/acvm/src/lib.rs index 5722ff97a..f32d30ee9 100644 --- a/acvm/src/lib.rs +++ b/acvm/src/lib.rs @@ -4,7 +4,7 @@ pub mod compiler; pub mod pwg; -pub use blackbox_solver::{BlackBoxFunctionSolver, BlackBoxResolutionError}; +pub use acvm_blackbox_solver::{BlackBoxFunctionSolver, BlackBoxResolutionError}; use core::fmt::Debug; use pwg::OpcodeResolutionError; @@ -14,7 +14,7 @@ pub use acir::FieldElement; // re-export brillig vm pub use brillig_vm; // re-export blackbox solver -pub use blackbox_solver; +pub use acvm_blackbox_solver as blackbox_solver; /// Supported NP complete languages /// This might need to be in ACIR instead diff --git a/acvm/src/pwg/blackbox/hash.rs b/acvm/src/pwg/blackbox/hash.rs index e2aecd0d1..80665a743 100644 --- a/acvm/src/pwg/blackbox/hash.rs +++ b/acvm/src/pwg/blackbox/hash.rs @@ -3,7 +3,7 @@ use acir::{ native_types::{Witness, WitnessMap}, BlackBoxFunc, FieldElement, }; -use blackbox_solver::{hash_to_field_128_security, BlackBoxResolutionError}; +use acvm_blackbox_solver::{hash_to_field_128_security, BlackBoxResolutionError}; use crate::pwg::{insert_value, witness_to_value}; use crate::OpcodeResolutionError; diff --git a/acvm/src/pwg/blackbox/mod.rs b/acvm/src/pwg/blackbox/mod.rs index 0e8ed2bc5..c4d9d561f 100644 --- a/acvm/src/pwg/blackbox/mod.rs +++ b/acvm/src/pwg/blackbox/mod.rs @@ -3,7 +3,7 @@ use acir::{ native_types::{Witness, WitnessMap}, FieldElement, }; -use blackbox_solver::{blake2s, keccak256, sha256}; +use acvm_blackbox_solver::{blake2s, keccak256, sha256}; use super::{insert_value, OpcodeNotSolvable, OpcodeResolutionError}; use crate::BlackBoxFunctionSolver; diff --git a/acvm/src/pwg/blackbox/signature/ecdsa.rs b/acvm/src/pwg/blackbox/signature/ecdsa.rs index 5910a7a33..8f0df8378 100644 --- a/acvm/src/pwg/blackbox/signature/ecdsa.rs +++ b/acvm/src/pwg/blackbox/signature/ecdsa.rs @@ -3,7 +3,7 @@ use acir::{ native_types::{Witness, WitnessMap}, FieldElement, }; -use blackbox_solver::{ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; +use acvm_blackbox_solver::{ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; use crate::{pwg::insert_value, OpcodeResolutionError}; diff --git a/acvm/src/pwg/brillig.rs b/acvm/src/pwg/brillig.rs index 56bc406f5..8662dab71 100644 --- a/acvm/src/pwg/brillig.rs +++ b/acvm/src/pwg/brillig.rs @@ -7,7 +7,7 @@ use acir::{ native_types::WitnessMap, FieldElement, }; -use blackbox_solver::BlackBoxFunctionSolver; +use acvm_blackbox_solver::BlackBoxFunctionSolver; use brillig_vm::{Registers, VMStatus, VM}; use crate::{pwg::OpcodeNotSolvable, OpcodeResolutionError}; @@ -150,7 +150,7 @@ impl BrilligSolver { } } -/// Encapsulates a request from a Brillig VM process that encounters a [foreign call opcode][acir::brillig_vm::Opcode::ForeignCall] +/// Encapsulates a request from a Brillig VM process that encounters a [foreign call opcode][acir::brillig_vm::Opcode::ForeignCall] /// where the result of the foreign call has not yet been provided. /// /// The caller must resolve this opcode externally based upon the information in the request. diff --git a/acvm/src/pwg/mod.rs b/acvm/src/pwg/mod.rs index a336ea2fc..3fcf10882 100644 --- a/acvm/src/pwg/mod.rs +++ b/acvm/src/pwg/mod.rs @@ -8,7 +8,7 @@ use acir::{ native_types::{Expression, Witness, WitnessMap}, BlackBoxFunc, FieldElement, }; -use blackbox_solver::BlackBoxResolutionError; +use acvm_blackbox_solver::BlackBoxResolutionError; use self::{ arithmetic::ArithmeticSolver, brillig::BrilligSolver, directives::solve_directives, diff --git a/acvm/tests/solver.rs b/acvm/tests/solver.rs index de5c53ce6..ca0ca99ba 100644 --- a/acvm/tests/solver.rs +++ b/acvm/tests/solver.rs @@ -15,7 +15,7 @@ use acvm::{ pwg::{ACVMStatus, ErrorLocation, ForeignCallWaitInfo, OpcodeResolutionError, ACVM}, BlackBoxFunctionSolver, }; -use blackbox_solver::BlackBoxResolutionError; +use acvm_blackbox_solver::BlackBoxResolutionError; pub(crate) struct StubbedBackend; diff --git a/acvm/tests/stdlib.rs b/acvm/tests/stdlib.rs index 2413be6c9..309130d39 100644 --- a/acvm/tests/stdlib.rs +++ b/acvm/tests/stdlib.rs @@ -14,7 +14,7 @@ use acvm::{ pwg::{ACVMStatus, ACVM}, Language, }; -use blackbox_solver::{blake2s, hash_to_field_128_security, keccak256, sha256}; +use acvm_blackbox_solver::{blake2s, hash_to_field_128_security, keccak256, sha256}; use paste::paste; use proptest::prelude::*; use std::collections::{BTreeMap, BTreeSet}; diff --git a/acvm_js/Cargo.toml b/acvm_js/Cargo.toml index ae5c28801..d07294cc6 100644 --- a/acvm_js/Cargo.toml +++ b/acvm_js/Cargo.toml @@ -18,6 +18,7 @@ cfg-if = "1.0.0" [target.'cfg(target_arch = "wasm32")'.dependencies] acvm = { version = "0.26.1", path = "../acvm", default-features = false } +barretenberg_blackbox_solver = { version = "0.26.1", path = "../barretenberg_blackbox_solver", default-features = false } wasm-bindgen = { version = "0.2.87", features = ["serde-serialize"] } wasm-bindgen-futures = "0.4.36" serde = { version = "1.0.136", features = ["derive"] } diff --git a/acvm_js/src/execute.rs b/acvm_js/src/execute.rs index 7ee87b96e..e623aff42 100644 --- a/acvm_js/src/execute.rs +++ b/acvm_js/src/execute.rs @@ -1,9 +1,9 @@ -#[allow(deprecated)] use acvm::{ acir::circuit::{Circuit, OpcodeLocation}, - blackbox_solver::BarretenbergSolver, pwg::{ACVMStatus, ErrorLocation, OpcodeResolutionError, ACVM}, }; +#[allow(deprecated)] +use barretenberg_blackbox_solver::BarretenbergSolver; use js_sys::Error; use wasm_bindgen::prelude::wasm_bindgen; diff --git a/barretenberg_blackbox_solver/Cargo.toml b/barretenberg_blackbox_solver/Cargo.toml new file mode 100644 index 000000000..85cb7c20f --- /dev/null +++ b/barretenberg_blackbox_solver/Cargo.toml @@ -0,0 +1,70 @@ +[package] +name = "barretenberg_blackbox_solver" +description = "Something about bb" +version = "0.26.1" +authors.workspace = true +edition.workspace = true +license.workspace = true +rust-version.workspace = true +repository.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +acir.workspace = true +acvm_blackbox_solver.workspace = true +thiserror.workspace = true + +blake2 = "0.10.6" +sha2 = "0.10.6" +sha3 = "0.10.6" +k256 = { version = "0.11.0", features = [ + "ecdsa", + "ecdsa-core", + "sha256", + "digest", + "arithmetic", +] } +p256 = { version = "0.11.0", features = [ + "ecdsa", + "ecdsa-core", + "sha256", + "digest", + "arithmetic", +] } +hex = "0.4.2" +num-bigint.workspace = true + +# Barretenberg WASM dependencies +rust-embed = { version = "6.6.0", features = [ + "debug-embed", + "interpolate-folder-path", + "include-exclude", +] } +[target.'cfg(target_arch = "wasm32")'.dependencies] +wasmer = { version = "3.3", default-features = false, features = [ + "js-default", +] } +getrandom = { version = "0.2", features = ["js"] } +wasm-bindgen-futures = "0.4.36" +js-sys = "0.3.62" + + +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +getrandom = "0.2" +wasmer = "3.3" + + +[build-dependencies] +pkg-config = "0.3" +tar = "~0.4.15" +flate2 = "~1.0.1" +reqwest = { version = "0.11.16", default-features = false, features = [ + "rustls-tls", + "blocking", +] } + +[features] +default = ["bn254"] +bn254 = ["acir/bn254"] +bls12_381 = ["acir/bls12_381"] diff --git a/blackbox_solver/build.rs b/barretenberg_blackbox_solver/build.rs similarity index 100% rename from blackbox_solver/build.rs rename to barretenberg_blackbox_solver/build.rs diff --git a/blackbox_solver/src/barretenberg/mod.rs b/barretenberg_blackbox_solver/src/lib.rs similarity index 97% rename from blackbox_solver/src/barretenberg/mod.rs rename to barretenberg_blackbox_solver/src/lib.rs index 1058d5afb..db384b601 100644 --- a/blackbox_solver/src/barretenberg/mod.rs +++ b/barretenberg_blackbox_solver/src/lib.rs @@ -1,6 +1,5 @@ use acir::{BlackBoxFunc, FieldElement}; - -use crate::{BlackBoxFunctionSolver, BlackBoxResolutionError}; +use acvm_blackbox_solver::{BlackBoxFunctionSolver, BlackBoxResolutionError}; mod wasm; diff --git a/blackbox_solver/src/barretenberg/wasm/barretenberg_structures.rs b/barretenberg_blackbox_solver/src/wasm/barretenberg_structures.rs similarity index 100% rename from blackbox_solver/src/barretenberg/wasm/barretenberg_structures.rs rename to barretenberg_blackbox_solver/src/wasm/barretenberg_structures.rs diff --git a/blackbox_solver/src/barretenberg/wasm/mod.rs b/barretenberg_blackbox_solver/src/wasm/mod.rs similarity index 100% rename from blackbox_solver/src/barretenberg/wasm/mod.rs rename to barretenberg_blackbox_solver/src/wasm/mod.rs diff --git a/blackbox_solver/src/barretenberg/wasm/pedersen.rs b/barretenberg_blackbox_solver/src/wasm/pedersen.rs similarity index 100% rename from blackbox_solver/src/barretenberg/wasm/pedersen.rs rename to barretenberg_blackbox_solver/src/wasm/pedersen.rs diff --git a/blackbox_solver/src/barretenberg/wasm/scalar_mul.rs b/barretenberg_blackbox_solver/src/wasm/scalar_mul.rs similarity index 98% rename from blackbox_solver/src/barretenberg/wasm/scalar_mul.rs rename to barretenberg_blackbox_solver/src/wasm/scalar_mul.rs index aa333c317..71e1701bc 100644 --- a/blackbox_solver/src/barretenberg/wasm/scalar_mul.rs +++ b/barretenberg_blackbox_solver/src/wasm/scalar_mul.rs @@ -1,7 +1,7 @@ use acir::FieldElement; use num_bigint::BigUint; -use crate::barretenberg::wasm::FeatureError; +use crate::wasm::FeatureError; use super::{Barretenberg, Error, FIELD_BYTES}; diff --git a/blackbox_solver/src/barretenberg/wasm/schnorr.rs b/barretenberg_blackbox_solver/src/wasm/schnorr.rs similarity index 100% rename from blackbox_solver/src/barretenberg/wasm/schnorr.rs rename to barretenberg_blackbox_solver/src/wasm/schnorr.rs diff --git a/blackbox_solver/Cargo.toml b/blackbox_solver/Cargo.toml index a71025726..fa03d67f7 100644 --- a/blackbox_solver/Cargo.toml +++ b/blackbox_solver/Cargo.toml @@ -31,37 +31,6 @@ p256 = { version = "0.11.0", features = [ "digest", "arithmetic", ] } -hex = "0.4.2" -num-bigint.workspace = true - -# Barretenberg WASM dependencies -rust-embed = { version = "6.6.0", features = [ - "debug-embed", - "interpolate-folder-path", - "include-exclude", -] } -[target.'cfg(target_arch = "wasm32")'.dependencies] -wasmer = { version = "3.3", default-features = false, features = [ - "js-default", -] } -getrandom = { version = "0.2", features = ["js"] } -wasm-bindgen-futures = "0.4.36" -js-sys = "0.3.62" - - -[target.'cfg(not(target_arch = "wasm32"))'.dependencies] -getrandom = "0.2" -wasmer = "3.3" - - -[build-dependencies] -pkg-config = "0.3" -tar = "~0.4.15" -flate2 = "~1.0.1" -reqwest = { version = "0.11.16", default-features = false, features = [ - "rustls-tls", - "blocking", -] } [features] default = ["bn254"] diff --git a/blackbox_solver/src/lib.rs b/blackbox_solver/src/lib.rs index 6a5847338..c3242846b 100644 --- a/blackbox_solver/src/lib.rs +++ b/blackbox_solver/src/lib.rs @@ -12,11 +12,6 @@ use sha2::Sha256; use sha3::Keccak256; use thiserror::Error; -mod barretenberg; - -#[allow(deprecated)] -pub use barretenberg::BarretenbergSolver; - #[derive(Clone, PartialEq, Eq, Debug, Error)] pub enum BlackBoxResolutionError { #[error("unsupported blackbox function: {0}")] diff --git a/brillig_vm/Cargo.toml b/brillig_vm/Cargo.toml index 7740f7cee..5928f9d65 100644 --- a/brillig_vm/Cargo.toml +++ b/brillig_vm/Cargo.toml @@ -12,7 +12,7 @@ repository.workspace = true [dependencies] acir.workspace = true -blackbox_solver.workspace = true +acvm_blackbox_solver.workspace = true num-bigint.workspace = true num-traits.workspace = true diff --git a/brillig_vm/src/black_box.rs b/brillig_vm/src/black_box.rs index 5eb2b0abd..ada8a2f59 100644 --- a/brillig_vm/src/black_box.rs +++ b/brillig_vm/src/black_box.rs @@ -1,6 +1,6 @@ use acir::brillig::{BlackBoxOp, HeapArray, HeapVector, Value}; use acir::{BlackBoxFunc, FieldElement}; -use blackbox_solver::{ +use acvm_blackbox_solver::{ blake2s, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, hash_to_field_128_security, keccak256, sha256, BlackBoxFunctionSolver, BlackBoxResolutionError, }; diff --git a/brillig_vm/src/lib.rs b/brillig_vm/src/lib.rs index cd614d762..082f0169c 100644 --- a/brillig_vm/src/lib.rs +++ b/brillig_vm/src/lib.rs @@ -22,9 +22,9 @@ mod black_box; mod memory; mod registers; +use acvm_blackbox_solver::{BlackBoxFunctionSolver, BlackBoxResolutionError}; use arithmetic::{evaluate_binary_bigint_op, evaluate_binary_field_op}; use black_box::evaluate_black_box; -use blackbox_solver::{BlackBoxFunctionSolver, BlackBoxResolutionError}; pub use memory::Memory; use num_bigint::BigUint; @@ -42,7 +42,7 @@ pub enum VMStatus { call_stack: ErrorCallStack, }, /// The VM process is not solvable as a [foreign call][Opcode::ForeignCall] has been - /// reached where the outputs are yet to be resolved. + /// reached where the outputs are yet to be resolved. /// /// The caller should interpret the information returned to compute a [ForeignCallResult] /// and update the Brillig process. The VM can then be restarted to fully solve the previously diff --git a/release-please-config.json b/release-please-config.json index 787ba1236..679194a84 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -63,6 +63,9 @@ }, "blackbox_solver": { "component": "acvm_blackbox_solver" + }, + "barretenberg_blackbox_solver": { + "component": "barretenberg_blackbox_solver" } }, "plugins": [