spacejam_service/service/
work.rs1use crate::{
4 ErasureRoot, ExportsRoot, Gas, OpaqueHash, ServiceId, Vec, WorkPackageHash,
5 service::RefineContext,
6};
7use serde::{Deserialize, Serialize};
8
9#[cfg(feature = "json")]
10use {crate::String, crate::service::RefineContextJson, spacejson::Json};
11
12#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Default)]
14#[cfg_attr(feature = "json", derive(Json))]
15pub struct WorkPackageSpec {
16 #[cfg_attr(feature = "json", json(hex))]
18 pub hash: WorkPackageHash,
19
20 pub length: u32,
22
23 #[cfg_attr(feature = "json", json(hex))]
25 pub erasure_root: ErasureRoot,
26
27 #[cfg_attr(feature = "json", json(hex))]
29 pub exports_root: ExportsRoot,
30
31 pub exports_count: u16,
33}
34
35#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Default)]
39#[cfg_attr(feature = "json", derive(Json))]
40pub struct WorkPackage {
41 pub auth_code_host: ServiceId,
43
44 #[cfg_attr(feature = "json", json(hex))]
46 pub auth_code_hash: OpaqueHash,
47
48 #[cfg_attr(feature = "json", json(nested))]
50 pub context: RefineContext,
51
52 #[cfg_attr(feature = "json", json(hex))]
54 pub authorization: Vec<u8>,
55
56 #[cfg_attr(feature = "json", json(hex))]
58 #[serde(alias = "authorizer_config")]
59 pub config: Vec<u8>,
60
61 #[cfg_attr(feature = "json", json(nested))]
63 pub items: Vec<WorkItem>,
64}
65
66#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
68#[cfg_attr(feature = "json", derive(Json))]
69pub struct WorkItem {
70 pub service: ServiceId,
72
73 #[cfg_attr(feature = "json", json(hex))]
75 pub code_hash: OpaqueHash,
76
77 pub refine_gas_limit: Gas,
79
80 pub accumulate_gas_limit: Gas,
82
83 pub export_count: u16,
87
88 #[cfg_attr(feature = "json", json(hex))]
90 pub payload: Vec<u8>,
91
92 #[cfg_attr(feature = "json", json(nested))]
96 pub import_segments: Vec<ImportSpec>,
97
98 #[cfg_attr(feature = "json", json(nested))]
102 pub extrinsic: Vec<ExtrinsicSpec>,
103}
104
105#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
107#[cfg_attr(feature = "json", derive(Json))]
108pub struct ImportSpec {
109 #[cfg_attr(feature = "json", json(hex))]
111 pub tree_root: OpaqueHash,
112
113 pub index: u16,
115}
116
117#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
119#[cfg_attr(feature = "json", derive(Json))]
120pub struct ExtrinsicSpec {
121 #[cfg_attr(feature = "json", json(hex))]
123 pub hash: OpaqueHash,
124
125 pub len: u32,
127}
128
129#[cfg(feature = "blake2")]
130impl WorkPackage {
131 pub fn authorizer_hash(&self) -> OpaqueHash {
135 crate::blake2b(&[self.auth_code_hash.as_ref(), &self.config].concat())
136 }
137}