@scallop-io/sui-scallop-sdk 0.46.39 → 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
 
@@ -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");
@@ -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,