eest_types/
authorization.rs1use cfx_types::{Address, U256};
2
3#[derive(Debug, Clone, Hash, Eq, PartialEq)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
7pub struct Authorization {
8 pub chain_id: U256,
10 pub address: Address,
12 #[cfg_attr(feature = "serde", serde(with = "quantity"))]
14 pub nonce: u64,
15}
16
17#[derive(Debug, Clone, Eq, PartialEq)]
19#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
20pub struct SignedAuthorization {
21 #[cfg_attr(feature = "serde", serde(flatten))]
23 inner: Authorization,
24 #[cfg_attr(
28 feature = "serde",
29 serde(rename = "yParity", alias = "v", with = "quantity")
30 )]
31 y_parity: u64,
32 r: U256,
34 s: U256,
36}
37
38impl SignedAuthorization {
39 pub const fn strip_signature(self) -> Authorization { self.inner }
41
42 pub const fn inner(&self) -> &Authorization { &self.inner }
44
45 pub fn y_parity(&self) -> u8 { self.y_parity as u8 }
47
48 pub const fn r(&self) -> U256 { self.r }
50
51 pub const fn s(&self) -> U256 { self.s }
53}
54
55#[cfg(feature = "serde")]
56mod quantity {
57 use cfx_types::U64;
58 use serde::{Deserialize, Deserializer, Serialize, Serializer};
59
60 pub(crate) fn serialize<S>(
62 value: &u64, serializer: S,
63 ) -> Result<S::Ok, S::Error>
64 where S: Serializer {
65 U64::from(*value).serialize(serializer)
66 }
67
68 pub(crate) fn deserialize<'de, D>(
70 deserializer: D,
71 ) -> Result<u64, D::Error>
72 where D: Deserializer<'de> {
73 U64::deserialize(deserializer).map(|value| value.as_u64())
74 }
75}