refactor rent_due for normal case of exempt (#23350)
This commit is contained in:
parent
ee3fc39f1c
commit
611d745241
|
@ -83,6 +83,12 @@ impl RentCollector {
|
|||
/// given an account that 'should_collect_rent'
|
||||
/// returns (amount rent due, is_exempt_from_rent)
|
||||
pub fn get_rent_due(&self, account: &impl ReadableAccount) -> RentDue {
|
||||
if self
|
||||
.rent
|
||||
.is_exempt(account.lamports(), account.data().len())
|
||||
{
|
||||
RentDue::Exempt
|
||||
} else {
|
||||
let slots_elapsed: u64 = (account.rent_epoch()..=self.epoch)
|
||||
.map(|epoch| self.epoch_schedule.get_slots_in_epoch(epoch + 1))
|
||||
.sum();
|
||||
|
@ -94,8 +100,9 @@ impl RentCollector {
|
|||
0.0
|
||||
};
|
||||
|
||||
self.rent
|
||||
.due(account.lamports(), account.data().len(), years_elapsed)
|
||||
// we know this account is not exempt
|
||||
RentDue::Paying(self.rent.due_amount(account.data().len(), years_elapsed))
|
||||
}
|
||||
}
|
||||
|
||||
// Updates the account's lamports and status, and returns the amount of rent collected, if any.
|
||||
|
|
|
@ -68,10 +68,15 @@ impl Rent {
|
|||
if self.is_exempt(balance, data_len) {
|
||||
RentDue::Exempt
|
||||
} else {
|
||||
RentDue::Paying(self.due_amount(data_len, years_elapsed))
|
||||
}
|
||||
}
|
||||
|
||||
/// rent due for account that is known to be not exempt
|
||||
pub fn due_amount(&self, data_len: usize, years_elapsed: f64) -> u64 {
|
||||
let actual_data_len = data_len as u64 + ACCOUNT_STORAGE_OVERHEAD;
|
||||
let lamports_per_year = self.lamports_per_byte_year * actual_data_len;
|
||||
RentDue::Paying((lamports_per_year as f64 * years_elapsed) as u64)
|
||||
}
|
||||
(lamports_per_year as f64 * years_elapsed) as u64
|
||||
}
|
||||
|
||||
pub fn free() -> Self {
|
||||
|
|
Loading…
Reference in New Issue