Add program heap bump instruction (#20607)

This commit is contained in:
Jack May
2021-10-19 21:01:39 -07:00
committed by GitHub
parent b5f21d5e34
commit 58164517e4
6 changed files with 252 additions and 70 deletions

View File

@ -3809,7 +3809,7 @@ impl Bank {
let mut compute_budget = self.compute_budget.unwrap_or_else(ComputeBudget::new);
let mut process_result = if feature_set.is_active(&tx_wide_compute_cap::id()) {
compute_budget.process_transaction(tx)
compute_budget.process_transaction(tx, feature_set.clone())
} else {
Ok(())
};
@ -14810,6 +14810,7 @@ pub(crate) mod tests {
*compute_budget,
ComputeBudget {
max_units: 1,
heap_size: Some(48 * 1024),
..ComputeBudget::default()
}
);
@ -14821,6 +14822,7 @@ pub(crate) mod tests {
let message = Message::new(
&[
ComputeBudgetInstruction::request_units(1),
ComputeBudgetInstruction::request_heap_frame(48 * 1024),
Instruction::new_with_bincode(program_id, &0, vec![]),
],
Some(&mint_keypair.pubkey()),

View File

@ -11,8 +11,8 @@ use solana_sdk::{
compute_budget::ComputeBudget,
feature_set::{
demote_program_write_locks, do_support_realloc, neon_evm_compute_budget,
prevent_calling_precompiles_as_programs, remove_native_loader, tx_wide_compute_cap,
FeatureSet,
prevent_calling_precompiles_as_programs, remove_native_loader, requestable_heap_size,
tx_wide_compute_cap, FeatureSet,
},
fee_calculator::FeeCalculator,
hash::Hash,
@ -538,11 +538,18 @@ impl MessageProcessor {
}
let mut compute_budget = compute_budget;
if invoke_context.is_feature_active(&neon_evm_compute_budget::id())
if !invoke_context.is_feature_active(&tx_wide_compute_cap::id())
&& invoke_context.is_feature_active(&neon_evm_compute_budget::id())
&& *program_id == crate::neon_evm_program::id()
{
// Bump the compute budget for neon_evm
compute_budget.max_units = compute_budget.max_units.max(500_000);
}
if !invoke_context.is_feature_active(&requestable_heap_size::id())
&& invoke_context.is_feature_active(&neon_evm_compute_budget::id())
&& *program_id == crate::neon_evm_program::id()
{
// Bump the compute budget for neon_evm
compute_budget.heap_size = Some(256 * 1024);
}