coin.rs 874 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. use std::io;
  2. use pasta_curves::{arithmetic::FieldExt, pallas};
  3. use crate::{
  4. serial::{Decodable, Encodable, ReadExt, WriteExt},
  5. Result,
  6. };
  7. #[derive(Clone, Copy, Debug)]
  8. pub struct Coin(pub pallas::Base);
  9. impl Coin {
  10. pub fn from_bytes(bytes: &[u8; 32]) -> Self {
  11. pallas::Base::from_bytes(bytes).map(Coin).unwrap()
  12. }
  13. pub fn to_bytes(self) -> [u8; 32] {
  14. self.0.to_bytes()
  15. }
  16. pub(crate) fn inner(&self) -> pallas::Base {
  17. self.0
  18. }
  19. }
  20. impl Encodable for Coin {
  21. fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> {
  22. s.write_slice(&self.to_bytes()[..])?;
  23. Ok(32)
  24. }
  25. }
  26. impl Decodable for Coin {
  27. fn decode<D: io::Read>(mut d: D) -> Result<Self> {
  28. let mut bytes = [0u8; 32];
  29. d.read_slice(&mut bytes)?;
  30. let result = Self::from_bytes(&bytes);
  31. Ok(result)
  32. }
  33. }