Revert "add default_cost as mandatory field for Builtin (#30639)" (#30749)

This reverts commit 7b95c8e698.
This commit is contained in:
Tao Zhu 2023-03-16 11:21:06 -05:00 committed by GitHub
parent 0ed9f62602
commit 17ba051e1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 112 additions and 208 deletions

View File

@ -2,7 +2,7 @@ use solana_runtime::builtins::{Builtin, BuiltinFeatureTransition, Builtins};
macro_rules! to_builtin {
($b:expr) => {
Builtin::new(&$b.0, $b.1, $b.2, $b.3)
Builtin::new(&$b.0, $b.1, $b.2)
};
}

View File

@ -43,7 +43,6 @@ pub type ProcessInstructionWithContext = fn(&mut InvokeContext) -> Result<(), In
pub struct BuiltinProgram {
pub program_id: Pubkey,
pub process_instruction: ProcessInstructionWithContext,
pub default_compute_unit_cost: u64,
}
impl std::fmt::Debug for BuiltinProgram {
@ -56,11 +55,7 @@ impl std::fmt::Debug for BuiltinProgram {
// https://github.com/rust-lang/rust/issues/50280
// https://users.rust-lang.org/t/display-function-pointer/17073/2
let erased_instruction: ErasedProcessInstructionWithContext = self.process_instruction;
write!(
f,
"{}: {:p} CUs: {}",
self.program_id, erased_instruction, self.default_compute_unit_cost
)
write!(f, "{}: {:p}", self.program_id, erased_instruction)
}
}
@ -1078,12 +1073,10 @@ mod tests {
BuiltinProgram {
program_id: solana_sdk::pubkey::new_rand(),
process_instruction: mock_process_instruction,
default_compute_unit_cost: 0,
},
BuiltinProgram {
program_id: solana_sdk::pubkey::new_rand(),
process_instruction: mock_ix_processor,
default_compute_unit_cost: 0,
},
];
assert!(!format!("{builtin_programs:?}").is_empty());
@ -1269,7 +1262,6 @@ mod tests {
let builtin_programs = &[BuiltinProgram {
program_id: callee_program_id,
process_instruction: mock_process_instruction,
default_compute_unit_cost: 0,
}];
let owned_account = AccountSharedData::new(42, 1, &callee_program_id);
@ -1428,7 +1420,6 @@ mod tests {
let builtin_programs = [BuiltinProgram {
program_id: program_key,
process_instruction: mock_process_instruction,
default_compute_unit_cost: 0,
}];
let mut transaction_context =

View File

@ -622,7 +622,7 @@ impl ProgramTest {
let add_native = |this: &mut ProgramTest, process_fn: ProcessInstructionWithContext| {
info!("\"{}\" program loaded as native code", program_name);
this.builtins
.push(Builtin::new(program_name, program_id, process_fn, 0));
.push(Builtin::new(program_name, program_id, process_fn));
};
let warn_invalid_program_name = || {
@ -695,12 +695,8 @@ impl ProgramTest {
process_instruction: ProcessInstructionWithContext,
) {
info!("\"{}\" builtin program", program_name);
self.builtins.push(Builtin::new(
program_name,
program_id,
process_instruction,
0,
));
self.builtins
.push(Builtin::new(program_name, program_id, process_instruction));
}
/// Deactivate a runtime feature.
@ -793,7 +789,7 @@ impl ProgramTest {
// Add loaders
macro_rules! add_builtin {
($b:expr) => {
bank.add_builtin(&$b.0, &$b.1, $b.2, $b.3)
bank.add_builtin(&$b.0, &$b.1, $b.2)
};
}
add_builtin!(solana_bpf_loader_deprecated_program!());
@ -816,7 +812,6 @@ impl ProgramTest {
&builtin.name,
&builtin.id,
builtin.process_instruction_with_context,
0,
);
}

View File

@ -2,6 +2,5 @@ solana_sdk::declare_builtin!(
solana_sdk::bpf_loader_deprecated::ID,
solana_bpf_loader_deprecated_program,
solana_bpf_loader_program::process_instruction,
1140,
deprecated::id
);

View File

@ -75,8 +75,7 @@ use {
solana_sdk::declare_builtin!(
solana_sdk::bpf_loader::ID,
solana_bpf_loader_program,
solana_bpf_loader_program::process_instruction,
570
solana_bpf_loader_program::process_instruction
);
/// Errors returned by functions the BPF Loader registers with the VM

View File

@ -2,6 +2,5 @@ solana_sdk::declare_builtin!(
solana_sdk::bpf_loader_upgradeable::ID,
solana_bpf_loader_upgradeable_program,
solana_bpf_loader_program::process_instruction,
2370,
upgradeable::id
);

View File

@ -2,6 +2,5 @@ solana_sdk::declare_builtin!(
solana_sdk::bpf_loader_upgradeable::ID,
solana_bpf_loader_upgradeable_program_with_jit,
solana_bpf_loader_program::process_instruction_jit,
2370,
upgradeable_with_jit::id
);

View File

@ -1,6 +1,5 @@
solana_sdk::declare_builtin!(
solana_sdk::bpf_loader::ID,
solana_bpf_loader_program_with_jit,
solana_bpf_loader_program::process_instruction_jit,
570
solana_bpf_loader_program::process_instruction_jit
);

View File

@ -161,8 +161,8 @@ fn bench_program_execute_noop(bencher: &mut Bencher) {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_benches(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);

View File

@ -441,8 +441,8 @@ fn test_program_sbf_sanity() {
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
// Call user program
@ -489,8 +489,8 @@ fn test_program_sbf_loader_deprecated() {
.remove(&solana_sdk::feature_set::disable_deploy_of_alloc_free_syscall::id())
.unwrap();
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_deprecated_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_deprecated_program!();
bank.add_builtin(&name, &id, entrypoint);
let program_id = create_program(&bank, &bpf_loader_deprecated::id(), program);
let bank_client = BankClient::new(bank);
@ -516,8 +516,8 @@ fn test_sol_alloc_free_no_longer_deployable() {
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
// Populate loader account with elf that depends on _sol_alloc_free syscall
let elf = load_program_from_file("solana_sbf_rust_deprecated_loader");
@ -609,8 +609,8 @@ fn test_program_sbf_duplicate_accounts() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
let program_id = load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program);
@ -710,8 +710,8 @@ fn test_program_sbf_error_handling() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
let program_id = load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program);
let account_metas = vec![AccountMeta::new(mint_keypair.pubkey(), true)];
@ -812,8 +812,8 @@ fn test_return_data_and_log_data_syscall() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -877,8 +877,8 @@ fn test_program_sbf_invoke_sanity() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -1274,8 +1274,8 @@ fn test_program_sbf_program_id_spoofing() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -1327,8 +1327,8 @@ fn test_program_sbf_caller_has_access_to_cpi_program() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -1367,8 +1367,8 @@ fn test_program_sbf_ro_modify() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -1424,8 +1424,8 @@ fn test_program_sbf_call_depth() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
let program_id = load_program(
&bank_client,
@ -1459,8 +1459,8 @@ fn test_program_sbf_compute_budget() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
let program_id = load_program(
&bank_client,
@ -1558,8 +1558,8 @@ fn test_program_sbf_instruction_introspection() {
} = create_genesis_config(50_000);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -1618,8 +1618,8 @@ fn test_program_sbf_test_use_latest_executor() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
let panic_id = load_program(
&bank_client,
@ -1687,8 +1687,8 @@ fn test_program_sbf_upgrade() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
// Deploy upgrade program
@ -1779,8 +1779,8 @@ fn test_program_sbf_invoke_in_same_tx_as_deployment() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -1875,8 +1875,8 @@ fn test_program_sbf_invoke_in_same_tx_as_redeployment() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -1979,8 +1979,8 @@ fn test_program_sbf_invoke_in_same_tx_as_undeployment() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -2068,10 +2068,10 @@ fn test_program_sbf_invoke_upgradeable_via_cpi() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint, cost) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
let invoke_and_return = load_program(
&bank_client,
@ -2186,8 +2186,8 @@ fn test_program_sbf_disguised_as_sbf_loader() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
let program_id = load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program);
@ -2212,8 +2212,8 @@ fn test_program_sbf_c_dup() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let account_address = Pubkey::new_unique();
let account = AccountSharedData::new_data(42, &[1_u8, 2, 3], &system_program::id()).unwrap();
@ -2243,10 +2243,10 @@ fn test_program_sbf_upgrade_via_cpi() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint, cost) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
let invoke_and_return = load_program(
&bank_client,
@ -2350,10 +2350,10 @@ fn test_program_sbf_set_upgrade_authority_via_cpi() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint, cost) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
// Deploy CPI invoker program
@ -2443,8 +2443,8 @@ fn test_program_upgradeable_locks() {
..
} = create_genesis_config(2_000_000_000);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_upgradeable_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -2564,8 +2564,8 @@ fn test_program_sbf_finalize() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -2610,8 +2610,8 @@ fn test_program_sbf_ro_account_modify() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -2677,8 +2677,8 @@ fn test_program_sbf_realloc() {
let signer = &[&mint_keypair];
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -2974,8 +2974,8 @@ fn test_program_sbf_realloc_invoke() {
let signer = &[&mint_keypair];
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -3492,8 +3492,8 @@ fn test_program_sbf_processed_inner_instruction() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -3576,8 +3576,8 @@ fn test_program_fees() {
bank.fee_structure = fee_structure.clone();
bank.feature_set = Arc::new(FeatureSet::all_enabled());
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank_client = BankClient::new(bank);
let program_id = load_program(
@ -3649,8 +3649,8 @@ fn test_get_minimum_delegation() {
let mut bank = Bank::new_for_tests(&genesis_config);
bank.feature_set = Arc::new(FeatureSet::all_enabled());
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -3678,10 +3678,10 @@ fn test_program_sbf_inner_instruction_alignment_checks() {
..
} = create_genesis_config(50);
let mut bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint, cost) = solana_bpf_loader_deprecated_program!();
bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
bank.add_builtin(&name, &id, entrypoint);
let (name, id, entrypoint) = solana_bpf_loader_deprecated_program!();
bank.add_builtin(&name, &id, entrypoint);
let noop = create_program(&bank, &bpf_loader_deprecated::id(), "solana_sbf_rust_noop");
let inner_instruction_alignment_check = create_program(
&bank,

View File

@ -136,7 +136,6 @@ fn do_bench_transactions(
"builtin_program",
&Pubkey::from(BUILTIN_PROGRAM_ID),
process_instruction,
0,
);
bank.add_builtin_account("solana_noop_program", &Pubkey::from(NOOP_PROGRAM_ID), false);
let bank = Arc::new(bank);

View File

@ -6577,7 +6577,6 @@ impl Bank {
&builtin.name,
&builtin.id,
builtin.process_instruction_with_context,
builtin.default_compute_unit_cost,
);
}
for precompile in get_precompiles() {
@ -7555,12 +7554,8 @@ impl Bank {
name: &str,
program_id: &Pubkey,
process_instruction: ProcessInstructionWithContext,
default_compute_unit_cost: u64,
) {
debug!(
"Adding program {} under {:?} default_compute_unit_cost {}",
name, program_id, default_compute_unit_cost
);
debug!("Adding program {} under {:?}", name, program_id);
self.add_builtin_account(name, program_id, false);
if let Some(entry) = self
.builtin_programs
@ -7569,18 +7564,13 @@ impl Bank {
.find(|entry| entry.program_id == *program_id)
{
entry.process_instruction = process_instruction;
entry.default_compute_unit_cost = default_compute_unit_cost;
} else {
self.builtin_programs.vec.push(BuiltinProgram {
program_id: *program_id,
process_instruction,
default_compute_unit_cost,
});
}
debug!(
"Added program {} under {:?} default_compute_unit_cost {}",
name, program_id, default_compute_unit_cost
);
debug!("Added program {} under {:?}", name, program_id);
}
/// Remove a builtin instruction processor if it already exists
@ -7848,7 +7838,6 @@ impl Bank {
&builtin.name,
&builtin.id,
builtin.process_instruction_with_context,
builtin.default_compute_unit_cost,
),
BuiltinAction::Remove(program_id) => self.remove_builtin(&program_id),
}

View File

@ -1377,12 +1377,7 @@ fn test_rent_complex() {
root_bank.restore_old_behavior_for_fragile_tests();
let root_bank = Arc::new(root_bank);
let mut bank = create_child_bank_for_rent_test(&root_bank, &genesis_config);
bank.add_builtin(
"mock_program",
&mock_program_id,
mock_process_instruction,
0,
);
bank.add_builtin("mock_program", &mock_program_id, mock_process_instruction);
assert_eq!(bank.last_blockhash(), genesis_config.hash());
@ -5088,7 +5083,6 @@ fn test_add_builtin() {
"mock_vote_program",
&mock_vote_program_id(),
mock_vote_processor,
0,
);
assert!(bank.get_account(&mock_vote_program_id()).is_some());
@ -5160,7 +5154,6 @@ fn test_add_duplicate_static_program() {
"solana_vote_program",
&solana_vote_program::id(),
mock_vote_processor,
0,
);
let new_vote_loader_account = bank.get_account(&solana_vote_program::id()).unwrap();
// Vote loader account should not be updated since it was included in the genesis config.
@ -5214,8 +5207,8 @@ fn test_add_instruction_processor_for_existing_unrelated_accounts() {
continue;
}
bank.add_builtin("mock_program1", &vote_id, mock_ix_processor, 0);
bank.add_builtin("mock_program2", &stake_id, mock_ix_processor, 0);
bank.add_builtin("mock_program1", &vote_id, mock_ix_processor);
bank.add_builtin("mock_program2", &stake_id, mock_ix_processor);
{
let stakes = bank.stakes_cache.stakes();
assert!(stakes.vote_accounts().as_ref().is_empty());
@ -5238,8 +5231,8 @@ fn test_add_instruction_processor_for_existing_unrelated_accounts() {
// Re-adding builtin programs should be no-op
bank.update_accounts_hash_for_tests();
let old_hash = bank.get_accounts_hash().unwrap();
bank.add_builtin("mock_program1", &vote_id, mock_ix_processor, 0);
bank.add_builtin("mock_program2", &stake_id, mock_ix_processor, 0);
bank.add_builtin("mock_program1", &vote_id, mock_ix_processor);
bank.add_builtin("mock_program2", &stake_id, mock_ix_processor);
add_root_and_flush_write_cache(&bank);
bank.update_accounts_hash_for_tests();
let new_hash = bank.get_accounts_hash().unwrap();
@ -6492,12 +6485,7 @@ fn test_transaction_with_duplicate_accounts_in_instruction() {
}
let mock_program_id = Pubkey::from([2u8; 32]);
bank.add_builtin(
"mock_program",
&mock_program_id,
mock_process_instruction,
0,
);
bank.add_builtin("mock_program", &mock_program_id, mock_process_instruction);
let from_pubkey = solana_sdk::pubkey::new_rand();
let to_pubkey = solana_sdk::pubkey::new_rand();
@ -6540,12 +6528,7 @@ fn test_transaction_with_program_ids_passed_to_programs() {
}
let mock_program_id = Pubkey::from([2u8; 32]);
bank.add_builtin(
"mock_program",
&mock_program_id,
mock_process_instruction,
0,
);
bank.add_builtin("mock_program", &mock_program_id, mock_process_instruction);
let from_pubkey = solana_sdk::pubkey::new_rand();
let to_pubkey = solana_sdk::pubkey::new_rand();
@ -6601,7 +6584,6 @@ fn test_account_ids_after_program_ids() {
"mock_vote",
&solana_vote_program::id(),
mock_ok_vote_processor,
0,
);
let result = bank.process_transaction(&tx);
assert_eq!(result, Ok(()));
@ -6656,7 +6638,6 @@ fn test_duplicate_account_key() {
"mock_vote",
&solana_vote_program::id(),
mock_ok_vote_processor,
0,
);
let instruction = Instruction::new_with_bincode(solana_vote_program::id(), &10, account_metas);
@ -6690,7 +6671,6 @@ fn test_process_transaction_with_too_many_account_locks() {
"mock_vote",
&solana_vote_program::id(),
mock_ok_vote_processor,
0,
);
let instruction = Instruction::new_with_bincode(solana_vote_program::id(), &10, account_metas);
@ -6728,7 +6708,6 @@ fn test_program_id_as_payer() {
"mock_vote",
&solana_vote_program::id(),
mock_ok_vote_processor,
0,
);
let instruction = Instruction::new_with_bincode(solana_vote_program::id(), &10, account_metas);
@ -6783,7 +6762,6 @@ fn test_ref_account_key_after_program_id() {
"mock_vote",
&solana_vote_program::id(),
mock_ok_vote_processor,
0,
);
let instruction = Instruction::new_with_bincode(solana_vote_program::id(), &10, account_metas);
@ -6815,7 +6793,7 @@ fn test_fuzz_instructions() {
.map(|i| {
let key = solana_sdk::pubkey::new_rand();
let name = format!("program{i:?}");
bank.add_builtin(&name, &key, mock_ok_vote_processor, 0);
bank.add_builtin(&name, &key, mock_ok_vote_processor);
(key, name.as_bytes().to_vec())
})
.collect();
@ -7023,7 +7001,7 @@ fn test_same_program_id_uses_unqiue_executable_accounts() {
// Add a new program
let program1_pubkey = solana_sdk::pubkey::new_rand();
bank.add_builtin("program", &program1_pubkey, nested_processor, 0);
bank.add_builtin("program", &program1_pubkey, nested_processor);
// Add a new program owned by the first
let program2_pubkey = solana_sdk::pubkey::new_rand();
@ -7247,13 +7225,13 @@ fn test_add_builtin_no_overwrite() {
Arc::get_mut(&mut bank)
.unwrap()
.add_builtin("mock_program", &program_id, mock_ix_processor, 0);
.add_builtin("mock_program", &program_id, mock_ix_processor);
assert_eq!(bank.get_account_modified_slot(&program_id).unwrap().1, slot);
let mut bank = Arc::new(new_from_parent(&bank));
Arc::get_mut(&mut bank)
.unwrap()
.add_builtin("mock_program", &program_id, mock_ix_processor, 0);
.add_builtin("mock_program", &program_id, mock_ix_processor);
assert_eq!(bank.get_account_modified_slot(&program_id).unwrap().1, slot);
}
@ -7278,13 +7256,13 @@ fn test_add_builtin_loader_no_overwrite() {
Arc::get_mut(&mut bank)
.unwrap()
.add_builtin("mock_program", &loader_id, mock_ix_processor, 0);
.add_builtin("mock_program", &loader_id, mock_ix_processor);
assert_eq!(bank.get_account_modified_slot(&loader_id).unwrap().1, slot);
let mut bank = Arc::new(new_from_parent(&bank));
Arc::get_mut(&mut bank)
.unwrap()
.add_builtin("mock_program", &loader_id, mock_ix_processor, 0);
.add_builtin("mock_program", &loader_id, mock_ix_processor);
assert_eq!(bank.get_account_modified_slot(&loader_id).unwrap().1, slot);
}
@ -7905,7 +7883,6 @@ fn test_bpf_loader_upgradeable_deploy_with_max_len() {
"solana_bpf_loader_upgradeable_program",
&bpf_loader_upgradeable::id(),
solana_bpf_loader_program::process_instruction,
0,
);
let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank);
@ -10028,12 +10005,7 @@ fn test_tx_return_data() {
Ok(())
}
let blockhash = bank.last_blockhash();
bank.add_builtin(
"mock_program",
&mock_program_id,
mock_process_instruction,
0,
);
bank.add_builtin("mock_program", &mock_program_id, mock_process_instruction);
for index in [
None,
@ -10224,7 +10196,7 @@ fn test_transfer_sysvar() {
}
let program_id = solana_sdk::pubkey::new_rand();
bank.add_builtin("mock_program1", &program_id, mock_ix_processor, 0);
bank.add_builtin("mock_program1", &program_id, mock_ix_processor);
let blockhash = bank.last_blockhash();
#[allow(deprecated)]
@ -10438,7 +10410,7 @@ fn test_compute_budget_program_noop() {
Ok(())
}
let program_id = solana_sdk::pubkey::new_rand();
bank.add_builtin("mock_program", &program_id, mock_ix_processor, 0);
bank.add_builtin("mock_program", &program_id, mock_ix_processor);
let message = Message::new(
&[
@ -10481,7 +10453,7 @@ fn test_compute_request_instruction() {
Ok(())
}
let program_id = solana_sdk::pubkey::new_rand();
bank.add_builtin("mock_program", &program_id, mock_ix_processor, 0);
bank.add_builtin("mock_program", &program_id, mock_ix_processor);
let message = Message::new(
&[
@ -10531,7 +10503,7 @@ fn test_failed_compute_request_instruction() {
Ok(())
}
let program_id = solana_sdk::pubkey::new_rand();
bank.add_builtin("mock_program", &program_id, mock_ix_processor, 0);
bank.add_builtin("mock_program", &program_id, mock_ix_processor);
// This message will not be executed because the compute budget request is invalid
let message0 = Message::new(
@ -11162,7 +11134,6 @@ fn test_invalid_rent_state_changes_existing_accounts() {
"mock_program",
&mock_program_id,
mock_transfer_process_instruction,
0,
);
let recent_blockhash = bank.last_blockhash();
@ -11250,7 +11221,6 @@ fn test_invalid_rent_state_changes_new_accounts() {
"mock_program",
&mock_program_id,
mock_transfer_process_instruction,
0,
);
let recent_blockhash = bank.last_blockhash();
@ -11314,7 +11284,6 @@ fn test_drained_created_account() {
"mock_program",
&mock_program_id,
mock_transfer_process_instruction,
0,
);
let recent_blockhash = bank.last_blockhash();
@ -11970,7 +11939,6 @@ fn test_resize_and_rent() {
"mock_realloc_program",
&mock_program_id,
mock_realloc_process_instruction,
0,
);
let recent_blockhash = bank.last_blockhash();
@ -12246,7 +12214,6 @@ fn test_accounts_data_size_and_resize_transactions() {
"mock_realloc_program",
&mock_program_id,
mock_realloc_process_instruction,
0,
);
let recent_blockhash = bank.last_blockhash();
@ -12790,8 +12757,8 @@ fn test_runtime_feature_enable_with_executor_cache() {
.accounts
.remove(&feature_set::reject_callx_r10::id());
let mut root_bank = Bank::new_for_tests(&genesis_config);
let (name, id, entrypoint, cost) = solana_bpf_loader_program!();
root_bank.add_builtin(&name, &id, entrypoint, cost);
let (name, id, entrypoint) = solana_bpf_loader_program!();
root_bank.add_builtin(&name, &id, entrypoint);
// Test a basic transfer
let amount = genesis_config.rent.minimum_balance(0);

View File

@ -12,11 +12,6 @@ pub struct Builtin {
pub name: String,
pub id: Pubkey,
pub process_instruction_with_context: ProcessInstructionWithContext,
// compute units to deduct from transaction's compute budget if builtin
// does not consume actual units during process_instruction. No builtin
// manually consumes units as bpf does (as of v1.16), but they could
// in the future.
pub default_compute_unit_cost: u64,
}
impl Builtin {
@ -24,24 +19,18 @@ impl Builtin {
name: &str,
id: Pubkey,
process_instruction_with_context: ProcessInstructionWithContext,
default_compute_unit_cost: u64,
) -> Self {
Self {
name: name.to_string(),
id,
process_instruction_with_context,
default_compute_unit_cost,
}
}
}
impl fmt::Debug for Builtin {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"Builtin [name={}, id={}, default_compute_unit_cost={}]",
self.name, self.id, self.default_compute_unit_cost
)
write!(f, "Builtin [name={}, id={}]", self.name, self.id)
}
}
@ -52,7 +41,6 @@ impl AbiExample for Builtin {
name: String::default(),
id: Pubkey::default(),
process_instruction_with_context: |_invoke_context| Ok(()),
default_compute_unit_cost: u64::default(),
}
}
}
@ -132,25 +120,21 @@ fn genesis_builtins() -> Vec<Builtin> {
"system_program",
system_program::id(),
system_instruction_processor::process_instruction,
150,
),
Builtin::new(
"vote_program",
solana_vote_program::id(),
solana_vote_program::vote_processor::process_instruction,
2100,
),
Builtin::new(
"stake_program",
stake::program::id(),
solana_stake_program::stake_instruction::process_instruction,
750,
),
Builtin::new(
"config_program",
solana_config_program::id(),
solana_config_program::config_processor::process_instruction,
450,
),
]
}
@ -163,7 +147,6 @@ fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
"compute_budget_program",
solana_sdk::compute_budget::id(),
solana_compute_budget_program::process_instruction,
150,
),
feature_id: feature_set::add_compute_budget_program::id(),
},
@ -172,7 +155,6 @@ fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
"address_lookup_table_program",
solana_address_lookup_table_program::id(),
solana_address_lookup_table_program::processor::process_instruction,
750,
),
feature_id: feature_set::versioned_tx_message_enabled::id(),
},
@ -181,10 +163,6 @@ fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
"zk_token_proof_program",
solana_zk_token_sdk::zk_token_proof_program::id(),
solana_zk_token_proof_program::process_instruction,
219_290, // zk proof program CU per instruction were sampled here:
// https://github.com/solana-labs/solana/pull/30639
// Picking `VerifyTransfer`'s CU as program default
// because it is the most used instruction.
),
feature_id: feature_set::zk_token_sdk_enabled::id(),
},

View File

@ -255,7 +255,6 @@ mod tests {
let builtin_programs = &[BuiltinProgram {
program_id: mock_system_program_id,
process_instruction: mock_system_process_instruction,
default_compute_unit_cost: 0,
}];
let accounts = vec![
@ -485,7 +484,6 @@ mod tests {
let builtin_programs = &[BuiltinProgram {
program_id: mock_program_id,
process_instruction: mock_system_process_instruction,
default_compute_unit_cost: 0,
}];
let accounts = vec![
@ -651,7 +649,6 @@ mod tests {
let builtin_programs = &[BuiltinProgram {
program_id: mock_program_id,
process_instruction: mock_process_instruction,
default_compute_unit_cost: 0,
}];
let mut secp256k1_account = AccountSharedData::new(1, 0, &native_loader::id());

View File

@ -3,7 +3,7 @@
#[rustversion::since(1.46.0)]
#[macro_export]
macro_rules! declare_builtin_name {
($name:ident, $id:path, $entrypoint:expr, $default_cost:expr) => {
($name:ident, $id:path, $entrypoint:expr) => {
#[macro_export]
macro_rules! $name {
() => {
@ -39,7 +39,6 @@ macro_rules! declare_builtin_name {
stringify!($name).to_string(),
::solana_sdk::respan!($crate::$id, $name)(),
$entrypoint,
$default_cost,
)
};
}
@ -49,16 +48,11 @@ macro_rules! declare_builtin_name {
#[rustversion::not(since(1.46.0))]
#[macro_export]
macro_rules! declare_builtin_name {
($name:ident, $id:path, $entrypoint:expr, $default_cost:expr) => {
($name:ident, $id:path, $entrypoint:expr) => {
#[macro_export]
macro_rules! $name {
() => {
(
stringify!($name).to_string(),
$crate::$id(),
$entrypoint,
$default_cost,
)
(stringify!($name).to_string(), $crate::$id(), $entrypoint)
};
}
};
@ -69,16 +63,15 @@ macro_rules! declare_builtin_name {
/// bs58_string: bs58 string representation the program's id
/// name: Name of the program
/// entrypoint: Program's entrypoint, must be of `type Entrypoint`
/// default_cost: Program's default compute units
/// id: Path to the program id access function, used if this macro is not
/// called in `src/lib`
#[macro_export]
macro_rules! declare_builtin {
($bs58_string:expr, $name:ident, $entrypoint:expr, $default_cost:expr) => {
$crate::declare_builtin!($bs58_string, $name, $entrypoint, $default_cost, id);
($bs58_string:expr, $name:ident, $entrypoint:expr) => {
$crate::declare_builtin!($bs58_string, $name, $entrypoint, id);
};
($bs58_string:expr, $name:ident, $entrypoint:expr, $default_cost:expr, $id:path) => {
($bs58_string:expr, $name:ident, $entrypoint:expr, $id:path) => {
$crate::declare_id!($bs58_string);
$crate::declare_builtin_name!($name, $id, $entrypoint, $default_cost);
$crate::declare_builtin_name!($name, $id, $entrypoint);
};
}