luciene_sl/
lib.rs

1#![allow(unexpected_cfgs)]
2#![allow(deprecated)]
3
4use anchor_lang::prelude::*;
5use pyth_solana_receiver_sdk::price_update::PriceUpdateV2;
6
7/// To initialize state accounts
8use crate::state::{
9    model_params::ModelParameters,
10    model_results::ModelResults,
11    model_features::ModelFeatures,
12    model_experiments::ModelExperiments,
13    data_prices::DataPrices,
14};
15
16// Program ID
17declare_id!("GWVfXsjLBfbLvHpuwXPR6jYsCPSCcbMXaKBZvNLM1bgJ");
18
19/// To execute instructions
20pub use instructions::initialize;
21
22/// OnChain Model
23pub mod models;
24
25/// OnChain Instructions
26pub mod instructions;
27
28/// OnChain State Trackers
29pub mod state;
30
31/// OnChain Data IO
32pub mod data;
33
34/// SVM operations related errors
35pub mod errors;
36
37#[program]
38pub mod luciene {
39
40    use super::*;
41
42    /// Initialize model parameters account
43    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    /// Initialize model results account
49    pub fn initialize_results(ctx: Context<InitializeResults>) -> Result<()> {
50        instructions::initialize::initialize_results(ctx)
51    }
52    
53    /// Initialize model features account
54    pub fn initialize_features(ctx: Context<InitializeFeatures>) -> Result<()> {
55        instructions::initialize::initialize_features(ctx)
56    }
57    
58    /// Initialize model experiments account
59    pub fn initialize_experiments(ctx: Context<InitializeExperiments>) -> Result<()> {
60        instructions::initialize::initialize_experiments(ctx)
61    }
62    
63    /// Initialize price history account
64    pub fn initialize_data_prices(ctx: Context<InitializeDataPrices>) -> Result<()> {
65        instructions::initialize::initialize_data_prices(ctx)
66    }
67
68    /// Fetch latest prices from Pyth oracle and update price history
69    pub fn fetch_and_store_price(ctx: Context<FetchPrice>) -> Result<()> {
70        instructions::fetch_price::fetch_and_store_price(ctx)
71    }
72
73    /// Calculate features from price history
74    pub fn calculate_features(ctx: Context<CalculateFeatures>) -> Result<()> {
75        instructions::calculate_features::calculate_features(ctx)
76    }
77
78    /// Run ML inference using current features and model parameters
79    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