From 914f18a02d758f375741b6de6eb1370fcd70c1ad Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Tue, 18 Mar 2025 01:39:38 +0000 Subject: [PATCH 1/2] chore: move resolved errors out of acir crate --- acvm-repo/acir/src/circuit/mod.rs | 10 ---------- acvm-repo/acvm/src/pwg/brillig.rs | 7 +++++-- acvm-repo/acvm/src/pwg/mod.rs | 14 +++++++++++++- acvm-repo/acvm_js/src/execute.rs | 3 +-- acvm-repo/acvm_js/src/js_execution_error.rs | 3 ++- tooling/nargo/src/errors.rs | 17 ++++++++++++----- tooling/nargo/src/ops/execute.rs | 7 +++---- 7 files changed, 36 insertions(+), 25 deletions(-) diff --git a/acvm-repo/acir/src/circuit/mod.rs b/acvm-repo/acir/src/circuit/mod.rs index 2f7bb92b184..97fb9cf5b7b 100644 --- a/acvm-repo/acir/src/circuit/mod.rs +++ b/acvm-repo/acir/src/circuit/mod.rs @@ -135,16 +135,6 @@ pub enum ResolvedAssertionPayload { Raw(RawAssertionPayload), } -#[derive(Debug, Copy, Clone)] -/// The opcode location for a call to a separate ACIR circuit -/// This includes the function index of the caller within a [program][Program] -/// and the index in the callers ACIR to the specific call opcode. -/// This is only resolved and set during circuit execution. -pub struct ResolvedOpcodeLocation { - pub acir_function_index: usize, - pub opcode_location: OpcodeLocation, -} - #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)] #[cfg_attr(feature = "arb", derive(proptest_derive::Arbitrary))] /// Opcodes are locatable so that callers can diff --git a/acvm-repo/acvm/src/pwg/brillig.rs b/acvm-repo/acvm/src/pwg/brillig.rs index 5cc1a248a55..d1cd6bfb7e2 100644 --- a/acvm-repo/acvm/src/pwg/brillig.rs +++ b/acvm-repo/acvm/src/pwg/brillig.rs @@ -4,7 +4,7 @@ use acir::{ AcirField, brillig::{ForeignCallParam, ForeignCallResult, Opcode as BrilligOpcode}, circuit::{ - ErrorSelector, OpcodeLocation, RawAssertionPayload, ResolvedAssertionPayload, + OpcodeLocation, brillig::{BrilligFunctionId, BrilligInputs, BrilligOutputs}, opcodes::BlockId, }, @@ -16,7 +16,10 @@ use serde::{Deserialize, Serialize}; use crate::{OpcodeResolutionError, pwg::OpcodeNotSolvable}; -use super::{get_value, insert_value, memory_op::MemoryOpSolver}; +use super::{ + ErrorSelector, RawAssertionPayload, ResolvedAssertionPayload, get_value, insert_value, + memory_op::MemoryOpSolver, +}; #[derive(Debug)] pub enum BrilligSolverStatus { diff --git a/acvm-repo/acvm/src/pwg/mod.rs b/acvm-repo/acvm/src/pwg/mod.rs index 1f51b9a4de0..d470ae59254 100644 --- a/acvm-repo/acvm/src/pwg/mod.rs +++ b/acvm-repo/acvm/src/pwg/mod.rs @@ -7,7 +7,6 @@ use acir::{ brillig::ForeignCallResult, circuit::{ AssertionPayload, ErrorSelector, ExpressionOrMemory, Opcode, OpcodeLocation, - RawAssertionPayload, ResolvedAssertionPayload, brillig::{BrilligBytecode, BrilligFunctionId}, opcodes::{ AcirFunctionId, BlockId, ConstantOrWitnessEnum, FunctionInput, InvalidInputBitSize, @@ -34,6 +33,7 @@ mod memory_op; pub use self::brillig::{BrilligSolver, BrilligSolverStatus}; pub use brillig::ForeignCallWaitInfo; +use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq)] pub enum ACVMStatus { @@ -117,6 +117,18 @@ impl std::fmt::Display for ErrorLocation { } } +#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)] +pub struct RawAssertionPayload { + pub selector: ErrorSelector, + pub data: Vec, +} + +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum ResolvedAssertionPayload { + String(String), + Raw(RawAssertionPayload), +} + #[derive(Clone, PartialEq, Eq, Debug, Error)] pub enum OpcodeResolutionError { #[error("Cannot solve opcode: {0}")] diff --git a/acvm-repo/acvm_js/src/execute.rs b/acvm-repo/acvm_js/src/execute.rs index 3efa6900f6e..5d55d96b20b 100644 --- a/acvm-repo/acvm_js/src/execute.rs +++ b/acvm-repo/acvm_js/src/execute.rs @@ -1,12 +1,11 @@ use std::{future::Future, pin::Pin}; -use acvm::acir::circuit::ResolvedAssertionPayload; use acvm::acir::circuit::brillig::BrilligBytecode; use acvm::{BlackBoxFunctionSolver, FieldElement}; use acvm::{ acir::circuit::{Circuit, Program}, acir::native_types::{WitnessMap, WitnessStack}, - pwg::{ACVM, ACVMStatus, ErrorLocation, OpcodeResolutionError}, + pwg::{ACVM, ACVMStatus, ErrorLocation, OpcodeResolutionError, ResolvedAssertionPayload}, }; use bn254_blackbox_solver::Bn254BlackBoxSolver; diff --git a/acvm-repo/acvm_js/src/js_execution_error.rs b/acvm-repo/acvm_js/src/js_execution_error.rs index 6aa7cf75678..37799e31683 100644 --- a/acvm-repo/acvm_js/src/js_execution_error.rs +++ b/acvm-repo/acvm_js/src/js_execution_error.rs @@ -1,6 +1,7 @@ use acvm::{ FieldElement, - acir::circuit::{OpcodeLocation, RawAssertionPayload, brillig::BrilligFunctionId}, + acir::circuit::{OpcodeLocation, brillig::BrilligFunctionId}, + pwg::RawAssertionPayload, }; use gloo_utils::format::JsValueSerdeExt; use js_sys::{Array, Error, JsString, Reflect}; diff --git a/tooling/nargo/src/errors.rs b/tooling/nargo/src/errors.rs index f1743af79ca..60f1ae88d02 100644 --- a/tooling/nargo/src/errors.rs +++ b/tooling/nargo/src/errors.rs @@ -2,11 +2,8 @@ use std::collections::BTreeMap; use acvm::{ AcirField, FieldElement, - acir::circuit::{ - ErrorSelector, OpcodeLocation, RawAssertionPayload, ResolvedAssertionPayload, - ResolvedOpcodeLocation, brillig::BrilligFunctionId, - }, - pwg::{ErrorLocation, OpcodeResolutionError}, + acir::circuit::{ErrorSelector, OpcodeLocation, brillig::BrilligFunctionId}, + pwg::{ErrorLocation, OpcodeResolutionError, RawAssertionPayload, ResolvedAssertionPayload}, }; use noirc_abi::{Abi, AbiErrorType, display_abi_error}; use noirc_errors::{CustomDiagnostic, debug_info::DebugInfo, reporter::ReportedErrors}; @@ -86,6 +83,16 @@ impl NargoError { } } +#[derive(Debug, Copy, Clone)] +/// The opcode location for a call to a separate ACIR circuit +/// This includes the function index of the caller within a [program][Program] +/// and the index in the callers ACIR to the specific call opcode. +/// This is only resolved and set during circuit execution. +pub struct ResolvedOpcodeLocation { + pub acir_function_index: usize, + pub opcode_location: OpcodeLocation, +} + #[derive(Debug, Error)] pub enum ExecutionError { #[error("Failed assertion")] diff --git a/tooling/nargo/src/ops/execute.rs b/tooling/nargo/src/ops/execute.rs index b12871c75e4..bc10bf84fcd 100644 --- a/tooling/nargo/src/ops/execute.rs +++ b/tooling/nargo/src/ops/execute.rs @@ -1,16 +1,15 @@ use acvm::acir::circuit::brillig::BrilligBytecode; -use acvm::acir::circuit::{ - OpcodeLocation, Program, ResolvedAssertionPayload, ResolvedOpcodeLocation, -}; +use acvm::acir::circuit::{OpcodeLocation, Program}; use acvm::acir::native_types::WitnessStack; use acvm::pwg::{ ACVM, ACVMStatus, ErrorLocation, OpcodeNotSolvable, OpcodeResolutionError, ProfilingSamples, + ResolvedAssertionPayload, }; use acvm::{AcirField, BlackBoxFunctionSolver}; use acvm::{acir::circuit::Circuit, acir::native_types::WitnessMap}; use crate::NargoError; -use crate::errors::ExecutionError; +use crate::errors::{ExecutionError, ResolvedOpcodeLocation}; use crate::foreign_calls::ForeignCallExecutor; struct ProgramExecutor<'a, F: AcirField, B: BlackBoxFunctionSolver, E: ForeignCallExecutor> { From bec5e3c883848d33ad3f994351eeb82ec8638fa5 Mon Sep 17 00:00:00 2001 From: Maxim Vezenov Date: Tue, 18 Mar 2025 01:49:26 +0000 Subject: [PATCH 2/2] fix import in noirc_abi_wasm --- acvm-repo/acir/src/circuit/mod.rs | 12 ------------ tooling/noirc_abi_wasm/src/lib.rs | 6 ++---- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/acvm-repo/acir/src/circuit/mod.rs b/acvm-repo/acir/src/circuit/mod.rs index 97fb9cf5b7b..57f9ec7663f 100644 --- a/acvm-repo/acir/src/circuit/mod.rs +++ b/acvm-repo/acir/src/circuit/mod.rs @@ -123,18 +123,6 @@ impl<'de> Deserialize<'de> for ErrorSelector { } } -#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)] -pub struct RawAssertionPayload { - pub selector: ErrorSelector, - pub data: Vec, -} - -#[derive(Clone, PartialEq, Eq, Debug)] -pub enum ResolvedAssertionPayload { - String(String), - Raw(RawAssertionPayload), -} - #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)] #[cfg_attr(feature = "arb", derive(proptest_derive::Arbitrary))] /// Opcodes are locatable so that callers can diff --git a/tooling/noirc_abi_wasm/src/lib.rs b/tooling/noirc_abi_wasm/src/lib.rs index 390f4353bb2..8b30db7be78 100644 --- a/tooling/noirc_abi_wasm/src/lib.rs +++ b/tooling/noirc_abi_wasm/src/lib.rs @@ -7,10 +7,8 @@ use getrandom as _; use acvm::{ FieldElement, - acir::{ - circuit::RawAssertionPayload, - native_types::{WitnessMap, WitnessStack}, - }, + acir::native_types::{WitnessMap, WitnessStack}, + pwg::RawAssertionPayload, }; use iter_extended::try_btree_map; use noirc_abi::{