Use predicate hash in statements instead of the literal predicate
Resolve #448 Previously a predicate was 6 elements. Now it grows to 8 elements; and the hash is 4 elements. Some parts of the circuit require only require equality checks with the predicate: that works with the predicate hash. Other parts require inspecting or working with particular elements in the predicate, those need the preimage of the predicate hash. Both `StatementTarget` and `StatementTmplTarget` have been updated to include the predicate hash and optionally the predicate. When the predicate is included, constraints are automatically generated for `pred_hash = hash(pred)`. We only include the predicate when needed.
This commit is contained in:
parent
2eb1daeb92
commit
0fca00cc93
7 changed files with 319 additions and 159 deletions
|
|
@ -31,7 +31,7 @@ impl Statement {
|
|||
|
||||
impl ToFields for Statement {
|
||||
fn to_fields(&self, params: &Params) -> Vec<middleware::F> {
|
||||
let mut fields = self.0.to_fields(params);
|
||||
let mut fields = self.0.hash(params).to_fields(params);
|
||||
fields.extend(
|
||||
self.1
|
||||
.iter()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue