snarkvm_ledger_block/transaction/fee/
bytes.rs1use super::*;
17
18impl<N: Network> FromBytes for Fee<N> {
19 fn read_le<R: Read>(mut reader: R) -> IoResult<Self> {
21 let version = u8::read_le(&mut reader)?;
23 if version != 1 {
25 return Err(error("Invalid fee version"));
26 }
27 let transition = Transition::read_le(&mut reader)?;
29 let global_state_root = N::StateRoot::read_le(&mut reader)?;
31 let proof_variant = u8::read_le(&mut reader)?;
33 let proof = match proof_variant {
35 0 => None,
36 1 => Some(Proof::read_le(&mut reader)?),
37 _ => return Err(error(format!("Invalid proof variant '{proof_variant}'"))),
38 };
39 Self::from(transition, global_state_root, proof).map_err(|e| error(e.to_string()))
41 }
42}
43
44impl<N: Network> ToBytes for Fee<N> {
45 fn write_le<W: Write>(&self, mut writer: W) -> IoResult<()> {
47 1u8.write_le(&mut writer)?;
49 self.transition.write_le(&mut writer)?;
51 self.global_state_root.write_le(&mut writer)?;
53 match self.proof {
55 None => 0u8.write_le(&mut writer)?,
56 Some(ref proof) => {
57 1u8.write_le(&mut writer)?;
58 proof.write_le(&mut writer)?;
59 }
60 }
61 Ok(())
62 }
63}
64
65#[cfg(test)]
66mod tests {
67 use super::*;
68
69 #[test]
70 fn test_bytes() -> Result<()> {
71 let rng = &mut TestRng::default();
72
73 let expected = crate::transaction::fee::test_helpers::sample_fee_private_hardcoded(rng);
75
76 let expected_bytes = expected.to_bytes_le()?;
78 assert_eq!(expected, Fee::read_le(&expected_bytes[..])?);
79
80 let expected = crate::transaction::fee::test_helpers::sample_fee_public_hardcoded(rng);
82
83 let expected_bytes = expected.to_bytes_le()?;
85 assert_eq!(expected, Fee::read_le(&expected_bytes[..])?);
86
87 Ok(())
88 }
89}