diff --git a/Cargo.lock b/Cargo.lock index 30bd29bac1a..f635a3ad69f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,12 +4,12 @@ version = 3 [[package]] name = "acir" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502a9126627ae67868515031c2283e64f3e1fef5ff93850009ed89a8a24fac60" +checksum = "8f5313e60a2175414d4958aca31c85a9be2a51ccd793ebef318ad584b3dce14d" dependencies = [ "acir_field", - "brillig_vm", + "brillig", "flate2", "rmp-serde", "serde", @@ -18,9 +18,9 @@ dependencies = [ [[package]] name = "acir_field" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a98fe4e3f9156f5551c8c9686e8f720a990d000e1e666e08a86e938a36ac8be" +checksum = "8685dc79aef09f680654bbbd9f92626631eea20f04020cb27f037ed60f65b488" dependencies = [ "ark-bn254", "ark-ff", @@ -32,29 +32,27 @@ dependencies = [ [[package]] name = "acvm" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95315759a51115860af49a492791ae5155c3d2c0555eec1358faa5d74c763391" +checksum = "a1852d11a4c0eb933ee50ff167b50797d7436e0d6c451685fa54279fa9ff9fea" dependencies = [ "acir", + "acvm_blackbox_solver", "acvm_stdlib", "async-trait", - "blake2", + "brillig_vm", "indexmap 1.9.3", - "k256", "num-bigint", "num-traits", - "p256", - "sha2", - "sha3", + "rmp-serde", "thiserror", ] [[package]] name = "acvm-backend-barretenberg" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e23bca54647ad1e9e89c24ca62f813427cea990177aebd68139081649b96e3b" +checksum = "5b994c87dcf36e067a4a1e1f0c3e35efa18949907162fd0d7828e69dbb7543b3" dependencies = [ "acvm", "barretenberg-sys", @@ -70,11 +68,27 @@ dependencies = [ "wasmer", ] +[[package]] +name = "acvm_blackbox_solver" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e97410fc7a2bec1f07722b98ed4eed9f318553389ad6f427be00a3b204d86fd" +dependencies = [ + "acir", + "acir_field", + "blake2", + "k256", + "p256", + "sha2", + "sha3", + "thiserror", +] + [[package]] name = "acvm_stdlib" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d2d8407e55ac26078af1d783408525e7f906e531cb04adcc47650d7994f62" +checksum = "9036b2221fadc083e34ce957a422f9374fc869d3288c130b46ee7275931f9632" dependencies = [ "acir", ] @@ -519,18 +533,25 @@ dependencies = [ ] [[package]] -name = "brillig_vm" -version = "0.17.0" +name = "brillig" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36821ba87dd1807784d679bca54d753665014b109f6acfe38516eec7f3d71941" +checksum = "50735c01c408a514b3a3d1d35899016010c9a7ef571c39a594543401be392713" dependencies = [ "acir_field", - "blake2", - "k256", - "p256", "serde", - "sha2", - "sha3", +] + +[[package]] +name = "brillig_vm" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6190ab8a4b43edce712d6c26953382ce72ce6aa75c87c96ed48a7fa8253c9cd" +dependencies = [ + "acir", + "acir_field", + "acvm_blackbox_solver", + "brillig", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 2ceef28d077..44a3d2688cd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ edition = "2021" rust-version = "1.66" [workspace.dependencies] -acvm = "0.17.0" +acvm = "0.18.1" arena = { path = "crates/arena" } fm = { path = "crates/fm" } iter-extended = { path = "crates/iter-extended" } diff --git a/crates/nargo/src/ops/codegen_verifier.rs b/crates/nargo/src/ops/codegen_verifier.rs index 4db3d53f7aa..851f735ae55 100644 --- a/crates/nargo/src/ops/codegen_verifier.rs +++ b/crates/nargo/src/ops/codegen_verifier.rs @@ -1,9 +1,10 @@ -use acvm::SmartContract; +use acvm::{acir::circuit::Circuit, SmartContract}; pub fn codegen_verifier( backend: &B, common_reference_string: &[u8], + circuit: &Circuit, verification_key: &[u8], ) -> Result { - backend.eth_contract_from_vk(common_reference_string, verification_key) + backend.eth_contract_from_vk(common_reference_string, circuit, verification_key) } diff --git a/crates/nargo/src/ops/execute.rs b/crates/nargo/src/ops/execute.rs index e4d85da4998..f5b2cd7a3b6 100644 --- a/crates/nargo/src/ops/execute.rs +++ b/crates/nargo/src/ops/execute.rs @@ -1,4 +1,4 @@ -use acvm::acir::brillig_vm::{ForeignCallResult, Value}; +use acvm::acir::brillig::{ForeignCallResult, Value}; use acvm::pwg::{ACVMStatus, ForeignCallWaitInfo, ACVM}; use acvm::BlackBoxFunctionSolver; use acvm::{acir::circuit::Circuit, acir::native_types::WitnessMap}; diff --git a/crates/nargo_cli/Cargo.toml b/crates/nargo_cli/Cargo.toml index 2f87ee4a0e1..26e0436f5d4 100644 --- a/crates/nargo_cli/Cargo.toml +++ b/crates/nargo_cli/Cargo.toml @@ -47,7 +47,7 @@ color-eyre = "0.6.2" tokio = { version = "1.0", features = ["io-std"] } # Backends -acvm-backend-barretenberg = { version = "0.7.0", default-features = false } +acvm-backend-barretenberg = { version = "0.8.0", default-features = false } [dev-dependencies] tempdir = "0.3.7" diff --git a/crates/nargo_cli/src/cli/codegen_verifier_cmd.rs b/crates/nargo_cli/src/cli/codegen_verifier_cmd.rs index ae6fa411c7c..40587509024 100644 --- a/crates/nargo_cli/src/cli/codegen_verifier_cmd.rs +++ b/crates/nargo_cli/src/cli/codegen_verifier_cmd.rs @@ -65,9 +65,13 @@ pub(crate) fn run( let verification_key = preprocessed_program .verification_key .expect("Verification key should exist as `true` is passed to `preprocess_program`"); - let smart_contract_string = - codegen_verifier(backend, &common_reference_string, &verification_key) - .map_err(CliError::SmartContractError)?; + let smart_contract_string = codegen_verifier( + backend, + &common_reference_string, + &preprocessed_program.bytecode, + &verification_key, + ) + .map_err(CliError::SmartContractError)?; write_cached_common_reference_string(&common_reference_string); diff --git a/crates/nargo_cli/src/cli/compile_cmd.rs b/crates/nargo_cli/src/cli/compile_cmd.rs index 19360efc896..e395b263efd 100644 --- a/crates/nargo_cli/src/cli/compile_cmd.rs +++ b/crates/nargo_cli/src/cli/compile_cmd.rs @@ -1,4 +1,4 @@ -use acvm::{acir::circuit::Circuit, compiler::CircuitSimplifier, Backend}; +use acvm::{acir::circuit::Circuit, Backend}; use iter_extended::try_vecmap; use nargo::{artifacts::contract::PreprocessedContract, NargoError}; use noirc_driver::{ @@ -135,16 +135,11 @@ pub(super) fn optimize_circuit( backend: &B, circuit: Circuit, ) -> Result> { - // Note that this makes the `CircuitSimplifier` a noop. - // The `CircuitSimplifier` should be reworked to not rely on values being inserted during ACIR gen. - let simplifier = CircuitSimplifier::new(0); - let optimized_circuit = acvm::compiler::compile( - circuit, - backend.np_language(), - |opcode| backend.supports_opcode(opcode), - &simplifier, - ) - .map_err(|_| NargoError::CompilationError)?; + let (optimized_circuit, _): (Circuit, Vec) = + acvm::compiler::compile(circuit, backend.np_language(), |opcode| { + backend.supports_opcode(opcode) + }) + .map_err(|_| NargoError::CompilationError)?; Ok(optimized_circuit) } diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_pedersen/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_pedersen/Nargo.toml new file mode 100644 index 00000000000..fb93b9aa2a7 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_pedersen/Nargo.toml @@ -0,0 +1,6 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] + \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_pedersen/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_pedersen/Prover.toml new file mode 100644 index 00000000000..2fb3b1e1abf --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_pedersen/Prover.toml @@ -0,0 +1,6 @@ +x = "0" +y = "1" +salt = "42" + +out_x = "0x0c5e1ddecd49de44ed5e5798d3f6fb7c71fe3d37f5bee8664cf88a445b5ba0af" +out_y = "0x230294a041e26fe80b827c2ef5cb8784642bbaa83842da2714d62b1f3c4f9752" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_pedersen/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_pedersen/src/main.nr new file mode 100644 index 00000000000..d41a7bd95ef --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_pedersen/src/main.nr @@ -0,0 +1,17 @@ +use dep::std; + +unconstrained fn main(x: Field, y: Field, salt: Field, out_x: Field, out_y: Field ) { + let res = std::hash::pedersen_with_separator([x, y], 0); + assert(res[0] == out_x); + assert(res[1] == out_y); + + let raw_data = [x,y]; + let mut state = 0; + for i in 0..(2 as u32) { + state = state * 8 + raw_data[i]; + } + state += salt; + let hash = std::hash::pedersen_with_separator([state], 0); + assert(std::hash::pedersen_with_separator([43], 0)[0] == hash[0]); +} + diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_scalar_mul/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_scalar_mul/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_scalar_mul/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_scalar_mul/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_scalar_mul/Prover.toml new file mode 100644 index 00000000000..69b91cb5f31 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_scalar_mul/Prover.toml @@ -0,0 +1,7 @@ +a = "1" +a_pub_x = "0x0000000000000000000000000000000000000000000000000000000000000001" +a_pub_y = "0x0000000000000002cf135e7506a45d632d270d45f1181294833fc48d823f272c" + +b = "2" +b_pub_x = "0x06ce1b0827aafa85ddeb49cdaa36306d19a74caa311e13d46d8bc688cdbffffe" +b_pub_y = "0x1c122f81a3a14964909ede0ba2a6855fc93faf6fa1a788bf467be7e7a43f80ac" \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_scalar_mul/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_scalar_mul/src/main.nr new file mode 100644 index 00000000000..7941765a327 --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_scalar_mul/src/main.nr @@ -0,0 +1,22 @@ +use dep::std; + +unconstrained fn main( + a: Field, + a_pub_x: pub Field, + a_pub_y: pub Field, + b: Field, + b_pub_x: pub Field, + b_pub_y: pub Field +) { + let mut priv_key = a; + let mut pub_x: Field = a_pub_x; + let mut pub_y: Field = a_pub_y; + if a != 1 { // Change `a` in Prover.toml to test input `b` + priv_key = b; + pub_x = b_pub_x; + pub_y = b_pub_y; + } + let res = std::scalar_mul::fixed_base(priv_key); + assert(res[0] == pub_x); + assert(res[1] == pub_y); +} diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_schnorr/Nargo.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_schnorr/Nargo.toml new file mode 100644 index 00000000000..e0b467ce5da --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_schnorr/Nargo.toml @@ -0,0 +1,5 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_schnorr/Prover.toml b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_schnorr/Prover.toml new file mode 100644 index 00000000000..c5c3ab5101a --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_schnorr/Prover.toml @@ -0,0 +1,9 @@ +message = [0,1,2,3,4,5,6,7,8,9] +pub_key_x = "0x17cbd3ed3151ccfd170efe1d54280a6a4822640bf5c369908ad74ea21518a9c5" +pub_key_y = "0x0e0456e3795c1a31f20035b741cd6158929eeccd320d299cfcac962865a6bc74" +signature = [ + 5, 202, 31, 146, 81, 242, 246, 69, 43, 107, 249, 153, 198, 44, 14, 111, 191, 121, 137, 166, + 160, 103, 18, 181, 243, 233, 226, 95, 67, 16, 37, 128, 85, 76, 19, 253, 30, 77, 192, 53, 138, + 205, 69, 33, 236, 163, 83, 194, 84, 137, 184, 221, 176, 121, 179, 27, 63, 70, 54, 16, 176, + 250, 39, 239, +] \ No newline at end of file diff --git a/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_schnorr/src/main.nr b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_schnorr/src/main.nr new file mode 100644 index 00000000000..0ffd6af6fcd --- /dev/null +++ b/crates/nargo_cli/tests/test_data_ssa_refactor/brillig_schnorr/src/main.nr @@ -0,0 +1,10 @@ +use dep::std; + +// Note: If main has any unsized types, then the verifier will never be able +// to figure out the circuit instance +unconstrained fn main(message: [u8; 10], pub_key_x: Field, pub_key_y: Field, signature: [u8; 64]) { + // Is there ever a situation where someone would want + // to ensure that a signature was invalid? + let valid_signature = std::schnorr::verify_signature(pub_key_x,pub_key_y,signature, message); + assert(valid_signature); +} diff --git a/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs b/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs index 6cdd9931ed9..1ee323e4c09 100644 --- a/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs +++ b/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs @@ -1,5 +1,5 @@ use acvm::acir::{ - brillig_vm::{BlackBoxOp, HeapVector, RegisterOrMemory}, + brillig::{BlackBoxOp, HeapVector, RegisterOrMemory}, BlackBoxFunc, }; @@ -96,6 +96,57 @@ pub(crate) fn convert_black_box_call( ) } } + BlackBoxFunc::Pedersen => { + if let ( + [RegisterOrMemory::HeapArray(message_array), RegisterOrMemory::RegisterIndex(domain_separator)], + [RegisterOrMemory::HeapArray(result_array)], + ) = (function_arguments, function_results) + { + let message_vector = brillig_context.array_to_vector(message_array); + brillig_context.black_box_op_instruction(BlackBoxOp::Pedersen { + inputs: message_vector, + domain_separator: *domain_separator, + output: *result_array, + }); + } else { + unreachable!("ICE: Pedersen expects one array argument, a register for the domain separator, and one array result") + } + } + BlackBoxFunc::SchnorrVerify => { + if let ( + [RegisterOrMemory::RegisterIndex(public_key_x), RegisterOrMemory::RegisterIndex(public_key_y), RegisterOrMemory::HeapArray(signature), RegisterOrMemory::HeapArray(message_hash)], + [RegisterOrMemory::RegisterIndex(result_register)], + ) = (function_arguments, function_results) + { + let message_hash = brillig_context.array_to_vector(message_hash); + let signature = brillig_context.array_to_vector(signature); + brillig_context.black_box_op_instruction(BlackBoxOp::SchnorrVerify { + public_key_x: *public_key_x, + public_key_y: *public_key_y, + message: message_hash, + signature, + result: *result_register, + }); + } else { + unreachable!("ICE: Schnorr verify expects two registers for the public key, an array for signature, an array for the message hash and one result register") + } + } + BlackBoxFunc::FixedBaseScalarMul => { + if let ( + [RegisterOrMemory::RegisterIndex(scalar)], + [RegisterOrMemory::HeapArray(result_array)], + ) = (function_arguments, function_results) + { + brillig_context.black_box_op_instruction(BlackBoxOp::FixedBaseScalarMul { + input: *scalar, + result: *result_array, + }); + } else { + unreachable!( + "ICE: FixedBaseScalarMul expects one register argument and one array result" + ) + } + } _ => unimplemented!("ICE: Black box function {:?} is not implemented", bb_func), } } diff --git a/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_block.rs b/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_block.rs index eedc8824168..7e8865328aa 100644 --- a/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_block.rs +++ b/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_block.rs @@ -11,9 +11,8 @@ use crate::ssa_refactor::ir::{ types::{NumericType, Type}, value::{Value, ValueId}, }; -use acvm::acir::brillig_vm::{ - BinaryFieldOp, BinaryIntOp, HeapArray, HeapVector, RegisterIndex, RegisterOrMemory, -}; +use acvm::acir::brillig::{BinaryFieldOp, BinaryIntOp, HeapArray, RegisterIndex, RegisterOrMemory}; +use acvm::brillig_vm::brillig::HeapVector; use acvm::FieldElement; use iter_extended::vecmap; diff --git a/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_directive.rs b/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_directive.rs index 4c94d3bd6d0..219a954a595 100644 --- a/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_directive.rs +++ b/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_directive.rs @@ -1,4 +1,4 @@ -use acvm::acir::brillig_vm::{BinaryFieldOp, Opcode as BrilligOpcode, RegisterIndex, Value}; +use acvm::acir::brillig::{BinaryFieldOp, Opcode as BrilligOpcode, RegisterIndex, Value}; /// Generates brillig bytecode which computes the inverse of its input if not null, and zero else. pub(crate) fn directive_invert() -> Vec { diff --git a/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_fn.rs b/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_fn.rs index 27cce0a83f9..4a5ae6f3f09 100644 --- a/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_fn.rs +++ b/crates/noirc_evaluator/src/brillig/brillig_gen/brillig_fn.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use acvm::acir::brillig_vm::RegisterIndex; +use acvm::acir::brillig::RegisterIndex; use crate::{ brillig::brillig_ir::{ diff --git a/crates/noirc_evaluator/src/brillig/brillig_ir.rs b/crates/noirc_evaluator/src/brillig/brillig_ir.rs index d2cf7c43554..1d1a4534ec3 100644 --- a/crates/noirc_evaluator/src/brillig/brillig_ir.rs +++ b/crates/noirc_evaluator/src/brillig/brillig_ir.rs @@ -13,7 +13,7 @@ use self::{ registers::BrilligRegistersContext, }; use acvm::{ - acir::brillig_vm::{ + acir::brillig::{ BinaryFieldOp, BinaryIntOp, BlackBoxOp, HeapArray, HeapVector, Opcode as BrilligOpcode, RegisterIndex, RegisterOrMemory, Value, }, @@ -781,15 +781,44 @@ pub(crate) enum BrilligBinaryOp { mod tests { use std::vec; - use acvm::acir::brillig_vm::{ + use acvm::acir::brillig::{ BinaryIntOp, ForeignCallOutput, ForeignCallResult, HeapVector, RegisterIndex, - RegisterOrMemory, Registers, VMStatus, Value, VM, + RegisterOrMemory, Value, }; + use acvm::brillig_vm::{Registers, VMStatus, VM}; + use acvm::{BlackBoxFunctionSolver, BlackBoxResolutionError, FieldElement}; use crate::brillig::brillig_ir::{BrilligContext, BRILLIG_MEMORY_ADDRESSING_BIT_SIZE}; use super::{BrilligBinaryOp, BrilligOpcode, ReservedRegisters}; + struct DummyBlackBoxSolver; + + impl BlackBoxFunctionSolver for DummyBlackBoxSolver { + fn schnorr_verify( + &self, + _public_key_x: &FieldElement, + _public_key_y: &FieldElement, + _signature: &[u8], + _message: &[u8], + ) -> Result { + Ok(true) + } + fn pedersen( + &self, + _inputs: &[FieldElement], + _domain_separator: u32, + ) -> Result<(FieldElement, FieldElement), BlackBoxResolutionError> { + Ok((2_u128.into(), 3_u128.into())) + } + fn fixed_base_scalar_mul( + &self, + _input: &FieldElement, + ) -> Result<(FieldElement, FieldElement), BlackBoxResolutionError> { + Ok((4_u128.into(), 5_u128.into())) + } + } + /// Test a Brillig foreign call returning a vector #[test] fn test_brillig_ir_foreign_call_return_vector() { @@ -854,6 +883,7 @@ mod tests { vec![], bytecode, vec![ForeignCallResult { values: vec![ForeignCallOutput::Array(number_sequence)] }], + &DummyBlackBoxSolver, ); let status = vm.process_opcodes(); assert_eq!(status, VMStatus::Finished); diff --git a/crates/noirc_evaluator/src/brillig/brillig_ir/artifact.rs b/crates/noirc_evaluator/src/brillig/brillig_ir/artifact.rs index 71b06537bd5..53e4702213e 100644 --- a/crates/noirc_evaluator/src/brillig/brillig_ir/artifact.rs +++ b/crates/noirc_evaluator/src/brillig/brillig_ir/artifact.rs @@ -1,4 +1,4 @@ -use acvm::acir::brillig_vm::{Opcode as BrilligOpcode, RegisterIndex}; +use acvm::acir::brillig::{Opcode as BrilligOpcode, RegisterIndex}; use std::collections::HashMap; use crate::brillig::brillig_ir::ReservedRegisters; diff --git a/crates/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs b/crates/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs index 1e2836fb9bd..977792ee07b 100644 --- a/crates/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs +++ b/crates/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs @@ -1,7 +1,7 @@ ///! This module contains functions for producing a higher level view disassembler of Brillig. use super::BrilligBinaryOp; use crate::brillig::brillig_ir::{ReservedRegisters, BRILLIG_MEMORY_ADDRESSING_BIT_SIZE}; -use acvm::acir::brillig_vm::{ +use acvm::acir::brillig::{ BinaryFieldOp, BinaryIntOp, BlackBoxOp, HeapArray, HeapVector, RegisterIndex, RegisterOrMemory, Value, }; @@ -319,6 +319,22 @@ pub(crate) fn black_box_op_instruction(op: BlackBoxOp) { result ); } + BlackBoxOp::FixedBaseScalarMul { input, result } => { + debug_println!(" FIXED_BASE_SCALAR_MUL {} -> {}", input, result); + } + BlackBoxOp::Pedersen { inputs, domain_separator, output } => { + debug_println!(" PEDERSEN {} {} -> {}", inputs, domain_separator, output); + } + BlackBoxOp::SchnorrVerify { public_key_x, public_key_y, message, signature, result } => { + debug_println!( + " SCHNORR_VERIFY {} {} {} {} -> {}", + public_key_x, + public_key_y, + message, + signature, + result + ); + } } } diff --git a/crates/noirc_evaluator/src/brillig/brillig_ir/registers.rs b/crates/noirc_evaluator/src/brillig/brillig_ir/registers.rs index 65018f41794..2a04352694c 100644 --- a/crates/noirc_evaluator/src/brillig/brillig_ir/registers.rs +++ b/crates/noirc_evaluator/src/brillig/brillig_ir/registers.rs @@ -1,4 +1,4 @@ -use acvm::acir::brillig_vm::RegisterIndex; +use acvm::acir::brillig::RegisterIndex; use super::ReservedRegisters; diff --git a/crates/noirc_evaluator/src/ssa/acir_gen/operations/sort.rs b/crates/noirc_evaluator/src/ssa/acir_gen/operations/sort.rs index 5ff717ae657..e3577610c55 100644 --- a/crates/noirc_evaluator/src/ssa/acir_gen/operations/sort.rs +++ b/crates/noirc_evaluator/src/ssa/acir_gen/operations/sort.rs @@ -115,8 +115,8 @@ fn permutation_layer( mod test { use acvm::{ acir::native_types::WitnessMap, - pwg::{ACVMStatus, OpcodeResolutionError, ACVM}, - BlackBoxFunctionSolver, FieldElement, + pwg::{ACVMStatus, ACVM}, + BlackBoxFunctionSolver, BlackBoxResolutionError, FieldElement, }; use crate::{ @@ -133,20 +133,20 @@ mod test { _public_key_y: &FieldElement, _signature: &[u8], _message: &[u8], - ) -> Result { + ) -> Result { panic!("Path not trodden by this test") } fn pedersen( &self, _inputs: &[FieldElement], _domain_separator: u32, - ) -> Result<(FieldElement, FieldElement), OpcodeResolutionError> { + ) -> Result<(FieldElement, FieldElement), BlackBoxResolutionError> { panic!("Path not trodden by this test") } fn fixed_base_scalar_mul( &self, _input: &FieldElement, - ) -> Result<(FieldElement, FieldElement), OpcodeResolutionError> { + ) -> Result<(FieldElement, FieldElement), BlackBoxResolutionError> { panic!("Path not trodden by this test") } } diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/acir_ir/acir_variable.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/acir_ir/acir_variable.rs index c378403399b..397e61f685d 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/acir_ir/acir_variable.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/acir_ir/acir_variable.rs @@ -4,7 +4,7 @@ use crate::ssa_refactor::acir_gen::AcirValue; use crate::ssa_refactor::ir::types::Type as SsaType; use crate::ssa_refactor::ir::{instruction::Endian, types::NumericType}; use acvm::acir::{ - brillig_vm::Opcode as BrilligOpcode, + brillig::Opcode as BrilligOpcode, circuit::brillig::{BrilligInputs, BrilligOutputs}, }; diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/acir_ir/generated_acir.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/acir_ir/generated_acir.rs index ed354f77e10..597108f98cb 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/acir_ir/generated_acir.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/acir_ir/generated_acir.rs @@ -4,7 +4,7 @@ use crate::brillig::brillig_gen::brillig_directive; use super::errors::AcirGenError; use acvm::acir::{ - brillig_vm::Opcode as BrilligOpcode, + brillig::Opcode as BrilligOpcode, circuit::{ brillig::{Brillig as AcvmBrillig, BrilligInputs, BrilligOutputs}, directives::{LogInfo, QuotientDirective}, diff --git a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs index 38b9c157865..975ba9ea4fc 100644 --- a/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs +++ b/crates/noirc_evaluator/src/ssa_refactor/acir_gen/mod.rs @@ -25,7 +25,7 @@ use super::{ ssa_gen::Ssa, }; use acvm::{ - acir::{brillig_vm::Opcode, native_types::Expression}, + acir::{brillig::Opcode, native_types::Expression}, FieldElement, }; use iter_extended::vecmap; diff --git a/crates/wasm/src/compile.rs b/crates/wasm/src/compile.rs index e4370e3e678..1218bbe5d0d 100644 --- a/crates/wasm/src/compile.rs +++ b/crates/wasm/src/compile.rs @@ -1,4 +1,4 @@ -use acvm::{acir::circuit::Circuit, compiler::CircuitSimplifier}; +use acvm::acir::circuit::Circuit; use gloo_utils::format::JsValueSerdeExt; use log::debug; use noirc_driver::{ @@ -97,7 +97,7 @@ pub fn compile(args: JsValue) -> JsValue { .0; let optimized_contracts: Vec = - compiled_contracts.into_iter().map(|contract| optimize_contract(contract)).collect(); + compiled_contracts.into_iter().map(optimize_contract).collect(); ::from_serde(&optimized_contracts).unwrap() } else { @@ -130,7 +130,7 @@ fn optimize_circuit(circuit: Circuit) -> Circuit { let language = acvm::Language::PLONKCSat { width: 3 }; #[allow(deprecated)] let opcode_supported = acvm::pwg::default_is_opcode_supported(language); - let simplifier = CircuitSimplifier::new(0); - acvm::compiler::compile(circuit, language, &opcode_supported, &simplifier) + acvm::compiler::compile(circuit, language, opcode_supported) .expect("Circuit optimization failed") + .0 }