espresso_node/request_response/
request.rs1use anyhow::{Context, Result};
2use async_trait::async_trait;
3use committable::Commitment;
4use espresso_types::{
5 FeeAccount, FeeMerkleTree, Leaf2,
6 v0_3::{ChainConfig, RewardAccountV1, RewardMerkleTreeV1},
7 v0_4::{RewardAccountV2, RewardMerkleTreeV2},
8};
9use hotshot_types::{data::VidShare, simple_certificate::LightClientStateUpdateCertificateV2};
10use request_response::{Serializable, request::Request as RequestTrait};
11use serde::{Deserialize, Serialize};
12
13use crate::{SeqTypes, api::BlocksFrontier};
14
15type Height = u64;
17type ViewNumber = u64;
18type RequestId = u64;
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
23pub enum Request {
24 Accounts(Height, ViewNumber, Vec<FeeAccount>),
26 Leaf(Height),
28 ChainConfig(Commitment<ChainConfig>),
30 BlocksFrontier(Height, ViewNumber),
32 RewardAccountsV2(Height, ViewNumber, Vec<RewardAccountV2>),
34 RewardAccountsV1(Height, ViewNumber, Vec<RewardAccountV1>),
36 VidShare(Height, RequestId),
38 StateCert(u64),
40 RewardMerkleTreeV2(u64, ViewNumber),
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
47pub enum Response {
48 Accounts(FeeMerkleTree),
50 Leaf(Vec<Leaf2>),
52 ChainConfig(ChainConfig),
54 BlocksFrontier(BlocksFrontier),
56 RewardAccountsV2(RewardMerkleTreeV2),
58 RewardAccountsV1(RewardMerkleTreeV1),
60 VidShare(VidShare),
62 StateCert(LightClientStateUpdateCertificateV2<SeqTypes>),
64 RewardMerkleTreeV2(Vec<u8>),
66}
67
68#[async_trait]
71impl RequestTrait for Request {
72 type Response = Response;
73
74 async fn validate(&self) -> Result<()> {
75 Ok(())
77 }
78}
79
80impl Serializable for Request {
83 fn to_bytes(&self) -> Result<Vec<u8>> {
84 bincode::serialize(&self).with_context(|| "failed to serialize")
85 }
86
87 fn from_bytes(bytes: &[u8]) -> Result<Self> {
88 bincode::deserialize(bytes).with_context(|| "failed to deserialize")
89 }
90}
91
92impl Serializable for Response {
95 fn to_bytes(&self) -> Result<Vec<u8>> {
96 bincode::serialize(self).with_context(|| "failed to serialize")
97 }
98
99 fn from_bytes(bytes: &[u8]) -> Result<Self> {
100 bincode::deserialize(bytes).with_context(|| "failed to deserialize")
101 }
102}