1pub mod accounts;
2pub mod governance;
3pub mod inference;
4pub mod model_registry;
5pub mod revenue;
6pub mod vault;
7
8pub use accounts::AccountsModule;
9pub use governance::GovernanceModule;
10pub use inference::InferenceModule;
11pub use model_registry::ModelRegistryModule;
12pub use revenue::RevenueModule;
13pub use vault::VaultModule;
14
15use std::collections::HashMap;
16use tetcore_primitives::{Address, Hash32};
17use thiserror::Error;
18
19pub trait Module: Send + Sync {
20 fn name(&self) -> &str;
21 fn process(&mut self, tx_data: &[u8]) -> Result<(), RuntimeError>;
22}
23
24#[derive(Error, Debug, Clone)]
25pub enum RuntimeError {
26 #[error("Module not found")]
27 ModuleNotFound,
28 #[error("Invalid module call")]
29 InvalidModuleCall,
30 #[error("Insufficient permissions")]
31 InsufficientPermissions,
32 #[error("Storage error")]
33 StorageError,
34 #[error("Invalid state")]
35 InvalidState,
36}
37
38pub struct Runtime {
39 accounts: AccountsModule,
40 governance: GovernanceModule,
41 model_registry: ModelRegistryModule,
42 inference: InferenceModule,
43 vault: VaultModule,
44 revenue: RevenueModule,
45}
46
47impl Runtime {
48 pub fn new() -> Self {
49 Self {
50 accounts: AccountsModule::new(),
51 governance: GovernanceModule::new(),
52 model_registry: ModelRegistryModule::new(),
53 inference: InferenceModule::new(),
54 vault: VaultModule::new(),
55 revenue: RevenueModule::new(),
56 }
57 }
58
59 pub fn accounts(&self) -> &AccountsModule {
60 &self.accounts
61 }
62
63 pub fn accounts_mut(&mut self) -> &mut AccountsModule {
64 &mut self.accounts
65 }
66
67 pub fn governance(&self) -> &GovernanceModule {
68 &self.governance
69 }
70
71 pub fn governance_mut(&mut self) -> &mut GovernanceModule {
72 &mut self.governance
73 }
74
75 pub fn model_registry(&self) -> &ModelRegistryModule {
76 &self.model_registry
77 }
78
79 pub fn model_registry_mut(&mut self) -> &mut ModelRegistryModule {
80 &mut self.model_registry
81 }
82
83 pub fn inference(&self) -> &InferenceModule {
84 &self.inference
85 }
86
87 pub fn inference_mut(&mut self) -> &mut InferenceModule {
88 &mut self.inference
89 }
90
91 pub fn vault(&self) -> &VaultModule {
92 &self.vault
93 }
94
95 pub fn vault_mut(&mut self) -> &mut VaultModule {
96 &mut self.vault
97 }
98
99 pub fn revenue(&self) -> &RevenueModule {
100 &self.revenue
101 }
102
103 pub fn revenue_mut(&mut self) -> &mut RevenueModule {
104 &mut self.revenue
105 }
106}
107
108impl Default for Runtime {
109 fn default() -> Self {
110 Self::new()
111 }
112}