@cetusprotocol/aggregator-sdk 0.0.8 → 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 -1552
  4. package/dist/index.mjs +1215 -1539
  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 -24
  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 +123 -73
  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 -169
  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 -339
  57. package/src/utils/account_cap.ts +0 -62
@@ -1,169 +0,0 @@
1
- import {
2
- AGGREGATOR,
3
- CHECK_COINS_THRESHOLD_FUNC,
4
- JOIN_FUNC,
5
- PAY_MODULE,
6
- SuiZeroCoinFn,
7
- TRANSFER_OR_DESTORY_COIN_FUNC,
8
- UTILS_MODULE,
9
- } from "../const"
10
- import { CoinAsset } from "../types/sui"
11
- import { CoinUtils } from "../types/CoinAssist"
12
- import { ConfigErrorCode, TransactionErrorCode } from "../errors"
13
- import { createTarget } from "../utils"
14
- import { AggregatorConfig } from "../config"
15
- import {
16
- Transaction,
17
- TransactionArgument,
18
- TransactionObjectArgument,
19
- } from "@mysten/sui/transactions"
20
- import { SUI_FRAMEWORK_ADDRESS } from "@mysten/sui/utils"
21
-
22
- export function mintZeroCoin(
23
- txb: Transaction,
24
- coinType: string
25
- ): TransactionObjectArgument {
26
- return txb.moveCall({
27
- target: SuiZeroCoinFn,
28
- typeArguments: [coinType],
29
- })
30
- }
31
-
32
- export type BuildCoinResult = {
33
- targetCoin: TransactionObjectArgument
34
- isMintZeroCoin: boolean
35
- targetCoinAmount: number
36
- }
37
-
38
- export function buildInputCoin(
39
- txb: Transaction,
40
- allCoins: CoinAsset[],
41
- amount: bigint,
42
- coinType: string
43
- ): BuildCoinResult {
44
- const usedCoinAsests = CoinUtils.getCoinAssets(coinType, allCoins)
45
- if (amount === BigInt(0) && usedCoinAsests.length === 0) {
46
- const zeroCoin = mintZeroCoin(txb, coinType)
47
- return {
48
- targetCoin: zeroCoin,
49
- isMintZeroCoin: true,
50
- targetCoinAmount: 0,
51
- }
52
- }
53
-
54
- let totalCoinBalance = CoinUtils.calculateTotalBalance(usedCoinAsests)
55
- if (totalCoinBalance < amount) {
56
- throw new AggregateError(
57
- "Insufficient balance when build merge coin",
58
- TransactionErrorCode.InsufficientBalance
59
- )
60
- }
61
-
62
- if (CoinUtils.isSuiCoin(coinType)) {
63
- const resultCoin = txb.splitCoins(txb.gas, [
64
- txb.pure.u64(amount.toString()),
65
- ])
66
- return {
67
- targetCoin: resultCoin,
68
- isMintZeroCoin: true,
69
- targetCoinAmount: Number(amount.toString()),
70
- }
71
- }
72
-
73
- // sort used coin by amount, asc
74
- let sortCoinAssets = CoinUtils.sortByBalance(usedCoinAsests)
75
-
76
- // find first three coin if greater than amount
77
- let totalThreeCoinBalance = sortCoinAssets
78
- .slice(0, 3)
79
- .reduce((acc, coin) => acc + coin.balance, BigInt(0))
80
- if (totalThreeCoinBalance < BigInt(amount)) {
81
- sortCoinAssets = CoinUtils.sortByBalanceDes(usedCoinAsests)
82
- }
83
-
84
- let selectedCoinResult = CoinUtils.selectCoinObjectIdGreaterThanOrEqual(
85
- sortCoinAssets,
86
- amount
87
- )
88
- const [masterCoin, ...mergedCoin] = selectedCoinResult.objectArray
89
-
90
- if (mergedCoin.length > 0) {
91
- txb.mergeCoins(
92
- masterCoin,
93
- mergedCoin.map((coin) => txb.object(coin))
94
- )
95
- }
96
-
97
- return {
98
- targetCoin: txb.object(masterCoin),
99
- isMintZeroCoin: false,
100
- targetCoinAmount: Number(amount.toString()),
101
- }
102
- }
103
-
104
- export function transferOrDestoryCoin(
105
- txb: Transaction,
106
- coinObject: TransactionObjectArgument,
107
- coinType: string,
108
- config: AggregatorConfig
109
- ) {
110
- const aggregatorPackage = config.getPackage(AGGREGATOR)
111
- if (aggregatorPackage == null) {
112
- throw new AggregateError(
113
- "Aggregator package not set",
114
- ConfigErrorCode.MissAggregatorPackage
115
- )
116
- }
117
- const aggregatorPublishedAt = aggregatorPackage.publishedAt
118
-
119
- txb.moveCall({
120
- target: createTarget(
121
- aggregatorPublishedAt,
122
- UTILS_MODULE,
123
- TRANSFER_OR_DESTORY_COIN_FUNC
124
- ),
125
- typeArguments: [coinType],
126
- arguments: [coinObject],
127
- })
128
- }
129
-
130
- export function checkCoinThresholdAndMergeCoin(
131
- txb: Transaction,
132
- coins: TransactionObjectArgument[],
133
- coinType: string,
134
- amountLimit: number,
135
- config: AggregatorConfig
136
- ): TransactionArgument {
137
- const aggregatorPackage = config.getPackage(AGGREGATOR)
138
- if (aggregatorPackage == null) {
139
- throw new AggregateError(
140
- "Aggregator package not set",
141
- ConfigErrorCode.MissAggregatorPackage
142
- )
143
- }
144
- const aggregatorPublishedAt = aggregatorPackage.publishedAt
145
-
146
- const vec = txb.makeMoveVec({
147
- elements: coins,
148
- })
149
-
150
- txb.moveCall({
151
- target: createTarget(
152
- aggregatorPublishedAt,
153
- UTILS_MODULE,
154
- CHECK_COINS_THRESHOLD_FUNC
155
- ),
156
- typeArguments: [coinType],
157
- arguments: [vec, txb.pure.u64(amountLimit)],
158
- })
159
-
160
- const zeroCoin = mintZeroCoin(txb, coinType)
161
-
162
- txb.moveCall({
163
- target: createTarget(SUI_FRAMEWORK_ADDRESS, PAY_MODULE, JOIN_FUNC),
164
- typeArguments: [coinType],
165
- arguments: [zeroCoin, vec],
166
- })
167
-
168
- return zeroCoin
169
- }
@@ -1,126 +0,0 @@
1
- import {
2
- TransactionArgument,
3
- Transaction,
4
- TransactionObjectArgument,
5
- } from "@mysten/sui/transactions"
6
- import { AggregatorConfig } from "../config"
7
- import {
8
- AGGREGATOR,
9
- CLOCK_ADDRESS,
10
- DEEPBOOK_MODULE,
11
- SWAP_A2B_FUNC,
12
- SWAP_B2A_FUNC,
13
- TRANSFER_ACCOUNT_CAP,
14
- } from "../const"
15
- import { ConfigErrorCode, TransactionErrorCode } from "../errors"
16
- import { createTarget } from "../utils"
17
- import { getOrCreateAccountCap } from "../utils/account_cap"
18
- import { SuiClient } from "@mysten/sui/client"
19
-
20
- export type DeepbookSwapParams = {
21
- poolId: string
22
- a2b: boolean
23
- amount: TransactionArgument
24
- amountLimit: number
25
- coinA?: TransactionObjectArgument
26
- coinB?: TransactionObjectArgument
27
- useFullInputCoinAmount: boolean
28
- coinAType: string
29
- coinBType: string
30
- }
31
-
32
- export type DeepbookSwapResult = {
33
- targetCoin: TransactionObjectArgument
34
- amountIn: TransactionArgument
35
- amountOut: TransactionArgument
36
- txb: Transaction
37
- }
38
-
39
- export async function deepbookSwapMovecall(
40
- swapParams: DeepbookSwapParams,
41
- client: SuiClient,
42
- txb: Transaction,
43
- config: AggregatorConfig
44
- ): Promise<DeepbookSwapResult> {
45
- const accountCapRes = await getOrCreateAccountCap(
46
- txb,
47
- client,
48
- config.getWallet()
49
- )
50
- const accountCap = accountCapRes.accountCap
51
-
52
- const aggregatorPackage = config.getPackage(AGGREGATOR)
53
- if (aggregatorPackage == null) {
54
- throw new AggregateError(
55
- "Aggregator package not set",
56
- ConfigErrorCode.MissAggregatorPackage
57
- )
58
- }
59
- const aggregatorPublishedAt = aggregatorPackage.publishedAt
60
-
61
- if (swapParams.a2b) {
62
- if (swapParams.coinA == null) {
63
- throw new AggregateError(
64
- "coinA is required",
65
- TransactionErrorCode.MissCoinA
66
- )
67
- }
68
- } else {
69
- if (swapParams.coinB == null) {
70
- throw new AggregateError(
71
- "coinB is required",
72
- TransactionErrorCode.MissCoinB
73
- )
74
- }
75
- }
76
-
77
- const args = swapParams.a2b
78
- ? [
79
- txb.object(swapParams.poolId),
80
- swapParams.amount,
81
- txb.pure.u64(swapParams.amountLimit),
82
- swapParams.coinA!,
83
- accountCap,
84
- txb.pure.bool(swapParams.useFullInputCoinAmount),
85
- txb.object(CLOCK_ADDRESS),
86
- ]
87
- : [
88
- txb.object(swapParams.poolId),
89
- swapParams.amount,
90
- txb.pure.u64(swapParams.amountLimit),
91
- swapParams.coinB!,
92
- accountCap,
93
- txb.pure.bool(swapParams.useFullInputCoinAmount),
94
- txb.object(CLOCK_ADDRESS),
95
- ]
96
-
97
- let func = swapParams.a2b ? SWAP_A2B_FUNC : SWAP_B2A_FUNC
98
- const target = createTarget(aggregatorPublishedAt, DEEPBOOK_MODULE, func)
99
-
100
- const res = txb.moveCall({
101
- target,
102
- typeArguments: [swapParams.coinAType, swapParams.coinBType],
103
- arguments: args,
104
- })
105
-
106
- if (accountCapRes.isCreate) {
107
- const target = createTarget(
108
- aggregatorPublishedAt,
109
- DEEPBOOK_MODULE,
110
- TRANSFER_ACCOUNT_CAP
111
- )
112
-
113
- const res = txb.moveCall({
114
- target,
115
- typeArguments: [],
116
- arguments: [accountCap],
117
- })
118
- }
119
-
120
- return {
121
- targetCoin: res[0],
122
- amountIn: res[1],
123
- amountOut: res[2],
124
- txb,
125
- }
126
- }
@@ -1,97 +0,0 @@
1
- import {
2
- TransactionArgument,
3
- Transaction,
4
- TransactionObjectArgument,
5
- } from "@mysten/sui/transactions"
6
- import { AggregatorConfig, ENV } from "../config"
7
- import {
8
- AGGREGATOR,
9
- FLOWX_AMM_MODULE,
10
- MAINNET_FLOWX_AMM_CONTAINER_ID,
11
- SWAP_A2B_FUNC,
12
- SWAP_B2A_FUNC,
13
- TESTNET_FLOWX_AMM_CONTAINER_ID,
14
- } from "../const"
15
- import { ConfigErrorCode, TransactionErrorCode } from "../errors"
16
- import { createTarget } from "../utils"
17
-
18
- export type FlowxSwapParams = {
19
- amount: TransactionArgument
20
- amountLimit: number
21
- a2b: boolean
22
- byAmountIn: boolean
23
- coinA?: TransactionObjectArgument
24
- coinB?: TransactionObjectArgument
25
- useFullInputCoinAmount: boolean
26
- coinAType: string
27
- coinBType: string
28
- }
29
-
30
- export type FlowxSwapResult = {
31
- targetCoin: TransactionObjectArgument
32
- amountIn: TransactionArgument
33
- amountOut: TransactionArgument
34
- txb: Transaction
35
- }
36
-
37
- export async function flowxAmmSwapMovecall(
38
- swapParams: FlowxSwapParams,
39
- txb: Transaction,
40
- config: AggregatorConfig
41
- ): Promise<FlowxSwapResult> {
42
- const aggregatorPackage = config.getPackage(AGGREGATOR)
43
- if (aggregatorPackage == null) {
44
- throw new AggregateError(
45
- "Aggregator package not set",
46
- ConfigErrorCode.MissAggregatorPackage
47
- )
48
- }
49
- const aggregatorPublishedAt = aggregatorPackage.publishedAt
50
-
51
- if (swapParams.a2b) {
52
- if (swapParams.coinA == null) {
53
- throw new AggregateError(
54
- "coinA is required",
55
- TransactionErrorCode.MissCoinA
56
- )
57
- }
58
- } else {
59
- if (swapParams.coinB == null) {
60
- throw new AggregateError(
61
- "coinB is required",
62
- TransactionErrorCode.MissCoinB
63
- )
64
- }
65
- }
66
-
67
- const containerID =
68
- config.getENV() === ENV.MAINNET
69
- ? MAINNET_FLOWX_AMM_CONTAINER_ID
70
- : TESTNET_FLOWX_AMM_CONTAINER_ID
71
-
72
- const swapCoin = swapParams.a2b ? swapParams.coinA! : swapParams.coinB!
73
-
74
- const args = [
75
- txb.object(containerID),
76
- swapParams.amount,
77
- txb.pure.u64(swapParams.amountLimit),
78
- swapCoin,
79
- txb.pure.bool(swapParams.useFullInputCoinAmount),
80
- ]
81
-
82
- const func = swapParams.a2b ? SWAP_A2B_FUNC : SWAP_B2A_FUNC
83
-
84
- const target = createTarget(aggregatorPublishedAt, FLOWX_AMM_MODULE, func)
85
-
86
- const res = txb.moveCall({
87
- target,
88
- typeArguments: [swapParams.coinAType, swapParams.coinBType],
89
- arguments: args,
90
- })
91
- return {
92
- targetCoin: res[0],
93
- amountIn: res[1],
94
- amountOut: res[2],
95
- txb,
96
- }
97
- }
@@ -1,77 +0,0 @@
1
- import { TransactionArgument, Transaction, TransactionObjectArgument } from "@mysten/sui/transactions"
2
- import { AggregatorConfig } from "../config"
3
- import { AGGREGATOR, KRIYA_MODULE, SWAP_A2B_FUNC, SWAP_B2A_FUNC } from "../const"
4
- import { ConfigErrorCode, TransactionErrorCode } from "../errors"
5
- import { createTarget } from "../utils"
6
-
7
- export type KriyaSwapParams = {
8
- poolId: string
9
- amount: TransactionArgument
10
- amountLimit: number
11
- a2b: boolean
12
- byAmountIn: boolean
13
- coinA?: TransactionObjectArgument
14
- coinB?: TransactionObjectArgument
15
- useFullInputCoinAmount: boolean
16
- coinAType: string
17
- coinBType: string
18
- }
19
-
20
- export type KriyaSwapResult = {
21
- targetCoin: TransactionObjectArgument
22
- amountIn: TransactionArgument
23
- amountOut: TransactionArgument
24
- txb: Transaction
25
- }
26
-
27
- export async function kriyaSwapMovecall(
28
- swapParams: KriyaSwapParams,
29
- txb: Transaction,
30
- config: AggregatorConfig,
31
- ): Promise<KriyaSwapResult> {
32
- const aggregatorPackage = config.getPackage(AGGREGATOR)
33
- if (aggregatorPackage == null) {
34
- throw new AggregateError("Aggregator package not set", ConfigErrorCode.MissAggregatorPackage)
35
- }
36
- const aggregatorPublishedAt = aggregatorPackage.publishedAt
37
-
38
- if (swapParams.a2b) {
39
- if (swapParams.coinA == null) {
40
- throw new AggregateError("coinA is required", TransactionErrorCode.MissCoinA)
41
- }
42
- } else {
43
- if (swapParams.coinB == null) {
44
- throw new AggregateError("coinB is required", TransactionErrorCode.MissCoinB)
45
- }
46
- }
47
-
48
- const args = swapParams.a2b ? [
49
- txb.object(swapParams.poolId),
50
- swapParams.amount,
51
- txb.pure.u64(swapParams.amountLimit),
52
- swapParams.coinA!,
53
- txb.pure.bool(swapParams.useFullInputCoinAmount)
54
- ] : [
55
- txb.object(swapParams.poolId),
56
- swapParams.amount,
57
- txb.pure.u64(swapParams.amountLimit),
58
- swapParams.coinB!,
59
- txb.pure.bool(swapParams.useFullInputCoinAmount)
60
- ]
61
-
62
- const func = swapParams.a2b ? SWAP_A2B_FUNC : SWAP_B2A_FUNC
63
-
64
- const target = createTarget(aggregatorPublishedAt, KRIYA_MODULE, func)
65
-
66
- const res = txb.moveCall({
67
- target,
68
- typeArguments: [swapParams.coinAType, swapParams.coinBType],
69
- arguments: args,
70
- })
71
- return {
72
- targetCoin: res[0],
73
- amountIn: res[1],
74
- amountOut: res[2],
75
- txb
76
- }
77
- }