1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
use snarkos_consensus::MerkleTreeLedger;
use snarkos_dpc::base_dpc::{instantiated::*, parameters::PublicParameters};
use snarkos_models::{
algorithms::{MerkleParameters, CRH},
dpc::DPCScheme,
objects::AccountScheme,
parameters::Parameters,
};
use snarkos_objects::Account;
use snarkos_parameters::LedgerMerkleTreeParameters;
use snarkos_utilities::bytes::FromBytes;
use rand::Rng;
pub fn setup_or_load_parameters<R: Rng>(
verify_only: bool,
rng: &mut R,
) -> (
CommitmentMerkleParameters,
<InstantiatedDPC as DPCScheme<MerkleTreeLedger>>::Parameters,
) {
let crh_parameters =
<MerkleTreeCRH as CRH>::Parameters::read(&LedgerMerkleTreeParameters::load_bytes().unwrap()[..])
.expect("read bytes as hash for MerkleParameters in ledger");
let merkle_tree_hash_parameters = <CommitmentMerkleParameters as MerkleParameters>::H::from(crh_parameters);
let ledger_merkle_tree_parameters = From::from(merkle_tree_hash_parameters);
let parameters = match <InstantiatedDPC as DPCScheme<MerkleTreeLedger>>::Parameters::load(verify_only) {
Ok(parameters) => parameters,
Err(err) => {
println!("error - {}, re-running parameter Setup", err);
<InstantiatedDPC as DPCScheme<MerkleTreeLedger>>::setup(&ledger_merkle_tree_parameters, rng)
.expect("DPC setup failed")
}
};
(ledger_merkle_tree_parameters, parameters)
}
pub fn load_verifying_parameters() -> PublicParameters<Components> {
PublicParameters::<Components>::load_vk_direct().unwrap()
}
pub fn generate_test_accounts<R: Rng>(
parameters: &<InstantiatedDPC as DPCScheme<MerkleTreeLedger>>::Parameters,
rng: &mut R,
) -> [Account<Components>; 3] {
let signature_parameters = ¶meters.system_parameters.account_signature;
let commitment_parameters = ¶meters.system_parameters.account_commitment;
let encryption_parameters = ¶meters.system_parameters.account_encryption;
let genesis_account =
Account::new(signature_parameters, commitment_parameters, encryption_parameters, rng).unwrap();
let account_1 = Account::new(signature_parameters, commitment_parameters, encryption_parameters, rng).unwrap();
let account_2 = Account::new(signature_parameters, commitment_parameters, encryption_parameters, rng).unwrap();
[genesis_account, account_1, account_2]
}