@cetusprotocol/aggregator-sdk 0.0.7 → 0.1.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 (57) hide show
  1. package/dist/index.d.mts +98 -102
  2. package/dist/index.d.ts +98 -102
  3. package/dist/index.js +1228 -1556
  4. package/dist/index.mjs +1215 -1543
  5. package/dist/src/api.d.ts +53 -0
  6. package/dist/src/client.d.ts +38 -65
  7. package/dist/src/const.d.ts +0 -9
  8. package/dist/src/index.d.ts +9 -5
  9. package/dist/src/transaction/afsui.d.ts +10 -0
  10. package/dist/src/transaction/aftermath.d.ts +13 -24
  11. package/dist/src/transaction/cetus.d.ts +9 -33
  12. package/dist/src/transaction/deepbook_v2.d.ts +14 -0
  13. package/dist/src/transaction/flowx_v2.d.ts +7 -0
  14. package/dist/src/transaction/haedal.d.ts +6 -0
  15. package/dist/src/transaction/index.d.ts +6 -1
  16. package/dist/src/transaction/kriya_v2.d.ts +6 -0
  17. package/dist/src/transaction/kriya_v3.d.ts +7 -0
  18. package/dist/src/transaction/swap.d.ts +1 -2
  19. package/dist/src/transaction/turbos.d.ts +7 -22
  20. package/dist/src/transaction/volo.d.ts +8 -0
  21. package/dist/src/utils/coin.d.ts +9 -0
  22. package/dist/{src → tests}/test_data.test.d.ts +1 -0
  23. package/package.json +2 -2
  24. package/src/api.ts +144 -0
  25. package/src/client.ts +295 -239
  26. package/src/const.ts +0 -13
  27. package/src/index.ts +10 -5
  28. package/src/transaction/afsui.ts +60 -0
  29. package/src/transaction/aftermath.ts +71 -124
  30. package/src/transaction/cetus.ts +87 -258
  31. package/src/transaction/deepbook_v2.ts +122 -0
  32. package/src/transaction/flowx_v2.ts +42 -0
  33. package/src/transaction/haedal.ts +41 -0
  34. package/src/transaction/index.ts +17 -1
  35. package/src/transaction/kriya_v2.ts +38 -0
  36. package/src/transaction/kriya_v3.ts +46 -0
  37. package/src/transaction/swap.ts +17 -31
  38. package/src/transaction/turbos.ts +40 -99
  39. package/src/transaction/volo.ts +52 -0
  40. package/src/utils/coin.ts +91 -6
  41. package/src/utils/transaction.ts +1 -1
  42. package/tests/router.test.ts +127 -81
  43. package/{src → tests}/test_data.test.ts +2 -0
  44. package/dist/src/config.d.ts +0 -26
  45. package/dist/src/transaction/common.d.ts +0 -12
  46. package/dist/src/transaction/deepbook.d.ts +0 -21
  47. package/dist/src/transaction/flowx.d.ts +0 -20
  48. package/dist/src/transaction/kriya.d.ts +0 -21
  49. package/dist/src/transaction/router.d.ts +0 -6
  50. package/dist/src/utils/account_cap.d.ts +0 -7
  51. package/src/config.ts +0 -65
  52. package/src/transaction/common.ts +0 -174
  53. package/src/transaction/deepbook.ts +0 -126
  54. package/src/transaction/flowx.ts +0 -97
  55. package/src/transaction/kriya.ts +0 -77
  56. package/src/transaction/router.ts +0 -341
  57. package/src/utils/account_cap.ts +0 -62
@@ -1,341 +0,0 @@
1
- import {
2
- TransactionArgument,
3
- Transaction,
4
- TransactionObjectArgument,
5
- } from "@mysten/sui/transactions"
6
- import type { BuildRouterSwapParams } from "../client"
7
- import { AggregatorConfig } from "../config"
8
- import {
9
- AFTERMATH_AMM,
10
- CETUS_DEX,
11
- DEEPBOOK_DEX,
12
- FLOWX_AMM,
13
- KRIYA_DEX,
14
- TURBOS_DEX,
15
- U64_MAX,
16
- } from "../const"
17
- import { deepbookSwapMovecall } from "./deepbook"
18
- import { SuiClient } from "@mysten/sui/client"
19
- import { kriyaSwapMovecall } from "./kriya"
20
- import {
21
- cetusFlashSwapMovecall,
22
- cetusRepayFlashSwapMovecall,
23
- cetusSwapWithOutLimit,
24
- } from "./cetus"
25
- import { transferOrDestoryCoin } from "./common"
26
- import { GetDefaultSqrtPriceLimit } from "../math"
27
- import { flowxAmmSwapMovecall } from "./flowx"
28
- import { turbosSwapMovecall } from "./turbos"
29
- import { AftermathAmmSwapMovecall } from "./aftermath"
30
- import { TransactionErrorCode } from "~/errors"
31
-
32
- export async function expectInputRouterSwap(
33
- client: SuiClient,
34
- params: BuildRouterSwapParams,
35
- txb: Transaction,
36
- fromCoin: TransactionObjectArgument,
37
- config: AggregatorConfig,
38
- partner?: string
39
- ): Promise<TransactionObjectArgument[]> {
40
- const splitAmounts = params.routers.map((router) =>
41
- router.amountIn.toString()
42
- )
43
- const targetCoins = []
44
- const fromCoins = txb.splitCoins(fromCoin, splitAmounts)
45
-
46
- for (let i = 0; i < params.routers.length; i++) {
47
- const router = params.routers[i]
48
- let intermediateTargetCoin: TransactionObjectArgument
49
- let nextFromCoin = fromCoins[i] as TransactionObjectArgument
50
-
51
- let nextFlashAmount: TransactionArgument = txb.pure.u64(splitAmounts[i])
52
-
53
- for (let j = 0; j < router.path.length; j++) {
54
- const firstPathPool = j === 0
55
- const path = router.path[j]
56
-
57
- if (path.provider === CETUS_DEX) {
58
- const swapParams = {
59
- poolId: path.id,
60
- amount: nextFlashAmount,
61
- amountLimit: "0",
62
- a2b: path.a2b,
63
- byAmountIn: true,
64
- sqrtPriceLimit: GetDefaultSqrtPriceLimit(path.a2b),
65
- partner: partner!,
66
- coinAType: path.a2b ? path.from : path.target,
67
- coinBType: path.a2b ? path.target : path.from,
68
- }
69
-
70
- const returnPayAmount = firstPathPool && router.path.length > 1
71
- const swapResult = await cetusSwapWithOutLimit(
72
- swapParams,
73
- nextFromCoin,
74
- txb,
75
- config
76
- )
77
-
78
- transferOrDestoryCoin(
79
- txb,
80
- swapResult.repayTargetCoin,
81
- path.from,
82
- config
83
- )
84
-
85
- intermediateTargetCoin = swapResult.flashTargetCoin!
86
- nextFromCoin = intermediateTargetCoin
87
- nextFlashAmount = swapResult.nextInputAmount!
88
- }
89
-
90
- if (path.provider === DEEPBOOK_DEX) {
91
- const coinA = path.a2b ? nextFromCoin : undefined
92
- const coinB = path.a2b ? undefined : nextFromCoin
93
-
94
- const swapParams = {
95
- poolId: path.id,
96
- a2b: path.a2b,
97
- amount: nextFlashAmount,
98
- amountLimit: 0,
99
- coinA,
100
- coinB,
101
- useFullInputCoinAmount: !firstPathPool,
102
- coinAType: path.a2b ? path.from : path.target,
103
- coinBType: path.a2b ? params.targetCoinType : path.from,
104
- }
105
- const deepbookSwapResult = await deepbookSwapMovecall(
106
- swapParams,
107
- client,
108
- txb,
109
- config
110
- )
111
-
112
- intermediateTargetCoin = deepbookSwapResult.targetCoin
113
- nextFromCoin = intermediateTargetCoin
114
- nextFlashAmount = deepbookSwapResult.amountOut
115
- }
116
-
117
- if (path.provider === KRIYA_DEX) {
118
- const coinA = path.a2b ? nextFromCoin : undefined
119
- const coinB = path.a2b ? undefined : nextFromCoin
120
-
121
- const swapParams = {
122
- poolId: path.id,
123
- amount: nextFlashAmount,
124
- amountLimit: 0,
125
- a2b: path.a2b,
126
- byAmountIn: true,
127
- coinA,
128
- coinB,
129
- useFullInputCoinAmount: !firstPathPool,
130
- coinAType: path.a2b ? path.from : path.target,
131
- coinBType: path.a2b ? path.target : path.from,
132
- }
133
-
134
- const swapResult = await kriyaSwapMovecall(swapParams, txb, config)
135
-
136
- intermediateTargetCoin = swapResult.targetCoin
137
- nextFromCoin = intermediateTargetCoin
138
- nextFlashAmount = swapResult.amountOut
139
- }
140
-
141
- if (path.provider === FLOWX_AMM) {
142
- const coinA = path.a2b ? nextFromCoin : undefined
143
- const coinB = path.a2b ? undefined : nextFromCoin
144
-
145
- const swapParams = {
146
- amount: nextFlashAmount,
147
- amountLimit: 0,
148
- a2b: path.a2b,
149
- byAmountIn: true,
150
- coinA,
151
- coinB,
152
- useFullInputCoinAmount: !firstPathPool,
153
- coinAType: path.a2b ? path.from : path.target,
154
- coinBType: path.a2b ? path.target : path.from,
155
- }
156
-
157
- const swapResult = await flowxAmmSwapMovecall(swapParams, txb, config)
158
-
159
- intermediateTargetCoin = swapResult.targetCoin
160
- nextFromCoin = intermediateTargetCoin
161
- nextFlashAmount = swapResult.amountOut
162
- }
163
-
164
- if (path.provider === TURBOS_DEX) {
165
- const coinA = path.a2b ? nextFromCoin : undefined
166
- const coinB = path.a2b ? undefined : nextFromCoin
167
-
168
- let feeType = ""
169
- if (
170
- path.extendedDetails != null &&
171
- path.extendedDetails.turbosFeeType != null
172
- ) {
173
- feeType = path.extendedDetails.turbosFeeType
174
- } else {
175
- throw new AggregateError(
176
- "Build turbos swap movecall error: ",
177
- TransactionErrorCode.MissTurbosFeeType
178
- )
179
- }
180
-
181
- const swapParams = {
182
- poolId: path.id,
183
- amount: nextFlashAmount,
184
- amountLimit: 0,
185
- a2b: path.a2b,
186
- byAmountIn: true,
187
- coinA,
188
- coinB,
189
- useFullInputCoinAmount: !firstPathPool,
190
- coinAType: path.a2b ? path.from : path.target,
191
- coinBType: path.a2b ? path.target : path.from,
192
- feeType,
193
- }
194
-
195
- const swapResult = await turbosSwapMovecall(swapParams, txb, config)
196
-
197
- intermediateTargetCoin = swapResult.targetCoin
198
- nextFromCoin = intermediateTargetCoin
199
- nextFlashAmount = swapResult.amountOut
200
- }
201
-
202
- if (path.provider === AFTERMATH_AMM) {
203
- const coinA = path.a2b ? nextFromCoin : undefined
204
- const coinB = path.a2b ? undefined : nextFromCoin
205
-
206
- let lpSupplyType = ""
207
-
208
- if (
209
- path.extendedDetails != null &&
210
- path.extendedDetails.aftermathLpSupplyType != null
211
- ) {
212
- lpSupplyType = path.extendedDetails.aftermathLpSupplyType
213
- } else {
214
- throw new AggregateError(
215
- "Build aftermath swap movecall error: ",
216
- TransactionErrorCode.MissAftermathLpSupplyType
217
- )
218
- }
219
-
220
- const swapParams = {
221
- poolId: path.id,
222
- amount: nextFlashAmount,
223
- amountOut: path.amountOut,
224
- amountLimit: 0,
225
- a2b: path.a2b,
226
- byAmountIn: true,
227
- coinA,
228
- coinB,
229
- useFullInputCoinAmount: !firstPathPool,
230
- coinAType: path.a2b ? path.from : path.target,
231
- coinBType: path.a2b ? path.target : path.from,
232
- slippage: params.slippage,
233
- lpSupplyType,
234
- }
235
-
236
- const swapResult = await AftermathAmmSwapMovecall(
237
- swapParams,
238
- txb,
239
- config
240
- )
241
-
242
- intermediateTargetCoin = swapResult.targetCoin
243
- nextFromCoin = intermediateTargetCoin
244
- nextFlashAmount = swapResult.amountOut
245
- }
246
- }
247
- targetCoins.push(nextFromCoin)
248
- }
249
-
250
- transferOrDestoryCoin(txb, fromCoin, params.fromCoinType, config)
251
-
252
- return targetCoins
253
- }
254
-
255
- export async function expectOutputRouterSwap(
256
- params: BuildRouterSwapParams,
257
- txb: Transaction,
258
- fromCoin: TransactionObjectArgument,
259
- config: AggregatorConfig,
260
- partner?: string
261
- ): Promise<TransactionObjectArgument[]> {
262
- const splitAmounts = params.routers.map((router) =>
263
- router.amountOut.toString()
264
- )
265
-
266
- const returnCoins: TransactionObjectArgument[] = []
267
- const receipts: TransactionObjectArgument[] = []
268
-
269
- const targetCoins = []
270
-
271
- for (let i = 0; i < params.routers.length; i++) {
272
- const router = params.routers[i]
273
-
274
- let nextFlashAmount: TransactionArgument = txb.pure.u64(splitAmounts[i])
275
- for (let j = router.path.length - 1; j >= 0; j--) {
276
- const path = router.path[j]
277
-
278
- const coinAType = path.a2b ? path.from : path.target
279
- const coinBType = path.a2b ? path.target : path.from
280
-
281
- const swapParams = {
282
- poolId: path.id,
283
- amount: nextFlashAmount,
284
- amountLimit: U64_MAX,
285
- a2b: path.a2b,
286
- byAmountIn: false,
287
- sqrtPriceLimit: GetDefaultSqrtPriceLimit(path.a2b), //
288
- partner,
289
- coinAType,
290
- coinBType,
291
- }
292
-
293
- const flashSwapResult = cetusFlashSwapMovecall(swapParams, txb, config)
294
- nextFlashAmount = flashSwapResult.payAmount
295
- returnCoins.unshift(flashSwapResult.targetCoin)
296
- receipts.unshift(flashSwapResult.flashReceipt)
297
- }
298
-
299
- let nextRepayCoin = fromCoin
300
- for (let j = 0; j < router.path.length; j++) {
301
- const path = router.path[j]
302
-
303
- const coinAType = path.a2b ? path.from : path.target
304
- const coinBType = path.a2b ? path.target : path.from
305
-
306
- const repayParams = {
307
- poolId: path.id,
308
- a2b: path.a2b,
309
- partner: partner,
310
- coinA: path.a2b ? nextRepayCoin : undefined,
311
- coinB: path.a2b ? undefined : nextRepayCoin,
312
- receipt: receipts[j],
313
- coinAType,
314
- coinBType,
315
- }
316
- const repayResult = await cetusRepayFlashSwapMovecall(
317
- repayParams,
318
- txb,
319
- config
320
- )
321
- nextRepayCoin = returnCoins[j]
322
- if (j === 0) {
323
- fromCoin = repayResult.repayTargetCoin
324
- } else {
325
- transferOrDestoryCoin(
326
- txb,
327
- repayResult.repayTargetCoin,
328
- path.from,
329
- config
330
- )
331
- }
332
- if (j === router.path.length - 1) {
333
- targetCoins.push(nextRepayCoin)
334
- }
335
- }
336
- }
337
-
338
- transferOrDestoryCoin(txb, fromCoin, params.fromCoinType, config)
339
-
340
- return targetCoins
341
- }
@@ -1,62 +0,0 @@
1
- import { SuiClient } from "@mysten/sui/client"
2
- import { DEEPBOOK_CLOB_V2_MODULE, DEEPBOOK_CUSTODIAN_V2_MODULE, DEEPBOOK_PACKAGE_ID, DEEPBOOK_PUBLISHED_AT } from "../const"
3
- import { Transaction, TransactionObjectArgument } from "@mysten/sui/transactions"
4
-
5
- export type GetOrCreateAccountCapResult = {
6
- accountCap: TransactionObjectArgument,
7
- isCreate: boolean
8
- }
9
-
10
- export async function getOrCreateAccountCap(txb: Transaction, client: SuiClient, owner: string): Promise<GetOrCreateAccountCapResult> {
11
- let accountCapStr = await getAccountCap(client, owner)
12
- if (accountCapStr !== null) {
13
- return {
14
- accountCap: txb.object(accountCapStr),
15
- isCreate: false,
16
- }
17
- }
18
-
19
- const accountCap = txb.moveCall({
20
- target: `${DEEPBOOK_PUBLISHED_AT}::${DEEPBOOK_CLOB_V2_MODULE}::create_account`,
21
- typeArguments: [],
22
- arguments: [],
23
- })
24
-
25
- return {
26
- accountCap,
27
- isCreate: true,
28
- }
29
- }
30
-
31
- async function getAccountCap(client: SuiClient, owner: string): Promise<string | null> {
32
- let limit = 50;
33
- let cursor = null;
34
-
35
- while (true) {
36
- const ownedObjects: any = client.getOwnedObjects({
37
- owner,
38
- cursor,
39
- limit,
40
- filter: {
41
- MoveModule: {
42
- package: DEEPBOOK_PACKAGE_ID,
43
- module: DEEPBOOK_CUSTODIAN_V2_MODULE,
44
- }
45
- }
46
- })
47
-
48
- if (ownedObjects != null && ownedObjects.data != null) {
49
- if (ownedObjects.data.length !== 0) {
50
- return ownedObjects.data[0].data.objectId
51
- }
52
-
53
- if (ownedObjects.data.length < 50) {
54
- break
55
- }
56
- } else {
57
- break
58
- }
59
- }
60
-
61
- return null
62
- }