|
@@ -4,22 +4,26 @@ use group::{Curve, Group, GroupEncoding};
|
|
|
|
|
|
|
|
mod mint2_contract;
|
|
mod mint2_contract;
|
|
|
mod vm;
|
|
mod vm;
|
|
|
-use mint2_contract::load_zkvm;
|
|
|
|
|
|
|
+use mint2_contract::{load_params, load_zkvm};
|
|
|
|
|
|
|
|
fn unpack<F: PrimeField>(value: F) -> Vec<Scalar> {
|
|
fn unpack<F: PrimeField>(value: F) -> Vec<Scalar> {
|
|
|
let mut bits = Vec::new();
|
|
let mut bits = Vec::new();
|
|
|
|
|
+ print!("Unpack: ");
|
|
|
for (i, bit) in value.to_le_bits().into_iter().cloned().enumerate() {
|
|
for (i, bit) in value.to_le_bits().into_iter().cloned().enumerate() {
|
|
|
match bit {
|
|
match bit {
|
|
|
true => bits.push(Scalar::one()),
|
|
true => bits.push(Scalar::one()),
|
|
|
false => bits.push(Scalar::zero()),
|
|
false => bits.push(Scalar::zero()),
|
|
|
}
|
|
}
|
|
|
|
|
+ print!("{}", if bit { 1 } else { 0 });
|
|
|
}
|
|
}
|
|
|
|
|
+ println!("");
|
|
|
bits
|
|
bits
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
fn do_vcr_test(value: &jubjub::Fr) {
|
|
fn do_vcr_test(value: &jubjub::Fr) {
|
|
|
let mut curbase = zcash_primitives::constants::VALUE_COMMITMENT_RANDOMNESS_GENERATOR;
|
|
let mut curbase = zcash_primitives::constants::VALUE_COMMITMENT_RANDOMNESS_GENERATOR;
|
|
|
- let mut result = curbase.clone();
|
|
|
|
|
|
|
+ let mut result = jubjub::SubgroupPoint::identity();
|
|
|
|
|
+ //let value = jubjub::Fr::from(7);
|
|
|
for (i, bit) in value.to_le_bits().into_iter().cloned().enumerate() {
|
|
for (i, bit) in value.to_le_bits().into_iter().cloned().enumerate() {
|
|
|
let thisbase = if bit {
|
|
let thisbase = if bit {
|
|
|
curbase.clone()
|
|
curbase.clone()
|
|
@@ -28,12 +32,14 @@ fn do_vcr_test(value: &jubjub::Fr) {
|
|
|
};
|
|
};
|
|
|
result += thisbase;
|
|
result += thisbase;
|
|
|
curbase = curbase.double();
|
|
curbase = curbase.double();
|
|
|
|
|
+ print!("{}", if bit { 1} else { 0 });
|
|
|
}
|
|
}
|
|
|
|
|
+ println!("");
|
|
|
let result = jubjub::ExtendedPoint::from(result).to_affine();
|
|
let result = jubjub::ExtendedPoint::from(result).to_affine();
|
|
|
println!("cvr1: {:?}", result);
|
|
println!("cvr1: {:?}", result);
|
|
|
let randomness_commit =
|
|
let randomness_commit =
|
|
|
zcash_primitives::constants::VALUE_COMMITMENT_RANDOMNESS_GENERATOR * value;
|
|
zcash_primitives::constants::VALUE_COMMITMENT_RANDOMNESS_GENERATOR * value;
|
|
|
- let randomness_commit = jubjub::ExtendedPoint::from(result).to_affine();
|
|
|
|
|
|
|
+ let randomness_commit = jubjub::ExtendedPoint::from(randomness_commit).to_affine();
|
|
|
println!("cvr2: {:?}", randomness_commit);
|
|
println!("cvr2: {:?}", randomness_commit);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -44,6 +50,7 @@ fn main() -> std::result::Result<(), vm::ZKVMError> {
|
|
|
|
|
|
|
|
let value = 110;
|
|
let value = 110;
|
|
|
let randomness_value: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
|
|
let randomness_value: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
|
|
|
|
|
+ //let randomness_value = jubjub::Fr::from(7);
|
|
|
let value_commit = (zcash_primitives::constants::VALUE_COMMITMENT_VALUE_GENERATOR
|
|
let value_commit = (zcash_primitives::constants::VALUE_COMMITMENT_VALUE_GENERATOR
|
|
|
* jubjub::Fr::from(value))
|
|
* jubjub::Fr::from(value))
|
|
|
+ (zcash_primitives::constants::VALUE_COMMITMENT_RANDOMNESS_GENERATOR * randomness_value);
|
|
+ (zcash_primitives::constants::VALUE_COMMITMENT_RANDOMNESS_GENERATOR * randomness_value);
|
|
@@ -59,13 +66,13 @@ fn main() -> std::result::Result<(), vm::ZKVMError> {
|
|
|
vm.setup();
|
|
vm.setup();
|
|
|
|
|
|
|
|
let mut params = vec![
|
|
let mut params = vec![
|
|
|
- (0, public_affine.get_u()),
|
|
|
|
|
- (1, public_affine.get_v()),
|
|
|
|
|
- //(2, randomness_value),
|
|
|
|
|
|
|
+ public_affine.get_u(),
|
|
|
|
|
+ public_affine.get_v(),
|
|
|
];
|
|
];
|
|
|
for x in unpack(randomness_value) {
|
|
for x in unpack(randomness_value) {
|
|
|
- params.push((params.len(), x));
|
|
|
|
|
|
|
+ params.push(x);
|
|
|
}
|
|
}
|
|
|
|
|
+ let params = load_params(params);
|
|
|
println!("Size of params: {}", params.len());
|
|
println!("Size of params: {}", params.len());
|
|
|
vm.initialize(¶ms)?;
|
|
vm.initialize(¶ms)?;
|
|
|
|
|
|