mina_tree/proofs/numbers/
common.rs1use crate::{
2 proofs::{
3 field::{field, Boolean, FieldWitness},
4 witness::Witness,
5 },
6 scan_state::currency::Magnitude,
7};
8
9pub trait ForZkappCheck<F: FieldWitness>: Magnitude {
11 type CheckedType;
12
13 fn to_checked(&self) -> Self::CheckedType {
14 Self::checked_from_field(self.to_field::<F>())
15 }
16 fn checked_from_field(field: F) -> Self::CheckedType;
17 fn lte(this: &Self::CheckedType, other: &Self::CheckedType, w: &mut Witness<F>) -> Boolean;
18}
19
20fn range_check_impl<F: FieldWitness, const NBITS: usize>(number: F, w: &mut Witness<F>) -> F {
21 use crate::proofs::transaction::scalar_challenge::to_field_checked_prime;
22
23 let (_, _, actual_packed) = to_field_checked_prime::<F, NBITS>(number, w);
24 actual_packed
25}
26
27pub fn range_check_flag<F: FieldWitness, const NBITS: usize>(
28 number: F,
29 w: &mut Witness<F>,
30) -> Boolean {
31 let actual = range_check_impl::<F, NBITS>(number, w);
32 field::equal(actual, number, w)
33}
34
35pub fn range_check<F: FieldWitness, const NBITS: usize>(number: F, w: &mut Witness<F>) {
36 range_check_impl::<F, NBITS>(number, w);
37}