use anyhow::anyhow;
pub use bitfield_queue::*;
pub use deadline_assignment::*;
pub use deadline_info::*;
pub use deadline_state::*;
pub use deadlines::*;
pub use expiration_queue::*;
use fvm_ipld_bitfield::{UnvalidatedBitField, Validate};
use fvm_shared::bigint::BigInt;
use fvm_shared::error::*;
use fvm_shared::sector::*;
use fvm_shared::METHOD_CONSTRUCTOR;
pub use monies::*;
use num_derive::FromPrimitive;
pub use partition_state::*;
pub use policy::*;
pub use sector_map::*;
pub use sectors::*;
pub use state::*;
pub use termination::*;
pub use types::*;
pub use vesting_state::*;
mod bitfield_queue;
mod deadline_assignment;
mod deadline_info;
mod deadline_state;
mod deadlines;
mod expiration_queue;
mod monies;
mod partition_state;
mod policy;
mod sector_map;
mod sectors;
mod state;
mod termination;
mod types;
mod vesting_state;
#[derive(FromPrimitive)]
#[repr(u64)]
pub enum Method {
Constructor = METHOD_CONSTRUCTOR,
ControlAddresses = 2,
ChangeWorkerAddress = 3,
ChangePeerID = 4,
SubmitWindowedPoSt = 5,
PreCommitSector = 6,
ProveCommitSector = 7,
ExtendSectorExpiration = 8,
TerminateSectors = 9,
DeclareFaults = 10,
DeclareFaultsRecovered = 11,
OnDeferredCronEvent = 12,
CheckSectorProven = 13,
ApplyRewards = 14,
ReportConsensusFault = 15,
WithdrawBalance = 16,
ConfirmSectorProofsValid = 17,
ChangeMultiaddrs = 18,
CompactPartitions = 19,
CompactSectorNumbers = 20,
ConfirmUpdateWorkerKey = 21,
RepayDebt = 22,
ChangeOwnerAddress = 23,
DisputeWindowedPoSt = 24,
PreCommitSectorBatch = 25,
ProveCommitAggregate = 26,
ProveReplicaUpdates = 27,
}
pub const ERR_BALANCE_INVARIANTS_BROKEN: ExitCode = ExitCode::new(1000);
fn validate_partition_contains_sectors(
partition: &Partition,
sectors: &mut UnvalidatedBitField,
) -> anyhow::Result<()> {
let sectors = sectors
.validate()
.map_err(|e| anyhow!("failed to check sectors: {}", e))?;
if partition.sectors.contains_all(sectors) {
Ok(())
} else {
Err(anyhow!("not all sectors are assigned to the partition"))
}
}
pub fn power_for_sector(sector_size: SectorSize, sector: &SectorOnChainInfo) -> PowerPair {
PowerPair {
raw: BigInt::from(sector_size as u64),
qa: qa_power_for_sector(sector_size, sector),
}
}
pub fn power_for_sectors(sector_size: SectorSize, sectors: &[SectorOnChainInfo]) -> PowerPair {
let qa = sectors
.iter()
.map(|s| qa_power_for_sector(sector_size, s))
.sum();
PowerPair {
raw: BigInt::from(sector_size as u64) * BigInt::from(sectors.len()),
qa,
}
}