mirror of https://github.com/zcash/halo2.git
Derive the full range of ValueCommitment values.
Co-authored-by: str4d <jack@electriccoin.co>
This commit is contained in:
parent
e72d74ccd6
commit
aa11eb1372
|
@ -11,7 +11,7 @@ use crate::{
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A unique nullifier for a note.
|
/// A unique nullifier for a note.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Nullifier(pub(crate) pallas::Base);
|
pub struct Nullifier(pub(crate) pallas::Base);
|
||||||
|
|
||||||
impl Nullifier {
|
impl Nullifier {
|
||||||
|
|
16
src/value.rs
16
src/value.rs
|
@ -221,12 +221,12 @@ impl ValueCommitment {
|
||||||
let hasher = pallas::Point::hash_to_curve("z.cash:Orchard-cv");
|
let hasher = pallas::Point::hash_to_curve("z.cash:Orchard-cv");
|
||||||
let V = hasher(b"v");
|
let V = hasher(b"v");
|
||||||
let R = hasher(b"r");
|
let R = hasher(b"r");
|
||||||
let value = i64::try_from(value.0).expect("value must be in valid range");
|
let abs_value = u64::try_from(value.0.abs()).expect("value must be in valid range");
|
||||||
|
|
||||||
let value = if value.is_negative() {
|
let value = if value.0.is_negative() {
|
||||||
-pallas::Scalar::from_u64((-value) as u64)
|
-pallas::Scalar::from_u64(abs_value)
|
||||||
} else {
|
} else {
|
||||||
pallas::Scalar::from_u64(value as u64)
|
pallas::Scalar::from_u64(abs_value)
|
||||||
};
|
};
|
||||||
|
|
||||||
ValueCommitment(V * value + R * rcv.0)
|
ValueCommitment(V * value + R * rcv.0)
|
||||||
|
@ -254,7 +254,7 @@ pub mod testing {
|
||||||
use pasta_curves::{arithmetic::FieldExt, pallas};
|
use pasta_curves::{arithmetic::FieldExt, pallas};
|
||||||
use proptest::prelude::*;
|
use proptest::prelude::*;
|
||||||
|
|
||||||
use super::{NoteValue, ValueCommitTrapdoor, ValueSum};
|
use super::{NoteValue, ValueCommitTrapdoor, ValueSum, VALUE_SUM_RANGE};
|
||||||
|
|
||||||
/// Maximum note value.
|
/// Maximum note value.
|
||||||
pub const MAX_NOTE_VALUE: u64 = u64::MAX - 1;
|
pub const MAX_NOTE_VALUE: u64 = u64::MAX - 1;
|
||||||
|
@ -271,7 +271,7 @@ pub mod testing {
|
||||||
|
|
||||||
prop_compose! {
|
prop_compose! {
|
||||||
/// Generate an arbitrary [`ValueSum`] in the range of valid Zcash values.
|
/// Generate an arbitrary [`ValueSum`] in the range of valid Zcash values.
|
||||||
pub fn arb_value_sum(bound: i64)(value in -bound..bound) -> ValueSum {
|
pub fn arb_value_sum()(value in VALUE_SUM_RANGE) -> ValueSum {
|
||||||
ValueSum(value as i128)
|
ValueSum(value as i128)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -317,12 +317,10 @@ mod tests {
|
||||||
};
|
};
|
||||||
use crate::primitives::redpallas;
|
use crate::primitives::redpallas;
|
||||||
|
|
||||||
const MAX_MONEY: i64 = 21_000_000 * 1_0000_0000;
|
|
||||||
|
|
||||||
proptest! {
|
proptest! {
|
||||||
#[test]
|
#[test]
|
||||||
fn bsk_consistent_with_bvk(
|
fn bsk_consistent_with_bvk(
|
||||||
values in prop::collection::vec((arb_value_sum(MAX_MONEY), arb_trapdoor()), 1..10),
|
values in prop::collection::vec((arb_value_sum(), arb_trapdoor()), 1..10),
|
||||||
) {
|
) {
|
||||||
let value_balance = values
|
let value_balance = values
|
||||||
.iter()
|
.iter()
|
||||||
|
|
Loading…
Reference in New Issue