Prevent rent-paying account creation (#22292)
* Fixup typo * Add new feature * Add new TransactionError * Add framework for checking account state before and after transaction processing * Fail transactions that leave new rent-paying accounts * Only check rent-state of writable tx accounts * Review comments: combine process_result success behavior; log and metrics before feature activation * Fix tests that assume rent-exempt accounts are okay * Remove test no longer relevant * Remove native/sysvar special case * Move metrics submission to report legacy->legacy rent paying transitions as well
This commit is contained in:
@ -295,6 +295,10 @@ pub mod max_tx_account_locks {
|
||||
solana_sdk::declare_id!("CBkDroRDqm8HwHe6ak9cguPjUomrASEkfmxEaZ5CNNxz");
|
||||
}
|
||||
|
||||
pub mod require_rent_exempt_accounts {
|
||||
solana_sdk::declare_id!("BkFDxiJQWZXGTZaJQxH7wVEHkAmwCgSEVkrvswFfRJPD");
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
/// Map of feature identifiers to user-visible description
|
||||
pub static ref FEATURE_NAMES: HashMap<Pubkey, &'static str> = [
|
||||
@ -363,6 +367,7 @@ lazy_static! {
|
||||
(reject_all_elf_rw::id(), "reject all read-write data in program elfs"),
|
||||
(cap_accounts_data_len::id(), "cap the accounts data len"),
|
||||
(max_tx_account_locks::id(), "enforce max number of locked accounts per transaction"),
|
||||
(require_rent_exempt_accounts::id(), "require all new transaction accounts with data to be rent-exempt"),
|
||||
/*************** ADD NEW FEATURES HERE ***************/
|
||||
]
|
||||
.iter()
|
||||
|
@ -125,6 +125,12 @@ pub enum TransactionError {
|
||||
/// Address table lookup uses an invalid index
|
||||
#[error("Transaction address table lookup uses an invalid index")]
|
||||
InvalidAddressLookupTableIndex,
|
||||
|
||||
/// Transaction leaves an account with a lower balance than rent-exempt minimum
|
||||
#[error(
|
||||
"Transaction leaves an account with data with a lower balance than rent-exempt minimum"
|
||||
)]
|
||||
InvalidRentPayingAccount,
|
||||
}
|
||||
|
||||
impl From<SanitizeError> for TransactionError {
|
||||
|
Reference in New Issue
Block a user