Skip to content

Commit 06101db

Browse files
feat(NRC): Compute rewardable nodes between two days (#1629)
1 parent 4e60538 commit 06101db

14 files changed

Lines changed: 492 additions & 183 deletions

File tree

Cargo.Bazel.lock

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"checksum": "804b6a3865666ec1f16e50dab94dc25a59d61839903c18fce16929eb8a2db21c",
2+
"checksum": "1cdfce59bbac59b9678f238a447e128345310b3864dbedc1c99f63c8de09e76c",
33
"crates": {
44
"actix-codec 0.5.2": {
55
"name": "actix-codec",
@@ -35780,6 +35780,10 @@
3578035780
"id": "ic-cdk-timers 0.11.0",
3578135781
"target": "ic_cdk_timers"
3578235782
},
35783+
{
35784+
"id": "ic-dummy-getrandom-for-wasm 0.1.0",
35785+
"target": "ic_dummy_getrandom_for_wasm"
35786+
},
3578335787
{
3578435788
"id": "ic-http-types 0.1.0",
3578535789
"target": "ic_http_types"
@@ -35865,6 +35869,10 @@
3586535869
},
3586635870
"deps_dev": {
3586735871
"common": [
35872+
{
35873+
"id": "prost 0.13.5",
35874+
"target": "prost"
35875+
},
3586835876
{
3586935877
"id": "tokio 1.46.1",
3587035878
"target": "tokio"
@@ -60132,6 +60140,7 @@
6013260140
"ic-cdk-timers 0.11.0",
6013360141
"ic-config 0.9.0",
6013460142
"ic-crypto-utils-threshold-sig-der 0.9.0",
60143+
"ic-dummy-getrandom-for-wasm 0.1.0",
6013560144
"ic-http-endpoints-metrics 0.9.0",
6013660145
"ic-http-types 0.1.0",
6013760146
"ic-icrc1-test-utils 0.9.0",

Cargo.lock

Lines changed: 24 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ ic-canisters = { path = "rs/ic-canisters" }
103103
ic-http-types = { git = "https://github.com/dfinity/ic.git", rev = "2f87fe95207dc6371a2f2dc273362ba03b41e0e9" }
104104
ic-config = { git = "https://github.com/dfinity/ic.git", rev = "2f87fe95207dc6371a2f2dc273362ba03b41e0e9" }
105105
ic-crypto-utils-threshold-sig-der = { git = "https://github.com/dfinity/ic.git", rev = "2f87fe95207dc6371a2f2dc273362ba03b41e0e9" }
106+
ic-dummy-getrandom-for-wasm = { git = "https://github.com/dfinity/ic.git", rev = "2f87fe95207dc6371a2f2dc273362ba03b41e0e9" }
106107
ic-http-endpoints-metrics = { git = "https://github.com/dfinity/ic.git", rev = "2f87fe95207dc6371a2f2dc273362ba03b41e0e9" }
107108
ic-interfaces-registry = { git = "https://github.com/dfinity/ic.git", rev = "2f87fe95207dc6371a2f2dc273362ba03b41e0e9" }
108109
ic-management-backend = { path = "rs/ic-management-backend" }

rs/dre-canisters/node-provider-rewards/canister/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ MACRO_DEPENDENCIES = [
1717
DEV_DEPENDENCIES = [
1818
# Keep sorted.
1919
"@crate_index_dre//:tokio",
20+
"@crate_index_dre//:prost",
2021
]
2122

2223
ALIASES = {}

rs/dre-canisters/node-provider-rewards/canister/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ ic-registry-keys = { workspace = true }
2525
futures = { workspace = true }
2626
indexmap = { workspace = true }
2727
ic-base-types = { workspace = true }
28+
ic-dummy-getrandom-for-wasm = { workspace = true }
2829
ic-management-canister-types-private = { workspace = true }
2930
ic-metrics-encoder = { workspace = true }
3031
ic-nervous-system-canisters = { workspace = true }
@@ -43,3 +44,4 @@ serde_cbor = "0.11.2"
4344

4445
[dev-dependencies]
4546
tokio = { workspace = true }
47+
prost = "0.13.5"

rs/dre-canisters/node-provider-rewards/canister/src/lib.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -210,17 +210,14 @@ fn http_request(request: HttpRequest) -> HttpResponse {
210210

211211
fn rewards_calculator(reward_period: RewardPeriodArgs) -> Result<RewardsCalculator, String> {
212212
let reward_period = RewardPeriod::new(reward_period.start_ts, reward_period.end_ts).map_err(|err| err.to_string())?;
213-
let start_ts = reward_period.from.unix_ts_at_day_start();
214-
let end_ts = reward_period.to.unix_ts_at_day_end();
215-
216213
let metrics_manager = METRICS_MANAGER.with(|m| m.clone());
217214
let registry_store = REGISTRY_STORE.with(|m| m.clone());
218215

219216
let rewards_table = registry_store.get_rewards_table();
220-
let daily_metrics_by_subnet = metrics_manager.daily_metrics_by_subnet(start_ts, end_ts);
217+
let daily_metrics_by_subnet = metrics_manager.daily_metrics_by_subnet(reward_period.from, reward_period.to);
221218

222219
let rewardable_nodes_per_provider = registry_store
223-
.get_rewardable_nodes_per_provider(start_ts, end_ts)
220+
.get_rewardable_nodes_per_provider(reward_period.from, reward_period.to)
224221
.map_err(|err| err.to_string())?;
225222

226223
let rewards_calculator = RewardsCalculatorBuilder {

rs/dre-canisters/node-provider-rewards/canister/src/metrics.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use ic_cdk::api::call::CallResult;
77
use ic_management_canister_types_private::{NodeMetricsHistoryArgs, NodeMetricsHistoryResponse};
88
use ic_stable_structures::StableBTreeMap;
99
use itertools::Itertools;
10+
use rewards_calculation::rewards_calculator_results::DayUTC;
1011
use rewards_calculation::types::{DayEnd, NodeMetricsDailyRaw, SubnetMetricsDailyKey, UnixTsNanos};
1112
use std::cell::RefCell;
1213
use std::collections::{BTreeMap, HashMap};
@@ -143,15 +144,16 @@ where
143144
}
144145
}
145146
}
146-
pub fn daily_metrics_by_subnet(&self, start_ts: UnixTsNanos, end_ts: UnixTsNanos) -> BTreeMap<SubnetMetricsDailyKey, Vec<NodeMetricsDailyRaw>> {
147+
pub fn daily_metrics_by_subnet(&self, from: DayUTC, to: DayUTC) -> BTreeMap<SubnetMetricsDailyKey, Vec<NodeMetricsDailyRaw>> {
147148
let mut daily_metrics_by_subnet = BTreeMap::new();
149+
let start_ts = from.unix_ts_at_day_start();
148150
let one_day_before_start = start_ts.checked_sub(DAY_IN_SECONDS * 1_000_000_000).unwrap_or_default();
149151
let first_key = SubnetMetricsKeyStored {
150152
ts: one_day_before_start,
151153
..SubnetMetricsKeyStored::min_key()
152154
};
153155
let last_key = SubnetMetricsKeyStored {
154-
ts: end_ts,
156+
ts: to.unix_ts_at_day_end(),
155157
..SubnetMetricsKeyStored::max_key()
156158
};
157159

rs/dre-canisters/node-provider-rewards/canister/src/metrics/tests.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ async fn _daily_metrics_correct_different_update_size(size: usize) {
272272
for _ in 0..MAX_TIMES {
273273
mm.update_subnets_metrics(vec![subnet_id(1)]).await;
274274
}
275-
let daily_metrics: Vec<Vec<NodeMetricsDailyRaw>> = mm.daily_metrics_by_subnet(0, 4 * ONE_DAY_NANOS).into_values().collect();
275+
let daily_metrics: Vec<Vec<NodeMetricsDailyRaw>> = mm.daily_metrics_by_subnet(0.into(), (4 * ONE_DAY_NANOS).into()).into_values().collect();
276276

277277
// (7, 5)
278278
assert_eq!(daily_metrics[0][0].num_blocks_proposed, 7);
@@ -332,7 +332,7 @@ async fn daily_metrics_correct_2_subs() {
332332
}
333333

334334
let node_1_daily_metrics = mm
335-
.daily_metrics_by_subnet(0, 8 * ONE_DAY_NANOS)
335+
.daily_metrics_by_subnet(0.into(), (8 * ONE_DAY_NANOS).into())
336336
.into_iter()
337337
.collect::<BTreeMap<_, _>>()
338338
.into_iter()
@@ -400,7 +400,7 @@ async fn daily_metrics_correct_overlapping_days() {
400400
}
401401

402402
let daily_metrics = mm
403-
.daily_metrics_by_subnet(0, 4 * ONE_DAY_NANOS)
403+
.daily_metrics_by_subnet(0.into(), (4 * ONE_DAY_NANOS).into())
404404
.into_iter()
405405
.collect::<BTreeMap<_, _>>()
406406
.into_iter()

0 commit comments

Comments
 (0)