@cetusprotocol/aggregator-sdk 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +8 -2
- package/dist/index.d.ts +8 -2
- package/dist/index.js +50 -12
- package/dist/index.mjs +50 -13
- package/dist/src/client.d.ts +6 -1
- package/dist/src/const.d.ts +1 -0
- package/dist/src/errors.d.ts +8 -1
- package/package.json +1 -1
- package/src/client.ts +39 -11
- package/src/const.ts +2 -0
- package/src/errors.ts +28 -1
- package/src/math.ts +7 -3
- package/src/transaction/common.ts +5 -0
- package/tests/math.test.ts +10 -2
- package/tests/router.test.ts +13 -10
package/dist/index.d.mts
CHANGED
|
@@ -110,11 +110,16 @@ type Router = {
|
|
|
110
110
|
amountOut: BN;
|
|
111
111
|
initialPrice: Decimal;
|
|
112
112
|
};
|
|
113
|
+
type RouterError = {
|
|
114
|
+
code: number;
|
|
115
|
+
msg: string;
|
|
116
|
+
};
|
|
113
117
|
type RouterData = {
|
|
114
118
|
amountIn: BN;
|
|
115
119
|
amountOut: BN;
|
|
116
120
|
routes: Router[];
|
|
117
121
|
insufficientLiquidity: boolean;
|
|
122
|
+
error?: RouterError;
|
|
118
123
|
};
|
|
119
124
|
type AggregatorResponse = {
|
|
120
125
|
code: number;
|
|
@@ -166,7 +171,7 @@ declare class AggregatorClient {
|
|
|
166
171
|
swapInPools(params: SwapInPoolsParams): Promise<SwapInPoolsResult | null>;
|
|
167
172
|
routerSwap(params: BuildRouterSwapParams): Promise<Transaction>;
|
|
168
173
|
signAndExecuteTransaction(txb: Transaction, signer: Signer): Promise<_mysten_sui_client.SuiTransactionBlockResponse>;
|
|
169
|
-
|
|
174
|
+
devInspectTransactionBlock(txb: Transaction): Promise<_mysten_sui_client.DevInspectResults>;
|
|
170
175
|
sendTransaction(txb: Transaction, signer: Signer): Promise<_mysten_sui_client.SuiTransactionBlockResponse>;
|
|
171
176
|
}
|
|
172
177
|
declare function parseRouterResponse(data: any): RouterData;
|
|
@@ -251,6 +256,7 @@ declare const TWO: BN;
|
|
|
251
256
|
declare const U128: BN;
|
|
252
257
|
declare const U64_MAX_BN: BN;
|
|
253
258
|
declare const U64_MAX = "18446744073709551615";
|
|
259
|
+
declare const TEN_POW_NINE = 1000000000;
|
|
254
260
|
declare const MAINNET_FLOWX_AMM_CONTAINER_ID = "0xb65dcbf63fd3ad5d0ebfbf334780dc9f785eff38a4459e37ab08fa79576ee511";
|
|
255
261
|
declare const TESTNET_FLOWX_AMM_CONTAINER_ID = "";
|
|
256
262
|
declare const TURBOS_VERSIONED = "0xf1cf0e81048df168ebeb1b8030fad24b3e0b53ae827c25053fff0779c1445b6f";
|
|
@@ -265,4 +271,4 @@ declare const TESTNET_AFTERMATH_INSURANCE_FUND_ID = "";
|
|
|
265
271
|
declare const MAINNET_AFTERMATH_REFERRAL_VAULT_ID = "0x35d35b0e5b177593d8c3a801462485572fc30861e6ce96a55af6dc4730709278";
|
|
266
272
|
declare const TESTNET_AFTERMATH_REFERRAL_VAULT_ID = "";
|
|
267
273
|
|
|
268
|
-
export { AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AggregatorClient, AggregatorConfig, type AggregatorResponse, type BuildRouterSwapParams, CETUS_DEX, CETUS_MODULE, CETUS_PUBLISHED_AT, CHECK_COINS_THRESHOLD_FUNC, CLOCK_ADDRESS, CoinInfoAddress, CoinStoreAddress, DEEPBOOK_CLOB_V2_MODULE, DEEPBOOK_CUSTODIAN_V2_MODULE, DEEPBOOK_DEX, DEEPBOOK_MODULE, DEEPBOOK_PACKAGE_ID, DEEPBOOK_PUBLISHED_AT, ENV, type ExtendedDetails, FLOWX_AMM, FLOWX_AMM_MODULE, type FindRouterParams, FlashSwapA2BFunc, FlashSwapB2AFunc, FlashSwapFunc, FlashSwapWithPartnerA2BFunc, FlashSwapWithPartnerB2AFunc, FlashSwapWithPartnerFunc, INTEGRATE, JOIN_FUNC, KRIYA_DEX, KRIYA_MODULE, 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_GLOBAL_CONFIG_ID, MAINNET_FLOWX_AMM_CONTAINER_ID, ONE, PAY_MODULE, POOL_MODULT, type Package, type Path, 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, type Router, type RouterData, SWAP_A2B_FUNC, SWAP_B2A_FUNC, SuiZeroCoinFn, type SwapInPoolsParams, type SwapInPoolsResult, 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_GLOBAL_CONFIG_ID, TESTNET_FLOWX_AMM_CONTAINER_ID, TRANSFER_ACCOUNT_CAP, TRANSFER_OR_DESTORY_COIN_FUNC, TURBOS_DEX, TURBOS_MODULE, TURBOS_VERSIONED, TWO, U128, U64_MAX, U64_MAX_BN, UTILS_MODULE, ZERO, composeType, createTarget, expectInputRouterSwap, expectOutputRouterSwap, extractAddressFromType, extractStructTagFromType, fixSuiObjectId, isSortedSymbols, normalizeCoinType, parseRouterResponse, patchFixSuiObjectId };
|
|
274
|
+
export { AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AggregatorClient, AggregatorConfig, type AggregatorResponse, type BuildRouterSwapParams, CETUS_DEX, CETUS_MODULE, CETUS_PUBLISHED_AT, CHECK_COINS_THRESHOLD_FUNC, CLOCK_ADDRESS, CoinInfoAddress, CoinStoreAddress, DEEPBOOK_CLOB_V2_MODULE, DEEPBOOK_CUSTODIAN_V2_MODULE, DEEPBOOK_DEX, DEEPBOOK_MODULE, DEEPBOOK_PACKAGE_ID, DEEPBOOK_PUBLISHED_AT, ENV, type ExtendedDetails, FLOWX_AMM, FLOWX_AMM_MODULE, type FindRouterParams, FlashSwapA2BFunc, FlashSwapB2AFunc, FlashSwapFunc, FlashSwapWithPartnerA2BFunc, FlashSwapWithPartnerB2AFunc, FlashSwapWithPartnerFunc, INTEGRATE, JOIN_FUNC, KRIYA_DEX, KRIYA_MODULE, 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_GLOBAL_CONFIG_ID, MAINNET_FLOWX_AMM_CONTAINER_ID, ONE, PAY_MODULE, POOL_MODULT, type Package, type Path, 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, type Router, type RouterData, type RouterError, SWAP_A2B_FUNC, SWAP_B2A_FUNC, SuiZeroCoinFn, type SwapInPoolsParams, type SwapInPoolsResult, 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_GLOBAL_CONFIG_ID, TESTNET_FLOWX_AMM_CONTAINER_ID, TRANSFER_ACCOUNT_CAP, TRANSFER_OR_DESTORY_COIN_FUNC, TURBOS_DEX, TURBOS_MODULE, TURBOS_VERSIONED, TWO, U128, U64_MAX, U64_MAX_BN, UTILS_MODULE, ZERO, composeType, createTarget, expectInputRouterSwap, expectOutputRouterSwap, extractAddressFromType, extractStructTagFromType, fixSuiObjectId, isSortedSymbols, normalizeCoinType, parseRouterResponse, patchFixSuiObjectId };
|
package/dist/index.d.ts
CHANGED
|
@@ -110,11 +110,16 @@ type Router = {
|
|
|
110
110
|
amountOut: BN;
|
|
111
111
|
initialPrice: Decimal;
|
|
112
112
|
};
|
|
113
|
+
type RouterError = {
|
|
114
|
+
code: number;
|
|
115
|
+
msg: string;
|
|
116
|
+
};
|
|
113
117
|
type RouterData = {
|
|
114
118
|
amountIn: BN;
|
|
115
119
|
amountOut: BN;
|
|
116
120
|
routes: Router[];
|
|
117
121
|
insufficientLiquidity: boolean;
|
|
122
|
+
error?: RouterError;
|
|
118
123
|
};
|
|
119
124
|
type AggregatorResponse = {
|
|
120
125
|
code: number;
|
|
@@ -166,7 +171,7 @@ declare class AggregatorClient {
|
|
|
166
171
|
swapInPools(params: SwapInPoolsParams): Promise<SwapInPoolsResult | null>;
|
|
167
172
|
routerSwap(params: BuildRouterSwapParams): Promise<Transaction>;
|
|
168
173
|
signAndExecuteTransaction(txb: Transaction, signer: Signer): Promise<_mysten_sui_client.SuiTransactionBlockResponse>;
|
|
169
|
-
|
|
174
|
+
devInspectTransactionBlock(txb: Transaction): Promise<_mysten_sui_client.DevInspectResults>;
|
|
170
175
|
sendTransaction(txb: Transaction, signer: Signer): Promise<_mysten_sui_client.SuiTransactionBlockResponse>;
|
|
171
176
|
}
|
|
172
177
|
declare function parseRouterResponse(data: any): RouterData;
|
|
@@ -251,6 +256,7 @@ declare const TWO: BN;
|
|
|
251
256
|
declare const U128: BN;
|
|
252
257
|
declare const U64_MAX_BN: BN;
|
|
253
258
|
declare const U64_MAX = "18446744073709551615";
|
|
259
|
+
declare const TEN_POW_NINE = 1000000000;
|
|
254
260
|
declare const MAINNET_FLOWX_AMM_CONTAINER_ID = "0xb65dcbf63fd3ad5d0ebfbf334780dc9f785eff38a4459e37ab08fa79576ee511";
|
|
255
261
|
declare const TESTNET_FLOWX_AMM_CONTAINER_ID = "";
|
|
256
262
|
declare const TURBOS_VERSIONED = "0xf1cf0e81048df168ebeb1b8030fad24b3e0b53ae827c25053fff0779c1445b6f";
|
|
@@ -265,4 +271,4 @@ declare const TESTNET_AFTERMATH_INSURANCE_FUND_ID = "";
|
|
|
265
271
|
declare const MAINNET_AFTERMATH_REFERRAL_VAULT_ID = "0x35d35b0e5b177593d8c3a801462485572fc30861e6ce96a55af6dc4730709278";
|
|
266
272
|
declare const TESTNET_AFTERMATH_REFERRAL_VAULT_ID = "";
|
|
267
273
|
|
|
268
|
-
export { AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AggregatorClient, AggregatorConfig, type AggregatorResponse, type BuildRouterSwapParams, CETUS_DEX, CETUS_MODULE, CETUS_PUBLISHED_AT, CHECK_COINS_THRESHOLD_FUNC, CLOCK_ADDRESS, CoinInfoAddress, CoinStoreAddress, DEEPBOOK_CLOB_V2_MODULE, DEEPBOOK_CUSTODIAN_V2_MODULE, DEEPBOOK_DEX, DEEPBOOK_MODULE, DEEPBOOK_PACKAGE_ID, DEEPBOOK_PUBLISHED_AT, ENV, type ExtendedDetails, FLOWX_AMM, FLOWX_AMM_MODULE, type FindRouterParams, FlashSwapA2BFunc, FlashSwapB2AFunc, FlashSwapFunc, FlashSwapWithPartnerA2BFunc, FlashSwapWithPartnerB2AFunc, FlashSwapWithPartnerFunc, INTEGRATE, JOIN_FUNC, KRIYA_DEX, KRIYA_MODULE, 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_GLOBAL_CONFIG_ID, MAINNET_FLOWX_AMM_CONTAINER_ID, ONE, PAY_MODULE, POOL_MODULT, type Package, type Path, 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, type Router, type RouterData, SWAP_A2B_FUNC, SWAP_B2A_FUNC, SuiZeroCoinFn, type SwapInPoolsParams, type SwapInPoolsResult, 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_GLOBAL_CONFIG_ID, TESTNET_FLOWX_AMM_CONTAINER_ID, TRANSFER_ACCOUNT_CAP, TRANSFER_OR_DESTORY_COIN_FUNC, TURBOS_DEX, TURBOS_MODULE, TURBOS_VERSIONED, TWO, U128, U64_MAX, U64_MAX_BN, UTILS_MODULE, ZERO, composeType, createTarget, expectInputRouterSwap, expectOutputRouterSwap, extractAddressFromType, extractStructTagFromType, fixSuiObjectId, isSortedSymbols, normalizeCoinType, parseRouterResponse, patchFixSuiObjectId };
|
|
274
|
+
export { AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AggregatorClient, AggregatorConfig, type AggregatorResponse, type BuildRouterSwapParams, CETUS_DEX, CETUS_MODULE, CETUS_PUBLISHED_AT, CHECK_COINS_THRESHOLD_FUNC, CLOCK_ADDRESS, CoinInfoAddress, CoinStoreAddress, DEEPBOOK_CLOB_V2_MODULE, DEEPBOOK_CUSTODIAN_V2_MODULE, DEEPBOOK_DEX, DEEPBOOK_MODULE, DEEPBOOK_PACKAGE_ID, DEEPBOOK_PUBLISHED_AT, ENV, type ExtendedDetails, FLOWX_AMM, FLOWX_AMM_MODULE, type FindRouterParams, FlashSwapA2BFunc, FlashSwapB2AFunc, FlashSwapFunc, FlashSwapWithPartnerA2BFunc, FlashSwapWithPartnerB2AFunc, FlashSwapWithPartnerFunc, INTEGRATE, JOIN_FUNC, KRIYA_DEX, KRIYA_MODULE, 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_GLOBAL_CONFIG_ID, MAINNET_FLOWX_AMM_CONTAINER_ID, ONE, PAY_MODULE, POOL_MODULT, type Package, type Path, 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, type Router, type RouterData, type RouterError, SWAP_A2B_FUNC, SWAP_B2A_FUNC, SuiZeroCoinFn, type SwapInPoolsParams, type SwapInPoolsResult, 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_GLOBAL_CONFIG_ID, TESTNET_FLOWX_AMM_CONTAINER_ID, TRANSFER_ACCOUNT_CAP, TRANSFER_OR_DESTORY_COIN_FUNC, TURBOS_DEX, TURBOS_MODULE, TURBOS_VERSIONED, TWO, U128, U64_MAX, U64_MAX_BN, UTILS_MODULE, ZERO, composeType, createTarget, expectInputRouterSwap, expectOutputRouterSwap, extractAddressFromType, extractStructTagFromType, fixSuiObjectId, isSortedSymbols, normalizeCoinType, parseRouterResponse, patchFixSuiObjectId };
|
package/dist/index.js
CHANGED
|
@@ -5318,6 +5318,7 @@ var TWO = new import_bn.default(2);
|
|
|
5318
5318
|
var U128 = TWO.pow(new import_bn.default(128));
|
|
5319
5319
|
var U64_MAX_BN = new import_bn.default("18446744073709551615");
|
|
5320
5320
|
var U64_MAX = "18446744073709551615";
|
|
5321
|
+
var TEN_POW_NINE = 1e9;
|
|
5321
5322
|
var MAINNET_FLOWX_AMM_CONTAINER_ID = "0xb65dcbf63fd3ad5d0ebfbf334780dc9f785eff38a4459e37ab08fa79576ee511";
|
|
5322
5323
|
var TESTNET_FLOWX_AMM_CONTAINER_ID = "";
|
|
5323
5324
|
var TURBOS_VERSIONED = "0xf1cf0e81048df168ebeb1b8030fad24b3e0b53ae827c25053fff0779c1445b6f";
|
|
@@ -5331,6 +5332,22 @@ var MAINNET_AFTERMATH_INSURANCE_FUND_ID = "0xf0c40d67b078000e18032334c3325c47b9e
|
|
|
5331
5332
|
var TESTNET_AFTERMATH_INSURANCE_FUND_ID = "";
|
|
5332
5333
|
var MAINNET_AFTERMATH_REFERRAL_VAULT_ID = "0x35d35b0e5b177593d8c3a801462485572fc30861e6ce96a55af6dc4730709278";
|
|
5333
5334
|
var TESTNET_AFTERMATH_REFERRAL_VAULT_ID = "";
|
|
5335
|
+
|
|
5336
|
+
// src/errors.ts
|
|
5337
|
+
function getAggregatorServerErrorMessage(code) {
|
|
5338
|
+
switch (code) {
|
|
5339
|
+
case 1e4 /* CalculateError */:
|
|
5340
|
+
return "Calculate error";
|
|
5341
|
+
case 10001 /* NumberTooLarge */:
|
|
5342
|
+
return "Input number too large can not fit in target type";
|
|
5343
|
+
case 10002 /* NoRouter */:
|
|
5344
|
+
return "No router";
|
|
5345
|
+
case 10003 /* InsufficientLiquidity */:
|
|
5346
|
+
return "Insufficient Liquidity";
|
|
5347
|
+
default:
|
|
5348
|
+
return "Unknown error";
|
|
5349
|
+
}
|
|
5350
|
+
}
|
|
5334
5351
|
function mintZeroCoin(txb, coinType) {
|
|
5335
5352
|
return txb.moveCall({
|
|
5336
5353
|
target: SuiZeroCoinFn,
|
|
@@ -5347,7 +5364,10 @@ function buildInputCoin(txb, allCoins, amount, coinType) {
|
|
|
5347
5364
|
targetCoinAmount: 0
|
|
5348
5365
|
};
|
|
5349
5366
|
}
|
|
5367
|
+
console.log("used coin asests", usedCoinAsests);
|
|
5350
5368
|
let totalCoinBalance = CoinUtils.calculateTotalBalance(usedCoinAsests);
|
|
5369
|
+
console.log("totalCoinBalance", totalCoinBalance);
|
|
5370
|
+
console.log("amount", amount);
|
|
5351
5371
|
if (totalCoinBalance < amount) {
|
|
5352
5372
|
throw new AggregateError(
|
|
5353
5373
|
"Insufficient balance when build merge coin",
|
|
@@ -5841,9 +5861,9 @@ var import_bn2 = __toESM(require_bn());
|
|
|
5841
5861
|
function CalculateAmountLimit(expectAmount, byAmountIn, slippage) {
|
|
5842
5862
|
let amountLimit = ZERO;
|
|
5843
5863
|
if (byAmountIn) {
|
|
5844
|
-
amountLimit = expectAmount.
|
|
5864
|
+
amountLimit = expectAmount.mul(new import_bn2.default(TEN_POW_NINE - slippage * TEN_POW_NINE)).div(new import_bn2.default(TEN_POW_NINE));
|
|
5845
5865
|
} else {
|
|
5846
|
-
amountLimit = expectAmount.
|
|
5866
|
+
amountLimit = expectAmount.mul(new import_bn2.default(TEN_POW_NINE + slippage * TEN_POW_NINE)).div(new import_bn2.default(TEN_POW_NINE));
|
|
5847
5867
|
}
|
|
5848
5868
|
return Number(amountLimit.toString());
|
|
5849
5869
|
}
|
|
@@ -6536,20 +6556,38 @@ var AggregatorClient = class {
|
|
|
6536
6556
|
}
|
|
6537
6557
|
}
|
|
6538
6558
|
const response = yield fetch(url);
|
|
6539
|
-
|
|
6540
|
-
if (data.data != null) {
|
|
6541
|
-
const res = parseRouterResponse(data.data);
|
|
6542
|
-
return res;
|
|
6543
|
-
}
|
|
6544
|
-
if (data.msg === "liquidity is not enough") {
|
|
6559
|
+
if (!response.ok) {
|
|
6545
6560
|
return {
|
|
6546
6561
|
amountIn: ZERO,
|
|
6547
6562
|
amountOut: ZERO,
|
|
6548
6563
|
routes: [],
|
|
6549
|
-
insufficientLiquidity:
|
|
6564
|
+
insufficientLiquidity: false,
|
|
6565
|
+
error: {
|
|
6566
|
+
code: 10001 /* NumberTooLarge */,
|
|
6567
|
+
msg: getAggregatorServerErrorMessage(
|
|
6568
|
+
10001 /* NumberTooLarge */
|
|
6569
|
+
)
|
|
6570
|
+
}
|
|
6550
6571
|
};
|
|
6551
6572
|
}
|
|
6552
|
-
|
|
6573
|
+
const data = yield response.json();
|
|
6574
|
+
if (data.data != null) {
|
|
6575
|
+
const res = parseRouterResponse(data.data);
|
|
6576
|
+
return res;
|
|
6577
|
+
}
|
|
6578
|
+
const insufficientLiquidity = data.msg === "liquidity is not enough";
|
|
6579
|
+
return {
|
|
6580
|
+
amountIn: ZERO,
|
|
6581
|
+
amountOut: ZERO,
|
|
6582
|
+
routes: [],
|
|
6583
|
+
insufficientLiquidity,
|
|
6584
|
+
error: {
|
|
6585
|
+
code: 10003 /* InsufficientLiquidity */,
|
|
6586
|
+
msg: getAggregatorServerErrorMessage(
|
|
6587
|
+
10003 /* InsufficientLiquidity */
|
|
6588
|
+
)
|
|
6589
|
+
}
|
|
6590
|
+
};
|
|
6553
6591
|
});
|
|
6554
6592
|
}
|
|
6555
6593
|
swapInPools(params) {
|
|
@@ -6674,9 +6712,8 @@ var AggregatorClient = class {
|
|
|
6674
6712
|
return res;
|
|
6675
6713
|
});
|
|
6676
6714
|
}
|
|
6677
|
-
|
|
6715
|
+
devInspectTransactionBlock(txb) {
|
|
6678
6716
|
return __async(this, null, function* () {
|
|
6679
|
-
console.log(this.wallet);
|
|
6680
6717
|
const res = yield this.client.devInspectTransactionBlock({
|
|
6681
6718
|
transactionBlock: txb,
|
|
6682
6719
|
sender: this.wallet
|
|
@@ -6796,6 +6833,7 @@ exports.RepayFlashSwapWithPartnerFunc = RepayFlashSwapWithPartnerFunc;
|
|
|
6796
6833
|
exports.SWAP_A2B_FUNC = SWAP_A2B_FUNC;
|
|
6797
6834
|
exports.SWAP_B2A_FUNC = SWAP_B2A_FUNC;
|
|
6798
6835
|
exports.SuiZeroCoinFn = SuiZeroCoinFn;
|
|
6836
|
+
exports.TEN_POW_NINE = TEN_POW_NINE;
|
|
6799
6837
|
exports.TESTNET_AFTERMATH_INSURANCE_FUND_ID = TESTNET_AFTERMATH_INSURANCE_FUND_ID;
|
|
6800
6838
|
exports.TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID = TESTNET_AFTERMATH_PROTOCOL_FEE_VAULT_ID;
|
|
6801
6839
|
exports.TESTNET_AFTERMATH_REFERRAL_VAULT_ID = TESTNET_AFTERMATH_REFERRAL_VAULT_ID;
|
package/dist/index.mjs
CHANGED
|
@@ -5316,6 +5316,7 @@ var TWO = new import_bn.default(2);
|
|
|
5316
5316
|
var U128 = TWO.pow(new import_bn.default(128));
|
|
5317
5317
|
var U64_MAX_BN = new import_bn.default("18446744073709551615");
|
|
5318
5318
|
var U64_MAX = "18446744073709551615";
|
|
5319
|
+
var TEN_POW_NINE = 1e9;
|
|
5319
5320
|
var MAINNET_FLOWX_AMM_CONTAINER_ID = "0xb65dcbf63fd3ad5d0ebfbf334780dc9f785eff38a4459e37ab08fa79576ee511";
|
|
5320
5321
|
var TESTNET_FLOWX_AMM_CONTAINER_ID = "";
|
|
5321
5322
|
var TURBOS_VERSIONED = "0xf1cf0e81048df168ebeb1b8030fad24b3e0b53ae827c25053fff0779c1445b6f";
|
|
@@ -5329,6 +5330,22 @@ var MAINNET_AFTERMATH_INSURANCE_FUND_ID = "0xf0c40d67b078000e18032334c3325c47b9e
|
|
|
5329
5330
|
var TESTNET_AFTERMATH_INSURANCE_FUND_ID = "";
|
|
5330
5331
|
var MAINNET_AFTERMATH_REFERRAL_VAULT_ID = "0x35d35b0e5b177593d8c3a801462485572fc30861e6ce96a55af6dc4730709278";
|
|
5331
5332
|
var TESTNET_AFTERMATH_REFERRAL_VAULT_ID = "";
|
|
5333
|
+
|
|
5334
|
+
// src/errors.ts
|
|
5335
|
+
function getAggregatorServerErrorMessage(code) {
|
|
5336
|
+
switch (code) {
|
|
5337
|
+
case 1e4 /* CalculateError */:
|
|
5338
|
+
return "Calculate error";
|
|
5339
|
+
case 10001 /* NumberTooLarge */:
|
|
5340
|
+
return "Input number too large can not fit in target type";
|
|
5341
|
+
case 10002 /* NoRouter */:
|
|
5342
|
+
return "No router";
|
|
5343
|
+
case 10003 /* InsufficientLiquidity */:
|
|
5344
|
+
return "Insufficient Liquidity";
|
|
5345
|
+
default:
|
|
5346
|
+
return "Unknown error";
|
|
5347
|
+
}
|
|
5348
|
+
}
|
|
5332
5349
|
function mintZeroCoin(txb, coinType) {
|
|
5333
5350
|
return txb.moveCall({
|
|
5334
5351
|
target: SuiZeroCoinFn,
|
|
@@ -5345,7 +5362,10 @@ function buildInputCoin(txb, allCoins, amount, coinType) {
|
|
|
5345
5362
|
targetCoinAmount: 0
|
|
5346
5363
|
};
|
|
5347
5364
|
}
|
|
5365
|
+
console.log("used coin asests", usedCoinAsests);
|
|
5348
5366
|
let totalCoinBalance = CoinUtils.calculateTotalBalance(usedCoinAsests);
|
|
5367
|
+
console.log("totalCoinBalance", totalCoinBalance);
|
|
5368
|
+
console.log("amount", amount);
|
|
5349
5369
|
if (totalCoinBalance < amount) {
|
|
5350
5370
|
throw new AggregateError(
|
|
5351
5371
|
"Insufficient balance when build merge coin",
|
|
@@ -5839,9 +5859,9 @@ var import_bn2 = __toESM(require_bn());
|
|
|
5839
5859
|
function CalculateAmountLimit(expectAmount, byAmountIn, slippage) {
|
|
5840
5860
|
let amountLimit = ZERO;
|
|
5841
5861
|
if (byAmountIn) {
|
|
5842
|
-
amountLimit = expectAmount.
|
|
5862
|
+
amountLimit = expectAmount.mul(new import_bn2.default(TEN_POW_NINE - slippage * TEN_POW_NINE)).div(new import_bn2.default(TEN_POW_NINE));
|
|
5843
5863
|
} else {
|
|
5844
|
-
amountLimit = expectAmount.
|
|
5864
|
+
amountLimit = expectAmount.mul(new import_bn2.default(TEN_POW_NINE + slippage * TEN_POW_NINE)).div(new import_bn2.default(TEN_POW_NINE));
|
|
5845
5865
|
}
|
|
5846
5866
|
return Number(amountLimit.toString());
|
|
5847
5867
|
}
|
|
@@ -6534,20 +6554,38 @@ var AggregatorClient = class {
|
|
|
6534
6554
|
}
|
|
6535
6555
|
}
|
|
6536
6556
|
const response = yield fetch(url);
|
|
6537
|
-
|
|
6538
|
-
if (data.data != null) {
|
|
6539
|
-
const res = parseRouterResponse(data.data);
|
|
6540
|
-
return res;
|
|
6541
|
-
}
|
|
6542
|
-
if (data.msg === "liquidity is not enough") {
|
|
6557
|
+
if (!response.ok) {
|
|
6543
6558
|
return {
|
|
6544
6559
|
amountIn: ZERO,
|
|
6545
6560
|
amountOut: ZERO,
|
|
6546
6561
|
routes: [],
|
|
6547
|
-
insufficientLiquidity:
|
|
6562
|
+
insufficientLiquidity: false,
|
|
6563
|
+
error: {
|
|
6564
|
+
code: 10001 /* NumberTooLarge */,
|
|
6565
|
+
msg: getAggregatorServerErrorMessage(
|
|
6566
|
+
10001 /* NumberTooLarge */
|
|
6567
|
+
)
|
|
6568
|
+
}
|
|
6548
6569
|
};
|
|
6549
6570
|
}
|
|
6550
|
-
|
|
6571
|
+
const data = yield response.json();
|
|
6572
|
+
if (data.data != null) {
|
|
6573
|
+
const res = parseRouterResponse(data.data);
|
|
6574
|
+
return res;
|
|
6575
|
+
}
|
|
6576
|
+
const insufficientLiquidity = data.msg === "liquidity is not enough";
|
|
6577
|
+
return {
|
|
6578
|
+
amountIn: ZERO,
|
|
6579
|
+
amountOut: ZERO,
|
|
6580
|
+
routes: [],
|
|
6581
|
+
insufficientLiquidity,
|
|
6582
|
+
error: {
|
|
6583
|
+
code: 10003 /* InsufficientLiquidity */,
|
|
6584
|
+
msg: getAggregatorServerErrorMessage(
|
|
6585
|
+
10003 /* InsufficientLiquidity */
|
|
6586
|
+
)
|
|
6587
|
+
}
|
|
6588
|
+
};
|
|
6551
6589
|
});
|
|
6552
6590
|
}
|
|
6553
6591
|
swapInPools(params) {
|
|
@@ -6672,9 +6710,8 @@ var AggregatorClient = class {
|
|
|
6672
6710
|
return res;
|
|
6673
6711
|
});
|
|
6674
6712
|
}
|
|
6675
|
-
|
|
6713
|
+
devInspectTransactionBlock(txb) {
|
|
6676
6714
|
return __async(this, null, function* () {
|
|
6677
|
-
console.log(this.wallet);
|
|
6678
6715
|
const res = yield this.client.devInspectTransactionBlock({
|
|
6679
6716
|
transactionBlock: txb,
|
|
6680
6717
|
sender: this.wallet
|
|
@@ -6744,4 +6781,4 @@ decimal.js/decimal.mjs:
|
|
|
6744
6781
|
*)
|
|
6745
6782
|
*/
|
|
6746
6783
|
|
|
6747
|
-
export { AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AggregatorClient, AggregatorConfig, CETUS_DEX, CETUS_MODULE, CETUS_PUBLISHED_AT, CHECK_COINS_THRESHOLD_FUNC, CLOCK_ADDRESS, CoinInfoAddress, CoinStoreAddress, DEEPBOOK_CLOB_V2_MODULE, DEEPBOOK_CUSTODIAN_V2_MODULE, DEEPBOOK_DEX, DEEPBOOK_MODULE, DEEPBOOK_PACKAGE_ID, DEEPBOOK_PUBLISHED_AT, ENV, FLOWX_AMM, FLOWX_AMM_MODULE, FlashSwapA2BFunc, FlashSwapB2AFunc, FlashSwapFunc, FlashSwapWithPartnerA2BFunc, FlashSwapWithPartnerB2AFunc, FlashSwapWithPartnerFunc, INTEGRATE, JOIN_FUNC, KRIYA_DEX, KRIYA_MODULE, 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_GLOBAL_CONFIG_ID, MAINNET_FLOWX_AMM_CONTAINER_ID, ONE, PAY_MODULE, POOL_MODULT, 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, SWAP_A2B_FUNC, SWAP_B2A_FUNC, SuiZeroCoinFn, 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_GLOBAL_CONFIG_ID, TESTNET_FLOWX_AMM_CONTAINER_ID, TRANSFER_ACCOUNT_CAP, TRANSFER_OR_DESTORY_COIN_FUNC, TURBOS_DEX, TURBOS_MODULE, TURBOS_VERSIONED, TWO, U128, U64_MAX, U64_MAX_BN, UTILS_MODULE, ZERO, composeType, createTarget, expectInputRouterSwap, expectOutputRouterSwap, extractAddressFromType, extractStructTagFromType, fixSuiObjectId, isSortedSymbols, normalizeCoinType, parseRouterResponse, patchFixSuiObjectId };
|
|
6784
|
+
export { AFTERMATH_AMM, AFTERMATH_MODULE, AGGREGATOR, AggregatorClient, AggregatorConfig, CETUS_DEX, CETUS_MODULE, CETUS_PUBLISHED_AT, CHECK_COINS_THRESHOLD_FUNC, CLOCK_ADDRESS, CoinInfoAddress, CoinStoreAddress, DEEPBOOK_CLOB_V2_MODULE, DEEPBOOK_CUSTODIAN_V2_MODULE, DEEPBOOK_DEX, DEEPBOOK_MODULE, DEEPBOOK_PACKAGE_ID, DEEPBOOK_PUBLISHED_AT, ENV, FLOWX_AMM, FLOWX_AMM_MODULE, FlashSwapA2BFunc, FlashSwapB2AFunc, FlashSwapFunc, FlashSwapWithPartnerA2BFunc, FlashSwapWithPartnerB2AFunc, FlashSwapWithPartnerFunc, INTEGRATE, JOIN_FUNC, KRIYA_DEX, KRIYA_MODULE, 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_GLOBAL_CONFIG_ID, MAINNET_FLOWX_AMM_CONTAINER_ID, ONE, PAY_MODULE, POOL_MODULT, 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, 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_GLOBAL_CONFIG_ID, TESTNET_FLOWX_AMM_CONTAINER_ID, TRANSFER_ACCOUNT_CAP, TRANSFER_OR_DESTORY_COIN_FUNC, TURBOS_DEX, TURBOS_MODULE, TURBOS_VERSIONED, TWO, U128, U64_MAX, U64_MAX_BN, UTILS_MODULE, ZERO, composeType, createTarget, expectInputRouterSwap, expectOutputRouterSwap, extractAddressFromType, extractStructTagFromType, fixSuiObjectId, isSortedSymbols, normalizeCoinType, parseRouterResponse, patchFixSuiObjectId };
|
package/dist/src/client.d.ts
CHANGED
|
@@ -27,11 +27,16 @@ export type Router = {
|
|
|
27
27
|
amountOut: BN;
|
|
28
28
|
initialPrice: Decimal;
|
|
29
29
|
};
|
|
30
|
+
export type RouterError = {
|
|
31
|
+
code: number;
|
|
32
|
+
msg: string;
|
|
33
|
+
};
|
|
30
34
|
export type RouterData = {
|
|
31
35
|
amountIn: BN;
|
|
32
36
|
amountOut: BN;
|
|
33
37
|
routes: Router[];
|
|
34
38
|
insufficientLiquidity: boolean;
|
|
39
|
+
error?: RouterError;
|
|
35
40
|
};
|
|
36
41
|
export type AggregatorResponse = {
|
|
37
42
|
code: number;
|
|
@@ -83,7 +88,7 @@ export declare class AggregatorClient {
|
|
|
83
88
|
swapInPools(params: SwapInPoolsParams): Promise<SwapInPoolsResult | null>;
|
|
84
89
|
routerSwap(params: BuildRouterSwapParams): Promise<Transaction>;
|
|
85
90
|
signAndExecuteTransaction(txb: Transaction, signer: Signer): Promise<import("@mysten/sui/client").SuiTransactionBlockResponse>;
|
|
86
|
-
|
|
91
|
+
devInspectTransactionBlock(txb: Transaction): Promise<import("@mysten/sui/client").DevInspectResults>;
|
|
87
92
|
sendTransaction(txb: Transaction, signer: Signer): Promise<import("@mysten/sui/client").SuiTransactionBlockResponse>;
|
|
88
93
|
}
|
|
89
94
|
export declare function parseRouterResponse(data: any): RouterData;
|
package/dist/src/const.d.ts
CHANGED
|
@@ -60,6 +60,7 @@ export declare const TWO: BN;
|
|
|
60
60
|
export declare const U128: BN;
|
|
61
61
|
export declare const U64_MAX_BN: BN;
|
|
62
62
|
export declare const U64_MAX = "18446744073709551615";
|
|
63
|
+
export declare const TEN_POW_NINE = 1000000000;
|
|
63
64
|
export declare const MAINNET_FLOWX_AMM_CONTAINER_ID = "0xb65dcbf63fd3ad5d0ebfbf334780dc9f785eff38a4459e37ab08fa79576ee511";
|
|
64
65
|
export declare const TESTNET_FLOWX_AMM_CONTAINER_ID = "";
|
|
65
66
|
export declare const TURBOS_VERSIONED = "0xf1cf0e81048df168ebeb1b8030fad24b3e0b53ae827c25053fff0779c1445b6f";
|
package/dist/src/errors.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export declare enum TransactionErrorCode {
|
|
|
16
16
|
MissTurbosFeeType = "MissTurbosFeeType",
|
|
17
17
|
MissAftermathLpSupplyType = "MissAftermathLpSupplyType"
|
|
18
18
|
}
|
|
19
|
-
export type AggregatorErrorCode = TypesErrorCode;
|
|
19
|
+
export type AggregatorErrorCode = TypesErrorCode | ConfigErrorCode | TransactionErrorCode;
|
|
20
20
|
/**
|
|
21
21
|
* AggregatorError is a custom error class that extends the built-in Error class. It is used to represent errors that occur during aggregation operations.
|
|
22
22
|
* The key functionality of this code includes:
|
|
@@ -29,3 +29,10 @@ export declare class AggregatorError extends Error {
|
|
|
29
29
|
constructor(message: string, errorCode?: AggregatorErrorCode);
|
|
30
30
|
static isAggregatorErrorCode(e: any, code: AggregatorErrorCode): boolean;
|
|
31
31
|
}
|
|
32
|
+
export declare enum AggregatorServerErrorCode {
|
|
33
|
+
CalculateError = 10000,
|
|
34
|
+
NumberTooLarge = 10001,
|
|
35
|
+
NoRouter = 10002,
|
|
36
|
+
InsufficientLiquidity = 10003
|
|
37
|
+
}
|
|
38
|
+
export declare function getAggregatorServerErrorMessage(code: AggregatorServerErrorCode): string;
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -17,6 +17,10 @@ import { swapInPools } from "./transaction/swap"
|
|
|
17
17
|
import { completionCoin } from "./utils/coin"
|
|
18
18
|
import { SUI_FRAMEWORK_ADDRESS } from "@mysten/sui/utils"
|
|
19
19
|
import { AFTERMATH_AMM, JOIN_FUNC, PAY_MODULE, TURBOS_DEX, ZERO } from "./const"
|
|
20
|
+
import {
|
|
21
|
+
AggregatorServerErrorCode,
|
|
22
|
+
getAggregatorServerErrorMessage,
|
|
23
|
+
} from "./errors"
|
|
20
24
|
|
|
21
25
|
export type ExtendedDetails = {
|
|
22
26
|
aftermathPoolFlatness?: number
|
|
@@ -44,11 +48,17 @@ export type Router = {
|
|
|
44
48
|
initialPrice: Decimal
|
|
45
49
|
}
|
|
46
50
|
|
|
51
|
+
export type RouterError = {
|
|
52
|
+
code: number
|
|
53
|
+
msg: string
|
|
54
|
+
}
|
|
55
|
+
|
|
47
56
|
export type RouterData = {
|
|
48
57
|
amountIn: BN
|
|
49
58
|
amountOut: BN
|
|
50
59
|
routes: Router[]
|
|
51
60
|
insufficientLiquidity: boolean
|
|
61
|
+
error?: RouterError
|
|
52
62
|
}
|
|
53
63
|
|
|
54
64
|
export type AggregatorResponse = {
|
|
@@ -184,6 +194,21 @@ export class AggregatorClient {
|
|
|
184
194
|
}
|
|
185
195
|
|
|
186
196
|
const response = await fetch(url)
|
|
197
|
+
if (!response.ok) {
|
|
198
|
+
return {
|
|
199
|
+
amountIn: ZERO,
|
|
200
|
+
amountOut: ZERO,
|
|
201
|
+
routes: [],
|
|
202
|
+
insufficientLiquidity: false,
|
|
203
|
+
error: {
|
|
204
|
+
code: AggregatorServerErrorCode.NumberTooLarge,
|
|
205
|
+
msg: getAggregatorServerErrorMessage(
|
|
206
|
+
AggregatorServerErrorCode.NumberTooLarge
|
|
207
|
+
),
|
|
208
|
+
},
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
187
212
|
const data = await response.json()
|
|
188
213
|
|
|
189
214
|
if (data.data != null) {
|
|
@@ -191,15 +216,20 @@ export class AggregatorClient {
|
|
|
191
216
|
return res
|
|
192
217
|
}
|
|
193
218
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
219
|
+
const insufficientLiquidity = data.msg === "liquidity is not enough"
|
|
220
|
+
|
|
221
|
+
return {
|
|
222
|
+
amountIn: ZERO,
|
|
223
|
+
amountOut: ZERO,
|
|
224
|
+
routes: [],
|
|
225
|
+
insufficientLiquidity,
|
|
226
|
+
error: {
|
|
227
|
+
code: AggregatorServerErrorCode.InsufficientLiquidity,
|
|
228
|
+
msg: getAggregatorServerErrorMessage(
|
|
229
|
+
AggregatorServerErrorCode.InsufficientLiquidity
|
|
230
|
+
),
|
|
231
|
+
},
|
|
201
232
|
}
|
|
202
|
-
return null
|
|
203
233
|
}
|
|
204
234
|
|
|
205
235
|
async swapInPools(
|
|
@@ -236,7 +266,6 @@ export class AggregatorClient {
|
|
|
236
266
|
)
|
|
237
267
|
|
|
238
268
|
const txb = new Transaction()
|
|
239
|
-
// txb.setGasBudget(42392686100000000)
|
|
240
269
|
|
|
241
270
|
if (refreshAllCoins || this.allCoins.length === 0) {
|
|
242
271
|
this.allCoins = await this.getAllCoins()
|
|
@@ -331,8 +360,7 @@ export class AggregatorClient {
|
|
|
331
360
|
return res
|
|
332
361
|
}
|
|
333
362
|
|
|
334
|
-
async
|
|
335
|
-
console.log(this.wallet)
|
|
363
|
+
async devInspectTransactionBlock(txb: Transaction) {
|
|
336
364
|
const res = await this.client.devInspectTransactionBlock({
|
|
337
365
|
transactionBlock: txb,
|
|
338
366
|
sender: this.wallet,
|
package/src/const.ts
CHANGED
|
@@ -102,6 +102,8 @@ export const U64_MAX_BN = new BN("18446744073709551615")
|
|
|
102
102
|
|
|
103
103
|
export const U64_MAX = "18446744073709551615"
|
|
104
104
|
|
|
105
|
+
export const TEN_POW_NINE = 1000000000
|
|
106
|
+
|
|
105
107
|
export const MAINNET_FLOWX_AMM_CONTAINER_ID =
|
|
106
108
|
"0xb65dcbf63fd3ad5d0ebfbf334780dc9f785eff38a4459e37ab08fa79576ee511"
|
|
107
109
|
export const TESTNET_FLOWX_AMM_CONTAINER_ID = ""
|
package/src/errors.ts
CHANGED
|
@@ -19,7 +19,10 @@ export enum TransactionErrorCode {
|
|
|
19
19
|
MissAftermathLpSupplyType = `MissAftermathLpSupplyType`,
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export type AggregatorErrorCode =
|
|
22
|
+
export type AggregatorErrorCode =
|
|
23
|
+
| TypesErrorCode
|
|
24
|
+
| ConfigErrorCode
|
|
25
|
+
| TransactionErrorCode
|
|
23
26
|
|
|
24
27
|
/**
|
|
25
28
|
* AggregatorError is a custom error class that extends the built-in Error class. It is used to represent errors that occur during aggregation operations.
|
|
@@ -42,3 +45,27 @@ export class AggregatorError extends Error {
|
|
|
42
45
|
return e instanceof AggregatorError && e.errorCode === code
|
|
43
46
|
}
|
|
44
47
|
}
|
|
48
|
+
|
|
49
|
+
export enum AggregatorServerErrorCode {
|
|
50
|
+
CalculateError = 10000,
|
|
51
|
+
NumberTooLarge = 10001,
|
|
52
|
+
NoRouter = 10002,
|
|
53
|
+
InsufficientLiquidity = 10003,
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function getAggregatorServerErrorMessage(
|
|
57
|
+
code: AggregatorServerErrorCode
|
|
58
|
+
): string {
|
|
59
|
+
switch (code) {
|
|
60
|
+
case AggregatorServerErrorCode.CalculateError:
|
|
61
|
+
return "Calculate error"
|
|
62
|
+
case AggregatorServerErrorCode.NumberTooLarge:
|
|
63
|
+
return "Input number too large can not fit in target type"
|
|
64
|
+
case AggregatorServerErrorCode.NoRouter:
|
|
65
|
+
return "No router"
|
|
66
|
+
case AggregatorServerErrorCode.InsufficientLiquidity:
|
|
67
|
+
return "Insufficient Liquidity"
|
|
68
|
+
default:
|
|
69
|
+
return "Unknown error"
|
|
70
|
+
}
|
|
71
|
+
}
|
package/src/math.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// `byAmountIn` means fixed amount in or out.
|
|
4
4
|
|
|
5
5
|
import BN from "bn.js"
|
|
6
|
-
import { ZERO } from "./const"
|
|
6
|
+
import { TEN_POW_NINE, ZERO } from "./const"
|
|
7
7
|
import Decimal from "decimal.js"
|
|
8
8
|
|
|
9
9
|
// `slippage` is a percentage, for example, 0.01 means 1%.
|
|
@@ -14,9 +14,13 @@ export function CalculateAmountLimit(
|
|
|
14
14
|
): number {
|
|
15
15
|
let amountLimit = ZERO
|
|
16
16
|
if (byAmountIn) {
|
|
17
|
-
amountLimit = expectAmount
|
|
17
|
+
amountLimit = expectAmount
|
|
18
|
+
.mul(new BN(TEN_POW_NINE - slippage * TEN_POW_NINE))
|
|
19
|
+
.div(new BN(TEN_POW_NINE))
|
|
18
20
|
} else {
|
|
19
|
-
amountLimit = expectAmount
|
|
21
|
+
amountLimit = expectAmount
|
|
22
|
+
.mul(new BN(TEN_POW_NINE + slippage * TEN_POW_NINE))
|
|
23
|
+
.div(new BN(TEN_POW_NINE))
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
return Number(amountLimit.toString())
|
|
@@ -51,7 +51,12 @@ export function buildInputCoin(
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
console.log("used coin asests", usedCoinAsests)
|
|
55
|
+
|
|
54
56
|
let totalCoinBalance = CoinUtils.calculateTotalBalance(usedCoinAsests)
|
|
57
|
+
|
|
58
|
+
console.log("totalCoinBalance", totalCoinBalance)
|
|
59
|
+
console.log("amount", amount)
|
|
55
60
|
if (totalCoinBalance < amount) {
|
|
56
61
|
throw new AggregateError(
|
|
57
62
|
"Insufficient balance when build merge coin",
|
package/tests/math.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { sqrtPriceX64ToPrice } from "~/math"
|
|
1
|
+
import BN from "bn.js"
|
|
2
|
+
import { CalculateAmountLimit, sqrtPriceX64ToPrice } from "~/math"
|
|
3
3
|
|
|
4
4
|
describe("test math functions", () => {
|
|
5
5
|
test("test sqrt price x64 to price", () => {
|
|
@@ -10,4 +10,12 @@ describe("test math functions", () => {
|
|
|
10
10
|
const price = sqrtPriceX64ToPrice(sqrtPriceStr, decimalsA, decimalsB)
|
|
11
11
|
console.log("price", price.toFixed(9))
|
|
12
12
|
})
|
|
13
|
+
|
|
14
|
+
test("calculate amount limit", () => {
|
|
15
|
+
const amount = new BN(80017351)
|
|
16
|
+
const byAmountIn = true
|
|
17
|
+
|
|
18
|
+
const amountLimit = CalculateAmountLimit(amount, byAmountIn, 0.01)
|
|
19
|
+
console.log("amount limit", amountLimit.toString())
|
|
20
|
+
})
|
|
13
21
|
})
|
package/tests/router.test.ts
CHANGED
|
@@ -16,6 +16,7 @@ import { printTransaction } from "~/utils/transaction"
|
|
|
16
16
|
import BN from "bn.js"
|
|
17
17
|
import { fromHEX } from "@mysten/bcs"
|
|
18
18
|
import { fromB64 } from "@mysten/sui/utils"
|
|
19
|
+
import { getFullnodeUrl } from "@mysten/sui/dist/cjs/client"
|
|
19
20
|
|
|
20
21
|
dotenv.config()
|
|
21
22
|
|
|
@@ -42,13 +43,13 @@ describe("router module", () => {
|
|
|
42
43
|
const byte = Buffer.from(secret, "base64")
|
|
43
44
|
const u8Array = new Uint8Array(byte)
|
|
44
45
|
|
|
45
|
-
keypair = Ed25519Keypair.fromSecretKey(fromB64(secret).slice(1, 33))
|
|
46
|
+
// keypair = Ed25519Keypair.fromSecretKey(fromB64(secret).slice(1, 33))
|
|
46
47
|
|
|
47
|
-
const wallet = keypair.getPublicKey().toSuiAddress()
|
|
48
|
-
console.log("wallet", wallet)
|
|
48
|
+
// const wallet = keypair.getPublicKey().toSuiAddress()
|
|
49
|
+
// console.log("wallet", wallet)
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
const wallet =
|
|
52
|
+
"0xfba94aa36e93ccc7d84a6a57040fc51983223f1b522a8d0be3c3bf2c98977ebb"
|
|
52
53
|
// const wallet = "0xaabf2fedcb36146db164bec930b74a47969c4df98216e049342a3c49b6d11580"
|
|
53
54
|
// const wallet = "0x410456cfc689666936b6bf80fbec958b69499b9f7183ecba07de577c17248a44"
|
|
54
55
|
// const wallet = "0xca171941521153181ff729d53489eaae7e99c3f4692884afd7cca61154e4cec4"
|
|
@@ -110,7 +111,7 @@ describe("router module", () => {
|
|
|
110
111
|
})
|
|
111
112
|
|
|
112
113
|
test("Find router", async () => {
|
|
113
|
-
const amount = "
|
|
114
|
+
const amount = "423926761000000000000000000000"
|
|
114
115
|
|
|
115
116
|
const res = await client.findRouter({
|
|
116
117
|
from: M_SUI,
|
|
@@ -134,10 +135,10 @@ describe("router module", () => {
|
|
|
134
135
|
|
|
135
136
|
test("Build router tx", async () => {
|
|
136
137
|
const byAmountIn = true
|
|
137
|
-
const amount = "
|
|
138
|
+
const amount = "1000000"
|
|
138
139
|
|
|
139
|
-
const from =
|
|
140
|
-
const target =
|
|
140
|
+
const from = M_USDC
|
|
141
|
+
const target = M_SUI
|
|
141
142
|
|
|
142
143
|
const res = await client.findRouter({
|
|
143
144
|
from,
|
|
@@ -148,7 +149,7 @@ describe("router module", () => {
|
|
|
148
149
|
splitAlgorithm: null,
|
|
149
150
|
splitFactor: null,
|
|
150
151
|
splitCount: null,
|
|
151
|
-
providers: ["CETUS"],
|
|
152
|
+
providers: ["CETUS", "DEEPBOOK", "AFTERMATH", "FLOWX", "KRIYA", "TURBOS"],
|
|
152
153
|
})
|
|
153
154
|
|
|
154
155
|
if (res != null) {
|
|
@@ -173,6 +174,8 @@ describe("router module", () => {
|
|
|
173
174
|
refreshAllCoins: true,
|
|
174
175
|
})
|
|
175
176
|
|
|
177
|
+
printTransaction(routerTx)
|
|
178
|
+
|
|
176
179
|
let result = await client.devInspectTransactionBlock(routerTx)
|
|
177
180
|
|
|
178
181
|
if (result.effects.status.status === "success") {
|