Skip to main content

ic_query/icrc/model/contracts/reports/
ledger.rs

1//! Module: icrc::model::contracts::reports::ledger
2//!
3//! Responsibility: serialized ICRC ledger metadata, capability, and history contracts.
4//! Does not own: account-index history, requests, live transport, archive following, or rendering.
5//! Boundary: preserves raw ledger, block, archive, certificate, and capability fields.
6
7use serde::Serialize;
8use serde_json::Value as JsonValue;
9
10///
11/// IcrcTokenReport
12///
13/// Serializable report for generic ICRC ledger token metadata.
14///
15
16#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
17pub struct IcrcTokenReport {
18    pub schema_version: u32,
19    pub ledger_canister_id: String,
20    pub fetched_at: String,
21    pub source_endpoint: String,
22    pub fetched_by: String,
23    pub token_name: String,
24    pub token_symbol: String,
25    pub decimals: u8,
26    pub transfer_fee: String,
27    pub total_supply: String,
28    pub minting_account_owner: Option<String>,
29    pub minting_account_subaccount_hex: Option<String>,
30    pub supported_standards: Vec<IcrcTokenStandardRow>,
31    pub metadata: Vec<IcrcTokenMetadataRow>,
32}
33
34///
35/// IcrcIndexReport
36///
37/// Serializable report for one generic ICRC-106 index discovery lookup.
38///
39
40#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
41pub struct IcrcIndexReport {
42    pub schema_version: u32,
43    pub ledger_canister_id: String,
44    pub fetched_at: String,
45    pub source_endpoint: String,
46    pub fetched_by: String,
47    pub index_canister_id: Option<String>,
48    pub index_error: Option<String>,
49}
50
51///
52/// IcrcTransactionsReport
53///
54/// Serializable report for a generic ICRC ledger transaction/block history page.
55///
56
57#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
58pub struct IcrcTransactionsReport {
59    pub schema_version: u32,
60    pub ledger_canister_id: String,
61    pub fetched_at: String,
62    pub source_endpoint: String,
63    pub fetched_by: String,
64    pub requested_start: String,
65    pub requested_limit: u32,
66    pub follow_archives: bool,
67    pub log_length: Option<String>,
68    pub blocks: Vec<IcrcTransactionBlockRow>,
69    pub archived_blocks: Vec<IcrcArchivedBlocksRow>,
70    pub followed_archive_blocks: Vec<IcrcFollowedArchiveBlockRow>,
71    pub archive_follow_errors: Vec<IcrcArchiveFollowErrorRow>,
72}
73
74///
75/// IcrcBlockTypesReport
76///
77/// Serializable report for generic ICRC-3 supported block type discovery.
78///
79
80#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
81pub struct IcrcBlockTypesReport {
82    pub schema_version: u32,
83    pub ledger_canister_id: String,
84    pub fetched_at: String,
85    pub source_endpoint: String,
86    pub fetched_by: String,
87    pub block_types: Vec<IcrcBlockTypeRow>,
88}
89
90///
91/// IcrcArchivesReport
92///
93/// Serializable report for generic ICRC-3 archive range discovery.
94///
95
96#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
97pub struct IcrcArchivesReport {
98    pub schema_version: u32,
99    pub ledger_canister_id: String,
100    pub from_canister_id: Option<String>,
101    pub fetched_at: String,
102    pub source_endpoint: String,
103    pub fetched_by: String,
104    pub archives: Vec<IcrcArchiveRow>,
105}
106
107///
108/// IcrcTipCertificateReport
109///
110/// Serializable report for a generic ICRC-3 ledger tip certificate.
111///
112
113#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
114pub struct IcrcTipCertificateReport {
115    pub schema_version: u32,
116    pub ledger_canister_id: String,
117    pub fetched_at: String,
118    pub source_endpoint: String,
119    pub fetched_by: String,
120    pub certificate_present: bool,
121    pub certificate_hex: Option<String>,
122    pub certificate_bytes: Option<usize>,
123    pub hash_tree_hex: Option<String>,
124    pub hash_tree_bytes: Option<usize>,
125}
126
127///
128/// IcrcCapabilitiesReport
129///
130/// Serializable report for generic ICRC ledger endpoint capabilities.
131///
132
133#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
134pub struct IcrcCapabilitiesReport {
135    pub schema_version: u32,
136    pub ledger_canister_id: String,
137    pub fetched_at: String,
138    pub source_endpoint: String,
139    pub fetched_by: String,
140    pub supported_standards: Vec<IcrcTokenStandardRow>,
141    pub capabilities: Vec<IcrcCapabilityRow>,
142}
143
144///
145/// IcrcCapabilityRow
146///
147/// Serializable row for one probed generic ICRC ledger capability.
148///
149
150#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
151pub struct IcrcCapabilityRow {
152    pub capability: String,
153    pub method: String,
154    pub status: String,
155    pub details: Option<String>,
156    pub error: Option<String>,
157}
158
159///
160/// IcrcTokenStandardRow
161///
162/// Serializable row for one ICRC standard supported by a ledger.
163///
164
165#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
166pub struct IcrcTokenStandardRow {
167    pub name: String,
168    pub url: String,
169}
170
171///
172/// IcrcTokenMetadataRow
173///
174/// Serializable row for one raw ICRC ledger metadata entry.
175///
176
177#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
178pub struct IcrcTokenMetadataRow {
179    pub key: String,
180    pub value_type: String,
181    pub value: JsonValue,
182}
183
184///
185/// IcrcTransactionBlockRow
186///
187/// Serializable row for one ICRC-3 block returned by a ledger canister.
188///
189
190#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
191pub struct IcrcTransactionBlockRow {
192    pub index: String,
193    pub block_type: Option<String>,
194    pub transaction_kind: Option<String>,
195    pub timestamp_unix_nanos: Option<String>,
196    pub amount_base_units: Option<String>,
197    pub raw_block: JsonValue,
198}
199
200///
201/// IcrcArchivedBlocksRow
202///
203/// Serializable row for one ICRC-3 archive callback returned by a ledger canister.
204///
205
206#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
207pub struct IcrcArchivedBlocksRow {
208    pub callback_canister_id: String,
209    pub callback_method: String,
210    pub ranges: Vec<IcrcArchivedRangeRow>,
211}
212
213///
214/// IcrcArchivedRangeRow
215///
216/// Serializable row for one ICRC-3 archived block range.
217///
218
219#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
220pub struct IcrcArchivedRangeRow {
221    pub start: String,
222    pub length: String,
223}
224
225///
226/// IcrcFollowedArchiveBlockRow
227///
228/// Serializable row for one ICRC-3 block fetched from an archive callback.
229///
230
231#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
232pub struct IcrcFollowedArchiveBlockRow {
233    pub archive_canister_id: String,
234    pub callback_method: String,
235    pub index: String,
236    pub block_type: Option<String>,
237    pub transaction_kind: Option<String>,
238    pub timestamp_unix_nanos: Option<String>,
239    pub amount_base_units: Option<String>,
240    pub raw_block: JsonValue,
241}
242
243///
244/// IcrcArchiveFollowErrorRow
245///
246/// Serializable row for one archive callback that could not be followed.
247///
248
249#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
250pub struct IcrcArchiveFollowErrorRow {
251    pub callback_canister_id: String,
252    pub callback_method: String,
253    pub ranges: Vec<IcrcArchivedRangeRow>,
254    pub error: String,
255}
256
257///
258/// IcrcBlockTypeRow
259///
260/// Serializable row for one supported ICRC-3 block type.
261///
262
263#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
264pub struct IcrcBlockTypeRow {
265    pub block_type: String,
266    pub url: String,
267}
268
269///
270/// IcrcArchiveRow
271///
272/// Serializable row for one ICRC-3 archive range.
273///
274
275#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
276pub struct IcrcArchiveRow {
277    pub canister_id: String,
278    pub start: String,
279    pub end: String,
280}