Skip to content

Commit

Permalink
Update to use backward compatible version of halo2
Browse files Browse the repository at this point in the history
  • Loading branch information
dmidem committed Jun 20, 2024
1 parent 8289354 commit b4dec8d
Show file tree
Hide file tree
Showing 10 changed files with 204 additions and 145 deletions.
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ half = "=2.2.1" # Last version requires Rust 1.70
ff = "0.13"
fpe = "0.6"
group = { version = "0.13", features = ["wnaf-memuse"] }
halo2_gadgets = { git = "https://github.com/QED-it/halo2", branch = "orchardzsa-backward-compatability" }
halo2_proofs = { git = "https://github.com/QED-it/halo2", branch = "orchardzsa-backward-compatability", default-features = false, features = ["batch", "floor-planner-v1-legacy-pdqsort"] }
halo2_gadgets = { git = "https://github.com/QED-it/halo2", branch = "improve-backward-compatability-with-zsa" }
halo2_proofs = { git = "https://github.com/QED-it/halo2", branch = "improve-backward-compatability-with-zsa", default-features = false, features = ["batch", "floor-planner-v1-legacy-pdqsort"] }
hex = "0.4"
k256 = { version = "0.13.0", features = ["arithmetic", "schnorr"] }
lazy_static = "1"
Expand All @@ -58,7 +58,7 @@ plotters = { version = "0.3.0", optional = true }
[dev-dependencies]
bridgetree = "0.4"
criterion = "0.4" # 0.5 depends on clap 4 which has MSRV 1.70
halo2_gadgets = { git = "https://github.com/QED-it/halo2", branch = "orchardzsa-backward-compatability", features = ["test-dependencies"] }
halo2_gadgets = { git = "https://github.com/QED-it/halo2", branch = "improve-backward-compatability-with-zsa", features = ["test-dependencies"] }
proptest = "1.0.0"
zcash_note_encryption_zsa = { package = "zcash_note_encryption", version = "0.4", git = "https://github.com/QED-it/zcash_note_encryption", branch = "zsa1", features = ["pre-zip-212"] }
incrementalmerkletree = { version = "0.5", features = ["test-dependencies"] }
Expand Down
1 change: 1 addition & 0 deletions src/circuit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ mod circuit_zsa;

pub(in crate::circuit) mod commit_ivk;
pub(in crate::circuit) mod gadget;
pub(in crate::circuit) mod orchard_sinsemilla_chip;

/// Size of the Orchard circuit.
const K: u32 = 11;
Expand Down
5 changes: 2 additions & 3 deletions src/circuit/circuit_vanilla.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use halo2_gadgets::{
MerklePath,
},
},
utilities::lookup_range_check::LookupRangeCheckConfig,
utilities::lookup_range_check::{LookupRangeCheck, LookupRangeCheckConfig},
};

use halo2_proofs::{
Expand Down Expand Up @@ -143,7 +143,6 @@ impl OrchardCircuit for OrchardVanilla {
table_idx,
meta.lookup_table_column(),
meta.lookup_table_column(),
None,
);

// Instance column used for public inputs
Expand Down Expand Up @@ -179,7 +178,7 @@ impl OrchardCircuit for OrchardVanilla {

// We have a lot of free space in the right-most advice columns; use one of them
// for all of our range checks.
let range_check = LookupRangeCheckConfig::configure(meta, advices[9], table_idx, None);
let range_check = LookupRangeCheckConfig::configure(meta, advices[9], table_idx);

// Configuration for curve point operations.
// This uses 10 advice columns and spans the whole circuit.
Expand Down
10 changes: 5 additions & 5 deletions src/circuit/circuit_vanilla/note_commit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ use halo2_gadgets::{
CommitDomain, Message, MessagePiece,
},
utilities::{
bool_check, lookup_range_check::LookupRangeCheckConfig, FieldValue, RangeConstrained,
bool_check,
lookup_range_check::{LookupRangeCheck, LookupRangeCheckConfig},
FieldValue, RangeConstrained,
},
};

Expand Down Expand Up @@ -2036,7 +2038,7 @@ mod tests {
},
sinsemilla::chip::SinsemillaChip,
sinsemilla::primitives::CommitDomain,
utilities::lookup_range_check::LookupRangeCheckConfig,
utilities::lookup_range_check::{LookupRangeCheck, LookupRangeCheckConfig},
};

use ff::{Field, PrimeField, PrimeFieldBits};
Expand Down Expand Up @@ -2097,7 +2099,6 @@ mod tests {
table_idx,
meta.lookup_table_column(),
meta.lookup_table_column(),
None,
);
let lagrange_coeffs = [
meta.fixed_column(),
Expand All @@ -2110,8 +2111,7 @@ mod tests {
meta.fixed_column(),
];

let range_check =
LookupRangeCheckConfig::configure(meta, advices[9], table_idx, None);
let range_check = LookupRangeCheckConfig::configure(meta, advices[9], table_idx);
let sinsemilla_config = SinsemillaChip::<
OrchardHashDomains,
OrchardCommitDomains,
Expand Down
61 changes: 41 additions & 20 deletions src/circuit/circuit_zsa.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@ use halo2_gadgets::{
},
poseidon::{primitives as poseidon, Pow5Chip as PoseidonChip, Pow5Config as PoseidonConfig},
sinsemilla::{
chip::{SinsemillaChip, SinsemillaConfig},
chip::{SinsemillaChipOptimized, SinsemillaConfig},
merkle::{
chip::{MerkleChip, MerkleConfig},
chip::{MerkleChipOptimized, MerkleConfig},
MerklePath,
},
},
utilities::{
bool_check,
cond_swap::{CondSwapChip, CondSwapConfig},
lookup_range_check::LookupRangeCheckConfig,
lookup_range_check::{LookupRangeCheckConfigOptimized, PallasLookupConfigOptimized},
},
};

Expand Down Expand Up @@ -69,14 +69,32 @@ pub struct Config {
q_orchard: Selector,
advices: [Column<Advice>; 10],
add_config: AddConfig,
ecc_config: EccConfig<OrchardFixedBases>,
ecc_config: EccConfig<OrchardFixedBases, PallasLookupConfigOptimized>,
poseidon_config: PoseidonConfig<pallas::Base, 3, 2>,
merkle_config_1: MerkleConfig<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases>,
merkle_config_2: MerkleConfig<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases>,
sinsemilla_config_1:
SinsemillaConfig<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases>,
sinsemilla_config_2:
SinsemillaConfig<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases>,
merkle_config_1: MerkleConfig<
OrchardHashDomains,
OrchardCommitDomains,
OrchardFixedBases,
PallasLookupConfigOptimized,
>,
merkle_config_2: MerkleConfig<
OrchardHashDomains,
OrchardCommitDomains,
OrchardFixedBases,
PallasLookupConfigOptimized,
>,
sinsemilla_config_1: SinsemillaConfig<
OrchardHashDomains,
OrchardCommitDomains,
OrchardFixedBases,
PallasLookupConfigOptimized,
>,
sinsemilla_config_2: SinsemillaConfig<
OrchardHashDomains,
OrchardCommitDomains,
OrchardFixedBases,
PallasLookupConfigOptimized,
>,
commit_ivk_config: CommitIvkConfig,
old_note_commit_config: NoteCommitConfig,
new_note_commit_config: NoteCommitConfig,
Expand Down Expand Up @@ -224,7 +242,6 @@ impl OrchardCircuit for OrchardZSA {
table_idx,
meta.lookup_table_column(),
meta.lookup_table_column(),
Some(table_range_check_tag),
);

// Instance column used for public inputs
Expand Down Expand Up @@ -260,17 +277,21 @@ impl OrchardCircuit for OrchardZSA {

// We have a lot of free space in the right-most advice columns; use one of them
// for all of our range checks.
let range_check = LookupRangeCheckConfig::configure(
let range_check = LookupRangeCheckConfigOptimized::configure_with_tag(
meta,
advices[9],
table_idx,
Some(table_range_check_tag),
table_range_check_tag,
);

// Configuration for curve point operations.
// This uses 10 advice columns and spans the whole circuit.
let ecc_config =
EccChip::<OrchardFixedBases>::configure(meta, advices, lagrange_coeffs, range_check);
let ecc_config = EccChip::<OrchardFixedBases, PallasLookupConfigOptimized>::configure(
meta,
advices,
lagrange_coeffs,
range_check,
);

// Configuration for the Poseidon hash.
let poseidon_config = PoseidonChip::configure::<poseidon::P128Pow5T3>(
Expand All @@ -288,15 +309,15 @@ impl OrchardCircuit for OrchardZSA {
// Since the Sinsemilla config uses only 5 advice columns,
// we can fit two instances side-by-side.
let (sinsemilla_config_1, merkle_config_1) = {
let sinsemilla_config_1 = SinsemillaChip::configure(
let sinsemilla_config_1 = SinsemillaChipOptimized::configure(
meta,
advices[..5].try_into().unwrap(),
advices[6],
lagrange_coeffs[0],
lookup,
range_check,
);
let merkle_config_1 = MerkleChip::configure(meta, sinsemilla_config_1.clone());
let merkle_config_1 = MerkleChipOptimized::configure(meta, sinsemilla_config_1.clone());

(sinsemilla_config_1, merkle_config_1)
};
Expand All @@ -306,15 +327,15 @@ impl OrchardCircuit for OrchardZSA {
// Since the Sinsemilla config uses only 5 advice columns,
// we can fit two instances side-by-side.
let (sinsemilla_config_2, merkle_config_2) = {
let sinsemilla_config_2 = SinsemillaChip::configure(
let sinsemilla_config_2 = SinsemillaChipOptimized::configure(
meta,
advices[5..].try_into().unwrap(),
advices[7],
lagrange_coeffs[1],
lookup,
range_check,
);
let merkle_config_2 = MerkleChip::configure(meta, sinsemilla_config_2.clone());
let merkle_config_2 = MerkleChipOptimized::configure(meta, sinsemilla_config_2.clone());

(sinsemilla_config_2, merkle_config_2)
};
Expand Down Expand Up @@ -360,7 +381,7 @@ impl OrchardCircuit for OrchardZSA {
mut layouter: impl Layouter<pallas::Base>,
) -> Result<(), plonk::Error> {
// Load the Sinsemilla generator lookup table used by the whole circuit.
SinsemillaChip::load(config.sinsemilla_config_1.clone(), &mut layouter)?;
SinsemillaChipOptimized::load(config.sinsemilla_config_1.clone(), &mut layouter)?;

// Construct the ECC chip.
let ecc_chip = config.ecc_chip();
Expand Down
22 changes: 11 additions & 11 deletions src/circuit/circuit_zsa/gadget.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ use halo2_gadgets::{
primitives::{self as poseidon, ConstantLength},
Hash as PoseidonHash, PoseidonSpongeInstructions, Pow5Chip as PoseidonChip,
},
sinsemilla::{chip::SinsemillaChip, merkle::chip::MerkleChip},
utilities::cond_swap::CondSwapChip,
sinsemilla::{chip::SinsemillaChipOptimized, merkle::chip::MerkleChipOptimized},
utilities::{cond_swap::CondSwapChip, lookup_range_check::PallasLookupConfigOptimized},
};
use halo2_proofs::{
circuit::{AssignedCell, Layouter, Value},
Expand All @@ -31,32 +31,32 @@ impl super::Config {
CommitIvkChip::construct(self.commit_ivk_config.clone())
}

pub(super) fn ecc_chip(&self) -> EccChip<OrchardFixedBases> {
pub(super) fn ecc_chip(&self) -> EccChip<OrchardFixedBases, PallasLookupConfigOptimized> {
EccChip::construct(self.ecc_config.clone())
}

pub(super) fn sinsemilla_chip_1(
&self,
) -> SinsemillaChip<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases> {
SinsemillaChip::construct(self.sinsemilla_config_1.clone())
) -> SinsemillaChipOptimized<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases> {
SinsemillaChipOptimized::construct(self.sinsemilla_config_1.clone())
}

pub(super) fn sinsemilla_chip_2(
&self,
) -> SinsemillaChip<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases> {
SinsemillaChip::construct(self.sinsemilla_config_2.clone())
) -> SinsemillaChipOptimized<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases> {
SinsemillaChipOptimized::construct(self.sinsemilla_config_2.clone())
}

pub(super) fn merkle_chip_1(
&self,
) -> MerkleChip<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases> {
MerkleChip::construct(self.merkle_config_1.clone())
) -> MerkleChipOptimized<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases> {
MerkleChipOptimized::construct(self.merkle_config_1.clone())
}

pub(super) fn merkle_chip_2(
&self,
) -> MerkleChip<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases> {
MerkleChip::construct(self.merkle_config_2.clone())
) -> MerkleChipOptimized<OrchardHashDomains, OrchardCommitDomains, OrchardFixedBases> {
MerkleChipOptimized::construct(self.merkle_config_2.clone())
}

pub(super) fn poseidon_chip(&self) -> PoseidonChip<pallas::Base, 3, 2> {
Expand Down
Loading

0 comments on commit b4dec8d

Please sign in to comment.