solana_builtins/core_bpf_migration.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
use solana_pubkey::Pubkey;
/// Identifies the type of built-in program targeted for Core BPF migration.
/// The type of target determines whether the program should have a program
/// account or not, which is checked before migration.
#[allow(dead_code)] // Remove after first migration is configured.
#[derive(Debug, PartialEq)]
pub enum CoreBpfMigrationTargetType {
/// A standard (stateful) builtin program must have a program account.
Builtin,
/// A stateless builtin must not have a program account.
Stateless,
}
/// Configuration for migrating a built-in program to Core BPF.
#[derive(Debug, PartialEq)]
pub struct CoreBpfMigrationConfig {
/// The address of the source buffer account to be used to replace the
/// builtin.
pub source_buffer_address: Pubkey,
/// The authority to be used as the BPF program's upgrade authority.
///
/// Note: If this value is set to `None`, then the migration will ignore
/// the source buffer account's authority. If it's set to any `Some(..)`
/// value, then the migration will perform a sanity check to ensure the
/// source buffer account's authority matches the provided value.
pub upgrade_authority_address: Option<Pubkey>,
/// The feature gate to trigger the migration to Core BPF.
/// Note: This feature gate should never be the same as any builtin's
/// `enable_feature_id`. It should always be a feature gate that will be
/// activated after the builtin is already enabled.
pub feature_id: Pubkey,
/// The type of target to replace.
pub migration_target: CoreBpfMigrationTargetType,
/// Static message used to emit datapoint logging.
/// This is used to identify the migration in the logs.
/// Should be unique to the migration, ie:
/// "migrate_{builtin/stateless}_to_core_bpf_{program_name}".
pub datapoint_name: &'static str,
}