Skip to content

Commit 63f958b

Browse files
authoredMar 28, 2023
chore!: upgrade to acvm 0.8.0 (#1047)
* chore!: upgrade to acvm 0.7.1 * chore: update test and tidy * chore: upgrade to ACVM 0.8.0
1 parent aaaf0ae commit 63f958b

File tree

10 files changed

+79
-50
lines changed

10 files changed

+79
-50
lines changed
 

‎Cargo.lock

+23-22
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ edition = "2021"
2323
rust-version = "1.66"
2424

2525
[workspace.dependencies]
26-
acvm = "0.6.0"
26+
acvm = "0.8.0"
2727
arena = { path = "crates/arena" }
2828
fm = { path = "crates/fm" }
2929
iter-extended = { path = "crates/iter-extended" }

‎crates/nargo/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ color-eyre = "0.6.2"
3434

3535

3636
# Backends
37-
aztec_backend = { optional = true, package = "barretenberg_static_lib", git = "https://github.com/noir-lang/aztec_backend", rev = "2cb523d2ab95249157b22e198d9dcd6841c3eed8" }
38-
aztec_wasm_backend = { optional = true, package = "barretenberg_wasm", git = "https://github.com/noir-lang/aztec_backend", rev = "2cb523d2ab95249157b22e198d9dcd6841c3eed8" }
37+
aztec_backend = { optional = true, package = "barretenberg_static_lib", git = "https://github.com/noir-lang/aztec_backend", rev = "26178359a2251e885f15f0a4d1a686afda04aec9" }
38+
aztec_wasm_backend = { optional = true, package = "barretenberg_wasm", git = "https://github.com/noir-lang/aztec_backend", rev = "26178359a2251e885f15f0a4d1a686afda04aec9" }
3939
marlin_arkworks_backend = { optional = true, git = "https://github.com/noir-lang/marlin_arkworks_backend", rev = "144378edad821bfaa52bf2cacca8ecc87514a4fc" }
4040

4141
[dev-dependencies]

‎crates/nargo/src/cli/execute_cmd.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::path::Path;
22

3+
use acvm::pwg::block::Blocks;
34
use acvm::PartialWitnessGenerator;
45
use clap::Args;
56
use noirc_abi::input_parser::{Format, InputValue};
@@ -67,7 +68,15 @@ pub(crate) fn execute_program(
6768
let mut solved_witness = compiled_program.abi.encode(inputs_map, None)?;
6869

6970
let backend = crate::backends::ConcreteBackend;
70-
backend.solve(&mut solved_witness, compiled_program.circuit.opcodes.clone())?;
71+
let mut blocks = Blocks::default();
72+
let (unresolved_opcodes, oracles) = backend.solve(
73+
&mut solved_witness,
74+
&mut blocks,
75+
compiled_program.circuit.opcodes.clone(),
76+
)?;
77+
if !unresolved_opcodes.is_empty() || !oracles.is_empty() {
78+
todo!("Add oracle support to nargo execute")
79+
}
7180

7281
Ok(solved_witness)
7382
}

‎crates/nargo/src/cli/test_cmd.rs

+17-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::{collections::BTreeMap, io::Write, path::Path};
22

3-
use acvm::{PartialWitnessGenerator, ProofSystemCompiler};
3+
use acvm::{pwg::block::Blocks, PartialWitnessGenerator, ProofSystemCompiler};
44
use clap::Args;
55
use noirc_driver::{CompileOptions, Driver};
66
use noirc_frontend::node_interner::FuncId;
@@ -79,6 +79,7 @@ fn run_test(
7979
config: &CompileOptions,
8080
) -> Result<(), CliError> {
8181
let backend = crate::backends::ConcreteBackend;
82+
let mut blocks = Blocks::default();
8283

8384
let program = driver
8485
.compile_no_check(config, main)
@@ -88,13 +89,20 @@ fn run_test(
8889

8990
// Run the backend to ensure the PWG evaluates functions like std::hash::pedersen,
9091
// otherwise constraints involving these expressions will not error.
91-
if let Err(error) = backend.solve(&mut solved_witness, program.circuit.opcodes) {
92-
let writer = StandardStream::stderr(ColorChoice::Always);
93-
let mut writer = writer.lock();
94-
writer.set_color(ColorSpec::new().set_fg(Some(Color::Red))).ok();
95-
writeln!(writer, "failed").ok();
96-
writer.reset().ok();
97-
return Err(error.into());
92+
match backend.solve(&mut solved_witness, &mut blocks, program.circuit.opcodes) {
93+
Ok((unresolved_opcodes, oracles)) => {
94+
if !unresolved_opcodes.is_empty() || !oracles.is_empty() {
95+
todo!("Add oracle support to nargo test")
96+
}
97+
Ok(())
98+
}
99+
Err(error) => {
100+
let writer = StandardStream::stderr(ColorChoice::Always);
101+
let mut writer = writer.lock();
102+
writer.set_color(ColorSpec::new().set_fg(Some(Color::Red))).ok();
103+
writeln!(writer, "failed").ok();
104+
writer.reset().ok();
105+
Err(error.into())
106+
}
98107
}
99-
Ok(())
100108
}

‎crates/noirc_driver/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -246,12 +246,12 @@ impl Driver {
246246
let program = monomorphize(main_function, &self.context.def_interner);
247247

248248
let np_language = self.language.clone();
249-
let blackbox_supported = acvm::default_is_black_box_supported(np_language.clone());
249+
let is_opcode_supported = acvm::default_is_opcode_supported(np_language.clone());
250250

251251
match create_circuit(
252252
program,
253253
np_language,
254-
blackbox_supported,
254+
is_opcode_supported,
255255
options.show_ssa,
256256
options.show_output,
257257
) {

‎crates/noirc_evaluator/src/lib.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ mod ssa;
88
use acvm::{
99
acir::circuit::{opcodes::Opcode as AcirOpcode, Circuit, PublicInputs},
1010
acir::native_types::{Expression, Witness},
11-
compiler::transformers::IsBlackBoxSupported,
11+
compiler::transformers::IsOpcodeSupported,
1212
Language,
1313
};
1414
use errors::{RuntimeError, RuntimeErrorKind};
@@ -53,7 +53,7 @@ pub struct Evaluator {
5353
pub fn create_circuit(
5454
program: Program,
5555
np_language: Language,
56-
is_blackbox_supported: IsBlackBoxSupported,
56+
is_opcode_supported: IsOpcodeSupported,
5757
enable_logging: bool,
5858
show_output: bool,
5959
) -> Result<(Circuit, Abi), RuntimeError> {
@@ -70,17 +70,19 @@ pub fn create_circuit(
7070
// see https://github.com/noir-lang/acvm/pull/56
7171
let mut param_witnesses = evaluator.param_witnesses;
7272
let return_witnesses = param_witnesses.remove(MAIN_RETURN_NAME).unwrap_or_default();
73+
let return_witnesses_set: BTreeSet<Witness> = return_witnesses.iter().copied().collect();
7374

7475
let abi = Abi { parameters, param_witnesses, return_type, return_witnesses };
7576

7677
let optimized_circuit = acvm::compiler::compile(
7778
Circuit {
7879
current_witness_index: witness_index,
7980
opcodes: evaluator.opcodes,
80-
public_inputs: PublicInputs(evaluator.public_inputs),
81+
public_parameters: PublicInputs(evaluator.public_inputs),
82+
return_values: PublicInputs(return_witnesses_set),
8183
},
8284
np_language,
83-
is_blackbox_supported,
85+
is_opcode_supported,
8486
)
8587
.map_err(|_| RuntimeErrorKind::Spanless(String::from("produced an acvm compile error")))?;
8688

‎crates/noirc_evaluator/src/ssa/acir_gen/constraints.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use acvm::{
99
directives::Directive,
1010
opcodes::{BlackBoxFuncCall, FunctionInput, Opcode as AcirOpcode},
1111
},
12-
native_types::{Expression, Linear, Witness},
12+
native_types::{Expression, Witness},
1313
},
1414
FieldElement,
1515
};
@@ -266,7 +266,7 @@ pub(crate) fn range_constraint(
266266
let exp_big = BigUint::from(2_u128).pow(num_bits - 1);
267267
let exp = FieldElement::from_be_bytes_reduce(&exp_big.to_bytes_be());
268268
evaluator.push_opcode(AcirOpcode::Directive(Directive::Quotient {
269-
a: Linear::from(witness).into(),
269+
a: Expression::from(witness),
270270
b: Expression::from_field(exp),
271271
q: b_witness,
272272
r: r_witness,
@@ -546,7 +546,7 @@ pub(crate) fn evaluate_udiv(
546546
}));
547547

548548
//r<b
549-
let r_expr = Expression::from(Linear::from_witness(r_witness));
549+
let r_expr = Expression::from(r_witness);
550550
try_range_constraint(r_witness, bit_size, evaluator);
551551
bound_constraint_with_offset(&r_expr, rhs, predicate, bit_size, evaluator);
552552
//range check q<=a

‎crates/noirc_evaluator/src/ssa/acir_gen/operations/sort.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ mod test {
117117

118118
use acvm::{
119119
acir::{circuit::opcodes::BlackBoxFuncCall, native_types::Witness},
120-
FieldElement, OpcodeResolutionError, PartialWitnessGenerator,
120+
pwg::block::Blocks,
121+
FieldElement, OpcodeResolution, OpcodeResolutionError, PartialWitnessGenerator,
121122
};
122123

123124
use crate::{
@@ -131,7 +132,7 @@ mod test {
131132
fn solve_black_box_function_call(
132133
_initial_witness: &mut BTreeMap<Witness, FieldElement>,
133134
_func_call: &BlackBoxFuncCall,
134-
) -> Result<(), OpcodeResolutionError> {
135+
) -> Result<OpcodeResolution, OpcodeResolutionError> {
135136
unreachable!();
136137
}
137138
}
@@ -177,9 +178,11 @@ mod test {
177178
}
178179
// compute the network output by solving the constraints
179180
let backend = MockBackend {};
180-
backend
181-
.solve(&mut solved_witness, eval.opcodes.clone())
181+
let mut blocks = Blocks::default();
182+
let (unresolved_opcodes, oracles) = backend
183+
.solve(&mut solved_witness, &mut blocks, eval.opcodes.clone())
182184
.expect("Could not solve permutation constraints");
185+
assert!(unresolved_opcodes.is_empty() && oracles.is_empty(), "Incomplete solution");
183186
let mut b_val = Vec::new();
184187
for i in 0..output.len() {
185188
b_val.push(solved_witness[&b_wit[i]]);

‎crates/noirc_frontend/src/node_interner.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use std::collections::{BTreeMap, HashMap};
22

3+
use acvm::acir::circuit::opcodes::BlackBoxFuncCall;
4+
use acvm::acir::circuit::Opcode;
35
use acvm::Language;
46
use arena::{Arena, Index};
57
use fm::FileId;
@@ -583,12 +585,16 @@ impl NodeInterner {
583585

584586
#[allow(deprecated)]
585587
pub fn foreign(&self, opcode: &str) -> bool {
586-
let is_supported = acvm::default_is_black_box_supported(self.language.clone());
588+
let is_supported = acvm::default_is_opcode_supported(self.language.clone());
587589
let black_box_func = match acvm::acir::BlackBoxFunc::lookup(opcode) {
588590
Some(black_box_func) => black_box_func,
589591
None => return false,
590592
};
591-
is_supported(&black_box_func)
593+
is_supported(&Opcode::BlackBoxFuncCall(BlackBoxFuncCall {
594+
name: black_box_func,
595+
inputs: Vec::new(),
596+
outputs: Vec::new(),
597+
}))
592598
}
593599

594600
pub fn push_delayed_type_check(&mut self, f: TypeCheckFn) {

0 commit comments

Comments
 (0)
Please sign in to comment.