zombienet_orchestrator/generators/
core_assignment.rs1use array_bytes::bytes2hex;
2use codec::{CompactAs, Decode, Encode, MaxEncodedLen};
3use support::substorage::storage_value_key;
4use tracing::trace;
5
6#[derive(
11 Clone,
12 CompactAs,
13 Copy,
14 Decode,
15 Default,
16 Encode,
17 Eq,
18 Hash,
19 MaxEncodedLen,
20 Ord,
21 PartialEq,
22 PartialOrd,
23)]
24pub struct ParaId(pub u32);
25
26pub fn generate_old(core_index: u32, para_id: u32) -> (String, String) {
28 let para_id = ParaId(para_id);
29 let para_hex = bytes2hex("", para_id.encode());
30 let core_descriptor_prefix = bytes2hex(
31 "0x",
32 storage_value_key(&b"CoretimeAssignmentProvider"[..], b"CoreDescriptors"),
33 );
34
35 let core_descriptor_idx_key = format!(
37 "{core_descriptor_prefix}{}",
38 bytes2hex("", sp_core::twox_256(&core_index.to_le_bytes()))
39 );
40 let core_descriptor = format!("0x00010402{}00e100e100010000e1", para_hex);
41
42 trace!("CoreDescriptor (raw) - {core_descriptor_idx_key}:{core_descriptor}");
43 (core_descriptor_idx_key, core_descriptor)
44}
45
46pub fn get_parascheduler_storage_key() -> String {
48 bytes2hex(
49 "0x",
50 storage_value_key(&b"ParaScheduler"[..], b"CoreDescriptors"),
51 )
52}
53
54pub fn generate(core_index: u32, para_id: u32) -> String {
55 let para_id = ParaId(para_id);
56 let para_hex = bytes2hex("", para_id.encode());
57 let core_index_hex = bytes2hex("", core_index.encode());
58
59 let core_descriptor = format!("{core_index_hex}00010402{para_hex}00e100e100010000e1");
60
61 trace!("CoreDescriptor part (raw): {core_descriptor}");
62 core_descriptor
63}
64
65#[cfg(test)]
66mod test {
67 use super::*;
68
69 #[test]
70 fn generate_old_works() {
71 let (k, v) = generate_old(0, 1000);
72 println!("key: {k}, val: {v}");
73 }
74
75 #[test]
76 fn generate_works() {
77 let part = generate(0, 1000);
78 println!("part: {part}");
79 }
80
81 #[test]
82 fn get_parascheduler_storage_key_works() {
83 let k = get_parascheduler_storage_key();
84 println!("ParaScheduler.CoreDescriptors (key): {k}");
85 }
86}