miner_api/consts.rs
1use solana_program::{pubkey, pubkey::Pubkey};
2
3/// Liczba miejsc dziesiętnych tokena.
4pub const TOKEN_DECIMALS: u8 = 9;
5
6/// Jeden token w jednostkach natywnych.
7pub const ONE_TOKEN: u64 = 10u64.pow(TOKEN_DECIMALS as u32);
8
9/// Emisja: 10 tokenów na minutę.
10pub const EMISSION_PER_MINUTE: u64 = 10 * ONE_TOKEN;
11
12/// Startowa długość rundy w sekundach (parametr w Config, zmienny
13/// przez update_config — od kadencji "ORE feel" po oszczędną).
14pub const INITIAL_ROUND_SECONDS: u64 = 60;
15
16/// Granice długości rundy dla update_config.
17pub const MIN_ROUND_SECONDS: u64 = 10;
18pub const MAX_ROUND_SECONDS: u64 = 3600;
19
20/// Budżet rundy dla zadanej długości: emisja 10 tok./min pro-rata.
21/// Runda bez żadnego submitu = emisja przepada (nic nie jest mintowane).
22pub const fn round_budget(round_seconds: u64) -> u64 {
23 EMISSION_PER_MINUTE * round_seconds / 60
24}
25
26/// Ile rund wstecz przechowujemy konta Round zanim można je zamknąć
27/// (odzysk rentu — crank domyka stare rundy i odzyskuje float).
28/// 2880 rund × 60 s = 2 dni na rozliczenie nagrody przy starcie.
29pub const ROUND_RETENTION: u64 = 2880;
30
31/// Startowa minimalna trudność hasha (wiodące bity zerowe).
32/// 20 bitów ~= 1 mln hashy: kilka sekund na desktopie, kilkanaście na
33/// słabym CPU — proof-of-liveness ma zajmować chwilę, nie być wyścigiem.
34pub const INITIAL_MIN_DIFFICULTY: u64 = 20;
35
36/// Startowa waga bazowa (free tier) w jednostkach natywnych tokena.
37/// Denominacja czysto w tokenach: każdy 1 token salda = +1% mocy względem
38/// bazy (100 tokenów = 2×). Strojona przez update_config.
39pub const INITIAL_BASE_WEIGHT: u64 = 100 * ONE_TOKEN;
40
41/// Seedy PDA.
42pub const CONFIG_SEED: &[u8] = b"config";
43pub const TREASURY_SEED: &[u8] = b"treasury";
44pub const ROUND_SEED: &[u8] = b"round";
45pub const MINER_SEED: &[u8] = b"miner";
46
47/// Programy zewnętrzne (kanoniczne adresy).
48pub const SPL_TOKEN_PROGRAM_ID: Pubkey = pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
49pub const ASSOCIATED_TOKEN_PROGRAM_ID: Pubkey =
50 pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
51pub const SYSTEM_PROGRAM_ID: Pubkey = pubkey!("11111111111111111111111111111111");
52pub const SLOT_HASHES_SYSVAR_ID: Pubkey =
53 pubkey!("SysvarS1otHashes111111111111111111111111111");
54
55/// Indeks instrukcji MintTo w programie SPL Token.
56pub const SPL_TOKEN_MINT_TO_IX: u8 = 7;