Skip to content

Commit a1128a3

Browse files
committed
More clean-up
1 parent 950e63a commit a1128a3

File tree

4 files changed

+68
-75
lines changed

4 files changed

+68
-75
lines changed

src/backends/mock_main.rs

Lines changed: 64 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use itertools::Itertools;
77
use plonky2::hash::poseidon::PoseidonHash;
88
use plonky2::plonk::config::Hasher;
99
use std::any::Any;
10-
use std::error::Error;
1110
use std::fmt;
1211

1312
pub const VALUE_TYPE: &str = "MockMainPOD";
@@ -64,14 +63,6 @@ impl Operation {
6463
.collect::<Result<Vec<crate::middleware::Statement>>>()?;
6564
middleware::Operation::op(self.0, &deref_args)
6665
}
67-
/// Argument method. Trailing Nones are filtered out.
68-
pub fn args(&self) -> Vec<OperationArg> {
69-
let maybe_last_arg_index = (0..self.1.len()).rev().find(|i| !self.1[*i].is_none());
70-
match maybe_last_arg_index {
71-
None => vec![],
72-
Some(i) => self.1[0..i + 1].to_vec(),
73-
}
74-
}
7566
}
7667

7768
#[derive(Clone, Debug, PartialEq, Eq)]
@@ -124,13 +115,17 @@ impl TryFrom<Statement> for middleware::Statement {
124115
);
125116
Ok(match (s.0, args, proper_args.len()) {
126117
(NS::None, _, 0) => S::None,
127-
(NS::ValueOf, (Some(SA::Key(ak)), Some(SA::Literal(v)), _), 2) => S::ValueOf(ak, v),
128-
(NS::Equal, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), _), 2) => S::Equal(ak1, ak2),
129-
(NS::NotEqual, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), _), 2) => S::NotEqual(ak1, ak2),
130-
(NS::Gt, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), _), 2) => S::Gt(ak1, ak2),
131-
(NS::Lt, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), _), 2) => S::Lt(ak1, ak2),
132-
(NS::Contains, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), _), 2) => S::Contains(ak1, ak2),
133-
(NS::NotContains, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), _), 2) => {
118+
(NS::ValueOf, (Some(SA::Key(ak)), Some(SA::Literal(v)), None), 2) => S::ValueOf(ak, v),
119+
(NS::Equal, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), None), 2) => S::Equal(ak1, ak2),
120+
(NS::NotEqual, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), None), 2) => {
121+
S::NotEqual(ak1, ak2)
122+
}
123+
(NS::Gt, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), None), 2) => S::Gt(ak1, ak2),
124+
(NS::Lt, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), None), 2) => S::Lt(ak1, ak2),
125+
(NS::Contains, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), None), 2) => {
126+
S::Contains(ak1, ak2)
127+
}
128+
(NS::NotContains, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), None), 2) => {
134129
S::NotContains(ak1, ak2)
135130
}
136131
(NS::SumOf, (Some(SA::Key(ak1)), Some(SA::Key(ak2)), Some(SA::Key(ak3))), 3) => {
@@ -276,11 +271,6 @@ fn fill_pad<T: Clone>(v: &mut Vec<T>, pad_value: T, len: usize) {
276271
}
277272
}
278273

279-
fn pad<T: Clone>(v: Vec<T>, pad_value: T, len: usize) -> Vec<T> {
280-
let v_len = v.len();
281-
[v, (v_len..len).map(|_| pad_value.clone()).collect()].concat()
282-
}
283-
284274
impl MockMainPod {
285275
fn offset_input_signed_pods(&self) -> usize {
286276
0
@@ -295,14 +285,11 @@ impl MockMainPod {
295285
fn offset_public_statements(&self) -> usize {
296286
self.offset_input_statements() + self.params.max_priv_statements()
297287
}
298-
fn pad_statement(params: &Params, s: Statement) -> Statement {
299-
Statement(s.0, pad(s.1, StatementArg::None, params.max_statement_args))
288+
fn pad_statement(params: &Params, s: &mut Statement) {
289+
fill_pad(&mut s.1, StatementArg::None, params.max_statement_args)
300290
}
301-
fn pad_operation(params: &Params, op: Operation) -> Operation {
302-
Operation(
303-
op.0,
304-
pad(op.1, OperationArg::None, params.max_operation_args),
305-
)
291+
fn pad_operation(params: &Params, op: &mut Operation) {
292+
fill_pad(&mut op.1, OperationArg::None, params.max_operation_args)
306293
}
307294

308295
fn layout_statements(params: &Params, inputs: &MainPodInputs) -> Vec<Statement> {
@@ -317,12 +304,16 @@ impl MockMainPod {
317304
.get(i)
318305
.map(|p| *p)
319306
.unwrap_or(&none_sig_pod);
320-
// TODO
321307
let sts = pod.pub_statements();
322308
assert!(sts.len() <= params.max_signed_pod_values);
323309
for j in 0..params.max_signed_pod_values {
324-
let mut st = sts.get(j).unwrap_or(&middleware::Statement::None).clone();
325-
statements.push(Self::pad_statement(params, st.into()));
310+
let mut st = sts
311+
.get(j)
312+
.unwrap_or(&middleware::Statement::None)
313+
.clone()
314+
.into();
315+
Self::pad_statement(params, &mut st);
316+
statements.push(st);
326317
}
327318
}
328319

@@ -338,8 +329,13 @@ impl MockMainPod {
338329
let sts = pod.pub_statements();
339330
assert!(sts.len() <= params.max_public_statements);
340331
for j in 0..params.max_public_statements {
341-
let mut st = sts.get(j).unwrap_or(&middleware::Statement::None).clone();
342-
statements.push(Self::pad_statement(params, st.into()));
332+
let mut st = sts
333+
.get(j)
334+
.unwrap_or(&middleware::Statement::None)
335+
.clone()
336+
.into();
337+
Self::pad_statement(params, &mut st);
338+
statements.push(st);
343339
}
344340
}
345341

@@ -350,27 +346,31 @@ impl MockMainPod {
350346
.statements
351347
.get(i)
352348
.unwrap_or(&middleware::Statement::None)
353-
.clone();
354-
statements.push(Self::pad_statement(params, st.into()));
349+
.clone()
350+
.into();
351+
Self::pad_statement(params, &mut st);
352+
statements.push(st);
355353
}
356354

357355
// Public statements
358356
assert!(inputs.public_statements.len() < params.max_public_statements);
359-
statements.push(Self::pad_statement(
360-
params,
361-
middleware::Statement::ValueOf(
362-
AnchoredKey(SELF, hash_str(KEY_TYPE)),
363-
middleware::Value(hash_str(VALUE_TYPE).0),
364-
)
365-
.into(),
366-
));
357+
let mut type_st = middleware::Statement::ValueOf(
358+
AnchoredKey(SELF, hash_str(KEY_TYPE)),
359+
middleware::Value(hash_str(VALUE_TYPE).0),
360+
)
361+
.into();
362+
Self::pad_statement(params, &mut type_st);
363+
statements.push(type_st);
364+
367365
for i in 0..(params.max_public_statements - 1) {
368-
let st = inputs
366+
let mut st = inputs
369367
.public_statements
370368
.get(i)
371369
.unwrap_or(&middleware::Statement::None)
372-
.clone();
373-
statements.push(Self::pad_statement(params, st.into()));
370+
.clone()
371+
.into();
372+
Self::pad_statement(params, &mut st);
373+
statements.push(st);
374374
}
375375

376376
statements
@@ -385,8 +385,8 @@ impl MockMainPod {
385385
_ => statements
386386
.iter()
387387
.enumerate()
388-
// TODO
389388
.find_map(|(i, s)| {
389+
// TODO: Error handling
390390
(&middleware::Statement::try_from(s.clone()).unwrap() == op_arg).then_some(i)
391391
})
392392
.map(OperationArg::Index)
@@ -399,21 +399,18 @@ impl MockMainPod {
399399
statements: &[Statement],
400400
input_operations: &[middleware::Operation],
401401
) -> Result<Vec<Operation>, OperationArgError> {
402-
let op_none = Self::operation_none(params);
403-
404402
let mut operations = Vec::new();
405403
for i in 0..params.max_priv_statements() {
406404
let op = input_operations
407405
.get(i)
408406
.unwrap_or(&middleware::Operation::None)
409407
.clone();
410-
let mut mid_args = op.args();
411-
Self::pad_operation_args(params, &mut mid_args);
412-
let mut args = Vec::with_capacity(mid_args.len());
413-
for mid_arg in &mid_args {
414-
let op_arg = Self::find_op_arg(statements, mid_arg)?;
415-
args.push(op_arg)
416-
}
408+
let mid_args = op.args();
409+
let mut args = mid_args
410+
.iter()
411+
.map(|mid_arg| Self::find_op_arg(statements, mid_arg))
412+
.collect::<Result<Vec<_>, OperationArgError>>()?;
413+
Self::pad_operation_args(params, &mut args);
417414
operations.push(Operation(op.code(), args));
418415
}
419416
Ok(operations)
@@ -468,7 +465,11 @@ impl MockMainPod {
468465
.statements
469466
.iter()
470467
.cloned()
471-
.map(|s| Self::pad_statement(params, s.into()))
468+
.map(|s| {
469+
let mut s = s.into();
470+
Self::pad_statement(params, &mut s);
471+
s
472+
})
472473
.collect_vec();
473474
let public_statements =
474475
statements[statements.len() - params.max_public_statements..].to_vec();
@@ -495,15 +496,17 @@ impl MockMainPod {
495496
}
496497

497498
fn operation_none(params: &Params) -> Operation {
498-
Self::pad_operation(params, Operation(NativeOperation::None, vec![]))
499+
let mut op = Operation(NativeOperation::None, vec![]);
500+
fill_pad(&mut op.1, OperationArg::None, params.max_operation_args);
501+
op
499502
}
500503

501504
fn pad_statement_args(params: &Params, args: &mut Vec<StatementArg>) {
502505
fill_pad(args, StatementArg::None, params.max_statement_args)
503506
}
504507

505-
fn pad_operation_args(params: &Params, args: &mut Vec<middleware::Statement>) {
506-
fill_pad(args, middleware::Statement::None, params.max_operation_args)
508+
fn pad_operation_args(params: &Params, args: &mut Vec<OperationArg>) {
509+
fill_pad(args, OperationArg::None, params.max_operation_args)
507510
}
508511
}
509512

@@ -556,7 +559,7 @@ impl Pod for MockMainPod {
556559
s,
557560
)
558561
})
559-
.filter(|(i, s)| s.0 == NativeStatement::ValueOf)
562+
.filter(|(_, s)| s.0 == NativeStatement::ValueOf)
560563
.flat_map(|(i, s)| {
561564
if let StatementArg::Key(ak) = &s.1[0] {
562565
vec![(i, ak.1, ak.0)]

src/backends/mock_signed.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::middleware::{
2-
containers::Dictionary, hash_str, AnchoredKey, Hash, NativeStatement, Params, Pod, PodId,
3-
PodSigner, PodType, Statement, StatementArg, Value, KEY_SIGNER, KEY_TYPE,
2+
containers::Dictionary, hash_str, AnchoredKey, Hash, Params, Pod, PodId, PodSigner, PodType,
3+
Statement, Value, KEY_SIGNER, KEY_TYPE,
44
};
55
use crate::primitives::merkletree::MerkleTree;
66
use anyhow::Result;

src/frontend.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -551,10 +551,6 @@ impl MainPodCompiler {
551551
}
552552
}
553553

554-
fn compile_anchored_key(key: &AnchoredKey) -> middleware::AnchoredKey {
555-
middleware::AnchoredKey(key.0 .1, hash_str(&key.1))
556-
}
557-
558554
fn compile_st(&self, st: &Statement) -> middleware::Statement {
559555
st.clone().try_into().unwrap()
560556
}

src/middleware/mod.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -604,14 +604,8 @@ pub trait Pod: fmt::Debug + DynClone {
604604
fn kvs(&self) -> HashMap<AnchoredKey, Value> {
605605
self.pub_statements()
606606
.into_iter()
607-
.filter_map(|st| match st.code() {
608-
NativeStatement::ValueOf => {
609-
let args = st.args();
610-
Some((
611-
args[0].key().expect("key"),
612-
args[1].literal().expect("literal"),
613-
))
614-
}
607+
.filter_map(|st| match st {
608+
Statement::ValueOf(ak, v) => Some((ak, v)),
615609
_ => None,
616610
})
617611
.collect()

0 commit comments

Comments
 (0)