Skip to main content

dusk_node/database/rocksdb/
metadata_indexes.rs

1// This Source Code Form is subject to the terms of the Mozilla Public
2// License, v. 2.0. If a copy of the MPL was not distributed with this
3// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4//
5// Copyright (c) DUSK NETWORK. All rights reserved.
6
7use super::*;
8impl<DB: DBAccess> Metadata for DBTransaction<'_, DB> {
9    fn op_write<T: AsRef<[u8]>>(&mut self, key: &[u8], value: T) -> Result<()> {
10        self.put_cf(self.metadata_cf, key, value)?;
11        Ok(())
12    }
13
14    fn op_read(&self, key: &[u8]) -> Result<Option<Vec<u8>>> {
15        self.inner.get_cf(self.metadata_cf, key).map_err(Into::into)
16    }
17}
18
19pub(super) fn serialize_key(
20    value: u64,
21    hash: [u8; 32],
22) -> std::io::Result<Vec<u8>> {
23    let mut w = vec![];
24    std::io::Write::write_all(&mut w, &value.to_be_bytes())?;
25    std::io::Write::write_all(&mut w, &hash)?;
26    Ok(w)
27}
28
29pub(super) fn deserialize_key<R: Read>(r: &mut R) -> Result<(u64, [u8; 32])> {
30    let mut buf = [0u8; 8];
31    r.read_exact(&mut buf)?;
32    let value = u64::from_be_bytes(buf);
33    let mut hash = [0u8; 32];
34    r.read_exact(&mut hash[..])?;
35
36    Ok((value, hash))
37}
38
39pub(super) fn serialize_iter_key(
40    ch: &ConsensusHeader,
41) -> std::io::Result<Vec<u8>> {
42    let mut w = vec![];
43    std::io::Write::write_all(&mut w, &ch.prev_block_hash)?;
44    std::io::Write::write_all(&mut w, &[ch.iteration])?;
45    Ok(w)
46}
47
48pub(super) fn deserialize_iter_key<R: Read>(
49    r: &mut R,
50) -> Result<([u8; 32], u8)> {
51    let mut prev_block_hash = [0u8; 32];
52    r.read_exact(&mut prev_block_hash)?;
53
54    let mut iter_byte = [0u8; 1];
55    r.read_exact(&mut iter_byte)?;
56    let iteration = u8::from_be_bytes(iter_byte);
57
58    Ok((prev_block_hash, iteration))
59}