@ledgerhq/coin-tezos 7.12.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/lib/api/index.d.ts +1 -2
  3. package/lib/api/index.d.ts.map +1 -1
  4. package/lib/api/index.js +45 -44
  5. package/lib/api/index.js.map +1 -1
  6. package/lib/api/types.d.ts +3 -2
  7. package/lib/api/types.d.ts.map +1 -1
  8. package/lib/config.d.ts +3 -1
  9. package/lib/config.d.ts.map +1 -1
  10. package/lib/config.js.map +1 -1
  11. package/lib/logic/broadcast.d.ts +2 -1
  12. package/lib/logic/broadcast.d.ts.map +1 -1
  13. package/lib/logic/broadcast.js +3 -2
  14. package/lib/logic/broadcast.js.map +1 -1
  15. package/lib/logic/combine.d.ts +1 -1
  16. package/lib/logic/combine.d.ts.map +1 -1
  17. package/lib/logic/combine.js +4 -1
  18. package/lib/logic/combine.js.map +1 -1
  19. package/lib/logic/craftRawOperations.d.ts +2 -1
  20. package/lib/logic/craftRawOperations.d.ts.map +1 -1
  21. package/lib/logic/craftRawOperations.js +5 -8
  22. package/lib/logic/craftRawOperations.js.map +1 -1
  23. package/lib/logic/craftTransaction.d.ts +3 -2
  24. package/lib/logic/craftTransaction.d.ts.map +1 -1
  25. package/lib/logic/craftTransaction.js +6 -9
  26. package/lib/logic/craftTransaction.js.map +1 -1
  27. package/lib/logic/estimateFees.d.ts +2 -1
  28. package/lib/logic/estimateFees.d.ts.map +1 -1
  29. package/lib/logic/estimateFees.js +24 -19
  30. package/lib/logic/estimateFees.js.map +1 -1
  31. package/lib/logic/getBalance.d.ts +2 -1
  32. package/lib/logic/getBalance.d.ts.map +1 -1
  33. package/lib/logic/getBalance.js +7 -8
  34. package/lib/logic/getBalance.js.map +1 -1
  35. package/lib/logic/getBlock.d.ts +2 -1
  36. package/lib/logic/getBlock.d.ts.map +1 -1
  37. package/lib/logic/getBlock.js +12 -10
  38. package/lib/logic/getBlock.js.map +1 -1
  39. package/lib/logic/getBlockInfo.d.ts +2 -1
  40. package/lib/logic/getBlockInfo.d.ts.map +1 -1
  41. package/lib/logic/getBlockInfo.js +5 -3
  42. package/lib/logic/getBlockInfo.js.map +1 -1
  43. package/lib/logic/getStakes.d.ts +3 -2
  44. package/lib/logic/getStakes.d.ts.map +1 -1
  45. package/lib/logic/getStakes.js +9 -9
  46. package/lib/logic/getStakes.js.map +1 -1
  47. package/lib/logic/lastBlock.d.ts +2 -1
  48. package/lib/logic/lastBlock.d.ts.map +1 -1
  49. package/lib/logic/lastBlock.js +4 -6
  50. package/lib/logic/lastBlock.js.map +1 -1
  51. package/lib/logic/listOperations.d.ts +2 -1
  52. package/lib/logic/listOperations.d.ts.map +1 -1
  53. package/lib/logic/listOperations.js +8 -6
  54. package/lib/logic/listOperations.js.map +1 -1
  55. package/lib/logic/tezosToolkit.d.ts +2 -1
  56. package/lib/logic/tezosToolkit.d.ts.map +1 -1
  57. package/lib/logic/tezosToolkit.js +2 -6
  58. package/lib/logic/tezosToolkit.js.map +1 -1
  59. package/lib/logic/validateIntent.d.ts +2 -1
  60. package/lib/logic/validateIntent.d.ts.map +1 -1
  61. package/lib/logic/validateIntent.js +12 -13
  62. package/lib/logic/validateIntent.js.map +1 -1
  63. package/lib/network/bakers.d.ts +5 -4
  64. package/lib/network/bakers.d.ts.map +1 -1
  65. package/lib/network/bakers.js +9 -10
  66. package/lib/network/bakers.js.map +1 -1
  67. package/lib/network/index.d.ts +1 -1
  68. package/lib/network/index.d.ts.map +1 -1
  69. package/lib/network/index.js +2 -5
  70. package/lib/network/index.js.map +1 -1
  71. package/lib/network/tzkt.d.ts +16 -9
  72. package/lib/network/tzkt.d.ts.map +1 -1
  73. package/lib/network/tzkt.js +341 -333
  74. package/lib/network/tzkt.js.map +1 -1
  75. package/lib/utils.d.ts +2 -1
  76. package/lib/utils.d.ts.map +1 -1
  77. package/lib/utils.js +1 -6
  78. package/lib/utils.js.map +1 -1
  79. package/lib-es/api/index.d.ts +1 -2
  80. package/lib-es/api/index.d.ts.map +1 -1
  81. package/lib-es/api/index.js +40 -36
  82. package/lib-es/api/index.js.map +1 -1
  83. package/lib-es/api/types.d.ts +3 -2
  84. package/lib-es/api/types.d.ts.map +1 -1
  85. package/lib-es/config.d.ts +3 -1
  86. package/lib-es/config.d.ts.map +1 -1
  87. package/lib-es/config.js.map +1 -1
  88. package/lib-es/logic/broadcast.d.ts +2 -1
  89. package/lib-es/logic/broadcast.d.ts.map +1 -1
  90. package/lib-es/logic/broadcast.js +3 -2
  91. package/lib-es/logic/broadcast.js.map +1 -1
  92. package/lib-es/logic/combine.d.ts +1 -1
  93. package/lib-es/logic/combine.d.ts.map +1 -1
  94. package/lib-es/logic/combine.js +4 -1
  95. package/lib-es/logic/combine.js.map +1 -1
  96. package/lib-es/logic/craftRawOperations.d.ts +2 -1
  97. package/lib-es/logic/craftRawOperations.d.ts.map +1 -1
  98. package/lib-es/logic/craftRawOperations.js +5 -5
  99. package/lib-es/logic/craftRawOperations.js.map +1 -1
  100. package/lib-es/logic/craftTransaction.d.ts +3 -2
  101. package/lib-es/logic/craftTransaction.d.ts.map +1 -1
  102. package/lib-es/logic/craftTransaction.js +6 -6
  103. package/lib-es/logic/craftTransaction.js.map +1 -1
  104. package/lib-es/logic/estimateFees.d.ts +2 -1
  105. package/lib-es/logic/estimateFees.d.ts.map +1 -1
  106. package/lib-es/logic/estimateFees.js +24 -16
  107. package/lib-es/logic/estimateFees.js.map +1 -1
  108. package/lib-es/logic/getBalance.d.ts +2 -1
  109. package/lib-es/logic/getBalance.d.ts.map +1 -1
  110. package/lib-es/logic/getBalance.js +5 -3
  111. package/lib-es/logic/getBalance.js.map +1 -1
  112. package/lib-es/logic/getBlock.d.ts +2 -1
  113. package/lib-es/logic/getBlock.d.ts.map +1 -1
  114. package/lib-es/logic/getBlock.js +10 -8
  115. package/lib-es/logic/getBlock.js.map +1 -1
  116. package/lib-es/logic/getBlockInfo.d.ts +2 -1
  117. package/lib-es/logic/getBlockInfo.d.ts.map +1 -1
  118. package/lib-es/logic/getBlockInfo.js +4 -2
  119. package/lib-es/logic/getBlockInfo.js.map +1 -1
  120. package/lib-es/logic/getStakes.d.ts +3 -2
  121. package/lib-es/logic/getStakes.d.ts.map +1 -1
  122. package/lib-es/logic/getStakes.js +9 -6
  123. package/lib-es/logic/getStakes.js.map +1 -1
  124. package/lib-es/logic/lastBlock.d.ts +2 -1
  125. package/lib-es/logic/lastBlock.d.ts.map +1 -1
  126. package/lib-es/logic/lastBlock.js +4 -3
  127. package/lib-es/logic/lastBlock.js.map +1 -1
  128. package/lib-es/logic/listOperations.d.ts +2 -1
  129. package/lib-es/logic/listOperations.d.ts.map +1 -1
  130. package/lib-es/logic/listOperations.js +7 -5
  131. package/lib-es/logic/listOperations.js.map +1 -1
  132. package/lib-es/logic/tezosToolkit.d.ts +2 -1
  133. package/lib-es/logic/tezosToolkit.d.ts.map +1 -1
  134. package/lib-es/logic/tezosToolkit.js +2 -3
  135. package/lib-es/logic/tezosToolkit.js.map +1 -1
  136. package/lib-es/logic/validateIntent.d.ts +2 -1
  137. package/lib-es/logic/validateIntent.d.ts.map +1 -1
  138. package/lib-es/logic/validateIntent.js +10 -8
  139. package/lib-es/logic/validateIntent.js.map +1 -1
  140. package/lib-es/network/bakers.d.ts +5 -4
  141. package/lib-es/network/bakers.d.ts.map +1 -1
  142. package/lib-es/network/bakers.js +9 -10
  143. package/lib-es/network/bakers.js.map +1 -1
  144. package/lib-es/network/index.d.ts +1 -1
  145. package/lib-es/network/index.d.ts.map +1 -1
  146. package/lib-es/network/index.js +1 -1
  147. package/lib-es/network/index.js.map +1 -1
  148. package/lib-es/network/tzkt.d.ts +16 -9
  149. package/lib-es/network/tzkt.d.ts.map +1 -1
  150. package/lib-es/network/tzkt.js +340 -333
  151. package/lib-es/network/tzkt.js.map +1 -1
  152. package/lib-es/utils.d.ts +2 -1
  153. package/lib-es/utils.d.ts.map +1 -1
  154. package/lib-es/utils.js +1 -3
  155. package/lib-es/utils.js.map +1 -1
  156. package/package.json +2 -2
  157. package/src/api/index-mainnet.integ.test.ts +34 -30
  158. package/src/api/index.integ.test.ts +69 -53
  159. package/src/api/index.test.ts +99 -60
  160. package/src/api/index.ts +52 -36
  161. package/src/api/types.ts +3 -2
  162. package/src/config.ts +4 -1
  163. package/src/logic/broadcast.integ.test.ts +12 -13
  164. package/src/logic/broadcast.ts +4 -2
  165. package/src/logic/combine.test.ts +17 -0
  166. package/src/logic/combine.ts +5 -2
  167. package/src/logic/craftRawOperations.test.ts +47 -33
  168. package/src/logic/craftRawOperations.ts +6 -4
  169. package/src/logic/craftTransaction.integ.test.ts +12 -5
  170. package/src/logic/craftTransaction.test.ts +39 -31
  171. package/src/logic/craftTransaction.ts +10 -5
  172. package/src/logic/estimateFees.integ.test.ts +7 -7
  173. package/src/logic/estimateFees.test.ts +52 -49
  174. package/src/logic/estimateFees.ts +34 -22
  175. package/src/logic/getBalance.test.ts +19 -17
  176. package/src/logic/getBalance.ts +6 -3
  177. package/src/logic/getBlock.integ.test.ts +8 -30
  178. package/src/logic/getBlock.test.ts +91 -81
  179. package/src/logic/getBlock.ts +11 -8
  180. package/src/logic/getBlockInfo.integ.test.ts +9 -18
  181. package/src/logic/getBlockInfo.test.ts +19 -9
  182. package/src/logic/getBlockInfo.ts +5 -2
  183. package/src/logic/getStakes.test.ts +46 -49
  184. package/src/logic/getStakes.ts +14 -5
  185. package/src/logic/lastBlock.ts +5 -3
  186. package/src/logic/listOperations.integ.test.ts +40 -67
  187. package/src/logic/listOperations.test.ts +65 -59
  188. package/src/logic/listOperations.ts +8 -3
  189. package/src/logic/tezosToolkit.ts +3 -3
  190. package/src/logic/validateIntent.test.ts +78 -74
  191. package/src/logic/validateIntent.ts +17 -7
  192. package/src/network/bakers.integ.test.ts +2 -5
  193. package/src/network/bakers.test.ts +5 -6
  194. package/src/network/bakers.ts +13 -10
  195. package/src/network/index.ts +2 -1
  196. package/src/network/tzkt.integ.test.ts +3 -14
  197. package/src/network/tzkt.test.ts +128 -96
  198. package/src/network/tzkt.ts +426 -393
  199. package/src/utils.ts +2 -3
@@ -1,8 +1,7 @@
1
1
  // SPDX-FileCopyrightText: © 2026 LEDGER SAS
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import type { TezosCoinConfig } from '../config'
5
- import coinConfig from '../config'
4
+ import type { TezosCoinConfig, TezosContext } from '../config'
6
5
  import { listOperations } from './listOperations'
7
6
 
8
7
  /**
@@ -37,26 +36,18 @@ const mainnetConfig = (): TezosCoinConfig =>
37
36
  const baseOpts = { sort: 'Descending' as const, minHeight: 0 }
38
37
 
39
38
  describe('listOperations — mainnet FA2 / convertTokenOperation', () => {
40
- let originalGetCoinConfig: () => TezosCoinConfig
41
-
42
- beforeAll(() => {
43
- originalGetCoinConfig = coinConfig.getCoinConfig
44
- coinConfig.setCoinConfig(mainnetConfig)
45
- })
46
-
47
- afterAll(() => {
48
- if (originalGetCoinConfig) {
49
- coinConfig.setCoinConfig(originalGetCoinConfig)
50
- }
51
- })
39
+ const context: TezosContext = {
40
+ config: async () => mainnetConfig(),
41
+ logger: () => undefined,
42
+ }
52
43
 
53
44
  it('returns at least one FA2 token operation', async () => {
54
- const [operations] = await listOperations(ADDRESS, baseOpts)
45
+ const [operations] = await listOperations(context, ADDRESS, baseOpts)
55
46
  expect(operations.some((op) => op.asset.type === 'fa2')).toBe(true)
56
47
  })
57
48
 
58
49
  it('maps FA2 token operations via convertTokenOperation (shape)', async () => {
59
- const [operations] = await listOperations(ADDRESS, { ...baseOpts, limit: 200 })
50
+ const [operations] = await listOperations(context, ADDRESS, { ...baseOpts, limit: 200 })
60
51
  const fa2 = operations.find((op) => {
61
52
  if (op.asset.type !== 'fa2') return false
62
53
  return op.asset.assetReference === USDT_FA2_ASSET_REF
@@ -97,7 +88,7 @@ describe('listOperations — mainnet FA2 / convertTokenOperation', () => {
97
88
  })
98
89
 
99
90
  it('infers direction: OUT when sending, IN when receiving (FA2)', async () => {
100
- const [operations] = await listOperations(ADDRESS, { ...baseOpts, limit: 200 })
91
+ const [operations] = await listOperations(context, ADDRESS, { ...baseOpts, limit: 200 })
101
92
  const fa2Ops = operations.filter((op) => op.asset.type === 'fa2')
102
93
 
103
94
  for (const op of fa2Ops) {
@@ -117,7 +108,7 @@ describe('listOperations — mainnet FA2 / convertTokenOperation', () => {
117
108
  })
118
109
 
119
110
  it('attributes fees from parent native transaction when resolvable (FA2)', async () => {
120
- const [operations] = await listOperations(ADDRESS, { ...baseOpts, limit: 200 })
111
+ const [operations] = await listOperations(context, ADDRESS, { ...baseOpts, limit: 200 })
121
112
  const fa2Ops = operations.filter((op) => op.asset.type === 'fa2')
122
113
 
123
114
  for (const op of fa2Ops) {
@@ -143,7 +134,7 @@ describe('listOperations — mainnet FA2 / convertTokenOperation', () => {
143
134
  })
144
135
 
145
136
  it('exposes convertTokenOperation details for FA2', async () => {
146
- const [operations] = await listOperations(ADDRESS, baseOpts)
137
+ const [operations] = await listOperations(context, ADDRESS, baseOpts)
147
138
  const fa2 = operations.find((op) => op.asset.type === 'fa2')
148
139
 
149
140
  const conversionDetails = fa2!.details!
@@ -155,7 +146,7 @@ describe('listOperations — mainnet FA2 / convertTokenOperation', () => {
155
146
  })
156
147
 
157
148
  it('returns a pagination cursor with lastLevel boundary', async () => {
158
- const [, nextToken] = await listOperations(ADDRESS, { ...baseOpts, limit: 3 })
149
+ const [, nextToken] = await listOperations(context, ADDRESS, { ...baseOpts, limit: 3 })
159
150
  expect(nextToken.length).toBeGreaterThan(0)
160
151
 
161
152
  const parsed: unknown = JSON.parse(nextToken)
@@ -168,10 +159,10 @@ describe('listOperations — mainnet FA2 / convertTokenOperation', () => {
168
159
 
169
160
  it('pagination returns disjoint operation ids across pages', async () => {
170
161
  const limit = 3
171
- const [page1, cursor] = await listOperations(ADDRESS, { ...baseOpts, limit })
162
+ const [page1, cursor] = await listOperations(context, ADDRESS, { ...baseOpts, limit })
172
163
  expect(cursor.length).toBeGreaterThan(0)
173
164
 
174
- const [page2] = await listOperations(ADDRESS, { ...baseOpts, limit, token: cursor })
165
+ const [page2] = await listOperations(context, ADDRESS, { ...baseOpts, limit, token: cursor })
175
166
 
176
167
  const ids1 = new Set(page1.map((op) => op.id))
177
168
  const overlap = page2.filter((op) => ids1.has(op.id))
@@ -180,7 +171,7 @@ describe('listOperations — mainnet FA2 / convertTokenOperation', () => {
180
171
 
181
172
  it('second page accepts cursor with lastLevel for both streams', async () => {
182
173
  const limit = 3
183
- const [, cursor] = await listOperations(ADDRESS, { ...baseOpts, limit })
174
+ const [, cursor] = await listOperations(context, ADDRESS, { ...baseOpts, limit })
184
175
  expect(cursor.length).toBeGreaterThan(0)
185
176
 
186
177
  const parsed: unknown = JSON.parse(cursor)
@@ -191,17 +182,17 @@ describe('listOperations — mainnet FA2 / convertTokenOperation', () => {
191
182
  )
192
183
 
193
184
  await expect(
194
- listOperations(ADDRESS, { ...baseOpts, limit, token: cursor })
185
+ listOperations(context, ADDRESS, { ...baseOpts, limit, token: cursor })
195
186
  ).resolves.toBeDefined()
196
187
  })
197
188
 
198
189
  it('does not split the same tx.hash across consecutive pages (limit 3)', async () => {
199
190
  const limit = 3
200
- const [page1, cursor] = await listOperations(ADDRESS, { ...baseOpts, limit })
191
+ const [page1, cursor] = await listOperations(context, ADDRESS, { ...baseOpts, limit })
201
192
  if (cursor.length === 0) {
202
193
  return
203
194
  }
204
- const [page2] = await listOperations(ADDRESS, { ...baseOpts, limit, token: cursor })
195
+ const [page2] = await listOperations(context, ADDRESS, { ...baseOpts, limit, token: cursor })
205
196
  const hashesPage1 = new Set(page1.map((op) => op.tx.hash))
206
197
  const hashesPage2 = new Set(page2.map((op) => op.tx.hash))
207
198
  const overlap = [...hashesPage1].filter((h) => hashesPage2.has(h))
@@ -209,7 +200,7 @@ describe('listOperations — mainnet FA2 / convertTokenOperation', () => {
209
200
  })
210
201
 
211
202
  it('does not duplicate operation ids within the first page', async () => {
212
- const [operations] = await listOperations(ADDRESS, { ...baseOpts, limit: 100 })
203
+ const [operations] = await listOperations(context, ADDRESS, { ...baseOpts, limit: 100 })
213
204
  const ids = operations.map((op) => op.id)
214
205
  expect(new Set(ids).size).toBe(ids.length)
215
206
  })
@@ -320,25 +311,20 @@ const EXPECTED_FINALIZE_UNSTAKE = {
320
311
  }
321
312
 
322
313
  describe('listOperations — Shadownet Paris staking ops', () => {
323
- let originalGetCoinConfig: () => TezosCoinConfig
324
-
325
- beforeAll(() => {
326
- originalGetCoinConfig = coinConfig.getCoinConfig
327
- coinConfig.setCoinConfig(shadownetConfig)
328
- })
329
-
330
- afterAll(() => {
331
- if (originalGetCoinConfig) {
332
- coinConfig.setCoinConfig(originalGetCoinConfig)
333
- }
334
- })
314
+ const context: TezosContext = {
315
+ config: async () => shadownetConfig(),
316
+ logger: () => undefined,
317
+ }
335
318
 
336
319
  it.each([
337
320
  ['STAKE', EXPECTED_STAKE],
338
321
  ['UNSTAKE', EXPECTED_UNSTAKE],
339
322
  ['FINALIZE_UNSTAKE', EXPECTED_FINALIZE_UNSTAKE],
340
323
  ])('contains a %s op matching every field of the pinned fixture', async (type, expected) => {
341
- const [operations] = await listOperations(SHADOWNET_STAKER, { ...baseOpts, limit: 100 })
324
+ const [operations] = await listOperations(context, SHADOWNET_STAKER, {
325
+ ...baseOpts,
326
+ limit: 100,
327
+ })
342
328
  const match = operations.find((op) => op.type === type)
343
329
  if (!match) throw new Error(`No ${type} op found at ${SHADOWNET_STAKER}`)
344
330
 
@@ -350,22 +336,14 @@ describe('listOperations — mainnet origination ops', () => {
350
336
  // This account deployed 4 contracts — origination ops were previously silently dropped.
351
337
  const ORIGINATOR = 'tz1VSUr8wwNhLAzempoch5d6hLRiTh8Cjcjb'
352
338
 
353
- let originalGetCoinConfig: () => TezosCoinConfig
354
-
355
- beforeAll(() => {
356
- originalGetCoinConfig = coinConfig.getCoinConfig
357
- coinConfig.setCoinConfig(mainnetConfig)
358
- })
359
-
360
- afterAll(() => {
361
- if (originalGetCoinConfig) {
362
- coinConfig.setCoinConfig(originalGetCoinConfig)
363
- }
364
- })
339
+ const context: TezosContext = {
340
+ config: async () => mainnetConfig(),
341
+ logger: () => undefined,
342
+ }
365
343
 
366
344
  it('surfaces origination operations with correct fees and ledgerOpType', async () => {
367
345
  // Fetch with a high limit to get all ops in one page (account has ~234 ops)
368
- const [operations] = await listOperations(ORIGINATOR, {
346
+ const [operations] = await listOperations(context, ORIGINATOR, {
369
347
  sort: 'Ascending',
370
348
  minHeight: 0,
371
349
  limit: 500,
@@ -391,7 +369,7 @@ describe('listOperations — mainnet origination ops', () => {
391
369
  let allOps: Awaited<ReturnType<typeof listOperations>>[0] = []
392
370
  let token: string | undefined
393
371
  do {
394
- const [ops, next] = await listOperations(ORIGINATOR, {
372
+ const [ops, next] = await listOperations(context, ORIGINATOR, {
395
373
  sort: 'Ascending',
396
374
  minHeight: 0,
397
375
  limit: 200,
@@ -434,21 +412,16 @@ const MULTI_ASSET_ADDRESS = 'tz1ZB8hpQJZdQeEPc3uG2cL1NXwLTPkqeAD6'
434
412
  const WRAPPED_CONTRACT = 'KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ'
435
413
 
436
414
  describe('listOperations — mainnet multi-asset FA2 (LIVE-29210)', () => {
437
- let originalGetCoinConfig: () => TezosCoinConfig
438
-
439
- beforeAll(() => {
440
- originalGetCoinConfig = coinConfig.getCoinConfig
441
- coinConfig.setCoinConfig(mainnetConfig)
442
- })
443
-
444
- afterAll(() => {
445
- if (originalGetCoinConfig) {
446
- coinConfig.setCoinConfig(originalGetCoinConfig)
447
- }
448
- })
415
+ const context: TezosContext = {
416
+ config: async () => mainnetConfig(),
417
+ logger: () => undefined,
418
+ }
449
419
 
450
420
  it('returns a known multi-asset FA2 operation with tokenId=11', async () => {
451
- const [operations] = await listOperations(MULTI_ASSET_ADDRESS, { ...baseOpts, limit: 200 })
421
+ const [operations] = await listOperations(context, MULTI_ASSET_ADDRESS, {
422
+ ...baseOpts,
423
+ limit: 200,
424
+ })
452
425
 
453
426
  // Known on-chain transfer: tokenId=11 (wMATIC), OUT to KT1V5X...
454
427
  const op = operations.find(