Commit 657757de authored by 董子豪's avatar 董子豪

agg window post

parent b2628d86
...@@ -7,6 +7,7 @@ use crate::types::VanillaProofBytes; ...@@ -7,6 +7,7 @@ use crate::types::VanillaProofBytes;
use crate::{ use crate::{
ChallengeSeed, FallbackPoStSectorProof, MerkleTreeTrait, PoStType, PrivateReplicaInfo, ChallengeSeed, FallbackPoStSectorProof, MerkleTreeTrait, PoStType, PrivateReplicaInfo,
ProverId, PublicReplicaInfo, RegisteredPoStProof, SectorId, SnarkProof, AggregateSnarkProof, ProverId, PublicReplicaInfo, RegisteredPoStProof, SectorId, SnarkProof, AggregateSnarkProof,
RegisteredAggregationProof,
}; };
pub fn generate_winning_post_sector_challenge( pub fn generate_winning_post_sector_challenge(
...@@ -494,12 +495,18 @@ fn verify_window_post_inner<Tree: 'static + MerkleTreeTrait>( ...@@ -494,12 +495,18 @@ fn verify_window_post_inner<Tree: 'static + MerkleTreeTrait>(
Ok(valid_v1) Ok(valid_v1)
} }
pub fn aggregate_window_post_proofs( pub fn aggregate_window_post_proofs(
registered_aggregation: RegisteredAggregationProof, registered_aggregation: RegisteredAggregationProof,
randomnesses: &[ChallengeSeed], randomnesses: &[ChallengeSeed],
proofs: &[(RegisteredPoStProof, &[u8])], proofs: &[(RegisteredPoStProof, &[u8])],
total_sector_count: usize,
) -> Result<AggregateSnarkProof> { ) -> Result<AggregateSnarkProof> {
ensure!(!replicas.is_empty(), "no replicas supplied"); ensure!(
randomnesses.len() == proofs.len(),
"the lenth of randomness and proof is not match"
);
let registered_post_proof_type_v1 = proofs[0].0; let registered_post_proof_type_v1 = proofs[0].0;
ensure!( ensure!(
registered_post_proof_type_v1.typ() == PoStType::Window, registered_post_proof_type_v1.typ() == PoStType::Window,
...@@ -517,7 +524,7 @@ pub fn aggregate_window_post_proofs( ...@@ -517,7 +524,7 @@ pub fn aggregate_window_post_proofs(
registered_post_proof_type_v1, registered_post_proof_type_v1,
randomnesses, randomnesses,
proofs, proofs,
1, total_sector_count,
) )
} }
...@@ -525,17 +532,17 @@ fn aggregate_window_post_proofs_inner<Tree: 'static + MerkleTreeTrait>( ...@@ -525,17 +532,17 @@ fn aggregate_window_post_proofs_inner<Tree: 'static + MerkleTreeTrait>(
registered_proof_v1: RegisteredPoStProof, registered_proof_v1: RegisteredPoStProof,
randomnesses: &[ChallengeSeed], randomnesses: &[ChallengeSeed],
proofs: &[(RegisteredPoStProof, &[u8])], proofs: &[(RegisteredPoStProof, &[u8])],
partitons: usize, total_sector_count: usize,
) -> Result<AggregateSnarkProof> { ) -> Result<AggregateSnarkProof> {
let mut agg_proofs: Vec<Vec<u8>> = Vec::new(); let mut agg_proofs: Vec<Vec<u8>> = Vec::new();
for (registered_proof, proof) in proofs.iter() { for (registered_proof, proof) in proofs.into_iter() {
ensure!( ensure!(
registered_proof == &registered_proof_v1, registered_proof == &registered_proof_v1,
"can only generate the same kind of PoSt" "can only generate the same kind of PoSt"
); );
agg_proofs.push(proof); agg_proofs.push(proof.to_vec());
} }
ensure!(!agg_proofs.is_empty(), "missing proofs"); ensure!(!agg_proofs.is_empty(), "missing proofs");
...@@ -543,7 +550,7 @@ fn aggregate_window_post_proofs_inner<Tree: 'static + MerkleTreeTrait>( ...@@ -543,7 +550,7 @@ fn aggregate_window_post_proofs_inner<Tree: 'static + MerkleTreeTrait>(
&registered_proof_v1.as_v1_config(), &registered_proof_v1.as_v1_config(),
randomnesses, randomnesses,
agg_proofs.as_slice(), agg_proofs.as_slice(),
partitons, total_sector_count,
) )
} }
...@@ -556,12 +563,13 @@ pub fn verify_aggregate_window_post_proofs( ...@@ -556,12 +563,13 @@ pub fn verify_aggregate_window_post_proofs(
replicas: &[BTreeMap<SectorId, PublicReplicaInfo>], replicas: &[BTreeMap<SectorId, PublicReplicaInfo>],
) -> Result<bool> { ) -> Result<bool> {
ensure!(!replicas.is_empty(), "no replicas supplied"); ensure!(!replicas.is_empty(), "no replicas supplied");
ensure!(proofs.len() == 1, "only one version of PoSt supported"); ensure!(
randomnesses.len() == replicas.len(),
let registered_post_proof_type_v1 = proofs[0].0; "Randomnesses and Replica don't match"
);
ensure!( ensure!(
registered_post_proof_type_v1.major_version() == 1, registered_proof_v1.major_version() == 1,
"only V1 supported" "only V1 supported"
); );
...@@ -571,9 +579,9 @@ pub fn verify_aggregate_window_post_proofs( ...@@ -571,9 +579,9 @@ pub fn verify_aggregate_window_post_proofs(
); );
with_shape!( with_shape!(
u64::from(registered_post_proof_type_v1.sector_size()), u64::from(registered_proof_v1.sector_size()),
verify_aggregate_window_post_proofs_inner, verify_aggregate_window_post_proofs_inner,
registered_post_proof_type_v1, registered_proof_v1,
prover_id, prover_id,
aggregate_proof_bytes, aggregate_proof_bytes,
randomnesses, randomnesses,
...@@ -590,14 +598,9 @@ fn verify_aggregate_window_post_proofs_inner<Tree: 'static + MerkleTreeTrait>( ...@@ -590,14 +598,9 @@ fn verify_aggregate_window_post_proofs_inner<Tree: 'static + MerkleTreeTrait>(
) -> Result<bool> { ) -> Result<bool> {
let mut replica_infos_v1 = Vec::new(); let mut replica_infos_v1 = Vec::new();
ensure!(
randomnesses.len() == replicas.len(),
"Randomnesses and Replica don't match"
);
for replica in replicas.iter() { for replica in replicas.iter() {
let mut replica_info_v1 = BTreeMap::new(); let mut replica_info_v1 = BTreeMap::new();
for (id, info) in repica.iter(){ for (id, info) in replica.iter(){
let PublicReplicaInfo { let PublicReplicaInfo {
registered_proof, registered_proof,
comm_r, comm_r,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment