kora_lib/
constant.rs

1pub const SOL_MINT: &str = "So11111111111111111111111111111111111111112";
2pub const NATIVE_SOL: &str = "11111111111111111111111111111111";
3pub const LAMPORTS_PER_SIGNATURE: u64 = 5000;
4pub const ESTIMATED_LAMPORTS_FOR_PAYMENT_INSTRUCTION: u64 = 50;
5pub const MIN_BALANCE_FOR_RENT_EXEMPTION: u64 = 2_039_280;
6pub const DEFAULT_INTEREST_MULTIPLIER: u128 = 100 * 24 * 60 * 60 / 10000 / (365 * 24 * 60 * 60);
7
8// HTTP Headers
9pub const X_API_KEY: &str = "x-api-key";
10pub const X_HMAC_SIGNATURE: &str = "x-hmac-signature";
11pub const X_TIMESTAMP: &str = "x-timestamp";
12pub const DEFAULT_MAX_TIMESTAMP_AGE: i64 = 300;
13
14// External Services
15pub const JUPITER_API_LITE_URL: &str = "https://lite-api.jup.ag";
16pub const JUPITER_API_PRO_URL: &str = "https://api.jup.ag";
17
18// Metrics
19pub const DEFAULT_METRICS_ENDPOINT: &str = "/metrics";
20pub const DEFAULT_METRICS_PORT: u16 = 8080;
21pub const DEFAULT_METRICS_SCRAPE_INTERVAL: u64 = 60;
22
23// Cache
24pub const DEFAULT_CACHE_DEFAULT_TTL: u64 = 300; // 5 minutes
25pub const DEFAULT_CACHE_ACCOUNT_TTL: u64 = 60; // 1 minute for account data
26pub const DEFAULT_FEE_PAYER_BALANCE_METRICS_EXPIRY_SECONDS: u64 = 30; // 30 seconds
27
28pub const DEFAULT_USAGE_LIMIT_MAX_TRANSACTIONS: u64 = 0; // 0 = unlimited
29pub const DEFAULT_USAGE_LIMIT_FALLBACK_IF_UNAVAILABLE: bool = false;
30
31// Request body size limit
32pub const DEFAULT_MAX_REQUEST_BODY_SIZE: usize = 2 * 1024 * 1024; // 2 MB
33
34// Account Indexes within instructions
35// Instruction indexes for the instructions that we support to parse from the transaction
36pub mod instruction_indexes {
37    pub mod system_create_account {
38        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 1;
39        pub const PAYER_INDEX: usize = 0;
40    }
41
42    pub mod system_transfer {
43        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 2;
44        pub const SENDER_INDEX: usize = 0;
45        pub const RECEIVER_INDEX: usize = 1;
46    }
47
48    pub mod system_transfer_with_seed {
49        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
50        pub const SENDER_INDEX: usize = 1;
51        pub const RECEIVER_INDEX: usize = 2;
52    }
53
54    pub mod system_withdraw_nonce_account {
55        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 5;
56        pub const NONCE_AUTHORITY_INDEX: usize = 4;
57        pub const RECIPIENT_INDEX: usize = 1;
58    }
59
60    pub mod system_assign {
61        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 1;
62        pub const AUTHORITY_INDEX: usize = 0;
63    }
64
65    pub mod system_assign_with_seed {
66        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 2;
67        pub const AUTHORITY_INDEX: usize = 1;
68    }
69
70    pub mod system_allocate {
71        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 1;
72        pub const ACCOUNT_INDEX: usize = 0;
73    }
74
75    pub mod system_allocate_with_seed {
76        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 2;
77        pub const ACCOUNT_INDEX: usize = 1;
78    }
79
80    pub mod system_initialize_nonce_account {
81        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
82        pub const NONCE_ACCOUNT_INDEX: usize = 0;
83        // Authority is in instruction data, not accounts
84    }
85
86    pub mod system_advance_nonce_account {
87        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
88        pub const NONCE_ACCOUNT_INDEX: usize = 0;
89        pub const NONCE_AUTHORITY_INDEX: usize = 2;
90    }
91
92    pub mod system_authorize_nonce_account {
93        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 2;
94        pub const NONCE_ACCOUNT_INDEX: usize = 0;
95        pub const NONCE_AUTHORITY_INDEX: usize = 1;
96    }
97
98    // Note: system_upgrade_nonce_account not included - no authority parameter, cannot validate
99
100    pub mod spl_token_transfer {
101        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
102        pub const OWNER_INDEX: usize = 2;
103        pub const SOURCE_ADDRESS_INDEX: usize = 0;
104        pub const DESTINATION_ADDRESS_INDEX: usize = 1;
105    }
106
107    pub mod spl_token_transfer_checked {
108        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 4;
109        pub const OWNER_INDEX: usize = 3;
110        pub const MINT_INDEX: usize = 1;
111        pub const SOURCE_ADDRESS_INDEX: usize = 0;
112        pub const DESTINATION_ADDRESS_INDEX: usize = 2;
113    }
114
115    pub mod spl_token_burn {
116        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
117        pub const OWNER_INDEX: usize = 2;
118    }
119
120    pub mod spl_token_close_account {
121        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
122        pub const OWNER_INDEX: usize = 2;
123    }
124
125    pub mod spl_token_approve {
126        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
127        pub const OWNER_INDEX: usize = 2;
128    }
129
130    pub mod spl_token_approve_checked {
131        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 4;
132        pub const OWNER_INDEX: usize = 3;
133    }
134
135    pub mod spl_token_revoke {
136        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 2;
137        pub const OWNER_INDEX: usize = 1;
138    }
139
140    pub mod spl_token_set_authority {
141        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 2;
142        pub const CURRENT_AUTHORITY_INDEX: usize = 1;
143    }
144
145    pub mod spl_token_mint_to {
146        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
147        pub const MINT_AUTHORITY_INDEX: usize = 2;
148    }
149
150    pub mod spl_token_mint_to_checked {
151        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
152        pub const MINT_AUTHORITY_INDEX: usize = 2;
153    }
154
155    pub mod spl_token_initialize_mint {
156        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 2;
157        // Authority is in instruction data, not accounts
158    }
159
160    pub mod spl_token_initialize_mint2 {
161        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 1;
162        // Authority is in instruction data, not accounts
163    }
164
165    pub mod spl_token_initialize_account {
166        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 4;
167        // Owner is in account data at index 2
168        pub const OWNER_INDEX: usize = 2;
169    }
170
171    pub mod spl_token_initialize_account2 {
172        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
173        // Owner is in instruction data, not accounts
174    }
175
176    pub mod spl_token_initialize_account3 {
177        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 2;
178        // Owner is in instruction data, not accounts
179    }
180
181    pub mod spl_token_initialize_multisig {
182        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 2; // Minimum
183                                                          // Signers are accounts from index 2 onwards (after multisig account and rent sysvar)
184    }
185
186    pub mod spl_token_initialize_multisig2 {
187        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 1; // Minimum
188                                                          // Signers are accounts from index 1 onwards (after multisig account)
189    }
190
191    pub mod spl_token_freeze_account {
192        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
193        pub const FREEZE_AUTHORITY_INDEX: usize = 2;
194    }
195
196    pub mod spl_token_thaw_account {
197        pub const REQUIRED_NUMBER_OF_ACCOUNTS: usize = 3;
198        pub const FREEZE_AUTHORITY_INDEX: usize = 2;
199    }
200}