Move cap_accounts_data_len feature gate only around new error (#23048)
This commit is contained in:
@ -75,14 +75,20 @@ impl AccountsDataMeter {
|
||||
|
||||
/// Consume accounts data space, in bytes. If `amount` is positive, we are *increasing* the
|
||||
/// amount of accounts data space used. If `amount` is negative, we are *decreasing* the
|
||||
/// amount of accounts data space used.
|
||||
/// amount of accounts data space used. If `amount` is greater than the remaining space,
|
||||
/// return an error and *do not* consume more accounts data space.
|
||||
pub fn consume(&mut self, amount: i64) -> Result<(), InstructionError> {
|
||||
if amount > self.remaining() as i64 {
|
||||
return Err(InstructionError::AccountsDataBudgetExceeded);
|
||||
}
|
||||
self.delta = self.delta.saturating_add(amount);
|
||||
self.consume_unchecked(amount);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Unconditionally consume accounts data space. Refer to `consume()` for more documentation.
|
||||
pub fn consume_unchecked(&mut self, amount: i64) {
|
||||
self.delta = self.delta.saturating_add(amount);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -500,11 +500,13 @@ impl<'a> InvokeContext<'a> {
|
||||
.checked_add(u128::from(account.lamports()))
|
||||
.ok_or(InstructionError::UnbalancedInstruction)?;
|
||||
|
||||
let pre_data_len = pre_account.data().len() as i64;
|
||||
let post_data_len = account.data().len() as i64;
|
||||
let data_len_delta = post_data_len.saturating_sub(pre_data_len);
|
||||
if cap_accounts_data_len {
|
||||
let pre_data_len = pre_account.data().len() as i64;
|
||||
let post_data_len = account.data().len() as i64;
|
||||
let data_len_delta = post_data_len.saturating_sub(pre_data_len);
|
||||
self.accounts_data_meter.consume(data_len_delta)?;
|
||||
} else {
|
||||
self.accounts_data_meter.consume_unchecked(data_len_delta);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
@ -591,11 +593,13 @@ impl<'a> InvokeContext<'a> {
|
||||
pre_account.update(account.clone());
|
||||
}
|
||||
|
||||
let pre_data_len = pre_account.data().len() as i64;
|
||||
let post_data_len = account.data().len() as i64;
|
||||
let data_len_delta = post_data_len.saturating_sub(pre_data_len);
|
||||
if cap_accounts_data_len {
|
||||
let pre_data_len = pre_account.data().len() as i64;
|
||||
let post_data_len = account.data().len() as i64;
|
||||
let data_len_delta = post_data_len.saturating_sub(pre_data_len);
|
||||
self.accounts_data_meter.consume(data_len_delta)?;
|
||||
} else {
|
||||
self.accounts_data_meter.consume_unchecked(data_len_delta);
|
||||
}
|
||||
|
||||
return Ok(());
|
||||
|
Reference in New Issue
Block a user