Ensure calculations return correct unlock times
This commit is contained in:
parent
3b1de79309
commit
a8be1a8043
|
@ -95,10 +95,10 @@ pub const LOX_SYSTEM_INFO: LoxSystemInfo = LoxSystemInfo {
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
pub struct LoxNextUnlock {
|
pub struct LoxNextUnlock {
|
||||||
pub trust_level_unlock_date: DateTime::<Utc>,
|
pub trust_level_unlock_date: DateTime<Utc>,
|
||||||
pub invitation_unlock_date: DateTime::<Utc>,
|
pub invitation_unlock_date: DateTime<Utc>,
|
||||||
pub num_invitations_unlocked: u32,
|
pub num_invitations_unlocked: u32,
|
||||||
pub blockage_migration_unlock_date: DateTime::<Utc>,
|
pub blockage_migration_unlock_date: DateTime<Utc>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[serde_as]
|
#[serde_as]
|
||||||
|
|
|
@ -811,67 +811,50 @@ pub fn get_next_unlock(constants_str: String, lox_cred_str: String) -> Result<St
|
||||||
Err(e) => return Err(JsValue::from(e.to_string())),
|
Err(e) => return Err(JsValue::from(e.to_string())),
|
||||||
};
|
};
|
||||||
let trust_level = scalar_u32(&lox_cred.lox_credential.trust_level).unwrap();
|
let trust_level = scalar_u32(&lox_cred.lox_credential.trust_level).unwrap();
|
||||||
let (days_to_next_level, invitations_at_next_level) = match trust_level as usize {
|
let (days_to_next_level, mut invitations_at_next_level) = match trust_level as usize {
|
||||||
|
// If the credential is at trust level 0, we use the untrusted interval from the
|
||||||
|
// trust promotion protocol to calculate the date of the next level update
|
||||||
0 => (constants.untrusted_interval, 0),
|
0 => (constants.untrusted_interval, 0),
|
||||||
|
|
||||||
_ => {
|
// Otherwise, we usethe invitation and upgrade dates from the level up protocol constants
|
||||||
if trust_level as usize == constants.max_level {
|
_ => (
|
||||||
(
|
constants.level_interval[trust_level as usize],
|
||||||
constants.level_interval[trust_level as usize],
|
constants.level_invitations[trust_level as usize],
|
||||||
constants.level_invitations[trust_level as usize],
|
),
|
||||||
)
|
|
||||||
} else {
|
|
||||||
(
|
|
||||||
constants.level_interval[trust_level as usize - 1],
|
|
||||||
constants.level_invitations[trust_level as usize - 1],
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
let days_to_invite_inc = days_to_next_level;
|
let mut days_to_invite_inc = days_to_next_level;
|
||||||
if invitations_at_next_level == 0 {}
|
// If there are no invitations at the next trust level upgrade
|
||||||
|
// i.e., if the credential is at level 0, calculate the time until they will
|
||||||
|
// unlock invitations
|
||||||
|
if invitations_at_next_level == 0 {
|
||||||
|
days_to_invite_inc =
|
||||||
|
days_to_next_level + constants.level_interval[trust_level as usize + 1];
|
||||||
|
invitations_at_next_level = constants.level_invitations[trust_level as usize + 1];
|
||||||
|
}
|
||||||
let days_to_blockage_migrations =
|
let days_to_blockage_migrations =
|
||||||
match trust_level < constants.min_blockage_migration_trust_level {
|
match trust_level < constants.min_blockage_migration_trust_level {
|
||||||
|
// If the credential is greater than the minimum level that enables
|
||||||
|
// migrating after a blockage, the time to unlock is 0, otherwise we
|
||||||
|
// add the time to upgrade until that level
|
||||||
true => {
|
true => {
|
||||||
let mut blockage_days =
|
let mut blockage_days = days_to_next_level;
|
||||||
scalar_u32(&lox_cred.lox_credential.level_since).unwrap() + days_to_next_level;
|
|
||||||
let mut count = 1;
|
let mut count = 1;
|
||||||
while trust_level + count < constants.min_blockage_migration_trust_level {
|
while trust_level + count <= constants.min_blockage_migration_trust_level {
|
||||||
count += 1;
|
|
||||||
blockage_days += constants.level_interval[trust_level as usize + 1];
|
blockage_days += constants.level_interval[trust_level as usize + 1];
|
||||||
|
count += 1;
|
||||||
}
|
}
|
||||||
blockage_days
|
scalar_u32(&lox_cred.lox_credential.level_since).unwrap() + blockage_days
|
||||||
}
|
}
|
||||||
false => 0,
|
false => 0,
|
||||||
};
|
};
|
||||||
log(&format!(
|
|
||||||
"Trust level {}",
|
|
||||||
serde_json::to_string(&trust_level).unwrap()
|
|
||||||
));
|
|
||||||
let days_to_level_unlock =
|
let days_to_level_unlock =
|
||||||
(scalar_u32(&lox_cred.lox_credential.level_since).unwrap() + days_to_next_level) as i32;
|
(scalar_u32(&lox_cred.lox_credential.level_since).unwrap() + days_to_next_level) as i32;
|
||||||
let level_unlock_date = JulianDay::new(days_to_level_unlock).to_date();
|
let level_unlock_date = JulianDay::new(days_to_level_unlock).to_date();
|
||||||
log(&format!(
|
|
||||||
"Days to next level unlock {}",
|
|
||||||
serde_json::to_string(&days_to_level_unlock).unwrap()
|
|
||||||
));
|
|
||||||
log(&format!(
|
|
||||||
"Date of unlock {}",
|
|
||||||
serde_json::to_string(&level_unlock_date).unwrap()
|
|
||||||
));
|
|
||||||
let days_to_invite_unlock =
|
let days_to_invite_unlock =
|
||||||
(scalar_u32(&lox_cred.lox_credential.level_since).unwrap() + days_to_invite_inc) as i32;
|
(scalar_u32(&lox_cred.lox_credential.level_since).unwrap() + days_to_invite_inc) as i32;
|
||||||
let invite_unlock_date = JulianDay::new(days_to_invite_unlock).to_date();
|
let invite_unlock_date = JulianDay::new(days_to_invite_unlock).to_date();
|
||||||
log(&format!(
|
|
||||||
"Days to next level unlock {}",
|
|
||||||
serde_json::to_string(&days_to_level_unlock).unwrap()
|
|
||||||
));
|
|
||||||
let blockage_migration_unlock_date =
|
let blockage_migration_unlock_date =
|
||||||
JulianDay::new(days_to_blockage_migrations as i32).to_date();
|
JulianDay::new(days_to_blockage_migrations as i32).to_date();
|
||||||
log(&format!(
|
|
||||||
"Date of unblock {}",
|
|
||||||
serde_json::to_string(&blockage_migration_unlock_date).unwrap()
|
|
||||||
));
|
|
||||||
let next_unlock: lox_utils::LoxNextUnlock = lox_utils::LoxNextUnlock {
|
let next_unlock: lox_utils::LoxNextUnlock = lox_utils::LoxNextUnlock {
|
||||||
trust_level_unlock_date: DateTime::<Utc>::from_naive_utc_and_offset(
|
trust_level_unlock_date: DateTime::<Utc>::from_naive_utc_and_offset(
|
||||||
NaiveDateTime::new(level_unlock_date, NaiveTime::from_hms_opt(0, 0, 0).unwrap()),
|
NaiveDateTime::new(level_unlock_date, NaiveTime::from_hms_opt(0, 0, 0).unwrap()),
|
||||||
|
|
Loading…
Reference in New Issue