use crate::{
bpf_loader_upgradeable::{BPFLoaderUpgradeable, UpgradeableLoaderAccount},
state::*,
};
use anchor_lang::prelude::*;
#[derive(Accounts)]
#[instruction(bump: u8, name: String, description: String)]
pub struct NewMigrator<'info> {
#[account(
init,
seeds = [
b"migrator".as_ref(),
program.key().to_bytes().as_ref()
],
bump = bump,
payer = payer,
space = std::mem::size_of::<Migrator>() + name.as_bytes().len() + description.as_bytes().len()
)]
pub migrator: Account<'info, Migrator>,
pub approver: UncheckedAccount<'info>,
pub program: UncheckedAccount<'info>,
pub program_data: UncheckedAccount<'info>,
pub payer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[derive(Accounts)]
pub struct DeployProgram<'info> {
pub approved_migration: ApprovedMigration<'info>,
pub program: UndeployedProgram<'info>,
pub rent: Sysvar<'info, Rent>,
pub clock: Sysvar<'info, Clock>,
pub system_program: Program<'info, System>,
pub bpf_loader_upgradeable_program: Program<'info, BPFLoaderUpgradeable>,
}
#[derive(Accounts)]
pub struct UpgradeProgram<'info> {
pub approved_migration: ApprovedMigration<'info>,
pub program: LiveProgram<'info>,
pub rent: Sysvar<'info, Rent>,
pub clock: Sysvar<'info, Clock>,
pub system_program: Program<'info, System>,
pub bpf_loader_upgradeable_program: Program<'info, BPFLoaderUpgradeable>,
}
#[derive(Accounts)]
pub struct ReserveProgramID<'info> {
pub program: Signer<'info>,
pub payer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[derive(Accounts)]
pub struct ApproveMigration<'info> {
pub migrator: Account<'info, Migrator>,
pub migration: Account<'info, Migration>,
pub approver: Signer<'info>,
}
#[derive(Accounts)]
pub struct RejectMigration<'info> {
pub migrator: Account<'info, Migrator>,
pub migration: Account<'info, Migration>,
pub approver: Signer<'info>,
}
#[derive(Accounts)]
#[instruction(bump: u8, title: String, description: String)]
pub struct ProposeMigration<'info> {
pub migrator: Account<'info, Migrator>,
#[account(
init,
seeds = [
b"migration".as_ref(),
migrator.num_migrations.to_le_bytes().as_ref()
],
bump = bump,
payer = proposer,
space = std::mem::size_of::<Migration>() + title.as_bytes().len() + description.as_bytes().len()
)]
pub migration: Account<'info, Migration>,
pub buffer: Account<'info, UpgradeableLoaderAccount>,
pub proposer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[derive(Accounts)]
pub struct UndeployedProgram<'info> {
pub program: UncheckedAccount<'info>,
pub program_data: UncheckedAccount<'info>,
}
#[derive(Accounts)]
pub struct LiveProgram<'info> {
pub program: Account<'info, UpgradeableLoaderAccount>,
pub program_data: Account<'info, UpgradeableLoaderAccount>,
}
#[derive(Accounts)]
pub struct ApprovedMigration<'info> {
pub migrator: Account<'info, Migrator>,
pub migration: Account<'info, Migration>,
pub buffer: Account<'info, UpgradeableLoaderAccount>,
pub executor: Signer<'info>,
}