1#![allow(unexpected_cfgs)]
2#![allow(deprecated)]
3
4use anchor_lang::prelude::*;
5use pyth_solana_receiver_sdk::price_update::PriceUpdateV2;
6
7use crate::state::{
9 model_params::ModelParameters,
10 model_results::ModelResults,
11 model_features::ModelFeatures,
12 model_experiments::ModelExperiments,
13 data_prices::DataPrices,
14};
15
16declare_id!("GWVfXsjLBfbLvHpuwXPR6jYsCPSCcbMXaKBZvNLM1bgJ");
18
19pub use instructions::initialize;
21
22pub mod models;
24
25pub mod instructions;
27
28pub mod state;
30
31pub mod data;
33
34pub mod errors;
36
37#[program]
38pub mod luciene {
39
40 use super::*;
41
42 pub fn initialize_params(ctx: Context<InitializeParams>, weights: [f32; 5], bias: f32,
44 ) -> Result<()> {
45 instructions::initialize::initialize_params(ctx, weights, bias)
46 }
47
48 pub fn initialize_results(ctx: Context<InitializeResults>) -> Result<()> {
50 instructions::initialize::initialize_results(ctx)
51 }
52
53 pub fn initialize_features(ctx: Context<InitializeFeatures>) -> Result<()> {
55 instructions::initialize::initialize_features(ctx)
56 }
57
58 pub fn initialize_experiments(ctx: Context<InitializeExperiments>) -> Result<()> {
60 instructions::initialize::initialize_experiments(ctx)
61 }
62
63 pub fn initialize_data_prices(ctx: Context<InitializeDataPrices>) -> Result<()> {
65 instructions::initialize::initialize_data_prices(ctx)
66 }
67
68 pub fn fetch_and_store_price(ctx: Context<FetchPrice>) -> Result<()> {
70 instructions::fetch_price::fetch_and_store_price(ctx)
71 }
72
73 pub fn calculate_features(ctx: Context<CalculateFeatures>) -> Result<()> {
75 instructions::calculate_features::calculate_features(ctx)
76 }
77
78 pub fn run_inference(ctx: Context<ModelInference>) -> Result<()> {
80 instructions::run_inference::run_inference(ctx)
81 }
82
83}
84
85#[derive(Accounts)]
86pub struct InitializeParams<'info> {
87
88 #[account(
89 init,
90 payer = authority,
91 space = ModelParameters::LEN,
92 seeds = [b"model_params", authority.key().as_ref()],
93 bump
94 )]
95 pub model_params: Account<'info, ModelParameters>,
96
97 #[account(mut)]
98 pub authority: Signer<'info>,
99 pub system_program: Program<'info, System>,
100
101}
102
103#[derive(Accounts)]
104pub struct InitializeResults<'info> {
105
106 #[account(
107 init,
108 payer = authority,
109 space = ModelResults::LEN,
110 seeds = [b"model_results", authority.key().as_ref()],
111 bump
112 )]
113 pub model_results: Account<'info, ModelResults>,
114
115 #[account(
116 seeds = [b"model_params", authority.key().as_ref()],
117 bump
118 )]
119 pub model_params: Account<'info, ModelParameters>,
120
121 #[account(mut)]
122 pub authority: Signer<'info>,
123 pub system_program: Program<'info, System>,
124
125}
126
127#[derive(Accounts)]
128pub struct InitializeFeatures<'info> {
129
130 #[account(
131 init,
132 payer = authority,
133 space = ModelFeatures::LEN,
134 seeds = [b"model_features", authority.key().as_ref()],
135 bump
136 )]
137 pub model_features: Account<'info, ModelFeatures>,
138
139 #[account(mut)]
140 pub authority: Signer<'info>,
141 pub system_program: Program<'info, System>,
142
143}
144
145#[derive(Accounts)]
146pub struct InitializeExperiments<'info> {
147
148 #[account(
149 init,
150 payer = authority,
151 space = ModelExperiments::LEN,
152 seeds = [b"model_experiments", authority.key().as_ref()],
153 bump
154 )]
155 pub model_experiments: Account<'info, ModelExperiments>,
156
157 #[account(mut)]
158 pub authority: Signer<'info>,
159 pub system_program: Program<'info, System>,
160
161}
162
163#[derive(Accounts)]
164pub struct InitializeDataPrices<'info> {
165
166 #[account(
167 init,
168 payer = authority,
169 space = DataPrices::LEN,
170 seeds = [b"data_prices", authority.key().as_ref()],
171 bump
172 )]
173 pub data_prices: Account<'info, DataPrices>,
174
175 #[account(mut)]
176 pub authority: Signer<'info>,
177 pub system_program: Program<'info, System>,
178
179}
180
181#[derive(Accounts)]
182pub struct FetchPrice<'info> {
183
184 #[account(
185 mut,
186 seeds = [b"data_prices", authority.key().as_ref()],
187 bump
188 )]
189
190 pub data_prices: Account<'info, DataPrices>,
191 pub price_update: Account<'info, PriceUpdateV2>,
192
193 #[account(mut)]
194 pub authority: Signer<'info>,
195
196}
197
198#[derive(Accounts)]
199pub struct CalculateFeatures<'info> {
200
201 #[account(
202 mut,
203 seeds = [b"model_features", authority.key().as_ref()],
204 bump
205 )]
206 pub model_features: Account<'info, ModelFeatures>,
207
208 #[account(
209 seeds = [b"data_prices", authority.key().as_ref()],
210 bump
211 )]
212 pub data_prices: Account<'info, DataPrices>,
213
214 #[account(mut)]
215 pub authority: Signer<'info>,
216 pub system_program: Program<'info, System>,
217}
218
219#[derive(Accounts)]
220pub struct ModelInference<'info> {
221 #[account(
222 seeds = [b"model_params", authority.key().as_ref()],
223 bump
224 )]
225 pub model_params: Account<'info, ModelParameters>,
226
227 #[account(
228 mut,
229 seeds = [b"model_results", authority.key().as_ref()],
230 bump
231 )]
232 pub model_results: Account<'info, ModelResults>,
233
234 #[account(
235 seeds = [b"model_features", authority.key().as_ref()],
236 bump
237 )]
238
239 pub model_features: Account<'info, ModelFeatures>,
240
241 #[account(mut)]
242 pub authority: Signer<'info>,
243}
244