Skip to main content

arweave_rs/
types.rs

1use serde::{Deserialize, Serialize};
2use serde_aux::prelude::*;
3
4use crate::crypto::base64::Base64;
5
6#[derive(Serialize, Deserialize, Debug)]
7pub struct NetworkInfo {
8    pub network: String,
9    pub version: usize,
10    pub release: usize,
11    pub height: u128,
12    pub current: Base64,
13    pub blocks: usize,
14    pub peers: usize,
15    pub queue_length: usize,
16    pub node_state_latency: usize,
17}
18
19#[derive(Serialize, Deserialize, Debug)]
20pub struct ProofOfAccess {
21    pub option: String,
22    pub tx_path: Base64,
23    pub data_path: Base64,
24    pub chunk: Base64,
25}
26
27//Defined in https://docs.arweave.org/developers/server/http-api#block-format
28#[derive(Serialize, Deserialize, Debug)]
29pub struct BlockInfo {
30    pub nonce: Base64,
31    pub previous_block: Base64,
32    pub timestamp: u64,
33    pub last_retarget: u64,
34    #[serde(deserialize_with = "deserialize_string_from_number")]
35    pub diff: String,
36    pub height: u64,
37    pub hash: Base64,
38    pub indep_hash: Base64,
39    pub txs: Vec<Base64>,
40    pub wallet_list: Base64,
41    pub reward_addr: Base64,
42    pub tags: Vec<Tag>,
43    pub reward_pool: u64,
44    pub weave_size: u64,
45    pub block_size: u64,
46
47    //V2 Stuff
48    pub cumulative_diff: Option<String>,
49    pub hash_list_merkle: Option<Base64>,
50
51    // V3 stuff
52    pub tx_root: Base64,
53    pub tx_tree: Vec<Base64>,
54    pub poa: ProofOfAccess,
55}
56#[derive(Deserialize, Debug, Default, Eq, PartialEq)]
57pub struct Tx {
58    pub format: u8,
59    pub id: Base64,
60    pub last_tx: Base64,
61    pub owner: Base64,
62    pub tags: Vec<Tag>,
63    pub target: Base64,
64    pub quantity: String,
65    pub data_root: Base64,
66    pub data: Base64,
67    pub data_size: String,
68    pub reward: String,
69    pub signature: Base64,
70}
71
72#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
73pub struct Tag {
74    pub name: Base64,
75    pub value: Base64,
76}
77
78#[derive(Serialize, Deserialize)]
79pub struct TxStatus {
80    pub block_height: u128,
81    pub block_indep_hash: Base64,
82    pub number_of_confirmations: u64,
83}
84
85#[derive(Serialize, Deserialize, Debug, Default, Eq, PartialEq)]
86pub struct Chunk {
87    pub data_root: Base64,
88    pub data_size: u64,
89    pub data_path: Base64,
90    pub offset: usize,
91    pub chunk: Base64,
92}