From 567ccde3d6a00e27526482c028a83ed373459012 Mon Sep 17 00:00:00 2001 From: Ana Perez Ghiglia Date: Tue, 25 Jun 2024 16:19:24 -0600 Subject: [PATCH 1/6] Convert BrilligSolver Trap failure into UnsatisfiedConstrain error --- acvm-repo/acvm/src/pwg/brillig.rs | 42 ++++++++++++++++++------------- tooling/debugger/src/context.rs | 17 +++++++++---- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/acvm-repo/acvm/src/pwg/brillig.rs b/acvm-repo/acvm/src/pwg/brillig.rs index 3a639df044a..321c50f2a17 100644 --- a/acvm-repo/acvm/src/pwg/brillig.rs +++ b/acvm-repo/acvm/src/pwg/brillig.rs @@ -161,14 +161,28 @@ impl<'b, B: BlackBoxFunctionSolver, F: AcirField> BrilligSolver<'b, F, B> { match vm_status { VMStatus::Finished { .. } => Ok(BrilligSolverStatus::Finished), VMStatus::InProgress => Ok(BrilligSolverStatus::InProgress), + VMStatus::ForeignCallWait { function, inputs } => { + Ok(BrilligSolverStatus::ForeignCallWait(ForeignCallWaitInfo { function, inputs })) + } VMStatus::Failure { reason, call_stack } => { - let payload = match reason { + match reason { FailureReason::RuntimeError { message } => { - Some(ResolvedAssertionPayload::String(message)) + let call_stack = call_stack + .iter() + .map(|brillig_index| OpcodeLocation::Brillig { + acir_index: self.acir_index, + brillig_index: *brillig_index, + }) + .collect(); + Err(OpcodeResolutionError::BrilligFunctionFailed { + payload: Some(ResolvedAssertionPayload::String(message)), + call_stack: call_stack, + }) } + FailureReason::Trap { revert_data_offset, revert_data_size } => { // Since noir can only revert with strings currently, we can parse return data as a string - if revert_data_size == 0 { + let payload = if revert_data_size == 0 { None } else { let memory = self.vm.get_memory(); @@ -206,22 +220,14 @@ impl<'b, B: BlackBoxFunctionSolver, F: AcirField> BrilligSolver<'b, F, B> { })) } } - } - } - }; - Err(OpcodeResolutionError::BrilligFunctionFailed { - payload, - call_stack: call_stack - .iter() - .map(|brillig_index| OpcodeLocation::Brillig { - acir_index: self.acir_index, - brillig_index: *brillig_index, + }; + + Err(OpcodeResolutionError::UnsatisfiedConstrain { + opcode_location: super::ErrorLocation::Unresolved, + payload, }) - .collect(), - }) - } - VMStatus::ForeignCallWait { function, inputs } => { - Ok(BrilligSolverStatus::ForeignCallWait(ForeignCallWaitInfo { function, inputs })) + } + } } } } diff --git a/tooling/debugger/src/context.rs b/tooling/debugger/src/context.rs index cb36988bf0b..8fca2788bcc 100644 --- a/tooling/debugger/src/context.rs +++ b/tooling/debugger/src/context.rs @@ -4,7 +4,8 @@ use acvm::acir::circuit::{Circuit, Opcode, OpcodeLocation}; use acvm::acir::native_types::{Witness, WitnessMap}; use acvm::brillig_vm::MemoryValue; use acvm::pwg::{ - ACVMStatus, BrilligSolver, BrilligSolverStatus, ForeignCallWaitInfo, StepResult, ACVM, + ACVMStatus, AcirCallWaitInfo, BrilligSolver, BrilligSolverStatus, ForeignCallWaitInfo, + OpcodeNotSolvable, OpcodeResolutionError, StepResult, ACVM, }; use acvm::{BlackBoxFunctionSolver, FieldElement}; @@ -295,10 +296,16 @@ impl<'a, B: BlackBoxFunctionSolver> DebugContext<'a, B> { self.brillig_solver = Some(solver); self.handle_foreign_call(foreign_call) } - Err(err) => DebugCommandResult::Error(NargoError::ExecutionError( - // TODO: debugger does not handle multiple acir calls - ExecutionError::SolvingError(err, None), - )), + Err(err) => { + if let OpcodeResolutionError::UnsatisfiedConstrain { .. } = err { + // return solver ownership so brillig_solver it has the right opcode location + self.brillig_solver = Some(solver); + } + // TODO: should we return solver ownership in all Err scenarios>? + DebugCommandResult::Error(NargoError::ExecutionError(ExecutionError::SolvingError( + err, None, + ))) + } } } From 85baae888748bbdfbc0fe93cabd1dbd2d9551cde Mon Sep 17 00:00:00 2001 From: Ana Perez Ghiglia Date: Tue, 25 Jun 2024 16:38:07 -0600 Subject: [PATCH 2/6] remove redundant field name --- acvm-repo/acvm/src/pwg/brillig.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acvm-repo/acvm/src/pwg/brillig.rs b/acvm-repo/acvm/src/pwg/brillig.rs index 321c50f2a17..c599c2961a1 100644 --- a/acvm-repo/acvm/src/pwg/brillig.rs +++ b/acvm-repo/acvm/src/pwg/brillig.rs @@ -176,7 +176,7 @@ impl<'b, B: BlackBoxFunctionSolver, F: AcirField> BrilligSolver<'b, F, B> { .collect(); Err(OpcodeResolutionError::BrilligFunctionFailed { payload: Some(ResolvedAssertionPayload::String(message)), - call_stack: call_stack, + call_stack, }) } From fa098b2ac7f27cc813f51fee4d9cdd2cb2dfef28 Mon Sep 17 00:00:00 2001 From: Ana Perez Ghiglia Date: Thu, 27 Jun 2024 10:35:12 -0600 Subject: [PATCH 3/6] Revert match barnch relocation --- acvm-repo/acvm/src/pwg/brillig.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/acvm-repo/acvm/src/pwg/brillig.rs b/acvm-repo/acvm/src/pwg/brillig.rs index c599c2961a1..512c4d6e14a 100644 --- a/acvm-repo/acvm/src/pwg/brillig.rs +++ b/acvm-repo/acvm/src/pwg/brillig.rs @@ -161,9 +161,6 @@ impl<'b, B: BlackBoxFunctionSolver, F: AcirField> BrilligSolver<'b, F, B> { match vm_status { VMStatus::Finished { .. } => Ok(BrilligSolverStatus::Finished), VMStatus::InProgress => Ok(BrilligSolverStatus::InProgress), - VMStatus::ForeignCallWait { function, inputs } => { - Ok(BrilligSolverStatus::ForeignCallWait(ForeignCallWaitInfo { function, inputs })) - } VMStatus::Failure { reason, call_stack } => { match reason { FailureReason::RuntimeError { message } => { @@ -229,6 +226,9 @@ impl<'b, B: BlackBoxFunctionSolver, F: AcirField> BrilligSolver<'b, F, B> { } } } + VMStatus::ForeignCallWait { function, inputs } => { + Ok(BrilligSolverStatus::ForeignCallWait(ForeignCallWaitInfo { function, inputs })) + } } } From e4b5b2c382ffe18d1f2ee5336c56ef8cfbf10c29 Mon Sep 17 00:00:00 2001 From: Ana Perez Ghiglia Date: Thu, 27 Jun 2024 12:12:04 -0600 Subject: [PATCH 4/6] Add new field to OpcodeResolutionError::BrilligFunctionFailed --- acvm-repo/acvm/src/pwg/brillig.rs | 34 ++++++++++----------- acvm-repo/acvm/src/pwg/mod.rs | 51 +++++++++++++++++++++++-------- acvm-repo/acvm/tests/solver.rs | 3 +- tooling/debugger/src/context.rs | 2 +- 4 files changed, 57 insertions(+), 33 deletions(-) diff --git a/acvm-repo/acvm/src/pwg/brillig.rs b/acvm-repo/acvm/src/pwg/brillig.rs index 512c4d6e14a..d1eb04f8285 100644 --- a/acvm-repo/acvm/src/pwg/brillig.rs +++ b/acvm-repo/acvm/src/pwg/brillig.rs @@ -162,19 +162,16 @@ impl<'b, B: BlackBoxFunctionSolver, F: AcirField> BrilligSolver<'b, F, B> { VMStatus::Finished { .. } => Ok(BrilligSolverStatus::Finished), VMStatus::InProgress => Ok(BrilligSolverStatus::InProgress), VMStatus::Failure { reason, call_stack } => { - match reason { + let call_stack = call_stack + .iter() + .map(|brillig_index| OpcodeLocation::Brillig { + acir_index: self.acir_index, + brillig_index: *brillig_index, + }) + .collect(); + let (payload, found_trap) = match reason { FailureReason::RuntimeError { message } => { - let call_stack = call_stack - .iter() - .map(|brillig_index| OpcodeLocation::Brillig { - acir_index: self.acir_index, - brillig_index: *brillig_index, - }) - .collect(); - Err(OpcodeResolutionError::BrilligFunctionFailed { - payload: Some(ResolvedAssertionPayload::String(message)), - call_stack, - }) + (Some(ResolvedAssertionPayload::String(message)), false) } FailureReason::Trap { revert_data_offset, revert_data_size } => { @@ -218,13 +215,14 @@ impl<'b, B: BlackBoxFunctionSolver, F: AcirField> BrilligSolver<'b, F, B> { } } }; - - Err(OpcodeResolutionError::UnsatisfiedConstrain { - opcode_location: super::ErrorLocation::Unresolved, - payload, - }) + (payload, true) } - } + }; + Err(OpcodeResolutionError::BrilligFunctionFailed { + payload, + call_stack, + found_trap, + }) } VMStatus::ForeignCallWait { function, inputs } => { Ok(BrilligSolverStatus::ForeignCallWait(ForeignCallWaitInfo { function, inputs })) diff --git a/acvm-repo/acvm/src/pwg/mod.rs b/acvm-repo/acvm/src/pwg/mod.rs index 4f88e17d109..f85e4674b41 100644 --- a/acvm-repo/acvm/src/pwg/mod.rs +++ b/acvm-repo/acvm/src/pwg/mod.rs @@ -116,28 +116,53 @@ impl std::fmt::Display for ErrorLocation { } } -#[derive(Clone, PartialEq, Eq, Debug, Error)] +#[derive(Clone, PartialEq, Eq, Debug)] pub enum OpcodeResolutionError { - #[error("Cannot solve opcode: {0}")] - OpcodeNotSolvable(#[from] OpcodeNotSolvable), - #[error("Cannot satisfy constraint")] + OpcodeNotSolvable(OpcodeNotSolvable), UnsatisfiedConstrain { opcode_location: ErrorLocation, payload: Option>, }, - #[error("Index out of bounds, array has size {array_size:?}, but index was {index:?}")] - IndexOutOfBounds { opcode_location: ErrorLocation, index: u32, array_size: u32 }, - #[error("Failed to solve blackbox function: {0}, reason: {1}")] + IndexOutOfBounds { + opcode_location: ErrorLocation, + index: u32, + array_size: u32, + }, BlackBoxFunctionFailed(BlackBoxFunc, String), - #[error("Failed to solve brillig function")] BrilligFunctionFailed { call_stack: Vec, payload: Option>, + found_trap: bool, + }, + AcirMainCallAttempted { + opcode_location: ErrorLocation, + }, + AcirCallOutputsMismatch { + opcode_location: ErrorLocation, + results_size: u32, + outputs_size: u32, }, - #[error("Attempted to call `main` with a `Call` opcode")] - AcirMainCallAttempted { opcode_location: ErrorLocation }, - #[error("{results_size:?} result values were provided for {outputs_size:?} call output witnesses, most likely due to bad ACIR codegen")] - AcirCallOutputsMismatch { opcode_location: ErrorLocation, results_size: u32, outputs_size: u32 }, +} + +impl std::fmt::Display for OpcodeResolutionError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + OpcodeResolutionError::OpcodeNotSolvable(opcode_not_solvable) => write!(f, "Cannot solve opcode: {}", opcode_not_solvable), + OpcodeResolutionError::UnsatisfiedConstrain { .. } => write!(f, "Cannot satisfy constraint"), + OpcodeResolutionError::IndexOutOfBounds { array_size, index, .. } => write!(f, "Index out of bounds, array has size {}, but index was {}", array_size, index), + OpcodeResolutionError::BlackBoxFunctionFailed(func, reason) => write!(f,"Failed to solve blackbox function: {}, reason: {}", func, reason), + OpcodeResolutionError::BrilligFunctionFailed{found_trap: false, .. } => write!(f, "Failed to solve brillig function"), + OpcodeResolutionError::BrilligFunctionFailed{found_trap: true, .. } => write!(f, "Cannot satisfy constraint"), + OpcodeResolutionError::AcirMainCallAttempted{ .. } => write!(f, "Attempted to call `main` with a `Call` opcode"), + OpcodeResolutionError::AcirCallOutputsMismatch {results_size, outputs_size, .. } => write!(f, "{} result values were provided for {} call output witnesses, most likely due to bad ACIR codegen", results_size, outputs_size), + } + } +} + +impl From> for OpcodeResolutionError { + fn from(opcode: OpcodeNotSolvable) -> Self { + OpcodeResolutionError::OpcodeNotSolvable(opcode) + } } impl From for OpcodeResolutionError { @@ -501,7 +526,7 @@ impl<'a, F: AcirField, B: BlackBoxFunctionSolver> ACVM<'a, F, B> { fn map_brillig_error(&self, mut err: OpcodeResolutionError) -> OpcodeResolutionError { match &mut err { - OpcodeResolutionError::BrilligFunctionFailed { call_stack, payload } => { + OpcodeResolutionError::BrilligFunctionFailed { call_stack, payload, .. } => { // Some brillig errors have static strings as payloads, we can resolve them here let last_location = call_stack.last().expect("Call stacks should have at least one item"); diff --git a/acvm-repo/acvm/tests/solver.rs b/acvm-repo/acvm/tests/solver.rs index e55dbb73ae1..69b7b5272da 100644 --- a/acvm-repo/acvm/tests/solver.rs +++ b/acvm-repo/acvm/tests/solver.rs @@ -672,7 +672,8 @@ fn unsatisfied_opcode_resolved_brillig() { solver_status, ACVMStatus::Failure(OpcodeResolutionError::BrilligFunctionFailed { payload: None, - call_stack: vec![OpcodeLocation::Brillig { acir_index: 0, brillig_index: 3 }] + call_stack: vec![OpcodeLocation::Brillig { acir_index: 0, brillig_index: 3 }], + found_trap: true, }), "The first opcode is not satisfiable, expected an error indicating this" ); diff --git a/tooling/debugger/src/context.rs b/tooling/debugger/src/context.rs index 8fca2788bcc..32a3c9699ab 100644 --- a/tooling/debugger/src/context.rs +++ b/tooling/debugger/src/context.rs @@ -297,7 +297,7 @@ impl<'a, B: BlackBoxFunctionSolver> DebugContext<'a, B> { self.handle_foreign_call(foreign_call) } Err(err) => { - if let OpcodeResolutionError::UnsatisfiedConstrain { .. } = err { + if let OpcodeResolutionError::BrilligFunctionFailed { found_trap: true, .. } = err { // return solver ownership so brillig_solver it has the right opcode location self.brillig_solver = Some(solver); } From 5b7b30954b23112790d761ce8b6a67c26b8c5e4b Mon Sep 17 00:00:00 2001 From: Ana Perez Ghiglia Date: Fri, 28 Jun 2024 10:57:42 -0600 Subject: [PATCH 5/6] replace BrilligFunctionFailed.found_trap to .reason * Abstract `extract_failure_payload` function for improving readability --- acvm-repo/acvm/src/pwg/brillig.rs | 103 +++++++++++++++--------------- acvm-repo/acvm/src/pwg/mod.rs | 7 +- acvm-repo/acvm/tests/solver.rs | 4 +- tooling/debugger/src/context.rs | 10 ++- 4 files changed, 66 insertions(+), 58 deletions(-) diff --git a/acvm-repo/acvm/src/pwg/brillig.rs b/acvm-repo/acvm/src/pwg/brillig.rs index d1eb04f8285..ac6abdead52 100644 --- a/acvm-repo/acvm/src/pwg/brillig.rs +++ b/acvm-repo/acvm/src/pwg/brillig.rs @@ -169,59 +169,11 @@ impl<'b, B: BlackBoxFunctionSolver, F: AcirField> BrilligSolver<'b, F, B> { brillig_index: *brillig_index, }) .collect(); - let (payload, found_trap) = match reason { - FailureReason::RuntimeError { message } => { - (Some(ResolvedAssertionPayload::String(message)), false) - } - - FailureReason::Trap { revert_data_offset, revert_data_size } => { - // Since noir can only revert with strings currently, we can parse return data as a string - let payload = if revert_data_size == 0 { - None - } else { - let memory = self.vm.get_memory(); - let mut revert_values_iter = memory - [revert_data_offset..(revert_data_offset + revert_data_size)] - .iter(); - let error_selector = ErrorSelector::new( - revert_values_iter - .next() - .expect("Incorrect revert data size") - .try_into() - .expect("Error selector is not u64"), - ); - match error_selector { - STRING_ERROR_SELECTOR => { - // If the error selector is 0, it means the error is a string - let string = revert_values_iter - .map(|memory_value| { - let as_u8: u8 = memory_value - .try_into() - .expect("String item is not u8"); - as_u8 as char - }) - .collect(); - Some(ResolvedAssertionPayload::String(string)) - } - _ => { - // If the error selector is not 0, it means the error is a custom error - Some(ResolvedAssertionPayload::Raw(RawAssertionPayload { - selector: error_selector, - data: revert_values_iter - .map(|value| value.to_field()) - .collect(), - })) - } - } - }; - (payload, true) - } - }; Err(OpcodeResolutionError::BrilligFunctionFailed { - payload, + payload: self.extract_failure_payload(&reason), call_stack, - found_trap, + reason, }) } VMStatus::ForeignCallWait { function, inputs } => { @@ -230,6 +182,57 @@ impl<'b, B: BlackBoxFunctionSolver, F: AcirField> BrilligSolver<'b, F, B> { } } + fn extract_failure_payload( + &self, + reason: &FailureReason, + ) -> Option> { + match reason { + FailureReason::RuntimeError { message } => { + Some(ResolvedAssertionPayload::String(message.clone())) + } + FailureReason::Trap { revert_data_offset, revert_data_size } => { + // Since noir can only revert with strings currently, we can parse return data as a string + let payload = if *revert_data_size == 0 { + None + } else { + let memory = self.vm.get_memory(); + let mut revert_values_iter = memory + [*revert_data_offset..(*revert_data_offset + *revert_data_size)] + .iter(); + let error_selector = ErrorSelector::new( + revert_values_iter + .next() + .expect("Incorrect revert data size") + .try_into() + .expect("Error selector is not u64"), + ); + + match error_selector { + STRING_ERROR_SELECTOR => { + // If the error selector is 0, it means the error is a string + let string = revert_values_iter + .map(|memory_value| { + let as_u8: u8 = + memory_value.try_into().expect("String item is not u8"); + as_u8 as char + }) + .collect(); + Some(ResolvedAssertionPayload::String(string)) + } + _ => { + // If the error selector is not 0, it means the error is a custom error + Some(ResolvedAssertionPayload::Raw(RawAssertionPayload { + selector: error_selector, + data: revert_values_iter.map(|value| value.to_field()).collect(), + })) + } + } + }; + payload + } + } + } + pub(crate) fn finalize( self, witness: &mut WitnessMap, diff --git a/acvm-repo/acvm/src/pwg/mod.rs b/acvm-repo/acvm/src/pwg/mod.rs index f85e4674b41..341454ddfda 100644 --- a/acvm-repo/acvm/src/pwg/mod.rs +++ b/acvm-repo/acvm/src/pwg/mod.rs @@ -13,6 +13,7 @@ use acir::{ AcirField, BlackBoxFunc, }; use acvm_blackbox_solver::BlackBoxResolutionError; +use brillig_vm::FailureReason; use self::{ arithmetic::ExpressionSolver, blackbox::bigint::AcvmBigIntSolver, directives::solve_directives, @@ -132,7 +133,7 @@ pub enum OpcodeResolutionError { BrilligFunctionFailed { call_stack: Vec, payload: Option>, - found_trap: bool, + reason: FailureReason, }, AcirMainCallAttempted { opcode_location: ErrorLocation, @@ -151,8 +152,8 @@ impl std::fmt::Display for OpcodeResolutionError { OpcodeResolutionError::UnsatisfiedConstrain { .. } => write!(f, "Cannot satisfy constraint"), OpcodeResolutionError::IndexOutOfBounds { array_size, index, .. } => write!(f, "Index out of bounds, array has size {}, but index was {}", array_size, index), OpcodeResolutionError::BlackBoxFunctionFailed(func, reason) => write!(f,"Failed to solve blackbox function: {}, reason: {}", func, reason), - OpcodeResolutionError::BrilligFunctionFailed{found_trap: false, .. } => write!(f, "Failed to solve brillig function"), - OpcodeResolutionError::BrilligFunctionFailed{found_trap: true, .. } => write!(f, "Cannot satisfy constraint"), + OpcodeResolutionError::BrilligFunctionFailed{reason: FailureReason::Trap {.. }, .. } => write!(f, "Cannot satisfy constraint"), + OpcodeResolutionError::BrilligFunctionFailed{ .. } => write!(f, "Failed to solve brillig function"), OpcodeResolutionError::AcirMainCallAttempted{ .. } => write!(f, "Attempted to call `main` with a `Call` opcode"), OpcodeResolutionError::AcirCallOutputsMismatch {results_size, outputs_size, .. } => write!(f, "{} result values were provided for {} call output witnesses, most likely due to bad ACIR codegen", results_size, outputs_size), } diff --git a/acvm-repo/acvm/tests/solver.rs b/acvm-repo/acvm/tests/solver.rs index 69b7b5272da..0b407a6ac6b 100644 --- a/acvm-repo/acvm/tests/solver.rs +++ b/acvm-repo/acvm/tests/solver.rs @@ -14,7 +14,7 @@ use acir::{ use acvm::pwg::{ACVMStatus, ErrorLocation, ForeignCallWaitInfo, OpcodeResolutionError, ACVM}; use acvm_blackbox_solver::StubbedBlackBoxSolver; -use brillig_vm::brillig::HeapValueType; +use brillig_vm::{brillig::HeapValueType, FailureReason}; // Reenable these test cases once we move the brillig implementation of inversion down into the acvm stdlib. @@ -673,7 +673,7 @@ fn unsatisfied_opcode_resolved_brillig() { ACVMStatus::Failure(OpcodeResolutionError::BrilligFunctionFailed { payload: None, call_stack: vec![OpcodeLocation::Brillig { acir_index: 0, brillig_index: 3 }], - found_trap: true, + reason: FailureReason::Trap { revert_data_offset: 0, revert_data_size: 0 }, }), "The first opcode is not satisfiable, expected an error indicating this" ); diff --git a/tooling/debugger/src/context.rs b/tooling/debugger/src/context.rs index 32a3c9699ab..3462153304e 100644 --- a/tooling/debugger/src/context.rs +++ b/tooling/debugger/src/context.rs @@ -1,8 +1,8 @@ use crate::foreign_calls::DebugForeignCallExecutor; use acvm::acir::circuit::brillig::BrilligBytecode; use acvm::acir::circuit::{Circuit, Opcode, OpcodeLocation}; -use acvm::acir::native_types::{Witness, WitnessMap}; -use acvm::brillig_vm::MemoryValue; +use acvm::acir::native_types::{Witness, WitnessMap, WitnessStack}; +use acvm::brillig_vm::{FailureReason, MemoryValue}; use acvm::pwg::{ ACVMStatus, AcirCallWaitInfo, BrilligSolver, BrilligSolverStatus, ForeignCallWaitInfo, OpcodeNotSolvable, OpcodeResolutionError, StepResult, ACVM, @@ -297,7 +297,11 @@ impl<'a, B: BlackBoxFunctionSolver> DebugContext<'a, B> { self.handle_foreign_call(foreign_call) } Err(err) => { - if let OpcodeResolutionError::BrilligFunctionFailed { found_trap: true, .. } = err { + if let OpcodeResolutionError::BrilligFunctionFailed { + reason: FailureReason::Trap { .. }, + .. + } = err + { // return solver ownership so brillig_solver it has the right opcode location self.brillig_solver = Some(solver); } From 51d1193ff61c58841485910813c69e45003b1cd0 Mon Sep 17 00:00:00 2001 From: Ana Perez Ghiglia Date: Mon, 1 Jul 2024 11:10:29 -0600 Subject: [PATCH 6/6] Remove unused imports after rebase --- tooling/debugger/src/context.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tooling/debugger/src/context.rs b/tooling/debugger/src/context.rs index 3462153304e..4d01179fbca 100644 --- a/tooling/debugger/src/context.rs +++ b/tooling/debugger/src/context.rs @@ -1,11 +1,11 @@ use crate::foreign_calls::DebugForeignCallExecutor; use acvm::acir::circuit::brillig::BrilligBytecode; use acvm::acir::circuit::{Circuit, Opcode, OpcodeLocation}; -use acvm::acir::native_types::{Witness, WitnessMap, WitnessStack}; +use acvm::acir::native_types::{Witness, WitnessMap}; use acvm::brillig_vm::{FailureReason, MemoryValue}; use acvm::pwg::{ - ACVMStatus, AcirCallWaitInfo, BrilligSolver, BrilligSolverStatus, ForeignCallWaitInfo, - OpcodeNotSolvable, OpcodeResolutionError, StepResult, ACVM, + ACVMStatus, BrilligSolver, BrilligSolverStatus, ForeignCallWaitInfo, + OpcodeResolutionError, StepResult, ACVM, }; use acvm::{BlackBoxFunctionSolver, FieldElement};