From 09691ef35adf840013933350c5a279496282a6c8 Mon Sep 17 00:00:00 2001 From: Tom French Date: Wed, 19 Apr 2023 23:32:07 +0100 Subject: [PATCH] fix(nargo): restore `nargo codegen-verifier` functionality --- .../nargo_cli/src/cli/codegen_verifier_cmd.rs | 6 ++-- crates/nargo_cli/tests/codegen-verifier.rs | 33 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 crates/nargo_cli/tests/codegen-verifier.rs diff --git a/crates/nargo_cli/src/cli/codegen_verifier_cmd.rs b/crates/nargo_cli/src/cli/codegen_verifier_cmd.rs index 3707214102e..4e713ff4a42 100644 --- a/crates/nargo_cli/src/cli/codegen_verifier_cmd.rs +++ b/crates/nargo_cli/src/cli/codegen_verifier_cmd.rs @@ -1,8 +1,9 @@ use super::fs::{create_named_dir, write_to_file}; use super::NargoConfig; use crate::{cli::compile_cmd::compile_circuit, constants::CONTRACT_DIR, errors::CliError}; +use acvm::SmartContract; use clap::Args; -use nargo::ops::{codegen_verifier, preprocess_program}; +use nargo::ops::preprocess_program; use noirc_driver::CompileOptions; /// Generates a Solidity verifier smart contract for the program @@ -18,7 +19,8 @@ pub(crate) fn run(args: CodegenVerifierCommand, config: NargoConfig) -> Result<( let compiled_program = compile_circuit(&backend, &config.program_dir, &args.compile_options)?; let preprocessed_program = preprocess_program(&backend, compiled_program)?; - let smart_contract_string = codegen_verifier(&backend, &preprocessed_program.verification_key)?; + #[allow(deprecated)] + let smart_contract_string = backend.eth_contract_from_cs(preprocessed_program.bytecode); let contract_dir = config.program_dir.join(CONTRACT_DIR); create_named_dir(&contract_dir, "contract"); diff --git a/crates/nargo_cli/tests/codegen-verifier.rs b/crates/nargo_cli/tests/codegen-verifier.rs new file mode 100644 index 00000000000..3e4dc1dc745 --- /dev/null +++ b/crates/nargo_cli/tests/codegen-verifier.rs @@ -0,0 +1,33 @@ +//! This integration test aims to check that the `nargo codegen-verifier` will successfully create a +//! file containing a verifier for a simple program. + +use assert_cmd::prelude::*; +use predicates::prelude::*; +use std::process::Command; + +use assert_fs::prelude::{PathAssert, PathChild}; + +#[test] +fn simple_verifier_codegen() { + let test_dir = assert_fs::TempDir::new().unwrap(); + std::env::set_current_dir(&test_dir).unwrap(); + + // Create trivial program + let project_name = "hello_world"; + let project_dir = test_dir.child(project_name); + + let mut cmd = Command::cargo_bin("nargo").unwrap(); + cmd.arg("new").arg(project_name); + cmd.assert().success(); + + std::env::set_current_dir(&project_dir).unwrap(); + + // Run `nargo codegen-verifier` + let mut cmd = Command::cargo_bin("nargo").unwrap(); + cmd.arg("codegen-verifier"); + cmd.assert() + .success() + .stdout(predicate::str::contains("Contract successfully created and located at")); + + project_dir.child("contract").child("plonk_vk.sol").assert(predicate::path::is_file()); +}