-
Notifications
You must be signed in to change notification settings - Fork 102
/
Copy pathaggregate_test.rs
94 lines (83 loc) · 3.1 KB
/
aggregate_test.rs
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
89
90
91
92
93
94
use crate::common::{
complete_aggregate_proof_request, complete_proof_request, make_aggregate_proof_request,
make_proof_request, randomly_select_blocks, setup, v2_assert_report,
};
use raiko_host::server::api;
use raiko_lib::consts::Network;
use raiko_lib::proof_type::ProofType;
use raiko_tasks::TaskStatus;
use test_log::test;
#[test(tokio::test)]
async fn test_v2_mainnet_aggregate_native() {
test_v2_mainnet_aggregate(Network::TaikoMainnet, ProofType::Native).await;
}
// NOTE: Locally zkVM proof aggregation is not supported yet, we are not able to test it locally.
#[ignore]
#[cfg(all(feature = "risc0", feature = "test-mock-guest"))]
#[test(tokio::test)]
async fn test_v2_mainnet_aggregate_risc0() {
test_v2_mainnet_aggregate(Network::TaikoMainnet, ProofType::Risc0).await;
}
async fn test_v2_mainnet_aggregate(network: Network, proof_type: ProofType) {
let api_version = "v2";
let aggregate_block_count = 2;
let block_numbers = randomly_select_blocks(network, aggregate_block_count)
.await
.expect("randomly select blocks failed");
println!(
"[test_aggregate_v2_mainnet] network: {network}, proof_type: {proof_type}, block_numbers: {block_numbers:?}"
);
let (_server, client) = setup().await;
let requests: Vec<_> = block_numbers
.iter()
.map(|block_number| make_proof_request(&network, &proof_type, *block_number))
.collect();
let mut proofs = Vec::with_capacity(block_numbers.len());
for request in requests {
let status: api::v2::Status = client
.post("/v2/proof", &request)
.await
.expect("failed to send request");
assert!(
matches!(
status,
api::v2::Status::Ok {
data: api::v2::ProofResponse::Status {
status: TaskStatus::Registered
| TaskStatus::WorkInProgress
| TaskStatus::Success,
..
}
}
),
"status: {status:?}"
);
let proof = complete_proof_request(api_version, &client, &request).await;
proofs.push(proof);
}
let aggregate_request =
make_aggregate_proof_request(&network, &proof_type, block_numbers, proofs).await;
// NOTE: Only v3 supports aggregate proof
let status: api::v3::Status = client
.post("/v3/proof/aggregate", &aggregate_request)
.await
.expect("failed to send aggregate proof request");
assert!(
matches!(
status,
api::v3::Status::Ok {
data: api::v3::ProofResponse::Status {
status: TaskStatus::Registered
| TaskStatus::WorkInProgress
| TaskStatus::Success,
..
}
}
),
"status: {status:?}"
);
// NOTE: Only v3 supports aggregate proof
complete_aggregate_proof_request("v3", &client, &aggregate_request).await;
// santy check for report format
v2_assert_report(&client).await;
}