Skip to content

Commit

Permalink
feat: add 'burn_status' view (#51)
Browse files Browse the repository at this point in the history
  • Loading branch information
vasyafromrussia authored Apr 17, 2024
1 parent cdccecd commit 8f42aa6
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 5 deletions.
25 changes: 23 additions & 2 deletions contract/src/burn/api.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use claim_model::{
api::BurnApi,
event::{emit, BurnData, EventKind},
TokensAmount, UnixTimestamp,
BurnStatus, TokensAmount, UnixTimestamp,
};
use near_sdk::{json_types::U128, near_bindgen, require, PromiseOrValue};
use near_sdk::{env::panic_str, json_types::U128, near_bindgen, require, AccountId, PromiseOrValue};

use crate::{
common::{now_seconds, UnixTimestampExtension},
Expand Down Expand Up @@ -38,6 +38,27 @@ impl BurnApi for Contract {
PromiseOrValue::Value(U128(0))
}
}

fn get_burn_status(&self, account_id: AccountId) -> BurnStatus {
let now = now_seconds();
let account = self
.accounts
.get(&account_id)
.unwrap_or_else(|| panic_str(format!("Account {account_id} not found").as_str()));
let min_claimable_ts: Option<UnixTimestamp> = account
.accruals
.iter()
.map(|(timestamp, _)| timestamp)
.filter(|timestamp| timestamp.is_within_period(now, self.burn_period))
.min()
.cloned();

BurnStatus {
min_claimable_ts,
claim_period_refreshed_at: account.claim_period_refreshed_at,
burn_period: self.burn_period,
}
}
}

impl Contract {
Expand Down
7 changes: 4 additions & 3 deletions model/src/api.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
#[cfg(feature = "release-api")]
use near_sdk::AccountId;
use near_sdk::{json_types::U128, PromiseOrValue};
#[cfg(feature = "integration-api")]
use nitka::AccountId;
// #[cfg(feature = "integration-api")]
use nitka_proc::make_integration_version;

use crate::{ClaimAvailabilityView, ClaimResultView, Duration};
use crate::{BurnStatus, ClaimAvailabilityView, ClaimResultView, Duration};

#[cfg(feature = "integration-test")]
pub struct ClaimContract<'a> {
Expand Down Expand Up @@ -138,6 +137,8 @@ pub trait BurnApi {
///
/// Panics if another service call is running.
fn burn(&mut self) -> PromiseOrValue<U128>;

fn get_burn_status(&self, account_id: AccountId) -> BurnStatus;
}

/// An API for recording (updating) user balances in the smart contract.
Expand Down
8 changes: 8 additions & 0 deletions model/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,11 @@ impl ClaimResultView {
Self { total: U128(total) }
}
}

#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(crate = "near_sdk::serde")]
pub struct BurnStatus {
pub min_claimable_ts: Option<UnixTimestamp>,
pub claim_period_refreshed_at: UnixTimestamp,
pub burn_period: Duration,
}
Binary file modified res/sweat_claim.wasm
Binary file not shown.

0 comments on commit 8f42aa6

Please sign in to comment.