solana-validator-optimizer 2.2.1

Optimized Solana validator tool with snapshot prefetching, RPC caching, and Prometheus metrics.
Documentation
use serde::Serialize;

const MICRO_LAMPORTS_PER_LAMPORT: u64 = 1_000_000;

#[derive(Debug, Clone, Serialize)]
pub struct PriorityFeeAdvice {
    pub compute_units: u64,
    pub micro_lamports_per_compute_unit: u64,
    pub estimated_priority_fee_lamports: u64,
    pub estimated_priority_fee_sol: f64,
    pub risk_level: String,
    pub recommendation: String,
}

pub fn advise_priority_fee(
    compute_units: u64,
    micro_lamports_per_compute_unit: u64,
) -> PriorityFeeAdvice {
    let estimated_priority_fee_lamports =
        compute_units.saturating_mul(micro_lamports_per_compute_unit) / MICRO_LAMPORTS_PER_LAMPORT;

    let estimated_priority_fee_sol = estimated_priority_fee_lamports as f64 / 1_000_000_000_f64;

    let (risk_level, recommendation) = classify_fee(
        compute_units,
        micro_lamports_per_compute_unit,
        estimated_priority_fee_lamports,
    );

    PriorityFeeAdvice {
        compute_units,
        micro_lamports_per_compute_unit,
        estimated_priority_fee_lamports,
        estimated_priority_fee_sol,
        risk_level,
        recommendation,
    }
}

fn classify_fee(
    compute_units: u64,
    micro_lamports_per_compute_unit: u64,
    estimated_priority_fee_lamports: u64,
) -> (String, String) {
    if compute_units == 0 {
        return (
            "Invalid".to_string(),
            "Compute units must be greater than zero.".to_string(),
        );
    }

    if micro_lamports_per_compute_unit == 0 {
        return (
            "Low".to_string(),
            "No priority fee is configured. This may be acceptable during low network activity but can reduce transaction landing reliability during congestion.".to_string(),
        );
    }

    if estimated_priority_fee_lamports < 100 {
        return (
            "Low".to_string(),
            "Priority fee is very low. Consider increasing compute unit price for production marketplace, reward, or high-frequency transaction flows.".to_string(),
        );
    }

    if estimated_priority_fee_lamports <= 5_000 {
        return (
            "Normal".to_string(),
            "Priority fee appears reasonable for moderate load. Monitor transaction landing rate and RPC latency in production.".to_string(),
        );
    }

    if estimated_priority_fee_lamports <= 50_000 {
        return (
            "Elevated".to_string(),
            "Priority fee is elevated. This may improve landing probability during congestion but should be monitored for cost impact.".to_string(),
        );
    }

    (
        "High".to_string(),
        "Priority fee is high. Verify that this is intentional and justified by congestion, latency-sensitive flows, or high-value transactions.".to_string(),
    )
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn calculates_priority_fee_in_lamports() {
        let advice = advise_priority_fee(250_000, 1_000);
        assert_eq!(advice.estimated_priority_fee_lamports, 250);
    }

    #[test]
    fn detects_zero_compute_units() {
        let advice = advise_priority_fee(0, 1_000);
        assert_eq!(advice.risk_level, "Invalid");
    }

    #[test]
    fn detects_zero_priority_fee() {
        let advice = advise_priority_fee(250_000, 0);
        assert_eq!(advice.risk_level, "Low");
    }
}