11#[ cfg( RUSTC_WITH_SPECIALIZATION ) ]
22use solana_frozen_abi:: abi_example:: AbiExample ;
3+ #[ cfg( debug_assertions) ]
4+ #[ allow( deprecated) ]
5+ use solana_sdk:: AutoTraitBreakSendSync ;
36use {
47 crate :: system_instruction_processor,
58 solana_program_runtime:: {
@@ -108,7 +111,7 @@ pub enum BuiltinAction {
108111/// State transition enum used for adding and removing builtin programs through
109112/// feature activations.
110113#[ derive( Debug , Clone , AbiExample ) ]
111- pub enum BuiltinFeatureTransition {
114+ enum InnerBuiltinFeatureTransition {
112115 /// Add a builtin program if a feature is activated.
113116 Add {
114117 builtin : Builtin ,
@@ -123,6 +126,13 @@ pub enum BuiltinFeatureTransition {
123126 } ,
124127}
125128
129+ #[ allow( deprecated) ]
130+ #[ cfg( debug_assertions) ]
131+ impl AutoTraitBreakSendSync for InnerBuiltinFeatureTransition { }
132+
133+ #[ derive( AbiExample , Clone , Debug ) ]
134+ pub struct BuiltinFeatureTransition ( InnerBuiltinFeatureTransition ) ;
135+
126136// https://github.com/solana-labs/solana/pull/23233 added `BuiltinFeatureTransition`
127137// to `Bank` which triggers https://github.com/rust-lang/rust/issues/92987 while
128138// attempting to resolve `Sync` on `BankRc` in `AccountsBackgroundService::new` ala,
@@ -146,21 +156,21 @@ impl BuiltinFeatureTransition {
146156 & self ,
147157 should_apply_action_for_feature : & impl Fn ( & Pubkey ) -> bool ,
148158 ) -> Option < BuiltinAction > {
149- match self {
150- Self :: Add {
159+ match & self . 0 {
160+ InnerBuiltinFeatureTransition :: Add {
151161 builtin,
152- feature_id,
162+ ref feature_id,
153163 } => {
154164 if should_apply_action_for_feature ( feature_id) {
155165 Some ( BuiltinAction :: Add ( builtin. clone ( ) ) )
156166 } else {
157167 None
158168 }
159169 }
160- Self :: RemoveOrRetain {
170+ InnerBuiltinFeatureTransition :: RemoveOrRetain {
161171 previously_added_builtin,
162- addition_feature_id,
163- removal_feature_id,
172+ ref addition_feature_id,
173+ ref removal_feature_id,
164174 } => {
165175 if should_apply_action_for_feature ( removal_feature_id) {
166176 Some ( BuiltinAction :: Remove ( previously_added_builtin. id ) )
@@ -213,48 +223,48 @@ fn dummy_process_instruction(
213223/// Dynamic feature transitions for builtin programs
214224fn builtin_feature_transitions ( ) -> Vec < BuiltinFeatureTransition > {
215225 vec ! [
216- BuiltinFeatureTransition :: Add {
226+ BuiltinFeatureTransition ( InnerBuiltinFeatureTransition :: Add {
217227 builtin: Builtin :: new(
218228 "compute_budget_program" ,
219229 solana_sdk:: compute_budget:: id( ) ,
220230 solana_compute_budget_program:: process_instruction,
221231 ) ,
222232 feature_id: feature_set:: add_compute_budget_program:: id( ) ,
223- } ,
224- BuiltinFeatureTransition :: RemoveOrRetain {
233+ } ) ,
234+ BuiltinFeatureTransition ( InnerBuiltinFeatureTransition :: RemoveOrRetain {
225235 previously_added_builtin: Builtin :: new(
226236 "secp256k1_program" ,
227237 solana_sdk:: secp256k1_program:: id( ) ,
228238 dummy_process_instruction,
229239 ) ,
230240 addition_feature_id: feature_set:: secp256k1_program_enabled:: id( ) ,
231241 removal_feature_id: feature_set:: prevent_calling_precompiles_as_programs:: id( ) ,
232- } ,
233- BuiltinFeatureTransition :: RemoveOrRetain {
242+ } ) ,
243+ BuiltinFeatureTransition ( InnerBuiltinFeatureTransition :: RemoveOrRetain {
234244 previously_added_builtin: Builtin :: new(
235245 "ed25519_program" ,
236246 solana_sdk:: ed25519_program:: id( ) ,
237247 dummy_process_instruction,
238248 ) ,
239249 addition_feature_id: feature_set:: ed25519_program_enabled:: id( ) ,
240250 removal_feature_id: feature_set:: prevent_calling_precompiles_as_programs:: id( ) ,
241- } ,
242- BuiltinFeatureTransition :: Add {
251+ } ) ,
252+ BuiltinFeatureTransition ( InnerBuiltinFeatureTransition :: Add {
243253 builtin: Builtin :: new(
244254 "address_lookup_table_program" ,
245255 solana_address_lookup_table_program:: id( ) ,
246256 solana_address_lookup_table_program:: processor:: process_instruction,
247257 ) ,
248258 feature_id: feature_set:: versioned_tx_message_enabled:: id( ) ,
249- } ,
250- BuiltinFeatureTransition :: Add {
259+ } ) ,
260+ BuiltinFeatureTransition ( InnerBuiltinFeatureTransition :: Add {
251261 builtin: Builtin :: new(
252262 "zk_token_proof_program" ,
253263 solana_zk_token_sdk:: zk_token_proof_program:: id( ) ,
254264 with_program_logging!( solana_zk_token_proof_program:: process_instruction) ,
255265 ) ,
256266 feature_id: feature_set:: zk_token_sdk_enabled:: id( ) ,
257- } ,
267+ } ) ,
258268 ]
259269}
260270
0 commit comments