spl_token_2022_interface/extension/cpi_guard/
mod.rs

1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3use {
4    crate::{
5        extension::{BaseStateWithExtensions, Extension, ExtensionType, StateWithExtensionsMut},
6        state::Account,
7    },
8    bytemuck::{Pod, Zeroable},
9    spl_pod::primitives::PodBool,
10};
11
12/// CPI Guard extension instructions
13pub mod instruction;
14
15/// CPI Guard extension for Accounts
16#[repr(C)]
17#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
19#[derive(Clone, Copy, Debug, Default, PartialEq, Pod, Zeroable)]
20pub struct CpiGuard {
21    /// Lock privileged token operations from happening via CPI
22    pub lock_cpi: PodBool,
23}
24impl Extension for CpiGuard {
25    const TYPE: ExtensionType = ExtensionType::CpiGuard;
26}
27
28/// Determine if CPI Guard is enabled for this account
29pub fn cpi_guard_enabled(account_state: &StateWithExtensionsMut<Account>) -> bool {
30    if let Ok(extension) = account_state.get_extension::<CpiGuard>() {
31        return extension.lock_cpi.into();
32    }
33    false
34}