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

daab053ee43316e1809a84551d573ddd1e5bf3d2

  1 const fabric = @import("../root.zig");
  2 const os = @import("os");
  3 const std = @import("std");
  4 
  5 pub const magic = [8]u8{ 'M', 'C', 'H', 'F', 'A', 'B', '1', 0 };
  6 pub const version: u16 = 1;
  7 pub const flags: u16 = 0;
  8 pub const format: u16 = 1;
  9 pub const stream_bytes: usize = 8192;
 10 pub const digest_bytes: u16 = os.abi.wire.digest_bytes;
 11 pub const root_bytes: u16 = 96;
 12 pub const state_header_bytes: u16 = 160;
 13 pub const node_bytes: u16 = 208;
 14 pub const packet_bytes: u16 = 256;
 15 pub const packet_payload_bytes: u16 = fabric.packet_bytes_max;
 16 
 17 pub const Envelope = struct {
 18     pub const magic_offset: usize = 0;
 19     pub const version_offset: usize = 8;
 20     pub const stream_bytes_offset: usize = 10;
 21     pub const flags_offset: usize = 12;
 22     pub const format_offset: usize = 14;
 23     pub const dialect_offset: usize = 16;
 24     pub const node_capacity_offset: usize = 18;
 25     pub const packet_capacity_offset: usize = 20;
 26     pub const node_bytes_offset: usize = 22;
 27     pub const packet_bytes_offset: usize = 24;
 28     pub const packet_payload_bytes_offset: usize = 26;
 29     pub const digest_bytes_offset: usize = 28;
 30     pub const root_bytes_offset: usize = 30;
 31     pub const state_header_bytes_offset: usize = 32;
 32     pub const reserved_offset: usize = 34;
 33     pub const limit: usize = 64;
 34 };
 35 
 36 pub const RootLayout = struct {
 37     pub const digest_offset: usize = Envelope.limit;
 38     pub const contract_offset: usize = digest_offset + digest_bytes;
 39     pub const entry_frontier_offset: usize = contract_offset + digest_bytes;
 40     pub const admission_frontier_offset: usize = entry_frontier_offset + 8;
 41     pub const fault_frontier_offset: usize = admission_frontier_offset + 8;
 42     pub const dialect_offset: usize = fault_frontier_offset + 8;
 43     pub const reserved_offset: usize = dialect_offset + 2;
 44     pub const limit: usize = Envelope.limit + root_bytes;
 45 };
 46 
 47 pub const StateLayout = struct {
 48     pub const world_offset: usize = RootLayout.limit;
 49     pub const node_count_offset: usize = world_offset + 16;
 50     pub const packet_count_offset: usize = node_count_offset + 1;
 51     pub const partition_bits_offset: usize = packet_count_offset + 1;
 52     pub const capacity_bits_offset: usize = partition_bits_offset + 1;
 53     pub const first_reserved_offset: usize = capacity_bits_offset + 1;
 54     pub const virtual_time_offset: usize = first_reserved_offset + 4;
 55     pub const entropy_frontier_offset: usize = virtual_time_offset + 8;
 56     pub const entropy_bytes_offset: usize = entropy_frontier_offset + 8;
 57     pub const packet_next_id_offset: usize = entropy_bytes_offset + 8;
 58     pub const entry_frontier_offset: usize = packet_next_id_offset + 8;
 59     pub const admission_frontier_offset: usize = entry_frontier_offset + 8;
 60     pub const fault_frontier_offset: usize = admission_frontier_offset + 8;
 61     pub const admission_limit_offset: usize = fault_frontier_offset + 8;
 62     pub const second_reserved_offset: usize = admission_limit_offset + 4;
 63     pub const ledger_digest_offset: usize = second_reserved_offset + 4;
 64     pub const fault_digest_offset: usize = ledger_digest_offset + digest_bytes;
 65     pub const third_reserved_offset: usize = fault_digest_offset + digest_bytes;
 66     pub const limit: usize = RootLayout.limit + state_header_bytes;
 67 };
 68 
 69 pub const NodeLayout = struct {
 70     pub const id_offset: usize = 0;
 71     pub const contract_offset: usize = id_offset + 16;
 72     pub const source_root_offset: usize = contract_offset + digest_bytes;
 73     pub const input_frontier_offset: usize = source_root_offset + digest_bytes;
 74     pub const terminal_input_offset: usize = input_frontier_offset + 8;
 75     pub const virtual_time_offset: usize = terminal_input_offset + 8;
 76     pub const entropy_offset: usize = virtual_time_offset + 8;
 77     pub const effect_offset: usize = entropy_offset + 8;
 78     pub const request_present_offset: usize = effect_offset + 8;
 79     pub const first_reserved_offset: usize = request_present_offset + 1;
 80     pub const request_receipt_offset: usize = first_reserved_offset + 7;
 81     pub const request_correlation_offset: usize = request_receipt_offset + digest_bytes;
 82     pub const machine_kind_offset: usize = request_correlation_offset + 8;
 83     pub const available_offset: usize = machine_kind_offset + 1;
 84     pub const second_reserved_offset: usize = available_offset + 1;
 85     pub const machine_digest_offset: usize = second_reserved_offset + 6;
 86     pub const limit: usize = node_bytes;
 87 };
 88 
 89 pub const PacketLayout = struct {
 90     pub const id_offset: usize = 0;
 91     pub const source_offset: usize = id_offset + 8;
 92     pub const destination_offset: usize = source_offset + 16;
 93     pub const channel_offset: usize = destination_offset + 16;
 94     pub const length_offset: usize = channel_offset + 2;
 95     pub const ready_offset: usize = length_offset + 2;
 96     pub const reserved_offset: usize = ready_offset + 1;
 97     pub const request_receipt_offset: usize = reserved_offset + 3;
 98     pub const request_correlation_offset: usize = request_receipt_offset + digest_bytes;
 99     pub const ready_at_offset: usize = request_correlation_offset + 8;
100     pub const order_offset: usize = ready_at_offset + 8;
101     pub const digest_offset: usize = order_offset + 8;
102     pub const storage_offset: usize = digest_offset + digest_bytes;
103     pub const limit: usize = packet_bytes;
104 };
105 
106 pub const nodes_offset: usize = StateLayout.limit;
107 pub const packets_offset: usize = nodes_offset + fabric.node_limit * node_bytes;
108 pub const material_limit: usize = packets_offset + fabric.packet_limit * packet_bytes;
109 
110 comptime {
111     std.debug.assert(stream_bytes <= std.math.maxInt(u16));
112     std.debug.assert(fabric.node_limit <= std.math.maxInt(u16));
113     std.debug.assert(fabric.packet_limit <= std.math.maxInt(u16));
114     std.debug.assert(fabric.packet_bytes_max <= std.math.maxInt(u16));
115     std.debug.assert(@backingInt(fabric.Dialect.ordered_effect_fabric_v3) == 3);
116     std.debug.assert(RootLayout.reserved_offset == 154);
117     std.debug.assert(RootLayout.limit == 160);
118     std.debug.assert(StateLayout.third_reserved_offset == 312);
119     std.debug.assert(StateLayout.limit == 320);
120     std.debug.assert(NodeLayout.limit == 208);
121     std.debug.assert(PacketLayout.storage_offset + packet_payload_bytes == packet_bytes);
122     std.debug.assert(material_limit == 4992);
123     std.debug.assert(material_limit <= stream_bytes);
124 }