solana_system_program/
lib.rs1#![allow(clippy::arithmetic_side_effects)]
2pub mod system_instruction;
3pub mod system_processor;
4
5use solana_sdk::{
6 account::{AccountSharedData, ReadableAccount},
7 account_utils::StateMut,
8 nonce, system_program,
9};
10pub use system_program::id;
11
12#[derive(Copy, Clone, Debug, Eq, PartialEq)]
13pub enum SystemAccountKind {
14 System,
15 Nonce,
16}
17
18pub fn get_system_account_kind(account: &AccountSharedData) -> Option<SystemAccountKind> {
19 if system_program::check_id(account.owner()) {
20 if account.data().is_empty() {
21 Some(SystemAccountKind::System)
22 } else if account.data().len() == nonce::State::size() {
23 let nonce_versions: nonce::state::Versions = account.state().ok()?;
24 match nonce_versions.state() {
25 nonce::State::Uninitialized => None,
26 nonce::State::Initialized(_) => Some(SystemAccountKind::Nonce),
27 }
28 } else {
29 None
30 }
31 } else {
32 None
33 }
34}