Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
interface-test
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董子豪
interface-test
Commits
7138842d
Commit
7138842d
authored
Aug 12, 2021
by
董子豪
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
aggregate-window-post-api
parent
ac52ba04
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
133 additions
and
1 deletion
+133
-1
post.rs
extern/rust-filecoin-proofs-api/src/post.rs
+133
-1
No files found.
extern/rust-filecoin-proofs-api/src/post.rs
View file @
7138842d
...
@@ -6,7 +6,7 @@ use filecoin_proofs_v1::with_shape;
...
@@ -6,7 +6,7 @@ use filecoin_proofs_v1::with_shape;
use
crate
::
types
::
VanillaProofBytes
;
use
crate
::
types
::
VanillaProofBytes
;
use
crate
::{
use
crate
::{
ChallengeSeed
,
FallbackPoStSectorProof
,
MerkleTreeTrait
,
PoStType
,
PrivateReplicaInfo
,
ChallengeSeed
,
FallbackPoStSectorProof
,
MerkleTreeTrait
,
PoStType
,
PrivateReplicaInfo
,
ProverId
,
PublicReplicaInfo
,
RegisteredPoStProof
,
SectorId
,
SnarkProof
,
ProverId
,
PublicReplicaInfo
,
RegisteredPoStProof
,
SectorId
,
SnarkProof
,
AggregateSnarkProof
,
};
};
pub
fn
generate_winning_post_sector_challenge
(
pub
fn
generate_winning_post_sector_challenge
(
...
@@ -494,3 +494,135 @@ fn verify_window_post_inner<Tree: 'static + MerkleTreeTrait>(
...
@@ -494,3 +494,135 @@ fn verify_window_post_inner<Tree: 'static + MerkleTreeTrait>(
Ok
(
valid_v1
)
Ok
(
valid_v1
)
}
}
pub
fn
aggregate_window_post_proofs
(
registered_aggregation
:
RegisteredAggregationProof
,
randomnesses
:
&
[
ChallengeSeed
],
proofs
:
&
[(
RegisteredPoStProof
,
&
[
u8
])],
)
->
Result
<
AggregateSnarkProof
>
{
ensure!
(
!
replicas
.is_empty
(),
"no replicas supplied"
);
let
registered_post_proof_type_v1
=
proofs
[
0
]
.
0
;
ensure!
(
registered_post_proof_type_v1
.typ
()
==
PoStType
::
Window
,
"invalid post type provided"
);
ensure!
(
registered_aggregation
==
RegisteredAggregationProof
::
SnarkPackV1
,
"unusupported aggregation version"
);
with_shape!
(
u64
::
from
(
registered_post_proof_type_v1
.sector_size
()),
aggregate_window_post_proofs_inner
,
registered_post_proof_type_v1
,
randomnesses
,
proofs
,
1
,
)
}
fn
aggregate_window_post_proofs_inner
<
Tree
:
'static
+
MerkleTreeTrait
>
(
registered_proof_v1
:
RegisteredPoStProof
,
randomnesses
:
&
[
ChallengeSeed
],
proofs
:
&
[(
RegisteredPoStProof
,
&
[
u8
])],
partitons
:
usize
,
)
->
Result
<
AggregateSnarkProof
>
{
let
mut
agg_proofs
:
Vec
<
Vec
<
u8
>>
=
Vec
::
new
();
for
(
registered_proof
,
proof
)
in
proofs
.iter
()
{
ensure!
(
registered_proof
==
&
registered_proof_v1
,
"can only generate the same kind of PoSt"
);
agg_proofs
.push
(
proof
);
}
ensure!
(
!
agg_proofs
.is_empty
(),
"missing proofs"
);
filecoin_proofs_v1
::
aggregate_window_post_proofs
::
<
Tree
>
(
&
registered_proof_v1
.as_v1_config
(),
randomnesses
,
agg_proofs
.as_slice
(),
partitons
,
)
}
pub
fn
verify_aggregate_window_post_proofs
(
registered_proof_v1
:
RegisteredPoStProof
,
registered_aggregation
:
RegisteredAggregationProof
,
prover_id
:
ProverId
,
aggregate_proof_bytes
:
AggregateSnarkProof
,
randomnesses
:
&
[
ChallengeSeed
],
replicas
:
&
[
BTreeMap
<
SectorId
,
PublicReplicaInfo
>
],
)
->
Result
<
bool
>
{
ensure!
(
!
replicas
.is_empty
(),
"no replicas supplied"
);
ensure!
(
proofs
.len
()
==
1
,
"only one version of PoSt supported"
);
let
registered_post_proof_type_v1
=
proofs
[
0
]
.
0
;
ensure!
(
registered_post_proof_type_v1
.major_version
()
==
1
,
"only V1 supported"
);
ensure!
(
registered_aggregation
==
RegisteredAggregationProof
::
SnarkPackV1
,
"unusupported aggregation version"
);
with_shape!
(
u64
::
from
(
registered_post_proof_type_v1
.sector_size
()),
verify_aggregate_window_post_proofs_inner
,
registered_post_proof_type_v1
,
prover_id
,
aggregate_proof_bytes
,
randomnesses
,
replicas
,
)
}
fn
verify_aggregate_window_post_proofs_inner
<
Tree
:
'static
+
MerkleTreeTrait
>
(
registered_proof_v1
:
RegisteredPoStProof
,
prover_id
:
ProverId
,
aggregate_proof_bytes
:
AggregateSnarkProof
,
randomnesses
:
&
[
ChallengeSeed
],
replicas
:
&
[
BTreeMap
<
SectorId
,
PublicReplicaInfo
>
],
)
->
Result
<
bool
>
{
let
mut
replica_infos_v1
=
Vec
::
new
();
ensure!
(
randomnesses
.len
()
==
replicas
.len
(),
"Randomnesses and Replica don't match"
);
for
replica
in
replicas
.iter
()
{
let
mut
replica_info_v1
=
BTreeMap
::
new
();
for
(
id
,
info
)
in
repica
.iter
(){
let
PublicReplicaInfo
{
registered_proof
,
comm_r
,
}
=
info
;
ensure!
(
registered_proof
==
&
registered_proof_v1
,
"can only aggregate the same kind of PoSt"
);
let
info_v1
=
filecoin_proofs_v1
::
PublicReplicaInfo
::
new
(
*
comm_r
)
?
;
replica_info_v1
.insert
(
*
id
,
info_v1
);
}
replica_infos_v1
.push
(
replica_info_v1
);
}
let
valid_v1
=
filecoin_proofs_v1
::
verify_aggregate_window_post_proofs
::
<
Tree
>
(
&
registered_proof_v1
.as_v1_config
(),
prover_id
,
aggregate_proof_bytes
,
randomnesses
,
replica_infos_v1
.as_slice
(),
)
?
;
// once there are multiple versions, merge them before returning
Ok
(
valid_v1
)
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment