Allow feature builtins to overwrite existing builtins (#13403)
* Allow feature builtins to overwrite existing builtins * Add feature_builtin ActivationType * Correctly retain idempotent for replacing case * Fix test Co-authored-by: Ryo Onodera <ryoqun@gmail.com>
This commit is contained in:
@ -1,4 +1,7 @@
|
||||
use solana_runtime::bank::{Builtin, Builtins};
|
||||
use solana_runtime::{
|
||||
bank::{Builtin, Builtins},
|
||||
builtins::ActivationType,
|
||||
};
|
||||
use solana_sdk::{feature_set, genesis_config::ClusterType, pubkey::Pubkey};
|
||||
|
||||
/// Builtin programs that are always available
|
||||
@ -21,15 +24,16 @@ fn genesis_builtins(cluster_type: ClusterType) -> Vec<Builtin> {
|
||||
}
|
||||
|
||||
/// Builtin programs activated dynamically by feature
|
||||
fn feature_builtins() -> Vec<(Builtin, Pubkey)> {
|
||||
fn feature_builtins() -> Vec<(Builtin, Pubkey, ActivationType)> {
|
||||
let builtins = vec![(
|
||||
solana_bpf_loader_program!(),
|
||||
feature_set::bpf_loader2_program::id(),
|
||||
ActivationType::NewProgram,
|
||||
)];
|
||||
|
||||
builtins
|
||||
.into_iter()
|
||||
.map(|(b, p)| (Builtin::new(&b.0, b.1, b.2), p))
|
||||
.map(|(b, p, t)| (Builtin::new(&b.0, b.1, b.2), p, t))
|
||||
.collect()
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user