miraland_runtime/
builtins.rs

1use {
2    miraland_program_runtime::invoke_context::BuiltinFunctionWithContext,
3    miraland_sdk::{
4        bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, feature_set, pubkey::Pubkey,
5    },
6};
7
8/// Transitions of built-in programs at epoch bondaries when features are activated.
9pub struct BuiltinPrototype {
10    pub feature_id: Option<Pubkey>,
11    pub program_id: Pubkey,
12    pub name: &'static str,
13    pub entrypoint: BuiltinFunctionWithContext,
14}
15
16impl std::fmt::Debug for BuiltinPrototype {
17    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
18        let mut builder = f.debug_struct("BuiltinPrototype");
19        builder.field("program_id", &self.program_id);
20        builder.field("name", &self.name);
21        builder.field("feature_id", &self.feature_id);
22        builder.finish()
23    }
24}
25
26#[cfg(RUSTC_WITH_SPECIALIZATION)]
27impl miraland_frozen_abi::abi_example::AbiExample for BuiltinPrototype {
28    fn example() -> Self {
29        // BuiltinPrototype isn't serializable by definition.
30        miraland_program_runtime::declare_process_instruction!(MockBuiltin, 0, |_invoke_context| {
31            // Do nothing
32            Ok(())
33        });
34        Self {
35            feature_id: None,
36            program_id: Pubkey::default(),
37            name: "",
38            entrypoint: MockBuiltin::vm,
39        }
40    }
41}
42
43pub static BUILTINS: &[BuiltinPrototype] = &[
44    BuiltinPrototype {
45        feature_id: None,
46        program_id: miraland_system_program::id(),
47        name: "system_program",
48        entrypoint: miraland_system_program::system_processor::Entrypoint::vm,
49    },
50    BuiltinPrototype {
51        feature_id: None,
52        program_id: miraland_vote_program::id(),
53        name: "vote_program",
54        entrypoint: miraland_vote_program::vote_processor::Entrypoint::vm,
55    },
56    BuiltinPrototype {
57        feature_id: None,
58        program_id: miraland_stake_program::id(),
59        name: "stake_program",
60        entrypoint: miraland_stake_program::stake_instruction::Entrypoint::vm,
61    },
62    BuiltinPrototype {
63        feature_id: None,
64        program_id: miraland_config_program::id(),
65        name: "config_program",
66        entrypoint: miraland_config_program::config_processor::Entrypoint::vm,
67    },
68    BuiltinPrototype {
69        feature_id: None,
70        program_id: bpf_loader_deprecated::id(),
71        name: "miraland_bpf_loader_deprecated_program",
72        entrypoint: miraland_bpf_loader_program::Entrypoint::vm,
73    },
74    BuiltinPrototype {
75        feature_id: None,
76        program_id: bpf_loader::id(),
77        name: "miraland_bpf_loader_program",
78        entrypoint: miraland_bpf_loader_program::Entrypoint::vm,
79    },
80    BuiltinPrototype {
81        feature_id: None,
82        program_id: bpf_loader_upgradeable::id(),
83        name: "miraland_bpf_loader_upgradeable_program",
84        entrypoint: miraland_bpf_loader_program::Entrypoint::vm,
85    },
86    BuiltinPrototype {
87        feature_id: None,
88        program_id: miraland_sdk::compute_budget::id(),
89        name: "compute_budget_program",
90        entrypoint: miraland_compute_budget_program::Entrypoint::vm,
91    },
92    BuiltinPrototype {
93        feature_id: None,
94        program_id: miraland_sdk::address_lookup_table::program::id(),
95        name: "address_lookup_table_program",
96        entrypoint: miraland_address_lookup_table_program::processor::Entrypoint::vm,
97    },
98    BuiltinPrototype {
99        feature_id: Some(feature_set::zk_token_sdk_enabled::id()),
100        program_id: miraland_zk_token_sdk::zk_token_proof_program::id(),
101        name: "zk_token_proof_program",
102        entrypoint: miraland_zk_token_proof_program::Entrypoint::vm,
103    },
104    BuiltinPrototype {
105        feature_id: Some(feature_set::enable_program_runtime_v2_and_loader_v4::id()),
106        program_id: miraland_sdk::loader_v4::id(),
107        name: "loader_v4",
108        entrypoint: miraland_loader_v4_program::Entrypoint::vm,
109    },
110];