aleph_types/message/execution/
environment.rs1use crate::chain::Address;
2use crate::item_hash::ItemHash;
3use memsizes::MiB;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7pub struct FunctionTriggers {
8 pub http: bool,
10 #[serde(default, skip_serializing_if = "Option::is_none")]
11 pub persistent: Option<bool>,
12}
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15pub enum NetworkProtocol {
16 #[serde(rename = "tcp")]
17 Tcp,
18 #[serde(rename = "udp")]
19 Udp,
20}
21
22fn default_tcp() -> NetworkProtocol {
23 NetworkProtocol::Tcp
24}
25
26#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
27pub struct Port(u16);
28
29#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
31pub struct PublishedPort {
32 #[serde(default = "default_tcp")]
33 protocol: NetworkProtocol,
34 port: Port,
36}
37
38fn default_vcpus() -> u32 {
39 1
40}
41
42fn default_memory() -> MiB {
43 MiB::from(128)
44}
45
46fn default_seconds() -> u32 {
47 1
48}
49
50#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
51pub struct MachineResources {
52 #[serde(default = "default_vcpus")]
53 pub vcpus: u32,
54 #[serde(default = "default_memory")]
55 pub memory: MiB,
56 #[serde(default = "default_seconds")]
57 pub seconds: u32,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub published_ports: Option<Vec<PublishedPort>>,
61}
62
63#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
64pub enum Architecture {
65 #[serde(rename = "x86_64")]
66 X86_64,
67 #[serde(rename = "arm64")]
68 Arm64,
69}
70
71#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
72pub enum Vendor {
73 #[serde(rename = "AuthenticAMD")]
74 Amd,
75 #[serde(rename = "GenuineIntel")]
76 Intel,
77}
78
79#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
80pub struct CpuFeature(String);
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
84pub struct CpuProperties {
85 pub architecture: Architecture,
87 #[serde(default, skip_serializing_if = "Option::is_none")]
89 pub vendor: Option<Vendor>,
90 pub features: Vec<CpuFeature>,
92}
93
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
95pub enum GpuDeviceClass {
97 #[serde(rename = "0300")]
98 VgaCompatibleController,
99 #[serde(rename = "0302")]
100 _3DController,
101}
102
103#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
104pub struct GpuProperties {
105 pub vendor: String,
107 pub device_name: String,
109 pub device_class: GpuDeviceClass,
111 pub device_id: String,
113}
114
115#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
116pub enum Hypervisor {
117 #[serde(rename = "firecracker")]
118 Firecracker,
119 #[serde(rename = "qemu")]
120 Qemu,
121}
122
123#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
124pub struct FunctionEnvironment {
125 #[serde(default)]
126 pub reproducible: bool,
127 #[serde(default)]
128 pub internet: bool,
129 #[serde(default)]
130 pub aleph_api: bool,
131 #[serde(default)]
132 pub shared_cache: bool,
133}
134
135#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
136pub enum AmdSevPolicy {
137 NoDebug = 0b1,
139 NoKeySharing = 0b10,
141 SevEs = 0b100,
143 NoSend = 0b1000,
145 Domain = 0b10000,
147 Sev = 0b100000,
149}
150
151fn default_amd_sev_policy() -> u32 {
152 AmdSevPolicy::NoDebug as u32
153}
154
155#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
156pub struct TrustedExecutionEnvironment {
157 #[serde(default, skip_serializing_if = "Option::is_none")]
159 pub firmware: Option<ItemHash>,
160 #[serde(default = "default_amd_sev_policy")]
162 pub policy: u32,
163}
164
165#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
166pub struct InstanceEnvironment {
167 #[serde(default)]
168 pub internet: bool,
169 #[serde(default)]
170 pub aleph_api: bool,
171 #[serde(default, skip_serializing_if = "Option::is_none")]
173 pub hypervisor: Option<Hypervisor>,
174 #[serde(default, skip_serializing_if = "Option::is_none")]
176 pub trusted_execution: Option<TrustedExecutionEnvironment>,
177 #[serde(default)]
179 pub reproducible: bool,
180 #[serde(default)]
181 pub shared_cache: bool,
182}
183
184#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
185pub struct NodeRequirements {
186 #[serde(default, skip_serializing_if = "Option::is_none")]
188 pub owner: Option<Address>,
189 #[serde(default, skip_serializing_if = "Option::is_none")]
191 pub address_regex: Option<String>,
192 #[serde(default, skip_serializing_if = "Option::is_none")]
194 pub node_hash: Option<String>,
195 #[serde(default, skip_serializing_if = "Option::is_none")]
197 pub terms_and_conditions: Option<ItemHash>,
198}
199
200#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
201pub struct HostRequirements {
202 #[serde(default, skip_serializing_if = "Option::is_none")]
204 pub cpu: Option<CpuProperties>,
205 #[serde(default, skip_serializing_if = "Option::is_none")]
207 pub node: Option<NodeRequirements>,
208 #[serde(default, skip_serializing_if = "Option::is_none")]
210 pub gpu: Option<Vec<GpuProperties>>,
211}