Skip to content

Commit cf2afe9

Browse files
committed
Add aggregate proof integration test
1 parent 92f7c27 commit cf2afe9

File tree

2 files changed

+106
-2
lines changed

2 files changed

+106
-2
lines changed

integration_tests/src/tests/prove_commit_niporep_test.rs

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use fvm_ipld_encoding::ipld_block::IpldBlock;
33
use fvm_ipld_encoding::RawBytes;
44
use fvm_shared::bigint::BigInt;
55
use fvm_shared::econ::TokenAmount;
6-
use fvm_shared::sector::{RegisteredSealProof, SectorNumber};
6+
use fvm_shared::sector::{RegisteredAggregateProof, RegisteredSealProof, SectorNumber};
77
use log::info;
88
use num_traits::Zero;
99

@@ -113,3 +113,98 @@ pub fn prove_commit_sectors_niporep_test(v: &dyn VM) {
113113
assert!(on_chain_sector.flags.contains(SectorOnChainInfoFlags::SIMPLE_QA_POWER));
114114
}
115115
}
116+
117+
#[vm_test]
118+
pub fn prove_commit_sectors_aggregate_niporep_test(v: &dyn VM) {
119+
// Expectations depend on the correct unsealed CID for empty sector.
120+
override_compute_unsealed_sector_cid(v);
121+
let addrs = create_accounts(v, 3, &TokenAmount::from_whole(10_000));
122+
let seal_proof = RegisteredSealProof::StackedDRG32GiBV1P1_Feat_NiPoRep;
123+
let (owner, worker, _, _) = (addrs[0], addrs[0], addrs[1], addrs[2]);
124+
let worker_id = worker.id().unwrap();
125+
let (maddr, _) = create_miner(
126+
v,
127+
&owner,
128+
&worker,
129+
seal_proof.registered_window_post_proof().unwrap(),
130+
&TokenAmount::from_whole(8_000),
131+
);
132+
let miner_id = maddr.id().unwrap();
133+
134+
// Onboard a batch of sectors
135+
let expiration = v.epoch() + 2 * EPOCHS_IN_YEAR;
136+
let seal_rand_epoch = v.epoch() - 1;
137+
let first_sector_number: SectorNumber = 100;
138+
let manifests = vec![
139+
first_sector_number,
140+
first_sector_number + 1,
141+
first_sector_number + 2,
142+
first_sector_number + 3,
143+
first_sector_number + 4,
144+
];
145+
146+
let sectors_info: Vec<SectorNIActivationInfo> = manifests
147+
.iter()
148+
.map(|sector_number| SectorNIActivationInfo {
149+
sealing_number: *sector_number,
150+
sealer_id: miner_id,
151+
sector_number: *sector_number,
152+
sealed_cid: make_sealed_cid(format!("sn: {}", sector_number).as_bytes()),
153+
seal_rand_epoch,
154+
expiration,
155+
})
156+
.collect();
157+
158+
// Prove-commit NI-PoRep
159+
let aggregate_proof = RawBytes::new(vec![1, 2, 3, 4]);
160+
let params = ProveCommitSectorsNIParams {
161+
sectors: sectors_info.clone(),
162+
seal_proof_type: RegisteredSealProof::StackedDRG32GiBV1P1_Feat_NiPoRep,
163+
sector_proofs: Vec::new(),
164+
aggregate_proof,
165+
aggregate_proof_type: Some(RegisteredAggregateProof::SnarkPackV2),
166+
require_activation_success: true,
167+
};
168+
169+
let activation_epoch = v.epoch() + EPOCHS_IN_YEAR / 2;
170+
v.set_epoch(activation_epoch);
171+
172+
apply_ok(
173+
v,
174+
&worker,
175+
&maddr,
176+
&TokenAmount::zero(),
177+
MinerMethod::ProveCommitSectorsNI as u64,
178+
Some(params.clone()),
179+
);
180+
181+
ExpectInvocation {
182+
from: worker_id,
183+
to: maddr,
184+
method: MinerMethod::ProveCommitSectorsNI as u64,
185+
params: Some(IpldBlock::serialize_cbor(&params).unwrap()),
186+
subinvocs: None,
187+
events: Vec::new(),
188+
..Default::default()
189+
}
190+
.matches(v.take_invocations().last().unwrap());
191+
192+
// Checks on sector state.
193+
let sectors = manifests
194+
.iter()
195+
.map(|sector_number| sector_info(v, &maddr, *sector_number))
196+
.collect::<Vec<_>>();
197+
info!("sectors: {:#?}", sectors);
198+
for (on_chain_sector, input_sector) in sectors.iter().zip(sectors_info) {
199+
assert_eq!(input_sector.sector_number, on_chain_sector.sector_number);
200+
assert_eq!(params.seal_proof_type, on_chain_sector.seal_proof);
201+
assert_eq!(input_sector.sealed_cid, on_chain_sector.sealed_cid);
202+
assert!(on_chain_sector.deprecated_deal_ids.is_empty());
203+
assert_eq!(activation_epoch, on_chain_sector.activation);
204+
assert_eq!(input_sector.expiration, on_chain_sector.expiration);
205+
assert_eq!(BigInt::zero(), on_chain_sector.deal_weight);
206+
assert_eq!(BigInt::zero(), on_chain_sector.verified_deal_weight);
207+
assert_eq!(activation_epoch, on_chain_sector.power_base_epoch);
208+
assert!(on_chain_sector.flags.contains(SectorOnChainInfoFlags::SIMPLE_QA_POWER));
209+
}
210+
}

test_vm/tests/suite/prove_commit_niporep_test.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use fil_actors_integration_tests::tests::prove_commit_sectors_niporep_test;
1+
use fil_actors_integration_tests::tests::{
2+
prove_commit_sectors_aggregate_niporep_test, prove_commit_sectors_niporep_test,
3+
};
24
use fil_actors_runtime::test_blockstores::MemoryBlockstore;
35
use test_vm::TestVM;
46

@@ -8,3 +10,10 @@ fn prove_commit_sectors_niporep() {
810
let v = TestVM::new_with_singletons(store);
911
prove_commit_sectors_niporep_test(&v);
1012
}
13+
14+
#[test_log::test]
15+
fn prove_commit_sectors_aggregate_niporep() {
16+
let store = MemoryBlockstore::new();
17+
let v = TestVM::new_with_singletons(store);
18+
prove_commit_sectors_aggregate_niporep_test(&v);
19+
}

0 commit comments

Comments
 (0)