Skip to content

Commit 1775dc5

Browse files
committed
feat: add last_refreshed timestamp to leaderboard response
1 parent 3804c00 commit 1775dc5

5 files changed

Lines changed: 34 additions & 3 deletions

File tree

bounty_challenge.wasm

1.35 KB
Binary file not shown.

src/api/handlers.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,13 @@ fn get_param<'a>(request: &'a WasmRouteRequest, name: &str) -> Option<&'a str> {
7878
}
7979

8080
pub fn handle_leaderboard(_request: &WasmRouteRequest) -> WasmRouteResponse {
81-
// Rebuild leaderboard dynamically and use the returned entries directly
82-
// (P2P storage write may not have landed yet).
8381
let entries = scoring::rebuild_leaderboard();
84-
json_response(&entries)
82+
let last_refreshed = crate::storage::get_last_refreshed();
83+
let response = crate::types::LeaderboardResponse {
84+
last_refreshed,
85+
entries,
86+
};
87+
json_response(&response)
8588
}
8689

8790
pub fn handle_stats(_request: &WasmRouteRequest) -> WasmRouteResponse {

src/scoring.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ pub fn background_tick() {
217217

218218
storage::recount_all_balances();
219219
rebuild_leaderboard();
220+
221+
let now = platform_challenge_sdk_wasm::host_functions::host_get_timestamp();
222+
storage::store_last_refreshed(now);
220223
}
221224

222225
/// Perform a full sync: rebuild leaderboard and return sync result for consensus

src/storage/bounty_storage.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,25 @@ pub fn get_validator_count() -> u64 {
719719
.unwrap_or(0)
720720
}
721721

722+
pub fn store_last_refreshed(ts: i64) {
723+
let _ = host_storage_set(b"last_refreshed", &ts.to_le_bytes());
724+
}
725+
726+
pub fn get_last_refreshed() -> i64 {
727+
host_storage_get(b"last_refreshed")
728+
.ok()
729+
.and_then(|d| {
730+
if d.len() >= 8 {
731+
let mut buf = [0u8; 8];
732+
buf.copy_from_slice(&d[..8]);
733+
Some(i64::from_le_bytes(buf))
734+
} else {
735+
None
736+
}
737+
})
738+
.unwrap_or(0)
739+
}
740+
722741
pub fn ensure_hotkey_tracked(hotkey: &str) {
723742
add_registered_hotkey(hotkey);
724743
}

src/types.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ pub struct LeaderboardEntry {
9797
pub malicious_issues: u32,
9898
}
9999

100+
#[derive(Clone, Debug, Serialize, Deserialize)]
101+
pub struct LeaderboardResponse {
102+
pub last_refreshed: i64,
103+
pub entries: Vec<LeaderboardEntry>,
104+
}
105+
100106
#[derive(Clone, Debug, Serialize, Deserialize)]
101107
pub struct StatsResponse {
102108
pub total_bounties: u64,

0 commit comments

Comments
 (0)