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
|
|
@ -169,6 +169,12 @@ pub struct Hash(
|
|||
pub [F; HASH_SIZE],
|
||||
);
|
||||
|
||||
impl From<Hash> for HashOut {
|
||||
fn from(hash: Hash) -> HashOut {
|
||||
HashOut { elements: hash.0 }
|
||||
}
|
||||
}
|
||||
|
||||
impl ToHex for Hash {
|
||||
fn encode_hex<T: std::iter::FromIterator<char>>(&self) -> T {
|
||||
self.0
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue