(cherry picked from commit 5e0086c1ee
)
# Conflicts:
# runtime/src/builtins.rs
Co-authored-by: Trent Nelson <trent@solana.com>
This commit is contained in:
@ -1,5 +1,8 @@
|
|||||||
#[cfg(RUSTC_WITH_SPECIALIZATION)]
|
#[cfg(RUSTC_WITH_SPECIALIZATION)]
|
||||||
use solana_frozen_abi::abi_example::AbiExample;
|
use solana_frozen_abi::abi_example::AbiExample;
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
#[allow(deprecated)]
|
||||||
|
use solana_sdk::AutoTraitBreakSendSync;
|
||||||
use {
|
use {
|
||||||
crate::system_instruction_processor,
|
crate::system_instruction_processor,
|
||||||
solana_program_runtime::{
|
solana_program_runtime::{
|
||||||
@ -104,7 +107,7 @@ pub enum BuiltinAction {
|
|||||||
/// State transition enum used for adding and removing builtin programs through
|
/// State transition enum used for adding and removing builtin programs through
|
||||||
/// feature activations.
|
/// feature activations.
|
||||||
#[derive(Debug, Clone, AbiExample)]
|
#[derive(Debug, Clone, AbiExample)]
|
||||||
pub enum BuiltinFeatureTransition {
|
enum InnerBuiltinFeatureTransition {
|
||||||
/// Add a builtin program if a feature is activated.
|
/// Add a builtin program if a feature is activated.
|
||||||
Add {
|
Add {
|
||||||
builtin: Builtin,
|
builtin: Builtin,
|
||||||
@ -119,6 +122,13 @@ pub enum BuiltinFeatureTransition {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(deprecated)]
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
impl AutoTraitBreakSendSync for InnerBuiltinFeatureTransition {}
|
||||||
|
|
||||||
|
#[derive(AbiExample, Clone, Debug)]
|
||||||
|
pub struct BuiltinFeatureTransition(InnerBuiltinFeatureTransition);
|
||||||
|
|
||||||
// https://github.com/solana-labs/solana/pull/23233 added `BuiltinFeatureTransition`
|
// https://github.com/solana-labs/solana/pull/23233 added `BuiltinFeatureTransition`
|
||||||
// to `Bank` which triggers https://github.com/rust-lang/rust/issues/92987 while
|
// to `Bank` which triggers https://github.com/rust-lang/rust/issues/92987 while
|
||||||
// attempting to resolve `Sync` on `BankRc` in `AccountsBackgroundService::new` ala,
|
// attempting to resolve `Sync` on `BankRc` in `AccountsBackgroundService::new` ala,
|
||||||
@ -142,10 +152,10 @@ impl BuiltinFeatureTransition {
|
|||||||
&self,
|
&self,
|
||||||
should_apply_action_for_feature: &impl Fn(&Pubkey) -> bool,
|
should_apply_action_for_feature: &impl Fn(&Pubkey) -> bool,
|
||||||
) -> Option<BuiltinAction> {
|
) -> Option<BuiltinAction> {
|
||||||
match self {
|
match &self.0 {
|
||||||
Self::Add {
|
InnerBuiltinFeatureTransition::Add {
|
||||||
builtin,
|
builtin,
|
||||||
feature_id,
|
ref feature_id,
|
||||||
} => {
|
} => {
|
||||||
if should_apply_action_for_feature(feature_id) {
|
if should_apply_action_for_feature(feature_id) {
|
||||||
Some(BuiltinAction::Add(builtin.clone()))
|
Some(BuiltinAction::Add(builtin.clone()))
|
||||||
@ -153,10 +163,10 @@ impl BuiltinFeatureTransition {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Self::RemoveOrRetain {
|
InnerBuiltinFeatureTransition::RemoveOrRetain {
|
||||||
previously_added_builtin,
|
previously_added_builtin,
|
||||||
addition_feature_id,
|
ref addition_feature_id,
|
||||||
removal_feature_id,
|
ref removal_feature_id,
|
||||||
} => {
|
} => {
|
||||||
if should_apply_action_for_feature(removal_feature_id) {
|
if should_apply_action_for_feature(removal_feature_id) {
|
||||||
Some(BuiltinAction::Remove(previously_added_builtin.id))
|
Some(BuiltinAction::Remove(previously_added_builtin.id))
|
||||||
@ -209,15 +219,15 @@ fn dummy_process_instruction(
|
|||||||
/// Dynamic feature transitions for builtin programs
|
/// Dynamic feature transitions for builtin programs
|
||||||
fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
|
fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
|
||||||
vec![
|
vec![
|
||||||
BuiltinFeatureTransition::Add {
|
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
|
||||||
builtin: Builtin::new(
|
builtin: Builtin::new(
|
||||||
"compute_budget_program",
|
"compute_budget_program",
|
||||||
solana_sdk::compute_budget::id(),
|
solana_sdk::compute_budget::id(),
|
||||||
solana_compute_budget_program::process_instruction,
|
solana_compute_budget_program::process_instruction,
|
||||||
),
|
),
|
||||||
feature_id: feature_set::add_compute_budget_program::id(),
|
feature_id: feature_set::add_compute_budget_program::id(),
|
||||||
},
|
}),
|
||||||
BuiltinFeatureTransition::RemoveOrRetain {
|
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
|
||||||
previously_added_builtin: Builtin::new(
|
previously_added_builtin: Builtin::new(
|
||||||
"secp256k1_program",
|
"secp256k1_program",
|
||||||
solana_sdk::secp256k1_program::id(),
|
solana_sdk::secp256k1_program::id(),
|
||||||
@ -225,8 +235,8 @@ fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
|
|||||||
),
|
),
|
||||||
addition_feature_id: feature_set::secp256k1_program_enabled::id(),
|
addition_feature_id: feature_set::secp256k1_program_enabled::id(),
|
||||||
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
|
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
|
||||||
},
|
}),
|
||||||
BuiltinFeatureTransition::RemoveOrRetain {
|
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
|
||||||
previously_added_builtin: Builtin::new(
|
previously_added_builtin: Builtin::new(
|
||||||
"ed25519_program",
|
"ed25519_program",
|
||||||
solana_sdk::ed25519_program::id(),
|
solana_sdk::ed25519_program::id(),
|
||||||
@ -234,15 +244,15 @@ fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
|
|||||||
),
|
),
|
||||||
addition_feature_id: feature_set::ed25519_program_enabled::id(),
|
addition_feature_id: feature_set::ed25519_program_enabled::id(),
|
||||||
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
|
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
|
||||||
},
|
}),
|
||||||
BuiltinFeatureTransition::Add {
|
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
|
||||||
builtin: Builtin::new(
|
builtin: Builtin::new(
|
||||||
"address_lookup_table_program",
|
"address_lookup_table_program",
|
||||||
solana_address_lookup_table_program::id(),
|
solana_address_lookup_table_program::id(),
|
||||||
solana_address_lookup_table_program::processor::process_instruction,
|
solana_address_lookup_table_program::processor::process_instruction,
|
||||||
),
|
),
|
||||||
feature_id: feature_set::versioned_tx_message_enabled::id(),
|
feature_id: feature_set::versioned_tx_message_enabled::id(),
|
||||||
},
|
}),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,6 +96,14 @@ pub use solana_sdk_macro::pubkeys;
|
|||||||
#[rustversion::since(1.46.0)]
|
#[rustversion::since(1.46.0)]
|
||||||
pub use solana_sdk_macro::respan;
|
pub use solana_sdk_macro::respan;
|
||||||
|
|
||||||
|
#[deprecated(
|
||||||
|
since = "1.9.0",
|
||||||
|
note = "use only to break https://github.com/rust-lang/rust/issues/92987. remove when we move to Rust 1.60.0"
|
||||||
|
)]
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
pub trait AutoTraitBreakSendSync: Send + Sync {}
|
||||||
|
|
||||||
// Unused `solana_sdk::program_stubs!()` macro retained for source backwards compatibility with older programs
|
// Unused `solana_sdk::program_stubs!()` macro retained for source backwards compatibility with older programs
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
#[deprecated(
|
#[deprecated(
|
||||||
|
Reference in New Issue
Block a user