Skip to content

Commit 2c41a6c

Browse files
authored
chore: minor error handling improvements (#325)
* Minor error handling improvements * Fix error
1 parent 901ba64 commit 2c41a6c

File tree

7 files changed

+62
-58
lines changed

7 files changed

+62
-58
lines changed

src/backends/plonky2/mock/mainpod.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -312,12 +312,11 @@ impl Pod for MockMainPod {
312312
.deref(
313313
&self.statements[..input_statement_offset + i],
314314
&self.merkle_proofs_containers,
315-
)
316-
.unwrap()
317-
.check_and_log(&self.params, &s.clone().try_into().unwrap())
315+
)?
316+
.check_and_log(&self.params, &s.clone().try_into()?)
317+
.map_err(|e| e.into())
318318
})
319-
.collect::<Result<Vec<_>, middleware::Error>>()
320-
.unwrap();
319+
.collect::<Result<Vec<_>>>()?;
321320
if !statement_check.iter().all(|b| *b) {
322321
return Err(Error::statement_not_check());
323322
}

src/backends/plonky2/primitives/ec/curve.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,10 @@ pub(super) fn add_homog_offset<const D: usize, F: ECFieldExt<D>>(
316316
}
317317

318318
const GROUP_ORDER_STR: &str = "1067993516717146951041484916571792702745057740581727230159139685185762082554198619328292418486241";
319-
pub static GROUP_ORDER: LazyLock<BigUint> =
320-
LazyLock::new(|| BigUint::from_str_radix(GROUP_ORDER_STR, 10).unwrap());
319+
pub static GROUP_ORDER: LazyLock<BigUint> = LazyLock::new(|| {
320+
BigUint::from_str_radix(GROUP_ORDER_STR, 10)
321+
.expect("The input should be a valid decimal string.")
322+
});
321323

322324
static FIELD_NUM_SQUARES: LazyLock<BigUint> =
323325
LazyLock::new(|| (ECField::order() - BigUint::one()) >> 1);
@@ -605,10 +607,8 @@ impl CircuitBuilderElliptic for CircuitBuilder<GoldilocksField, 2> {
605607
let outputs = ECAddHomogOffset::apply(self, &inputs);
606608
// plonky2 expects all gate constraints to be satisfied by the zero vector.
607609
// So our elliptic curve addition gate computes [x,z-b,u,t-b], and we have to add the b here.
608-
let x = FieldTarget::new(outputs[0..5].try_into().unwrap());
609-
let z = FieldTarget::new(outputs[5..10].try_into().unwrap());
610-
let u = FieldTarget::new(outputs[10..15].try_into().unwrap());
611-
let t = FieldTarget::new(outputs[15..20].try_into().unwrap());
610+
let [x, z, u, t] =
611+
array::from_fn(|j| FieldTarget::new(array::from_fn(|i| outputs[5 * j + i])));
612612
let b1 = self.constant(Point::B1);
613613
let z = self.nnf_add_scalar_times_generator_power(b1, 1, &z);
614614
let t = self.nnf_add_scalar_times_generator_power(b1, 1, &t);

src/backends/plonky2/primitives/ec/field.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::marker::PhantomData;
1+
use std::{array, marker::PhantomData};
22

33
use num::BigUint;
44
use plonky2::{
@@ -217,7 +217,7 @@ impl<const DEG: usize, NNF: OEF<DEG> + FieldExtension<DEG, BaseField = F>>
217217
inputs.extend_from_slice(&x.components);
218218
inputs.extend_from_slice(&y.components);
219219
let outputs = NNFMulSimple::<DEG, NNF>::apply(self, &inputs);
220-
OEFTarget::new(outputs.try_into().unwrap())
220+
OEFTarget::new(array::from_fn(|i| outputs[i]))
221221
}
222222
fn nnf_div(&mut self, x: &OEFTarget<DEG, NNF>, y: &OEFTarget<DEG, NNF>) -> OEFTarget<DEG, NNF> {
223223
let one = self.nnf_one();

src/backends/plonky2/primitives/ec/gates/curve.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::array;
2+
13
use plonky2::field::goldilocks_field::GoldilocksField;
24

35
use crate::backends::plonky2::primitives::ec::{
@@ -39,10 +41,8 @@ impl SimpleGate for ECAddHomogOffset {
3941
Self::F: plonky2::field::extension::Extendable<D>,
4042
{
4143
let mut ans = Vec::with_capacity(20);
42-
let x1 = QuinticTensor::from_base(wires[0..5].try_into().unwrap());
43-
let u1 = QuinticTensor::from_base(wires[5..10].try_into().unwrap());
44-
let x2 = QuinticTensor::from_base(wires[10..15].try_into().unwrap());
45-
let u2 = QuinticTensor::from_base(wires[15..20].try_into().unwrap());
44+
let [x1, u1, x2, u2] =
45+
array::from_fn(|j| QuinticTensor::from_base(array::from_fn(|i| wires[5 * j + i])));
4646
let out = add_homog_offset(x1, u1, x2, u2);
4747
for v in out {
4848
ans.extend(v.to_base());

src/backends/plonky2/primitives/merkletree/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ impl Intermediate {
528528
h
529529
}
530530
fn hash(&self) -> Hash {
531-
self.hash.unwrap()
531+
self.hash.expect("Hash has not been computed.")
532532
}
533533
}
534534

@@ -554,7 +554,7 @@ impl Leaf {
554554
h
555555
}
556556
fn hash(&self) -> Hash {
557-
self.hash.unwrap()
557+
self.hash.expect("Hash has not been computed.")
558558
}
559559
}
560560

src/frontend/custom.rs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -178,23 +178,25 @@ impl CustomPredicateBatchBuilder {
178178
let args = stb
179179
.args
180180
.iter()
181-
.map(|a| match a {
182-
BuilderArg::Literal(v) => StatementTmplArg::Literal(v.clone()),
183-
BuilderArg::Key(pod_id_wc, key_str) => StatementTmplArg::AnchoredKey(
184-
resolve_wildcard(args, priv_args, pod_id_wc),
185-
Key::from(key_str),
186-
),
187-
BuilderArg::WildcardLiteral(v) => {
188-
StatementTmplArg::Wildcard(resolve_wildcard(args, priv_args, v))
189-
}
181+
.map(|a| {
182+
Ok::<_, Error>(match a {
183+
BuilderArg::Literal(v) => StatementTmplArg::Literal(v.clone()),
184+
BuilderArg::Key(pod_id_wc, key_str) => StatementTmplArg::AnchoredKey(
185+
resolve_wildcard(args, priv_args, pod_id_wc)?,
186+
Key::from(key_str),
187+
),
188+
BuilderArg::WildcardLiteral(v) => {
189+
StatementTmplArg::Wildcard(resolve_wildcard(args, priv_args, v)?)
190+
}
191+
})
190192
})
191-
.collect();
192-
StatementTmpl {
193+
.collect::<Result<_>>()?;
194+
Ok(StatementTmpl {
193195
pred: stb.predicate.clone(),
194196
args,
195-
}
197+
})
196198
})
197-
.collect();
199+
.collect::<Result<_>>()?;
198200
let custom_predicate = CustomPredicate::new(
199201
&self.params,
200202
name.into(),
@@ -215,12 +217,16 @@ impl CustomPredicateBatchBuilder {
215217
}
216218
}
217219

218-
fn resolve_wildcard(args: &[&str], priv_args: &[&str], s: &str) -> Wildcard {
220+
fn resolve_wildcard(args: &[&str], priv_args: &[&str], s: &str) -> Result<Wildcard> {
219221
args.iter()
220222
.chain(priv_args.iter())
221223
.enumerate()
222224
.find_map(|(i, name)| (s == *name).then_some(Wildcard::new(s.to_string(), i)))
223-
.unwrap()
225+
.ok_or(Error::custom(format!(
226+
"Wildcard {} not amongst args {:?}",
227+
s,
228+
[args.to_vec(), priv_args.to_vec()].concat()
229+
)))
224230
}
225231

226232
#[cfg(test)]

src/frontend/mod.rs

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -200,45 +200,44 @@ impl MainPodBuilder {
200200
/// - {Dict,Array,Set}Contains/NotContains becomes Contains/NotContains.
201201
/// - GtEqFromEntries/GtFromEntries/GtToNotEqual becomes
202202
/// LtEqFromEntries/LtFromEntries/LtToNotEqual.
203-
fn lower_op(op: Operation) -> Operation {
203+
fn lower_op(op: Operation) -> Result<Operation> {
204204
use NativeOperation::*;
205205
use OperationType::*;
206+
let op_type = op.0.clone();
206207
match op.0 {
207-
Native(DictContainsFromEntries) => {
208-
let [dict, key, value] = op.1.try_into().unwrap(); // TODO: Error handling
208+
Native(DictContainsFromEntries) => <[_; 3]>::try_from(op.1).map(|[dict, key, value]| {
209209
Operation(Native(ContainsFromEntries), vec![dict, key, value], op.2)
210-
}
211-
Native(DictNotContainsFromEntries) => {
212-
let [dict, key] = op.1.try_into().unwrap(); // TODO: Error handling
210+
}),
211+
Native(DictNotContainsFromEntries) => <[_; 2]>::try_from(op.1).map(|[dict, key]| {
213212
Operation(Native(NotContainsFromEntries), vec![dict, key], op.2)
214-
}
215-
Native(SetContainsFromEntries) => {
216-
let [set, value] = op.1.try_into().unwrap(); // TODO: Error handling
213+
}),
214+
Native(SetContainsFromEntries) => <[_; 2]>::try_from(op.1).map(|[set, value]| {
217215
Operation(
218216
Native(ContainsFromEntries),
219217
vec![set, value.clone(), value],
220218
op.2,
221219
)
222-
}
223-
Native(SetNotContainsFromEntries) => {
224-
let [set, value] = op.1.try_into().unwrap(); // TODO: Error handling
220+
}),
221+
Native(SetNotContainsFromEntries) => <[_; 2]>::try_from(op.1).map(|[set, value]| {
225222
Operation(Native(NotContainsFromEntries), vec![set, value], op.2)
226-
}
223+
}),
227224
Native(ArrayContainsFromEntries) => {
228-
let [array, index, value] = op.1.try_into().unwrap(); // TODO: Error handling
229-
Operation(Native(ContainsFromEntries), vec![array, index, value], op.2)
225+
<[_; 3]>::try_from(op.1).map(|[array, index, value]| {
226+
Operation(Native(ContainsFromEntries), vec![array, index, value], op.2)
227+
})
230228
}
231-
Native(GtEqFromEntries) => {
232-
let [entry1, entry2] = op.1.try_into().unwrap(); // TODO: Error handling
229+
Native(GtEqFromEntries) => <[_; 2]>::try_from(op.1).map(|[entry1, entry2]| {
233230
Operation(Native(LtEqFromEntries), vec![entry2, entry1], op.2)
234-
}
235-
Native(GtFromEntries) => {
236-
let [entry1, entry2] = op.1.try_into().unwrap(); // TODO: Error handling
231+
}),
232+
Native(GtFromEntries) => <[_; 2]>::try_from(op.1).map(|[entry1, entry2]| {
237233
Operation(Native(LtFromEntries), vec![entry2, entry1], op.2)
238-
}
239-
Native(GtToNotEqual) => Operation(Native(LtToNotEqual), op.1, op.2),
240-
_ => op,
234+
}),
235+
Native(GtToNotEqual) => Ok(Operation(Native(LtToNotEqual), op.1, op.2)),
236+
_ => Ok(op),
241237
}
238+
.map_err(|_| {
239+
Error::op_invalid_args(format!("Invalid arg count in operation {:?}", op_type))
240+
})
242241
}
243242

244243
/// Fills in auxiliary data if necessary/possible.
@@ -494,7 +493,7 @@ impl MainPodBuilder {
494493
}
495494

496495
fn op(&mut self, public: bool, op: Operation) -> Result<Statement> {
497-
let op = Self::fill_in_aux(Self::lower_op(op))?;
496+
let op = Self::fill_in_aux(Self::lower_op(op)?)?;
498497
let st = self.op_statement(op.clone())?;
499498
self.insert(public, (st, op));
500499

0 commit comments

Comments
 (0)