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
76
77
78
79
80
81
82
83
84
85
86
87
88
use std::path::PathBuf;
use anyhow::Result;
use storage_proofs_core::{
api_version::ApiVersion,
merkle::MerkleTreeTrait,
parameter_cache::{
parameter_cache_metadata_path, parameter_cache_params_path,
parameter_cache_verifying_key_path, CacheableParameters,
},
};
use storage_proofs_porep::stacked::{StackedCircuit, StackedCompound};
use crate::{
constants::DefaultPieceHasher,
parameters::public_params,
types::{PaddedBytesAmount, PoRepProofPartitions, SectorSize, UnpaddedBytesAmount},
};
#[derive(Clone, Copy, Debug)]
pub struct PoRepConfig {
pub sector_size: SectorSize,
pub partitions: PoRepProofPartitions,
pub porep_id: [u8; 32],
pub api_version: ApiVersion,
}
impl From<PoRepConfig> for PaddedBytesAmount {
fn from(x: PoRepConfig) -> Self {
let PoRepConfig { sector_size, .. } = x;
PaddedBytesAmount::from(sector_size)
}
}
impl From<PoRepConfig> for UnpaddedBytesAmount {
fn from(x: PoRepConfig) -> Self {
let PoRepConfig { sector_size, .. } = x;
PaddedBytesAmount::from(sector_size).into()
}
}
impl From<PoRepConfig> for PoRepProofPartitions {
fn from(x: PoRepConfig) -> Self {
let PoRepConfig { partitions, .. } = x;
partitions
}
}
impl From<PoRepConfig> for SectorSize {
fn from(cfg: PoRepConfig) -> Self {
let PoRepConfig { sector_size, .. } = cfg;
sector_size
}
}
impl PoRepConfig {
pub fn get_cache_identifier<Tree: 'static + MerkleTreeTrait>(&self) -> Result<String> {
let params = public_params::<Tree>(
self.sector_size.into(),
self.partitions.into(),
self.porep_id,
self.api_version,
)?;
Ok(
<StackedCompound<Tree, DefaultPieceHasher> as CacheableParameters<
StackedCircuit<'_, Tree, DefaultPieceHasher>,
_,
>>::cache_identifier(¶ms),
)
}
pub fn get_cache_metadata_path<Tree: 'static + MerkleTreeTrait>(&self) -> Result<PathBuf> {
let id = self.get_cache_identifier::<Tree>()?;
Ok(parameter_cache_metadata_path(&id))
}
pub fn get_cache_verifying_key_path<Tree: 'static + MerkleTreeTrait>(&self) -> Result<PathBuf> {
let id = self.get_cache_identifier::<Tree>()?;
Ok(parameter_cache_verifying_key_path(&id))
}
pub fn get_cache_params_path<Tree: 'static + MerkleTreeTrait>(&self) -> Result<PathBuf> {
let id = self.get_cache_identifier::<Tree>()?;
Ok(parameter_cache_params_path(&id))
}
}