use borsh::{BorshDeserialize, BorshSerialize};
use shank::ShankInstruction;
#[derive(Debug, BorshSerialize, BorshDeserialize, ShankInstruction)]
pub enum RestakingInstruction {
#[account(0, writable, name = "config")]
#[account(1, writable, signer, name = "admin")]
#[account(2, name = "vault_program")]
#[account(3, name = "system_program")]
InitializeConfig,
#[account(0, writable, name = "config")]
#[account(1, writable, name = "ncn")]
#[account(2, writable, signer, name = "admin")]
#[account(3, signer, name = "base")]
#[account(4, name = "system_program")]
InitializeNcn,
#[account(0, writable, name = "config")]
#[account(1, writable, name = "operator")]
#[account(2, writable, signer, name = "admin")]
#[account(3, signer, name = "base")]
#[account(4, name = "system_program")]
InitializeOperator { operator_fee_bps: u16 },
#[account(0, name = "config")]
#[account(1, writable, name = "ncn")]
#[account(2, name = "vault")]
#[account(3, name = "slasher")]
#[account(4, name = "ncn_vault_ticket")]
#[account(5, writable, name = "ncn_vault_slasher_ticket")]
#[account(6, signer, name = "admin")]
#[account(7, writable, signer, name = "payer")]
#[account(8, name = "system_program")]
InitializeNcnVaultSlasherTicket { max_slashable_per_epoch: u64 },
#[account(0, name = "config")]
#[account(1, writable, name = "ncn")]
#[account(2, name = "vault")]
#[account(3, writable, name = "ncn_vault_ticket")]
#[account(4, signer, name = "admin")]
#[account(5, writable, signer, name = "payer")]
#[account(6, name = "system_program")]
InitializeNcnVaultTicket,
#[account(0, name = "config")]
#[account(1, writable, name = "operator")]
#[account(2, name = "vault")]
#[account(3, writable, name = "operator_vault_ticket")]
#[account(4, signer, name = "admin")]
#[account(5, writable, signer, name = "payer")]
#[account(6, name = "system_program")]
InitializeOperatorVaultTicket,
#[account(0, name = "config")]
#[account(1, writable, name = "ncn")]
#[account(2, writable, name = "operator")]
#[account(3, writable, name = "ncn_operator_state")]
#[account(4, signer, name = "admin")]
#[account(5, writable, signer, name = "payer")]
#[account(6, name = "system_program")]
InitializeNcnOperatorState,
#[account(0, name = "config")]
#[account(1, name = "ncn")]
#[account(2, name = "vault")]
#[account(3, writable, name = "ncn_vault_ticket")]
#[account(4, signer, name = "admin")]
WarmupNcnVaultTicket,
#[account(0, name = "config")]
#[account(1, name = "ncn")]
#[account(2, name = "vault")]
#[account(3, writable, name = "ncn_vault_ticket")]
#[account(4, signer, name = "admin")]
CooldownNcnVaultTicket,
#[account(0, name = "config")]
#[account(1, name = "ncn")]
#[account(2, name = "operator")]
#[account(3, writable, name = "ncn_operator_state")]
#[account(4, signer, name = "admin")]
NcnWarmupOperator,
#[account(0, name = "config")]
#[account(1, name = "ncn")]
#[account(2, name = "operator")]
#[account(3, writable, name = "ncn_operator_state")]
#[account(4, signer, name = "admin")]
NcnCooldownOperator,
#[account(0, name = "config")]
#[account(1, name = "ncn")]
#[account(2, name = "operator")]
#[account(3, writable, name = "ncn_operator_state")]
#[account(4, signer, name = "admin")]
OperatorWarmupNcn,
#[account(0, name = "config")]
#[account(1, name = "ncn")]
#[account(2, name = "operator")]
#[account(3, writable, name = "ncn_operator_state")]
#[account(4, signer, name = "admin")]
OperatorCooldownNcn,
#[account(0, name = "config")]
#[account(1, name = "ncn")]
#[account(2, name = "vault")]
#[account(3, name = "slasher")]
#[account(4, name = "ncn_vault_ticket")]
#[account(5, writable, name = "ncn_vault_slasher_ticket")]
#[account(6, signer, name = "admin")]
WarmupNcnVaultSlasherTicket,
#[account(0, name = "config")]
#[account(1, name = "ncn")]
#[account(2, name = "vault")]
#[account(3, name = "slasher")]
#[account(4, writable, name = "ncn_vault_slasher_ticket")]
#[account(5, signer, name = "admin")]
CooldownNcnVaultSlasherTicket,
#[account(0, name = "config")]
#[account(1, name = "operator")]
#[account(2, name = "vault")]
#[account(3, writable, name = "operator_vault_ticket")]
#[account(4, signer, name = "admin")]
WarmupOperatorVaultTicket,
#[account(0, name = "config")]
#[account(1, name = "operator")]
#[account(2, name = "vault")]
#[account(3, writable, name = "operator_vault_ticket")]
#[account(4, signer, name = "admin")]
CooldownOperatorVaultTicket,
#[account(0, writable, name = "ncn")]
#[account(1, signer, name = "old_admin")]
#[account(2, signer, name = "new_admin")]
NcnSetAdmin,
#[account(0, writable, name = "ncn")]
#[account(1, signer, name = "admin")]
#[account(2, name = "new_admin")]
NcnSetSecondaryAdmin(NcnAdminRole),
#[account(0, writable, name = "operator")]
#[account(1, signer, name = "old_admin")]
#[account(2, signer, name = "new_admin")]
OperatorSetAdmin,
#[account(0, writable, name = "operator")]
#[account(1, signer, name = "admin")]
#[account(2, name = "new_admin")]
OperatorSetSecondaryAdmin(OperatorAdminRole),
#[account(0, name = "config")]
#[account(1, writable, name = "operator")]
#[account(2, signer, name = "admin")]
OperatorSetFee { new_fee_bps: u16 },
#[account(0, name = "ncn")]
#[account(1, signer, name = "delegate_admin")]
#[account(2, name = "token_mint")]
#[account(3, writable, name = "token_account")]
#[account(4, name = "delegate")]
#[account(5, name = "token_program")]
NcnDelegateTokenAccount,
#[account(0, name = "operator")]
#[account(1, signer, name = "delegate_admin")]
#[account(2, name = "token_mint")]
#[account(3, writable, name = "token_account")]
#[account(4, name = "delegate")]
#[account(5, name = "token_program")]
OperatorDelegateTokenAccount,
#[account(0, writable, name = "config")]
#[account(1, signer, name = "old_admin")]
#[account(2, name = "new_admin")]
SetConfigAdmin,
}
#[derive(Debug, BorshSerialize, BorshDeserialize, PartialEq, Eq)]
pub enum NcnAdminRole {
OperatorAdmin,
VaultAdmin,
SlasherAdmin,
DelegateAdmin,
MetadataAdmin,
WeightTableAdmin,
NcnProgramAdmin,
}
#[derive(Debug, BorshSerialize, BorshDeserialize, PartialEq, Eq)]
pub enum OperatorAdminRole {
NcnAdmin,
VaultAdmin,
VoterAdmin,
DelegateAdmin,
MetadataAdmin,
}