First iteration of circuits naming convention
In this commit I remove all `*Gadget` types and instead implement the naming convention defined here https://github.com/0xPARC/pod2/issues/181#issuecomment-3051954321 The biggest changes can be summarized by: - a) Removal of `*Gadget` types and their `eval_*` methods in favour of `verb_object_circuit` functions. - b) The above functions don't create targets that need to be witness-assigned later. Instead they receive those as arguments. This clearly shows what's the circuit input and output. I'm specially happy about the changes from b), I think they make the flow of data in the circuit more clear. Missing things that I did not address in this PR - The RecursiveCircuit still uses some old naming conventions like `build`. - We have some `*Target` types that have methods that define constraints. I think we can keep those as they are convenient and I don't see them as strongly breaking the new convention: I see them as the object-oriented way to apply the convention. In those cases the `object` can be omitted from the method when it's implied by the type name, and the `_circuit` suffix doesn't appear because it's implied by the fact that the type is a `*Target`. Examples are: `SignatureTarget::verify -> BoolTarget`, `StatementTarget::has_native_type -> BoolTarget` or `OperationTypeTarget::as_custom -> (BoolTarget, HashOutTarget, Target)`.
This commit is contained in:
parent
63a716ebd7
commit
143a8c9d4e
8 changed files with 1445 additions and 1497 deletions
|
|
@ -579,10 +579,22 @@ pub struct CustomPredicateVerifyEntryTarget {
|
|||
pub custom_predicate_table_index: Target,
|
||||
pub custom_predicate: CustomPredicateEntryTarget,
|
||||
pub args: Vec<ValueTarget>,
|
||||
pub query: CustomPredicateVerifyQueryTarget,
|
||||
pub op_args: Vec<StatementTarget>,
|
||||
}
|
||||
|
||||
impl CustomPredicateVerifyEntryTarget {
|
||||
pub fn new_virtual(params: &Params, builder: &mut CircuitBuilder) -> Self {
|
||||
CustomPredicateVerifyEntryTarget {
|
||||
custom_predicate_table_index: builder.add_virtual_target(),
|
||||
custom_predicate: builder.add_virtual_custom_predicate_entry(params),
|
||||
args: (0..params.max_custom_predicate_wildcards)
|
||||
.map(|_| builder.add_virtual_value())
|
||||
.collect(),
|
||||
op_args: (0..params.max_operation_args)
|
||||
.map(|_| builder.add_virtual_statement(params))
|
||||
.collect(),
|
||||
}
|
||||
}
|
||||
pub fn set_targets(
|
||||
&self,
|
||||
pw: &mut PartialWitness<F>,
|
||||
|
|
@ -606,7 +618,7 @@ impl CustomPredicateVerifyEntryTarget {
|
|||
arg_target.set_targets(pw, &Value::from(arg.raw()))?;
|
||||
}
|
||||
let pad_op_arg = Statement(Predicate::Native(NativePredicate::None), vec![]);
|
||||
for (op_arg_target, op_arg) in self.query.op_args.iter().zip_eq(
|
||||
for (op_arg_target, op_arg) in self.op_args.iter().zip_eq(
|
||||
cpv.op_args
|
||||
.iter()
|
||||
.chain(iter::repeat(&pad_op_arg))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue