Split Params into base and developer-defined (#458)

I thought it would be nice to have a Predicate for the typed value so that the developer can work with predicates as values comfortably.  Then I noticed that hashing a predicate required `Params` which would have been annoying for converting a `TypedValue::Predicate` to `RawValue` and this led to a small refactor over how `Params` work.

We already had some fields in the `Params` struct that determine compatibility between encoded data.  They can be seen as determining a kind of ABI compatibility.  In general it's better if those parameters don't change so that different circuit configurations can still verify proofs from each other.  So I decided to force those parameters to be constant in the code base and not allow the user of our library to change them.  Many field element serialization/deserialization functions in our code depended on those parameters, and since now they are constant many functions get rid of the `Params` argument, which simplifies the code.  This includes the serialization of a `Predicate` which was required to calculate its hash.
This commit is contained in:
Eduard S. 2026-02-02 16:23:32 +01:00 committed by GitHub
parent 498e946612
commit a7a30176a7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 376 additions and 468 deletions

View file

@ -49,7 +49,7 @@ use super::serialization::*;
pub use crate::backends::plonky2::basetypes::*;
#[cfg(feature = "backend_plonky2")]
pub use crate::backends::plonky2::{Error as BackendError, Result as BackendResult};
use crate::middleware::{Params, ToFields, Value};
use crate::middleware::{ToFields, Value};
pub const HASH_SIZE: usize = 4;
pub const VALUE_SIZE: usize = 4;
@ -71,7 +71,7 @@ pub struct RawValue(
);
impl ToFields for RawValue {
fn to_fields(&self, _params: &Params) -> Vec<F> {
fn to_fields(&self) -> Vec<F> {
self.0.to_vec()
}
}
@ -220,7 +220,7 @@ impl From<RawValue> for Hash {
}
impl ToFields for Hash {
fn to_fields(&self, _params: &Params) -> Vec<F> {
fn to_fields(&self) -> Vec<F> {
self.0.to_vec()
}
}