Skip to main content

zombienet_orchestrator/generators/
core_assignment.rs

1use array_bytes::bytes2hex;
2use codec::{CompactAs, Decode, Encode, MaxEncodedLen};
3use support::substorage::storage_value_key;
4use tracing::trace;
5
6/// Parachain id.
7///
8/// This is an equivalent of the `polkadot_parachain_primitives::Id`, which is a compact-encoded
9/// `u32`.
10#[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
26// for CoretimeAssignmentProvider
27pub 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    // CoretimeAssignmentProvider CoreDescriptors <idx>
36    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
46// for ParaScheduler
47pub 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}