snarkvm_ledger_block/header/metadata/
bytes.rs1use super::*;
17
18impl<N: Network> FromBytes for Metadata<N> {
19 #[inline]
21 fn read_le<R: Read>(mut reader: R) -> IoResult<Self> {
22 let version = u8::read_le(&mut reader)?;
24 if version != 1 {
26 return Err(error("Invalid metadata version"));
27 }
28
29 let network = u16::read_le(&mut reader)?;
31 let round = u64::read_le(&mut reader)?;
32 let height = u32::read_le(&mut reader)?;
33 let cumulative_weight = u128::read_le(&mut reader)?;
34 let cumulative_proof_target = u128::read_le(&mut reader)?;
35 let coinbase_target = u64::read_le(&mut reader)?;
36 let proof_target = u64::read_le(&mut reader)?;
37 let last_coinbase_target = u64::read_le(&mut reader)?;
38 let last_coinbase_timestamp = i64::read_le(&mut reader)?;
39 let timestamp = i64::read_le(&mut reader)?;
40
41 Self::new(
43 network,
44 round,
45 height,
46 cumulative_weight,
47 cumulative_proof_target,
48 coinbase_target,
49 proof_target,
50 last_coinbase_target,
51 last_coinbase_timestamp,
52 timestamp,
53 )
54 .map_err(|e| error(e.to_string()))
55 }
56}
57
58impl<N: Network> ToBytes for Metadata<N> {
59 #[inline]
61 fn write_le<W: Write>(&self, mut writer: W) -> IoResult<()> {
62 1u8.write_le(&mut writer)?;
64
65 self.network.write_le(&mut writer)?;
67 self.round.write_le(&mut writer)?;
68 self.height.write_le(&mut writer)?;
69 self.cumulative_weight.write_le(&mut writer)?;
70 self.cumulative_proof_target.write_le(&mut writer)?;
71 self.coinbase_target.write_le(&mut writer)?;
72 self.proof_target.write_le(&mut writer)?;
73 self.last_coinbase_target.write_le(&mut writer)?;
74 self.last_coinbase_timestamp.write_le(&mut writer)?;
75 self.timestamp.write_le(&mut writer)
76 }
77}
78
79#[cfg(test)]
80mod tests {
81 use super::*;
82 use console::network::MainnetV0;
83
84 type CurrentNetwork = MainnetV0;
85
86 #[test]
87 fn test_bytes() -> Result<()> {
88 let rng = &mut TestRng::default();
89
90 for expected in [crate::header::metadata::test_helpers::sample_block_metadata(rng)].into_iter() {
91 let expected_bytes = expected.to_bytes_le()?;
93 assert_eq!(expected, Metadata::read_le(&expected_bytes[..])?);
94 assert!(Metadata::<CurrentNetwork>::read_le(&expected_bytes[1..]).is_err());
95 }
96 Ok(())
97 }
98}