tofuri_rpc/
lib.rs

1use multiaddr::Multiaddr;
2use std::error::Error;
3use tofuri_block::BlockA;
4use tofuri_core::*;
5use tofuri_rpc_core::Data;
6use tofuri_rpc_core::Request;
7use tofuri_stake::StakeA;
8use tofuri_stake::StakeB;
9use tofuri_sync::Sync;
10use tofuri_transaction::TransactionA;
11use tofuri_transaction::TransactionB;
12use tokio::io::AsyncReadExt;
13use tokio::io::AsyncWriteExt;
14use tokio::net::TcpStream;
15async fn r(data: Data, addr: &str, vec: Option<Vec<u8>>) -> Result<Vec<u8>, Box<dyn Error>> {
16    let mut stream = TcpStream::connect(addr).await?;
17    let request = Request {
18        data,
19        vec: vec.unwrap_or(vec![]),
20    };
21    stream.write_all(&bincode::serialize(&request)?).await?;
22    let mut buf = [0; 1024];
23    let bytes = stream.read(&mut buf).await?;
24    let vec = buf[..bytes].to_vec();
25    Ok(vec)
26}
27pub async fn balance(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
28    Ok(bincode::deserialize(&r(Data::Balance, addr, Some(bincode::serialize(address_bytes)?)).await?)?)
29}
30pub async fn balance_pending_min(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
31    Ok(bincode::deserialize(
32        &r(Data::BalancePendingMin, addr, Some(bincode::serialize(address_bytes)?)).await?,
33    )?)
34}
35pub async fn balance_pending_max(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
36    Ok(bincode::deserialize(
37        &r(Data::BalancePendingMax, addr, Some(bincode::serialize(address_bytes)?)).await?,
38    )?)
39}
40pub async fn staked(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
41    Ok(bincode::deserialize(&r(Data::Staked, addr, Some(bincode::serialize(address_bytes)?)).await?)?)
42}
43pub async fn staked_pending_min(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
44    Ok(bincode::deserialize(
45        &r(Data::StakedPendingMin, addr, Some(bincode::serialize(address_bytes)?)).await?,
46    )?)
47}
48pub async fn staked_pending_max(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
49    Ok(bincode::deserialize(
50        &r(Data::StakedPendingMax, addr, Some(bincode::serialize(address_bytes)?)).await?,
51    )?)
52}
53pub async fn height(addr: &str) -> Result<usize, Box<dyn Error>> {
54    Ok(bincode::deserialize(&r(Data::Height, addr, None).await?)?)
55}
56pub async fn height_by_hash(addr: &str, hash: &Hash) -> Result<usize, Box<dyn Error>> {
57    Ok(bincode::deserialize(&r(Data::HeightByHash, addr, Some(bincode::serialize(hash)?)).await?)?)
58}
59pub async fn block_latest(addr: &str) -> Result<BlockA, Box<dyn Error>> {
60    Ok(bincode::deserialize(&r(Data::BlockLatest, addr, None).await?)?)
61}
62pub async fn hash_by_height(addr: &str, height: &usize) -> Result<Hash, Box<dyn Error>> {
63    Ok(bincode::deserialize(&r(Data::HashByHeight, addr, Some(bincode::serialize(height)?)).await?)?)
64}
65pub async fn block_by_hash(addr: &str, hash: &Hash) -> Result<BlockA, Box<dyn Error>> {
66    Ok(bincode::deserialize(&r(Data::BlockByHash, addr, Some(bincode::serialize(hash)?)).await?)?)
67}
68pub async fn transaction_by_hash(addr: &str, hash: &Hash) -> Result<TransactionA, Box<dyn Error>> {
69    Ok(bincode::deserialize(&r(Data::TransactionByHash, addr, Some(bincode::serialize(hash)?)).await?)?)
70}
71pub async fn stake_by_hash(addr: &str, hash: &Hash) -> Result<StakeA, Box<dyn Error>> {
72    Ok(bincode::deserialize(&r(Data::StakeByHash, addr, Some(bincode::serialize(hash)?)).await?)?)
73}
74pub async fn peers(addr: &str) -> Result<Vec<Multiaddr>, Box<dyn Error>> {
75    Ok(bincode::deserialize(&r(Data::Peers, addr, None).await?)?)
76}
77pub async fn peer(addr: &str, multiaddr: &Multiaddr) -> Result<(), Box<dyn Error>> {
78    Ok(bincode::deserialize(&r(Data::Peer, addr, Some(bincode::serialize(multiaddr)?)).await?)?)
79}
80pub async fn transaction(addr: &str, transaction_b: &TransactionB) -> Result<String, Box<dyn Error>> {
81    Ok(bincode::deserialize(
82        &r(Data::Transaction, addr, Some(bincode::serialize(transaction_b)?)).await?,
83    )?)
84}
85pub async fn stake(addr: &str, stake_b: &StakeB) -> Result<String, Box<dyn Error>> {
86    Ok(bincode::deserialize(&r(Data::Stake, addr, Some(bincode::serialize(stake_b)?)).await?)?)
87}
88pub async fn cargo_pkg_name(addr: &str) -> Result<String, Box<dyn Error>> {
89    Ok(bincode::deserialize(&r(Data::CargoPkgName, addr, None).await?)?)
90}
91pub async fn cargo_pkg_version(addr: &str) -> Result<String, Box<dyn Error>> {
92    Ok(bincode::deserialize(&r(Data::CargoPkgVersion, addr, None).await?)?)
93}
94pub async fn cargo_pkg_repository(addr: &str) -> Result<String, Box<dyn Error>> {
95    Ok(bincode::deserialize(&r(Data::CargoPkgRepository, addr, None).await?)?)
96}
97pub async fn git_hash(addr: &str) -> Result<String, Box<dyn Error>> {
98    Ok(bincode::deserialize(&r(Data::GitHash, addr, None).await?)?)
99}
100pub async fn address(addr: &str) -> Result<AddressBytes, Box<dyn Error>> {
101    Ok(bincode::deserialize(&r(Data::Address, addr, None).await?)?)
102}
103pub async fn ticks(addr: &str) -> Result<usize, Box<dyn Error>> {
104    Ok(bincode::deserialize(&r(Data::Ticks, addr, None).await?)?)
105}
106pub async fn lag(addr: &str) -> Result<f64, Box<dyn Error>> {
107    Ok(bincode::deserialize(&r(Data::Lag, addr, None).await?)?)
108}
109pub async fn time(addr: &str) -> Result<i64, Box<dyn Error>> {
110    Ok(bincode::deserialize(&r(Data::Time, addr, None).await?)?)
111}
112pub async fn tree_size(addr: &str) -> Result<usize, Box<dyn Error>> {
113    Ok(bincode::deserialize(&r(Data::TreeSize, addr, None).await?)?)
114}
115pub async fn sync(addr: &str) -> Result<Sync, Box<dyn Error>> {
116    Ok(bincode::deserialize(&r(Data::Sync, addr, None).await?)?)
117}
118pub async fn random_queue(addr: &str) -> Result<Vec<AddressBytes>, Box<dyn Error>> {
119    Ok(bincode::deserialize(&r(Data::RandomQueue, addr, None).await?)?)
120}
121pub async fn dynamic_hashes(addr: &str) -> Result<usize, Box<dyn Error>> {
122    Ok(bincode::deserialize(&r(Data::DynamicHashes, addr, None).await?)?)
123}
124pub async fn dynamic_latest_hashes(addr: &str) -> Result<Vec<Hash>, Box<dyn Error>> {
125    Ok(bincode::deserialize(&r(Data::DynamicLatestHashes, addr, None).await?)?)
126}
127pub async fn dynamic_stakers(addr: &str) -> Result<usize, Box<dyn Error>> {
128    Ok(bincode::deserialize(&r(Data::DynamicStakers, addr, None).await?)?)
129}
130pub async fn trusted_hashes(addr: &str) -> Result<usize, Box<dyn Error>> {
131    Ok(bincode::deserialize(&r(Data::TrustedHashes, addr, None).await?)?)
132}
133pub async fn trusted_latest_hashes(addr: &str) -> Result<Vec<Hash>, Box<dyn Error>> {
134    Ok(bincode::deserialize(&r(Data::TrustedLatestHashes, addr, None).await?)?)
135}
136pub async fn trusted_stakers(addr: &str) -> Result<usize, Box<dyn Error>> {
137    Ok(bincode::deserialize(&r(Data::TrustedStakers, addr, None).await?)?)
138}