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:
Tyera Eulberg
2020-11-05 08:37:07 -07:00
committed by GitHub
parent 118ce47b97
commit bc62313c66
6 changed files with 158 additions and 43 deletions

View File

@ -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()
}