Skip to main content

hotmint_api/
types.rs

1use serde::{Deserialize, Serialize};
2
3/// JSON-RPC request
4#[derive(Debug, Deserialize)]
5pub struct RpcRequest {
6    pub method: String,
7    pub params: serde_json::Value,
8    pub id: u64,
9}
10
11/// JSON-RPC response
12#[derive(Debug, Serialize, Deserialize)]
13pub struct RpcResponse {
14    pub result: Option<serde_json::Value>,
15    pub error: Option<RpcError>,
16    pub id: u64,
17}
18
19#[derive(Debug, Serialize, Deserialize)]
20pub struct RpcError {
21    pub code: i32,
22    pub message: String,
23}
24
25impl RpcResponse {
26    pub fn ok(id: u64, result: serde_json::Value) -> Self {
27        Self {
28            result: Some(result),
29            error: None,
30            id,
31        }
32    }
33
34    pub fn err(id: u64, code: i32, message: String) -> Self {
35        Self {
36            result: None,
37            error: Some(RpcError { code, message }),
38            id,
39        }
40    }
41}
42
43/// Consensus status info
44#[derive(Debug, Clone, Serialize)]
45pub struct StatusInfo {
46    pub validator_id: u64,
47    pub current_view: u64,
48    pub last_committed_height: u64,
49    pub epoch: u64,
50    pub validator_count: usize,
51    pub mempool_size: usize,
52}
53
54/// Block info returned by get_block / get_block_by_hash
55#[derive(Debug, Serialize)]
56pub struct BlockInfo {
57    pub height: u64,
58    pub hash: String,
59    pub parent_hash: String,
60    pub view: u64,
61    pub proposer: u64,
62    pub payload_size: usize,
63}
64
65/// Validator info returned by get_validators
66#[derive(Debug, Clone, Serialize)]
67pub struct ValidatorInfoResponse {
68    pub id: u64,
69    pub power: u64,
70    pub public_key: String,
71}
72
73/// Epoch info returned by get_epoch
74#[derive(Debug, Serialize)]
75pub struct EpochInfo {
76    pub number: u64,
77    pub start_view: u64,
78    pub validator_count: usize,
79}
80
81/// Transaction submission result
82#[derive(Debug, Serialize)]
83pub struct TxResult {
84    pub accepted: bool,
85}
86
87/// Block header info returned by get_header (lightweight, no payload)
88#[derive(Debug, Serialize)]
89pub struct HeaderInfo {
90    pub height: u64,
91    pub hash: String,
92    pub parent_hash: String,
93    pub view: u64,
94    pub proposer: u64,
95    pub app_hash: String,
96}
97
98/// Commit QC info returned by get_commit_qc
99#[derive(Debug, Serialize)]
100pub struct CommitQcInfo {
101    pub block_hash: String,
102    pub view: u64,
103    pub signer_count: usize,
104    pub epoch: u64,
105}
106
107/// Response for the `get_tx` RPC method.
108#[derive(Serialize)]
109pub struct TxInfo {
110    pub tx_hash: String,
111    pub height: u64,
112    pub index: u32,
113    /// Hex-encoded transaction bytes.
114    pub data: String,
115}
116
117/// Response for the `query` RPC method.
118#[derive(Serialize)]
119pub struct QueryResponseInfo {
120    /// Hex-encoded result data.
121    pub data: String,
122    /// Hex-encoded Merkle proof (if provided by the application).
123    pub proof: Option<String>,
124    pub height: u64,
125}
126
127/// Response for the `verify_header` RPC method.
128#[derive(Serialize)]
129pub struct VerifyHeaderResult {
130    pub valid: bool,
131    pub error: Option<String>,
132}
133#[derive(Serialize)]
134pub struct BlockResultsInfo {
135    pub height: u64,
136    pub tx_hashes: Vec<String>,
137    pub events: Vec<EventInfo>,
138    pub app_hash: String,
139}
140
141/// A single application event in the block results response.
142#[derive(Serialize)]
143pub struct EventInfo {
144    pub r#type: String,
145    pub attributes: Vec<EventAttributeInfo>,
146}
147
148#[derive(Serialize)]
149pub struct EventAttributeInfo {
150    pub key: String,
151    pub value: String,
152}