aleph_types/message/execution/
base.rs

1use crate::chain::{Address, Chain};
2use crate::item_hash::ItemHash;
3use crate::message::execution::environment::{HostRequirements, MachineResources};
4use crate::message::execution::volume::MachineVolume;
5use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7
8/// Code and data can be provided in plain format, as zip or as squashfs partition.
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10#[serde(rename_all = "lowercase")]
11pub enum Encoding {
12    Plain,
13    Zip,
14    Squashfs,
15}
16
17#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
18#[serde(rename_all = "lowercase")]
19pub enum PaymentType {
20    Hold,
21    Superfluid,
22    Credit,
23}
24
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
26pub struct Payment {
27    /// Chain to check for funds.
28    #[serde(default)]
29    pub chain: Option<Chain>,
30    /// Optional alternative address to send funds to.
31    #[serde(default)]
32    pub receiver: Option<Address>,
33    #[serde(rename = "type")]
34    pub payment_type: PaymentType,
35}
36
37///Two types of program interfaces supported: plain binaries and ASGI apps.
38#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
39#[serde(rename_all = "lowercase")]
40pub enum Interface {
41    Asgi,
42    Binary,
43}
44
45/// Fields shared by program and instance messages.
46#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
47#[serde(rename_all = "lowercase")]
48pub struct ExecutableContent {
49    /// Allow amends to update this function.
50    pub allow_amend: bool,
51    /// Metadata of the VM.
52    #[serde(default)]
53    pub metadata: Option<HashMap<String, serde_json::Value>>,
54    /// Environment variables to set in the VM.
55    #[serde(default)]
56    pub variables: Option<HashMap<String, String>>,
57    /// System resources required.
58    pub resources: MachineResources,
59    /// Payment details.
60    #[serde(default)]
61    pub payment: Option<Payment>,
62    #[serde(default)]
63    pub requirements: Option<HostRequirements>,
64    /// Volumes to mount on the filesystem.
65    #[serde(default)]
66    pub volumes: Vec<MachineVolume>,
67    /// Previous version to replace.
68    #[serde(default)]
69    pub replaces: Option<ItemHash>,
70    #[serde(default)]
71    pub authorized_keys: Option<Vec<String>>,
72}