@scallop-io/sui-scallop-sdk 0.46.38 → 0.46.40

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.
@@ -0,0 +1,2 @@
1
+ import { OptionalKeys, SupportPoolCoins } from 'src/types';
2
+ export declare const FlashLoanFeeObjectMap: OptionalKeys<Record<SupportPoolCoins, string>>;
@@ -1,3 +1,4 @@
1
1
  export * from './common';
2
2
  export * from './enum';
3
3
  export * from './vesca';
4
+ export * from './flashloan';
package/dist/index.js CHANGED
@@ -33,6 +33,7 @@ __export(src_exports, {
33
33
  ADDRESSES_ID: () => ADDRESSES_ID,
34
34
  API_BASE_URL: () => API_BASE_URL,
35
35
  BORROW_FEE_PROTOCOL_ID: () => BORROW_FEE_PROTOCOL_ID,
36
+ FlashLoanFeeObjectMap: () => FlashLoanFeeObjectMap,
36
37
  IS_VE_SCA_TEST: () => IS_VE_SCA_TEST,
37
38
  MAX_LOCK_DURATION: () => MAX_LOCK_DURATION,
38
39
  MAX_LOCK_ROUNDS: () => MAX_LOCK_ROUNDS,
@@ -267,6 +268,22 @@ var MAX_LOCK_DURATION = MAX_LOCK_ROUNDS * UNLOCK_ROUND_DURATION;
267
268
  var MIN_INITIAL_LOCK_AMOUNT = 1e10;
268
269
  var MIN_TOP_UP_AMOUNT = 1e9;
269
270
 
271
+ // src/constants/flashloan.ts
272
+ var FlashLoanFeeObjectMap = {
273
+ vsui: "0x0069cddee7a5c0b1d34beb5ef0620f978096525f1830b055f38b110f40d73fbb",
274
+ btc: "0x2078490aa37d8fb42b511e5c95e217cb957d141267e16980bc802d76b42719f7",
275
+ sui: "0x27614284a8f0a699ffd35aae8f2572c937ec76771cb21b0d7930ec4491a76ed4",
276
+ usdt: "0x5b61983a19b5159ca348d291e4b595f42db70ccda32852a2ed85528aa65171e4",
277
+ apt: "0x9d5898edcd1e4abcb044273242293a9d036f6a977bf3fe57ab71f5a87c505ee6",
278
+ afsui: "0xac87fde83d434554ec300c1334c9a622aa5b59e82a04334dc99e1cc1f75d4eae",
279
+ hasui: "0xb9f505d532de1d6c9f3a8522a2d16f2958b75c0ed939d4f80b96f584a2a8ed5e",
280
+ usdc: "0xd241d6a7e44ac11a6689370ed9a98eec389b98b8a6695c61fddede9fa7567b90",
281
+ eth: "0xd252acb058e77877810c1290564e290a8f9fcab5bc9aca2884ede8a38810cf34",
282
+ sca: "0xe04e46471754b6f48d81c549ecfec09de02733715a63bec02364c6ac7c4dd2dc",
283
+ cetus: "0xe65a73d11c31b2d323ad2b9f6b4bb0a3c0df9c1b212eef66c854941186a5ddc7",
284
+ sol: "0xe84bdb35b790fc7bdd1645122ac6ac0fc904531d6772c9e25904fece322c5f34"
285
+ };
286
+
270
287
  // src/models/scallop.ts
271
288
  var import_sui_kit13 = require("@scallop-io/sui-kit");
272
289
 
@@ -2107,7 +2124,7 @@ var getMarketPools = async (query, poolCoinNames, indexer = false) => {
2107
2124
  }
2108
2125
  return marketPools;
2109
2126
  }
2110
- Promise.allSettled(
2127
+ await Promise.allSettled(
2111
2128
  poolCoinNames.map(async (poolCoinName) => {
2112
2129
  const marketPool = await getMarketPool(
2113
2130
  query,
@@ -2124,11 +2141,6 @@ var getMarketPools = async (query, poolCoinNames, indexer = false) => {
2124
2141
  return marketPools;
2125
2142
  };
2126
2143
  var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, coinPrice) => {
2127
- const marketId = query.address.get("core.market");
2128
- marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2129
- showContent: true
2130
- })).data;
2131
- coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2132
2144
  let marketPool;
2133
2145
  let balanceSheet;
2134
2146
  let borrowIndex;
@@ -2142,6 +2154,11 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2142
2154
  );
2143
2155
  return marketPoolIndexer;
2144
2156
  }
2157
+ const marketId = query.address.get("core.market");
2158
+ marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2159
+ showContent: true
2160
+ })).data;
2161
+ coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2145
2162
  if (marketObject) {
2146
2163
  if (marketObject.content && "fields" in marketObject.content) {
2147
2164
  const fields = marketObject.content.fields;
@@ -2468,7 +2485,7 @@ var getMarketCoinAmounts = async (query, marketCoinNames, ownerAddress) => {
2468
2485
  );
2469
2486
  const owner = ownerAddress || query.suiKit.currentAddress();
2470
2487
  const marketCoins2 = {};
2471
- Promise.allSettled(
2488
+ await Promise.allSettled(
2472
2489
  marketCoinNames.map(async (marketCoinName) => {
2473
2490
  const marketCoin = await getMarketCoinAmount(
2474
2491
  query,
@@ -2489,6 +2506,64 @@ var getMarketCoinAmount = async (query, marketCoinName, ownerAddress) => {
2489
2506
  });
2490
2507
  return (0, import_bignumber2.default)(amount).toNumber();
2491
2508
  };
2509
+ var getFlashLoanFees = async (query, assetNames) => {
2510
+ const FEE_RATE = 1e4;
2511
+ const missingAssets = [];
2512
+ const assetTypeMap = assetNames.reduce(
2513
+ (prev, curr) => {
2514
+ const assetType = query.utils.parseCoinType(curr).slice(2);
2515
+ prev[assetType] = curr;
2516
+ return prev;
2517
+ },
2518
+ {}
2519
+ );
2520
+ const objIds = assetNames.map((assetName) => {
2521
+ if (!FlashLoanFeeObjectMap[assetName]) {
2522
+ missingAssets.push(assetName);
2523
+ return null;
2524
+ } else {
2525
+ return FlashLoanFeeObjectMap[assetName];
2526
+ }
2527
+ }).filter((t) => !!t);
2528
+ const flashloanFeeObjects = await query.cache.queryGetObjects(objIds, {
2529
+ showContent: true
2530
+ });
2531
+ if (missingAssets.length > 0) {
2532
+ const marketObjectId = query.address.get("core.market");
2533
+ const marketObjectRes = await query.cache.queryGetObject(marketObjectId, {
2534
+ showContent: true
2535
+ });
2536
+ if (marketObjectRes.data?.content?.dataType !== "moveObject")
2537
+ throw new Error("Failed to get market object");
2538
+ const vault = marketObjectRes.data.content.fields.vault;
2539
+ const flashloanFeesTableId = vault.fields.flash_loan_fees.fields.table.fields.id.id;
2540
+ const balanceSheetDynamicFields = await query.cache.queryGetDynamicFields({
2541
+ parentId: flashloanFeesTableId,
2542
+ limit: 50
2543
+ });
2544
+ const dynamicFieldObjectIds = balanceSheetDynamicFields.data.filter((field) => {
2545
+ const assetType = field.name.value.name;
2546
+ return !!assetTypeMap[assetType];
2547
+ }).map((field) => field.objectId);
2548
+ flashloanFeeObjects.push(
2549
+ ...await query.cache.queryGetObjects(dynamicFieldObjectIds, {
2550
+ showContent: true
2551
+ })
2552
+ );
2553
+ }
2554
+ return flashloanFeeObjects.reduce(
2555
+ (prev, curr) => {
2556
+ if (curr.content?.dataType === "moveObject") {
2557
+ const objectFields = curr.content.fields;
2558
+ const assetType = curr.content.fields.name.fields.name;
2559
+ const feeNumerator = +objectFields.value;
2560
+ prev[assetTypeMap[assetType]] = feeNumerator / FEE_RATE;
2561
+ }
2562
+ return prev;
2563
+ },
2564
+ {}
2565
+ );
2566
+ };
2492
2567
 
2493
2568
  // src/queries/spoolQuery.ts
2494
2569
  var import_utils4 = require("@mysten/sui.js/utils");
@@ -3617,7 +3692,7 @@ var getVescaKeys = async (query, ownerAddress) => {
3617
3692
  let hasNextPage = false;
3618
3693
  let nextCursor = null;
3619
3694
  do {
3620
- const paginatedKeyObjectsResponse = await query.suiKit.client().getOwnedObjects({
3695
+ const paginatedKeyObjectsResponse = await query.cache.queryGetOwnedObjects({
3621
3696
  owner,
3622
3697
  filter: {
3623
3698
  StructType: veScaKeyType
@@ -4415,6 +4490,12 @@ var ScallopQuery = class {
4415
4490
  async getLoyaltyProgramInfos(veScaKey) {
4416
4491
  return await getLoyaltyProgramInformations(this, veScaKey);
4417
4492
  }
4493
+ /**
4494
+ * Get flashloan fee for specified assets
4495
+ */
4496
+ async getFlashLoanFees(assetCoinNames = [...SUPPORT_POOLS]) {
4497
+ return await getFlashLoanFees(this, assetCoinNames);
4498
+ }
4418
4499
  };
4419
4500
 
4420
4501
  // src/constants/pyth.ts
@@ -6972,6 +7053,7 @@ var Scallop = class {
6972
7053
  ADDRESSES_ID,
6973
7054
  API_BASE_URL,
6974
7055
  BORROW_FEE_PROTOCOL_ID,
7056
+ FlashLoanFeeObjectMap,
6975
7057
  IS_VE_SCA_TEST,
6976
7058
  MAX_LOCK_DURATION,
6977
7059
  MAX_LOCK_ROUNDS,