Skip to main content

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