cpi charge for executables (#24396)

This commit is contained in:
Jack May 2022-04-19 19:31:11 -07:00 committed by GitHub
parent 4be01ec75a
commit 5eb1ba402f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 1 deletions

View File

@ -23,7 +23,7 @@ use {
feature_set::{
add_get_processed_sibling_instruction_syscall, blake3_syscall_enabled,
check_physical_overlapping, check_slice_translation_size, disable_fees_sysvar,
do_support_realloc, fixed_memcpy_nonoverlapping_check,
do_support_realloc, executables_incur_cpi_data_cost, fixed_memcpy_nonoverlapping_check,
libsecp256k1_0_5_upgrade_enabled, limit_secp256k1_recovery_id,
prevent_calling_precompiles_as_programs, return_data_syscall_enabled,
secp256k1_recover_syscall_enabled, sol_log_data_syscall_enabled,
@ -2783,6 +2783,16 @@ where
.map_err(SyscallError::InstructionError)?;
if account.borrow().executable() {
// Use the known account
if invoke_context
.feature_set
.is_active(&executables_incur_cpi_data_cost::id())
{
invoke_context
.get_compute_meter()
.consume((account.borrow().data().len() as u64).saturating_div(
invoke_context.get_compute_budget().cpi_bytes_per_unit,
))?;
}
accounts.push((instruction_account.index_in_transaction, None));
} else if let Some(caller_account_index) =
account_info_keys.iter().position(|key| *key == account_key)

View File

@ -351,6 +351,10 @@ pub mod drop_redundant_turbine_path {
solana_sdk::declare_id!("4Di3y24QFLt5QEUPZtbnjyfQKfm6ZMTfa6Dw1psfoMKU");
}
pub mod executables_incur_cpi_data_cost {
solana_sdk::declare_id!("7GUcYgq4tVtaqNCKT3dho9r4665Qp5TxCZ27Qgjx3829");
}
lazy_static! {
/// Map of feature identifiers to user-visible description
pub static ref FEATURE_NAMES: HashMap<Pubkey, &'static str> = [
@ -433,6 +437,7 @@ lazy_static! {
(error_on_syscall_bpf_function_hash_collisions::id(), "error on bpf function hash collisions"),
(reject_callx_r10::id(), "Reject bpf callx r10 instructions"),
(drop_redundant_turbine_path::id(), "drop redundant turbine path"),
(executables_incur_cpi_data_cost::id(), "Executables incure CPI data costs"),
/*************** ADD NEW FEATURES HERE ***************/
]
.iter()