1use service::ServiceId;
4
5const STORAGE_PREFIX: [u8; 4] = [255, 255, 255, 255];
6
7pub fn storage(service: ServiceId, key: &[u8]) -> [u8; 31] {
9 let mut hashed = STORAGE_PREFIX.to_vec();
10 hashed.extend_from_slice(key);
11 let hash = service::blake2b(hashed.as_slice());
12
13 let mut key = [0u8; 31];
14 let mut hashp = [0; 4];
15 hashp.copy_from_slice(&hash[..4]);
16 key[..8].copy_from_slice(&prefix(service, &hashp));
17 key[8..].copy_from_slice(&hash[4..27]);
18 key
19}
20
21pub fn prefix(service: u32, prefix: &[u8; 4]) -> [u8; 8] {
26 let mut key = [0; 8];
27 service
28 .to_le_bytes()
29 .iter()
30 .zip(prefix.iter())
31 .enumerate()
32 .for_each(|(i, (a, b))| {
33 key[i * 2] = *a;
34 key[(i + 1) * 2 - 1] = *b;
35 });
36 key
37}