1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
use serde::{Deserialize, Serialize};
use ckb_jsonrpc_types::{
BlockNumber, BlockView, HeaderView, JsonBytes, NodeAddress, RemoteNodeProtocol, Script,
Transaction, TransactionView, Uint32, Uint64,
};
use ckb_types::H256;
pub use crate::rpc::ckb_indexer::{
Cell, CellType, CellsCapacity, Order, Pagination, ScriptType, SearchKey, SearchKeyFilter,
};
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct ScriptStatus {
pub script: Script,
pub script_type: ScriptType,
pub block_number: BlockNumber,
}
#[derive(Serialize, Deserialize, Eq, PartialEq, Debug)]
#[serde(tag = "status")]
#[serde(rename_all = "snake_case")]
pub enum FetchStatus<T> {
Added { timestamp: Uint64 },
Fetching { first_sent: Uint64 },
Fetched { data: T },
NotFound,
}
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
pub struct TransactionWithHeader {
pub transaction: TransactionView,
pub header: HeaderView,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(untagged)]
pub enum Tx {
Ungrouped(TxWithCell),
Grouped(TxWithCells),
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct TxWithCell {
transaction: TransactionView,
block_number: BlockNumber,
tx_index: Uint32,
io_index: Uint32,
io_type: CellType,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct TxWithCells {
transaction: TransactionView,
block_number: BlockNumber,
tx_index: Uint32,
cells: Vec<(CellType, Uint32)>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RemoteNode {
pub version: String,
pub node_id: String,
pub addresses: Vec<NodeAddress>,
pub connected_duration: Uint64,
pub sync_state: Option<PeerSyncState>,
pub protocols: Vec<RemoteNodeProtocol>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct PeerSyncState {
pub requested_best_known_header: Option<HeaderView>,
pub proved_best_known_header: Option<HeaderView>,
}
crate::jsonrpc!(pub struct LightClientRpcClient {
pub fn set_scripts(&mut self, scripts: Vec<ScriptStatus>) -> ();
pub fn get_scripts(&mut self) -> Vec<ScriptStatus>;
pub fn get_cells(&mut self, search_key: SearchKey, order: Order, limit: Uint32, after: Option<JsonBytes>) -> Pagination<Cell>;
pub fn get_transactions(&mut self, search_key: SearchKey, order: Order, limit: Uint32, after: Option<JsonBytes>) -> Pagination<Tx>;
pub fn get_cells_capacity(&mut self, search_key: SearchKey) -> CellsCapacity;
pub fn send_transaction(&mut self, tx: Transaction) -> H256;
pub fn get_tip_header(&mut self) -> HeaderView;
pub fn get_genesis_block(&mut self) -> BlockView;
pub fn get_header(&mut self, block_hash: H256) -> Option<HeaderView>;
pub fn get_transaction(&mut self, tx_hash: H256) -> Option<TransactionWithHeader>;
pub fn fetch_header(&mut self, block_hash: H256) -> FetchStatus<HeaderView>;
pub fn fetch_transaction(&mut self, tx_hash: H256) -> FetchStatus<TransactionWithHeader>;
pub fn get_peers(&mut self) -> Vec<RemoteNode>;
});