miner-api 0.1.0

Instructions, state and SDK for the MINER protocol - a proof-of-work mined SPL token where holdings boost mining power
Documentation
use solana_program::{pubkey, pubkey::Pubkey};

/// Liczba miejsc dziesiętnych tokena.
pub const TOKEN_DECIMALS: u8 = 9;

/// Jeden token w jednostkach natywnych.
pub const ONE_TOKEN: u64 = 10u64.pow(TOKEN_DECIMALS as u32);

/// Emisja: 10 tokenów na minutę.
pub const EMISSION_PER_MINUTE: u64 = 10 * ONE_TOKEN;

/// Startowa długość rundy w sekundach (parametr w Config, zmienny
/// przez update_config — od kadencji "ORE feel" po oszczędną).
pub const INITIAL_ROUND_SECONDS: u64 = 60;

/// Granice długości rundy dla update_config.
pub const MIN_ROUND_SECONDS: u64 = 10;
pub const MAX_ROUND_SECONDS: u64 = 3600;

/// Budżet rundy dla zadanej długości: emisja 10 tok./min pro-rata.
/// Runda bez żadnego submitu = emisja przepada (nic nie jest mintowane).
pub const fn round_budget(round_seconds: u64) -> u64 {
    EMISSION_PER_MINUTE * round_seconds / 60
}

/// Ile rund wstecz przechowujemy konta Round zanim można je zamknąć
/// (odzysk rentu — crank domyka stare rundy i odzyskuje float).
/// 2880 rund × 60 s = 2 dni na rozliczenie nagrody przy starcie.
pub const ROUND_RETENTION: u64 = 2880;

/// Startowa minimalna trudność hasha (wiodące bity zerowe).
/// 20 bitów ~= 1 mln hashy: kilka sekund na desktopie, kilkanaście na
/// słabym CPU — proof-of-liveness ma zajmować chwilę, nie być wyścigiem.
pub const INITIAL_MIN_DIFFICULTY: u64 = 20;

/// Startowa waga bazowa (free tier) w jednostkach natywnych tokena.
/// Denominacja czysto w tokenach: każdy 1 token salda = +1% mocy względem
/// bazy (100 tokenów = 2×). Strojona przez update_config.
pub const INITIAL_BASE_WEIGHT: u64 = 100 * ONE_TOKEN;

/// Seedy PDA.
pub const CONFIG_SEED: &[u8] = b"config";
pub const TREASURY_SEED: &[u8] = b"treasury";
pub const ROUND_SEED: &[u8] = b"round";
pub const MINER_SEED: &[u8] = b"miner";

/// Programy zewnętrzne (kanoniczne adresy).
pub const SPL_TOKEN_PROGRAM_ID: Pubkey = pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
pub const ASSOCIATED_TOKEN_PROGRAM_ID: Pubkey =
    pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
pub const SYSTEM_PROGRAM_ID: Pubkey = pubkey!("11111111111111111111111111111111");
pub const SLOT_HASHES_SYSVAR_ID: Pubkey =
    pubkey!("SysvarS1otHashes111111111111111111111111111");

/// Indeks instrukcji MintTo w programie SPL Token.
pub const SPL_TOKEN_MINT_TO_IX: u8 = 7;