sui_jsonrpc/msgs/
sui_coin.rs

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