From 66caead016affcb27ab8931a6ae4573460ce2a17 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:47:35 -0700 Subject: [PATCH] Add compute budget noops (backport #20992) (#21014) * Add compute budget program as a noop (#20992) (cherry picked from commit 1e2bef76e3bf85ab3676793cf09d0a2b04e06afa) # Conflicts: # sdk/src/feature_set.rs * resolve conflicts Co-authored-by: Jack May --- runtime/src/bank.rs | 54 +++++++++++++++++++++++++++++++++++++++++ runtime/src/builtins.rs | 2 +- sdk/src/feature_set.rs | 5 ++++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 1c38f0d37d..64a145b91e 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -14238,6 +14238,60 @@ pub(crate) mod tests { assert_eq!(rent_debits.0.len(), 2); } + #[test] + fn test_compute_budget_program_noop() { + solana_logger::setup(); + let GenesisConfigInfo { + mut genesis_config, + mint_keypair, + .. + } = create_genesis_config_with_leader( + 1_000_000_000_000_000, + &Pubkey::new_unique(), + bootstrap_validator_stake_lamports(), + ); + + // activate all features except.. + activate_all_features(&mut genesis_config); + genesis_config + .accounts + .remove(&feature_set::tx_wide_compute_cap::id()); + genesis_config + .accounts + .remove(&feature_set::requestable_heap_size::id()); + let mut bank = Bank::new(&genesis_config); + + fn mock_ix_processor( + _pubkey: &Pubkey, + _data: &[u8], + invoke_context: &mut dyn InvokeContext, + ) -> std::result::Result<(), InstructionError> { + let compute_budget = invoke_context.get_bpf_compute_budget(); + assert_eq!( + *compute_budget, + BpfComputeBudget { + max_units: 200_000, + heap_size: None, + ..BpfComputeBudget::default() + } + ); + Ok(()) + } + let program_id = solana_sdk::pubkey::new_rand(); + bank.add_builtin("mock_program", program_id, mock_ix_processor); + + let message = Message::new( + &[ + compute_budget::request_units(1), + compute_budget::request_heap_frame(48 * 1024), + Instruction::new_with_bincode(program_id, &0, vec![]), + ], + Some(&mint_keypair.pubkey()), + ); + let tx = Transaction::new(&[&mint_keypair], message, bank.last_blockhash()); + bank.process_transaction(&tx).unwrap(); + } + #[test] fn test_compute_request_instruction() { solana_logger::setup(); diff --git a/runtime/src/builtins.rs b/runtime/src/builtins.rs index fd00ba8cc7..dc9c717bbc 100644 --- a/runtime/src/builtins.rs +++ b/runtime/src/builtins.rs @@ -94,7 +94,7 @@ fn feature_builtins() -> Vec<(Builtin, Pubkey, ActivationType)> { solana_sdk::compute_budget::id(), solana_compute_budget_program::process_instruction, ), - feature_set::tx_wide_compute_cap::id(), + feature_set::add_compute_budget_program::id(), ActivationType::NewProgram, ), ( diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index a0fba52c9e..25e9561dee 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -247,6 +247,10 @@ pub mod requestable_heap_size { solana_sdk::declare_id!("CCu4boMmfLuqcmfTLPHQiUo22ZdUsXjgzPAURYaWt1Bw"); } +pub mod add_compute_budget_program { + solana_sdk::declare_id!("4d5AKtxoh93Dwm1vHXUU3iRATuMndx1c431KgT2td52r"); +} + lazy_static! { /// Map of feature identifiers to user-visible description pub static ref FEATURE_NAMES: HashMap = [ @@ -309,6 +313,7 @@ lazy_static! { (sol_log_data_syscall_enabled::id(), "enable sol_log_data syscall"), (ed25519_program_enabled::id(), "enable builtin ed25519 signature verify program"), (requestable_heap_size::id(), "Requestable heap frame size"), + (add_compute_budget_program::id(), "Add compute_budget_program"), /*************** ADD NEW FEATURES HERE ***************/ ] .iter()