@cetusprotocol/aggregator-sdk 1.4.5 → 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/bun.lock +30 -36
- package/dist/{index.mjs → index.cjs} +1215 -939
- package/dist/{index.d.mts → index.d.cts} +70 -14
- package/dist/index.d.ts +70 -14
- package/dist/index.js +1039 -1115
- package/package.json +5 -4
- package/tsconfig.json +5 -5
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
|
}
|
|
@@ -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;
|
|
@@ -6105,7 +6050,7 @@ function CalculateAmountLimitByDecimal(expectAmount, byAmountIn, slippage) {
|
|
|
6105
6050
|
var CetusRouter = class {
|
|
6106
6051
|
constructor(env, partner) {
|
|
6107
6052
|
this.globalConfig = env === 0 /* Mainnet */ ? "0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f" : "0xc6273f844b4bc258952c4e477697aa12c918c8e08106fac6b934811298c9820a";
|
|
6108
|
-
this.partner = partner
|
|
6053
|
+
this.partner = partner ?? (env === 0 /* Mainnet */ ? "0x639b5e433da31739e800cd085f356e64cae222966d0f1b11bd9dc76b322ff58b" : "0xfdc30896f88f74544fd507722d3bf52e46b06412ba8241ba0e854cbc65f8d85f");
|
|
6109
6054
|
}
|
|
6110
6055
|
// By amount in
|
|
6111
6056
|
swap(txb, flattenedPath, swapContext, _extends) {
|
|
@@ -6136,7 +6081,7 @@ var CetusRouter = class {
|
|
|
6136
6081
|
txb.object(this.partner),
|
|
6137
6082
|
txb.pure.bool(swapData.direction),
|
|
6138
6083
|
txb.pure.u64(swapData.amountIn),
|
|
6139
|
-
txb.object(
|
|
6084
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6140
6085
|
];
|
|
6141
6086
|
txb.moveCall({
|
|
6142
6087
|
target: `${swapData.publishedAt}::cetus::swap`,
|
|
@@ -6155,7 +6100,7 @@ var CetusRouter = class {
|
|
|
6155
6100
|
txb.pure.bool(path.direction),
|
|
6156
6101
|
txb.pure.bool(false),
|
|
6157
6102
|
// isExactIn
|
|
6158
|
-
txb.object(
|
|
6103
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6159
6104
|
];
|
|
6160
6105
|
const [coinAType, coinBType] = path.direction ? [path.from, path.target] : [path.target, path.from];
|
|
6161
6106
|
const [flashReceipt, repayAmount] = txb.moveCall({
|
|
@@ -6238,7 +6183,7 @@ var KriyaV3Router = class {
|
|
|
6238
6183
|
txb.object(this.version),
|
|
6239
6184
|
txb.pure.bool(swapData.direction),
|
|
6240
6185
|
txb.pure.u64(swapData.amountIn),
|
|
6241
|
-
txb.object(
|
|
6186
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6242
6187
|
];
|
|
6243
6188
|
txb.moveCall({
|
|
6244
6189
|
target: `${swapData.publishedAt}::kriya_clmm::swap`,
|
|
@@ -6285,7 +6230,7 @@ var FlowxV3Router = class {
|
|
|
6285
6230
|
txb.pure.u64(swapData.feeRate),
|
|
6286
6231
|
txb.pure.u64(swapData.amountIn),
|
|
6287
6232
|
txb.pure.bool(swapData.direction),
|
|
6288
|
-
txb.object(
|
|
6233
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6289
6234
|
];
|
|
6290
6235
|
txb.moveCall({
|
|
6291
6236
|
target: `${swapData.publishedAt}::flowx_clmm::swap`,
|
|
@@ -6337,7 +6282,7 @@ var TurbosRouter = class {
|
|
|
6337
6282
|
txb.object(this.versioned),
|
|
6338
6283
|
txb.pure.bool(swapData.direction),
|
|
6339
6284
|
txb.pure.u64(swapData.amountIn),
|
|
6340
|
-
txb.object(
|
|
6285
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6341
6286
|
];
|
|
6342
6287
|
txb.moveCall({
|
|
6343
6288
|
target: `${swapData.publishedAt}::turbos::swap`,
|
|
@@ -6380,7 +6325,7 @@ var BluefinRouter = class {
|
|
|
6380
6325
|
txb.object(swapData.poolId),
|
|
6381
6326
|
txb.pure.bool(swapData.direction),
|
|
6382
6327
|
txb.pure.u64(swapData.amountIn),
|
|
6383
|
-
txb.object(
|
|
6328
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6384
6329
|
];
|
|
6385
6330
|
txb.moveCall({
|
|
6386
6331
|
target: `${swapData.publishedAt}::bluefin::swap`,
|
|
@@ -6423,7 +6368,7 @@ var MomentumRouter = class {
|
|
|
6423
6368
|
txb.pure.bool(swapData.direction),
|
|
6424
6369
|
txb.pure.u64(swapData.amountIn),
|
|
6425
6370
|
txb.object(this.version),
|
|
6426
|
-
txb.object(
|
|
6371
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6427
6372
|
];
|
|
6428
6373
|
txb.moveCall({
|
|
6429
6374
|
target: `${swapData.publishedAt}::momentum::swap`,
|
|
@@ -6466,7 +6411,7 @@ var MagmaRouter = class {
|
|
|
6466
6411
|
txb.object(swapData.poolId),
|
|
6467
6412
|
txb.pure.bool(swapData.direction),
|
|
6468
6413
|
txb.pure.u64(swapData.amountIn),
|
|
6469
|
-
txb.object(
|
|
6414
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6470
6415
|
];
|
|
6471
6416
|
txb.moveCall({
|
|
6472
6417
|
target: `${swapData.publishedAt}::magma::swap`,
|
|
@@ -6619,17 +6564,16 @@ var DeepbookV3Router = class {
|
|
|
6619
6564
|
this.executeSwapContract(txb, swapData, swapContext, _extends);
|
|
6620
6565
|
}
|
|
6621
6566
|
prepareSwapData(flattenedPath) {
|
|
6622
|
-
var _a, _b, _c, _d, _e;
|
|
6623
6567
|
if (flattenedPath.path.publishedAt == null) {
|
|
6624
6568
|
throw new Error("DeepBook V3 not set publishedAt");
|
|
6625
6569
|
}
|
|
6626
6570
|
const path = flattenedPath.path;
|
|
6627
6571
|
const [coinAType, coinBType] = path.direction ? [path.from, path.target] : [path.target, path.from];
|
|
6628
6572
|
const amountIn = flattenedPath.isLastUseOfIntermediateToken ? AGGREGATOR_V3_CONFIG.MAX_AMOUNT_IN : path.amountIn;
|
|
6629
|
-
const needAddDeepPricePoint =
|
|
6630
|
-
const referencePoolId =
|
|
6631
|
-
const referencePoolBaseType =
|
|
6632
|
-
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;
|
|
6633
6577
|
if (needAddDeepPricePoint) {
|
|
6634
6578
|
if (!referencePoolId) {
|
|
6635
6579
|
throw new Error(
|
|
@@ -6672,12 +6616,12 @@ var DeepbookV3Router = class {
|
|
|
6672
6616
|
arguments: [
|
|
6673
6617
|
txb.object(swapData.poolId),
|
|
6674
6618
|
txb.object(swapData.referencePoolId),
|
|
6675
|
-
txb.object(
|
|
6619
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6676
6620
|
]
|
|
6677
6621
|
});
|
|
6678
6622
|
}
|
|
6679
6623
|
executeSwapContract(txb, swapData, swapContext, _extends) {
|
|
6680
|
-
const deepCoin =
|
|
6624
|
+
const deepCoin = _extends?.deepbookv3DeepFee || txb.moveCall({
|
|
6681
6625
|
target: "0x2::coin::zero",
|
|
6682
6626
|
typeArguments: [this.getDeepFeeType()]
|
|
6683
6627
|
});
|
|
@@ -6688,7 +6632,7 @@ var DeepbookV3Router = class {
|
|
|
6688
6632
|
txb.pure.u64(swapData.amountIn),
|
|
6689
6633
|
txb.pure.bool(swapData.direction),
|
|
6690
6634
|
deepCoin,
|
|
6691
|
-
txb.object(
|
|
6635
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6692
6636
|
];
|
|
6693
6637
|
txb.moveCall({
|
|
6694
6638
|
target: `${swapData.publishedAt}::deepbookv3::swap`,
|
|
@@ -6718,7 +6662,6 @@ var AftermathRouter = class {
|
|
|
6718
6662
|
this.executeSwapContract(txb, swapData, swapContext);
|
|
6719
6663
|
}
|
|
6720
6664
|
prepareSwapData(flattenedPath) {
|
|
6721
|
-
var _a, _b;
|
|
6722
6665
|
if (flattenedPath.path.publishedAt == null) {
|
|
6723
6666
|
throw new Error("Aftermath not set publishedAt");
|
|
6724
6667
|
}
|
|
@@ -6728,7 +6671,7 @@ var AftermathRouter = class {
|
|
|
6728
6671
|
return {
|
|
6729
6672
|
coinAType,
|
|
6730
6673
|
coinBType,
|
|
6731
|
-
feeType:
|
|
6674
|
+
feeType: path.extendedDetails?.aftermath_lp_supply_type || path.extendedDetails?.aftermath_lp_supply_type || "0x2::sui::SUI",
|
|
6732
6675
|
// Use LP supply type from path (handle both camelCase and snake_case)
|
|
6733
6676
|
direction: path.direction,
|
|
6734
6677
|
amountIn,
|
|
@@ -6825,7 +6768,7 @@ var SteammCPMMRouter = class {
|
|
|
6825
6768
|
txb.object(swapData.extendedDetails.steamm_lending_market),
|
|
6826
6769
|
txb.pure.bool(swapData.direction),
|
|
6827
6770
|
txb.pure.u64(swapData.amountIn),
|
|
6828
|
-
txb.object(
|
|
6771
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6829
6772
|
];
|
|
6830
6773
|
txb.moveCall({
|
|
6831
6774
|
target: `${swapData.publishedAt}::steamm_cpmm::swap`,
|
|
@@ -6884,7 +6827,7 @@ var ScallopRouter = class {
|
|
|
6884
6827
|
txb.object(this.marketData),
|
|
6885
6828
|
txb.object(swapData.scallopScoinTreasury),
|
|
6886
6829
|
txb.pure.u64(swapData.amountIn),
|
|
6887
|
-
txb.object(
|
|
6830
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
6888
6831
|
];
|
|
6889
6832
|
const func = swapData.direction ? "swap_a2b" : "swap_b2a";
|
|
6890
6833
|
txb.moveCall({
|
|
@@ -7000,7 +6943,7 @@ var HaedalPmmRouter = class {
|
|
|
7000
6943
|
// amount_in
|
|
7001
6944
|
txb.pure.bool(swapData.a2b),
|
|
7002
6945
|
// a2b
|
|
7003
|
-
txb.object(
|
|
6946
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7004
6947
|
// clock
|
|
7005
6948
|
];
|
|
7006
6949
|
txb.moveCall({
|
|
@@ -7074,7 +7017,7 @@ var ObricRouter = class {
|
|
|
7074
7017
|
txb.object(this.pythStateObjectId),
|
|
7075
7018
|
txb.object(swapData.coinAPriceInfoObjectId),
|
|
7076
7019
|
txb.object(swapData.coinBPriceInfoObjectId),
|
|
7077
|
-
txb.object(
|
|
7020
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7078
7021
|
];
|
|
7079
7022
|
txb.moveCall({
|
|
7080
7023
|
target: `${swapData.publishedAt}::obric::swap`,
|
|
@@ -7149,7 +7092,7 @@ var SevenkRouter = class {
|
|
|
7149
7092
|
txb.object(swapData.coinAOracleId),
|
|
7150
7093
|
holder,
|
|
7151
7094
|
txb.object(swapData.coinAPriceId),
|
|
7152
|
-
txb.object(
|
|
7095
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7153
7096
|
]
|
|
7154
7097
|
});
|
|
7155
7098
|
txb.moveCall({
|
|
@@ -7159,7 +7102,7 @@ var SevenkRouter = class {
|
|
|
7159
7102
|
txb.object(swapData.coinBOracleId),
|
|
7160
7103
|
holder,
|
|
7161
7104
|
txb.object(swapData.coinBPriceId),
|
|
7162
|
-
txb.object(
|
|
7105
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7163
7106
|
]
|
|
7164
7107
|
});
|
|
7165
7108
|
const args = [
|
|
@@ -7256,7 +7199,7 @@ var SteammOmmRouter = class {
|
|
|
7256
7199
|
txb.object(extendedDetails.steammOracleRegistryId),
|
|
7257
7200
|
txb.object(swapData.priceInfoObjectIdA),
|
|
7258
7201
|
txb.pure.u64(extendedDetails.steammOracleIndexA),
|
|
7259
|
-
txb.object(
|
|
7202
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7260
7203
|
]
|
|
7261
7204
|
});
|
|
7262
7205
|
const oraclePriceUpdateB = txb.moveCall({
|
|
@@ -7266,7 +7209,7 @@ var SteammOmmRouter = class {
|
|
|
7266
7209
|
txb.object(extendedDetails.steammOracleRegistryId),
|
|
7267
7210
|
txb.object(swapData.priceInfoObjectIdB),
|
|
7268
7211
|
txb.pure.u64(extendedDetails.steammOracleIndexB),
|
|
7269
|
-
txb.object(
|
|
7212
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7270
7213
|
]
|
|
7271
7214
|
});
|
|
7272
7215
|
const args = [
|
|
@@ -7278,7 +7221,7 @@ var SteammOmmRouter = class {
|
|
|
7278
7221
|
oraclePriceUpdateA,
|
|
7279
7222
|
oraclePriceUpdateB,
|
|
7280
7223
|
txb.pure.u64(swapData.amountIn),
|
|
7281
|
-
txb.object(
|
|
7224
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7282
7225
|
];
|
|
7283
7226
|
txb.moveCall({
|
|
7284
7227
|
target: `${swapData.publishedAt}::steamm_omm::${swapData.func}`,
|
|
@@ -7374,7 +7317,7 @@ var SteammOmmV2Router = class {
|
|
|
7374
7317
|
txb.object(extendedDetails.steamm_oracle_registry_id),
|
|
7375
7318
|
txb.object(swapData.priceInfoObjectIdA),
|
|
7376
7319
|
txb.pure.u64(extendedDetails.steamm_oracle_index_a),
|
|
7377
|
-
txb.object(
|
|
7320
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7378
7321
|
]
|
|
7379
7322
|
});
|
|
7380
7323
|
const oraclePriceUpdateB = txb.moveCall({
|
|
@@ -7384,7 +7327,7 @@ var SteammOmmV2Router = class {
|
|
|
7384
7327
|
txb.object(extendedDetails.steamm_oracle_registry_id),
|
|
7385
7328
|
txb.object(swapData.priceInfoObjectIdB),
|
|
7386
7329
|
txb.pure.u64(extendedDetails.steamm_oracle_index_b),
|
|
7387
|
-
txb.object(
|
|
7330
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7388
7331
|
]
|
|
7389
7332
|
});
|
|
7390
7333
|
const args = [
|
|
@@ -7397,7 +7340,7 @@ var SteammOmmV2Router = class {
|
|
|
7397
7340
|
oraclePriceUpdateB,
|
|
7398
7341
|
txb.pure.bool(swapData.direction),
|
|
7399
7342
|
txb.pure.u64(swapData.amountIn),
|
|
7400
|
-
txb.object(
|
|
7343
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
7401
7344
|
];
|
|
7402
7345
|
txb.moveCall({
|
|
7403
7346
|
target: `${swapData.publishedAt}::steamm_omm_v2::swap`,
|
|
@@ -7501,7 +7444,7 @@ var MetastableRouter = class {
|
|
|
7501
7444
|
}
|
|
7502
7445
|
depositArgs.push(txb.object(priceId));
|
|
7503
7446
|
}
|
|
7504
|
-
depositArgs.push(txb.object(
|
|
7447
|
+
depositArgs.push(txb.object(SUI_CLOCK_OBJECT_ID));
|
|
7505
7448
|
break;
|
|
7506
7449
|
}
|
|
7507
7450
|
default:
|
|
@@ -7662,7 +7605,7 @@ var AfsuiRouter = class {
|
|
|
7662
7605
|
txb.object("0x5"),
|
|
7663
7606
|
// SuiSystemState
|
|
7664
7607
|
txb.object(this.referVault),
|
|
7665
|
-
txb.
|
|
7608
|
+
txb.pure.address(this.validator),
|
|
7666
7609
|
txb.pure.bool(swapData.direction),
|
|
7667
7610
|
txb.pure.u64(swapData.amountIn)
|
|
7668
7611
|
];
|
|
@@ -7752,7 +7695,7 @@ var HawalRouter = class {
|
|
|
7752
7695
|
swapContext,
|
|
7753
7696
|
txb.object(this.staking),
|
|
7754
7697
|
txb.object(swapData.poolId),
|
|
7755
|
-
txb.
|
|
7698
|
+
txb.pure.address(this.validator),
|
|
7756
7699
|
txb.pure.bool(swapData.direction),
|
|
7757
7700
|
txb.pure.u64(swapData.amountIn)
|
|
7758
7701
|
];
|
|
@@ -7872,6 +7815,221 @@ function transferOrDestroyCoin(params, txb) {
|
|
|
7872
7815
|
arguments: [coin]
|
|
7873
7816
|
});
|
|
7874
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
|
+
};
|
|
7875
8033
|
|
|
7876
8034
|
// src/utils/uuid.ts
|
|
7877
8035
|
function generateDowngradeUuid6() {
|
|
@@ -7930,7 +8088,7 @@ function extractTimestampFromDowngradeUuid6(uuid) {
|
|
|
7930
8088
|
const timestampHex = timeHigh + timeMid;
|
|
7931
8089
|
const timestamp = parseInt(timestampHex, 16);
|
|
7932
8090
|
return isNaN(timestamp) ? null : timestamp;
|
|
7933
|
-
} catch
|
|
8091
|
+
} catch {
|
|
7934
8092
|
return null;
|
|
7935
8093
|
}
|
|
7936
8094
|
}
|
|
@@ -7946,72 +8104,60 @@ function processEndpoint(endpoint) {
|
|
|
7946
8104
|
}
|
|
7947
8105
|
|
|
7948
8106
|
// src/utils/account_cap.ts
|
|
7949
|
-
function getOrCreateAccountCap(txb, client, owner) {
|
|
7950
|
-
|
|
7951
|
-
|
|
7952
|
-
if (accountCapStr !== null) {
|
|
7953
|
-
return {
|
|
7954
|
-
accountCap: txb.object(accountCapStr),
|
|
7955
|
-
isCreate: false
|
|
7956
|
-
};
|
|
7957
|
-
}
|
|
7958
|
-
const accountCap = txb.moveCall({
|
|
7959
|
-
target: `${DEEPBOOK_PUBLISHED_AT}::${DEEPBOOK_CLOB_V2_MODULE}::create_account`,
|
|
7960
|
-
typeArguments: [],
|
|
7961
|
-
arguments: []
|
|
7962
|
-
});
|
|
8107
|
+
async function getOrCreateAccountCap(txb, client, owner) {
|
|
8108
|
+
let accountCapStr = await getAccountCap(client, owner);
|
|
8109
|
+
if (accountCapStr !== null) {
|
|
7963
8110
|
return {
|
|
7964
|
-
accountCap,
|
|
7965
|
-
isCreate:
|
|
8111
|
+
accountCap: txb.object(accountCapStr),
|
|
8112
|
+
isCreate: false
|
|
7966
8113
|
};
|
|
8114
|
+
}
|
|
8115
|
+
const accountCap = txb.moveCall({
|
|
8116
|
+
target: `${DEEPBOOK_PUBLISHED_AT}::${DEEPBOOK_CLOB_V2_MODULE}::create_account`,
|
|
8117
|
+
typeArguments: [],
|
|
8118
|
+
arguments: []
|
|
7967
8119
|
});
|
|
8120
|
+
return {
|
|
8121
|
+
accountCap,
|
|
8122
|
+
isCreate: true
|
|
8123
|
+
};
|
|
7968
8124
|
}
|
|
7969
|
-
function getAccountCap(client, owner) {
|
|
7970
|
-
|
|
7971
|
-
|
|
7972
|
-
|
|
7973
|
-
|
|
7974
|
-
|
|
7975
|
-
|
|
7976
|
-
|
|
7977
|
-
|
|
7978
|
-
|
|
7979
|
-
|
|
7980
|
-
|
|
7981
|
-
module: DEEPBOOK_CUSTODIAN_V2_MODULE
|
|
7982
|
-
}
|
|
7983
|
-
}
|
|
7984
|
-
});
|
|
7985
|
-
if (ownedObjects != null && ownedObjects.data != null) {
|
|
7986
|
-
if (ownedObjects.data.length !== 0) {
|
|
7987
|
-
return ownedObjects.data[0].data.objectId;
|
|
7988
|
-
}
|
|
7989
|
-
if (ownedObjects.data.length < 50) {
|
|
7990
|
-
break;
|
|
7991
|
-
}
|
|
7992
|
-
} else {
|
|
7993
|
-
break;
|
|
7994
|
-
}
|
|
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;
|
|
7995
8137
|
}
|
|
7996
|
-
|
|
7997
|
-
|
|
8138
|
+
if (!ownedObjects.hasNextPage) {
|
|
8139
|
+
break;
|
|
8140
|
+
}
|
|
8141
|
+
cursor = ownedObjects.nextCursor ?? void 0;
|
|
8142
|
+
}
|
|
8143
|
+
return null;
|
|
7998
8144
|
}
|
|
7999
8145
|
|
|
8000
8146
|
// src/utils/config.ts
|
|
8001
8147
|
function getAggregatorV2PublishedAt(publishedAt, packages) {
|
|
8002
|
-
if (packages
|
|
8148
|
+
if (packages?.has("aggregator_v2")) {
|
|
8003
8149
|
return packages.get("aggregator_v2");
|
|
8004
8150
|
}
|
|
8005
8151
|
return publishedAt || PUBLISHED_ADDRESSES.V2.Mainnet;
|
|
8006
8152
|
}
|
|
8007
8153
|
function getAggregatorV2ExtendPublishedAt(publishedAt, packages) {
|
|
8008
|
-
if (packages
|
|
8154
|
+
if (packages?.has("aggregator_v2_extend")) {
|
|
8009
8155
|
return packages.get("aggregator_v2_extend");
|
|
8010
8156
|
}
|
|
8011
8157
|
return publishedAt || PUBLISHED_ADDRESSES.V2_EXTEND.Mainnet;
|
|
8012
8158
|
}
|
|
8013
8159
|
function getAggregatorV2Extend2PublishedAt(publishedAt, packages) {
|
|
8014
|
-
if (packages
|
|
8160
|
+
if (packages?.has("aggregator_v2_extend2")) {
|
|
8015
8161
|
return packages.get("aggregator_v2_extend2");
|
|
8016
8162
|
}
|
|
8017
8163
|
return publishedAt || PUBLISHED_ADDRESSES.V2_EXTEND2.Mainnet;
|
|
@@ -8021,8 +8167,9 @@ function getAggregatorV2Extend2PublishedAt(publishedAt, packages) {
|
|
|
8021
8167
|
var import_bn4 = __toESM(require_bn());
|
|
8022
8168
|
function extractGasMetrics(result) {
|
|
8023
8169
|
const effects = result.effects;
|
|
8024
|
-
const
|
|
8025
|
-
if (!
|
|
8170
|
+
const isSuccess = !result.error && effects.status.status === "success";
|
|
8171
|
+
if (!isSuccess) {
|
|
8172
|
+
const errorMsg = result.error ?? effects.status.error ?? "Unknown error";
|
|
8026
8173
|
return {
|
|
8027
8174
|
computationCost: "0",
|
|
8028
8175
|
storageCost: "0",
|
|
@@ -8032,27 +8179,27 @@ function extractGasMetrics(result) {
|
|
|
8032
8179
|
gasUsed: "0",
|
|
8033
8180
|
gasPrice: "0",
|
|
8034
8181
|
success: false,
|
|
8035
|
-
error:
|
|
8182
|
+
error: errorMsg
|
|
8036
8183
|
};
|
|
8037
8184
|
}
|
|
8038
8185
|
const gasUsed = effects.gasUsed;
|
|
8039
8186
|
return {
|
|
8040
|
-
computationCost: gasUsed.computationCost
|
|
8041
|
-
storageCost: gasUsed.storageCost
|
|
8042
|
-
storageRebate: gasUsed.storageRebate
|
|
8043
|
-
nonRefundableStorageFee: gasUsed.nonRefundableStorageFee
|
|
8187
|
+
computationCost: gasUsed.computationCost,
|
|
8188
|
+
storageCost: gasUsed.storageCost,
|
|
8189
|
+
storageRebate: gasUsed.storageRebate,
|
|
8190
|
+
nonRefundableStorageFee: gasUsed.nonRefundableStorageFee,
|
|
8044
8191
|
totalGasCost: calculateTotalGasCost(gasUsed),
|
|
8045
|
-
gasUsed: gasUsed.computationCost
|
|
8192
|
+
gasUsed: gasUsed.computationCost,
|
|
8046
8193
|
gasPrice: "1000",
|
|
8047
8194
|
// Standard Sui gas price in MIST
|
|
8048
8195
|
success: true
|
|
8049
8196
|
};
|
|
8050
8197
|
}
|
|
8051
8198
|
function calculateTotalGasCost(gasUsed) {
|
|
8052
|
-
const computation = new import_bn4.default(gasUsed.computationCost
|
|
8053
|
-
const storage = new import_bn4.default(gasUsed.storageCost
|
|
8054
|
-
const rebate = new import_bn4.default(gasUsed.storageRebate
|
|
8055
|
-
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);
|
|
8056
8203
|
return computation.add(storage).sub(rebate).add(nonRefundable).toString();
|
|
8057
8204
|
}
|
|
8058
8205
|
function calculateGasEfficiency(amountOut, totalGasCost) {
|
|
@@ -8094,12 +8241,12 @@ function calculateAverageGas(analyses) {
|
|
|
8094
8241
|
}
|
|
8095
8242
|
function formatGasMetrics(metrics, isEstimated) {
|
|
8096
8243
|
if (!metrics.success) {
|
|
8097
|
-
return
|
|
8244
|
+
return `Failed: ${metrics.error}`;
|
|
8098
8245
|
}
|
|
8099
8246
|
const totalGas = Number(metrics.totalGasCost);
|
|
8100
8247
|
const gasInSui = totalGas / 1e9;
|
|
8101
8248
|
const estimatedFlag = isEstimated ? " (estimated)" : "";
|
|
8102
|
-
return
|
|
8249
|
+
return `Gas: ${totalGas.toString()} MIST (${gasInSui.toString()} SUI)${estimatedFlag}`;
|
|
8103
8250
|
}
|
|
8104
8251
|
function exportToJSON(comparison) {
|
|
8105
8252
|
return JSON.stringify(comparison, null, 2);
|
|
@@ -8167,63 +8314,62 @@ function exportToCSV(comparison) {
|
|
|
8167
8314
|
// src/utils/msafe.ts
|
|
8168
8315
|
var import_bn5 = __toESM(require_bn());
|
|
8169
8316
|
var dealWithFastRouterSwapParamsForMsafe = (data) => {
|
|
8170
|
-
|
|
8171
|
-
|
|
8172
|
-
amountIn:
|
|
8173
|
-
amountOut:
|
|
8174
|
-
paths:
|
|
8175
|
-
|
|
8176
|
-
|
|
8177
|
-
amountIn:
|
|
8178
|
-
amountOut:
|
|
8179
|
-
}
|
|
8180
|
-
if (item
|
|
8181
|
-
info["initialPrice"] =
|
|
8182
|
-
}
|
|
8183
|
-
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) {
|
|
8184
8331
|
info["extendedDetails"] = {
|
|
8185
|
-
after_sqrt_price:
|
|
8332
|
+
after_sqrt_price: item?.extendedDetails?.afterSqrtPrice?.toString()
|
|
8186
8333
|
};
|
|
8187
8334
|
}
|
|
8188
8335
|
return info;
|
|
8189
8336
|
})
|
|
8190
|
-
}
|
|
8337
|
+
};
|
|
8191
8338
|
return result;
|
|
8192
8339
|
};
|
|
8193
8340
|
var restituteMsafeFastRouterSwapParams = (data) => {
|
|
8194
|
-
|
|
8195
|
-
|
|
8196
|
-
amountIn: new import_bn5.default(data
|
|
8197
|
-
amountOut: new import_bn5.default(data
|
|
8198
|
-
paths:
|
|
8199
|
-
|
|
8200
|
-
|
|
8201
|
-
|
|
8202
|
-
|
|
8203
|
-
|
|
8204
|
-
|
|
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) {
|
|
8205
8353
|
info["extendedDetails"] = {
|
|
8206
|
-
after_sqrt_price: new decimal_default(
|
|
8354
|
+
after_sqrt_price: new decimal_default(item?.extendedDetails?.after_sqrt_price?.toString())
|
|
8207
8355
|
};
|
|
8208
8356
|
}
|
|
8209
8357
|
return info;
|
|
8210
8358
|
})
|
|
8211
|
-
}
|
|
8359
|
+
};
|
|
8212
8360
|
return result;
|
|
8213
8361
|
};
|
|
8214
8362
|
|
|
8215
8363
|
// src/utils/transaction.ts
|
|
8216
|
-
function printTransaction(tx, isPrint = true) {
|
|
8217
|
-
|
|
8218
|
-
|
|
8219
|
-
|
|
8220
|
-
|
|
8221
|
-
|
|
8222
|
-
|
|
8223
|
-
|
|
8224
|
-
|
|
8225
|
-
}
|
|
8226
|
-
});
|
|
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
|
+
}
|
|
8227
8373
|
});
|
|
8228
8374
|
}
|
|
8229
8375
|
function bigIntReplacer(key, value) {
|
|
@@ -8295,7 +8441,7 @@ var HaedalHMMV2Router = class {
|
|
|
8295
8441
|
// amount_in
|
|
8296
8442
|
txb.pure.bool(swapData.a2b),
|
|
8297
8443
|
// a2b
|
|
8298
|
-
txb.object(
|
|
8444
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8299
8445
|
// clock
|
|
8300
8446
|
];
|
|
8301
8447
|
txb.moveCall({
|
|
@@ -8345,7 +8491,7 @@ var FullsailRouter = class {
|
|
|
8345
8491
|
txb.object(swapData.poolId),
|
|
8346
8492
|
txb.pure.bool(swapData.direction),
|
|
8347
8493
|
txb.pure.u64(swapData.amountIn),
|
|
8348
|
-
txb.object(
|
|
8494
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8349
8495
|
];
|
|
8350
8496
|
txb.moveCall({
|
|
8351
8497
|
target: `${swapData.publishedAt}::fullsail::swap`,
|
|
@@ -8360,7 +8506,7 @@ var CetusDlmmRouter = class {
|
|
|
8360
8506
|
throw new Error("CetusRouter only supported on mainnet");
|
|
8361
8507
|
}
|
|
8362
8508
|
this.globalConfig = "0xf31b605d117f959b9730e8c07b08b856cb05143c5e81d5751c90d2979e82f599";
|
|
8363
|
-
this.partner = partner
|
|
8509
|
+
this.partner = partner ?? "0x59ae16f6c42f578063c2da9b9c0173fe58120ceae08e40fd8212c8eceb80bb86";
|
|
8364
8510
|
this.versioned = "0x05370b2d656612dd5759cbe80463de301e3b94a921dfc72dd9daa2ecdeb2d0a8";
|
|
8365
8511
|
}
|
|
8366
8512
|
swap(txb, flattenedPath, swapContext, _extends) {
|
|
@@ -8392,7 +8538,7 @@ var CetusDlmmRouter = class {
|
|
|
8392
8538
|
txb.pure.bool(swapData.direction),
|
|
8393
8539
|
txb.pure.u64(swapData.amountIn),
|
|
8394
8540
|
txb.object(this.versioned),
|
|
8395
|
-
txb.object(
|
|
8541
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8396
8542
|
];
|
|
8397
8543
|
txb.moveCall({
|
|
8398
8544
|
target: `${swapData.publishedAt}::cetus_dlmm::swap`,
|
|
@@ -8435,7 +8581,7 @@ var FerraDlmmRouter = class {
|
|
|
8435
8581
|
txb.object(swapData.poolId),
|
|
8436
8582
|
txb.pure.bool(swapData.direction),
|
|
8437
8583
|
txb.pure.u64(swapData.amountIn),
|
|
8438
|
-
txb.object(
|
|
8584
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8439
8585
|
];
|
|
8440
8586
|
txb.moveCall({
|
|
8441
8587
|
target: `${swapData.publishedAt}::ferra_dlmm::swap`,
|
|
@@ -8478,7 +8624,7 @@ var FerraClmmRouter = class {
|
|
|
8478
8624
|
txb.object(swapData.poolId),
|
|
8479
8625
|
txb.pure.bool(swapData.direction),
|
|
8480
8626
|
txb.pure.u64(swapData.amountIn),
|
|
8481
|
-
txb.object(
|
|
8627
|
+
txb.object(SUI_CLOCK_OBJECT_ID)
|
|
8482
8628
|
];
|
|
8483
8629
|
txb.moveCall({
|
|
8484
8630
|
target: `${swapData.publishedAt}::ferra_clmm::swap`,
|
|
@@ -8620,17 +8766,18 @@ function findPythPriceIDs(paths) {
|
|
|
8620
8766
|
}
|
|
8621
8767
|
var _AggregatorClient = class _AggregatorClient {
|
|
8622
8768
|
constructor(params) {
|
|
8623
|
-
var _a, _b;
|
|
8624
8769
|
this.endpoint = params.endpoint ? processEndpoint(params.endpoint) : DEFAULT_ENDPOINT;
|
|
8625
|
-
|
|
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 });
|
|
8626
8773
|
this.signer = params.signer || "";
|
|
8627
8774
|
this.env = params.env || 0 /* Mainnet */;
|
|
8628
8775
|
const config2 = _AggregatorClient.CONFIG[this.env];
|
|
8629
|
-
this.
|
|
8630
|
-
this.pythClient = new pythSuiJs.SuiPythClient(
|
|
8776
|
+
this.pythAdapter = new PythAdapter(
|
|
8631
8777
|
this.client,
|
|
8632
8778
|
config2.pythStateId,
|
|
8633
|
-
config2.wormholeStateId
|
|
8779
|
+
config2.wormholeStateId,
|
|
8780
|
+
params.pythUrls ?? []
|
|
8634
8781
|
);
|
|
8635
8782
|
this.apiKey = params.apiKey || "";
|
|
8636
8783
|
this.partner = params.partner;
|
|
@@ -8649,16 +8796,7 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
8649
8796
|
} else {
|
|
8650
8797
|
this.overlayFeeRate = 0;
|
|
8651
8798
|
}
|
|
8652
|
-
this.overlayFeeReceiver =
|
|
8653
|
-
}
|
|
8654
|
-
newPythClients(pythUrls) {
|
|
8655
|
-
if (!pythUrls.includes("https://hermes.pyth.network")) {
|
|
8656
|
-
pythUrls.push("https://hermes.pyth.network");
|
|
8657
|
-
}
|
|
8658
|
-
const connections = pythUrls.map(
|
|
8659
|
-
(url) => new pythSuiJs.SuiPriceServiceConnection(url, { timeout: 3e3 })
|
|
8660
|
-
);
|
|
8661
|
-
return connections;
|
|
8799
|
+
this.overlayFeeReceiver = params.overlayFeeReceiver ?? CLIENT_CONFIG.DEFAULT_OVERLAY_FEE_RECEIVER;
|
|
8662
8800
|
}
|
|
8663
8801
|
deepbookv3DeepFeeType() {
|
|
8664
8802
|
if (this.env === 0 /* Mainnet */) {
|
|
@@ -8667,53 +8805,43 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
8667
8805
|
return DEEPBOOK_V3_DEEP_FEE_TYPES.Testnet;
|
|
8668
8806
|
}
|
|
8669
8807
|
}
|
|
8670
|
-
getDeepbookV3Config() {
|
|
8671
|
-
return
|
|
8672
|
-
return yield getDeepbookV3Config(this.endpoint);
|
|
8673
|
-
});
|
|
8808
|
+
async getDeepbookV3Config() {
|
|
8809
|
+
return await getDeepbookV3Config(this.endpoint);
|
|
8674
8810
|
}
|
|
8675
|
-
getOneCoinUsedToMerge(coinType) {
|
|
8676
|
-
|
|
8677
|
-
|
|
8678
|
-
|
|
8679
|
-
|
|
8680
|
-
|
|
8681
|
-
|
|
8682
|
-
|
|
8683
|
-
|
|
8684
|
-
return gotCoin.data[0].coinObjectId;
|
|
8685
|
-
}
|
|
8686
|
-
return null;
|
|
8687
|
-
} catch (error) {
|
|
8688
|
-
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;
|
|
8689
8820
|
}
|
|
8690
|
-
|
|
8821
|
+
return null;
|
|
8822
|
+
} catch (error) {
|
|
8823
|
+
return null;
|
|
8824
|
+
}
|
|
8691
8825
|
}
|
|
8692
|
-
findRouters(params) {
|
|
8693
|
-
return
|
|
8694
|
-
|
|
8695
|
-
|
|
8696
|
-
|
|
8697
|
-
|
|
8698
|
-
|
|
8699
|
-
|
|
8700
|
-
);
|
|
8701
|
-
});
|
|
8826
|
+
async findRouters(params) {
|
|
8827
|
+
return getRouterResult(
|
|
8828
|
+
this.endpoint,
|
|
8829
|
+
this.apiKey,
|
|
8830
|
+
params,
|
|
8831
|
+
this.overlayFeeRate,
|
|
8832
|
+
this.overlayFeeReceiver
|
|
8833
|
+
);
|
|
8702
8834
|
}
|
|
8703
|
-
findMergeSwapRouters(params) {
|
|
8704
|
-
return
|
|
8705
|
-
|
|
8706
|
-
|
|
8707
|
-
|
|
8708
|
-
|
|
8709
|
-
|
|
8710
|
-
|
|
8711
|
-
);
|
|
8712
|
-
});
|
|
8835
|
+
async findMergeSwapRouters(params) {
|
|
8836
|
+
return getMergeSwapResult(
|
|
8837
|
+
this.endpoint,
|
|
8838
|
+
this.apiKey,
|
|
8839
|
+
params,
|
|
8840
|
+
this.overlayFeeRate,
|
|
8841
|
+
this.overlayFeeReceiver
|
|
8842
|
+
);
|
|
8713
8843
|
}
|
|
8714
|
-
executeFlexibleInputSwap(txb, inputCoin, routerData, expectedAmountOut, amountLimit, pythPriceIDs, partner, deepbookv3DeepFee, packages) {
|
|
8715
|
-
return __async(this, null, function* () {
|
|
8716
|
-
});
|
|
8844
|
+
async executeFlexibleInputSwap(txb, inputCoin, routerData, expectedAmountOut, amountLimit, pythPriceIDs, partner, deepbookv3DeepFee, packages) {
|
|
8717
8845
|
}
|
|
8718
8846
|
newDexRouterV3(provider, pythPriceIDs, partner, cetusDlmmPartner) {
|
|
8719
8847
|
switch (provider) {
|
|
@@ -9099,55 +9227,53 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9099
9227
|
);
|
|
9100
9228
|
return outputCoin;
|
|
9101
9229
|
}
|
|
9102
|
-
routerSwap(params) {
|
|
9103
|
-
|
|
9104
|
-
|
|
9105
|
-
|
|
9106
|
-
|
|
9107
|
-
|
|
9108
|
-
|
|
9109
|
-
|
|
9110
|
-
|
|
9111
|
-
|
|
9112
|
-
|
|
9113
|
-
|
|
9114
|
-
|
|
9115
|
-
|
|
9116
|
-
|
|
9117
|
-
|
|
9118
|
-
|
|
9119
|
-
|
|
9120
|
-
|
|
9121
|
-
|
|
9122
|
-
|
|
9123
|
-
|
|
9124
|
-
|
|
9125
|
-
|
|
9126
|
-
|
|
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
|
|
9127
9266
|
);
|
|
9128
|
-
|
|
9129
|
-
|
|
9130
|
-
|
|
9131
|
-
|
|
9132
|
-
|
|
9133
|
-
|
|
9134
|
-
|
|
9135
|
-
|
|
9136
|
-
|
|
9137
|
-
|
|
9138
|
-
partner != null ? partner : this.partner
|
|
9139
|
-
);
|
|
9140
|
-
} else {
|
|
9141
|
-
return this.expectOutputSwapV3(
|
|
9142
|
-
txb,
|
|
9143
|
-
inputCoin,
|
|
9144
|
-
router,
|
|
9145
|
-
amountOut.toString(),
|
|
9146
|
-
amountLimit.toString(),
|
|
9147
|
-
partner != null ? partner : this.partner
|
|
9148
|
-
);
|
|
9149
|
-
}
|
|
9150
|
-
});
|
|
9267
|
+
} else {
|
|
9268
|
+
return this.expectOutputSwapV3(
|
|
9269
|
+
txb,
|
|
9270
|
+
inputCoin,
|
|
9271
|
+
router,
|
|
9272
|
+
amountOut.toString(),
|
|
9273
|
+
amountLimit.toString(),
|
|
9274
|
+
partner ?? this.partner
|
|
9275
|
+
);
|
|
9276
|
+
}
|
|
9151
9277
|
}
|
|
9152
9278
|
/**
|
|
9153
9279
|
* Router swap with max amount in validation.
|
|
@@ -9158,434 +9284,402 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9158
9284
|
* @returns TransactionObjectArgument - The output coin from the swap
|
|
9159
9285
|
* @throws Error if input coin amount exceeds maxAmountIn
|
|
9160
9286
|
*/
|
|
9161
|
-
routerSwapWithMaxAmountIn(params) {
|
|
9162
|
-
|
|
9163
|
-
|
|
9164
|
-
|
|
9165
|
-
|
|
9166
|
-
|
|
9167
|
-
|
|
9168
|
-
|
|
9169
|
-
|
|
9170
|
-
|
|
9171
|
-
|
|
9172
|
-
|
|
9173
|
-
|
|
9174
|
-
|
|
9175
|
-
|
|
9176
|
-
|
|
9177
|
-
|
|
9178
|
-
|
|
9179
|
-
|
|
9180
|
-
|
|
9181
|
-
|
|
9182
|
-
|
|
9183
|
-
|
|
9184
|
-
|
|
9185
|
-
|
|
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
|
|
9186
9324
|
);
|
|
9187
|
-
|
|
9188
|
-
|
|
9189
|
-
|
|
9190
|
-
|
|
9191
|
-
|
|
9192
|
-
|
|
9193
|
-
|
|
9194
|
-
|
|
9195
|
-
|
|
9196
|
-
|
|
9197
|
-
|
|
9198
|
-
partner != null ? partner : this.partner
|
|
9199
|
-
);
|
|
9200
|
-
} else {
|
|
9201
|
-
return this.expectOutputSwapV3WithMaxAmountIn(
|
|
9202
|
-
txb,
|
|
9203
|
-
inputCoin,
|
|
9204
|
-
router,
|
|
9205
|
-
maxAmountIn,
|
|
9206
|
-
amountOut.toString(),
|
|
9207
|
-
amountLimit.toString(),
|
|
9208
|
-
partner != null ? partner : this.partner
|
|
9209
|
-
);
|
|
9210
|
-
}
|
|
9211
|
-
});
|
|
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
|
+
}
|
|
9212
9336
|
}
|
|
9213
9337
|
// auto build input coin
|
|
9214
9338
|
// auto merge, transfer or destory target coin.
|
|
9215
|
-
fastRouterSwap(params) {
|
|
9216
|
-
|
|
9217
|
-
|
|
9218
|
-
|
|
9219
|
-
|
|
9220
|
-
|
|
9221
|
-
|
|
9222
|
-
|
|
9223
|
-
|
|
9224
|
-
|
|
9225
|
-
|
|
9226
|
-
|
|
9227
|
-
|
|
9228
|
-
|
|
9229
|
-
router.amountIn.mul(new import_bn6.default(this.overlayFeeRate)).div(new import_bn6.default(1e6)).toString()
|
|
9230
|
-
);
|
|
9231
|
-
}
|
|
9232
|
-
const expectedAmountOut = byAmountIn ? router.amountOut.sub(new import_bn6.default(overlayFee)) : router.amountOut;
|
|
9233
|
-
const expectedAmountIn = byAmountIn ? router.amountIn : router.amountIn.add(new import_bn6.default(overlayFee));
|
|
9234
|
-
const amountLimit = CalculateAmountLimit(
|
|
9235
|
-
byAmountIn ? expectedAmountOut : expectedAmountIn,
|
|
9236
|
-
byAmountIn,
|
|
9237
|
-
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()
|
|
9238
9353
|
);
|
|
9239
|
-
|
|
9240
|
-
|
|
9241
|
-
|
|
9242
|
-
|
|
9243
|
-
|
|
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()
|
|
9244
9373
|
});
|
|
9245
|
-
|
|
9246
|
-
|
|
9247
|
-
|
|
9248
|
-
|
|
9249
|
-
|
|
9250
|
-
|
|
9251
|
-
|
|
9252
|
-
|
|
9253
|
-
|
|
9254
|
-
|
|
9255
|
-
|
|
9256
|
-
|
|
9257
|
-
|
|
9258
|
-
|
|
9259
|
-
|
|
9260
|
-
|
|
9261
|
-
if (CoinUtils.isSuiCoin(targetCoinType)) {
|
|
9262
|
-
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]);
|
|
9263
9390
|
} else {
|
|
9264
|
-
|
|
9265
|
-
|
|
9266
|
-
|
|
9267
|
-
|
|
9268
|
-
|
|
9269
|
-
|
|
9270
|
-
|
|
9271
|
-
|
|
9272
|
-
packages: router.packages
|
|
9273
|
-
},
|
|
9274
|
-
txb
|
|
9275
|
-
);
|
|
9276
|
-
}
|
|
9277
|
-
}
|
|
9278
|
-
});
|
|
9279
|
-
}
|
|
9280
|
-
mergeSwap(params) {
|
|
9281
|
-
return __async(this, null, function* () {
|
|
9282
|
-
const { router, inputCoins, slippage, txb, partner } = params;
|
|
9283
|
-
if (slippage > 1 || slippage < 0) {
|
|
9284
|
-
throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
|
|
9285
|
-
}
|
|
9286
|
-
if (!router.packages || !router.packages.get(PACKAGE_NAMES.AGGREGATOR_V3)) {
|
|
9287
|
-
throw new Error(CLIENT_CONFIG.ERRORS.PACKAGES_REQUIRED);
|
|
9288
|
-
}
|
|
9289
|
-
if (!router.allRoutes || router.allRoutes.length === 0) {
|
|
9290
|
-
throw new Error("No routes found in merge swap response");
|
|
9291
|
-
}
|
|
9292
|
-
const outputCoins = [];
|
|
9293
|
-
for (let i = 0; i < router.allRoutes.length && i < inputCoins.length; i++) {
|
|
9294
|
-
const route = router.allRoutes[i];
|
|
9295
|
-
const inputCoin = inputCoins[i];
|
|
9296
|
-
const routeRouter = {
|
|
9297
|
-
quoteID: router.quoteID,
|
|
9298
|
-
amountIn: route.amountIn,
|
|
9299
|
-
amountOut: route.amountOut,
|
|
9300
|
-
deviationRatio: Number(route.deviationRatio),
|
|
9301
|
-
byAmountIn: true,
|
|
9302
|
-
// Merge swap is always by amount in
|
|
9303
|
-
paths: route.paths,
|
|
9304
|
-
insufficientLiquidity: false,
|
|
9305
|
-
packages: router.packages
|
|
9306
|
-
};
|
|
9307
|
-
const routerParams = {
|
|
9308
|
-
router: routeRouter,
|
|
9309
|
-
inputCoin: inputCoin.coin,
|
|
9310
|
-
slippage,
|
|
9311
|
-
txb,
|
|
9312
|
-
partner: partner != null ? partner : this.partner
|
|
9313
|
-
};
|
|
9314
|
-
const outputCoin = yield this.routerSwap(routerParams);
|
|
9315
|
-
outputCoins.push(outputCoin);
|
|
9316
|
-
}
|
|
9317
|
-
if (outputCoins.length === 0) {
|
|
9318
|
-
throw new Error("No output coins generated from merge swap");
|
|
9319
|
-
}
|
|
9320
|
-
let finalOutputCoin = outputCoins[0];
|
|
9321
|
-
if (outputCoins.length > 1) {
|
|
9322
|
-
txb.mergeCoins(finalOutputCoin, outputCoins.slice(1));
|
|
9391
|
+
transferOrDestroyCoin(
|
|
9392
|
+
{
|
|
9393
|
+
coin: targetCoin,
|
|
9394
|
+
coinType: targetCoinType,
|
|
9395
|
+
packages: router.packages
|
|
9396
|
+
},
|
|
9397
|
+
txb
|
|
9398
|
+
);
|
|
9323
9399
|
}
|
|
9324
|
-
|
|
9325
|
-
});
|
|
9400
|
+
}
|
|
9326
9401
|
}
|
|
9327
|
-
|
|
9328
|
-
|
|
9329
|
-
|
|
9330
|
-
|
|
9331
|
-
|
|
9332
|
-
|
|
9333
|
-
|
|
9334
|
-
|
|
9335
|
-
|
|
9336
|
-
|
|
9337
|
-
|
|
9338
|
-
|
|
9339
|
-
|
|
9340
|
-
|
|
9341
|
-
|
|
9342
|
-
|
|
9343
|
-
|
|
9344
|
-
|
|
9345
|
-
|
|
9346
|
-
|
|
9347
|
-
|
|
9348
|
-
|
|
9349
|
-
|
|
9350
|
-
|
|
9351
|
-
router
|
|
9352
|
-
|
|
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,
|
|
9353
9431
|
slippage,
|
|
9354
9432
|
txb,
|
|
9355
|
-
partner: partner
|
|
9356
|
-
};
|
|
9357
|
-
const
|
|
9358
|
-
|
|
9359
|
-
|
|
9360
|
-
|
|
9361
|
-
|
|
9362
|
-
|
|
9363
|
-
|
|
9364
|
-
|
|
9365
|
-
|
|
9366
|
-
|
|
9367
|
-
|
|
9368
|
-
|
|
9369
|
-
|
|
9370
|
-
|
|
9371
|
-
|
|
9372
|
-
|
|
9373
|
-
|
|
9374
|
-
|
|
9375
|
-
|
|
9376
|
-
|
|
9377
|
-
|
|
9378
|
-
|
|
9379
|
-
const
|
|
9380
|
-
|
|
9381
|
-
|
|
9382
|
-
|
|
9383
|
-
|
|
9384
|
-
|
|
9385
|
-
)
|
|
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]);
|
|
9386
9483
|
} else {
|
|
9387
|
-
|
|
9388
|
-
|
|
9484
|
+
transferOrDestroyCoin(
|
|
9485
|
+
{
|
|
9486
|
+
coin: targetCoin,
|
|
9487
|
+
coinType: targetCoinType,
|
|
9488
|
+
packages: router.packages
|
|
9489
|
+
},
|
|
9490
|
+
txb
|
|
9389
9491
|
);
|
|
9390
9492
|
}
|
|
9391
|
-
|
|
9392
|
-
|
|
9393
|
-
|
|
9394
|
-
|
|
9395
|
-
|
|
9396
|
-
|
|
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()
|
|
9397
9502
|
);
|
|
9398
|
-
|
|
9399
|
-
|
|
9400
|
-
|
|
9401
|
-
|
|
9402
|
-
|
|
9403
|
-
|
|
9404
|
-
|
|
9405
|
-
|
|
9406
|
-
|
|
9407
|
-
|
|
9408
|
-
|
|
9409
|
-
|
|
9410
|
-
|
|
9411
|
-
|
|
9412
|
-
|
|
9413
|
-
|
|
9414
|
-
|
|
9415
|
-
|
|
9416
|
-
|
|
9417
|
-
|
|
9418
|
-
)
|
|
9419
|
-
|
|
9420
|
-
|
|
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
|
+
}
|
|
9421
9537
|
}
|
|
9422
|
-
swapInPools(params) {
|
|
9423
|
-
|
|
9424
|
-
|
|
9425
|
-
|
|
9426
|
-
|
|
9427
|
-
|
|
9428
|
-
|
|
9429
|
-
|
|
9430
|
-
|
|
9431
|
-
|
|
9432
|
-
|
|
9433
|
-
const
|
|
9434
|
-
|
|
9435
|
-
|
|
9436
|
-
|
|
9437
|
-
|
|
9438
|
-
|
|
9439
|
-
|
|
9440
|
-
|
|
9441
|
-
|
|
9442
|
-
|
|
9443
|
-
arguments: args,
|
|
9444
|
-
typeArguments
|
|
9445
|
-
});
|
|
9446
|
-
}
|
|
9447
|
-
if (!this.signer) {
|
|
9448
|
-
this.signer = "0x0";
|
|
9449
|
-
}
|
|
9450
|
-
const simulateRes = yield this.client.devInspectTransactionBlock({
|
|
9451
|
-
transactionBlock: tx,
|
|
9452
|
-
sender: this.signer
|
|
9453
|
-
});
|
|
9454
|
-
if (simulateRes.error != null) {
|
|
9455
|
-
throw new Error("Simulation error: " + simulateRes.error);
|
|
9456
|
-
}
|
|
9457
|
-
const valueData = (_a = simulateRes.events) == null ? void 0 : _a.filter((item) => {
|
|
9458
|
-
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
|
|
9459
9559
|
});
|
|
9460
|
-
|
|
9461
|
-
|
|
9462
|
-
|
|
9463
|
-
|
|
9464
|
-
|
|
9465
|
-
|
|
9466
|
-
|
|
9467
|
-
|
|
9468
|
-
|
|
9469
|
-
|
|
9470
|
-
|
|
9471
|
-
|
|
9472
|
-
|
|
9473
|
-
|
|
9474
|
-
|
|
9475
|
-
|
|
9476
|
-
|
|
9477
|
-
|
|
9478
|
-
|
|
9479
|
-
|
|
9480
|
-
|
|
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;
|
|
9481
9594
|
}
|
|
9482
9595
|
}
|
|
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
|
-
|
|
9514
|
-
|
|
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
|
|
9515
9629
|
}
|
|
9516
|
-
],
|
|
9517
|
-
insufficientLiquidity: false,
|
|
9518
|
-
byAmountIn: params.byAmountIn,
|
|
9519
|
-
quoteID: `degraded-${generateUUID()}`,
|
|
9520
|
-
packages: /* @__PURE__ */ new Map([
|
|
9521
|
-
[
|
|
9522
|
-
PACKAGE_NAMES.AGGREGATOR_V3,
|
|
9523
|
-
aggregatorV3PublishedAt
|
|
9524
|
-
]
|
|
9525
|
-
])
|
|
9526
|
-
};
|
|
9527
|
-
const result = {
|
|
9528
|
-
isExceed: event.is_exceed,
|
|
9529
|
-
routeData
|
|
9530
|
-
};
|
|
9531
|
-
return result;
|
|
9532
|
-
});
|
|
9533
|
-
}
|
|
9534
|
-
updatePythPriceIDs(priceIDs, txb) {
|
|
9535
|
-
return __async(this, null, function* () {
|
|
9536
|
-
let priceUpdateData = null;
|
|
9537
|
-
let lastError = null;
|
|
9538
|
-
for (const connection of this.pythConnections) {
|
|
9539
|
-
try {
|
|
9540
|
-
priceUpdateData = yield connection.getPriceFeedsUpdateData(priceIDs);
|
|
9541
|
-
break;
|
|
9542
|
-
} catch (e) {
|
|
9543
|
-
lastError = e;
|
|
9544
|
-
console.log("Error: ", e);
|
|
9545
|
-
continue;
|
|
9546
9630
|
}
|
|
9547
|
-
|
|
9548
|
-
|
|
9549
|
-
|
|
9550
|
-
|
|
9551
|
-
|
|
9552
|
-
|
|
9553
|
-
|
|
9554
|
-
|
|
9555
|
-
|
|
9556
|
-
|
|
9557
|
-
|
|
9558
|
-
|
|
9559
|
-
|
|
9560
|
-
|
|
9561
|
-
|
|
9562
|
-
|
|
9563
|
-
);
|
|
9564
|
-
}
|
|
9565
|
-
let priceInfoObjectIdsMap = /* @__PURE__ */ new Map();
|
|
9566
|
-
for (let i = 0; i < priceIDs.length; i++) {
|
|
9567
|
-
priceInfoObjectIdsMap.set(priceIDs[i], priceInfoObjectIds[i]);
|
|
9568
|
-
}
|
|
9569
|
-
return priceInfoObjectIdsMap;
|
|
9570
|
-
});
|
|
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;
|
|
9571
9647
|
}
|
|
9572
|
-
|
|
9573
|
-
|
|
9574
|
-
|
|
9575
|
-
|
|
9576
|
-
|
|
9577
|
-
|
|
9578
|
-
|
|
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
|
|
9579
9673
|
});
|
|
9674
|
+
return res;
|
|
9580
9675
|
}
|
|
9581
|
-
sendTransaction(txb, signer) {
|
|
9582
|
-
|
|
9583
|
-
|
|
9584
|
-
|
|
9585
|
-
|
|
9586
|
-
});
|
|
9587
|
-
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 }
|
|
9588
9681
|
});
|
|
9682
|
+
return res;
|
|
9589
9683
|
}
|
|
9590
9684
|
};
|
|
9591
9685
|
_AggregatorClient.CONFIG = {
|
|
@@ -9654,174 +9748,4 @@ decimal.js/decimal.mjs:
|
|
|
9654
9748
|
*)
|
|
9655
9749
|
*/
|
|
9656
9750
|
|
|
9657
|
-
|
|
9658
|
-
exports.AFTERMATH = AFTERMATH;
|
|
9659
|
-
exports.AFTERMATH_AMM = AFTERMATH_AMM;
|
|
9660
|
-
exports.AFTERMATH_MODULE = AFTERMATH_MODULE;
|
|
9661
|
-
exports.AGGREGATOR = AGGREGATOR;
|
|
9662
|
-
exports.AGGREGATOR_V3_CONFIG = AGGREGATOR_V3_CONFIG;
|
|
9663
|
-
exports.ALL_DEXES = ALL_DEXES;
|
|
9664
|
-
exports.ALPHAFI = ALPHAFI;
|
|
9665
|
-
exports.AggregatorClient = AggregatorClient;
|
|
9666
|
-
exports.AggregatorConfig = AggregatorConfig;
|
|
9667
|
-
exports.AggregatorError = AggregatorError;
|
|
9668
|
-
exports.AggregatorServerErrorCode = AggregatorServerErrorCode;
|
|
9669
|
-
exports.BLUEFIN = BLUEFIN;
|
|
9670
|
-
exports.BLUEMOVE = BLUEMOVE;
|
|
9671
|
-
exports.CETUS = CETUS;
|
|
9672
|
-
exports.CETUSDLMM = CETUSDLMM;
|
|
9673
|
-
exports.CETUS_DEX = CETUS_DEX;
|
|
9674
|
-
exports.CETUS_MODULE = CETUS_MODULE;
|
|
9675
|
-
exports.CETUS_PUBLISHED_AT = CETUS_PUBLISHED_AT;
|
|
9676
|
-
exports.CHECK_COINS_THRESHOLD_FUNC = CHECK_COINS_THRESHOLD_FUNC;
|
|
9677
|
-
exports.CLIENT_CONFIG = CLIENT_CONFIG;
|
|
9678
|
-
exports.CLOCK_ADDRESS = CLOCK_ADDRESS;
|
|
9679
|
-
exports.CoinInfoAddress = CoinInfoAddress;
|
|
9680
|
-
exports.CoinStoreAddress = CoinStoreAddress;
|
|
9681
|
-
exports.CoinUtils = CoinUtils;
|
|
9682
|
-
exports.ConfigErrorCode = ConfigErrorCode;
|
|
9683
|
-
exports.DEEPBOOKV2 = DEEPBOOKV2;
|
|
9684
|
-
exports.DEEPBOOKV3 = DEEPBOOKV3;
|
|
9685
|
-
exports.DEEPBOOK_CLOB_V2_MODULE = DEEPBOOK_CLOB_V2_MODULE;
|
|
9686
|
-
exports.DEEPBOOK_CUSTODIAN_V2_MODULE = DEEPBOOK_CUSTODIAN_V2_MODULE;
|
|
9687
|
-
exports.DEEPBOOK_DEX = DEEPBOOK_DEX;
|
|
9688
|
-
exports.DEEPBOOK_MODULE = DEEPBOOK_MODULE;
|
|
9689
|
-
exports.DEEPBOOK_PACKAGE_ID = DEEPBOOK_PACKAGE_ID;
|
|
9690
|
-
exports.DEEPBOOK_PUBLISHED_AT = DEEPBOOK_PUBLISHED_AT;
|
|
9691
|
-
exports.DEEPBOOK_V3_DEEP_FEE_TYPES = DEEPBOOK_V3_DEEP_FEE_TYPES;
|
|
9692
|
-
exports.DEFAULT_AGG_V2_ENDPOINT = DEFAULT_AGG_V2_ENDPOINT;
|
|
9693
|
-
exports.DEFAULT_AGG_V3_ENDPOINT = DEFAULT_AGG_V3_ENDPOINT;
|
|
9694
|
-
exports.DEFAULT_ENDPOINT = DEFAULT_ENDPOINT;
|
|
9695
|
-
exports.DEFAULT_GAS_BUDGET_FOR_MERGE = DEFAULT_GAS_BUDGET_FOR_MERGE;
|
|
9696
|
-
exports.DEFAULT_GAS_BUDGET_FOR_SPLIT = DEFAULT_GAS_BUDGET_FOR_SPLIT;
|
|
9697
|
-
exports.DEFAULT_GAS_BUDGET_FOR_STAKE = DEFAULT_GAS_BUDGET_FOR_STAKE;
|
|
9698
|
-
exports.DEFAULT_GAS_BUDGET_FOR_TRANSFER = DEFAULT_GAS_BUDGET_FOR_TRANSFER;
|
|
9699
|
-
exports.DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI = DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI;
|
|
9700
|
-
exports.DEFAULT_NFT_TRANSFER_GAS_FEE = DEFAULT_NFT_TRANSFER_GAS_FEE;
|
|
9701
|
-
exports.Env = Env;
|
|
9702
|
-
exports.FERRACLMM = FERRACLMM;
|
|
9703
|
-
exports.FERRADLMM = FERRADLMM;
|
|
9704
|
-
exports.FLOWXV2 = FLOWXV2;
|
|
9705
|
-
exports.FLOWXV3 = FLOWXV3;
|
|
9706
|
-
exports.FLOWX_AMM = FLOWX_AMM;
|
|
9707
|
-
exports.FLOWX_AMM_MODULE = FLOWX_AMM_MODULE;
|
|
9708
|
-
exports.FULLSAIL = FULLSAIL;
|
|
9709
|
-
exports.FlashSwapA2BFunc = FlashSwapA2BFunc;
|
|
9710
|
-
exports.FlashSwapB2AFunc = FlashSwapB2AFunc;
|
|
9711
|
-
exports.FlashSwapFunc = FlashSwapFunc;
|
|
9712
|
-
exports.FlashSwapWithPartnerA2BFunc = FlashSwapWithPartnerA2BFunc;
|
|
9713
|
-
exports.FlashSwapWithPartnerB2AFunc = FlashSwapWithPartnerB2AFunc;
|
|
9714
|
-
exports.FlashSwapWithPartnerFunc = FlashSwapWithPartnerFunc;
|
|
9715
|
-
exports.GAS_SYMBOL = GAS_SYMBOL;
|
|
9716
|
-
exports.GAS_TYPE_ARG = GAS_TYPE_ARG;
|
|
9717
|
-
exports.GAS_TYPE_ARG_LONG = GAS_TYPE_ARG_LONG;
|
|
9718
|
-
exports.HAEDAL = HAEDAL;
|
|
9719
|
-
exports.HAEDALHMMV2 = HAEDALHMMV2;
|
|
9720
|
-
exports.HAEDALPMM = HAEDALPMM;
|
|
9721
|
-
exports.HAWAL = HAWAL;
|
|
9722
|
-
exports.INTEGRATE = INTEGRATE;
|
|
9723
|
-
exports.JOIN_FUNC = JOIN_FUNC;
|
|
9724
|
-
exports.KRIYA = KRIYA;
|
|
9725
|
-
exports.KRIYAV3 = KRIYAV3;
|
|
9726
|
-
exports.KRIYA_DEX = KRIYA_DEX;
|
|
9727
|
-
exports.KRIYA_MODULE = KRIYA_MODULE;
|
|
9728
|
-
exports.MAGMA = MAGMA;
|
|
9729
|
-
exports.MAINNET_AFTERMATH_INSURANCE_FUND_ID = MAINNET_AFTERMATH_INSURANCE_FUND_ID;
|
|
9730
|
-
exports.MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID = MAINNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID;
|
|
9731
|
-
exports.MAINNET_AFTERMATH_REFERRAL_VAULT_ID = MAINNET_AFTERMATH_REFERRAL_VAULT_ID;
|
|
9732
|
-
exports.MAINNET_AFTERMATH_REGISTRY_ID = MAINNET_AFTERMATH_REGISTRY_ID;
|
|
9733
|
-
exports.MAINNET_AFTERMATH_TREASURY_ID = MAINNET_AFTERMATH_TREASURY_ID;
|
|
9734
|
-
exports.MAINNET_CETUS_V3_PUBLISHED_AT = MAINNET_CETUS_V3_PUBLISHED_AT;
|
|
9735
|
-
exports.MAINNET_FLOWX_AMM_CONTAINER_ID = MAINNET_FLOWX_AMM_CONTAINER_ID;
|
|
9736
|
-
exports.METASTABLE = METASTABLE;
|
|
9737
|
-
exports.MOMENTUM = MOMENTUM;
|
|
9738
|
-
exports.OBRIC = OBRIC;
|
|
9739
|
-
exports.ONE = ONE;
|
|
9740
|
-
exports.PACKAGE_NAMES = PACKAGE_NAMES;
|
|
9741
|
-
exports.PAY_MODULE = PAY_MODULE;
|
|
9742
|
-
exports.POOL_MODULT = POOL_MODULT;
|
|
9743
|
-
exports.PUBLISHED_ADDRESSES = PUBLISHED_ADDRESSES;
|
|
9744
|
-
exports.PYTH_CONFIG = PYTH_CONFIG;
|
|
9745
|
-
exports.REPAY_FLASH_SWAP_A2B_FUNC = REPAY_FLASH_SWAP_A2B_FUNC;
|
|
9746
|
-
exports.REPAY_FLASH_SWAP_B2A_FUNC = REPAY_FLASH_SWAP_B2A_FUNC;
|
|
9747
|
-
exports.REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC = REPAY_FLASH_SWAP_WITH_PARTNER_A2B_FUNC;
|
|
9748
|
-
exports.REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC = REPAY_FLASH_SWAP_WITH_PARTNER_B2A_FUNC;
|
|
9749
|
-
exports.RepayFalshSwapFunc = RepayFalshSwapFunc;
|
|
9750
|
-
exports.RepayFlashSwapWithPartnerFunc = RepayFlashSwapWithPartnerFunc;
|
|
9751
|
-
exports.SCALLOP = SCALLOP;
|
|
9752
|
-
exports.SEVENK = SEVENK;
|
|
9753
|
-
exports.SPRINGSUI = SPRINGSUI;
|
|
9754
|
-
exports.STEAMM = STEAMM;
|
|
9755
|
-
exports.STEAMM_OMM = STEAMM_OMM;
|
|
9756
|
-
exports.STEAMM_OMM_V2 = STEAMM_OMM_V2;
|
|
9757
|
-
exports.SUILEND = SUILEND;
|
|
9758
|
-
exports.SUI_SYSTEM_STATE_OBJECT_ID = SUI_SYSTEM_STATE_OBJECT_ID;
|
|
9759
|
-
exports.SWAP_A2B_FUNC = SWAP_A2B_FUNC;
|
|
9760
|
-
exports.SWAP_B2A_FUNC = SWAP_B2A_FUNC;
|
|
9761
|
-
exports.SuiZeroCoinFn = SuiZeroCoinFn;
|
|
9762
|
-
exports.TEN_POW_NINE = TEN_POW_NINE;
|
|
9763
|
-
exports.TESTNET_AFTERMATH_INSURANCE_FUND_ID = TESTNET_AFTERMATH_INSURANCE_FUND_ID;
|
|
9764
|
-
exports.TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID = TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID;
|
|
9765
|
-
exports.TESTNET_AFTERMATH_REFERRAL_VAULT_ID = TESTNET_AFTERMATH_REFERRAL_VAULT_ID;
|
|
9766
|
-
exports.TESTNET_AFTERMATH_REGISTRY_ID = TESTNET_AFTERMATH_REGISTRY_ID;
|
|
9767
|
-
exports.TESTNET_AFTERMATH_TREASURY_ID = TESTNET_AFTERMATH_TREASURY_ID;
|
|
9768
|
-
exports.TESTNET_CETUS_V3_PUBLISHED_AT = TESTNET_CETUS_V3_PUBLISHED_AT;
|
|
9769
|
-
exports.TESTNET_FLOWX_AMM_CONTAINER_ID = TESTNET_FLOWX_AMM_CONTAINER_ID;
|
|
9770
|
-
exports.TRANSFER_ACCOUNT_CAP = TRANSFER_ACCOUNT_CAP;
|
|
9771
|
-
exports.TRANSFER_OR_DESTORY_COIN_FUNC = TRANSFER_OR_DESTORY_COIN_FUNC;
|
|
9772
|
-
exports.TURBOS = TURBOS;
|
|
9773
|
-
exports.TURBOS_DEX = TURBOS_DEX;
|
|
9774
|
-
exports.TURBOS_MODULE = TURBOS_MODULE;
|
|
9775
|
-
exports.TURBOS_VERSIONED = TURBOS_VERSIONED;
|
|
9776
|
-
exports.TWO = TWO;
|
|
9777
|
-
exports.TransactionErrorCode = TransactionErrorCode;
|
|
9778
|
-
exports.TypesErrorCode = TypesErrorCode;
|
|
9779
|
-
exports.U128 = U128;
|
|
9780
|
-
exports.U64_MAX = U64_MAX;
|
|
9781
|
-
exports.U64_MAX_BN = U64_MAX_BN;
|
|
9782
|
-
exports.UTILS_MODULE = UTILS_MODULE;
|
|
9783
|
-
exports.VOLO = VOLO;
|
|
9784
|
-
exports.ZERO = ZERO;
|
|
9785
|
-
exports.buildInputCoin = buildInputCoin;
|
|
9786
|
-
exports.calculateGasEfficiency = calculateGasEfficiency;
|
|
9787
|
-
exports.calculatePriceImpact = calculatePriceImpact;
|
|
9788
|
-
exports.checkInvalidSuiAddress = checkInvalidSuiAddress;
|
|
9789
|
-
exports.compareCoins = compareCoins;
|
|
9790
|
-
exports.compareGasMetrics = compareGasMetrics;
|
|
9791
|
-
exports.completionCoin = completionCoin;
|
|
9792
|
-
exports.composeType = composeType;
|
|
9793
|
-
exports.createTarget = createTarget;
|
|
9794
|
-
exports.dealWithFastRouterSwapParamsForMsafe = dealWithFastRouterSwapParamsForMsafe;
|
|
9795
|
-
exports.exportToCSV = exportToCSV;
|
|
9796
|
-
exports.exportToJSON = exportToJSON;
|
|
9797
|
-
exports.extractAddressFromType = extractAddressFromType;
|
|
9798
|
-
exports.extractGasMetrics = extractGasMetrics;
|
|
9799
|
-
exports.extractStructTagFromType = extractStructTagFromType;
|
|
9800
|
-
exports.extractTimestampFromDowngradeUuid6 = extractTimestampFromDowngradeUuid6;
|
|
9801
|
-
exports.fixSuiObjectId = fixSuiObjectId;
|
|
9802
|
-
exports.formatGasMetrics = formatGasMetrics;
|
|
9803
|
-
exports.generateDowngradeUuid6 = generateDowngradeUuid6;
|
|
9804
|
-
exports.generateSimpleDowngradeUuid6 = generateSimpleDowngradeUuid6;
|
|
9805
|
-
exports.getAggregatorServerErrorMessage = getAggregatorServerErrorMessage;
|
|
9806
|
-
exports.getAggregatorV2Extend2PublishedAt = getAggregatorV2Extend2PublishedAt;
|
|
9807
|
-
exports.getAggregatorV2ExtendPublishedAt = getAggregatorV2ExtendPublishedAt;
|
|
9808
|
-
exports.getAggregatorV2PublishedAt = getAggregatorV2PublishedAt;
|
|
9809
|
-
exports.getAllProviders = getAllProviders;
|
|
9810
|
-
exports.getDeepbookV3Config = getDeepbookV3Config;
|
|
9811
|
-
exports.getDefaultSuiInputType = getDefaultSuiInputType;
|
|
9812
|
-
exports.getMergeSwapResult = getMergeSwapResult;
|
|
9813
|
-
exports.getOrCreateAccountCap = getOrCreateAccountCap;
|
|
9814
|
-
exports.getProvidersExcluding = getProvidersExcluding;
|
|
9815
|
-
exports.getProvidersIncluding = getProvidersIncluding;
|
|
9816
|
-
exports.getRouterResult = getRouterResult;
|
|
9817
|
-
exports.isSortedSymbols = isSortedSymbols;
|
|
9818
|
-
exports.isValidDowngradeUuid6 = isValidDowngradeUuid6;
|
|
9819
|
-
exports.mintZeroCoin = mintZeroCoin;
|
|
9820
|
-
exports.normalizeCoinType = normalizeCoinType;
|
|
9821
|
-
exports.parseAftermathFeeType = parseAftermathFeeType;
|
|
9822
|
-
exports.parseTurbosPoolFeeType = parseTurbosPoolFeeType;
|
|
9823
|
-
exports.patchFixSuiObjectId = patchFixSuiObjectId;
|
|
9824
|
-
exports.printTransaction = printTransaction;
|
|
9825
|
-
exports.processEndpoint = processEndpoint;
|
|
9826
|
-
exports.processFlattenRoutes = processFlattenRoutes;
|
|
9827
|
-
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 };
|