/ src / zk / mod.rs
mod.rs
 1  /* This file is part of DarkFi (https://dark.fi)
 2   *
 3   * Copyright (C) 2020-2025 Dyne.org foundation
 4   *
 5   * This program is free software: you can redistribute it and/or modify
 6   * it under the terms of the GNU Affero General Public License as
 7   * published by the Free Software Foundation, either version 3 of the
 8   * License, or (at your option) any later version.
 9   *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   * GNU Affero General Public License for more details.
14   *
15   * You should have received a copy of the GNU Affero General Public License
16   * along with this program.  If not, see <https://www.gnu.org/licenses/>.
17   */
18  
19  /// Halo2 zkas virtual machine
20  pub mod vm;
21  pub use vm::ZkCircuit;
22  
23  /// VM heap variable definitions and utility functions
24  pub mod vm_heap;
25  pub use vm_heap::{empty_witnesses, Witness};
26  
27  /// ZK gadget implementations
28  pub mod gadget;
29  
30  /// Proof creation API
31  pub mod proof;
32  pub use proof::{Proof, ProvingKey, VerifyingKey};
33  
34  /// Trace computation of intermediate values in circuit
35  mod tracer;
36  pub use tracer::DebugOpValue;
37  
38  mod debug;
39  pub use debug::zkas_type_checks;
40  #[cfg(feature = "tinyjson")]
41  pub use debug::{export_witness_json, import_witness_json};
42  
43  pub mod halo2 {
44      pub use halo2_proofs::{
45          arithmetic::Field,
46          circuit::{AssignedCell, Layouter, Value},
47          dev, plonk,
48          plonk::{Advice, Assigned, Column},
49      };
50  }
51  
52  //pub(in crate::zk) fn assign_free_advice<F: Field, V: Copy>(
53  pub fn assign_free_advice<F: halo2::Field, V: Copy>(
54      mut layouter: impl halo2::Layouter<F>,
55      column: halo2::Column<halo2::Advice>,
56      value: halo2::Value<V>,
57  ) -> Result<halo2::AssignedCell<V, F>, halo2::plonk::Error>
58  where
59      for<'v> halo2::Assigned<F>: From<&'v V>,
60  {
61      layouter.assign_region(
62          || "load private",
63          |mut region| region.assign_advice(|| "load private", column, 0, || value),
64      )
65  }