220 lines
5.6 KiB
Rust
Raw Normal View History

2025-10-10 17:44:42 -03:00
use std::collections::HashMap;
use nssa::AccountId;
2025-10-10 17:44:42 -03:00
use nssa_core::program::ProgramId;
2025-02-09 11:45:16 -05:00
use serde::{Deserialize, Serialize};
use serde_json::Value;
2025-11-26 00:27:20 +03:00
use super::{
errors::RpcParseError,
parser::{RpcRequest, parse_params},
};
use crate::{HashType, parse_request};
2025-11-26 00:27:20 +03:00
2026-03-04 18:42:33 +03:00
mod base64_deser {
use base64::{Engine as _, engine::general_purpose};
use serde::{self, Deserialize, Deserializer, Serializer, ser::SerializeSeq as _};
pub mod vec {
use super::*;
pub fn serialize<S>(bytes_vec: &[Vec<u8>], serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut seq = serializer.serialize_seq(Some(bytes_vec.len()))?;
for bytes in bytes_vec {
let s = general_purpose::STANDARD.encode(bytes);
seq.serialize_element(&s)?;
}
seq.end()
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<Vec<u8>>, D::Error>
where
D: Deserializer<'de>,
{
let base64_strings: Vec<String> = Deserialize::deserialize(deserializer)?;
base64_strings
.into_iter()
.map(|s| {
general_purpose::STANDARD
.decode(&s)
.map_err(serde::de::Error::custom)
})
.collect()
}
}
pub fn serialize<S>(bytes: &[u8], serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let base64_string = general_purpose::STANDARD.encode(bytes);
serializer.serialize_str(&base64_string)
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
where
D: Deserializer<'de>,
{
let base64_string: String = Deserialize::deserialize(deserializer)?;
general_purpose::STANDARD
.decode(&base64_string)
.map_err(serde::de::Error::custom)
}
}
2025-02-09 11:45:16 -05:00
#[derive(Serialize, Deserialize, Debug)]
2026-03-04 18:42:33 +03:00
pub struct HelloRequest;
2025-02-09 11:45:16 -05:00
#[derive(Serialize, Deserialize, Debug)]
pub struct RegisterAccountRequest {
pub account_id: [u8; 32],
2025-02-09 11:45:16 -05:00
}
#[derive(Serialize, Deserialize, Debug)]
pub struct SendTxRequest {
#[serde(with = "base64_deser")]
2025-08-12 16:48:53 -03:00
pub transaction: Vec<u8>,
2025-02-09 11:45:16 -05:00
}
#[derive(Serialize, Deserialize, Debug)]
pub struct GetBlockDataRequest {
pub block_id: u64,
}
2026-03-10 00:17:43 +03:00
/// Get a range of blocks from `start_block_id` to `end_block_id` (inclusive).
#[derive(Serialize, Deserialize, Debug)]
pub struct GetBlockRangeDataRequest {
pub start_block_id: u64,
pub end_block_id: u64,
}
2025-02-09 11:45:16 -05:00
#[derive(Serialize, Deserialize, Debug)]
2026-03-04 18:42:33 +03:00
pub struct GetGenesisIdRequest;
2025-02-09 11:45:16 -05:00
#[derive(Serialize, Deserialize, Debug)]
2026-03-04 18:42:33 +03:00
pub struct GetLastBlockRequest;
2025-02-09 11:45:16 -05:00
2025-07-23 15:16:53 +03:00
#[derive(Serialize, Deserialize, Debug)]
2026-03-04 18:42:33 +03:00
pub struct GetInitialTestnetAccountsRequest;
2025-07-24 09:14:38 +03:00
#[derive(Serialize, Deserialize, Debug)]
2025-07-22 08:40:04 -03:00
pub struct GetAccountBalanceRequest {
pub account_id: AccountId,
2025-07-22 08:40:04 -03:00
}
2025-07-23 15:16:53 +03:00
2025-07-22 10:23:52 -03:00
#[derive(Serialize, Deserialize, Debug)]
pub struct GetTransactionByHashRequest {
pub hash: HashType,
2025-07-22 10:23:52 -03:00
}
2025-08-21 15:58:31 +03:00
#[derive(Serialize, Deserialize, Debug)]
pub struct GetAccountsNoncesRequest {
pub account_ids: Vec<AccountId>,
2025-08-21 15:58:31 +03:00
}
2025-09-04 13:33:17 +03:00
#[derive(Serialize, Deserialize, Debug)]
pub struct GetAccountRequest {
pub account_id: AccountId,
2025-09-04 13:33:17 +03:00
}
2025-09-12 16:00:57 +03:00
#[derive(Serialize, Deserialize, Debug)]
2025-09-30 14:13:12 -03:00
pub struct GetProofForCommitmentRequest {
2025-09-12 16:00:57 +03:00
pub commitment: nssa_core::Commitment,
}
2025-10-10 17:44:42 -03:00
#[derive(Serialize, Deserialize, Debug)]
2026-03-04 18:42:33 +03:00
pub struct GetProgramIdsRequest;
2025-10-10 17:44:42 -03:00
2025-02-09 11:45:16 -05:00
parse_request!(HelloRequest);
parse_request!(RegisterAccountRequest);
parse_request!(SendTxRequest);
parse_request!(GetBlockDataRequest);
parse_request!(GetBlockRangeDataRequest);
2025-02-09 11:45:16 -05:00
parse_request!(GetGenesisIdRequest);
parse_request!(GetLastBlockRequest);
2025-07-23 15:16:53 +03:00
parse_request!(GetInitialTestnetAccountsRequest);
2025-07-22 08:40:04 -03:00
parse_request!(GetAccountBalanceRequest);
2025-07-22 10:23:52 -03:00
parse_request!(GetTransactionByHashRequest);
2025-08-21 15:58:31 +03:00
parse_request!(GetAccountsNoncesRequest);
2025-09-30 14:13:12 -03:00
parse_request!(GetProofForCommitmentRequest);
parse_request!(GetAccountRequest);
2025-10-10 17:44:42 -03:00
parse_request!(GetProgramIdsRequest);
2025-02-09 11:45:16 -05:00
#[derive(Serialize, Deserialize, Debug)]
pub struct HelloResponse {
pub greeting: String,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct RegisterAccountResponse {
pub status: String,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct SendTxResponse {
pub status: String,
pub tx_hash: HashType,
2025-02-09 11:45:16 -05:00
}
#[derive(Serialize, Deserialize, Debug)]
pub struct GetBlockDataResponse {
#[serde(with = "base64_deser")]
2025-08-12 12:18:13 -03:00
pub block: Vec<u8>,
2025-02-09 11:45:16 -05:00
}
#[derive(Serialize, Deserialize, Debug)]
pub struct GetBlockRangeDataResponse {
#[serde(with = "base64_deser::vec")]
pub blocks: Vec<Vec<u8>>,
}
2025-02-09 11:45:16 -05:00
#[derive(Serialize, Deserialize, Debug)]
pub struct GetGenesisIdResponse {
pub genesis_id: u64,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct GetLastBlockResponse {
pub last_block: u64,
}
2025-07-22 08:40:04 -03:00
#[derive(Serialize, Deserialize, Debug)]
pub struct GetAccountBalanceResponse {
2025-08-07 15:19:06 -03:00
pub balance: u128,
2025-07-22 08:40:04 -03:00
}
2025-07-22 10:23:52 -03:00
2025-08-21 15:58:31 +03:00
#[derive(Serialize, Deserialize, Debug)]
pub struct GetAccountsNoncesResponse {
pub nonces: Vec<u128>,
}
2025-07-22 10:23:52 -03:00
#[derive(Serialize, Deserialize, Debug)]
pub struct GetTransactionByHashResponse {
2025-08-12 12:18:13 -03:00
pub transaction: Option<String>,
2025-07-22 10:23:52 -03:00
}
2025-09-04 13:33:17 +03:00
#[derive(Serialize, Deserialize, Debug)]
pub struct GetAccountResponse {
pub account: nssa::Account,
2025-09-04 13:33:17 +03:00
}
2025-09-12 16:00:57 +03:00
#[derive(Serialize, Deserialize, Debug)]
2025-09-30 14:13:12 -03:00
pub struct GetProofForCommitmentResponse {
2025-09-12 16:00:57 +03:00
pub membership_proof: Option<nssa_core::MembershipProof>,
}
2025-10-10 17:44:42 -03:00
#[derive(Serialize, Deserialize, Debug)]
pub struct GetProgramIdsResponse {
pub program_ids: HashMap<String, ProgramId>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct GetInitialTestnetAccountsResponse {
2026-03-10 00:17:43 +03:00
/// Hex encoded account id.
pub account_id: String,
pub balance: u64,
}