0.5.1
This commit is contained in:
82
khbb_lib/src/program_registry.rs
Normal file
82
khbb_lib/src/program_registry.rs
Normal file
@@ -0,0 +1,82 @@
|
||||
// file: khbb_lib/src/program_registry.rs
|
||||
|
||||
//! Registry of known Solana programs used for early domain classification.
|
||||
|
||||
/// Known Solana program family.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||
pub enum KhbbKnownProgram {
|
||||
/// SPL Token program.
|
||||
SplToken,
|
||||
/// SPL Token-2022 program.
|
||||
SplToken2022,
|
||||
/// System program.
|
||||
System,
|
||||
/// Compute budget program.
|
||||
ComputeBudget,
|
||||
/// Associated token account program.
|
||||
AssociatedTokenAccount,
|
||||
}
|
||||
|
||||
/// Returns the known program classification for a given program id.
|
||||
pub(crate) fn classify_known_program_id(program_id: &str) -> std::option::Option<KhbbKnownProgram> {
|
||||
match program_id {
|
||||
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" => Some(KhbbKnownProgram::SplToken),
|
||||
"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" => Some(KhbbKnownProgram::SplToken2022),
|
||||
"11111111111111111111111111111111" => Some(KhbbKnownProgram::System),
|
||||
"ComputeBudget111111111111111111111111111111" => Some(KhbbKnownProgram::ComputeBudget),
|
||||
"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" => {
|
||||
Some(KhbbKnownProgram::AssociatedTokenAccount)
|
||||
},
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Detects known program mentions in a transaction log line.
|
||||
///
|
||||
/// This is intentionally simple and string-based in the first version.
|
||||
pub(crate) fn classify_known_program_from_log_line(
|
||||
log_line: &str,
|
||||
) -> std::option::Option<KhbbKnownProgram> {
|
||||
if log_line.contains("Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") {
|
||||
return Some(KhbbKnownProgram::SplToken);
|
||||
}
|
||||
if log_line.contains("Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb") {
|
||||
return Some(KhbbKnownProgram::SplToken2022);
|
||||
}
|
||||
if log_line.contains("Program 11111111111111111111111111111111") {
|
||||
return Some(KhbbKnownProgram::System);
|
||||
}
|
||||
if log_line.contains("Program ComputeBudget111111111111111111111111111111") {
|
||||
return Some(KhbbKnownProgram::ComputeBudget);
|
||||
}
|
||||
if log_line.contains("Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL") {
|
||||
return Some(KhbbKnownProgram::AssociatedTokenAccount);
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[test]
|
||||
fn classify_known_program_id_detects_spl_token() {
|
||||
let result =
|
||||
super::classify_known_program_id("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
|
||||
assert_eq!(result, Some(super::KhbbKnownProgram::SplToken));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn classify_known_program_from_log_line_detects_compute_budget() {
|
||||
let result = super::classify_known_program_from_log_line(
|
||||
"Program ComputeBudget111111111111111111111111111111 invoke [1]",
|
||||
);
|
||||
assert_eq!(result, Some(super::KhbbKnownProgram::ComputeBudget));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn classify_known_program_from_log_line_returns_none_for_unknown_program() {
|
||||
let result = super::classify_known_program_from_log_line(
|
||||
"Program SomeUnknown111111111111111111111111111111 invoke [1]",
|
||||
);
|
||||
assert!(result.is_none());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user