@cetusprotocol/aggregator-sdk 1.5.4 → 1.5.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 +263 -263
- package/dist/index.cjs +176 -105
- package/dist/index.d.cts +77 -19
- package/dist/index.d.ts +77 -19
- package/dist/index.js +176 -106
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { coinWithBalance, Transaction } from '@mysten/sui/transactions';
|
|
2
2
|
import JSONbig from 'json-bigint';
|
|
3
3
|
import { normalizeSuiObjectId, SUI_CLOCK_OBJECT_ID } from '@mysten/sui/utils';
|
|
4
|
-
import {
|
|
4
|
+
import { SuiGrpcClient } from '@mysten/sui/grpc';
|
|
5
5
|
import { HermesClient } from '@pythnetwork/hermes-client';
|
|
6
6
|
import { bcs } from '@mysten/sui/bcs';
|
|
7
7
|
|
|
@@ -37,9 +37,9 @@ var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__
|
|
|
37
37
|
mod2
|
|
38
38
|
));
|
|
39
39
|
|
|
40
|
-
// node_modules
|
|
40
|
+
// node_modules/bn.js/lib/bn.js
|
|
41
41
|
var require_bn = __commonJS({
|
|
42
|
-
"node_modules
|
|
42
|
+
"node_modules/bn.js/lib/bn.js"(exports, module) {
|
|
43
43
|
(function(module2, exports2) {
|
|
44
44
|
function assert(val, msg) {
|
|
45
45
|
if (!val) throw new Error(msg || "Assertion failed");
|
|
@@ -345,7 +345,7 @@ var require_bn = __commonJS({
|
|
|
345
345
|
};
|
|
346
346
|
if (typeof Symbol !== "undefined" && typeof Symbol.for === "function") {
|
|
347
347
|
try {
|
|
348
|
-
BN7.prototype[
|
|
348
|
+
BN7.prototype[Symbol.for("nodejs.util.inspect.custom")] = inspect;
|
|
349
349
|
} catch (e) {
|
|
350
350
|
BN7.prototype.inspect = inspect;
|
|
351
351
|
}
|
|
@@ -1762,10 +1762,6 @@ var require_bn = __commonJS({
|
|
|
1762
1762
|
var mask = 67108863 ^ 67108863 >>> r << r;
|
|
1763
1763
|
this.words[this.length - 1] &= mask;
|
|
1764
1764
|
}
|
|
1765
|
-
if (this.length === 0) {
|
|
1766
|
-
this.words[0] = 0;
|
|
1767
|
-
this.length = 1;
|
|
1768
|
-
}
|
|
1769
1765
|
return this._strip();
|
|
1770
1766
|
};
|
|
1771
1767
|
BN7.prototype.maskn = function maskn(bits) {
|
|
@@ -2781,7 +2777,7 @@ var require_bn = __commonJS({
|
|
|
2781
2777
|
var res = this.imod(a._invmp(this.m).mul(this.r2));
|
|
2782
2778
|
return res._forceRed(this);
|
|
2783
2779
|
};
|
|
2784
|
-
})(typeof module === "undefined" || module, exports
|
|
2780
|
+
})(typeof module === "undefined" || module, exports);
|
|
2785
2781
|
}
|
|
2786
2782
|
});
|
|
2787
2783
|
|
|
@@ -3414,7 +3410,7 @@ var AGGREGATOR_V3_CONFIG = {
|
|
|
3414
3410
|
};
|
|
3415
3411
|
|
|
3416
3412
|
// src/api.ts
|
|
3417
|
-
var SDK_VERSION =
|
|
3413
|
+
var SDK_VERSION = 1010505;
|
|
3418
3414
|
function parseRouterResponse(data, byAmountIn) {
|
|
3419
3415
|
let packages = /* @__PURE__ */ new Map();
|
|
3420
3416
|
if (data.packages) {
|
|
@@ -3850,7 +3846,7 @@ var AggregatorConfig = class {
|
|
|
3850
3846
|
// src/math.ts
|
|
3851
3847
|
var import_bn3 = __toESM(require_bn());
|
|
3852
3848
|
|
|
3853
|
-
// node_modules
|
|
3849
|
+
// node_modules/decimal.js/decimal.mjs
|
|
3854
3850
|
var EXP_LIMIT = 9e15;
|
|
3855
3851
|
var MAX_DIGITS = 1e9;
|
|
3856
3852
|
var NUMERALS = "0123456789abcdef";
|
|
@@ -6019,7 +6015,7 @@ function tanh(x) {
|
|
|
6019
6015
|
function trunc(x) {
|
|
6020
6016
|
return finalise(x = new this(x), x.e + 1, 1);
|
|
6021
6017
|
}
|
|
6022
|
-
P[
|
|
6018
|
+
P[Symbol.for("nodejs.util.inspect.custom")] = P.toString;
|
|
6023
6019
|
P[Symbol.toStringTag] = "Decimal";
|
|
6024
6020
|
var Decimal = P.constructor = clone(DEFAULTS);
|
|
6025
6021
|
LN10 = new Decimal(LN10);
|
|
@@ -7855,12 +7851,11 @@ var PythAdapter = class {
|
|
|
7855
7851
|
if (this.baseUpdateFee !== void 0) {
|
|
7856
7852
|
return this.baseUpdateFee;
|
|
7857
7853
|
}
|
|
7858
|
-
const
|
|
7859
|
-
|
|
7860
|
-
|
|
7854
|
+
const { object } = await this.client.getObject({
|
|
7855
|
+
objectId: this.pythStateId,
|
|
7856
|
+
include: { json: true }
|
|
7861
7857
|
});
|
|
7862
|
-
const
|
|
7863
|
-
const json = content && "fields" in content ? content.fields : null;
|
|
7858
|
+
const json = object.json;
|
|
7864
7859
|
if (!json) {
|
|
7865
7860
|
throw new Error("Unable to fetch pyth state object");
|
|
7866
7861
|
}
|
|
@@ -7868,21 +7863,16 @@ var PythAdapter = class {
|
|
|
7868
7863
|
return this.baseUpdateFee;
|
|
7869
7864
|
}
|
|
7870
7865
|
async getPackageId(objectId) {
|
|
7871
|
-
const
|
|
7872
|
-
|
|
7873
|
-
|
|
7866
|
+
const { object } = await this.client.getObject({
|
|
7867
|
+
objectId,
|
|
7868
|
+
include: { json: true }
|
|
7874
7869
|
});
|
|
7875
|
-
const
|
|
7876
|
-
const json = content && "fields" in content ? content.fields : null;
|
|
7870
|
+
const json = object.json;
|
|
7877
7871
|
if (!json) {
|
|
7878
7872
|
throw new Error(`Cannot fetch package id for object ${objectId}`);
|
|
7879
7873
|
}
|
|
7880
7874
|
if ("upgrade_cap" in json) {
|
|
7881
|
-
|
|
7882
|
-
const packageId = upgradeCap?.fields?.package;
|
|
7883
|
-
if (typeof packageId === "string") {
|
|
7884
|
-
return packageId;
|
|
7885
|
-
}
|
|
7875
|
+
return json.upgrade_cap.package;
|
|
7886
7876
|
}
|
|
7887
7877
|
throw new Error("upgrade_cap not found");
|
|
7888
7878
|
}
|
|
@@ -7906,19 +7896,20 @@ var PythAdapter = class {
|
|
|
7906
7896
|
const { id: tableId, fieldType } = await this.getPriceTableInfo();
|
|
7907
7897
|
const feedIdBytes = Buffer.from(normalizedFeedId, "hex");
|
|
7908
7898
|
try {
|
|
7909
|
-
const
|
|
7899
|
+
const PriceIdentifier = bcs.struct("PriceIdentifier", {
|
|
7900
|
+
bytes: bcs.vector(bcs.u8())
|
|
7901
|
+
});
|
|
7902
|
+
const bcsBytes = PriceIdentifier.serialize({ bytes: Array.from(feedIdBytes) }).toBytes();
|
|
7903
|
+
const result = await this.client.getDynamicField({
|
|
7910
7904
|
parentId: tableId,
|
|
7911
7905
|
name: {
|
|
7912
|
-
type:
|
|
7913
|
-
|
|
7906
|
+
type: fieldType,
|
|
7907
|
+
bcs: bcsBytes
|
|
7914
7908
|
}
|
|
7915
7909
|
});
|
|
7916
|
-
const
|
|
7917
|
-
const
|
|
7918
|
-
const objectId =
|
|
7919
|
-
if (!objectId) {
|
|
7920
|
-
return void 0;
|
|
7921
|
-
}
|
|
7910
|
+
const valueBcs = result.dynamicField.value.bcs;
|
|
7911
|
+
const valueBytes = valueBcs instanceof Uint8Array ? valueBcs : new Uint8Array(Object.values(valueBcs));
|
|
7912
|
+
const objectId = "0x" + Array.from(valueBytes).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
7922
7913
|
this.priceFeedObjectIdCache.set(normalizedFeedId, objectId);
|
|
7923
7914
|
return objectId;
|
|
7924
7915
|
} catch {
|
|
@@ -7929,27 +7920,40 @@ var PythAdapter = class {
|
|
|
7929
7920
|
if (this.priceTableInfo !== void 0) {
|
|
7930
7921
|
return this.priceTableInfo;
|
|
7931
7922
|
}
|
|
7932
|
-
|
|
7933
|
-
|
|
7934
|
-
|
|
7935
|
-
|
|
7936
|
-
|
|
7923
|
+
let cursor = null;
|
|
7924
|
+
let hasNextPage = true;
|
|
7925
|
+
while (hasNextPage) {
|
|
7926
|
+
const dynamicFields = await this.client.listDynamicFields({
|
|
7927
|
+
parentId: this.pythStateId,
|
|
7928
|
+
cursor
|
|
7929
|
+
});
|
|
7930
|
+
for (const field of dynamicFields.dynamicFields) {
|
|
7931
|
+
if (field.name.type === "vector<u8>") {
|
|
7932
|
+
const objectId = field.$kind === "DynamicObject" && field.childId ? field.childId : field.fieldId;
|
|
7933
|
+
const fieldObj = await this.client.getObject({
|
|
7934
|
+
objectId,
|
|
7935
|
+
include: { json: true }
|
|
7936
|
+
});
|
|
7937
|
+
const type = fieldObj.object.type;
|
|
7938
|
+
if (type.includes("table::Table")) {
|
|
7939
|
+
const innerTypes = type.replace(/.*table::Table</, "").replace(/>$/, "");
|
|
7940
|
+
const fieldType = innerTypes.split(",")[0].trim();
|
|
7941
|
+
this.priceTableInfo = { id: fieldObj.object.objectId, fieldType };
|
|
7942
|
+
return this.priceTableInfo;
|
|
7943
|
+
}
|
|
7944
|
+
}
|
|
7937
7945
|
}
|
|
7938
|
-
|
|
7939
|
-
|
|
7940
|
-
throw new Error(
|
|
7941
|
-
"Price Table not found, contract may not be initialized"
|
|
7942
|
-
);
|
|
7946
|
+
hasNextPage = dynamicFields.hasNextPage;
|
|
7947
|
+
cursor = dynamicFields.cursor;
|
|
7943
7948
|
}
|
|
7944
|
-
|
|
7945
|
-
|
|
7946
|
-
|
|
7947
|
-
return this.priceTableInfo;
|
|
7949
|
+
throw new Error(
|
|
7950
|
+
"Price Table not found, contract may not be initialized"
|
|
7951
|
+
);
|
|
7948
7952
|
}
|
|
7949
7953
|
extractVaaBytesFromAccumulatorMessage(accumulatorMessage) {
|
|
7950
|
-
const trailingPayloadSize = accumulatorMessage.
|
|
7954
|
+
const trailingPayloadSize = accumulatorMessage.readUInt8(6);
|
|
7951
7955
|
const vaaSizeOffset = 7 + trailingPayloadSize + 1;
|
|
7952
|
-
const vaaSize = accumulatorMessage.
|
|
7956
|
+
const vaaSize = accumulatorMessage.readUInt16BE(vaaSizeOffset);
|
|
7953
7957
|
const vaaOffset = vaaSizeOffset + 2;
|
|
7954
7958
|
return accumulatorMessage.subarray(vaaOffset, vaaOffset + vaaSize);
|
|
7955
7959
|
}
|
|
@@ -8128,21 +8132,21 @@ async function getOrCreateAccountCap(txb, client, owner) {
|
|
|
8128
8132
|
}
|
|
8129
8133
|
async function getAccountCap(client, owner) {
|
|
8130
8134
|
const limit = 50;
|
|
8131
|
-
let cursor =
|
|
8135
|
+
let cursor = null;
|
|
8132
8136
|
while (true) {
|
|
8133
|
-
const ownedObjects = await client.
|
|
8137
|
+
const ownedObjects = await client.listOwnedObjects({
|
|
8134
8138
|
owner,
|
|
8135
8139
|
cursor,
|
|
8136
8140
|
limit,
|
|
8137
|
-
|
|
8141
|
+
type: `${DEEPBOOK_PACKAGE_ID}::${DEEPBOOK_CUSTODIAN_V2_MODULE}::AccountCap`
|
|
8138
8142
|
});
|
|
8139
|
-
if (ownedObjects.
|
|
8140
|
-
return ownedObjects.
|
|
8143
|
+
if (ownedObjects.objects.length !== 0) {
|
|
8144
|
+
return ownedObjects.objects[0].objectId;
|
|
8141
8145
|
}
|
|
8142
8146
|
if (!ownedObjects.hasNextPage) {
|
|
8143
8147
|
break;
|
|
8144
8148
|
}
|
|
8145
|
-
cursor = ownedObjects.
|
|
8149
|
+
cursor = ownedObjects.cursor;
|
|
8146
8150
|
}
|
|
8147
8151
|
return null;
|
|
8148
8152
|
}
|
|
@@ -8170,10 +8174,10 @@ function getAggregatorV2Extend2PublishedAt(publishedAt, packages) {
|
|
|
8170
8174
|
// src/utils/gas.ts
|
|
8171
8175
|
var import_bn4 = __toESM(require_bn());
|
|
8172
8176
|
function extractGasMetrics(result) {
|
|
8173
|
-
const
|
|
8174
|
-
const
|
|
8175
|
-
if (!
|
|
8176
|
-
const errorMsg =
|
|
8177
|
+
const txResult = result.Transaction ?? result.FailedTransaction;
|
|
8178
|
+
const effects = txResult?.effects;
|
|
8179
|
+
if (!effects || !effects.status.success) {
|
|
8180
|
+
const errorMsg = effects?.status.success === false ? effects.status.error.message : "Unknown error";
|
|
8177
8181
|
return {
|
|
8178
8182
|
computationCost: "0",
|
|
8179
8183
|
storageCost: "0",
|
|
@@ -8752,6 +8756,83 @@ var MagmaPropAmmRouter = class {
|
|
|
8752
8756
|
});
|
|
8753
8757
|
}
|
|
8754
8758
|
};
|
|
8759
|
+
var TideRouter = class {
|
|
8760
|
+
constructor(_env) {
|
|
8761
|
+
}
|
|
8762
|
+
swap(txb, flattenedPath, swapContext, _extends) {
|
|
8763
|
+
const path = flattenedPath.path;
|
|
8764
|
+
if (!path.extendedDetails) {
|
|
8765
|
+
throw new Error("Extended details not found for TIDE");
|
|
8766
|
+
}
|
|
8767
|
+
this.validateExtendedDetails(path.extendedDetails);
|
|
8768
|
+
const swapData = this.prepareSwapData(flattenedPath);
|
|
8769
|
+
this.executeSwapContract(txb, swapData, swapContext);
|
|
8770
|
+
}
|
|
8771
|
+
validateExtendedDetails(extendedDetails) {
|
|
8772
|
+
if (!extendedDetails.tide_pool_id) {
|
|
8773
|
+
throw new Error("TIDE pool id not found in extended details");
|
|
8774
|
+
}
|
|
8775
|
+
if (!extendedDetails.tide_regime_id) {
|
|
8776
|
+
throw new Error("TIDE regime id not found in extended details");
|
|
8777
|
+
}
|
|
8778
|
+
if (extendedDetails.tide_oracle_mode !== "pyth_core") {
|
|
8779
|
+
throw new Error(
|
|
8780
|
+
`TIDE oracle mode "${extendedDetails.tide_oracle_mode}" not supported (only "pyth_core")`
|
|
8781
|
+
);
|
|
8782
|
+
}
|
|
8783
|
+
if (!extendedDetails.tide_base_price_info_object) {
|
|
8784
|
+
throw new Error("TIDE base price info object not found in extended details");
|
|
8785
|
+
}
|
|
8786
|
+
if (!extendedDetails.tide_quote_price_info_object) {
|
|
8787
|
+
throw new Error(
|
|
8788
|
+
"TIDE quote price info object not found in extended details"
|
|
8789
|
+
);
|
|
8790
|
+
}
|
|
8791
|
+
}
|
|
8792
|
+
prepareSwapData(flattenedPath) {
|
|
8793
|
+
const path = flattenedPath.path;
|
|
8794
|
+
if (path.publishedAt == null) {
|
|
8795
|
+
throw new Error("TIDE not set publishedAt");
|
|
8796
|
+
}
|
|
8797
|
+
const extendedDetails = path.extendedDetails;
|
|
8798
|
+
const [baseType, quoteType] = path.direction ? [path.from, path.target] : [path.target, path.from];
|
|
8799
|
+
const amountIn = flattenedPath.isLastUseOfIntermediateToken ? AGGREGATOR_V3_CONFIG.MAX_AMOUNT_IN : path.amountIn;
|
|
8800
|
+
return {
|
|
8801
|
+
baseType,
|
|
8802
|
+
quoteType,
|
|
8803
|
+
a2b: path.direction,
|
|
8804
|
+
amountIn,
|
|
8805
|
+
publishedAt: path.publishedAt,
|
|
8806
|
+
poolId: extendedDetails.tide_pool_id,
|
|
8807
|
+
regimeId: extendedDetails.tide_regime_id,
|
|
8808
|
+
basePriceInfoObject: extendedDetails.tide_base_price_info_object,
|
|
8809
|
+
quotePriceInfoObject: extendedDetails.tide_quote_price_info_object
|
|
8810
|
+
};
|
|
8811
|
+
}
|
|
8812
|
+
executeSwapContract(txb, swapData, swapContext) {
|
|
8813
|
+
const fn = swapData.a2b ? "swap_a2b_pyth_core" : "swap_b2a_pyth_core";
|
|
8814
|
+
txb.moveCall({
|
|
8815
|
+
target: `${swapData.publishedAt}::tide::${fn}`,
|
|
8816
|
+
typeArguments: [swapData.baseType, swapData.quoteType],
|
|
8817
|
+
arguments: [
|
|
8818
|
+
swapContext,
|
|
8819
|
+
// swap_ctx
|
|
8820
|
+
txb.object(swapData.poolId),
|
|
8821
|
+
// pool_state
|
|
8822
|
+
txb.object(swapData.regimeId),
|
|
8823
|
+
// regime_state
|
|
8824
|
+
txb.object(SUI_CLOCK_OBJECT_ID),
|
|
8825
|
+
// clock
|
|
8826
|
+
txb.object(swapData.basePriceInfoObject),
|
|
8827
|
+
// base_price_info_object
|
|
8828
|
+
txb.object(swapData.quotePriceInfoObject),
|
|
8829
|
+
// quote_price_info_object
|
|
8830
|
+
txb.pure.u64(swapData.amountIn)
|
|
8831
|
+
// amount_in
|
|
8832
|
+
]
|
|
8833
|
+
});
|
|
8834
|
+
}
|
|
8835
|
+
};
|
|
8755
8836
|
|
|
8756
8837
|
// src/client.ts
|
|
8757
8838
|
var CETUS = "CETUS";
|
|
@@ -8789,6 +8870,7 @@ var FERRADLMM = "FERRADLMM";
|
|
|
8789
8870
|
var FERRACLMM = "FERRACLMM";
|
|
8790
8871
|
var BOLT = "BOLT";
|
|
8791
8872
|
var MAGMAPROPAMM = "MAGMAPROPAMM";
|
|
8873
|
+
var TIDE = "TIDE";
|
|
8792
8874
|
var DEFAULT_ENDPOINT = "https://api-sui.cetus.zone/router_v3";
|
|
8793
8875
|
var ALL_DEXES = [
|
|
8794
8876
|
CETUS,
|
|
@@ -8824,7 +8906,8 @@ var ALL_DEXES = [
|
|
|
8824
8906
|
FERRADLMM,
|
|
8825
8907
|
FERRACLMM,
|
|
8826
8908
|
BOLT,
|
|
8827
|
-
MAGMAPROPAMM
|
|
8909
|
+
MAGMAPROPAMM,
|
|
8910
|
+
TIDE
|
|
8828
8911
|
];
|
|
8829
8912
|
function getAllProviders() {
|
|
8830
8913
|
return ALL_DEXES;
|
|
@@ -8891,8 +8974,8 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
8891
8974
|
constructor(params) {
|
|
8892
8975
|
this.endpoint = params.endpoint ? processEndpoint(params.endpoint) : DEFAULT_ENDPOINT;
|
|
8893
8976
|
const network = params.env === 1 /* Testnet */ ? "testnet" : "mainnet";
|
|
8894
|
-
const
|
|
8895
|
-
this.client = params.client ?? new
|
|
8977
|
+
const grpcUrl = params.env === 1 /* Testnet */ ? "https://fullnode.testnet.sui.io:443" : "https://fullnode.mainnet.sui.io:443";
|
|
8978
|
+
this.client = params.client ?? new SuiGrpcClient({ network, baseUrl: grpcUrl });
|
|
8896
8979
|
this.signer = params.signer || "";
|
|
8897
8980
|
this.env = params.env || 0 /* Mainnet */;
|
|
8898
8981
|
const config2 = _AggregatorClient.CONFIG[this.env];
|
|
@@ -8933,13 +9016,13 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
8933
9016
|
}
|
|
8934
9017
|
async getOneCoinUsedToMerge(coinType) {
|
|
8935
9018
|
try {
|
|
8936
|
-
const gotCoin = await this.client.
|
|
9019
|
+
const gotCoin = await this.client.listCoins({
|
|
8937
9020
|
owner: this.signer,
|
|
8938
9021
|
coinType,
|
|
8939
9022
|
limit: 1
|
|
8940
9023
|
});
|
|
8941
|
-
if (gotCoin.
|
|
8942
|
-
return gotCoin.
|
|
9024
|
+
if (gotCoin.objects.length === 1) {
|
|
9025
|
+
return gotCoin.objects[0].objectId;
|
|
8943
9026
|
}
|
|
8944
9027
|
return null;
|
|
8945
9028
|
} catch (error) {
|
|
@@ -9036,6 +9119,8 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9036
9119
|
return new BoltRouter(this.env);
|
|
9037
9120
|
case MAGMAPROPAMM:
|
|
9038
9121
|
return new MagmaPropAmmRouter(this.env);
|
|
9122
|
+
case TIDE:
|
|
9123
|
+
return new TideRouter(this.env);
|
|
9039
9124
|
default:
|
|
9040
9125
|
throw new Error(
|
|
9041
9126
|
`${CLIENT_CONFIG.ERRORS.UNSUPPORTED_DEX} ${provider}`
|
|
@@ -9413,15 +9498,7 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9413
9498
|
* @throws Error if input coin amount exceeds maxAmountIn
|
|
9414
9499
|
*/
|
|
9415
9500
|
async routerSwapWithMaxAmountIn(params) {
|
|
9416
|
-
const {
|
|
9417
|
-
router,
|
|
9418
|
-
inputCoin,
|
|
9419
|
-
slippage,
|
|
9420
|
-
txb,
|
|
9421
|
-
partner,
|
|
9422
|
-
cetusDlmmPartner,
|
|
9423
|
-
maxAmountIn
|
|
9424
|
-
} = params;
|
|
9501
|
+
const { router, inputCoin, slippage, txb, partner, maxAmountIn } = params;
|
|
9425
9502
|
if (slippage > 1 || slippage < 0) {
|
|
9426
9503
|
throw new Error(CLIENT_CONFIG.ERRORS.INVALID_SLIPPAGE);
|
|
9427
9504
|
}
|
|
@@ -9456,8 +9533,7 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9456
9533
|
amountOut.toString(),
|
|
9457
9534
|
amountLimit.toString(),
|
|
9458
9535
|
priceInfoObjectIds,
|
|
9459
|
-
partner ?? this.partner
|
|
9460
|
-
cetusDlmmPartner ?? this.cetusDlmmPartner
|
|
9536
|
+
partner ?? this.partner
|
|
9461
9537
|
);
|
|
9462
9538
|
} else {
|
|
9463
9539
|
return this.expectOutputSwapV3WithMaxAmountIn(
|
|
@@ -9474,14 +9550,7 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9474
9550
|
// auto build input coin
|
|
9475
9551
|
// auto merge, transfer or destory target coin.
|
|
9476
9552
|
async fastRouterSwap(params) {
|
|
9477
|
-
const {
|
|
9478
|
-
router,
|
|
9479
|
-
slippage,
|
|
9480
|
-
txb,
|
|
9481
|
-
partner,
|
|
9482
|
-
cetusDlmmPartner,
|
|
9483
|
-
payDeepFeeAmount
|
|
9484
|
-
} = params;
|
|
9553
|
+
const { router, slippage, txb, partner, cetusDlmmPartner, payDeepFeeAmount } = params;
|
|
9485
9554
|
const fromCoinType = router.paths[0].from;
|
|
9486
9555
|
const targetCoinType = router.paths[router.paths.length - 1].target;
|
|
9487
9556
|
const byAmountIn = router.byAmountIn;
|
|
@@ -9638,7 +9707,7 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9638
9707
|
}
|
|
9639
9708
|
}
|
|
9640
9709
|
async fixableRouterSwapV3(params) {
|
|
9641
|
-
const { router, inputCoin, slippage, txb, partner
|
|
9710
|
+
const { router, inputCoin, slippage, txb, partner } = params;
|
|
9642
9711
|
checkOverlayFeeConfig(this.overlayFeeRate, this.overlayFeeReceiver);
|
|
9643
9712
|
let overlayFee = 0;
|
|
9644
9713
|
if (router.byAmountIn) {
|
|
@@ -9667,8 +9736,7 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9667
9736
|
expectedAmountOut.toString(),
|
|
9668
9737
|
amountLimit.toString(),
|
|
9669
9738
|
priceInfoObjectIds,
|
|
9670
|
-
partner ?? this.partner
|
|
9671
|
-
cetusDlmmPartner ?? this.cetusDlmmPartner
|
|
9739
|
+
partner ?? this.partner
|
|
9672
9740
|
);
|
|
9673
9741
|
} else {
|
|
9674
9742
|
return this.expectOutputSwapV3(
|
|
@@ -9705,16 +9773,18 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9705
9773
|
});
|
|
9706
9774
|
}
|
|
9707
9775
|
tx.setSenderIfNotSet(this.signer || "0x0");
|
|
9708
|
-
const simulateRes = await this.client.
|
|
9709
|
-
|
|
9710
|
-
|
|
9776
|
+
const simulateRes = await this.client.simulateTransaction({
|
|
9777
|
+
transaction: tx,
|
|
9778
|
+
include: { events: true, effects: true }
|
|
9711
9779
|
});
|
|
9712
|
-
|
|
9713
|
-
|
|
9780
|
+
const txResult = simulateRes.Transaction ?? simulateRes.FailedTransaction;
|
|
9781
|
+
if (!txResult || simulateRes.$kind === "FailedTransaction") {
|
|
9782
|
+
const errorMsg = txResult?.status.success === false ? txResult.status.error.message : "Unknown error";
|
|
9783
|
+
throw new Error("Simulation error: " + errorMsg);
|
|
9714
9784
|
}
|
|
9715
|
-
const events =
|
|
9785
|
+
const events = txResult.events ?? [];
|
|
9716
9786
|
const valueData = events.filter((item) => {
|
|
9717
|
-
return item.
|
|
9787
|
+
return item.eventType.includes("CalculatedSwapResultEvent");
|
|
9718
9788
|
});
|
|
9719
9789
|
if (valueData.length === 0 || valueData.length !== pools.length) {
|
|
9720
9790
|
throw new Error("Simulate event result error");
|
|
@@ -9722,7 +9792,7 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9722
9792
|
let tempMaxAmount = byAmountIn ? new import_bn6.default(0) : new import_bn6.default(U64_MAX);
|
|
9723
9793
|
let tempIndex = 0;
|
|
9724
9794
|
for (let i = 0; i < valueData.length; i += 1) {
|
|
9725
|
-
const eventJson2 = valueData[i].
|
|
9795
|
+
const eventJson2 = valueData[i].json;
|
|
9726
9796
|
if (eventJson2?.data?.is_exceed) {
|
|
9727
9797
|
continue;
|
|
9728
9798
|
}
|
|
@@ -9740,11 +9810,11 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9740
9810
|
}
|
|
9741
9811
|
}
|
|
9742
9812
|
}
|
|
9743
|
-
const eventJson = valueData[tempIndex].
|
|
9813
|
+
const eventJson = valueData[tempIndex].json;
|
|
9744
9814
|
const eventData = eventJson?.data;
|
|
9745
9815
|
const [decimalA, decimalB] = await Promise.all([
|
|
9746
|
-
this.client.getCoinMetadata({ coinType: coinA }).then((res) => res?.decimals ?? null),
|
|
9747
|
-
this.client.getCoinMetadata({ coinType: coinB }).then((res) => res?.decimals ?? null)
|
|
9816
|
+
this.client.getCoinMetadata({ coinType: coinA }).then((res) => res.coinMetadata?.decimals ?? null),
|
|
9817
|
+
this.client.getCoinMetadata({ coinType: coinB }).then((res) => res.coinMetadata?.decimals ?? null)
|
|
9748
9818
|
]);
|
|
9749
9819
|
if (decimalA == null || decimalB == null) {
|
|
9750
9820
|
throw new Error("Cannot get coin decimals");
|
|
@@ -9813,9 +9883,9 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9813
9883
|
}
|
|
9814
9884
|
async devInspectTransactionBlock(txb) {
|
|
9815
9885
|
txb.setSenderIfNotSet(this.signer || "0x0");
|
|
9816
|
-
const res = await this.client.
|
|
9817
|
-
|
|
9818
|
-
|
|
9886
|
+
const res = await this.client.simulateTransaction({
|
|
9887
|
+
transaction: txb,
|
|
9888
|
+
include: { events: true, effects: true }
|
|
9819
9889
|
});
|
|
9820
9890
|
return res;
|
|
9821
9891
|
}
|
|
@@ -9823,7 +9893,7 @@ var _AggregatorClient = class _AggregatorClient {
|
|
|
9823
9893
|
const res = await this.client.signAndExecuteTransaction({
|
|
9824
9894
|
transaction: txb,
|
|
9825
9895
|
signer,
|
|
9826
|
-
|
|
9896
|
+
include: { effects: true, events: true, balanceChanges: true }
|
|
9827
9897
|
});
|
|
9828
9898
|
return res;
|
|
9829
9899
|
}
|
|
@@ -9894,4 +9964,4 @@ decimal.js/decimal.mjs:
|
|
|
9894
9964
|
*)
|
|
9895
9965
|
*/
|
|
9896
9966
|
|
|
9897
|
-
export { AFSUI, AFTERMATH, AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AGGREGATOR_V3_CONFIG, ALL_DEXES, ALPHAFI, AggregatorClient, AggregatorConfig, AggregatorError, AggregatorServerErrorCode, BLUEFIN, BLUEMOVE, BOLT, 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, MAGMAPROPAMM, 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 };
|
|
9967
|
+
export { AFSUI, AFTERMATH, AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AGGREGATOR_V3_CONFIG, ALL_DEXES, ALPHAFI, AggregatorClient, AggregatorConfig, AggregatorError, AggregatorServerErrorCode, BLUEFIN, BLUEMOVE, BOLT, 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, MAGMAPROPAMM, 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, TIDE, 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 };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cetusprotocol/aggregator-sdk",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"typescript": "^5.0.0"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@mysten/sui": "^2.
|
|
25
|
+
"@mysten/sui": "^2.16.3",
|
|
26
26
|
"@pythnetwork/hermes-client": "^3.1.0",
|
|
27
27
|
"bip39": "^3.1.0",
|
|
28
28
|
"dotenv": "^16.4.5",
|