sequencer/request_response/
request.rs1use anyhow::{Context, Result};
2use async_trait::async_trait;
3use committable::Commitment;
4use espresso_types::{
5 v0_3::{ChainConfig, RewardAccountV1, RewardMerkleTreeV1},
6 v0_4::{RewardAccountV2, RewardMerkleTreeV2},
7 FeeAccount, FeeMerkleTree, Leaf2,
8};
9use hotshot_types::{data::VidShare, simple_certificate::LightClientStateUpdateCertificateV2};
10use request_response::{request::Request as RequestTrait, Serializable};
11use serde::{Deserialize, Serialize};
12
13use crate::{api::BlocksFrontier, SeqTypes};
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}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
45pub enum Response {
46 Accounts(FeeMerkleTree),
48 Leaf(Vec<Leaf2>),
50 ChainConfig(ChainConfig),
52 BlocksFrontier(BlocksFrontier),
54 RewardAccountsV2(RewardMerkleTreeV2),
56 RewardAccountsV1(RewardMerkleTreeV1),
58 VidShare(VidShare),
60 StateCert(LightClientStateUpdateCertificateV2<SeqTypes>),
62}
63
64#[async_trait]
67impl RequestTrait for Request {
68 type Response = Response;
69
70 async fn validate(&self) -> Result<()> {
71 Ok(())
73 }
74}
75
76impl Serializable for Request {
79 fn to_bytes(&self) -> Result<Vec<u8>> {
80 bincode::serialize(&self).with_context(|| "failed to serialize")
81 }
82
83 fn from_bytes(bytes: &[u8]) -> Result<Self> {
84 bincode::deserialize(bytes).with_context(|| "failed to deserialize")
85 }
86}
87
88impl Serializable for Response {
91 fn to_bytes(&self) -> Result<Vec<u8>> {
92 bincode::serialize(self).with_context(|| "failed to serialize")
93 }
94
95 fn from_bytes(bytes: &[u8]) -> Result<Self> {
96 bincode::deserialize(bytes).with_context(|| "failed to deserialize")
97 }
98}