@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.
- package/dist/index.d.mts +98 -102
- package/dist/index.d.ts +98 -102
- package/dist/index.js +1228 -1556
- package/dist/index.mjs +1215 -1543
- package/dist/src/api.d.ts +53 -0
- package/dist/src/client.d.ts +38 -65
- package/dist/src/const.d.ts +0 -9
- package/dist/src/index.d.ts +9 -5
- package/dist/src/transaction/afsui.d.ts +10 -0
- package/dist/src/transaction/aftermath.d.ts +13 -24
- package/dist/src/transaction/cetus.d.ts +9 -33
- package/dist/src/transaction/deepbook_v2.d.ts +14 -0
- package/dist/src/transaction/flowx_v2.d.ts +7 -0
- package/dist/src/transaction/haedal.d.ts +6 -0
- package/dist/src/transaction/index.d.ts +6 -1
- package/dist/src/transaction/kriya_v2.d.ts +6 -0
- package/dist/src/transaction/kriya_v3.d.ts +7 -0
- package/dist/src/transaction/swap.d.ts +1 -2
- package/dist/src/transaction/turbos.d.ts +7 -22
- package/dist/src/transaction/volo.d.ts +8 -0
- package/dist/src/utils/coin.d.ts +9 -0
- package/dist/{src → tests}/test_data.test.d.ts +1 -0
- package/package.json +2 -2
- package/src/api.ts +144 -0
- package/src/client.ts +295 -239
- package/src/const.ts +0 -13
- package/src/index.ts +10 -5
- package/src/transaction/afsui.ts +60 -0
- package/src/transaction/aftermath.ts +71 -124
- package/src/transaction/cetus.ts +87 -258
- package/src/transaction/deepbook_v2.ts +122 -0
- package/src/transaction/flowx_v2.ts +42 -0
- package/src/transaction/haedal.ts +41 -0
- package/src/transaction/index.ts +17 -1
- package/src/transaction/kriya_v2.ts +38 -0
- package/src/transaction/kriya_v3.ts +46 -0
- package/src/transaction/swap.ts +17 -31
- package/src/transaction/turbos.ts +40 -99
- package/src/transaction/volo.ts +52 -0
- package/src/utils/coin.ts +91 -6
- package/src/utils/transaction.ts +1 -1
- package/tests/router.test.ts +127 -81
- package/{src → tests}/test_data.test.ts +2 -0
- package/dist/src/config.d.ts +0 -26
- package/dist/src/transaction/common.d.ts +0 -12
- package/dist/src/transaction/deepbook.d.ts +0 -21
- package/dist/src/transaction/flowx.d.ts +0 -20
- package/dist/src/transaction/kriya.d.ts +0 -21
- package/dist/src/transaction/router.d.ts +0 -6
- package/dist/src/utils/account_cap.d.ts +0 -7
- package/src/config.ts +0 -65
- package/src/transaction/common.ts +0 -174
- package/src/transaction/deepbook.ts +0 -126
- package/src/transaction/flowx.ts +0 -97
- package/src/transaction/kriya.ts +0 -77
- package/src/transaction/router.ts +0 -341
- 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
|
-
}
|
package/src/utils/account_cap.ts
DELETED
|
@@ -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
|
-
}
|