comments and cleanup

This commit is contained in:
Hardhat Chad
2024-07-31 21:03:15 +00:00
parent 213a068fb0
commit 73016f3a23
6 changed files with 60 additions and 19 deletions

View File

@@ -12,7 +12,7 @@ use spl_token::state::Mint;
use crate::utils::AccountDeserialize;
/// Reset tops up the busses, updates the base reward rate, and sets up the ORE program for the next epoch.
/// Reset tops up the bus balances, updates the base reward rate, and sets up the ORE program for the next epoch.
pub fn process_reset<'a, 'info>(accounts: &'a [AccountInfo<'info>], _data: &[u8]) -> ProgramResult {
// Load accounts.
let [signer, bus_0_info, bus_1_info, bus_2_info, bus_3_info, bus_4_info, bus_5_info, bus_6_info, bus_7_info, config_info, mint_info, treasury_info, treasury_tokens_info, token_program] =
@@ -39,7 +39,7 @@ pub fn process_reset<'a, 'info>(accounts: &'a [AccountInfo<'info>], _data: &[u8]
bus_7_info,
];
// Validate enough time has passed since last reset.
// Validate enough time has passed since the last reset.
let mut config_data = config_info.data.borrow_mut();
let config = Config::try_from_bytes_mut(&mut config_data)?;
let clock = Clock::get().or(Err(ProgramError::InvalidAccountData))?;
@@ -51,7 +51,7 @@ pub fn process_reset<'a, 'info>(accounts: &'a [AccountInfo<'info>], _data: &[u8]
return Ok(());
}
// Update reset timestamp.
// Update timestamp.
config.last_reset_at = clock.unix_timestamp;
// Reset bus accounts and calculate actual rewards mined since last reset.
@@ -59,34 +59,41 @@ pub fn process_reset<'a, 'info>(accounts: &'a [AccountInfo<'info>], _data: &[u8]
let mut total_theoretical_rewards = 0u64;
let mut top_balance = 0u64;
for i in 0..BUS_COUNT {
// Parse bus account.
let mut bus_data = busses[i].data.borrow_mut();
let bus = Bus::try_from_bytes_mut(&mut bus_data)?;
// Track top balance.
if bus.top_balance.gt(&top_balance) {
top_balance = bus.top_balance;
}
// Track accumulators.
total_remaining_rewards = total_remaining_rewards.saturating_add(bus.rewards);
total_theoretical_rewards =
total_theoretical_rewards.saturating_add(bus.theoretical_rewards);
// Reset bus account for new epoch.
bus.rewards = BUS_EPOCH_REWARDS;
bus.theoretical_rewards = 0;
bus.top_balance = 0;
}
let total_epoch_rewards = MAX_EPOCH_REWARDS.saturating_sub(total_remaining_rewards);
// Update the top balance.
// Update global top balance.
config.top_balance = top_balance;
// Update base reward rate for next epoch.
config.base_reward_rate =
calculate_new_reward_rate(config.base_reward_rate, total_theoretical_rewards);
// If base_reward_rate is too low, then increment difficulty by 1 and double base reward rate.
// If base reward rate is too low, increment min difficulty by 1 and double base reward rate.
if config.base_reward_rate.le(&BASE_REWARD_RATE_MIN_THRESHOLD) {
config.min_difficulty = config.min_difficulty.checked_add(1).unwrap();
config.base_reward_rate = config.base_reward_rate.checked_mul(2).unwrap();
}
// If base reward rate is too high, then decrement difficulty by 1 and halve base reward rate.
// If base reward rate is too high, decrement min difficulty by 1 and halve base reward rate.
if config.base_reward_rate.ge(&BASE_REWARD_RATE_MAX_THRESHOLD) && config.min_difficulty.gt(&1) {
config.min_difficulty = config.min_difficulty.checked_sub(1).unwrap();
config.base_reward_rate = config.base_reward_rate.checked_div(2).unwrap();
@@ -98,7 +105,7 @@ pub fn process_reset<'a, 'info>(accounts: &'a [AccountInfo<'info>], _data: &[u8]
return Err(OreError::MaxSupply.into());
}
// Fund treasury token account.
// Fund the treasury token account.
let amount = MAX_SUPPLY
.saturating_sub(mint.supply)
.min(total_epoch_rewards);