lib/machine/src/fabric/transition/schema.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

  1 const admission = @import("../../admission/root.zig");
  2 const fabric = @import("../root.zig");
  3 const fault = @import("../../fault/root.zig");
  4 const os = @import("os");
  5 const std = @import("std");
  6 
  7 pub const magic = [8]u8{ 'M', 'C', 'H', 'F', 'T', 'R', '1', 0 };
  8 pub const version: u16 = 1;
  9 pub const flags: u16 = 0;
 10 pub const format: u16 = 1;
 11 pub const stream_bytes: usize = 1024;
 12 pub const digest_bytes: u16 = os.abi.wire.digest_bytes;
 13 pub const root_bytes: u16 = 96;
 14 pub const record_bytes: u16 = 208;
 15 pub const effect_bytes: u16 = 240;
 16 pub const fault_effect_bytes: u16 = 88;
 17 pub const decision_bytes: u16 = 136;
 18 pub const semantic_bytes: u16 = 448;
 19 
 20 pub const Envelope = struct {
 21     pub const magic_offset: usize = 0;
 22     pub const version_offset: usize = 8;
 23     pub const stream_bytes_offset: usize = 10;
 24     pub const flags_offset: usize = 12;
 25     pub const format_offset: usize = 14;
 26     pub const fabric_dialect_offset: usize = 16;
 27     pub const fault_dialect_offset: usize = 18;
 28     pub const digest_bytes_offset: usize = 20;
 29     pub const root_bytes_offset: usize = 22;
 30     pub const record_bytes_offset: usize = 24;
 31     pub const effect_bytes_offset: usize = 26;
 32     pub const fault_effect_bytes_offset: usize = 28;
 33     pub const decision_bytes_offset: usize = 30;
 34     pub const semantic_bytes_offset: usize = 32;
 35     pub const reserved_offset: usize = 34;
 36     pub const limit: usize = 64;
 37 };
 38 
 39 pub const RootLayout = struct {
 40     pub const digest_offset: usize = 0;
 41     pub const contract_offset: usize = digest_offset + digest_bytes;
 42     pub const entry_frontier_offset: usize = contract_offset + digest_bytes;
 43     pub const admission_frontier_offset: usize = entry_frontier_offset + 8;
 44     pub const fault_frontier_offset: usize = admission_frontier_offset + 8;
 45     pub const dialect_offset: usize = fault_frontier_offset + 8;
 46     pub const reserved_offset: usize = dialect_offset + 2;
 47     pub const limit: usize = root_bytes;
 48 };
 49 
 50 pub const Header = struct {
 51     pub const previous_offset: usize = Envelope.limit;
 52     pub const result_offset: usize = previous_offset + root_bytes;
 53     pub const sequence_offset: usize = result_offset + root_bytes;
 54     pub const kind_offset: usize = sequence_offset + 8;
 55     pub const reserved_offset: usize = kind_offset + 1;
 56     pub const limit: usize = 272;
 57 };
 58 
 59 pub const Admission = struct {
 60     pub const node_offset: usize = 0;
 61     pub const record_kind_offset: usize = node_offset + 16;
 62     pub const effect_kind_offset: usize = record_kind_offset + 1;
 63     pub const fault_present_offset: usize = effect_kind_offset + 1;
 64     pub const reserved_offset: usize = fault_present_offset + 1;
 65     pub const record_offset: usize = 24;
 66     pub const effect_offset: usize = record_offset + record_bytes;
 67     pub const fault_effect_offset: usize = effect_offset + effect_bytes;
 68     pub const decision_offset: usize = fault_effect_offset + fault_effect_bytes;
 69     pub const limit: usize = decision_offset + decision_bytes;
 70 };
 71 
 72 pub const Record = struct {
 73     pub const first_offset: usize = 0;
 74     pub const second_offset: usize = 8;
 75     pub const correlation_offset: usize = 32;
 76     pub const status_offset: usize = 40;
 77     pub const effect_length_offset: usize = 42;
 78     pub const output_root_offset: usize = 44;
 79     pub const effect_reserved_offset: usize = 76;
 80     pub const effect_storage_offset: usize = 80;
 81     pub const effect_limit: usize = 200;
 82     pub const payload_length_offset: usize = 8;
 83     pub const payload_reserved_offset: usize = 10;
 84     pub const payload_storage_offset: usize = 16;
 85     pub const payload_limit: usize = 160;
 86     pub const limit: usize = record_bytes;
 87 };
 88 
 89 pub const Effect = struct {
 90     pub const id_offset: usize = 0;
 91     pub const source_offset: usize = 8;
 92     pub const destination_offset: usize = 24;
 93     pub const channel_offset: usize = 40;
 94     pub const length_offset: usize = 42;
 95     pub const request_receipt_offset: usize = 44;
 96     pub const request_correlation_offset: usize = 76;
 97     pub const digest_offset: usize = 84;
 98     pub const reserved_offset: usize = 116;
 99     pub const storage_offset: usize = 120;
100     pub const limit: usize = effect_bytes;
101 };
102 
103 pub const FaultEffect = struct {
104     pub const kind_offset: usize = 0;
105     pub const reserved_offset: usize = 1;
106     pub const value_offset: usize = 8;
107     pub const second_offset: usize = 24;
108     pub const third_offset: usize = 56;
109     pub const limit: usize = fault_effect_bytes;
110 };
111 
112 pub const Decision = struct {
113     pub const id_offset: usize = 0;
114     pub const dialect_offset: usize = 32;
115     pub const kind_offset: usize = 34;
116     pub const choice_offset: usize = 35;
117     pub const reserved_offset: usize = 36;
118     pub const basis_offset: usize = 40;
119     pub const subject_offset: usize = 72;
120     pub const digest_offset: usize = 104;
121     pub const limit: usize = decision_bytes;
122 };
123 
124 pub const Settlement = struct {
125     pub const node_offset: usize = 0;
126     pub const reserved_offset: usize = 16;
127     pub const semantic_offset: usize = 24;
128     pub const limit: usize = semantic_offset + semantic_bytes;
129 };
130 
131 pub const Semantic = struct {
132     pub const admission_offset: usize = 0;
133     pub const contract_offset: usize = 32;
134     pub const source_root_offset: usize = 64;
135     pub const input_offset: usize = 96;
136     pub const terminal_input_offset: usize = 104;
137     pub const virtual_time_offset: usize = 112;
138     pub const entropy_offset: usize = 120;
139     pub const effect_offset: usize = 128;
140     pub const image_offset: usize = 136;
141     pub const execution_offset: usize = 168;
142     pub const block_generation_offset: usize = 200;
143     pub const block_digest_offset: usize = 208;
144     pub const request_sequence_offset: usize = 240;
145     pub const semantic_frontier_offset: usize = 248;
146     pub const effect_frontier_offset: usize = 256;
147     pub const terminal_offset: usize = 264;
148     pub const boundary_virtual_time_offset: usize = 272;
149     pub const boundary_entropy_offset: usize = 280;
150     pub const request_consumed_offset: usize = 288;
151     pub const request_produced_offset: usize = 296;
152     pub const event_consumed_offset: usize = 304;
153     pub const event_produced_offset: usize = 312;
154     pub const unresolved_effects_offset: usize = 320;
155     pub const scheduler_offset: usize = 324;
156     pub const first_reserved_offset: usize = 326;
157     pub const boundary_block_offset: usize = 328;
158     pub const boundary_input_offset: usize = 360;
159     pub const boundary_terminal_input_offset: usize = 368;
160     pub const settled_request_offset: usize = 376;
161     pub const settled_event_offset: usize = 384;
162     pub const k0_offset: usize = 392;
163     pub const second_reserved_offset: usize = 393;
164     pub const transcript_offset: usize = 400;
165     pub const third_reserved_offset: usize = 432;
166     pub const limit: usize = semantic_bytes;
167 };
168 
169 pub const Fault = struct {
170     pub const effect_offset: usize = 0;
171     pub const decision_offset: usize = effect_offset + fault_effect_bytes;
172     pub const limit: usize = decision_offset + decision_bytes;
173 };
174 
175 comptime {
176     std.debug.assert(stream_bytes <= std.math.maxInt(u16));
177     std.debug.assert(admission.terminal_bytes_max == 144);
178     std.debug.assert(admission.entropy_bytes_max == 144);
179     std.debug.assert(admission.effect_result_bytes_max == 120);
180     std.debug.assert(fabric.packet_bytes_max == 120);
181     std.debug.assert(@backingInt(fabric.Dialect.ordered_effect_fabric_v3) == 3);
182     std.debug.assert(@backingInt(fault.Dialect.deterministic_fault_v1) == 1);
183     std.debug.assert(RootLayout.reserved_offset == 90);
184     std.debug.assert(RootLayout.limit == 96);
185     std.debug.assert(Header.limit == 272);
186     std.debug.assert(Admission.limit == 696);
187     std.debug.assert(Header.limit + Admission.limit == 968);
188     std.debug.assert(Header.limit + Settlement.limit == 744);
189     std.debug.assert(Header.limit + Fault.limit == 496);
190 }