remove op! macro (#378)
This commit is contained in:
parent
7f120f026d
commit
fe8c4eceb3
6 changed files with 118 additions and 211 deletions
|
|
@ -237,9 +237,8 @@ mod tests {
|
|||
use crate::{
|
||||
backends::plonky2::mock::mainpod::MockProver,
|
||||
examples::{custom::eth_dos_batch, MOCK_VD_SET},
|
||||
frontend::MainPodBuilder,
|
||||
frontend::{MainPodBuilder, Operation},
|
||||
middleware::{self, containers::Set, CustomPredicateRef, Params, PodType, DEFAULT_VD_SET},
|
||||
op,
|
||||
};
|
||||
|
||||
#[test]
|
||||
|
|
@ -291,11 +290,11 @@ mod tests {
|
|||
let mut mp_builder = MainPodBuilder::new(¶ms, vd_set);
|
||||
|
||||
// 2 > 1
|
||||
let s1 = mp_builder.priv_op(op!(new_entry, "s1_key", Value::from(2)))?;
|
||||
let s2 = mp_builder.priv_op(op!(new_entry, "s2_key", Value::from(1)))?;
|
||||
let s1 = mp_builder.priv_op(Operation::new_entry("s1_key", Value::from(2)))?;
|
||||
let s2 = mp_builder.priv_op(Operation::new_entry("s2_key", Value::from(1)))?;
|
||||
|
||||
// Adding a gt operation will produce a desugared lt operation
|
||||
let desugared_gt = mp_builder.pub_op(op!(gt, s1, s2))?;
|
||||
let desugared_gt = mp_builder.pub_op(Operation::gt(s1, s2))?;
|
||||
assert_eq!(
|
||||
desugared_gt.predicate(),
|
||||
Predicate::Native(NativePredicate::Lt)
|
||||
|
|
@ -308,7 +307,7 @@ mod tests {
|
|||
|
||||
// Check that our custom predicate matches the statement template
|
||||
// against the desugared gt statement (actually a lt statement)
|
||||
mp_builder.pub_op(op!(custom, gt_custom_pred, desugared_gt))?;
|
||||
mp_builder.pub_op(Operation::custom(gt_custom_pred, [desugared_gt]))?;
|
||||
|
||||
// Check that the POD builds
|
||||
let prover = MockProver {};
|
||||
|
|
@ -340,14 +339,13 @@ mod tests {
|
|||
let mut mp_builder = MainPodBuilder::new(¶ms, vd_set);
|
||||
|
||||
let set_values: HashSet<Value> = [1, 2, 3].iter().map(|i| Value::from(*i)).collect();
|
||||
let s1 = mp_builder.priv_op(op!(
|
||||
new_entry,
|
||||
let s1 = mp_builder.priv_op(Operation::new_entry(
|
||||
"s1_key",
|
||||
Value::from(Set::new(params.max_depth_mt_containers, set_values)?)
|
||||
Value::from(Set::new(params.max_depth_mt_containers, set_values)?),
|
||||
))?;
|
||||
let s2 = mp_builder.priv_op(op!(new_entry, "s2_key", Value::from(1)))?;
|
||||
let s2 = mp_builder.priv_op(Operation::new_entry("s2_key", Value::from(1)))?;
|
||||
|
||||
let set_contains = mp_builder.pub_op(op!(set_contains, s1, s2))?;
|
||||
let set_contains = mp_builder.pub_op(Operation::set_contains(s1, s2))?;
|
||||
assert_eq!(
|
||||
set_contains.predicate(),
|
||||
Predicate::Native(NativePredicate::Contains)
|
||||
|
|
@ -358,7 +356,7 @@ mod tests {
|
|||
);
|
||||
|
||||
let set_contains_custom_pred = CustomPredicateRef::new(batch, 0);
|
||||
mp_builder.pub_op(op!(custom, set_contains_custom_pred, set_contains))?;
|
||||
mp_builder.pub_op(Operation::custom(set_contains_custom_pred, [set_contains]))?;
|
||||
|
||||
let prover = MockProver {};
|
||||
let proof = mp_builder.prove(&prover)?;
|
||||
|
|
|
|||
|
|
@ -726,84 +726,6 @@ impl MainPodCompiler {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO fn fmt_signed_pod_builder
|
||||
// TODO fn fmt_main_pod
|
||||
|
||||
#[macro_use]
|
||||
pub mod build_utils {
|
||||
#[macro_export]
|
||||
macro_rules! op_args {
|
||||
($($arg:expr),+) => {vec![$($crate::frontend::OperationArg::from($arg)),*]}
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! op {
|
||||
(new_entry, $key:expr, $value:expr) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::NewEntry),
|
||||
$crate::op_args!(($key, $value)), $crate::middleware::OperationAux::None) };
|
||||
(copy, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::CopyStatement),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(eq, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::EqualFromEntries),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(ne, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::NotEqualFromEntries),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(gt, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::GtFromEntries),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(lt, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::LtFromEntries),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(transitive_eq, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::TransitiveEqualFromStatements),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(gt_to_ne, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::GtToNotEqual),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(lt_to_ne, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::LtToNotEqual),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(sum_of, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::SumOf),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(product_of, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::ProductOf),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(max_of, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::MaxOf),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(hash_of, $($arg:expr),+) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::HashOf),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(custom, $op:expr, $($arg:expr),*) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Custom($op),
|
||||
$crate::op_args!($($arg),*), $crate::middleware::OperationAux::None) };
|
||||
(dict_contains, $dict:expr, $key:expr, $value:expr) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::DictContainsFromEntries),
|
||||
$crate::op_args!($dict, $key, $value), $crate::middleware::OperationAux::None) };
|
||||
(dict_not_contains, $dict:expr, $key:expr) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::DictNotContainsFromEntries),
|
||||
$crate::op_args!($dict, $key), $crate::middleware::OperationAux::None) };
|
||||
(set_contains, $set:expr, $value:expr) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::SetContainsFromEntries),
|
||||
$crate::op_args!($set, $value), $crate::middleware::OperationAux::None) };
|
||||
(set_not_contains, $set:expr, $value:expr) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::SetNotContainsFromEntries),
|
||||
$crate::op_args!($set, $value), $crate::middleware::OperationAux::None) };
|
||||
(array_contains, $array:expr, $index:expr, $value:expr) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::ArrayContainsFromEntries),
|
||||
$crate::op_args!($array, $index, $value), $crate::middleware::OperationAux::None) };
|
||||
(hash_of, $hash:expr, $val1:expr, $val2:expr) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::HashOf),
|
||||
$crate::op_args!($hash, $val1, $val2), $crate::middleware::OperationAux::None) };
|
||||
(public_key_of, $pk:expr, $sk:expr) => { $crate::frontend::Operation(
|
||||
$crate::middleware::OperationType::Native($crate::middleware::NativeOperation::PublicKeyOf),
|
||||
$crate::op_args!($pk, $sk), $crate::middleware::OperationAux::None) };
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub mod tests {
|
||||
|
||||
|
|
@ -1031,7 +953,7 @@ pub mod tests {
|
|||
|
||||
let mut builder = MainPodBuilder::new(¶ms, vd_set);
|
||||
builder.add_signed_pod(&pod);
|
||||
builder.pub_op(op!(gt, (&pod, "num"), 5)).unwrap();
|
||||
builder.pub_op(Operation::gt((&pod, "num"), 5)).unwrap();
|
||||
|
||||
let prover = MockProver {};
|
||||
let false_pod = builder.prove(&prover).unwrap();
|
||||
|
|
@ -1062,7 +984,7 @@ pub mod tests {
|
|||
let mut builder = MainPodBuilder::new(¶ms, vd_set);
|
||||
builder.add_signed_pod(&pod);
|
||||
let st0 = pod.get_statement("dict").unwrap();
|
||||
let st1 = builder.op(true, op!(new_entry, "key", "a")).unwrap();
|
||||
let st1 = builder.op(true, Operation::new_entry("key", "a")).unwrap();
|
||||
let st2 = builder.literal(false, Value::from(1)).unwrap();
|
||||
|
||||
builder
|
||||
|
|
@ -1106,7 +1028,7 @@ pub mod tests {
|
|||
builder.add_signed_pod(&signed_pod);
|
||||
let st0 = signed_pod.get_statement("owner").unwrap();
|
||||
let st1 = builder
|
||||
.priv_op(op!(new_entry, "known_secret", Value::from(sk)))
|
||||
.priv_op(Operation::new_entry("known_secret", Value::from(sk)))
|
||||
.unwrap();
|
||||
builder
|
||||
.pub_op(Operation(
|
||||
|
|
@ -1148,10 +1070,9 @@ pub mod tests {
|
|||
builder.add_signed_pod(&signed_pod);
|
||||
let st0 = signed_pod.get_statement("owner").unwrap();
|
||||
let st1 = builder
|
||||
.priv_op(op!(
|
||||
new_entry,
|
||||
.priv_op(Operation::new_entry(
|
||||
"known_secret",
|
||||
Value::from(SecretKey(BigUint::from(123u32)))
|
||||
Value::from(SecretKey(BigUint::from(123u32))),
|
||||
))
|
||||
.unwrap();
|
||||
assert!(builder
|
||||
|
|
|
|||
|
|
@ -180,18 +180,21 @@ impl Operation {
|
|||
op_impl_oa!(sum_of, SumOf, 3);
|
||||
op_impl_oa!(product_of, ProductOf, 3);
|
||||
op_impl_oa!(max_of, MaxOf, 3);
|
||||
op_impl_oa!(hash_of, HashOf, 3);
|
||||
/// Creates a custom operation.
|
||||
///
|
||||
/// `args` should contain the statements that are needed to prove the
|
||||
/// custom statement. It should have the same length as
|
||||
/// `cpr.predicate().statements()`. If `cpr` refers to an `or` predicate,
|
||||
/// then all but one of the statements should be `Statement::None`.
|
||||
pub fn custom(cpr: CustomPredicateRef, args: Vec<OperationArg>) -> Self {
|
||||
Self(OperationType::Custom(cpr), args, OperationAux::None)
|
||||
pub fn custom(cpr: CustomPredicateRef, args: impl IntoIterator<Item = Statement>) -> Self {
|
||||
let op_args = args.into_iter().map(OperationArg::from).collect();
|
||||
Self(OperationType::Custom(cpr), op_args, OperationAux::None)
|
||||
}
|
||||
op_impl_oa!(dict_contains, DictContainsFromEntries, 3);
|
||||
op_impl_oa!(dict_not_contains, DictNotContainsFromEntries, 2);
|
||||
op_impl_oa!(set_contains, SetContainsFromEntries, 2);
|
||||
op_impl_oa!(set_not_contains, SetNotContainsFromEntries, 2);
|
||||
op_impl_oa!(array_contains, ArrayContainsFromEntries, 3);
|
||||
op_impl_oa!(public_key_of, PublicKeyOf, 2);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue