Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MPoW] Fix updating stake limit on reporting works #140

Merged
merged 7 commits into from
May 22, 2020
37 changes: 31 additions & 6 deletions cstrml/tee/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -370,13 +370,38 @@ impl<T: Trait> Module<T> {

Used::put(total_used);
Reserved::put(total_reserved);
let total_workload = total_used + total_reserved;

// 5. Call `on_report_works` handler
T::Works::report_works(
&who,
used + reserved,
total_used + total_reserved,
);
// 5. Work report for every identity
LowEntropyBody marked this conversation as resolved.
Show resolved Hide resolved
let workload_map: Vec<(T::AccountId, u128)> = <TeeIdentities<T>>::iter().map(|(controller, _)| {
gougougogol marked this conversation as resolved.
Show resolved Hide resolved
// a. calculate this controller's order file map
let mut order_files: Vec<(MerkleRoot, T::Hash)> = vec![];
if let Some(provision) = T::MarketInterface::providers(&controller) {
order_files = provision.file_map.values()
.filter_map(|order_id| {
// Get order status(should exist) and (maybe) change the status
let sorder =
T::MarketInterface::maybe_get_sorder(order_id).unwrap_or_default();
if sorder.order_status == OrderStatus::Success {
Some((sorder.file_identifier, order_id.clone()))
} else {
None
}
})
.collect();
}
gougougogol marked this conversation as resolved.
Show resolved Hide resolved
// b. calculate controller's own reserved and used space
let (reserved, used) = Self::update_and_get_workload(&controller, &order_files, rs);
badkk marked this conversation as resolved.
Show resolved Hide resolved
// c. return my own to construct workload map
(controller.clone(), used + reserved)
}).collect();

for (controller, own_workload) in workload_map {
T::Works::report_works(&controller, own_workload, total_workload);
}

// 6. Work report for upserted one
T::Works::report_works(&who, used + reserved, total_workload);
true
}

Expand Down