mirror of https://github.com/zcash/orchard.git
mul.rs: Explain ordering of mul::incomplete advice columns.
This commit is contained in:
parent
0ade539441
commit
b696163e31
|
@ -70,6 +70,10 @@ impl Config {
|
|||
.collect()
|
||||
}
|
||||
|
||||
pub(crate) fn output_columns(&self) -> HashSet<Column<Advice>> {
|
||||
core::array::IntoIter::new([self.x_qr, self.y_qr]).collect()
|
||||
}
|
||||
|
||||
pub(crate) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
|
||||
meta.create_gate("complete addition gates", |meta| {
|
||||
let q_add = meta.query_selector(self.q_add);
|
||||
|
|
|
@ -80,15 +80,20 @@ impl From<&EccConfig> for Config {
|
|||
"y_p is shared across hi and lo halves."
|
||||
);
|
||||
|
||||
let add_config_advices = config.add_config.advice_columns();
|
||||
// For both hi_config and lo_config:
|
||||
// z and lambda1 are assigned on the same row as the add_config output.
|
||||
// Therefore, z and lambda1 must not overlap with add_config.x_qr, add_config.y_qr.
|
||||
let add_config_outputs = config.add_config.output_columns();
|
||||
for config in [&(*config.hi_config), &(*config.lo_config)].iter() {
|
||||
assert!(
|
||||
!add_config_advices.contains(&config.hi_config.z),
|
||||
"hi_config z cannot overlap with complete addition columns."
|
||||
!add_config_outputs.contains(&config.z),
|
||||
"incomplete config z cannot overlap with complete addition columns."
|
||||
);
|
||||
assert!(
|
||||
!add_config_advices.contains(&config.complete_config.z_complete),
|
||||
"complete_config z cannot overlap with complete addition columns."
|
||||
!add_config_outputs.contains(&config.lambda1),
|
||||
"incomplete config lambda1 cannot overlap with complete addition columns."
|
||||
);
|
||||
}
|
||||
|
||||
config
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue