@cetusprotocol/aggregator-sdk 1.4.4 → 1.4.6
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/README.md +46 -302
- package/bun.lock +106 -692
- package/dist/{index.mjs → index.cjs} +1217 -940
- package/dist/{index.d.mts → index.d.cts} +70 -14
- package/dist/index.d.ts +70 -14
- package/dist/index.js +1041 -1116
- package/package.json +12 -17
- package/tsconfig.json +6 -5
- package/vitest.config.ts +16 -0
- package/examples/mergeSwapExample.ts +0 -142
package/dist/index.js
CHANGED
|
@@ -1,38 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var pythSuiJs = require('@pythnetwork/pyth-sui-js');
|
|
8
|
-
|
|
9
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
-
|
|
11
|
-
var JSONbig__default = /*#__PURE__*/_interopDefault(JSONbig);
|
|
1
|
+
import { coinWithBalance, Transaction } from '@mysten/sui/transactions';
|
|
2
|
+
import JSONbig from 'json-bigint';
|
|
3
|
+
import { normalizeSuiObjectId, SUI_CLOCK_OBJECT_ID } from '@mysten/sui/utils';
|
|
4
|
+
import { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
|
|
5
|
+
import { HermesClient } from '@pythnetwork/hermes-client';
|
|
6
|
+
import { bcs } from '@mysten/sui/bcs';
|
|
12
7
|
|
|
13
8
|
var __create = Object.create;
|
|
14
9
|
var __defProp = Object.defineProperty;
|
|
15
|
-
var __defProps = Object.defineProperties;
|
|
16
10
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
17
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
18
11
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
19
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
20
12
|
var __getProtoOf = Object.getPrototypeOf;
|
|
21
13
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
22
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
23
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
24
|
-
var __spreadValues = (a, b) => {
|
|
25
|
-
for (var prop in b || (b = {}))
|
|
26
|
-
if (__hasOwnProp.call(b, prop))
|
|
27
|
-
__defNormalProp(a, prop, b[prop]);
|
|
28
|
-
if (__getOwnPropSymbols)
|
|
29
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
30
|
-
if (__propIsEnum.call(b, prop))
|
|
31
|
-
__defNormalProp(a, prop, b[prop]);
|
|
32
|
-
}
|
|
33
|
-
return a;
|
|
34
|
-
};
|
|
35
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
36
14
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
37
15
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
38
16
|
}) : x)(function(x) {
|
|
@@ -55,29 +33,9 @@ var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__
|
|
|
55
33
|
// file that has been converted to a CommonJS file using a Babel-
|
|
56
34
|
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
57
35
|
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
58
|
-
|
|
36
|
+
__defProp(target, "default", { value: mod2, enumerable: true }) ,
|
|
59
37
|
mod2
|
|
60
38
|
));
|
|
61
|
-
var __async = (__this, __arguments, generator) => {
|
|
62
|
-
return new Promise((resolve, reject) => {
|
|
63
|
-
var fulfilled = (value) => {
|
|
64
|
-
try {
|
|
65
|
-
step(generator.next(value));
|
|
66
|
-
} catch (e) {
|
|
67
|
-
reject(e);
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
var rejected = (value) => {
|
|
71
|
-
try {
|
|
72
|
-
step(generator.throw(value));
|
|
73
|
-
} catch (e) {
|
|
74
|
-
reject(e);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
78
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
79
|
-
});
|
|
80
|
-
};
|
|
81
39
|
|
|
82
40
|
// node_modules/bn.js/lib/bn.js
|
|
83
41
|
var require_bn = __commonJS({
|
|
@@ -2947,17 +2905,17 @@ function extractAddressFromType(type) {
|
|
|
2947
2905
|
return type.split("::")[0];
|
|
2948
2906
|
}
|
|
2949
2907
|
function extractStructTagFromType(type) {
|
|
2950
|
-
var _a;
|
|
2951
2908
|
try {
|
|
2952
2909
|
let _type = type.replace(/\s/g, "");
|
|
2953
2910
|
const genericsString = _type.match(/(<.+>)$/);
|
|
2954
|
-
const generics =
|
|
2911
|
+
const generics = genericsString?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);
|
|
2955
2912
|
if (generics) {
|
|
2956
2913
|
_type = _type.slice(0, _type.indexOf("<"));
|
|
2957
2914
|
const tag2 = extractStructTagFromType(_type);
|
|
2958
|
-
const structTag2 =
|
|
2915
|
+
const structTag2 = {
|
|
2916
|
+
...tag2,
|
|
2959
2917
|
type_arguments: generics.map((item) => extractStructTagFromType(item).source_address)
|
|
2960
|
-
}
|
|
2918
|
+
};
|
|
2961
2919
|
structTag2.type_arguments = structTag2.type_arguments.map((item) => {
|
|
2962
2920
|
return CoinUtils.isSuiCoin(item) ? item : extractStructTagFromType(item).source_address;
|
|
2963
2921
|
});
|
|
@@ -2968,7 +2926,7 @@ function extractStructTagFromType(type) {
|
|
|
2968
2926
|
const isSuiCoin = _type === GAS_TYPE_ARG || _type === GAS_TYPE_ARG_LONG;
|
|
2969
2927
|
const structTag = {
|
|
2970
2928
|
full_address: _type,
|
|
2971
|
-
address: isSuiCoin ? "0x2" :
|
|
2929
|
+
address: isSuiCoin ? "0x2" : normalizeSuiObjectId(parts[0]),
|
|
2972
2930
|
module: parts[1],
|
|
2973
2931
|
name: parts[2],
|
|
2974
2932
|
type_arguments: [],
|
|
@@ -2993,7 +2951,7 @@ function normalizeCoinType(coinType) {
|
|
|
2993
2951
|
}
|
|
2994
2952
|
function fixSuiObjectId(value) {
|
|
2995
2953
|
if (value.toLowerCase().startsWith("0x")) {
|
|
2996
|
-
return
|
|
2954
|
+
return normalizeSuiObjectId(value);
|
|
2997
2955
|
}
|
|
2998
2956
|
return value;
|
|
2999
2957
|
}
|
|
@@ -3452,7 +3410,7 @@ var AGGREGATOR_V3_CONFIG = {
|
|
|
3452
3410
|
};
|
|
3453
3411
|
|
|
3454
3412
|
// src/api.ts
|
|
3455
|
-
var SDK_VERSION =
|
|
3413
|
+
var SDK_VERSION = 1010405;
|
|
3456
3414
|
function parseRouterResponse(data, byAmountIn) {
|
|
3457
3415
|
let packages = /* @__PURE__ */ new Map();
|
|
3458
3416
|
if (data.packages) {
|
|
@@ -3488,7 +3446,6 @@ function parseRouterResponse(data, byAmountIn) {
|
|
|
3488
3446
|
};
|
|
3489
3447
|
}
|
|
3490
3448
|
function parseMergeSwapResponse(data) {
|
|
3491
|
-
var _a;
|
|
3492
3449
|
let packages = /* @__PURE__ */ new Map();
|
|
3493
3450
|
if (data.packages) {
|
|
3494
3451
|
if (data.packages instanceof Map) {
|
|
@@ -3525,133 +3482,85 @@ function parseMergeSwapResponse(data) {
|
|
|
3525
3482
|
}
|
|
3526
3483
|
return {
|
|
3527
3484
|
quoteID: data.request_id || "",
|
|
3528
|
-
totalAmountOut: new import_bn2.default(
|
|
3485
|
+
totalAmountOut: new import_bn2.default(data.total_amount_out?.toString() || "0"),
|
|
3529
3486
|
allRoutes,
|
|
3530
3487
|
packages,
|
|
3531
3488
|
gas: data.gas
|
|
3532
3489
|
};
|
|
3533
3490
|
}
|
|
3534
|
-
function getRouterResult(endpoint, apiKey, params, overlayFee, overlayFeeReceiver) {
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
errorCode = 1001 /* RateLimitExceeded */;
|
|
3549
|
-
}
|
|
3550
|
-
return {
|
|
3551
|
-
quoteID: "",
|
|
3552
|
-
amountIn: ZERO,
|
|
3553
|
-
amountOut: ZERO,
|
|
3554
|
-
paths: [],
|
|
3555
|
-
byAmountIn: params.byAmountIn,
|
|
3556
|
-
insufficientLiquidity: false,
|
|
3557
|
-
deviationRatio: 0,
|
|
3558
|
-
error: {
|
|
3559
|
-
code: errorCode,
|
|
3560
|
-
msg: getAggregatorServerErrorMessage(errorCode)
|
|
3561
|
-
}
|
|
3562
|
-
};
|
|
3563
|
-
}
|
|
3564
|
-
const data = JSONbig__default.default.parse(yield response.text());
|
|
3565
|
-
if (data.data != null) {
|
|
3566
|
-
const res = parseRouterResponse(data.data, params.byAmountIn);
|
|
3567
|
-
if (overlayFee > 0 && overlayFeeReceiver !== "0x0") {
|
|
3568
|
-
if (params.byAmountIn) {
|
|
3569
|
-
const overlayFeeAmount = res.amountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
|
|
3570
|
-
res.overlayFee = Number(overlayFeeAmount.toString());
|
|
3571
|
-
res.amountOut = res.amountOut.sub(overlayFeeAmount);
|
|
3572
|
-
} else {
|
|
3573
|
-
const overlayFeeAmount = res.amountIn.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
|
|
3574
|
-
res.overlayFee = Number(overlayFeeAmount.toString());
|
|
3575
|
-
res.amountIn = res.amountIn.add(overlayFeeAmount);
|
|
3576
|
-
}
|
|
3577
|
-
}
|
|
3578
|
-
if (!res.packages) {
|
|
3579
|
-
res.packages = /* @__PURE__ */ new Map();
|
|
3580
|
-
}
|
|
3581
|
-
if (!res.packages.has("aggregator_v3")) {
|
|
3582
|
-
res.packages.set(
|
|
3583
|
-
"aggregator_v3",
|
|
3584
|
-
"0x3864c7c59a4889fec05d1aae4bc9dba5a0e0940594b424fbed44cb3f6ac4c032"
|
|
3585
|
-
);
|
|
3586
|
-
}
|
|
3587
|
-
return res;
|
|
3491
|
+
async function getRouterResult(endpoint, apiKey, params, overlayFee, overlayFeeReceiver) {
|
|
3492
|
+
let response;
|
|
3493
|
+
if (params.liquidityChanges && params.liquidityChanges.length > 0) {
|
|
3494
|
+
response = await postRouterWithLiquidityChanges(endpoint, params);
|
|
3495
|
+
} else {
|
|
3496
|
+
response = await getRouter(endpoint, apiKey, params);
|
|
3497
|
+
}
|
|
3498
|
+
if (!response) {
|
|
3499
|
+
return null;
|
|
3500
|
+
}
|
|
3501
|
+
if (!response.ok) {
|
|
3502
|
+
let errorCode = 1004 /* BadRequest */;
|
|
3503
|
+
if (response.status === 429) {
|
|
3504
|
+
errorCode = 1001 /* RateLimitExceeded */;
|
|
3588
3505
|
}
|
|
3589
|
-
const code = processErrorStatusCode(data.code);
|
|
3590
|
-
const msg = getAggregatorServerErrorMessage(code, data.msg);
|
|
3591
|
-
const insufficientLiquidity = msg.includes("Insufficient liquidity");
|
|
3592
3506
|
return {
|
|
3593
3507
|
quoteID: "",
|
|
3594
3508
|
amountIn: ZERO,
|
|
3595
3509
|
amountOut: ZERO,
|
|
3596
3510
|
paths: [],
|
|
3597
|
-
insufficientLiquidity,
|
|
3598
3511
|
byAmountIn: params.byAmountIn,
|
|
3512
|
+
insufficientLiquidity: false,
|
|
3599
3513
|
deviationRatio: 0,
|
|
3600
3514
|
error: {
|
|
3601
|
-
code,
|
|
3602
|
-
msg
|
|
3515
|
+
code: errorCode,
|
|
3516
|
+
msg: getAggregatorServerErrorMessage(errorCode)
|
|
3603
3517
|
}
|
|
3604
3518
|
};
|
|
3605
|
-
}
|
|
3606
|
-
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
splitCount,
|
|
3619
|
-
providers
|
|
3620
|
-
} = params;
|
|
3621
|
-
const fromCoin = completionCoin(from);
|
|
3622
|
-
const targetCoin = completionCoin(target);
|
|
3623
|
-
let url = `${endpoint}/find_routes?from=${fromCoin}&target=${targetCoin}&amount=${amount.toString()}&by_amount_in=${byAmountIn}`;
|
|
3624
|
-
if (depth) {
|
|
3625
|
-
url += `&depth=${depth}`;
|
|
3626
|
-
}
|
|
3627
|
-
if (splitAlgorithm) {
|
|
3628
|
-
url += `&split_algorithm=${splitAlgorithm}`;
|
|
3629
|
-
}
|
|
3630
|
-
if (splitFactor) {
|
|
3631
|
-
url += `&split_factor=${splitFactor}`;
|
|
3632
|
-
}
|
|
3633
|
-
if (splitCount) {
|
|
3634
|
-
url += `&split_count=${splitCount}`;
|
|
3635
|
-
}
|
|
3636
|
-
if (providers) {
|
|
3637
|
-
if (providers.length > 0) {
|
|
3638
|
-
url += `&providers=${providers.join(",")}`;
|
|
3639
|
-
}
|
|
3640
|
-
}
|
|
3641
|
-
if (apiKey.length > 0) {
|
|
3642
|
-
url += `&apiKey=${apiKey}`;
|
|
3519
|
+
}
|
|
3520
|
+
const data = JSONbig.parse(await response.text());
|
|
3521
|
+
if (data.data != null) {
|
|
3522
|
+
const res = parseRouterResponse(data.data, params.byAmountIn);
|
|
3523
|
+
if (overlayFee > 0 && overlayFeeReceiver !== "0x0") {
|
|
3524
|
+
if (params.byAmountIn) {
|
|
3525
|
+
const overlayFeeAmount = res.amountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
|
|
3526
|
+
res.overlayFee = Number(overlayFeeAmount.toString());
|
|
3527
|
+
res.amountOut = res.amountOut.sub(overlayFeeAmount);
|
|
3528
|
+
} else {
|
|
3529
|
+
const overlayFeeAmount = res.amountIn.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
|
|
3530
|
+
res.overlayFee = Number(overlayFeeAmount.toString());
|
|
3531
|
+
res.amountIn = res.amountIn.add(overlayFeeAmount);
|
|
3643
3532
|
}
|
|
3644
|
-
url += `&v=${SDK_VERSION}`;
|
|
3645
|
-
const response = yield fetch(url);
|
|
3646
|
-
return response;
|
|
3647
|
-
} catch (error) {
|
|
3648
|
-
console.error(error);
|
|
3649
|
-
return null;
|
|
3650
3533
|
}
|
|
3651
|
-
|
|
3534
|
+
if (!res.packages) {
|
|
3535
|
+
res.packages = /* @__PURE__ */ new Map();
|
|
3536
|
+
}
|
|
3537
|
+
if (!res.packages.has("aggregator_v3")) {
|
|
3538
|
+
res.packages.set(
|
|
3539
|
+
"aggregator_v3",
|
|
3540
|
+
"0x3864c7c59a4889fec05d1aae4bc9dba5a0e0940594b424fbed44cb3f6ac4c032"
|
|
3541
|
+
);
|
|
3542
|
+
}
|
|
3543
|
+
return res;
|
|
3544
|
+
}
|
|
3545
|
+
const code = processErrorStatusCode(data.code);
|
|
3546
|
+
const msg = getAggregatorServerErrorMessage(code, data.msg);
|
|
3547
|
+
const insufficientLiquidity = msg.includes("Insufficient liquidity");
|
|
3548
|
+
return {
|
|
3549
|
+
quoteID: "",
|
|
3550
|
+
amountIn: ZERO,
|
|
3551
|
+
amountOut: ZERO,
|
|
3552
|
+
paths: [],
|
|
3553
|
+
insufficientLiquidity,
|
|
3554
|
+
byAmountIn: params.byAmountIn,
|
|
3555
|
+
deviationRatio: 0,
|
|
3556
|
+
error: {
|
|
3557
|
+
code,
|
|
3558
|
+
msg
|
|
3559
|
+
}
|
|
3560
|
+
};
|
|
3652
3561
|
}
|
|
3653
|
-
function
|
|
3654
|
-
|
|
3562
|
+
async function getRouter(endpoint, apiKey, params) {
|
|
3563
|
+
try {
|
|
3655
3564
|
const {
|
|
3656
3565
|
from,
|
|
3657
3566
|
target,
|
|
@@ -3661,154 +3570,190 @@ function postRouterWithLiquidityChanges(endpoint, params) {
|
|
|
3661
3570
|
splitAlgorithm,
|
|
3662
3571
|
splitFactor,
|
|
3663
3572
|
splitCount,
|
|
3664
|
-
providers
|
|
3665
|
-
liquidityChanges
|
|
3573
|
+
providers
|
|
3666
3574
|
} = params;
|
|
3667
3575
|
const fromCoin = completionCoin(from);
|
|
3668
3576
|
const targetCoin = completionCoin(target);
|
|
3669
|
-
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
from: fromCoin,
|
|
3673
|
-
target: targetCoin,
|
|
3674
|
-
amount: Number(amount.toString()),
|
|
3675
|
-
by_amount_in: byAmountIn,
|
|
3676
|
-
depth,
|
|
3677
|
-
split_algorithm: splitAlgorithm,
|
|
3678
|
-
split_factor: splitFactor,
|
|
3679
|
-
split_count: splitCount,
|
|
3680
|
-
providers: providersStr,
|
|
3681
|
-
liquidity_changes: liquidityChanges.map((change) => ({
|
|
3682
|
-
pool: change.poolID,
|
|
3683
|
-
tick_lower: change.ticklower,
|
|
3684
|
-
tick_upper: change.tickUpper,
|
|
3685
|
-
delta_liquidity: change.deltaLiquidity
|
|
3686
|
-
})),
|
|
3687
|
-
v: SDK_VERSION
|
|
3688
|
-
};
|
|
3689
|
-
try {
|
|
3690
|
-
const response = yield fetch(url, {
|
|
3691
|
-
method: "POST",
|
|
3692
|
-
headers: {
|
|
3693
|
-
"Content-Type": "application/json"
|
|
3694
|
-
},
|
|
3695
|
-
body: JSON.stringify(requestData)
|
|
3696
|
-
});
|
|
3697
|
-
return response;
|
|
3698
|
-
} catch (error) {
|
|
3699
|
-
console.error("Error:", error);
|
|
3700
|
-
return null;
|
|
3577
|
+
let url = `${endpoint}/find_routes?from=${fromCoin}&target=${targetCoin}&amount=${amount.toString()}&by_amount_in=${byAmountIn}`;
|
|
3578
|
+
if (depth) {
|
|
3579
|
+
url += `&depth=${depth}`;
|
|
3701
3580
|
}
|
|
3702
|
-
|
|
3703
|
-
}
|
|
3704
|
-
|
|
3705
|
-
|
|
3706
|
-
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
if (providers && providers.length > 0) {
|
|
3581
|
+
if (splitAlgorithm) {
|
|
3582
|
+
url += `&split_algorithm=${splitAlgorithm}`;
|
|
3583
|
+
}
|
|
3584
|
+
if (splitFactor) {
|
|
3585
|
+
url += `&split_factor=${splitFactor}`;
|
|
3586
|
+
}
|
|
3587
|
+
if (splitCount) {
|
|
3588
|
+
url += `&split_count=${splitCount}`;
|
|
3589
|
+
}
|
|
3590
|
+
if (providers) {
|
|
3591
|
+
if (providers.length > 0) {
|
|
3714
3592
|
url += `&providers=${providers.join(",")}`;
|
|
3715
3593
|
}
|
|
3716
|
-
if (apiKey.length > 0) {
|
|
3717
|
-
url += `&apiKey=${apiKey}`;
|
|
3718
|
-
}
|
|
3719
|
-
url += `&v=${SDK_VERSION}`;
|
|
3720
|
-
const fromsData = froms.map((from) => ({
|
|
3721
|
-
coin_type: completionCoin(from.coinType),
|
|
3722
|
-
amount: Number(from.amount.toString())
|
|
3723
|
-
}));
|
|
3724
|
-
url += `&froms=${encodeURIComponent(JSON.stringify(fromsData))}`;
|
|
3725
|
-
const response = yield fetch(url);
|
|
3726
|
-
console.log("response", response);
|
|
3727
|
-
return response;
|
|
3728
|
-
} catch (error) {
|
|
3729
|
-
console.error(error);
|
|
3730
|
-
return null;
|
|
3731
3594
|
}
|
|
3732
|
-
|
|
3733
|
-
}
|
|
3734
|
-
function getMergeSwapResult(endpoint, apiKey, params, overlayFee, overlayFeeReceiver) {
|
|
3735
|
-
return __async(this, null, function* () {
|
|
3736
|
-
const response = yield getMergeSwapRouter(endpoint, apiKey, params);
|
|
3737
|
-
if (!response) {
|
|
3738
|
-
return null;
|
|
3595
|
+
if (apiKey.length > 0) {
|
|
3596
|
+
url += `&apiKey=${apiKey}`;
|
|
3739
3597
|
}
|
|
3740
|
-
|
|
3741
|
-
|
|
3742
|
-
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3747
|
-
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
3752
|
-
|
|
3753
|
-
|
|
3598
|
+
url += `&v=${SDK_VERSION}`;
|
|
3599
|
+
const response = await fetch(url);
|
|
3600
|
+
return response;
|
|
3601
|
+
} catch (error) {
|
|
3602
|
+
console.error(error);
|
|
3603
|
+
return null;
|
|
3604
|
+
}
|
|
3605
|
+
}
|
|
3606
|
+
async function postRouterWithLiquidityChanges(endpoint, params) {
|
|
3607
|
+
const {
|
|
3608
|
+
from,
|
|
3609
|
+
target,
|
|
3610
|
+
amount,
|
|
3611
|
+
byAmountIn,
|
|
3612
|
+
depth,
|
|
3613
|
+
splitAlgorithm,
|
|
3614
|
+
splitFactor,
|
|
3615
|
+
splitCount,
|
|
3616
|
+
providers,
|
|
3617
|
+
liquidityChanges
|
|
3618
|
+
} = params;
|
|
3619
|
+
const fromCoin = completionCoin(from);
|
|
3620
|
+
const targetCoin = completionCoin(target);
|
|
3621
|
+
const url = `${endpoint}/find_routes`;
|
|
3622
|
+
const providersStr = providers?.join(",");
|
|
3623
|
+
const requestData = {
|
|
3624
|
+
from: fromCoin,
|
|
3625
|
+
target: targetCoin,
|
|
3626
|
+
amount: Number(amount.toString()),
|
|
3627
|
+
by_amount_in: byAmountIn,
|
|
3628
|
+
depth,
|
|
3629
|
+
split_algorithm: splitAlgorithm,
|
|
3630
|
+
split_factor: splitFactor,
|
|
3631
|
+
split_count: splitCount,
|
|
3632
|
+
providers: providersStr,
|
|
3633
|
+
liquidity_changes: liquidityChanges.map((change) => ({
|
|
3634
|
+
pool: change.poolID,
|
|
3635
|
+
tick_lower: change.ticklower,
|
|
3636
|
+
tick_upper: change.tickUpper,
|
|
3637
|
+
delta_liquidity: change.deltaLiquidity
|
|
3638
|
+
})),
|
|
3639
|
+
v: SDK_VERSION
|
|
3640
|
+
};
|
|
3641
|
+
try {
|
|
3642
|
+
const response = await fetch(url, {
|
|
3643
|
+
method: "POST",
|
|
3644
|
+
headers: {
|
|
3645
|
+
"Content-Type": "application/json"
|
|
3646
|
+
},
|
|
3647
|
+
body: JSON.stringify(requestData)
|
|
3648
|
+
});
|
|
3649
|
+
return response;
|
|
3650
|
+
} catch (error) {
|
|
3651
|
+
console.error("Error:", error);
|
|
3652
|
+
return null;
|
|
3653
|
+
}
|
|
3654
|
+
}
|
|
3655
|
+
async function getMergeSwapRouter(endpoint, apiKey, params) {
|
|
3656
|
+
try {
|
|
3657
|
+
const { target, byAmountIn, depth, providers, froms } = params;
|
|
3658
|
+
const targetCoin = completionCoin(target);
|
|
3659
|
+
let url = `${endpoint}/multi_find_routes?target=${targetCoin}&by_amount_in=${byAmountIn}`;
|
|
3660
|
+
if (depth) {
|
|
3661
|
+
url += `&depth=${depth}`;
|
|
3662
|
+
}
|
|
3663
|
+
if (providers && providers.length > 0) {
|
|
3664
|
+
url += `&providers=${providers.join(",")}`;
|
|
3665
|
+
}
|
|
3666
|
+
if (apiKey.length > 0) {
|
|
3667
|
+
url += `&apiKey=${apiKey}`;
|
|
3668
|
+
}
|
|
3669
|
+
url += `&v=${SDK_VERSION}`;
|
|
3670
|
+
const fromsData = froms.map((from) => ({
|
|
3671
|
+
coin_type: completionCoin(from.coinType),
|
|
3672
|
+
amount: Number(from.amount.toString())
|
|
3673
|
+
}));
|
|
3674
|
+
url += `&froms=${encodeURIComponent(JSON.stringify(fromsData))}`;
|
|
3675
|
+
const response = await fetch(url);
|
|
3676
|
+
console.log("response", response);
|
|
3677
|
+
return response;
|
|
3678
|
+
} catch (error) {
|
|
3679
|
+
console.error(error);
|
|
3680
|
+
return null;
|
|
3681
|
+
}
|
|
3682
|
+
}
|
|
3683
|
+
async function getMergeSwapResult(endpoint, apiKey, params, overlayFee, overlayFeeReceiver) {
|
|
3684
|
+
const response = await getMergeSwapRouter(endpoint, apiKey, params);
|
|
3685
|
+
if (!response) {
|
|
3686
|
+
return null;
|
|
3687
|
+
}
|
|
3688
|
+
if (!response.ok) {
|
|
3689
|
+
let errorCode = 1004 /* BadRequest */;
|
|
3690
|
+
if (response.status === 429) {
|
|
3691
|
+
errorCode = 1001 /* RateLimitExceeded */;
|
|
3754
3692
|
}
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
totalAmountOut: ZERO,
|
|
3763
|
-
allRoutes: [],
|
|
3764
|
-
error: {
|
|
3765
|
-
code: code2,
|
|
3766
|
-
msg: msg2
|
|
3767
|
-
}
|
|
3768
|
-
};
|
|
3769
|
-
}
|
|
3770
|
-
const responseText = yield response.text();
|
|
3771
|
-
const data = JSONbig__default.default.parse(responseText);
|
|
3772
|
-
if (data.data != null) {
|
|
3773
|
-
console.log("data.data not null", data.data);
|
|
3774
|
-
const res = parseMergeSwapResponse(data.data);
|
|
3775
|
-
if (overlayFee > 0 && overlayFeeReceiver !== "0x0" && params.byAmountIn) {
|
|
3776
|
-
const overlayFeeAmount = res.totalAmountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
|
|
3777
|
-
res.totalAmountOut = res.totalAmountOut.sub(overlayFeeAmount);
|
|
3778
|
-
for (const route of res.allRoutes) {
|
|
3779
|
-
const routeFee = route.amountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
|
|
3780
|
-
route.amountOut = route.amountOut.sub(routeFee);
|
|
3781
|
-
}
|
|
3782
|
-
}
|
|
3783
|
-
if (!res.packages) {
|
|
3784
|
-
res.packages = /* @__PURE__ */ new Map();
|
|
3693
|
+
return {
|
|
3694
|
+
quoteID: "",
|
|
3695
|
+
totalAmountOut: ZERO,
|
|
3696
|
+
allRoutes: [],
|
|
3697
|
+
error: {
|
|
3698
|
+
code: errorCode,
|
|
3699
|
+
msg: getAggregatorServerErrorMessage(errorCode)
|
|
3785
3700
|
}
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
const
|
|
3701
|
+
};
|
|
3702
|
+
}
|
|
3703
|
+
if (!response.ok) {
|
|
3704
|
+
const code2 = processErrorStatusCode(response.status);
|
|
3705
|
+
const responseText2 = await response.text();
|
|
3706
|
+
const data2 = JSONbig.parse(responseText2);
|
|
3707
|
+
const msg2 = getAggregatorServerErrorMessage(code2, data2.msg);
|
|
3790
3708
|
return {
|
|
3791
3709
|
quoteID: "",
|
|
3792
3710
|
totalAmountOut: ZERO,
|
|
3793
3711
|
allRoutes: [],
|
|
3794
3712
|
error: {
|
|
3795
|
-
code,
|
|
3796
|
-
msg
|
|
3713
|
+
code: code2,
|
|
3714
|
+
msg: msg2
|
|
3797
3715
|
}
|
|
3798
3716
|
};
|
|
3799
|
-
}
|
|
3800
|
-
|
|
3801
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
|
|
3809
|
-
|
|
3717
|
+
}
|
|
3718
|
+
const responseText = await response.text();
|
|
3719
|
+
const data = JSONbig.parse(responseText);
|
|
3720
|
+
if (data.data != null) {
|
|
3721
|
+
console.log("data.data not null", data.data);
|
|
3722
|
+
const res = parseMergeSwapResponse(data.data);
|
|
3723
|
+
if (overlayFee > 0 && overlayFeeReceiver !== "0x0" && params.byAmountIn) {
|
|
3724
|
+
const overlayFeeAmount = res.totalAmountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
|
|
3725
|
+
res.totalAmountOut = res.totalAmountOut.sub(overlayFeeAmount);
|
|
3726
|
+
for (const route of res.allRoutes) {
|
|
3727
|
+
const routeFee = route.amountOut.mul(new import_bn2.default(overlayFee)).div(new import_bn2.default(1e6));
|
|
3728
|
+
route.amountOut = route.amountOut.sub(routeFee);
|
|
3729
|
+
}
|
|
3810
3730
|
}
|
|
3811
|
-
|
|
3731
|
+
if (!res.packages) {
|
|
3732
|
+
res.packages = /* @__PURE__ */ new Map();
|
|
3733
|
+
}
|
|
3734
|
+
return res;
|
|
3735
|
+
}
|
|
3736
|
+
const code = processErrorStatusCode(data.code);
|
|
3737
|
+
const msg = getAggregatorServerErrorMessage(code, data.msg);
|
|
3738
|
+
return {
|
|
3739
|
+
quoteID: "",
|
|
3740
|
+
totalAmountOut: ZERO,
|
|
3741
|
+
allRoutes: [],
|
|
3742
|
+
error: {
|
|
3743
|
+
code,
|
|
3744
|
+
msg
|
|
3745
|
+
}
|
|
3746
|
+
};
|
|
3747
|
+
}
|
|
3748
|
+
async function getDeepbookV3Config(endpoint) {
|
|
3749
|
+
const url = `${endpoint}/deepbookv3_config`;
|
|
3750
|
+
try {
|
|
3751
|
+
const response = await fetch(url);
|
|
3752
|
+
return response.json();
|
|
3753
|
+
} catch (error) {
|
|
3754
|
+
console.error("Error:", error);
|
|
3755
|
+
return null;
|
|
3756
|
+
}
|
|
3812
3757
|
}
|
|
3813
3758
|
function processFlattenRoutes(routerData) {
|
|
3814
3759
|
const paths = routerData.paths;
|
|
@@ -3860,6 +3805,7 @@ function processErrorStatusCode(status) {
|
|
|
3860
3805
|
case 5e3:
|
|
3861
3806
|
return 1002 /* InsufficientLiquidity */;
|
|
3862
3807
|
case 5001:
|
|
3808
|
+
case 5010:
|
|
3863
3809
|
return 1007 /* NotFoundRoute */;
|
|
3864
3810
|
case 5030:
|
|
3865
3811
|
return 1008 /* ServiceUnavailable */;
|
|
@@ -6104,7 +6050,7 @@ function CalculateAmountLimitByDecimal(expectAmount, byAmountIn, slippage) {
|
|
|
6104
6050
|
var CetusRouter = class {
|
|
6105
6051
|
constructor(env, partner) {
|
|
6106
6052
|
this.globalConfig = env === 0 /* Mainnet */ ? "0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f" : "0xc6273f844b4bc258952c4e477697aa12c918c8e08106fac6b934811298c9820a";
|
|
6107
|
-
this.partner = partner
|
|
6053
|
+
this.partner = partner ?? (env === 0 /* Mainnet */ ? "0x639b5e433da31739e800cd085f356e64cae222966d0f1b11bd9dc76b322ff58b" : "0xfdc30896f88f74544fd507722d3bf52e46b06412ba8241ba0e854cbc65f8d85f");
|
|
6108
6054
|
}
|
|
6109
6055
|
// By amount in
|
|
6110
6056
|
swap(txb, flattenedPath, swapContext, _extends) {
|
|
@@ -6135,7 +6081,7 @@ var CetusRouter = class {
|
|
|
6135
6081
|
txb.object(this.partner),
|
|
6136
6082
|
txb.pure.bool(swapData.direction),
|
|
6137
6083
|
txb.pure.u64(swapData.amountIn),
|
|
6138
|
-
txb.object(
|
|
6084
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6139
6085
|
];
|
|
6140
6086
|
txb.moveCall({
|
|
6141
6087
|
target: `${swapData.publishedAt}::cetus::swap`,
|
|
@@ -6154,7 +6100,7 @@ var CetusRouter = class {
|
|
|
6154
6100
|
txb.pure.bool(path.direction),
|
|
6155
6101
|
txb.pure.bool(false),
|
|
6156
6102
|
// isExactIn
|
|
6157
|
-
txb.object(
|
|
6103
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6158
6104
|
];
|
|
6159
6105
|
const [coinAType, coinBType] = path.direction ? [path.from, path.target] : [path.target, path.from];
|
|
6160
6106
|
const [flashReceipt, repayAmount] = txb.moveCall({
|
|
@@ -6237,7 +6183,7 @@ var KriyaV3Router = class {
|
|
|
6237
6183
|
txb.object(this.version),
|
|
6238
6184
|
txb.pure.bool(swapData.direction),
|
|
6239
6185
|
txb.pure.u64(swapData.amountIn),
|
|
6240
|
-
txb.object(
|
|
6186
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6241
6187
|
];
|
|
6242
6188
|
txb.moveCall({
|
|
6243
6189
|
target: `${swapData.publishedAt}::kriya_clmm::swap`,
|
|
@@ -6284,7 +6230,7 @@ var FlowxV3Router = class {
|
|
|
6284
6230
|
txb.pure.u64(swapData.feeRate),
|
|
6285
6231
|
txb.pure.u64(swapData.amountIn),
|
|
6286
6232
|
txb.pure.bool(swapData.direction),
|
|
6287
|
-
txb.object(
|
|
6233
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6288
6234
|
];
|
|
6289
6235
|
txb.moveCall({
|
|
6290
6236
|
target: `${swapData.publishedAt}::flowx_clmm::swap`,
|
|
@@ -6336,7 +6282,7 @@ var TurbosRouter = class {
|
|
|
6336
6282
|
txb.object(this.versioned),
|
|
6337
6283
|
txb.pure.bool(swapData.direction),
|
|
6338
6284
|
txb.pure.u64(swapData.amountIn),
|
|
6339
|
-
txb.object(
|
|
6285
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6340
6286
|
];
|
|
6341
6287
|
txb.moveCall({
|
|
6342
6288
|
target: `${swapData.publishedAt}::turbos::swap`,
|
|
@@ -6379,7 +6325,7 @@ var BluefinRouter = class {
|
|
|
6379
6325
|
txb.object(swapData.poolId),
|
|
6380
6326
|
txb.pure.bool(swapData.direction),
|
|
6381
6327
|
txb.pure.u64(swapData.amountIn),
|
|
6382
|
-
txb.object(
|
|
6328
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6383
6329
|
];
|
|
6384
6330
|
txb.moveCall({
|
|
6385
6331
|
target: `${swapData.publishedAt}::bluefin::swap`,
|
|
@@ -6422,7 +6368,7 @@ var MomentumRouter = class {
|
|
|
6422
6368
|
txb.pure.bool(swapData.direction),
|
|
6423
6369
|
txb.pure.u64(swapData.amountIn),
|
|
6424
6370
|
txb.object(this.version),
|
|
6425
|
-
txb.object(
|
|
6371
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6426
6372
|
];
|
|
6427
6373
|
txb.moveCall({
|
|
6428
6374
|
target: `${swapData.publishedAt}::momentum::swap`,
|
|
@@ -6465,7 +6411,7 @@ var MagmaRouter = class {
|
|
|
6465
6411
|
txb.object(swapData.poolId),
|
|
6466
6412
|
txb.pure.bool(swapData.direction),
|
|
6467
6413
|
txb.pure.u64(swapData.amountIn),
|
|
6468
|
-
txb.object(
|
|
6414
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6469
6415
|
];
|
|
6470
6416
|
txb.moveCall({
|
|
6471
6417
|
target: `${swapData.publishedAt}::magma::swap`,
|
|
@@ -6618,17 +6564,16 @@ var DeepbookV3Router = class {
|
|
|
6618
6564
|
this.executeSwapContract(txb, swapData, swapContext, _extends);
|
|
6619
6565
|
}
|
|
6620
6566
|
prepareSwapData(flattenedPath) {
|
|
6621
|
-
var _a, _b, _c, _d, _e;
|
|
6622
6567
|
if (flattenedPath.path.publishedAt == null) {
|
|
6623
6568
|
throw new Error("DeepBook V3 not set publishedAt");
|
|
6624
6569
|
}
|
|
6625
6570
|
const path = flattenedPath.path;
|
|
6626
6571
|
const [coinAType, coinBType] = path.direction ? [path.from, path.target] : [path.target, path.from];
|
|
6627
6572
|
const amountIn = flattenedPath.isLastUseOfIntermediateToken ? AGGREGATOR_V3_CONFIG.MAX_AMOUNT_IN : path.amountIn;
|
|
6628
|
-
const needAddDeepPricePoint =
|
|
6629
|
-
const referencePoolId =
|
|
6630
|
-
const referencePoolBaseType =
|
|
6631
|
-
const referencePoolQuoteType =
|
|
6573
|
+
const needAddDeepPricePoint = path.extendedDetails?.deepbookv3_need_add_deep_price_point ?? false;
|
|
6574
|
+
const referencePoolId = path.extendedDetails?.deepbookv3_reference_pool_id;
|
|
6575
|
+
const referencePoolBaseType = path.extendedDetails?.deepbookv3_reference_pool_base_type;
|
|
6576
|
+
const referencePoolQuoteType = path.extendedDetails?.deepbookv3_reference_pool_quote_type;
|
|
6632
6577
|
if (needAddDeepPricePoint) {
|
|
6633
6578
|
if (!referencePoolId) {
|
|
6634
6579
|
throw new Error(
|
|
@@ -6671,12 +6616,12 @@ var DeepbookV3Router = class {
|
|
|
6671
6616
|
arguments: [
|
|
6672
6617
|
txb.object(swapData.poolId),
|
|
6673
6618
|
txb.object(swapData.referencePoolId),
|
|
6674
|
-
txb.object(
|
|
6619
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6675
6620
|
]
|
|
6676
6621
|
});
|
|
6677
6622
|
}
|
|
6678
6623
|
executeSwapContract(txb, swapData, swapContext, _extends) {
|
|
6679
|
-
const deepCoin =
|
|
6624
|
+
const deepCoin = _extends?.deepbookv3DeepFee || txb.moveCall({
|
|
6680
6625
|
target: "0x2::coin::zero",
|
|
6681
6626
|
typeArguments: [this.getDeepFeeType()]
|
|
6682
6627
|
});
|
|
@@ -6687,7 +6632,7 @@ var DeepbookV3Router = class {
|
|
|
6687
6632
|
txb.pure.u64(swapData.amountIn),
|
|
6688
6633
|
txb.pure.bool(swapData.direction),
|
|
6689
6634
|
deepCoin,
|
|
6690
|
-
txb.object(
|
|
6635
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6691
6636
|
];
|
|
6692
6637
|
txb.moveCall({
|
|
6693
6638
|
target: `${swapData.publishedAt}::deepbookv3::swap`,
|
|
@@ -6717,7 +6662,6 @@ var AftermathRouter = class {
|
|
|
6717
6662
|
this.executeSwapContract(txb, swapData, swapContext);
|
|
6718
6663
|
}
|
|
6719
6664
|
prepareSwapData(flattenedPath) {
|
|
6720
|
-
var _a, _b;
|
|
6721
6665
|
if (flattenedPath.path.publishedAt == null) {
|
|
6722
6666
|
throw new Error("Aftermath not set publishedAt");
|
|
6723
6667
|
}
|
|
@@ -6727,7 +6671,7 @@ var AftermathRouter = class {
|
|
|
6727
6671
|
return {
|
|
6728
6672
|
coinAType,
|
|
6729
6673
|
coinBType,
|
|
6730
|
-
feeType:
|
|
6674
|
+
feeType: path.extendedDetails?.aftermath_lp_supply_type || path.extendedDetails?.aftermath_lp_supply_type || "0x2::sui::SUI",
|
|
6731
6675
|
// Use LP supply type from path (handle both camelCase and snake_case)
|
|
6732
6676
|
direction: path.direction,
|
|
6733
6677
|
amountIn,
|
|
@@ -6824,7 +6768,7 @@ var SteammCPMMRouter = class {
|
|
|
6824
6768
|
txb.object(swapData.extendedDetails.steamm_lending_market),
|
|
6825
6769
|
txb.pure.bool(swapData.direction),
|
|
6826
6770
|
txb.pure.u64(swapData.amountIn),
|
|
6827
|
-
txb.object(
|
|
6771
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6828
6772
|
];
|
|
6829
6773
|
txb.moveCall({
|
|
6830
6774
|
target: `${swapData.publishedAt}::steamm_cpmm::swap`,
|
|
@@ -6883,7 +6827,7 @@ var ScallopRouter = class {
|
|
|
6883
6827
|
txb.object(this.marketData),
|
|
6884
6828
|
txb.object(swapData.scallopScoinTreasury),
|
|
6885
6829
|
txb.pure.u64(swapData.amountIn),
|
|
6886
|
-
txb.object(
|
|
6830
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6887
6831
|
];
|
|
6888
6832
|
const func = swapData.direction ? "swap_a2b" : "swap_b2a";
|
|
6889
6833
|
txb.moveCall({
|
|
@@ -6999,7 +6943,7 @@ var HaedalPmmRouter = class {
|
|
|
6999
6943
|
// amount_in
|
|
7000
6944
|
txb.pure.bool(swapData.a2b),
|
|
7001
6945
|
// a2b
|
|
7002
|
-
txb.object(
|
|
6946
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7003
6947
|
// clock
|
|
7004
6948
|
];
|
|
7005
6949
|
txb.moveCall({
|
|
@@ -7073,7 +7017,7 @@ var ObricRouter = class {
|
|
|
7073
7017
|
txb.object(this.pythStateObjectId),
|
|
7074
7018
|
txb.object(swapData.coinAPriceInfoObjectId),
|
|
7075
7019
|
txb.object(swapData.coinBPriceInfoObjectId),
|
|
7076
|
-
txb.object(
|
|
7020
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7077
7021
|
];
|
|
7078
7022
|
txb.moveCall({
|
|
7079
7023
|
target: `${swapData.publishedAt}::obric::swap`,
|
|
@@ -7148,7 +7092,7 @@ var SevenkRouter = class {
|
|
|
7148
7092
|
txb.object(swapData.coinAOracleId),
|
|
7149
7093
|
holder,
|
|
7150
7094
|
txb.object(swapData.coinAPriceId),
|
|
7151
|
-
txb.object(
|
|
7095
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7152
7096
|
]
|
|
7153
7097
|
});
|
|
7154
7098
|
txb.moveCall({
|
|
@@ -7158,7 +7102,7 @@ var SevenkRouter = class {
|
|
|
7158
7102
|
txb.object(swapData.coinBOracleId),
|
|
7159
7103
|
holder,
|
|
7160
7104
|
txb.object(swapData.coinBPriceId),
|
|
7161
|
-
txb.object(
|
|
7105
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7162
7106
|
]
|
|
7163
7107
|
});
|
|
7164
7108
|
const args = [
|
|
@@ -7255,7 +7199,7 @@ var SteammOmmRouter = class {
|
|
|
7255
7199
|
txb.object(extendedDetails.steammOracleRegistryId),
|
|
7256
7200
|
txb.object(swapData.priceInfoObjectIdA),
|
|
7257
7201
|
txb.pure.u64(extendedDetails.steammOracleIndexA),
|
|
7258
|
-
txb.object(
|
|
7202
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7259
7203
|
]
|
|
7260
7204
|
});
|
|
7261
7205
|
const oraclePriceUpdateB = txb.moveCall({
|
|
@@ -7265,7 +7209,7 @@ var SteammOmmRouter = class {
|
|
|
7265
7209
|
txb.object(extendedDetails.steammOracleRegistryId),
|
|
7266
7210
|
txb.object(swapData.priceInfoObjectIdB),
|
|
7267
7211
|
txb.pure.u64(extendedDetails.steammOracleIndexB),
|
|
7268
|
-
txb.object(
|
|
7212
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7269
7213
|
]
|
|
7270
7214
|
});
|
|
7271
7215
|
const args = [
|
|
@@ -7277,7 +7221,7 @@ var SteammOmmRouter = class {
|
|
|
7277
7221
|
oraclePriceUpdateA,
|
|
7278
7222
|
oraclePriceUpdateB,
|
|
7279
7223
|
txb.pure.u64(swapData.amountIn),
|
|
7280
|
-
txb.object(
|
|
7224
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7281
7225
|
];
|
|
7282
7226
|
txb.moveCall({
|
|
7283
7227
|
target: `${swapData.publishedAt}::steamm_omm::${swapData.func}`,
|
|
@@ -7373,7 +7317,7 @@ var SteammOmmV2Router = class {
|
|
|
7373
7317
|
txb.object(extendedDetails.steamm_oracle_registry_id),
|
|
7374
7318
|
txb.object(swapData.priceInfoObjectIdA),
|
|
7375
7319
|
txb.pure.u64(extendedDetails.steamm_oracle_index_a),
|
|
7376
|
-
txb.object(
|
|
7320
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7377
7321
|
]
|
|
7378
7322
|
});
|
|
7379
7323
|
const oraclePriceUpdateB = txb.moveCall({
|
|
@@ -7383,7 +7327,7 @@ var SteammOmmV2Router = class {
|
|
|
7383
7327
|
txb.object(extendedDetails.steamm_oracle_registry_id),
|
|
7384
7328
|
txb.object(swapData.priceInfoObjectIdB),
|
|
7385
7329
|
txb.pure.u64(extendedDetails.steamm_oracle_index_b),
|
|
7386
|
-
txb.object(
|
|
7330
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7387
7331
|
]
|
|
7388
7332
|
});
|
|
7389
7333
|
const args = [
|
|
@@ -7396,7 +7340,7 @@ var SteammOmmV2Router = class {
|
|
|
7396
7340
|
oraclePriceUpdateB,
|
|
7397
7341
|
txb.pure.bool(swapData.direction),
|
|
7398
7342
|
txb.pure.u64(swapData.amountIn),
|
|
7399
|
-
txb.object(
|
|
7343
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7400
7344
|
];
|
|
7401
7345
|
txb.moveCall({
|
|
7402
7346
|
target: `${swapData.publishedAt}::steamm_omm_v2::swap`,
|
|
@@ -7500,7 +7444,7 @@ var MetastableRouter = class {
|
|
|
7500
7444
|
}
|
|
7501
7445
|
depositArgs.push(txb.object(priceId));
|
|
7502
7446
|
}
|
|
7503
|
-
depositArgs.push(txb.object(
|
|
7447
|
+
depositArgs.push(txb.object(SUI_CLOCK_OBJECT_ID));
|
|
7504
7448
|
break;
|
|
7505
7449
|
}
|
|
7506
7450
|
default:
|
|
@@ -7661,7 +7605,7 @@ var AfsuiRouter = class {
|
|
|
7661
7605
|
txb.object("0x5"),
|
|
7662
7606
|
// SuiSystemState
|
|
7663
7607
|
txb.object(this.referVault),
|
|
7664
|
-
txb.
|
|
7608
|
+
txb.pure.address(this.validator),
|
|
7665
7609
|
txb.pure.bool(swapData.direction),
|
|
7666
7610
|
txb.pure.u64(swapData.amountIn)
|
|
7667
7611
|
];
|
|
@@ -7751,7 +7695,7 @@ var HawalRouter = class {
|
|
|
7751
7695
|
swapContext,
|
|
7752
7696
|
txb.object(this.staking),
|
|
7753
7697
|
txb.object(swapData.poolId),
|
|
7754
|
-
txb.
|
|
7698
|
+
txb.pure.address(this.validator),
|
|
7755
7699
|
txb.pure.bool(swapData.direction),
|
|
7756
7700
|
txb.pure.u64(swapData.amountIn)
|
|
7757
7701
|
];
|
|
@@ -7871,6 +7815,221 @@ function transferOrDestroyCoin(params, txb) {
|
|
|
7871
7815
|
arguments: [coin]
|
|
7872
7816
|
});
|
|
7873
7817
|
}
|
|
7818
|
+
var MAX_ARGUMENT_SIZE = 16 * 1024;
|
|
7819
|
+
var PythAdapter = class {
|
|
7820
|
+
constructor(client, pythStateId, wormholeStateId, hermesUrls) {
|
|
7821
|
+
this.priceFeedObjectIdCache = /* @__PURE__ */ new Map();
|
|
7822
|
+
this.client = client;
|
|
7823
|
+
this.pythStateId = pythStateId;
|
|
7824
|
+
this.wormholeStateId = wormholeStateId;
|
|
7825
|
+
const urls = [...hermesUrls];
|
|
7826
|
+
if (!urls.includes("https://hermes.pyth.network")) {
|
|
7827
|
+
urls.push("https://hermes.pyth.network");
|
|
7828
|
+
}
|
|
7829
|
+
this.hermesClients = urls.map(
|
|
7830
|
+
(url) => new HermesClient(url, { timeout: 3e3 })
|
|
7831
|
+
);
|
|
7832
|
+
}
|
|
7833
|
+
async getPriceFeedsUpdateData(priceIDs) {
|
|
7834
|
+
let lastError = null;
|
|
7835
|
+
for (const hermes of this.hermesClients) {
|
|
7836
|
+
try {
|
|
7837
|
+
const response = await hermes.getLatestPriceUpdates(priceIDs, {
|
|
7838
|
+
encoding: "hex"
|
|
7839
|
+
});
|
|
7840
|
+
return response.binary.data.map((hex) => Buffer.from(hex, "hex"));
|
|
7841
|
+
} catch (e) {
|
|
7842
|
+
lastError = e;
|
|
7843
|
+
continue;
|
|
7844
|
+
}
|
|
7845
|
+
}
|
|
7846
|
+
throw new Error(
|
|
7847
|
+
`All Pyth Hermes endpoints are unavailable. Detailed error: ${lastError?.message}`
|
|
7848
|
+
);
|
|
7849
|
+
}
|
|
7850
|
+
async getBaseUpdateFee() {
|
|
7851
|
+
if (this.baseUpdateFee !== void 0) {
|
|
7852
|
+
return this.baseUpdateFee;
|
|
7853
|
+
}
|
|
7854
|
+
const res = await this.client.getObject({
|
|
7855
|
+
id: this.pythStateId,
|
|
7856
|
+
options: { showContent: true }
|
|
7857
|
+
});
|
|
7858
|
+
const content = res.data?.content;
|
|
7859
|
+
const json = content && "fields" in content ? content.fields : null;
|
|
7860
|
+
if (!json) {
|
|
7861
|
+
throw new Error("Unable to fetch pyth state object");
|
|
7862
|
+
}
|
|
7863
|
+
this.baseUpdateFee = Number(json.base_update_fee);
|
|
7864
|
+
return this.baseUpdateFee;
|
|
7865
|
+
}
|
|
7866
|
+
async getPackageId(objectId) {
|
|
7867
|
+
const res = await this.client.getObject({
|
|
7868
|
+
id: objectId,
|
|
7869
|
+
options: { showContent: true }
|
|
7870
|
+
});
|
|
7871
|
+
const content = res.data?.content;
|
|
7872
|
+
const json = content && "fields" in content ? content.fields : null;
|
|
7873
|
+
if (!json) {
|
|
7874
|
+
throw new Error(`Cannot fetch package id for object ${objectId}`);
|
|
7875
|
+
}
|
|
7876
|
+
if ("upgrade_cap" in json) {
|
|
7877
|
+
const upgradeCap = json.upgrade_cap;
|
|
7878
|
+
const packageId = upgradeCap?.fields?.package;
|
|
7879
|
+
if (typeof packageId === "string") {
|
|
7880
|
+
return packageId;
|
|
7881
|
+
}
|
|
7882
|
+
}
|
|
7883
|
+
throw new Error("upgrade_cap not found");
|
|
7884
|
+
}
|
|
7885
|
+
async getWormholePackageId() {
|
|
7886
|
+
if (!this.wormholePackageId) {
|
|
7887
|
+
this.wormholePackageId = await this.getPackageId(this.wormholeStateId);
|
|
7888
|
+
}
|
|
7889
|
+
return this.wormholePackageId;
|
|
7890
|
+
}
|
|
7891
|
+
async getPythPackageId() {
|
|
7892
|
+
if (!this.pythPackageId) {
|
|
7893
|
+
this.pythPackageId = await this.getPackageId(this.pythStateId);
|
|
7894
|
+
}
|
|
7895
|
+
return this.pythPackageId;
|
|
7896
|
+
}
|
|
7897
|
+
async getPriceFeedObjectId(feedId) {
|
|
7898
|
+
const normalizedFeedId = feedId.replace("0x", "");
|
|
7899
|
+
if (this.priceFeedObjectIdCache.has(normalizedFeedId)) {
|
|
7900
|
+
return this.priceFeedObjectIdCache.get(normalizedFeedId);
|
|
7901
|
+
}
|
|
7902
|
+
const { id: tableId, fieldType } = await this.getPriceTableInfo();
|
|
7903
|
+
const feedIdBytes = Buffer.from(normalizedFeedId, "hex");
|
|
7904
|
+
try {
|
|
7905
|
+
const result = await this.client.getDynamicFieldObject({
|
|
7906
|
+
parentId: tableId,
|
|
7907
|
+
name: {
|
|
7908
|
+
type: `${fieldType}::price_identifier::PriceIdentifier`,
|
|
7909
|
+
value: { bytes: Array.from(feedIdBytes) }
|
|
7910
|
+
}
|
|
7911
|
+
});
|
|
7912
|
+
const content = result.data?.content;
|
|
7913
|
+
const json = content && "fields" in content ? content.fields : null;
|
|
7914
|
+
const objectId = typeof json?.value === "string" ? json.value : void 0;
|
|
7915
|
+
if (!objectId) {
|
|
7916
|
+
return void 0;
|
|
7917
|
+
}
|
|
7918
|
+
this.priceFeedObjectIdCache.set(normalizedFeedId, objectId);
|
|
7919
|
+
return objectId;
|
|
7920
|
+
} catch {
|
|
7921
|
+
return void 0;
|
|
7922
|
+
}
|
|
7923
|
+
}
|
|
7924
|
+
async getPriceTableInfo() {
|
|
7925
|
+
if (this.priceTableInfo !== void 0) {
|
|
7926
|
+
return this.priceTableInfo;
|
|
7927
|
+
}
|
|
7928
|
+
const result = await this.client.getDynamicFieldObject({
|
|
7929
|
+
parentId: this.pythStateId,
|
|
7930
|
+
name: {
|
|
7931
|
+
type: "vector<u8>",
|
|
7932
|
+
value: "price_info"
|
|
7933
|
+
}
|
|
7934
|
+
});
|
|
7935
|
+
if (!result.data?.type) {
|
|
7936
|
+
throw new Error(
|
|
7937
|
+
"Price Table not found, contract may not be initialized"
|
|
7938
|
+
);
|
|
7939
|
+
}
|
|
7940
|
+
let type = result.data.type.replace("0x2::table::Table<", "");
|
|
7941
|
+
type = type.replace("::price_identifier::PriceIdentifier, 0x2::object::ID>", "");
|
|
7942
|
+
this.priceTableInfo = { id: result.data.objectId, fieldType: type };
|
|
7943
|
+
return this.priceTableInfo;
|
|
7944
|
+
}
|
|
7945
|
+
extractVaaBytesFromAccumulatorMessage(accumulatorMessage) {
|
|
7946
|
+
const trailingPayloadSize = accumulatorMessage.readUint8(6);
|
|
7947
|
+
const vaaSizeOffset = 7 + trailingPayloadSize + 1;
|
|
7948
|
+
const vaaSize = accumulatorMessage.readUint16BE(vaaSizeOffset);
|
|
7949
|
+
const vaaOffset = vaaSizeOffset + 2;
|
|
7950
|
+
return accumulatorMessage.subarray(vaaOffset, vaaOffset + vaaSize);
|
|
7951
|
+
}
|
|
7952
|
+
async verifyVaas(vaas, tx) {
|
|
7953
|
+
const wormholePackageId = await this.getWormholePackageId();
|
|
7954
|
+
const verifiedVaas = [];
|
|
7955
|
+
for (const vaa of vaas) {
|
|
7956
|
+
const [verifiedVaa] = tx.moveCall({
|
|
7957
|
+
target: `${wormholePackageId}::vaa::parse_and_verify`,
|
|
7958
|
+
arguments: [
|
|
7959
|
+
tx.object(this.wormholeStateId),
|
|
7960
|
+
tx.pure(
|
|
7961
|
+
bcs.vector(bcs.u8()).serialize(Array.from(vaa), { maxSize: MAX_ARGUMENT_SIZE }).toBytes()
|
|
7962
|
+
),
|
|
7963
|
+
tx.object(SUI_CLOCK_OBJECT_ID)
|
|
7964
|
+
]
|
|
7965
|
+
});
|
|
7966
|
+
verifiedVaas.push(verifiedVaa);
|
|
7967
|
+
}
|
|
7968
|
+
return verifiedVaas;
|
|
7969
|
+
}
|
|
7970
|
+
async verifyVaasAndGetHotPotato(tx, updates, packageId) {
|
|
7971
|
+
if (updates.length > 1) {
|
|
7972
|
+
throw new Error(
|
|
7973
|
+
"SDK does not support sending multiple accumulator messages in a single transaction"
|
|
7974
|
+
);
|
|
7975
|
+
}
|
|
7976
|
+
const vaa = this.extractVaaBytesFromAccumulatorMessage(updates[0]);
|
|
7977
|
+
const verifiedVaas = await this.verifyVaas([vaa], tx);
|
|
7978
|
+
const [priceUpdatesHotPotato] = tx.moveCall({
|
|
7979
|
+
target: `${packageId}::pyth::create_authenticated_price_infos_using_accumulator`,
|
|
7980
|
+
arguments: [
|
|
7981
|
+
tx.object(this.pythStateId),
|
|
7982
|
+
tx.pure(
|
|
7983
|
+
bcs.vector(bcs.u8()).serialize(Array.from(updates[0]), { maxSize: MAX_ARGUMENT_SIZE }).toBytes()
|
|
7984
|
+
),
|
|
7985
|
+
verifiedVaas[0],
|
|
7986
|
+
tx.object(SUI_CLOCK_OBJECT_ID)
|
|
7987
|
+
]
|
|
7988
|
+
});
|
|
7989
|
+
return priceUpdatesHotPotato;
|
|
7990
|
+
}
|
|
7991
|
+
async updatePriceFeeds(tx, updates, feedIds) {
|
|
7992
|
+
const packageId = await this.getPythPackageId();
|
|
7993
|
+
let priceUpdatesHotPotato = await this.verifyVaasAndGetHotPotato(
|
|
7994
|
+
tx,
|
|
7995
|
+
updates,
|
|
7996
|
+
packageId
|
|
7997
|
+
);
|
|
7998
|
+
const baseUpdateFee = await this.getBaseUpdateFee();
|
|
7999
|
+
const coins = tx.splitCoins(
|
|
8000
|
+
tx.gas,
|
|
8001
|
+
feedIds.map(() => tx.pure.u64(baseUpdateFee))
|
|
8002
|
+
);
|
|
8003
|
+
const priceInfoObjects = [];
|
|
8004
|
+
let coinId = 0;
|
|
8005
|
+
for (const feedId of feedIds) {
|
|
8006
|
+
const priceInfoObjectId = await this.getPriceFeedObjectId(feedId);
|
|
8007
|
+
if (!priceInfoObjectId) {
|
|
8008
|
+
throw new Error(
|
|
8009
|
+
`Price feed ${feedId} not found, please create it first`
|
|
8010
|
+
);
|
|
8011
|
+
}
|
|
8012
|
+
priceInfoObjects.push(priceInfoObjectId);
|
|
8013
|
+
[priceUpdatesHotPotato] = tx.moveCall({
|
|
8014
|
+
target: `${packageId}::pyth::update_single_price_feed`,
|
|
8015
|
+
arguments: [
|
|
8016
|
+
tx.object(this.pythStateId),
|
|
8017
|
+
priceUpdatesHotPotato,
|
|
8018
|
+
tx.object(priceInfoObjectId),
|
|
8019
|
+
coins[coinId],
|
|
8020
|
+
tx.object(SUI_CLOCK_OBJECT_ID)
|
|
8021
|
+
]
|
|
8022
|
+
});
|
|
8023
|
+
coinId++;
|
|
8024
|
+
}
|
|
8025
|
+
tx.moveCall({
|
|
8026
|
+
target: `${packageId}::hot_potato_vector::destroy`,
|
|
8027
|
+
arguments: [priceUpdatesHotPotato],
|
|
8028
|
+
typeArguments: [`${packageId}::price_info::PriceInfo`]
|
|
8029
|
+
});
|
|
8030
|
+
return priceInfoObjects;
|
|
8031
|
+
}
|
|
8032
|
+
};
|
|
7874
8033
|
|
|
7875
8034
|
// src/utils/uuid.ts
|
|
7876
8035
|
function generateDowngradeUuid6() {
|
|
@@ -7929,7 +8088,7 @@ function extractTimestampFromDowngradeUuid6(uuid) {
|
|
|
7929
8088
|
const timestampHex = timeHigh + timeMid;
|
|
7930
8089
|
const timestamp = parseInt(timestampHex, 16);
|
|
7931
8090
|
return isNaN(timestamp) ? null : timestamp;
|
|
7932
|
-
} catch
|
|
8091
|
+
} catch {
|
|
7933
8092
|
return null;
|
|
7934
8093
|
}
|
|
7935
8094
|
}
|
|
@@ -7945,72 +8104,60 @@ function processEndpoint(endpoint) {
|
|
|
7945
8104
|
}
|
|
7946
8105
|
|
|
7947
8106
|
// src/utils/account_cap.ts
|
|
7948
|
-
function getOrCreateAccountCap(txb, client, owner) {
|
|
7949
|
-
|
|
7950
|
-
|
|
7951
|
-
if (accountCapStr !== null) {
|
|
7952
|
-
return {
|
|
7953
|
-
accountCap: txb.object(accountCapStr),
|
|
7954
|
-
isCreate: false
|
|
7955
|
-
};
|
|
7956
|
-
}
|
|
7957
|
-
const accountCap = txb.moveCall({
|
|
7958
|
-
target: `${DEEPBOOK_PUBLISHED_AT}::${DEEPBOOK_CLOB_V2_MODULE}::create_account`,
|
|
7959
|
-
typeArguments: [],
|
|
7960
|
-
arguments: []
|
|
7961
|
-
});
|
|
8107
|
+
async function getOrCreateAccountCap(txb, client, owner) {
|
|
8108
|
+
let accountCapStr = await getAccountCap(client, owner);
|
|
8109
|
+
if (accountCapStr !== null) {
|
|
7962
8110
|
return {
|
|
7963
|
-
accountCap,
|
|
7964
|
-
isCreate:
|
|
8111
|
+
accountCap: txb.object(accountCapStr),
|
|
8112
|
+
isCreate: false
|
|
7965
8113
|
};
|
|
8114
|
+
}
|
|
8115
|
+
const accountCap = txb.moveCall({
|
|
8116
|
+
target: `${DEEPBOOK_PUBLISHED_AT}::${DEEPBOOK_CLOB_V2_MODULE}::create_account`,
|
|
8117
|
+
typeArguments: [],
|
|
8118
|
+
arguments: []
|
|
7966
8119
|
});
|
|
8120
|
+
return {
|
|
8121
|
+
accountCap,
|
|
8122
|
+
isCreate: true
|
|
8123
|
+
};
|
|
7967
8124
|
}
|
|
7968
|
-
function getAccountCap(client, owner) {
|
|
7969
|
-
|
|
7970
|
-
|
|
7971
|
-
|
|
7972
|
-
|
|
7973
|
-
|
|
7974
|
-
|
|
7975
|
-
|
|
7976
|
-
|
|
7977
|
-
|
|
7978
|
-
|
|
7979
|
-
|
|
7980
|
-
module: DEEPBOOK_CUSTODIAN_V2_MODULE
|
|
7981
|
-
}
|
|
7982
|
-
}
|
|
7983
|
-
});
|
|
7984
|
-
if (ownedObjects != null && ownedObjects.data != null) {
|
|
7985
|
-
if (ownedObjects.data.length !== 0) {
|
|
7986
|
-
return ownedObjects.data[0].data.objectId;
|
|
7987
|
-
}
|
|
7988
|
-
if (ownedObjects.data.length < 50) {
|
|
7989
|
-
break;
|
|
7990
|
-
}
|
|
7991
|
-
} else {
|
|
7992
|
-
break;
|
|
7993
|
-
}
|
|
8125
|
+
async function getAccountCap(client, owner) {
|
|
8126
|
+
const limit = 50;
|
|
8127
|
+
let cursor = void 0;
|
|
8128
|
+
while (true) {
|
|
8129
|
+
const ownedObjects = await client.getOwnedObjects({
|
|
8130
|
+
owner,
|
|
8131
|
+
cursor,
|
|
8132
|
+
limit,
|
|
8133
|
+
filter: { StructType: `${DEEPBOOK_PACKAGE_ID}::${DEEPBOOK_CUSTODIAN_V2_MODULE}::AccountCap` }
|
|
8134
|
+
});
|
|
8135
|
+
if (ownedObjects.data.length !== 0) {
|
|
8136
|
+
return ownedObjects.data[0].data?.objectId ?? null;
|
|
7994
8137
|
}
|
|
7995
|
-
|
|
7996
|
-
|
|
8138
|
+
if (!ownedObjects.hasNextPage) {
|
|
8139
|
+
break;
|
|
8140
|
+
}
|
|
8141
|
+
cursor = ownedObjects.nextCursor ?? void 0;
|
|
8142
|
+
}
|
|
8143
|
+
return null;
|
|
7997
8144
|
}
|
|
7998
8145
|
|
|
7999
8146
|
// src/utils/config.ts
|
|
8000
8147
|
function getAggregatorV2PublishedAt(publishedAt, packages) {
|
|
8001
|
-
if (packages
|
|
8148
|
+
if (packages?.has("aggregator_v2")) {
|
|
8002
8149
|
return packages.get("aggregator_v2");
|
|
8003
8150
|
}
|
|
8004
8151
|
return publishedAt || PUBLISHED_ADDRESSES.V2.Mainnet;
|
|
8005
8152
|
}
|
|
8006
8153
|
function getAggregatorV2ExtendPublishedAt(publishedAt, packages) {
|
|
8007
|
-
if (packages
|
|
8154
|
+
if (packages?.has("aggregator_v2_extend")) {
|
|
8008
8155
|
return packages.get("aggregator_v2_extend");
|
|
8009
8156
|
}
|
|
8010
8157
|
return publishedAt || PUBLISHED_ADDRESSES.V2_EXTEND.Mainnet;
|
|
8011
8158
|
}
|
|
8012
8159
|
function getAggregatorV2Extend2PublishedAt(publishedAt, packages) {
|
|
8013
|
-
if (packages
|
|
8160
|
+
if (packages?.has("aggregator_v2_extend2")) {
|
|
8014
8161
|
return packages.get("aggregator_v2_extend2");
|
|
8015
8162
|
}
|
|
8016
8163
|
return publishedAt || PUBLISHED_ADDRESSES.V2_EXTEND2.Mainnet;
|
|
@@ -8020,8 +8167,9 @@ function getAggregatorV2Extend2PublishedAt(publishedAt, packages) {
|
|
|
8020
8167
|
var import_bn4 = __toESM(require_bn());
|
|
8021
8168
|
function extractGasMetrics(result) {
|
|
8022
8169
|
const effects = result.effects;
|
|
8023
|
-
const
|
|
8024
|
-
if (!
|
|
8170
|
+
const isSuccess = !result.error && effects.status.status === "success";
|
|
8171
|
+
if (!isSuccess) {
|
|
8172
|
+
const errorMsg = result.error ?? effects.status.error ?? "Unknown error";
|
|
8025
8173
|
return {
|
|
8026
8174
|
computationCost: "0",
|
|
8027
8175
|
storageCost: "0",
|
|
@@ -8031,27 +8179,27 @@ function extractGasMetrics(result) {
|
|
|
8031
8179
|
gasUsed: "0",
|
|
8032
8180
|
gasPrice: "0",
|
|
8033
8181
|
success: false,
|
|
8034
|
-
error:
|
|
8182
|
+
error: errorMsg
|
|
8035
8183
|
};
|
|
8036
8184
|
}
|
|
8037
8185
|
const gasUsed = effects.gasUsed;
|
|
8038
8186
|
return {
|
|
8039
|
-
computationCost: gasUsed.computationCost
|
|
8040
|
-
storageCost: gasUsed.storageCost
|
|
8041
|
-
storageRebate: gasUsed.storageRebate
|
|
8042
|
-
nonRefundableStorageFee: gasUsed.nonRefundableStorageFee
|
|
8187
|
+
computationCost: gasUsed.computationCost,
|
|
8188
|
+
storageCost: gasUsed.storageCost,
|
|
8189
|
+
storageRebate: gasUsed.storageRebate,
|
|
8190
|
+
nonRefundableStorageFee: gasUsed.nonRefundableStorageFee,
|
|
8043
8191
|
totalGasCost: calculateTotalGasCost(gasUsed),
|
|
8044
|
-
gasUsed: gasUsed.computationCost
|
|
8192
|
+
gasUsed: gasUsed.computationCost,
|
|
8045
8193
|
gasPrice: "1000",
|
|
8046
8194
|
// Standard Sui gas price in MIST
|
|
8047
8195
|
success: true
|
|
8048
8196
|
};
|
|
8049
8197
|
}
|
|
8050
8198
|
function calculateTotalGasCost(gasUsed) {
|
|
8051
|
-
const computation = new import_bn4.default(gasUsed.computationCost
|
|
8052
|
-
const storage = new import_bn4.default(gasUsed.storageCost
|
|
8053
|
-
const rebate = new import_bn4.default(gasUsed.storageRebate
|
|
8054
|
-
const nonRefundable = new import_bn4.default(gasUsed.nonRefundableStorageFee
|
|
8199
|
+
const computation = new import_bn4.default(gasUsed.computationCost);
|
|
8200
|
+
const storage = new import_bn4.default(gasUsed.storageCost);
|
|
8201
|
+
const rebate = new import_bn4.default(gasUsed.storageRebate);
|
|
8202
|
+
const nonRefundable = new import_bn4.default(gasUsed.nonRefundableStorageFee);
|
|
8055
8203
|
return computation.add(storage).sub(rebate).add(nonRefundable).toString();
|
|
8056
8204
|
}
|
|
8057
8205
|
function calculateGasEfficiency(amountOut, totalGasCost) {
|
|
@@ -8093,12 +8241,12 @@ function calculateAverageGas(analyses) {
|
|
|
8093
8241
|
}
|
|
8094
8242
|
function formatGasMetrics(metrics, isEstimated) {
|
|
8095
8243
|
if (!metrics.success) {
|
|
8096
|
-
return
|
|
8244
|
+
return `Failed: ${metrics.error}`;
|
|
8097
8245
|
}
|
|
8098
8246
|
const totalGas = Number(metrics.totalGasCost);
|
|
8099
8247
|
const gasInSui = totalGas / 1e9;
|
|
8100
8248
|
const estimatedFlag = isEstimated ? " (estimated)" : "";
|
|
8101
|
-
return
|
|
8249
|
+
return `Gas: ${totalGas.toString()} MIST (${gasInSui.toString()} SUI)${estimatedFlag}`;
|
|
8102
8250
|
}
|
|
8103
8251
|
function exportToJSON(comparison) {
|
|
8104
8252
|
return JSON.stringify(comparison, null, 2);
|
|
@@ -8166,63 +8314,62 @@ function exportToCSV(comparison) {
|
|
|
8166
8314
|
// src/utils/msafe.ts
|
|
8167
8315
|
var import_bn5 = __toESM(require_bn());
|
|
8168
8316
|
var dealWithFastRouterSwapParamsForMsafe = (data) => {
|
|
8169
|
-
|
|
8170
|
-
|
|
8171
|
-
amountIn:
|
|
8172
|
-
amountOut:
|
|
8173
|
-
paths:
|
|
8174
|
-
|
|
8175
|
-
|
|
8176
|
-
amountIn:
|
|
8177
|
-
amountOut:
|
|
8178
|
-
}
|
|
8179
|
-
if (item
|
|
8180
|
-
info["initialPrice"] =
|
|
8181
|
-
}
|
|
8182
|
-
if (
|
|
8317
|
+
const result = {
|
|
8318
|
+
...data,
|
|
8319
|
+
amountIn: data?.amountIn?.toString(),
|
|
8320
|
+
amountOut: data?.amountIn?.toString(),
|
|
8321
|
+
paths: data?.paths?.map((item) => {
|
|
8322
|
+
const info = {
|
|
8323
|
+
...item,
|
|
8324
|
+
amountIn: item?.amountIn?.toString(),
|
|
8325
|
+
amountOut: item?.amountOut?.toString()
|
|
8326
|
+
};
|
|
8327
|
+
if (item?.initialPrice) {
|
|
8328
|
+
info["initialPrice"] = item?.initialPrice?.toString();
|
|
8329
|
+
}
|
|
8330
|
+
if (item?.extendedDetails?.after_sqrt_price) {
|
|
8183
8331
|
info["extendedDetails"] = {
|
|
8184
|
-
after_sqrt_price:
|
|
8332
|
+
after_sqrt_price: item?.extendedDetails?.afterSqrtPrice?.toString()
|
|
8185
8333
|
};
|
|
8186
8334
|
}
|
|
8187
8335
|
return info;
|
|
8188
8336
|
})
|
|
8189
|
-
}
|
|
8337
|
+
};
|
|
8190
8338
|
return result;
|
|
8191
8339
|
};
|
|
8192
8340
|
var restituteMsafeFastRouterSwapParams = (data) => {
|
|
8193
|
-
|
|
8194
|
-
|
|
8195
|
-
amountIn: new import_bn5.default(data
|
|
8196
|
-
amountOut: new import_bn5.default(data
|
|
8197
|
-
paths:
|
|
8198
|
-
|
|
8199
|
-
|
|
8200
|
-
|
|
8201
|
-
|
|
8202
|
-
|
|
8203
|
-
|
|
8341
|
+
const result = {
|
|
8342
|
+
...data,
|
|
8343
|
+
amountIn: new import_bn5.default(data?.amountIn),
|
|
8344
|
+
amountOut: new import_bn5.default(data?.amountIn),
|
|
8345
|
+
paths: data?.paths?.map((item) => {
|
|
8346
|
+
const info = {
|
|
8347
|
+
...item
|
|
8348
|
+
};
|
|
8349
|
+
if (item?.initialPrice) {
|
|
8350
|
+
info["initialPrice"] = new decimal_default(item?.initialPrice?.toString());
|
|
8351
|
+
}
|
|
8352
|
+
if (item?.extendedDetails?.after_sqrt_price) {
|
|
8204
8353
|
info["extendedDetails"] = {
|
|
8205
|
-
after_sqrt_price: new decimal_default(
|
|
8354
|
+
after_sqrt_price: new decimal_default(item?.extendedDetails?.after_sqrt_price?.toString())
|
|
8206
8355
|
};
|
|
8207
8356
|
}
|
|
8208
8357
|
return info;
|
|
8209
8358
|
})
|
|
8210
|
-
}
|
|
8359
|
+
};
|
|
8211
8360
|
return result;
|
|
8212
8361
|
};
|
|
8213
8362
|
|
|
8214
8363
|
// src/utils/transaction.ts
|
|
8215
|
-
function printTransaction(tx, isPrint = true) {
|
|
8216
|
-
|
|
8217
|
-
|
|
8218
|
-
|
|
8219
|
-
|
|
8220
|
-
|
|
8221
|
-
|
|
8222
|
-
|
|
8223
|
-
|
|
8224
|
-
}
|
|
8225
|
-
});
|
|
8364
|
+
async function printTransaction(tx, isPrint = true) {
|
|
8365
|
+
console.log(`inputs`, tx.getData().inputs);
|
|
8366
|
+
tx.getData().commands.forEach((item, index) => {
|
|
8367
|
+
if (isPrint) {
|
|
8368
|
+
console.log(
|
|
8369
|
+
`transaction ${index}: `,
|
|
8370
|
+
JSON.stringify(item, bigIntReplacer, 2)
|
|
8371
|
+
);
|
|
8372
|
+
}
|
|
8226
8373
|
});
|
|
8227
8374
|
}
|
|
8228
8375
|
function bigIntReplacer(key, value) {
|
|
@@ -8294,7 +8441,7 @@ var HaedalHMMV2Router = class {
|
|
|
8294
8441
|
// amount_in
|
|
8295
8442
|
txb.pure.bool(swapData.a2b),
|
|
8296
8443
|
// a2b
|
|
8297
|
-
txb.object(
|
|
8444
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8298
8445
|
// clock
|
|
8299
8446
|
];
|
|
8300
8447
|
txb.moveCall({
|
|
@@ -8344,7 +8491,7 @@ var FullsailRouter = class {
|
|
|
8344
8491
|
txb.object(swapData.poolId),
|
|
8345
8492
|
txb.pure.bool(swapData.direction),
|
|
8346
8493
|
txb.pure.u64(swapData.amountIn),
|
|
8347
|
-
txb.object(
|
|
8494
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8348
8495
|
];
|
|
8349
8496
|
txb.moveCall({
|
|
8350
8497
|
target: `${swapData.publishedAt}::fullsail::swap`,
|
|
@@ -8359,7 +8506,7 @@ var CetusDlmmRouter = class {
|
|
|
8359
8506
|
throw new Error("CetusRouter only supported on mainnet");
|
|
8360
8507
|
}
|
|
8361
8508
|
this.globalConfig = "0xf31b605d117f959b9730e8c07b08b856cb05143c5e81d5751c90d2979e82f599";
|
|
8362
|
-
this.partner = partner
|
|
8509
|
+
this.partner = partner ?? "0x59ae16f6c42f578063c2da9b9c0173fe58120ceae08e40fd8212c8eceb80bb86";
|
|
8363
8510
|
this.versioned = "0x05370b2d656612dd5759cbe80463de301e3b94a921dfc72dd9daa2ecdeb2d0a8";
|
|
8364
8511
|
}
|
|
8365
8512
|
swap(txb, flattenedPath, swapContext, _extends) {
|
|
@@ -8391,7 +8538,7 @@ var CetusDlmmRouter = class {
|
|
|
8391
8538
|
txb.pure.bool(swapData.direction),
|
|
8392
8539
|
txb.pure.u64(swapData.amountIn),
|
|
8393
8540
|
txb.object(this.versioned),
|
|
8394
|
-
txb.object(
|
|
8541
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8395
8542
|
];
|
|
8396
8543
|
txb.moveCall({
|
|
8397
8544
|
target: `${swapData.publishedAt}::cetus_dlmm::swap`,
|
|
@@ -8434,7 +8581,7 @@ var FerraDlmmRouter = class {
|
|
|
8434
8581
|
txb.object(swapData.poolId),
|
|
8435
8582
|
txb.pure.bool(swapData.direction),
|
|
8436
8583
|
txb.pure.u64(swapData.amountIn),
|
|
8437
|
-
txb.object(
|
|
8584
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8438
8585
|
];
|
|
8439
8586
|
txb.moveCall({
|
|
8440
8587
|
target: `${swapData.publishedAt}::ferra_dlmm::swap`,
|
|
@@ -8477,7 +8624,7 @@ var FerraClmmRouter = class {
|
|
|
8477
8624
|
txb.object(swapData.poolId),
|
|
8478
8625
|
txb.pure.bool(swapData.direction),
|
|
8479
8626
|
txb.pure.u64(swapData.amountIn),
|
|
8480
|
-
txb.object(
|
|
8627
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8481
8628
|
];
|
|
8482
8629
|
txb.moveCall({
|
|
8483
8630
|
target: `${swapData.publishedAt}::ferra_clmm::swap`,
|
|
@@ -8619,17 +8766,18 @@ function findPythPriceIDs(paths) {
|
|
|
8619
8766
|
}
|
|
8620
8767
|
var _AggregatorClient = class _AggregatorClient {
|
|
8621
8768
|
constructor(params) {
|
|
8622
|
-
var _a, _b;
|
|
8623
8769
|
this.endpoint = params.endpoint ? processEndpoint(params.endpoint) : DEFAULT_ENDPOINT;
|
|
8624
|
-
|
|
8770
|
+
const network = params.env === 1 /* Testnet */ ? "testnet" : "mainnet";
|
|
8771
|
+
const rpcUrl = params.env === 1 /* Testnet */ ? "https://fullnode.testnet.sui.io:443" : "https://fullnode.mainnet.sui.io:443";
|
|
8772
|
+
this.client = params.client ?? new SuiJsonRpcClient({ network, url: rpcUrl });
|
|
8625
8773
|
this.signer = params.signer || "";
|
|
8626
8774
|
this.env = params.env || 0 /* Mainnet */;
|
|
8627
8775
|
const config2 = _AggregatorClient.CONFIG[this.env];
|
|
8628
|
-
this.
|
|
8629
|
-
this.pythClient = new pythSuiJs.SuiPythClient(
|
|
8776
|
+
this.pythAdapter = new PythAdapter(
|
|
8630
8777
|
this.client,
|
|
8631
8778
|
config2.pythStateId,
|
|
8632
|
-
config2.wormholeStateId
|
|
8779
|
+
config2.wormholeStateId,
|
|
8780
|
+
params.pythUrls ?? []
|
|
8633
8781
|
);
|
|
8634
8782
|
this.apiKey = params.apiKey || "";
|
|
8635
8783
|
this.partner = params.partner;
|
|
@@ -8648,16 +8796,7 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
8648
8796
|
} else {
|
|
8649
8797
|
this.overlayFeeRate = 0;
|
|
8650
8798
|
}
|
|
8651
|
-
this.overlayFeeReceiver =
|
|
8652
|
-
}
|
|
8653
|
-
newPythClients(pythUrls) {
|
|
8654
|
-
if (!pythUrls.includes("https://hermes.pyth.network")) {
|
|
8655
|
-
pythUrls.push("https://hermes.pyth.network");
|
|
8656
|
-
}
|
|
8657
|
-
const connections = pythUrls.map(
|
|
8658
|
-
(url) => new pythSuiJs.SuiPriceServiceConnection(url, { timeout: 3e3 })
|
|
8659
|
-
);
|
|
8660
|
-
return connections;
|
|
8799
|
+
this.overlayFeeReceiver = params.overlayFeeReceiver ?? CLIENT_CONFIG.DEFAULT_OVERLAY_FEE_RECEIVER;
|
|
8661
8800
|
}
|
|
8662
8801
|
deepbookv3DeepFeeType() {
|
|
8663
8802
|
if (this.env === 0 /* Mainnet */) {
|
|
@@ -8666,53 +8805,43 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
8666
8805
|
return DEEPBOOK_V3_DEEP_FEE_TYPES.Testnet;
|
|
8667
8806
|
}
|
|
8668
8807
|
}
|
|
8669
|
-
getDeepbookV3Config() {
|
|
8670
|
-
return
|
|
8671
|
-
return yield getDeepbookV3Config(this.endpoint);
|
|
8672
|
-
});
|
|
8808
|
+
async getDeepbookV3Config() {
|
|
8809
|
+
return await getDeepbookV3Config(this.endpoint);
|
|
8673
8810
|
}
|
|
8674
|
-
getOneCoinUsedToMerge(coinType) {
|
|
8675
|
-
|
|
8676
|
-
|
|
8677
|
-
|
|
8678
|
-
|
|
8679
|
-
|
|
8680
|
-
|
|
8681
|
-
|
|
8682
|
-
|
|
8683
|
-
return gotCoin.data[0].coinObjectId;
|
|
8684
|
-
}
|
|
8685
|
-
return null;
|
|
8686
|
-
} catch (error) {
|
|
8687
|
-
return null;
|
|
8811
|
+
async getOneCoinUsedToMerge(coinType) {
|
|
8812
|
+
try {
|
|
8813
|
+
const gotCoin = await this.client.getCoins({
|
|
8814
|
+
owner: this.signer,
|
|
8815
|
+
coinType,
|
|
8816
|
+
limit: 1
|
|
8817
|
+
});
|
|
8818
|
+
if (gotCoin.data.length === 1) {
|
|
8819
|
+
return gotCoin.data[0].coinObjectId;
|
|
8688
8820
|
}
|
|
8689
|
-
|
|
8821
|
+
return null;
|
|
8822
|
+
} catch (error) {
|
|
8823
|
+
return null;
|
|
8824
|
+
}
|
|
8690
8825
|
}
|
|
8691
|
-
findRouters(params) {
|
|
8692
|
-
return
|
|
8693
|
-
|
|
8694
|
-
|
|
8695
|
-
|
|
8696
|
-
|
|
8697
|
-
|
|
8698
|
-
|
|
8699
|
-
);
|
|
8700
|
-
});
|
|
8826
|
+
async findRouters(params) {
|
|
8827
|
+
return getRouterResult(
|
|
8828
|
+
this.endpoint,
|
|
8829
|
+
this.apiKey,
|
|
8830
|
+
params,
|
|
8831
|
+
this.overlayFeeRate,
|
|
8832
|
+
this.overlayFeeReceiver
|
|
8833
|
+
);
|
|
8701
8834
|
}
|
|
8702
|
-
findMergeSwapRouters(params) {
|
|
8703
|
-
return
|
|
8704
|
-
|
|
8705
|
-
|
|
8706
|
-
|
|
8707
|
-
|
|
8708
|
-
|
|
8709
|
-
|
|
8710
|
-
);
|
|
8711
|
-
});
|
|
8835
|
+
async findMergeSwapRouters(params) {
|
|
8836
|
+
return getMergeSwapResult(
|
|
8837
|
+
this.endpoint,
|
|
8838
|
+
this.apiKey,
|
|
8839
|
+
params,
|
|
8840
|
+
this.overlayFeeRate,
|
|
8841
|
+
this.overlayFeeReceiver
|
|
8842
|
+
);
|
|
8712
8843
|
}
|
|
8713
|
-
executeFlexibleInputSwap(txb, inputCoin, routerData, expectedAmountOut, amountLimit, pythPriceIDs, partner, deepbookv3DeepFee, packages) {
|
|
8714
|
-
return __async(this, null, function* () {
|
|
8715
|
-
});
|
|
8844
|
+
async executeFlexibleInputSwap(txb, inputCoin, routerData, expectedAmountOut, amountLimit, pythPriceIDs, partner, deepbookv3DeepFee, packages) {
|
|
8716
8845
|
}
|
|
8717
8846
|
newDexRouterV3(provider, pythPriceIDs, partner, cetusDlmmPartner) {
|
|
8718
8847
|
switch (provider) {
|
|
@@ -9098,55 +9227,53 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9098
9227
|
);
|
|
9099
9228
|
return outputCoin;
|
|
9100
9229
|
}
|
|
9101
|
-
routerSwap(params) {
|
|
9102
|
-
|
|
9103
|
-
|
|
9104
|
-
|
|
9105
|
-
|
|
9106
|
-
|
|
9107
|
-
|
|
9108
|
-
|
|
9109
|
-
|
|
9110
|
-
|
|
9111
|
-
|
|
9112
|
-
|
|
9113
|
-
|
|
9114
|
-
|
|
9115
|
-
|
|
9116
|
-
|
|
9117
|
-
|
|
9118
|
-
|
|
9119
|
-
|
|
9120
|
-
|
|
9121
|
-
|
|
9122
|
-
|
|
9123
|
-
|
|
9124
|
-
|
|
9125
|
-
|
|
9230
|
+
async routerSwap(params) {
|
|
9231
|
+
const { router, inputCoin, slippage, txb, partner } = params;
|
|
9232
|
+
if (slippage > 1 || slippage < 0) {
|
|
9233
|
+
throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
|
|
9234
|
+
}
|
|
9235
|
+
if (!params.router.packages || !params.router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
|
|
9236
|
+
throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
|
|
9237
|
+
}
|
|
9238
|
+
const byAmountIn = params.router.byAmountIn;
|
|
9239
|
+
const amountIn = router.amountIn;
|
|
9240
|
+
const amountOut = router.amountOut;
|
|
9241
|
+
checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
|
|
9242
|
+
let overlayFee = new import_bn6.default(0);
|
|
9243
|
+
if (byAmountIn) {
|
|
9244
|
+
overlayFee = amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
|
|
9245
|
+
} else {
|
|
9246
|
+
overlayFee = amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
|
|
9247
|
+
}
|
|
9248
|
+
const expectedAmountOut = byAmountIn ? amountOut.sub(overlayFee) : amountOut;
|
|
9249
|
+
const expectedAmountIn = byAmountIn ? amountIn : amountIn.add(overlayFee);
|
|
9250
|
+
const amountLimit = CalculateAmountLimitBN(
|
|
9251
|
+
byAmountIn ? expectedAmountOut : expectedAmountIn,
|
|
9252
|
+
byAmountIn,
|
|
9253
|
+
slippage
|
|
9254
|
+
);
|
|
9255
|
+
const priceIDs = findPythPriceIDs(router.paths);
|
|
9256
|
+
const priceInfoObjectIds = priceIDs.length > 0 ? await this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
|
|
9257
|
+
if (byAmountIn) {
|
|
9258
|
+
return this.expectInputSwapV3(
|
|
9259
|
+
txb,
|
|
9260
|
+
inputCoin,
|
|
9261
|
+
router,
|
|
9262
|
+
amountOut.toString(),
|
|
9263
|
+
amountLimit.toString(),
|
|
9264
|
+
priceInfoObjectIds,
|
|
9265
|
+
partner ?? this.partner
|
|
9126
9266
|
);
|
|
9127
|
-
|
|
9128
|
-
|
|
9129
|
-
|
|
9130
|
-
|
|
9131
|
-
|
|
9132
|
-
|
|
9133
|
-
|
|
9134
|
-
|
|
9135
|
-
|
|
9136
|
-
|
|
9137
|
-
partner != null ? partner : this.partner
|
|
9138
|
-
);
|
|
9139
|
-
} else {
|
|
9140
|
-
return this.expectOutputSwapV3(
|
|
9141
|
-
txb,
|
|
9142
|
-
inputCoin,
|
|
9143
|
-
router,
|
|
9144
|
-
amountOut.toString(),
|
|
9145
|
-
amountLimit.toString(),
|
|
9146
|
-
partner != null ? partner : this.partner
|
|
9147
|
-
);
|
|
9148
|
-
}
|
|
9149
|
-
});
|
|
9267
|
+
} else {
|
|
9268
|
+
return this.expectOutputSwapV3(
|
|
9269
|
+
txb,
|
|
9270
|
+
inputCoin,
|
|
9271
|
+
router,
|
|
9272
|
+
amountOut.toString(),
|
|
9273
|
+
amountLimit.toString(),
|
|
9274
|
+
partner ?? this.partner
|
|
9275
|
+
);
|
|
9276
|
+
}
|
|
9150
9277
|
}
|
|
9151
9278
|
/**
|
|
9152
9279
|
* Router swap with max amount in validation.
|
|
@@ -9157,434 +9284,402 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9157
9284
|
* @returns TransactionObjectArgument - The output coin from the swap
|
|
9158
9285
|
* @throws Error if input coin amount exceeds maxAmountIn
|
|
9159
9286
|
*/
|
|
9160
|
-
routerSwapWithMaxAmountIn(params) {
|
|
9161
|
-
|
|
9162
|
-
|
|
9163
|
-
|
|
9164
|
-
|
|
9165
|
-
|
|
9166
|
-
|
|
9167
|
-
|
|
9168
|
-
|
|
9169
|
-
|
|
9170
|
-
|
|
9171
|
-
|
|
9172
|
-
|
|
9173
|
-
|
|
9174
|
-
|
|
9175
|
-
|
|
9176
|
-
|
|
9177
|
-
|
|
9178
|
-
|
|
9179
|
-
|
|
9180
|
-
|
|
9181
|
-
|
|
9182
|
-
|
|
9183
|
-
|
|
9184
|
-
|
|
9287
|
+
async routerSwapWithMaxAmountIn(params) {
|
|
9288
|
+
const { router, inputCoin, slippage, txb, partner, maxAmountIn } = params;
|
|
9289
|
+
if (slippage > 1 || slippage < 0) {
|
|
9290
|
+
throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
|
|
9291
|
+
}
|
|
9292
|
+
if (!params.router.packages || !params.router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
|
|
9293
|
+
throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
|
|
9294
|
+
}
|
|
9295
|
+
const byAmountIn = params.router.byAmountIn;
|
|
9296
|
+
const amountIn = router.amountIn;
|
|
9297
|
+
const amountOut = router.amountOut;
|
|
9298
|
+
checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
|
|
9299
|
+
let overlayFee = new import_bn6.default(0);
|
|
9300
|
+
if (byAmountIn) {
|
|
9301
|
+
overlayFee = amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
|
|
9302
|
+
} else {
|
|
9303
|
+
overlayFee = amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6));
|
|
9304
|
+
}
|
|
9305
|
+
const expectedAmountOut = byAmountIn ? amountOut.sub(overlayFee) : amountOut;
|
|
9306
|
+
const expectedAmountIn = byAmountIn ? amountIn : amountIn.add(overlayFee);
|
|
9307
|
+
const amountLimit = CalculateAmountLimitBN(
|
|
9308
|
+
byAmountIn ? expectedAmountOut : expectedAmountIn,
|
|
9309
|
+
byAmountIn,
|
|
9310
|
+
slippage
|
|
9311
|
+
);
|
|
9312
|
+
const priceIDs = findPythPriceIDs(router.paths);
|
|
9313
|
+
const priceInfoObjectIds = priceIDs.length > 0 ? await this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
|
|
9314
|
+
if (byAmountIn) {
|
|
9315
|
+
return this.expectInputSwapV3WithMaxAmountIn(
|
|
9316
|
+
txb,
|
|
9317
|
+
inputCoin,
|
|
9318
|
+
router,
|
|
9319
|
+
maxAmountIn,
|
|
9320
|
+
amountOut.toString(),
|
|
9321
|
+
amountLimit.toString(),
|
|
9322
|
+
priceInfoObjectIds,
|
|
9323
|
+
partner ?? this.partner
|
|
9185
9324
|
);
|
|
9186
|
-
|
|
9187
|
-
|
|
9188
|
-
|
|
9189
|
-
|
|
9190
|
-
|
|
9191
|
-
|
|
9192
|
-
|
|
9193
|
-
|
|
9194
|
-
|
|
9195
|
-
|
|
9196
|
-
|
|
9197
|
-
partner != null ? partner : this.partner
|
|
9198
|
-
);
|
|
9199
|
-
} else {
|
|
9200
|
-
return this.expectOutputSwapV3WithMaxAmountIn(
|
|
9201
|
-
txb,
|
|
9202
|
-
inputCoin,
|
|
9203
|
-
router,
|
|
9204
|
-
maxAmountIn,
|
|
9205
|
-
amountOut.toString(),
|
|
9206
|
-
amountLimit.toString(),
|
|
9207
|
-
partner != null ? partner : this.partner
|
|
9208
|
-
);
|
|
9209
|
-
}
|
|
9210
|
-
});
|
|
9325
|
+
} else {
|
|
9326
|
+
return this.expectOutputSwapV3WithMaxAmountIn(
|
|
9327
|
+
txb,
|
|
9328
|
+
inputCoin,
|
|
9329
|
+
router,
|
|
9330
|
+
maxAmountIn,
|
|
9331
|
+
amountOut.toString(),
|
|
9332
|
+
amountLimit.toString(),
|
|
9333
|
+
partner ?? this.partner
|
|
9334
|
+
);
|
|
9335
|
+
}
|
|
9211
9336
|
}
|
|
9212
9337
|
// auto build input coin
|
|
9213
9338
|
// auto merge, transfer or destory target coin.
|
|
9214
|
-
fastRouterSwap(params) {
|
|
9215
|
-
|
|
9216
|
-
|
|
9217
|
-
|
|
9218
|
-
|
|
9219
|
-
|
|
9220
|
-
|
|
9221
|
-
|
|
9222
|
-
|
|
9223
|
-
|
|
9224
|
-
|
|
9225
|
-
|
|
9226
|
-
|
|
9227
|
-
|
|
9228
|
-
router.amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
|
|
9229
|
-
);
|
|
9230
|
-
}
|
|
9231
|
-
const expectedAmountOut = byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
|
|
9232
|
-
const expectedAmountIn = byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
|
|
9233
|
-
const amountLimit = CalculateAmountLimit(
|
|
9234
|
-
byAmountIn ? expectedAmountOut : expectedAmountIn,
|
|
9235
|
-
byAmountIn,
|
|
9236
|
-
slippage
|
|
9339
|
+
async fastRouterSwap(params) {
|
|
9340
|
+
const { router, slippage, txb, partner, payDeepFeeAmount } = params;
|
|
9341
|
+
const fromCoinType = router.paths[0].from;
|
|
9342
|
+
const targetCoinType = router.paths[router.paths.length - 1].target;
|
|
9343
|
+
const byAmountIn = router.byAmountIn;
|
|
9344
|
+
checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
|
|
9345
|
+
let overlayFee = 0;
|
|
9346
|
+
if (byAmountIn) {
|
|
9347
|
+
overlayFee = Number(
|
|
9348
|
+
router.amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
|
|
9349
|
+
);
|
|
9350
|
+
} else {
|
|
9351
|
+
overlayFee = Number(
|
|
9352
|
+
router.amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
|
|
9237
9353
|
);
|
|
9238
|
-
|
|
9239
|
-
|
|
9240
|
-
|
|
9241
|
-
|
|
9242
|
-
|
|
9354
|
+
}
|
|
9355
|
+
const expectedAmountOut = byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
|
|
9356
|
+
const expectedAmountIn = byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
|
|
9357
|
+
const amountLimit = CalculateAmountLimit(
|
|
9358
|
+
byAmountIn ? expectedAmountOut : expectedAmountIn,
|
|
9359
|
+
byAmountIn,
|
|
9360
|
+
slippage
|
|
9361
|
+
);
|
|
9362
|
+
const amount = byAmountIn ? expectedAmountIn : amountLimit;
|
|
9363
|
+
let inputCoin = coinWithBalance({
|
|
9364
|
+
balance: BigInt(amount.toString()),
|
|
9365
|
+
useGasCoin: true,
|
|
9366
|
+
type: fromCoinType
|
|
9367
|
+
});
|
|
9368
|
+
let deepCoin;
|
|
9369
|
+
if (payDeepFeeAmount && payDeepFeeAmount > 0) {
|
|
9370
|
+
deepCoin = coinWithBalance({
|
|
9371
|
+
balance: BigInt(payDeepFeeAmount),
|
|
9372
|
+
type: this.deepbookv3DeepFeeType()
|
|
9243
9373
|
});
|
|
9244
|
-
|
|
9245
|
-
|
|
9246
|
-
|
|
9247
|
-
|
|
9248
|
-
|
|
9249
|
-
|
|
9250
|
-
|
|
9251
|
-
|
|
9252
|
-
|
|
9253
|
-
|
|
9254
|
-
|
|
9255
|
-
|
|
9256
|
-
|
|
9257
|
-
|
|
9258
|
-
|
|
9259
|
-
|
|
9260
|
-
if (CoinUtils.isSuiCoin(targetCoinType)) {
|
|
9261
|
-
txb.mergeCoins(txb.gas, [targetCoin]);
|
|
9374
|
+
}
|
|
9375
|
+
const routerSwapParams = {
|
|
9376
|
+
router,
|
|
9377
|
+
inputCoin,
|
|
9378
|
+
slippage,
|
|
9379
|
+
txb,
|
|
9380
|
+
partner: partner ?? this.partner,
|
|
9381
|
+
deepbookv3DeepFee: deepCoin
|
|
9382
|
+
};
|
|
9383
|
+
const targetCoin = await this.routerSwap(routerSwapParams);
|
|
9384
|
+
if (CoinUtils.isSuiCoin(targetCoinType)) {
|
|
9385
|
+
txb.mergeCoins(txb.gas, [targetCoin]);
|
|
9386
|
+
} else {
|
|
9387
|
+
const targetCoinObjID = await this.getOneCoinUsedToMerge(targetCoinType);
|
|
9388
|
+
if (targetCoinObjID != null) {
|
|
9389
|
+
txb.mergeCoins(txb.object(targetCoinObjID), [targetCoin]);
|
|
9262
9390
|
} else {
|
|
9263
|
-
|
|
9264
|
-
|
|
9265
|
-
|
|
9266
|
-
|
|
9267
|
-
|
|
9268
|
-
|
|
9269
|
-
|
|
9270
|
-
|
|
9271
|
-
packages: router.packages
|
|
9272
|
-
},
|
|
9273
|
-
txb
|
|
9274
|
-
);
|
|
9275
|
-
}
|
|
9276
|
-
}
|
|
9277
|
-
});
|
|
9278
|
-
}
|
|
9279
|
-
mergeSwap(params) {
|
|
9280
|
-
return __async(this, null, function* () {
|
|
9281
|
-
const { router, inputCoins, slippage, txb, partner } = params;
|
|
9282
|
-
if (slippage > 1 || slippage < 0) {
|
|
9283
|
-
throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
|
|
9284
|
-
}
|
|
9285
|
-
if (!router.packages || !router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
|
|
9286
|
-
throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
|
|
9287
|
-
}
|
|
9288
|
-
if (!router.allRoutes || router.allRoutes.length === 0) {
|
|
9289
|
-
throw new Error("No routes found in merge swap response");
|
|
9290
|
-
}
|
|
9291
|
-
const outputCoins = [];
|
|
9292
|
-
for (let i = 0; i < router.allRoutes.length && i < inputCoins.length; i++) {
|
|
9293
|
-
const route = router.allRoutes[i];
|
|
9294
|
-
const inputCoin = inputCoins[i];
|
|
9295
|
-
const routeRouter = {
|
|
9296
|
-
quoteID: router.quoteID,
|
|
9297
|
-
amountIn: route.amountIn,
|
|
9298
|
-
amountOut: route.amountOut,
|
|
9299
|
-
deviationRatio: Number(route.deviationRatio),
|
|
9300
|
-
byAmountIn: true,
|
|
9301
|
-
// Merge swap is always by amount in
|
|
9302
|
-
paths: route.paths,
|
|
9303
|
-
insufficientLiquidity: false,
|
|
9304
|
-
packages: router.packages
|
|
9305
|
-
};
|
|
9306
|
-
const routerParams = {
|
|
9307
|
-
router: routeRouter,
|
|
9308
|
-
inputCoin: inputCoin.coin,
|
|
9309
|
-
slippage,
|
|
9310
|
-
txb,
|
|
9311
|
-
partner: partner != null ? partner : this.partner
|
|
9312
|
-
};
|
|
9313
|
-
const outputCoin = yield this.routerSwap(routerParams);
|
|
9314
|
-
outputCoins.push(outputCoin);
|
|
9315
|
-
}
|
|
9316
|
-
if (outputCoins.length === 0) {
|
|
9317
|
-
throw new Error("No output coins generated from merge swap");
|
|
9318
|
-
}
|
|
9319
|
-
let finalOutputCoin = outputCoins[0];
|
|
9320
|
-
if (outputCoins.length > 1) {
|
|
9321
|
-
txb.mergeCoins(finalOutputCoin, outputCoins.slice(1));
|
|
9391
|
+
transferOrDestroyCoin(
|
|
9392
|
+
{
|
|
9393
|
+
coin: targetCoin,
|
|
9394
|
+
coinType: targetCoinType,
|
|
9395
|
+
packages: router.packages
|
|
9396
|
+
},
|
|
9397
|
+
txb
|
|
9398
|
+
);
|
|
9322
9399
|
}
|
|
9323
|
-
|
|
9324
|
-
});
|
|
9400
|
+
}
|
|
9325
9401
|
}
|
|
9326
|
-
|
|
9327
|
-
|
|
9328
|
-
|
|
9329
|
-
|
|
9330
|
-
|
|
9331
|
-
|
|
9332
|
-
|
|
9333
|
-
|
|
9334
|
-
|
|
9335
|
-
|
|
9336
|
-
|
|
9337
|
-
|
|
9338
|
-
|
|
9339
|
-
|
|
9340
|
-
|
|
9341
|
-
|
|
9342
|
-
|
|
9343
|
-
|
|
9344
|
-
|
|
9345
|
-
|
|
9346
|
-
|
|
9347
|
-
|
|
9348
|
-
|
|
9349
|
-
|
|
9350
|
-
router
|
|
9351
|
-
|
|
9402
|
+
async mergeSwap(params) {
|
|
9403
|
+
const { router, inputCoins, slippage, txb, partner } = params;
|
|
9404
|
+
if (slippage > 1 || slippage < 0) {
|
|
9405
|
+
throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
|
|
9406
|
+
}
|
|
9407
|
+
if (!router.packages || !router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
|
|
9408
|
+
throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
|
|
9409
|
+
}
|
|
9410
|
+
if (!router.allRoutes || router.allRoutes.length === 0) {
|
|
9411
|
+
throw new Error("No routes found in merge swap response");
|
|
9412
|
+
}
|
|
9413
|
+
const outputCoins = [];
|
|
9414
|
+
for (let i = 0; i < router.allRoutes.length && i < inputCoins.length; i++) {
|
|
9415
|
+
const route = router.allRoutes[i];
|
|
9416
|
+
const inputCoin = inputCoins[i];
|
|
9417
|
+
const routeRouter = {
|
|
9418
|
+
quoteID: router.quoteID,
|
|
9419
|
+
amountIn: route.amountIn,
|
|
9420
|
+
amountOut: route.amountOut,
|
|
9421
|
+
deviationRatio: Number(route.deviationRatio),
|
|
9422
|
+
byAmountIn: true,
|
|
9423
|
+
// Merge swap is always by amount in
|
|
9424
|
+
paths: route.paths,
|
|
9425
|
+
insufficientLiquidity: false,
|
|
9426
|
+
packages: router.packages
|
|
9427
|
+
};
|
|
9428
|
+
const routerParams = {
|
|
9429
|
+
router: routeRouter,
|
|
9430
|
+
inputCoin: inputCoin.coin,
|
|
9352
9431
|
slippage,
|
|
9353
9432
|
txb,
|
|
9354
|
-
partner: partner
|
|
9355
|
-
};
|
|
9356
|
-
const
|
|
9357
|
-
|
|
9358
|
-
|
|
9359
|
-
|
|
9360
|
-
|
|
9361
|
-
|
|
9362
|
-
|
|
9363
|
-
|
|
9364
|
-
|
|
9365
|
-
|
|
9366
|
-
|
|
9367
|
-
|
|
9368
|
-
|
|
9369
|
-
|
|
9370
|
-
|
|
9371
|
-
|
|
9372
|
-
|
|
9373
|
-
|
|
9374
|
-
|
|
9375
|
-
|
|
9376
|
-
|
|
9377
|
-
|
|
9378
|
-
const
|
|
9379
|
-
|
|
9380
|
-
|
|
9381
|
-
|
|
9382
|
-
|
|
9383
|
-
|
|
9384
|
-
)
|
|
9433
|
+
partner: partner ?? this.partner
|
|
9434
|
+
};
|
|
9435
|
+
const outputCoin = await this.routerSwap(routerParams);
|
|
9436
|
+
outputCoins.push(outputCoin);
|
|
9437
|
+
}
|
|
9438
|
+
if (outputCoins.length === 0) {
|
|
9439
|
+
throw new Error("No output coins generated from merge swap");
|
|
9440
|
+
}
|
|
9441
|
+
let finalOutputCoin = outputCoins[0];
|
|
9442
|
+
if (outputCoins.length > 1) {
|
|
9443
|
+
txb.mergeCoins(finalOutputCoin, outputCoins.slice(1));
|
|
9444
|
+
}
|
|
9445
|
+
return finalOutputCoin;
|
|
9446
|
+
}
|
|
9447
|
+
async fastMergeSwap(params) {
|
|
9448
|
+
const { router, slippage, txb, partner } = params;
|
|
9449
|
+
if (!router || !router.allRoutes || router.allRoutes.length === 0) {
|
|
9450
|
+
throw new Error("Invalid router: no routes found");
|
|
9451
|
+
}
|
|
9452
|
+
const firstRoute = router.allRoutes[0];
|
|
9453
|
+
const targetCoinType = firstRoute.paths[firstRoute.paths.length - 1].target;
|
|
9454
|
+
const inputCoins = [];
|
|
9455
|
+
const coinTypeSet = /* @__PURE__ */ new Set();
|
|
9456
|
+
for (const route of router.allRoutes) {
|
|
9457
|
+
const firstCoinType = route.paths[0].from;
|
|
9458
|
+
if (coinTypeSet.has(firstCoinType)) {
|
|
9459
|
+
continue;
|
|
9460
|
+
}
|
|
9461
|
+
coinTypeSet.add(firstCoinType);
|
|
9462
|
+
const coin = coinWithBalance({
|
|
9463
|
+
balance: BigInt(route.amountIn.toString()),
|
|
9464
|
+
useGasCoin: CoinUtils.isSuiCoin(firstCoinType),
|
|
9465
|
+
type: firstCoinType
|
|
9466
|
+
});
|
|
9467
|
+
inputCoins.push({ coinType: firstCoinType, coin });
|
|
9468
|
+
}
|
|
9469
|
+
const mergeSwapParams = {
|
|
9470
|
+
router,
|
|
9471
|
+
inputCoins,
|
|
9472
|
+
slippage,
|
|
9473
|
+
txb,
|
|
9474
|
+
partner: partner ?? this.partner
|
|
9475
|
+
};
|
|
9476
|
+
const targetCoin = await this.mergeSwap(mergeSwapParams);
|
|
9477
|
+
if (CoinUtils.isSuiCoin(targetCoinType)) {
|
|
9478
|
+
txb.mergeCoins(txb.gas, [targetCoin]);
|
|
9479
|
+
} else {
|
|
9480
|
+
const targetCoinObjID = await this.getOneCoinUsedToMerge(targetCoinType);
|
|
9481
|
+
if (targetCoinObjID != null) {
|
|
9482
|
+
txb.mergeCoins(txb.object(targetCoinObjID), [targetCoin]);
|
|
9385
9483
|
} else {
|
|
9386
|
-
|
|
9387
|
-
|
|
9484
|
+
transferOrDestroyCoin(
|
|
9485
|
+
{
|
|
9486
|
+
coin: targetCoin,
|
|
9487
|
+
coinType: targetCoinType,
|
|
9488
|
+
packages: router.packages
|
|
9489
|
+
},
|
|
9490
|
+
txb
|
|
9388
9491
|
);
|
|
9389
9492
|
}
|
|
9390
|
-
|
|
9391
|
-
|
|
9392
|
-
|
|
9393
|
-
|
|
9394
|
-
|
|
9395
|
-
|
|
9493
|
+
}
|
|
9494
|
+
}
|
|
9495
|
+
async fixableRouterSwapV3(params) {
|
|
9496
|
+
const { router, inputCoin, slippage, txb, partner } = params;
|
|
9497
|
+
checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
|
|
9498
|
+
let overlayFee = 0;
|
|
9499
|
+
if (router.byAmountIn) {
|
|
9500
|
+
overlayFee = Number(
|
|
9501
|
+
router.amountOut.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
|
|
9396
9502
|
);
|
|
9397
|
-
|
|
9398
|
-
|
|
9399
|
-
|
|
9400
|
-
|
|
9401
|
-
|
|
9402
|
-
|
|
9403
|
-
|
|
9404
|
-
|
|
9405
|
-
|
|
9406
|
-
|
|
9407
|
-
|
|
9408
|
-
|
|
9409
|
-
|
|
9410
|
-
|
|
9411
|
-
|
|
9412
|
-
|
|
9413
|
-
|
|
9414
|
-
|
|
9415
|
-
|
|
9416
|
-
|
|
9417
|
-
)
|
|
9418
|
-
|
|
9419
|
-
|
|
9503
|
+
} else {
|
|
9504
|
+
overlayFee = Number(
|
|
9505
|
+
router.amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
|
|
9506
|
+
);
|
|
9507
|
+
}
|
|
9508
|
+
const expectedAmountOut = router.byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
|
|
9509
|
+
const expectedAmountIn = router.byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
|
|
9510
|
+
const amountLimit = CalculateAmountLimitBN(
|
|
9511
|
+
router.byAmountIn ? expectedAmountOut : expectedAmountIn,
|
|
9512
|
+
router.byAmountIn,
|
|
9513
|
+
slippage
|
|
9514
|
+
);
|
|
9515
|
+
const priceIDs = findPythPriceIDs(router.paths);
|
|
9516
|
+
const priceInfoObjectIds = priceIDs.length > 0 ? await this.updatePythPriceIDs(priceIDs, txb) : /* @__PURE__ */ new Map();
|
|
9517
|
+
if (router.byAmountIn) {
|
|
9518
|
+
return this.expectInputSwapV3(
|
|
9519
|
+
txb,
|
|
9520
|
+
inputCoin,
|
|
9521
|
+
router,
|
|
9522
|
+
expectedAmountOut.toString(),
|
|
9523
|
+
amountLimit.toString(),
|
|
9524
|
+
priceInfoObjectIds,
|
|
9525
|
+
partner ?? this.partner
|
|
9526
|
+
);
|
|
9527
|
+
} else {
|
|
9528
|
+
return this.expectOutputSwapV3(
|
|
9529
|
+
txb,
|
|
9530
|
+
inputCoin,
|
|
9531
|
+
router,
|
|
9532
|
+
expectedAmountOut.toString(),
|
|
9533
|
+
amountLimit.toString(),
|
|
9534
|
+
partner ?? this.partner
|
|
9535
|
+
);
|
|
9536
|
+
}
|
|
9420
9537
|
}
|
|
9421
|
-
swapInPools(params) {
|
|
9422
|
-
|
|
9423
|
-
|
|
9424
|
-
|
|
9425
|
-
|
|
9426
|
-
|
|
9427
|
-
|
|
9428
|
-
|
|
9429
|
-
|
|
9430
|
-
|
|
9431
|
-
|
|
9432
|
-
const
|
|
9433
|
-
|
|
9434
|
-
|
|
9435
|
-
|
|
9436
|
-
|
|
9437
|
-
|
|
9438
|
-
|
|
9439
|
-
|
|
9440
|
-
|
|
9441
|
-
|
|
9442
|
-
arguments: args,
|
|
9443
|
-
typeArguments
|
|
9444
|
-
});
|
|
9445
|
-
}
|
|
9446
|
-
if (!this.signer) {
|
|
9447
|
-
this.signer = "0x0";
|
|
9448
|
-
}
|
|
9449
|
-
const simulateRes = yield this.client.devInspectTransactionBlock({
|
|
9450
|
-
transactionBlock: tx,
|
|
9451
|
-
sender: this.signer
|
|
9452
|
-
});
|
|
9453
|
-
if (simulateRes.error != null) {
|
|
9454
|
-
throw new Error("Simulation error: " + simulateRes.error);
|
|
9455
|
-
}
|
|
9456
|
-
const valueData = (_a = simulateRes.events) == null ? void 0 : _a.filter((item) => {
|
|
9457
|
-
return item.type.includes("CalculatedSwapResultEvent");
|
|
9538
|
+
async swapInPools(params) {
|
|
9539
|
+
const { from, target, amount, byAmountIn, pools } = params;
|
|
9540
|
+
const fromCoin = completionCoin(from);
|
|
9541
|
+
const targetCoin = completionCoin(target);
|
|
9542
|
+
const tx = new Transaction();
|
|
9543
|
+
const direction = compareCoins(fromCoin, targetCoin);
|
|
9544
|
+
const coinA = direction ? fromCoin : targetCoin;
|
|
9545
|
+
const coinB = direction ? targetCoin : fromCoin;
|
|
9546
|
+
const typeArguments = [coinA, coinB];
|
|
9547
|
+
const integratePublishedAt = this.env === 0 /* Mainnet */ ? "0xfbb32ac0fa89a3cb0c56c745b688c6d2a53ac8e43447119ad822763997ffb9c3" : "0xab2d58dd28ff0dc19b18ab2c634397b785a38c342a8f5065ade5f53f9dbffa1c";
|
|
9548
|
+
for (let i = 0; i < pools.length; i++) {
|
|
9549
|
+
const args = [
|
|
9550
|
+
tx.object(pools[i]),
|
|
9551
|
+
tx.pure.bool(direction),
|
|
9552
|
+
tx.pure.bool(byAmountIn),
|
|
9553
|
+
tx.pure.u64(amount.toString())
|
|
9554
|
+
];
|
|
9555
|
+
tx.moveCall({
|
|
9556
|
+
target: `${integratePublishedAt}::fetcher_script::calculate_swap_result`,
|
|
9557
|
+
arguments: args,
|
|
9558
|
+
typeArguments
|
|
9458
9559
|
});
|
|
9459
|
-
|
|
9460
|
-
|
|
9461
|
-
|
|
9462
|
-
|
|
9463
|
-
|
|
9464
|
-
|
|
9465
|
-
|
|
9466
|
-
|
|
9467
|
-
|
|
9468
|
-
|
|
9469
|
-
|
|
9470
|
-
|
|
9471
|
-
|
|
9472
|
-
|
|
9473
|
-
|
|
9474
|
-
|
|
9475
|
-
|
|
9476
|
-
|
|
9477
|
-
|
|
9478
|
-
|
|
9479
|
-
|
|
9560
|
+
}
|
|
9561
|
+
tx.setSenderIfNotSet(this.signer || "0x0");
|
|
9562
|
+
const simulateRes = await this.client.devInspectTransactionBlock({
|
|
9563
|
+
sender: this.signer || "0x0",
|
|
9564
|
+
transactionBlock: tx
|
|
9565
|
+
});
|
|
9566
|
+
if (simulateRes.error) {
|
|
9567
|
+
throw new Error("Simulation error: " + simulateRes.error);
|
|
9568
|
+
}
|
|
9569
|
+
const events = simulateRes.events ?? [];
|
|
9570
|
+
const valueData = events.filter((item) => {
|
|
9571
|
+
return item.type.includes("CalculatedSwapResultEvent");
|
|
9572
|
+
});
|
|
9573
|
+
if (valueData.length === 0 || valueData.length !== pools.length) {
|
|
9574
|
+
throw new Error("Simulate event result error");
|
|
9575
|
+
}
|
|
9576
|
+
let tempMaxAmount = byAmountIn ? new import_bn6.default(0) : new import_bn6.default(U64_MAX);
|
|
9577
|
+
let tempIndex = 0;
|
|
9578
|
+
for (let i = 0; i < valueData.length; i += 1) {
|
|
9579
|
+
const eventJson2 = valueData[i].parsedJson;
|
|
9580
|
+
if (eventJson2?.data?.is_exceed) {
|
|
9581
|
+
continue;
|
|
9582
|
+
}
|
|
9583
|
+
if (params.byAmountIn) {
|
|
9584
|
+
const amount2 = new import_bn6.default(eventJson2?.data?.amount_out ?? 0);
|
|
9585
|
+
if (amount2.gt(tempMaxAmount)) {
|
|
9586
|
+
tempIndex = i;
|
|
9587
|
+
tempMaxAmount = amount2;
|
|
9588
|
+
}
|
|
9589
|
+
} else {
|
|
9590
|
+
const amount2 = new import_bn6.default(eventJson2?.data?.amount_out ?? 0);
|
|
9591
|
+
if (amount2.lt(tempMaxAmount)) {
|
|
9592
|
+
tempIndex = i;
|
|
9593
|
+
tempMaxAmount = amount2;
|
|
9480
9594
|
}
|
|
9481
9595
|
}
|
|
9482
|
-
|
|
9483
|
-
|
|
9484
|
-
|
|
9485
|
-
|
|
9486
|
-
|
|
9487
|
-
|
|
9488
|
-
|
|
9489
|
-
|
|
9490
|
-
|
|
9491
|
-
|
|
9492
|
-
|
|
9493
|
-
|
|
9494
|
-
|
|
9495
|
-
|
|
9496
|
-
|
|
9497
|
-
|
|
9498
|
-
|
|
9499
|
-
|
|
9500
|
-
|
|
9501
|
-
|
|
9502
|
-
|
|
9503
|
-
|
|
9504
|
-
|
|
9505
|
-
|
|
9506
|
-
|
|
9507
|
-
|
|
9508
|
-
|
|
9509
|
-
|
|
9510
|
-
|
|
9511
|
-
|
|
9512
|
-
|
|
9513
|
-
|
|
9596
|
+
}
|
|
9597
|
+
const eventJson = valueData[tempIndex].parsedJson;
|
|
9598
|
+
const eventData = eventJson?.data;
|
|
9599
|
+
const [decimalA, decimalB] = await Promise.all([
|
|
9600
|
+
this.client.getCoinMetadata({ coinType: coinA }).then((res) => res?.decimals ?? null),
|
|
9601
|
+
this.client.getCoinMetadata({ coinType: coinB }).then((res) => res?.decimals ?? null)
|
|
9602
|
+
]);
|
|
9603
|
+
if (decimalA == null || decimalB == null) {
|
|
9604
|
+
throw new Error("Cannot get coin decimals");
|
|
9605
|
+
}
|
|
9606
|
+
const feeRate = Number(eventData?.fee_rate ?? 0) / 1e6;
|
|
9607
|
+
const pureAmountIn = new import_bn6.default(eventData?.amount_in ?? 0);
|
|
9608
|
+
const feeAmount = new import_bn6.default(eventData?.fee_amount ?? 0);
|
|
9609
|
+
const amountIn = pureAmountIn.add(feeAmount);
|
|
9610
|
+
const cetusRouterV3PublishedAt = this.env === 0 /* Mainnet */ ? MAINNET_CETUS_V3_PUBLISHED_AT : TESTNET_CETUS_V3_PUBLISHED_AT;
|
|
9611
|
+
const aggregatorV3PublishedAt = this.env === 0 /* Mainnet */ ? AGGREGATOR_V3_CONFIG.DEFAULT_PUBLISHED_AT.Mainnet : AGGREGATOR_V3_CONFIG.DEFAULT_PUBLISHED_AT.Testnet;
|
|
9612
|
+
const routeData = {
|
|
9613
|
+
amountIn,
|
|
9614
|
+
amountOut: new import_bn6.default(eventData?.amount_out ?? 0),
|
|
9615
|
+
deviationRatio: 0,
|
|
9616
|
+
paths: [
|
|
9617
|
+
{
|
|
9618
|
+
id: pools[tempIndex],
|
|
9619
|
+
direction,
|
|
9620
|
+
provider: CETUS,
|
|
9621
|
+
from: fromCoin,
|
|
9622
|
+
target: targetCoin,
|
|
9623
|
+
feeRate,
|
|
9624
|
+
amountIn: amountIn.toString(),
|
|
9625
|
+
amountOut: eventData?.amount_out ?? "0",
|
|
9626
|
+
publishedAt: cetusRouterV3PublishedAt,
|
|
9627
|
+
extendedDetails: {
|
|
9628
|
+
afterSqrtPrice: eventData?.after_sqrt_price
|
|
9514
9629
|
}
|
|
9515
|
-
],
|
|
9516
|
-
insufficientLiquidity: false,
|
|
9517
|
-
byAmountIn: params.byAmountIn,
|
|
9518
|
-
quoteID: `degraded-${generateUUID()}`,
|
|
9519
|
-
packages: /* @__PURE__ */ new Map([
|
|
9520
|
-
[
|
|
9521
|
-
PACKAGE_NAMES.AGGREGATOR_V3,
|
|
9522
|
-
aggregatorV3PublishedAt
|
|
9523
|
-
]
|
|
9524
|
-
])
|
|
9525
|
-
};
|
|
9526
|
-
const result = {
|
|
9527
|
-
isExceed: event.is_exceed,
|
|
9528
|
-
routeData
|
|
9529
|
-
};
|
|
9530
|
-
return result;
|
|
9531
|
-
});
|
|
9532
|
-
}
|
|
9533
|
-
updatePythPriceIDs(priceIDs, txb) {
|
|
9534
|
-
return __async(this, null, function* () {
|
|
9535
|
-
let priceUpdateData = null;
|
|
9536
|
-
let lastError = null;
|
|
9537
|
-
for (const connection of this.pythConnections) {
|
|
9538
|
-
try {
|
|
9539
|
-
priceUpdateData = yield connection.getPriceFeedsUpdateData(priceIDs);
|
|
9540
|
-
break;
|
|
9541
|
-
} catch (e) {
|
|
9542
|
-
lastError = e;
|
|
9543
|
-
console.log("Error: ", e);
|
|
9544
|
-
continue;
|
|
9545
9630
|
}
|
|
9546
|
-
|
|
9547
|
-
|
|
9548
|
-
|
|
9549
|
-
|
|
9550
|
-
|
|
9551
|
-
|
|
9552
|
-
|
|
9553
|
-
|
|
9554
|
-
|
|
9555
|
-
|
|
9556
|
-
|
|
9557
|
-
|
|
9558
|
-
|
|
9559
|
-
|
|
9560
|
-
|
|
9561
|
-
|
|
9562
|
-
);
|
|
9563
|
-
}
|
|
9564
|
-
let priceInfoObjectIdsMap = /* @__PURE__ */ new Map();
|
|
9565
|
-
for (let i = 0; i < priceIDs.length; i++) {
|
|
9566
|
-
priceInfoObjectIdsMap.set(priceIDs[i], priceInfoObjectIds[i]);
|
|
9567
|
-
}
|
|
9568
|
-
return priceInfoObjectIdsMap;
|
|
9569
|
-
});
|
|
9631
|
+
],
|
|
9632
|
+
insufficientLiquidity: false,
|
|
9633
|
+
byAmountIn: params.byAmountIn,
|
|
9634
|
+
quoteID: `degraded-${generateUUID()}`,
|
|
9635
|
+
packages: /* @__PURE__ */ new Map([
|
|
9636
|
+
[
|
|
9637
|
+
PACKAGE_NAMES.AGGREGATOR_V3,
|
|
9638
|
+
aggregatorV3PublishedAt
|
|
9639
|
+
]
|
|
9640
|
+
])
|
|
9641
|
+
};
|
|
9642
|
+
const result = {
|
|
9643
|
+
isExceed: eventData?.is_exceed ?? false,
|
|
9644
|
+
routeData
|
|
9645
|
+
};
|
|
9646
|
+
return result;
|
|
9570
9647
|
}
|
|
9571
|
-
|
|
9572
|
-
|
|
9573
|
-
|
|
9574
|
-
|
|
9575
|
-
|
|
9576
|
-
|
|
9577
|
-
|
|
9648
|
+
async updatePythPriceIDs(priceIDs, txb) {
|
|
9649
|
+
const priceUpdateData = await this.pythAdapter.getPriceFeedsUpdateData(priceIDs);
|
|
9650
|
+
let priceInfoObjectIds;
|
|
9651
|
+
try {
|
|
9652
|
+
priceInfoObjectIds = await this.pythAdapter.updatePriceFeeds(
|
|
9653
|
+
txb,
|
|
9654
|
+
priceUpdateData,
|
|
9655
|
+
priceIDs
|
|
9656
|
+
);
|
|
9657
|
+
} catch (e) {
|
|
9658
|
+
throw new Error(
|
|
9659
|
+
`Failed to update Pyth price feeds. Ensure pythUrls are configured correctly. Detailed error: ${e}`
|
|
9660
|
+
);
|
|
9661
|
+
}
|
|
9662
|
+
const priceInfoObjectIdsMap = /* @__PURE__ */ new Map();
|
|
9663
|
+
for (let i = 0; i < priceIDs.length; i++) {
|
|
9664
|
+
priceInfoObjectIdsMap.set(priceIDs[i], priceInfoObjectIds[i]);
|
|
9665
|
+
}
|
|
9666
|
+
return priceInfoObjectIdsMap;
|
|
9667
|
+
}
|
|
9668
|
+
async devInspectTransactionBlock(txb) {
|
|
9669
|
+
txb.setSenderIfNotSet(this.signer || "0x0");
|
|
9670
|
+
const res = await this.client.devInspectTransactionBlock({
|
|
9671
|
+
sender: this.signer || "0x0",
|
|
9672
|
+
transactionBlock: txb
|
|
9578
9673
|
});
|
|
9674
|
+
return res;
|
|
9579
9675
|
}
|
|
9580
|
-
sendTransaction(txb, signer) {
|
|
9581
|
-
|
|
9582
|
-
|
|
9583
|
-
|
|
9584
|
-
|
|
9585
|
-
});
|
|
9586
|
-
return res;
|
|
9676
|
+
async sendTransaction(txb, signer) {
|
|
9677
|
+
const res = await this.client.signAndExecuteTransaction({
|
|
9678
|
+
transaction: txb,
|
|
9679
|
+
signer,
|
|
9680
|
+
options: { showEffects: true, showEvents: true, showBalanceChanges: true }
|
|
9587
9681
|
});
|
|
9682
|
+
return res;
|
|
9588
9683
|
}
|
|
9589
9684
|
};
|
|
9590
9685
|
_AggregatorClient.CONFIG = {
|
|
@@ -9653,174 +9748,4 @@ decimal.js/decimal.mjs:
|
|
|
9653
9748
|
*)
|
|
9654
9749
|
*/
|
|
9655
9750
|
|
|
9656
|
-
|
|
9657
|
-
exports.AFTERMATH = AFTERMATH;
|
|
9658
|
-
exports.AFTERMATH_AMM = AFTERMATH_AMM;
|
|
9659
|
-
exports.AFTERMATH_MODULE = AFTERMATH_MODULE;
|
|
9660
|
-
exports.AGGREGATOR = AGGREGATOR;
|
|
9661
|
-
exports.AGGREGATOR_V3_CONFIG = AGGREGATOR_V3_CONFIG;
|
|
9662
|
-
exports.ALL_DEXES = ALL_DEXES;
|
|
9663
|
-
exports.ALPHAFI = ALPHAFI;
|
|
9664
|
-
exports.AggregatorClient = AggregatorClient;
|
|
9665
|
-
exports.AggregatorConfig = AggregatorConfig;
|
|
9666
|
-
exports.AggregatorError = AggregatorError;
|
|
9667
|
-
exports.AggregatorServerErrorCode = AggregatorServerErrorCode;
|
|
9668
|
-
exports.BLUEFIN = BLUEFIN;
|
|
9669
|
-
exports.BLUEMOVE = BLUEMOVE;
|
|
9670
|
-
exports.CETUS = CETUS;
|
|
9671
|
-
exports.CETUSDLMM = CETUSDLMM;
|
|
9672
|
-
exports.CETUS_DEX = CETUS_DEX;
|
|
9673
|
-
exports.CETUS_MODULE = CETUS_MODULE;
|
|
9674
|
-
exports.CETUS_PUBLISHED_AT = CETUS_PUBLISHED_AT;
|
|
9675
|
-
exports.CHECK_COINS_THRESHOLD_FUNC = CHECK_COINS_THRESHOLD_FUNC;
|
|
9676
|
-
exports.CLIENT_CONFIG = CLIENT_CONFIG;
|
|
9677
|
-
exports.CLOCK_ADDRESS = CLOCK_ADDRESS;
|
|
9678
|
-
exports.CoinInfoAddress = CoinInfoAddress;
|
|
9679
|
-
exports.CoinStoreAddress = CoinStoreAddress;
|
|
9680
|
-
exports.CoinUtils = CoinUtils;
|
|
9681
|
-
exports.ConfigErrorCode = ConfigErrorCode;
|
|
9682
|
-
exports.DEEPBOOKV2 = DEEPBOOKV2;
|
|
9683
|
-
exports.DEEPBOOKV3 = DEEPBOOKV3;
|
|
9684
|
-
exports.DEEPBOOK_CLOB_V2_MODULE = DEEPBOOK_CLOB_V2_MODULE;
|
|
9685
|
-
exports.DEEPBOOK_CUSTODIAN_V2_MODULE = DEEPBOOK_CUSTODIAN_V2_MODULE;
|
|
9686
|
-
exports.DEEPBOOK_DEX = DEEPBOOK_DEX;
|
|
9687
|
-
exports.DEEPBOOK_MODULE = DEEPBOOK_MODULE;
|
|
9688
|
-
exports.DEEPBOOK_PACKAGE_ID = DEEPBOOK_PACKAGE_ID;
|
|
9689
|
-
exports.DEEPBOOK_PUBLISHED_AT = DEEPBOOK_PUBLISHED_AT;
|
|
9690
|
-
exports.DEEPBOOK_V3_DEEP_FEE_TYPES = DEEPBOOK_V3_DEEP_FEE_TYPES;
|
|
9691
|
-
exports.DEFAULT_AGG_V2_ENDPOINT = DEFAULT_AGG_V2_ENDPOINT;
|
|
9692
|
-
exports.DEFAULT_AGG_V3_ENDPOINT = DEFAULT_AGG_V3_ENDPOINT;
|
|
9693
|
-
exports.DEFAULT_ENDPOINT = DEFAULT_ENDPOINT;
|
|
9694
|
-
exports.DEFAULT_GAS_BUDGET_FOR_MERGE = DEFAULT_GAS_BUDGET_FOR_MERGE;
|
|
9695
|
-
exports.DEFAULT_GAS_BUDGET_FOR_SPLIT = DEFAULT_GAS_BUDGET_FOR_SPLIT;
|
|
9696
|
-
exports.DEFAULT_GAS_BUDGET_FOR_STAKE = DEFAULT_GAS_BUDGET_FOR_STAKE;
|
|
9697
|
-
exports.DEFAULT_GAS_BUDGET_FOR_TRANSFER = DEFAULT_GAS_BUDGET_FOR_TRANSFER;
|
|
9698
|
-
exports.DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI = DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI;
|
|
9699
|
-
exports.DEFAULT_NFT_TRANSFER_GAS_FEE = DEFAULT_NFT_TRANSFER_GAS_FEE;
|
|
9700
|
-
exports.Env = Env;
|
|
9701
|
-
exports.FERRACLMM = FERRACLMM;
|
|
9702
|
-
exports.FERRADLMM = FERRADLMM;
|
|
9703
|
-
exports.FLOWXV2 = FLOWXV2;
|
|
9704
|
-
exports.FLOWXV3 = FLOWXV3;
|
|
9705
|
-
exports.FLOWX_AMM = FLOWX_AMM;
|
|
9706
|
-
exports.FLOWX_AMM_MODULE = FLOWX_AMM_MODULE;
|
|
9707
|
-
exports.FULLSAIL = FULLSAIL;
|
|
9708
|
-
exports.FlashSwapA2BFunc = FlashSwapA2BFunc;
|
|
9709
|
-
exports.FlashSwapB2AFunc = FlashSwapB2AFunc;
|
|
9710
|
-
exports.FlashSwapFunc = FlashSwapFunc;
|
|
9711
|
-
exports.FlashSwapWithPartnerA2BFunc = FlashSwapWithPartnerA2BFunc;
|
|
9712
|
-
exports.FlashSwapWithPartnerB2AFunc = FlashSwapWithPartnerB2AFunc;
|
|
9713
|
-
exports.FlashSwapWithPartnerFunc = FlashSwapWithPartnerFunc;
|
|
9714
|
-
exports.GAS_SYMBOL = GAS_SYMBOL;
|
|
9715
|
-
exports.GAS_TYPE_ARG = GAS_TYPE_ARG;
|
|
9716
|
-
exports.GAS_TYPE_ARG_LONG = GAS_TYPE_ARG_LONG;
|
|
9717
|
-
exports.HAEDAL = HAEDAL;
|
|
9718
|
-
exports.HAEDALHMMV2 = HAEDALHMMV2;
|
|
9719
|
-
exports.HAEDALPMM = HAEDALPMM;
|
|
9720
|
-
exports.HAWAL = HAWAL;
|
|
9721
|
-
exports.INTEGRATE = INTEGRATE;
|
|
9722
|
-
exports.JOIN_FUNC = JOIN_FUNC;
|
|
9723
|
-
exports.KRIYA = KRIYA;
|
|
9724
|
-
exports.KRIYAV3 = KRIYAV3;
|
|
9725
|
-
exports.KRIYA_DEX = KRIYA_DEX;
|
|
9726
|
-
exports.KRIYA_MODULE = KRIYA_MODULE;
|
|
9727
|
-
exports.MAGMA = MAGMA;
|
|
9728
|
-
exports.MAINNET_AFTERMATH_INSURANCE_FUND_ID = MAINNET_AFTERMATH_INSURANCE_FUND_ID;
|
|
9729
|
-
exports.MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID = MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID;
|
|
9730
|
-
exports.MAINNET_AFTERMATH_REFERRAL_VAULT_ID = MAINNET_AFTERMATH_REFERRAL_VAULT_ID;
|
|
9731
|
-
exports.MAINNET_AFTERMATH_REGISTRY_ID = MAINNET_AFTERMATH_REGISTRY_ID;
|
|
9732
|
-
exports.MAINNET_AFTERMATH_TREASURY_ID = MAINNET_AFTERMATH_TREASURY_ID;
|
|
9733
|
-
exports.MAINNET_CETUS_V3_PUBLISHED_AT = MAINNET_CETUS_V3_PUBLISHED_AT;
|
|
9734
|
-
exports.MAINNET_FLOWX_AMM_CONTAINER_ID = MAINNET_FLOWX_AMM_CONTAINER_ID;
|
|
9735
|
-
exports.METASTABLE = METASTABLE;
|
|
9736
|
-
exports.MOMENTUM = MOMENTUM;
|
|
9737
|
-
exports.OBRIC = OBRIC;
|
|
9738
|
-
exports.ONE = ONE;
|
|
9739
|
-
exports.PACKAGE_NAMES = PACKAGE_NAMES;
|
|
9740
|
-
exports.PAY_MODULE = PAY_MODULE;
|
|
9741
|
-
exports.POOL_MODULT = POOL_MODULT;
|
|
9742
|
-
exports.PUBLISHED_ADDRESSES = PUBLISHED_ADDRESSES;
|
|
9743
|
-
exports.PYTH_CONFIG = PYTH_CONFIG;
|
|
9744
|
-
exports.REPAY_FLASH_SWAP_A2B_FUNC = REPAY_FLASH_SWAP_A2B_FUNC;
|
|
9745
|
-
exports.REPAY_FLASH_SWAP_B2A_FUNC = REPAY_FLASH_SWAP_B2A_FUNC;
|
|
9746
|
-
exports.REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC = REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC;
|
|
9747
|
-
exports.REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC = REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC;
|
|
9748
|
-
exports.RepayFalshSwapFunc = RepayFalshSwapFunc;
|
|
9749
|
-
exports.RepayFlashSwapWithPartnerFunc = RepayFlashSwapWithPartnerFunc;
|
|
9750
|
-
exports.SCALLOP = SCALLOP;
|
|
9751
|
-
exports.SEVENK = SEVENK;
|
|
9752
|
-
exports.SPRINGSUI = SPRINGSUI;
|
|
9753
|
-
exports.STEAMM = STEAMM;
|
|
9754
|
-
exports.STEAMM_OMM = STEAMM_OMM;
|
|
9755
|
-
exports.STEAMM_OMM_V2 = STEAMM_OMM_V2;
|
|
9756
|
-
exports.SUILEND = SUILEND;
|
|
9757
|
-
exports.SUI_SYSTEM_STATE_OBJECT_ID = SUI_SYSTEM_STATE_OBJECT_ID;
|
|
9758
|
-
exports.SWAP_A2B_FUNC = SWAP_A2B_FUNC;
|
|
9759
|
-
exports.SWAP_B2A_FUNC = SWAP_B2A_FUNC;
|
|
9760
|
-
exports.SuiZeroCoinFn = SuiZeroCoinFn;
|
|
9761
|
-
exports.TEN_POW_NINE = TEN_POW_NINE;
|
|
9762
|
-
exports.TESTNET_AFTERMATH_INSURANCE_FUND_ID = TESTNET_AFTERMATH_INSURANCE_FUND_ID;
|
|
9763
|
-
exports.TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID = TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID;
|
|
9764
|
-
exports.TESTNET_AFTERMATH_REFERRAL_VAULT_ID = TESTNET_AFTERMATH_REFERRAL_VAULT_ID;
|
|
9765
|
-
exports.TESTNET_AFTERMATH_REGISTRY_ID = TESTNET_AFTERMATH_REGISTRY_ID;
|
|
9766
|
-
exports.TESTNET_AFTERMATH_TREASURY_ID = TESTNET_AFTERMATH_TREASURY_ID;
|
|
9767
|
-
exports.TESTNET_CETUS_V3_PUBLISHED_AT = TESTNET_CETUS_V3_PUBLISHED_AT;
|
|
9768
|
-
exports.TESTNET_FLOWX_AMM_CONTAINER_ID = TESTNET_FLOWX_AMM_CONTAINER_ID;
|
|
9769
|
-
exports.TRANSFER_ACCOUNT_CAP = TRANSFER_ACCOUNT_CAP;
|
|
9770
|
-
exports.TRANSFER_OR_DESTORY_COIN_FUNC = TRANSFER_OR_DESTORY_COIN_FUNC;
|
|
9771
|
-
exports.TURBOS = TURBOS;
|
|
9772
|
-
exports.TURBOS_DEX = TURBOS_DEX;
|
|
9773
|
-
exports.TURBOS_MODULE = TURBOS_MODULE;
|
|
9774
|
-
exports.TURBOS_VERSIONED = TURBOS_VERSIONED;
|
|
9775
|
-
exports.TWO = TWO;
|
|
9776
|
-
exports.TransactionErrorCode = TransactionErrorCode;
|
|
9777
|
-
exports.TypesErrorCode = TypesErrorCode;
|
|
9778
|
-
exports.U128 = U128;
|
|
9779
|
-
exports.U64_MAX = U64_MAX;
|
|
9780
|
-
exports.U64_MAX_BN = U64_MAX_BN;
|
|
9781
|
-
exports.UTILS_MODULE = UTILS_MODULE;
|
|
9782
|
-
exports.VOLO = VOLO;
|
|
9783
|
-
exports.ZERO = ZERO;
|
|
9784
|
-
exports.buildInputCoin = buildInputCoin;
|
|
9785
|
-
exports.calculateGasEfficiency = calculateGasEfficiency;
|
|
9786
|
-
exports.calculatePriceImpact = calculatePriceImpact;
|
|
9787
|
-
exports.checkInvalidSuiAddress = checkInvalidSuiAddress;
|
|
9788
|
-
exports.compareCoins = compareCoins;
|
|
9789
|
-
exports.compareGasMetrics = compareGasMetrics;
|
|
9790
|
-
exports.completionCoin = completionCoin;
|
|
9791
|
-
exports.composeType = composeType;
|
|
9792
|
-
exports.createTarget = createTarget;
|
|
9793
|
-
exports.dealWithFastRouterSwapParamsForMsafe = dealWithFastRouterSwapParamsForMsafe;
|
|
9794
|
-
exports.exportToCSV = exportToCSV;
|
|
9795
|
-
exports.exportToJSON = exportToJSON;
|
|
9796
|
-
exports.extractAddressFromType = extractAddressFromType;
|
|
9797
|
-
exports.extractGasMetrics = extractGasMetrics;
|
|
9798
|
-
exports.extractStructTagFromType = extractStructTagFromType;
|
|
9799
|
-
exports.extractTimestampFromDowngradeUuid6 = extractTimestampFromDowngradeUuid6;
|
|
9800
|
-
exports.fixSuiObjectId = fixSuiObjectId;
|
|
9801
|
-
exports.formatGasMetrics = formatGasMetrics;
|
|
9802
|
-
exports.generateDowngradeUuid6 = generateDowngradeUuid6;
|
|
9803
|
-
exports.generateSimpleDowngradeUuid6 = generateSimpleDowngradeUuid6;
|
|
9804
|
-
exports.getAggregatorServerErrorMessage = getAggregatorServerErrorMessage;
|
|
9805
|
-
exports.getAggregatorV2Extend2PublishedAt = getAggregatorV2Extend2PublishedAt;
|
|
9806
|
-
exports.getAggregatorV2ExtendPublishedAt = getAggregatorV2ExtendPublishedAt;
|
|
9807
|
-
exports.getAggregatorV2PublishedAt = getAggregatorV2PublishedAt;
|
|
9808
|
-
exports.getAllProviders = getAllProviders;
|
|
9809
|
-
exports.getDeepbookV3Config = getDeepbookV3Config;
|
|
9810
|
-
exports.getDefaultSuiInputType = getDefaultSuiInputType;
|
|
9811
|
-
exports.getMergeSwapResult = getMergeSwapResult;
|
|
9812
|
-
exports.getOrCreateAccountCap = getOrCreateAccountCap;
|
|
9813
|
-
exports.getProvidersExcluding = getProvidersExcluding;
|
|
9814
|
-
exports.getProvidersIncluding = getProvidersIncluding;
|
|
9815
|
-
exports.getRouterResult = getRouterResult;
|
|
9816
|
-
exports.isSortedSymbols = isSortedSymbols;
|
|
9817
|
-
exports.isValidDowngradeUuid6 = isValidDowngradeUuid6;
|
|
9818
|
-
exports.mintZeroCoin = mintZeroCoin;
|
|
9819
|
-
exports.normalizeCoinType = normalizeCoinType;
|
|
9820
|
-
exports.parseAftermathFeeType = parseAftermathFeeType;
|
|
9821
|
-
exports.parseTurbosPoolFeeType = parseTurbosPoolFeeType;
|
|
9822
|
-
exports.patchFixSuiObjectId = patchFixSuiObjectId;
|
|
9823
|
-
exports.printTransaction = printTransaction;
|
|
9824
|
-
exports.processEndpoint = processEndpoint;
|
|
9825
|
-
exports.processFlattenRoutes = processFlattenRoutes;
|
|
9826
|
-
exports.restituteMsafeFastRouterSwapParams = restituteMsafeFastRouterSwapParams;
|
|
9751
|
+
export { AFSUI, AFTERMATH, AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AGGREGATOR_V3_CONFIG, ALL_DEXES, ALPHAFI, AggregatorClient, AggregatorConfig, AggregatorError, AggregatorServerErrorCode, BLUEFIN, BLUEMOVE, CETUS, CETUSDLMM, CETUS_DEX, CETUS_MODULE, CETUS_PUBLISHED_AT, CHECK_COINS_THRESHOLD_FUNC, CLIENT_CONFIG, CLOCK_ADDRESS, CoinInfoAddress, CoinStoreAddress, CoinUtils, ConfigErrorCode, DEEPBOOKV2, DEEPBOOKV3, DEEPBOOK_CLOB_V2_MODULE, DEEPBOOK_CUSTODIAN_V2_MODULE, DEEPBOOK_DEX, DEEPBOOK_MODULE, DEEPBOOK_PACKAGE_ID, DEEPBOOK_PUBLISHED_AT, DEEPBOOK_V3_DEEP_FEE_TYPES, DEFAULT_AGG_V2_ENDPOINT, DEFAULT_AGG_V3_ENDPOINT, DEFAULT_ENDPOINT, DEFAULT_GAS_BUDGET_FOR_MERGE, DEFAULT_GAS_BUDGET_FOR_SPLIT, DEFAULT_GAS_BUDGET_FOR_STAKE, DEFAULT_GAS_BUDGET_FOR_TRANSFER, DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI, DEFAULT_NFT_TRANSFER_GAS_FEE, Env, FERRACLMM, FERRADLMM, FLOWXV2, FLOWXV3, FLOWX_AMM, FLOWX_AMM_MODULE, FULLSAIL, FlashSwapA2BFunc, FlashSwapB2AFunc, FlashSwapFunc, FlashSwapWithPartnerA2BFunc, FlashSwapWithPartnerB2AFunc, FlashSwapWithPartnerFunc, GAS_SYMBOL, GAS_TYPE_ARG, GAS_TYPE_ARG_LONG, HAEDAL, HAEDALHMMV2, HAEDALPMM, HAWAL, INTEGRATE, JOIN_FUNC, KRIYA, KRIYAV3, KRIYA_DEX, KRIYA_MODULE, MAGMA, MAINNET_AFTERMATH_INSURANCE_FUND_ID, MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID, MAINNET_AFTERMATH_REFERRAL_VAULT_ID, MAINNET_AFTERMATH_REGISTRY_ID, MAINNET_AFTERMATH_TREASURY_ID, MAINNET_CETUS_V3_PUBLISHED_AT, MAINNET_FLOWX_AMM_CONTAINER_ID, METASTABLE, MOMENTUM, OBRIC, ONE, PACKAGE_NAMES, PAY_MODULE, POOL_MODULT, PUBLISHED_ADDRESSES, PYTH_CONFIG, REPAY_FLASH_SWAP_A2B_FUNC, REPAY_FLASH_SWAP_B2A_FUNC, REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC, REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC, RepayFalshSwapFunc, RepayFlashSwapWithPartnerFunc, SCALLOP, SEVENK, SPRINGSUI, STEAMM, STEAMM_OMM, STEAMM_OMM_V2, SUILEND, SUI_SYSTEM_STATE_OBJECT_ID, SWAP_A2B_FUNC, SWAP_B2A_FUNC, SuiZeroCoinFn, TEN_POW_NINE, TESTNET_AFTERMATH_INSURANCE_FUND_ID, TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID, TESTNET_AFTERMATH_REFERRAL_VAULT_ID, TESTNET_AFTERMATH_REGISTRY_ID, TESTNET_AFTERMATH_TREASURY_ID, TESTNET_CETUS_V3_PUBLISHED_AT, TESTNET_FLOWX_AMM_CONTAINER_ID, TRANSFER_ACCOUNT_CAP, TRANSFER_OR_DESTORY_COIN_FUNC, TURBOS, TURBOS_DEX, TURBOS_MODULE, TURBOS_VERSIONED, TWO, TransactionErrorCode, TypesErrorCode, U128, U64_MAX, U64_MAX_BN, UTILS_MODULE, VOLO, ZERO, buildInputCoin, calculateGasEfficiency, calculatePriceImpact, checkInvalidSuiAddress, compareCoins, compareGasMetrics, completionCoin, composeType, createTarget, dealWithFastRouterSwapParamsForMsafe, exportToCSV, exportToJSON, extractAddressFromType, extractGasMetrics, extractStructTagFromType, extractTimestampFromDowngradeUuid6, fixSuiObjectId, formatGasMetrics, generateDowngradeUuid6, generateSimpleDowngradeUuid6, getAggregatorServerErrorMessage, getAggregatorV2Extend2PublishedAt, getAggregatorV2ExtendPublishedAt, getAggregatorV2PublishedAt, getAllProviders, getDeepbookV3Config, getDefaultSuiInputType, getMergeSwapResult, getOrCreateAccountCap, getProvidersExcluding, getProvidersIncluding, getRouterResult, isSortedSymbols, isValidDowngradeUuid6, mintZeroCoin, normalizeCoinType, parseAftermathFeeType, parseTurbosPoolFeeType, patchFixSuiObjectId, printTransaction, processEndpoint, processFlattenRoutes, restituteMsafeFastRouterSwapParams };
|