1use std::collections::HashMap;
5
6use af_sui_types::{EpochId, ObjectDigest, ObjectId, ObjectRef, TransactionDigest};
7use serde::{Deserialize, Serialize};
8use serde_with::{IfIsHumanReadable, serde_as};
9use sui_sdk_types::Version;
10
11use super::Page;
12use crate::serde::BigInt;
13
14pub type CoinPage = Page<Coin, String>;
15
16#[serde_as]
17#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
18#[serde(rename_all = "camelCase")]
19pub struct Balance {
20 pub coin_type: String,
21 pub coin_object_count: usize,
22 #[serde_as(as = "BigInt<u128>")]
23 pub total_balance: u128,
24 #[serde_as(as = "HashMap<BigInt<u64>, BigInt<u128>>")]
25 pub locked_balance: HashMap<EpochId, u128>,
26}
27
28impl Balance {
29 pub fn zero(coin_type: String) -> Self {
30 Self {
31 coin_type,
32 coin_object_count: 0,
33 total_balance: 0,
34 locked_balance: HashMap::new(),
35 }
36 }
37}
38
39#[serde_as]
40#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
41#[serde(rename_all = "camelCase")]
42pub struct Coin {
43 pub coin_type: String,
44 pub coin_object_id: ObjectId,
45 #[serde_as(as = "BigInt<u64>")]
46 pub version: Version,
47 pub digest: ObjectDigest,
48 #[serde_as(as = "BigInt<u64>")]
49 pub balance: u64,
50 pub previous_transaction: TransactionDigest,
51}
52
53impl Coin {
54 pub fn object_ref(&self) -> ObjectRef {
55 (self.coin_object_id, self.version, self.digest)
56 }
57}
58
59#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
60#[serde(rename_all = "camelCase")]
61pub struct SuiCoinMetadata {
62 pub decimals: u8,
64 pub name: String,
66 pub symbol: String,
68 pub description: String,
70 pub icon_url: Option<String>,
72 pub id: Option<ObjectId>,
74}
75
76#[serde_as]
78#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)]
79pub struct Supply {
80 #[serde_as(as = "IfIsHumanReadable<BigInt<u64>, _>")]
81 pub value: u64,
82}
83
84#[cfg(test)]
85mod tests {
86 use super::CoinPage;
87
88 #[test]
89 fn coin_page_json() {
90 let value = serde_json::json!({
91 "data": [
92 {
93 "coinType": "0x2::sui::SUI",
94 "coinObjectId": "0x778e75c813cc7bf615a3477b5c2e5cc4364cde735b80c43597ec8175fd943671",
95 "version": "364688977",
96 "digest": "7yc3F75UbHU9Qshf951zmbkQ7rgQmE8r1YRKGTbmLJ2f",
97 "balance": "9998727478293",
98 "previousTransaction": "CQHxo6mn7zNQX11guHTUPNa5PMhCvodhmoz982PFnErX"
99 },
100 {
101 "coinType": "0x2::sui::SUI",
102 "coinObjectId": "0x15be68e1baa31868d463e0676fa46e1fb6b0f51063d804e857f0113d2920c67a",
103 "version": "204442968",
104 "digest": "4YBFFvLDMhuQPsLtENqfGsvAcV4mDqzaiZBvhJ7KdjiH",
105 "balance": "996650164",
106 "previousTransaction": "HsstpwxjrXBJCf5eqSzV7asXnE2e2JVDYQxCNtzEiDHG"
107 },
108 {
109 "coinType": "0x2::sui::SUI",
110 "coinObjectId": "0x4aca24029ffb5583adc4e9a298244ced3faf6827412269aa1ea0feb89038f0be",
111 "version": "281343209",
112 "digest": "5zSTxMKJABvj31nw5ZYrffwU6Adeiu5vcNsP2h55JNFU",
113 "balance": "995220764",
114 "previousTransaction": "HLY1QY8okXbXmPGKvdpYSgTvZyjgJECpiXjQNQTnBiQj"
115 },
116 {
117 "coinType": "0x2::sui::SUI",
118 "coinObjectId": "0xbe02f79a382915959c457880f12f03b1ec475d3084795fc014c4f43e50e5afe6",
119 "version": "169438719",
120 "digest": "ApvnC81FCi71JhMnZjBn1y1NN6Lw279j2NiG1ehvtDhM",
121 "balance": "993603580",
122 "previousTransaction": "F9u1PgGAyaBkKYGs8r7L8zjTJxa6SwamuzpTxEjUyizy"
123 },
124 {
125 "coinType": "0x2::sui::SUI",
126 "coinObjectId": "0x89f6504590d43becf58fd949772e609731bffbd72e6ac5521357b12a0b2fc2d2",
127 "version": "204443012",
128 "digest": "2soVvf43GDoEUvNy2sSYxbmwketGdS6fU65H1Ze4BqJD",
129 "balance": "320804480",
130 "previousTransaction": "37skCQJmUCn5sPJJShi8sk1EhvKMuxjAuN7pT9nEydvi"
131 },
132 {
133 "coinType": "0x2::sui::SUI",
134 "coinObjectId": "0x00c4eaac095d54118eba1ba78c1f7e59b42620e070baeb6b7ff2ee481ccda314",
135 "version": "204443010",
136 "digest": "7H3SutEWwU5uJSx6AB2vAUCRz9QdrAvfJU2f4DXVUQiX",
137 "balance": "100000000",
138 "previousTransaction": "67YwHzL7hY1E6CC3WQ7a9M3neAGQpPK56MnLGYHC63Lc"
139 },
140 {
141 "coinType": "0x2::sui::SUI",
142 "coinObjectId": "0x00d3f6aa6e02253f6f8f128af2772be4922d28b38909746bc3aee9528fd02c1f",
143 "version": "204443012",
144 "digest": "mBS7PgFZ3kEWXdEjf9H87zLXAXusUm33zP4hvf2c6PN",
145 "balance": "100000000",
146 "previousTransaction": "37skCQJmUCn5sPJJShi8sk1EhvKMuxjAuN7pT9nEydvi"
147 },
148 {
149 "coinType": "0x2::sui::SUI",
150 "coinObjectId": "0x01180d0165e367f8cae862e2f8bb31db099de3127cac2e015f482a330ad53f0c",
151 "version": "204443011",
152 "digest": "9o9fNdXkgQ1Q9obzPXnRykrADrfvXYEVkpHihBh3bkAW",
153 "balance": "100000000",
154 "previousTransaction": "C8reWy1j85aBxeKRweoeW1amkiWBdLmHpdajzFzAh9vN"
155 },
156 {
157 "coinType": "0x2::sui::SUI",
158 "coinObjectId": "0x011bf3b329893627c875da9136af03dd4c80a0b50df80b620317d72f867a57a5",
159 "version": "204443011",
160 "digest": "HbGQS5rvjrZ7Kb5rGtuqqhyQzDwzQca7ZwTqqXejWgny",
161 "balance": "100000000",
162 "previousTransaction": "C8reWy1j85aBxeKRweoeW1amkiWBdLmHpdajzFzAh9vN"
163 },
164 {
165 "coinType": "0x2::sui::SUI",
166 "coinObjectId": "0x0137cbf95c63ad3f5eebcb3ce00eddb2469c033b84aa652853fa3f8ab1673e91",
167 "version": "204443009",
168 "digest": "BrrqeYcBhYXXQTNVb93fD5XBMT8qkLKzMjcWnhc6HQxF",
169 "balance": "100000000",
170 "previousTransaction": "ErMm3QXPzdk6hnWDnm4ikvzGqEoLptGNRbXxf4hetxfZ"
171 },
172 {
173 "coinType": "0x2::sui::SUI",
174 "coinObjectId": "0x0142b2b7a38fbbe2be62c367d475960ec59d4a1f270d51d575ff477ac833e331",
175 "version": "204443009",
176 "digest": "E2JFhJuutsVYp6AfcWnLT6UBydfHc7fQQA6t3AMJ1YEV",
177 "balance": "100000000",
178 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
179 },
180 {
181 "coinType": "0x2::sui::SUI",
182 "coinObjectId": "0x014a72c032016a3e735b1b3c87ac63b7b56ece83a70074d69ffd334a5b890dbb",
183 "version": "204443009",
184 "digest": "5nLWKmLfbBZZJ54UFV3FUgWycLj5VSvno7oYsM5xcn5r",
185 "balance": "100000000",
186 "previousTransaction": "ErMm3QXPzdk6hnWDnm4ikvzGqEoLptGNRbXxf4hetxfZ"
187 },
188 {
189 "coinType": "0x2::sui::SUI",
190 "coinObjectId": "0x01ee86bd47d7e193b22f63475b62bb7b4c86dcbd245ad835116d450fc5002d0c",
191 "version": "204443009",
192 "digest": "59iohfduZsQMUXiNZgY36y5kyaZqTYoEPpRHvJXqCyMA",
193 "balance": "100000000",
194 "previousTransaction": "ErMm3QXPzdk6hnWDnm4ikvzGqEoLptGNRbXxf4hetxfZ"
195 },
196 {
197 "coinType": "0x2::sui::SUI",
198 "coinObjectId": "0x01fb41a94580b9815ab5b64f909b5c76e57648dffa17a46902e854735c7b2664",
199 "version": "204443009",
200 "digest": "A9f9GxA4ceAhRetrDDg9gQEdt6yBJKr1CAikYHChcbUv",
201 "balance": "100000000",
202 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
203 },
204 {
205 "coinType": "0x2::sui::SUI",
206 "coinObjectId": "0x020c674a7dfe642fab957ae1781a72e220b7e4e161dac134be3ee21c67397659",
207 "version": "204443010",
208 "digest": "3jFHQm2pUcZvFdRmBrQiqfPQtUi2oyAbRUHNHXRTiWRp",
209 "balance": "100000000",
210 "previousTransaction": "67YwHzL7hY1E6CC3WQ7a9M3neAGQpPK56MnLGYHC63Lc"
211 },
212 {
213 "coinType": "0x2::sui::SUI",
214 "coinObjectId": "0x0302b7bfeb5523014f9293d86ad63da8a4e85d7397b58c9488c7279b571608e8",
215 "version": "204443009",
216 "digest": "C1V1zxgv42UdkUEMxQy3aSeE7CqWpw1RHZaswW377Bco",
217 "balance": "100000000",
218 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
219 },
220 {
221 "coinType": "0x2::sui::SUI",
222 "coinObjectId": "0x035d124b3577893985e3def4f7822178ffce315b010250148cb4d9fe4eb26fbd",
223 "version": "204443012",
224 "digest": "C7L7hhpNavzyrEHSFa3vMd84dPomMmA27nT5mQoj7wC7",
225 "balance": "100000000",
226 "previousTransaction": "37skCQJmUCn5sPJJShi8sk1EhvKMuxjAuN7pT9nEydvi"
227 },
228 {
229 "coinType": "0x2::sui::SUI",
230 "coinObjectId": "0x037c3b0c4604963cf7e5b96b9e692045961d1871c8ebbc0eb5e06cb3c5641239",
231 "version": "204443011",
232 "digest": "6a36ybzpPogNRfcdJ8CSeEwUFBjEpZPBEmZUwXgHxgdQ",
233 "balance": "100000000",
234 "previousTransaction": "C8reWy1j85aBxeKRweoeW1amkiWBdLmHpdajzFzAh9vN"
235 },
236 {
237 "coinType": "0x2::sui::SUI",
238 "coinObjectId": "0x039783a068009f91dcd4ef048626834b9a0fbb9d75ec6c3aefde2e4a68940340",
239 "version": "204443012",
240 "digest": "31b4YUjmo25h4SHP4hc5JhMRZ2Lpak1AjfNmLQJFxDhc",
241 "balance": "100000000",
242 "previousTransaction": "37skCQJmUCn5sPJJShi8sk1EhvKMuxjAuN7pT9nEydvi"
243 },
244 {
245 "coinType": "0x2::sui::SUI",
246 "coinObjectId": "0x03bb15c8b1efb827c0f05a8ca90c4629bcf7eac577f021d3be26356543664e7d",
247 "version": "204443010",
248 "digest": "HVWRpHFmmqaPXvPcZ4bcEyCV6hJ5pCgqnZX3ZANfsiPP",
249 "balance": "100000000",
250 "previousTransaction": "67YwHzL7hY1E6CC3WQ7a9M3neAGQpPK56MnLGYHC63Lc"
251 },
252 {
253 "coinType": "0x2::sui::SUI",
254 "coinObjectId": "0x03c9ab723d12ed8096e5e9bbfa171ae79de975bc1519d054b52e50f93566519c",
255 "version": "204443011",
256 "digest": "7A17g6F3XSdBPuZ6UPJmepQdJBovmmcS4PETH8pusHDt",
257 "balance": "100000000",
258 "previousTransaction": "C8reWy1j85aBxeKRweoeW1amkiWBdLmHpdajzFzAh9vN"
259 },
260 {
261 "coinType": "0x2::sui::SUI",
262 "coinObjectId": "0x03ce6f9849e55f20699b32df05d2b31bb69affe67c74a1e655d287430d08b86a",
263 "version": "204443011",
264 "digest": "FWaFBi4tEMEV2ca54KYpBCGd7xoYqNcyzWmjZbrcD5mW",
265 "balance": "100000000",
266 "previousTransaction": "C8reWy1j85aBxeKRweoeW1amkiWBdLmHpdajzFzAh9vN"
267 },
268 {
269 "coinType": "0x2::sui::SUI",
270 "coinObjectId": "0x040363647d1f837eedd65712144ec12b0d08d3f9843fe88260c738dea483c191",
271 "version": "204443009",
272 "digest": "AyQAViL6gkkg2bUojgP2tNcSxtUe1HhSvvAyqvmYdgvk",
273 "balance": "100000000",
274 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
275 },
276 {
277 "coinType": "0x2::sui::SUI",
278 "coinObjectId": "0x04078b551cc46943c62e138ee84a5b74c4572afc2a7ceadce2db87362d7d3fbd",
279 "version": "204443010",
280 "digest": "HtahaMU1PShZU52dnnte9wz6wjym2JrUdQe94H363g3V",
281 "balance": "100000000",
282 "previousTransaction": "67YwHzL7hY1E6CC3WQ7a9M3neAGQpPK56MnLGYHC63Lc"
283 },
284 {
285 "coinType": "0x2::sui::SUI",
286 "coinObjectId": "0x04223a97a52778a930caeac1095064c9992145bf6c736acd67c215c3b749dc85",
287 "version": "204443009",
288 "digest": "9Wis1StoPER6VQKF4niT2Et5AWFKrQCC1xF4vBuwTZiY",
289 "balance": "100000000",
290 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
291 },
292 {
293 "coinType": "0x2::sui::SUI",
294 "coinObjectId": "0x043527fbcd0a98dfcd24a553c16c2e424a6c0eb511cd28c7a0fd0dcc0cae7db5",
295 "version": "204443009",
296 "digest": "7WMkbHnFRqyu6bh7j9aC87sZT7dv3v5fN7rt9tSx3RFD",
297 "balance": "100000000",
298 "previousTransaction": "ErMm3QXPzdk6hnWDnm4ikvzGqEoLptGNRbXxf4hetxfZ"
299 },
300 {
301 "coinType": "0x2::sui::SUI",
302 "coinObjectId": "0x043d85bc1fd4e22da944c2aadb079c42baa8f412cb2ada9495768b2760000dbf",
303 "version": "204443011",
304 "digest": "6TfSFvfyAbrP86xB18YY3DSoy2KqHxj2gg8Dg4XWrqfK",
305 "balance": "100000000",
306 "previousTransaction": "C8reWy1j85aBxeKRweoeW1amkiWBdLmHpdajzFzAh9vN"
307 },
308 {
309 "coinType": "0x2::sui::SUI",
310 "coinObjectId": "0x046a3e3af89ac4787770aa5528b1e920812a1ec012aefba05799f1f45cede1d7",
311 "version": "204443009",
312 "digest": "8DSbVPCKABx7P5cY8LxNWiXyZhcKju5vUbTRRgqh49NL",
313 "balance": "100000000",
314 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
315 },
316 {
317 "coinType": "0x2::sui::SUI",
318 "coinObjectId": "0x04f907b30aa0fe2168d887c7e8971944a48bee5fb810d6a07ff4c944665d964c",
319 "version": "204443012",
320 "digest": "Ge4ZBwXFyfMXj1Fe9GurS5RTHwY29a3jo6Fu7AB3QEtX",
321 "balance": "100000000",
322 "previousTransaction": "37skCQJmUCn5sPJJShi8sk1EhvKMuxjAuN7pT9nEydvi"
323 },
324 {
325 "coinType": "0x2::sui::SUI",
326 "coinObjectId": "0x05001d2eb977205bdb6e928a374adaa67049b0f2e42b1c8ca51649fba7ec8c2a",
327 "version": "204443009",
328 "digest": "8ScwnnePv1A6Gjw2CKs6VDuvDSEtyfWcJyDLCk8a2SiY",
329 "balance": "100000000",
330 "previousTransaction": "ErMm3QXPzdk6hnWDnm4ikvzGqEoLptGNRbXxf4hetxfZ"
331 },
332 {
333 "coinType": "0x2::sui::SUI",
334 "coinObjectId": "0x050ac19b018586da46bbb980d2a60d5cc1e34059a9da7b1a8365bb4129d98b8f",
335 "version": "204443009",
336 "digest": "GUnP1FZ89C8gMCz864SyqeUnFEAAAUXfcWTZUw8bBrrG",
337 "balance": "100000000",
338 "previousTransaction": "ErMm3QXPzdk6hnWDnm4ikvzGqEoLptGNRbXxf4hetxfZ"
339 },
340 {
341 "coinType": "0x2::sui::SUI",
342 "coinObjectId": "0x051fe3a93a08feaa0321702eda9c17484cc33f139be93b19fba6ec0e386b2e7b",
343 "version": "204443009",
344 "digest": "43mCkekG6meCs1srwrCnQkSm5zyH9MaUUyHPMD4u2GN4",
345 "balance": "100000000",
346 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
347 },
348 {
349 "coinType": "0x2::sui::SUI",
350 "coinObjectId": "0x052078a0212f3589d0b7a605377edbdd35c8728c7ec1dfe5ac68020bbd213e74",
351 "version": "204443011",
352 "digest": "9Av7girBZB9nRMidT485NtbihgALzjnQ2KVk9XGKG3PJ",
353 "balance": "100000000",
354 "previousTransaction": "C8reWy1j85aBxeKRweoeW1amkiWBdLmHpdajzFzAh9vN"
355 },
356 {
357 "coinType": "0x2::sui::SUI",
358 "coinObjectId": "0x05314165d8133f713f95164af7566e4d21a25bca64d0dea55355f66ed5913ee4",
359 "version": "204443009",
360 "digest": "4hn3chb1uXvYqYDMAtrQLPyPMxE7fQA3ceQTYjiaVF3D",
361 "balance": "100000000",
362 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
363 },
364 {
365 "coinType": "0x2::sui::SUI",
366 "coinObjectId": "0x054c752dcc8ecd01c57c0f6238d923a343be7f4b5caff289b3b18aa828e94c2e",
367 "version": "204443010",
368 "digest": "4ZyXKGvoVrgRt8MXzFoLV2Lo6Cau4f9JVaV2HKvQ5am8",
369 "balance": "100000000",
370 "previousTransaction": "67YwHzL7hY1E6CC3WQ7a9M3neAGQpPK56MnLGYHC63Lc"
371 },
372 {
373 "coinType": "0x2::sui::SUI",
374 "coinObjectId": "0x0571b0dc38a486690c350b00a4fa1d3715de639eaea44da358abb3cbf6bfdff3",
375 "version": "204443010",
376 "digest": "3n1pvJgv71Rm7KndZHEdrF3WhdfTdMkzMEYsqTrvqeuJ",
377 "balance": "100000000",
378 "previousTransaction": "67YwHzL7hY1E6CC3WQ7a9M3neAGQpPK56MnLGYHC63Lc"
379 },
380 {
381 "coinType": "0x2::sui::SUI",
382 "coinObjectId": "0x057b88851b9e39d0f718ddb93213c59195104266d40ee403861097de67cadd12",
383 "version": "204443009",
384 "digest": "8ov5nQehtR7X85hmw7jmyc2qvFB8jM9BgXQGXa1Ht1z5",
385 "balance": "100000000",
386 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
387 },
388 {
389 "coinType": "0x2::sui::SUI",
390 "coinObjectId": "0x05a0295f2e2b20131537040d84a03057b044cb8fc35d9e2707e827daaa103e43",
391 "version": "204443009",
392 "digest": "8h94mavAQ3PD3N2XT2RqzPNdZhid4tYcnbg2RGDMJoFc",
393 "balance": "100000000",
394 "previousTransaction": "ErMm3QXPzdk6hnWDnm4ikvzGqEoLptGNRbXxf4hetxfZ"
395 },
396 {
397 "coinType": "0x2::sui::SUI",
398 "coinObjectId": "0x060106721f9a27d742b4d6dfe8cf240d1088807ac884f81297e80db07933b72e",
399 "version": "204443009",
400 "digest": "95MZwBssgeR4Ap2LsuqxM798XxrTXZNRftL9V45fCfbL",
401 "balance": "100000000",
402 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
403 },
404 {
405 "coinType": "0x2::sui::SUI",
406 "coinObjectId": "0x074964684593b5db26c7bedd364eb04358e031533264e37fa4630ad84b72c4db",
407 "version": "204443009",
408 "digest": "A1dsMg84rTkPuGy35eYvfQPMwHyhWKD5MajhGHyDTeV7",
409 "balance": "100000000",
410 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
411 },
412 {
413 "coinType": "0x2::sui::SUI",
414 "coinObjectId": "0x07912db60cc3872aa8e5d72442fd1a5bf716d56fe49e35656f5f671ddadda32f",
415 "version": "204443010",
416 "digest": "Hb6vHTUm7zWE7BadXDfebGwiA4qZx2XUWct57BTWZWpE",
417 "balance": "100000000",
418 "previousTransaction": "67YwHzL7hY1E6CC3WQ7a9M3neAGQpPK56MnLGYHC63Lc"
419 },
420 {
421 "coinType": "0x2::sui::SUI",
422 "coinObjectId": "0x07f5770a3a77bb38ac14a047eed5eef48b17e6a215f803e3b55a5b85185f8df3",
423 "version": "204443009",
424 "digest": "HVVyCc5cmthowwiy1yqoRLbHb9gaZXzNdTebYXu6DEYa",
425 "balance": "100000000",
426 "previousTransaction": "ErMm3QXPzdk6hnWDnm4ikvzGqEoLptGNRbXxf4hetxfZ"
427 },
428 {
429 "coinType": "0x2::sui::SUI",
430 "coinObjectId": "0x07fa317c23168c9323c6cac95f25ef56a3c99aa05c641934601d24a09553e647",
431 "version": "204443012",
432 "digest": "9oH5MfTXX7ofLpLQFvUbPTgAVt5uk731WiHJMsXPX7fT",
433 "balance": "100000000",
434 "previousTransaction": "37skCQJmUCn5sPJJShi8sk1EhvKMuxjAuN7pT9nEydvi"
435 },
436 {
437 "coinType": "0x2::sui::SUI",
438 "coinObjectId": "0x08331c331296daeedf0db448ab5ea214208c1b5c325fe2a6f3fd3a97515d93a4",
439 "version": "204443009",
440 "digest": "CqbRHiAyxMuzbf8jpGEQa781628mY3KDY4eU1EnHWYha",
441 "balance": "100000000",
442 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
443 },
444 {
445 "coinType": "0x2::sui::SUI",
446 "coinObjectId": "0x0843c7b6884aa474e5293ccc2859fb3d1728692f53ede91755440f3d9fcdef3c",
447 "version": "204443009",
448 "digest": "4eN8p8PQxDjdc9ckqH2stjG8VeyicgQnM857GjgQ93Aj",
449 "balance": "100000000",
450 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
451 },
452 {
453 "coinType": "0x2::sui::SUI",
454 "coinObjectId": "0x084714e3ecf41f41699abe128053f469851a9bd4021a4ca4eb39fa794e42fd97",
455 "version": "204443010",
456 "digest": "372tDbWkUc4jEdnosLNYWUfJda4JvgE2tS9TNfwsm7AR",
457 "balance": "100000000",
458 "previousTransaction": "67YwHzL7hY1E6CC3WQ7a9M3neAGQpPK56MnLGYHC63Lc"
459 },
460 {
461 "coinType": "0x2::sui::SUI",
462 "coinObjectId": "0x0847e6d0f41de20ce3dde0d7ca3bae0e6367a3da6858c60b46b15e651e092883",
463 "version": "204443009",
464 "digest": "3wXmPuCgDXBHJstTEosuEggCkSaHXoy6ZhD9YS1huVbB",
465 "balance": "100000000",
466 "previousTransaction": "5odsa6V4gKA8w1ZQN9RjyBfjX1qPVd1LTu1DnnbpF7At"
467 },
468 {
469 "coinType": "0x2::sui::SUI",
470 "coinObjectId": "0x084c775207a1cd82d2c2f4c9224f03c0c5a75d275c788cf60c1a0d3eb6e6cd33",
471 "version": "204443011",
472 "digest": "3jyRrKtMo2aCaANGwDCDCDNCy5JRHhsV7v4iWJJJcPFp",
473 "balance": "100000000",
474 "previousTransaction": "C8reWy1j85aBxeKRweoeW1amkiWBdLmHpdajzFzAh9vN"
475 },
476 {
477 "coinType": "0x2::sui::SUI",
478 "coinObjectId": "0x08c21fe0fc06e0646a08e0f45249cdd2ffe2db352b6a5593a5246a0a38377485",
479 "version": "204443010",
480 "digest": "ArwKyA8rFg1MTgmTUFDC45KUNunUB8QskPd1k1hJFSX9",
481 "balance": "100000000",
482 "previousTransaction": "67YwHzL7hY1E6CC3WQ7a9M3neAGQpPK56MnLGYHC63Lc"
483 },
484 {
485 "coinType": "0x2::sui::SUI",
486 "coinObjectId": "0x091b13426217f690598ba2f86fa16d71b054bce516f0d8d73369b19dd5fd3114",
487 "version": "204443012",
488 "digest": "5YgtXfLYeqPaSsHsAggdwL9CkENZNCs2am2Wo4sGKf9v",
489 "balance": "100000000",
490 "previousTransaction": "37skCQJmUCn5sPJJShi8sk1EhvKMuxjAuN7pT9nEydvi"
491 }
492 ],
493 "nextCursor": "eyJjb2luX3R5cGUiOiIweDI6OnN1aTo6U1VJIiwiaW52ZXJ0ZWRfYmFsYW5jZSI6MTg0NDY3NDQwNzM2MDk1NTE2MTUsIm9iamVjdF9pZCI6IjB4MDkxYjEzNDI2MjE3ZjY5MDU5OGJhMmY4NmZhMTZkNzFiMDU0YmNlNTE2ZjBkOGQ3MzM2OWIxOWRkNWZkMzExNCJ9",
494 "hasNextPage": true
495 });
496 let _: CoinPage = serde_json::from_value(value).unwrap();
497 }
498}